[{"data":1,"prerenderedAt":173088},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mo-fa-ming-ling-mprun":3,"wiki-doc-nav":130},{"id":4,"title":5,"body":6,"description":122,"extension":123,"meta":124,"navigation":125,"path":126,"seo":127,"stem":128,"__hash__":129},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":8,"toc":120},"minimark",[9,13,17,20,23,26,29,32,35,38,41,44,47,50,53,60,63,66,116],[10,11,5],"h1",{"id":12},"_20魔法命令mprun",[14,15,16],"p",{},"逐行分析数据内存的使用情况",[14,18,19],{},"语法格式：",[14,21,22],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,24,25],{},"分析结果列如下：",[14,27,28],{},"Line行号",[14,30,31],{},"Mem usage内存使用大小",[14,33,34],{},"increment内存增量",[14,36,37],{},"Line content代码内容",[14,39,40],{},"补充说明：",[14,42,43],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,45,46],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,48,49],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,51,52],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,54,55],{},[56,57],"img",{"alt":58,"src":59},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,61,62],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,64,65],{},"这时候需要重新加载模块",[67,68,72],"pre",{"className":69,"code":70,"language":71,"meta":58,"style":58},"language-python shiki shiki-themes github-light github-dark","#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n","python",[73,74,75,84,95,101],"code",{"__ignoreMap":58},[76,77,80],"span",{"class":78,"line":79},"line",1,[76,81,83],{"class":82},"sJ8bj","#重新加载模块\n",[76,85,87,91],{"class":78,"line":86},2,[76,88,90],{"class":89},"szBVR","import",[76,92,94],{"class":93},"sVt8B"," importlib\n",[76,96,98],{"class":78,"line":97},3,[76,99,100],{"class":93},"importlib.reload(mprun_test)\n",[76,102,104,107,110,113],{"class":78,"line":103},4,[76,105,106],{"class":89},"%",[76,108,109],{"class":93},"mprun ",[76,111,112],{"class":89},"-",[76,114,115],{"class":93},"f mprun_test.fun_test mprun_test.fun_test()\n",[117,118,119],"style",{},"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":58,"searchDepth":86,"depth":86,"links":121},[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":5,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",[131,5234,6342,7762,10751,12102,13591,14680,23443,23455,24054,24080,24204,24445,24510,24528,24541,24588,24712,24881,25080,25260,25465,25601,25696,25733,25746,26056,26797,27505,27526,28546,30177,30328,30341,30353,30651,50463,50478,50495,50528,53400,76748,92893,92914,93027,93148,93918,94581,94942,94980,95086,95186,95229,95255,95315,96969,97042,97067,97558,98058,99138,99421,100163,100665,100677,102693,104357,105860,107558,109475,111394,113416,116886,117318,117781,118530,121474,121822,121844,122200,125507,125519,125922,125945,126092,126259,126464,126765,127322,127979,129910,131508,132157,133651,135082,136317,138011,139763,142173,142289,143224,143435,144320,145555,145783,145796,146951,149363,151731,155052,157529,159173,160950,162963,166015,168195,170722,172916],{"id":132,"title":133,"body":134,"description":58,"extension":123,"meta":5229,"navigation":125,"path":5230,"seo":5231,"stem":5232,"__hash__":5233},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":135,"toc":5201},[136,139,144,147,151,164,168,173,176,179,182,185,188,216,220,223,226,229,232,284,288,307,309,323,326,334,337,1198,1205,1222,1226,1315,1319,1325,1414,1418,1456,1460,1524,1528,1532,1538,1549,1553,1558,1562,1567,1571,1576,1580,1584,1589,1859,1864,2002,2007,2264,2267,2275,2279,2284,2387,2390,2696,2705,2806,2809,2812,2815,2818,3078,3083,3223,3226,3405,3408,3536,3539,3691,3695,3700,3703,3714,3722,3725,3832,3836,3840,3845,3895,3900,3905,3929,3934,3987,3990,3995,4172,4177,4462,4467,4864,4868,4873,4930,4935,4943,4946,5086,5089,5198],[10,137,133],{"id":138},"_1基础入门",[140,141,143],"h2",{"id":142},"_11注释","1.1注释",[14,145,146],{},"\u002F\u002F或者\u002F* *\u002F",[140,148,150],{"id":149},"_12命名","1.2命名",[152,153,154,158,161],"ol",{},[155,156,157],"li",{},"字母数字下划线",[155,159,160],{},"开头必须是字母或_",[155,162,163],{},"不能使用关键词",[140,165,167],{"id":166},"_13数据类型","1.3数据类型",[169,170,172],"h3",{"id":171},"_131整形","1.3.1整形",[14,174,175],{},"short 短整形 2",[14,177,178],{},"int 整形 4",[14,180,181],{},"long 长整形 win4 linux32位4 linux64位8",[14,183,184],{},"long long 长长整形 8",[14,186,187],{},"利用sizeof可以求数据类型占用的内存空间大小",[67,189,193],{"className":190,"code":191,"language":192,"meta":58,"style":58},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[73,194,195,209],{"__ignoreMap":58},[76,196,197,200,203,206],{"class":78,"line":79},[76,198,199],{"class":89},"sizeof",[76,201,202],{"class":93},"(",[76,204,205],{"class":89},"int",[76,207,208],{"class":93},")\n",[76,210,211,213],{"class":78,"line":86},[76,212,199],{"class":89},[76,214,215],{"class":93},"(num)\n",[169,217,219],{"id":218},"_132浮点型","1.3.2浮点型",[14,221,222],{},"float 单精度 4节 7位有效数字",[14,224,225],{},"double 双精度 8节 15-16有效数字",[14,227,228],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,230,231],{},"注意点：",[67,233,235],{"className":190,"code":234,"language":192,"meta":58,"style":58},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[73,236,237,261],{"__ignoreMap":58},[76,238,239,242,245,248,252,255,258],{"class":78,"line":79},[76,240,241],{"class":89},"float",[76,243,244],{"class":93}," f1",[76,246,247],{"class":89},"=",[76,249,251],{"class":250},"sj4cs","3.14",[76,253,254],{"class":89},"f",[76,256,257],{"class":93},";",[76,259,260],{"class":82}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[76,262,263,265,268,270,273,276,279,281],{"class":78,"line":86},[76,264,241],{"class":89},[76,266,267],{"class":93}," f2",[76,269,247],{"class":89},[76,271,272],{"class":250},"3",[76,274,275],{"class":89},"e",[76,277,278],{"class":250},"2",[76,280,257],{"class":93},[76,282,283],{"class":82}," \u002F\u002F科学记数法\n",[169,285,287],{"id":286},"_133字符型","1.3.3字符型",[67,289,291],{"className":190,"code":290,"language":192,"meta":58,"style":58},"char ch='a'\n",[73,292,293],{"__ignoreMap":58},[76,294,295,298,301,303],{"class":78,"line":79},[76,296,297],{"class":89},"char",[76,299,300],{"class":93}," ch",[76,302,247],{"class":89},[76,304,306],{"class":305},"sZZnC","'a'\n",[14,308,231],{},[152,310,311,314,317,320],{},[155,312,313],{},"在显示字符型变量时，只能单引号，双引号x",[155,315,316],{},"单引号内只能一个字符，不能字符串",[155,318,319],{},"c和c++字符型变量只占用一个字符",[155,321,322],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,324,325],{},"ASCII码大致由以下两部分组成：",[152,327,328,331],{},[155,329,330],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[155,332,333],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,335,336],{},"ASCII码表格：",[338,339,340,384],"table",{},[341,342,343],"thead",{},[344,345,346,354,359,363,368,372,376,380],"tr",{},[347,348,349,353],"th",{},[350,351,352],"strong",{},"ASCII","值",[347,355,356],{},[350,357,358],{},"控制字符",[347,360,361,353],{},[350,362,352],{},[347,364,365],{},[350,366,367],{},"字符",[347,369,370,353],{},[350,371,352],{},[347,373,374],{},[350,375,367],{},[347,377,378,353],{},[350,379,352],{},[347,381,382],{},[350,383,367],{},[385,386,387,414,440,465,490,516,540,565,591,616,642,668,694,719,744,770,796,820,845,870,895,920,945,970,995,1020,1045,1071,1096,1121,1146,1172],"tbody",{},[344,388,389,393,396,399,402,405,408,411],{},[390,391,392],"td",{},"0",[390,394,395],{},"NUT",[390,397,398],{},"32",[390,400,401],{},"(space)",[390,403,404],{},"64",[390,406,407],{},"@",[390,409,410],{},"96",[390,412,413],{},"、",[344,415,416,419,422,425,428,431,434,437],{},[390,417,418],{},"1",[390,420,421],{},"SOH",[390,423,424],{},"33",[390,426,427],{},"!",[390,429,430],{},"65",[390,432,433],{},"A",[390,435,436],{},"97",[390,438,439],{},"a",[344,441,442,444,447,450,453,456,459,462],{},[390,443,278],{},[390,445,446],{},"STX",[390,448,449],{},"34",[390,451,452],{},"\"",[390,454,455],{},"66",[390,457,458],{},"B",[390,460,461],{},"98",[390,463,464],{},"b",[344,466,467,469,472,475,478,481,484,487],{},[390,468,272],{},[390,470,471],{},"ETX",[390,473,474],{},"35",[390,476,477],{},"#",[390,479,480],{},"67",[390,482,483],{},"C",[390,485,486],{},"99",[390,488,489],{},"c",[344,491,492,495,498,501,504,507,510,513],{},[390,493,494],{},"4",[390,496,497],{},"EOT",[390,499,500],{},"36",[390,502,503],{},"$",[390,505,506],{},"68",[390,508,509],{},"D",[390,511,512],{},"100",[390,514,515],{},"d",[344,517,518,521,524,527,529,532,535,538],{},[390,519,520],{},"5",[390,522,523],{},"ENQ",[390,525,526],{},"37",[390,528,106],{},[390,530,531],{},"69",[390,533,534],{},"E",[390,536,537],{},"101",[390,539,275],{},[344,541,542,545,548,551,554,557,560,563],{},[390,543,544],{},"6",[390,546,547],{},"ACK",[390,549,550],{},"38",[390,552,553],{},"&",[390,555,556],{},"70",[390,558,559],{},"F",[390,561,562],{},"102",[390,564,254],{},[344,566,567,570,573,576,579,582,585,588],{},[390,568,569],{},"7",[390,571,572],{},"BEL",[390,574,575],{},"39",[390,577,578],{},",",[390,580,581],{},"71",[390,583,584],{},"G",[390,586,587],{},"103",[390,589,590],{},"g",[344,592,593,596,599,602,604,607,610,613],{},[390,594,595],{},"8",[390,597,598],{},"BS",[390,600,601],{},"40",[390,603,202],{},[390,605,606],{},"72",[390,608,609],{},"H",[390,611,612],{},"104",[390,614,615],{},"h",[344,617,618,621,624,627,630,633,636,639],{},[390,619,620],{},"9",[390,622,623],{},"HT",[390,625,626],{},"41",[390,628,629],{},")",[390,631,632],{},"73",[390,634,635],{},"I",[390,637,638],{},"105",[390,640,641],{},"i",[344,643,644,647,650,653,656,659,662,665],{},[390,645,646],{},"10",[390,648,649],{},"LF",[390,651,652],{},"42",[390,654,655],{},"*",[390,657,658],{},"74",[390,660,661],{},"J",[390,663,664],{},"106",[390,666,667],{},"j",[344,669,670,673,676,679,682,685,688,691],{},[390,671,672],{},"11",[390,674,675],{},"VT",[390,677,678],{},"43",[390,680,681],{},"+",[390,683,684],{},"75",[390,686,687],{},"K",[390,689,690],{},"107",[390,692,693],{},"k",[344,695,696,699,702,705,707,710,713,716],{},[390,697,698],{},"12",[390,700,701],{},"FF",[390,703,704],{},"44",[390,706,578],{},[390,708,709],{},"76",[390,711,712],{},"L",[390,714,715],{},"108",[390,717,718],{},"l",[344,720,721,724,727,730,732,735,738,741],{},[390,722,723],{},"13",[390,725,726],{},"CR",[390,728,729],{},"45",[390,731,112],{},[390,733,734],{},"77",[390,736,737],{},"M",[390,739,740],{},"109",[390,742,743],{},"m",[344,745,746,749,752,755,758,761,764,767],{},[390,747,748],{},"14",[390,750,751],{},"SO",[390,753,754],{},"46",[390,756,757],{},".",[390,759,760],{},"78",[390,762,763],{},"N",[390,765,766],{},"110",[390,768,769],{},"n",[344,771,772,775,778,781,784,787,790,793],{},[390,773,774],{},"15",[390,776,777],{},"SI",[390,779,780],{},"47",[390,782,783],{},"\u002F",[390,785,786],{},"79",[390,788,789],{},"O",[390,791,792],{},"111",[390,794,795],{},"o",[344,797,798,801,804,807,809,812,815,818],{},[390,799,800],{},"16",[390,802,803],{},"DLE",[390,805,806],{},"48",[390,808,392],{},[390,810,811],{},"80",[390,813,814],{},"P",[390,816,817],{},"112",[390,819,14],{},[344,821,822,825,828,831,833,836,839,842],{},[390,823,824],{},"17",[390,826,827],{},"DCI",[390,829,830],{},"49",[390,832,418],{},[390,834,835],{},"81",[390,837,838],{},"Q",[390,840,841],{},"113",[390,843,844],{},"q",[344,846,847,850,853,856,858,861,864,867],{},[390,848,849],{},"18",[390,851,852],{},"DC2",[390,854,855],{},"50",[390,857,278],{},[390,859,860],{},"82",[390,862,863],{},"R",[390,865,866],{},"114",[390,868,869],{},"r",[344,871,872,875,878,881,883,886,889,892],{},[390,873,874],{},"19",[390,876,877],{},"DC3",[390,879,880],{},"51",[390,882,272],{},[390,884,885],{},"83",[390,887,888],{},"S",[390,890,891],{},"115",[390,893,894],{},"s",[344,896,897,900,903,906,908,911,914,917],{},[390,898,899],{},"20",[390,901,902],{},"DC4",[390,904,905],{},"52",[390,907,494],{},[390,909,910],{},"84",[390,912,913],{},"T",[390,915,916],{},"116",[390,918,919],{},"t",[344,921,922,925,928,931,933,936,939,942],{},[390,923,924],{},"21",[390,926,927],{},"NAK",[390,929,930],{},"53",[390,932,520],{},[390,934,935],{},"85",[390,937,938],{},"U",[390,940,941],{},"117",[390,943,944],{},"u",[344,946,947,950,953,956,958,961,964,967],{},[390,948,949],{},"22",[390,951,952],{},"SYN",[390,954,955],{},"54",[390,957,544],{},[390,959,960],{},"86",[390,962,963],{},"V",[390,965,966],{},"118",[390,968,969],{},"v",[344,971,972,975,978,981,983,986,989,992],{},[390,973,974],{},"23",[390,976,977],{},"TB",[390,979,980],{},"55",[390,982,569],{},[390,984,985],{},"87",[390,987,988],{},"W",[390,990,991],{},"119",[390,993,994],{},"w",[344,996,997,1000,1003,1006,1008,1011,1014,1017],{},[390,998,999],{},"24",[390,1001,1002],{},"CAN",[390,1004,1005],{},"56",[390,1007,595],{},[390,1009,1010],{},"88",[390,1012,1013],{},"X",[390,1015,1016],{},"120",[390,1018,1019],{},"x",[344,1021,1022,1025,1028,1031,1033,1036,1039,1042],{},[390,1023,1024],{},"25",[390,1026,1027],{},"EM",[390,1029,1030],{},"57",[390,1032,620],{},[390,1034,1035],{},"89",[390,1037,1038],{},"Y",[390,1040,1041],{},"121",[390,1043,1044],{},"y",[344,1046,1047,1050,1053,1056,1059,1062,1065,1068],{},[390,1048,1049],{},"26",[390,1051,1052],{},"SUB",[390,1054,1055],{},"58",[390,1057,1058],{},":",[390,1060,1061],{},"90",[390,1063,1064],{},"Z",[390,1066,1067],{},"122",[390,1069,1070],{},"z",[344,1072,1073,1076,1079,1082,1084,1087,1090,1093],{},[390,1074,1075],{},"27",[390,1077,1078],{},"ESC",[390,1080,1081],{},"59",[390,1083,257],{},[390,1085,1086],{},"91",[390,1088,1089],{},"[",[390,1091,1092],{},"123",[390,1094,1095],{},"{",[344,1097,1098,1101,1104,1107,1110,1113,1115,1118],{},[390,1099,1100],{},"28",[390,1102,1103],{},"FS",[390,1105,1106],{},"60",[390,1108,1109],{},"\u003C",[390,1111,1112],{},"92",[390,1114,783],{},[390,1116,1117],{},"124",[390,1119,1120],{},"|",[344,1122,1123,1126,1129,1132,1134,1137,1140,1143],{},[390,1124,1125],{},"29",[390,1127,1128],{},"GS",[390,1130,1131],{},"61",[390,1133,247],{},[390,1135,1136],{},"93",[390,1138,1139],{},"]",[390,1141,1142],{},"125",[390,1144,1145],{},"}",[344,1147,1148,1151,1154,1157,1160,1163,1166,1169],{},[390,1149,1150],{},"30",[390,1152,1153],{},"RS",[390,1155,1156],{},"62",[390,1158,1159],{},">",[390,1161,1162],{},"94",[390,1164,1165],{},"^",[390,1167,1168],{},"126",[390,1170,1171],{},"`",[344,1173,1174,1177,1180,1183,1186,1189,1192,1195],{},[390,1175,1176],{},"31",[390,1178,1179],{},"US",[390,1181,1182],{},"63",[390,1184,1185],{},"?",[390,1187,1188],{},"95",[390,1190,1191],{},"_",[390,1193,1194],{},"127",[390,1196,1197],{},"DEL",[14,1199,1200,1201,1204],{},"ASCII 码大致由以下",[350,1202,1203],{},"两部分组","成：",[1206,1207,1208,1215],"ul",{},[155,1209,1210,1211,1214],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[350,1212,1213],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[155,1216,1217,1218,1221],{},"ASCII 打印字符：数字 ",[350,1219,1220],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[169,1223,1225],{"id":1224},"_134转义字符","1.3.4转义字符",[67,1227,1229],{"className":190,"code":1228,"language":192,"meta":58,"style":58},"\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",[73,1230,1231,1236,1252,1266,1271,1285,1291],{"__ignoreMap":58},[76,1232,1233],{"class":78,"line":79},[76,1234,1235],{"class":82},"\u002F\u002F换行符\n",[76,1237,1238,1241,1244,1247,1249],{"class":78,"line":86},[76,1239,1240],{"class":93},"cout ",[76,1242,1243],{"class":89},"\u003C\u003C",[76,1245,1246],{"class":305},"\"hello world\u002Fn\"",[76,1248,257],{"class":93},[76,1250,1251],{"class":82}," \u002F\u002F就等同于如下：\n",[76,1253,1254,1256,1258,1261,1263],{"class":78,"line":97},[76,1255,1240],{"class":93},[76,1257,1243],{"class":89},[76,1259,1260],{"class":305},"\"hello world\"",[76,1262,1243],{"class":89},[76,1264,1265],{"class":93},"endl;\n",[76,1267,1268],{"class":78,"line":103},[76,1269,1270],{"class":82},"\u002F\u002F反斜杠\n",[76,1272,1274,1276,1278,1281,1283],{"class":78,"line":1273},5,[76,1275,1240],{"class":93},[76,1277,1243],{"class":89},[76,1279,1280],{"class":305},"\"\u002F\u002F\"",[76,1282,1243],{"class":89},[76,1284,1265],{"class":93},[76,1286,1288],{"class":78,"line":1287},6,[76,1289,1290],{"class":82},"\u002F\u002F水平制表符\n",[76,1292,1294,1296,1298,1301,1304,1307,1309,1312],{"class":78,"line":1293},7,[76,1295,1240],{"class":93},[76,1297,1243],{"class":89},[76,1299,1300],{"class":305},"\"aaaa",[76,1302,1303],{"class":250},"\\t",[76,1305,1306],{"class":305},"helloworld\"",[76,1308,1243],{"class":89},[76,1310,1311],{"class":93},"endl;",[76,1313,1314],{"class":82}," \u002F\u002F输出窗口时有对齐效果\n",[169,1316,1318],{"id":1317},"_135字符串型","1.3.5字符串型",[14,1320,1321,1322,1324],{},"char 变量名",[76,1323],{},"=\"字符串值\"",[67,1326,1328],{"className":190,"code":1327,"language":192,"meta":58,"style":58},"\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",[73,1329,1330,1335,1340,1345,1350,1364,1377,1382,1388,1400],{"__ignoreMap":58},[76,1331,1332],{"class":78,"line":79},[76,1333,1334],{"class":82},"\u002F\u002Fc风格字符串\n",[76,1336,1337],{"class":78,"line":86},[76,1338,1339],{"class":82},"\u002F\u002F注意事项：\n",[76,1341,1342],{"class":78,"line":97},[76,1343,1344],{"class":82},"\u002F\u002F1.char字符串名[]\n",[76,1346,1347],{"class":78,"line":103},[76,1348,1349],{"class":82},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[76,1351,1352,1354,1357,1359,1361],{"class":78,"line":1273},[76,1353,297],{"class":89},[76,1355,1356],{"class":93}," str[]",[76,1358,247],{"class":89},[76,1360,1260],{"class":305},[76,1362,1363],{"class":93},";\n",[76,1365,1366,1368,1370,1373,1375],{"class":78,"line":1287},[76,1367,1240],{"class":93},[76,1369,1243],{"class":89},[76,1371,1372],{"class":93},"str",[76,1374,1243],{"class":89},[76,1376,1265],{"class":93},[76,1378,1379],{"class":78,"line":1293},[76,1380,1381],{"class":82},"\u002F\u002Fc++风格字符串\n",[76,1383,1385],{"class":78,"line":1384},8,[76,1386,1387],{"class":82},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[76,1389,1391,1394,1396,1398],{"class":78,"line":1390},9,[76,1392,1393],{"class":93},"string str2",[76,1395,247],{"class":89},[76,1397,1260],{"class":305},[76,1399,1363],{"class":93},[76,1401,1403,1405,1407,1410,1412],{"class":78,"line":1402},10,[76,1404,1240],{"class":93},[76,1406,1243],{"class":89},[76,1408,1409],{"class":93},"str2",[76,1411,1243],{"class":89},[76,1413,1265],{"class":93},[169,1415,1417],{"id":1416},"_136布尔类型bool","1.3.6布尔类型bool",[67,1419,1421],{"className":190,"code":1420,"language":192,"meta":58,"style":58},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[73,1422,1423,1438],{"__ignoreMap":58},[76,1424,1425,1428,1431,1433,1436],{"class":78,"line":79},[76,1426,1427],{"class":89},"bool",[76,1429,1430],{"class":93}," flag",[76,1432,247],{"class":89},[76,1434,1435],{"class":250},"true",[76,1437,1363],{"class":93},[76,1439,1440,1443,1446,1449,1451,1453],{"class":78,"line":86},[76,1441,1442],{"class":93},"cout",[76,1444,1445],{"class":89},"\u003C\u003Csizeof",[76,1447,1448],{"class":93},"(flag)",[76,1450,1243],{"class":89},[76,1452,1311],{"class":93},[76,1454,1455],{"class":82}," \u002F\u002F查看布尔占内存空间\n",[140,1457,1459],{"id":1458},"_14键盘输入cin","1.4键盘输入cin",[67,1461,1463],{"className":190,"code":1462,"language":192,"meta":58,"style":58},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[73,1464,1465,1478,1495,1506],{"__ignoreMap":58},[76,1466,1467,1469,1472,1474,1476],{"class":78,"line":79},[76,1468,205],{"class":89},[76,1470,1471],{"class":93}," a",[76,1473,247],{"class":89},[76,1475,392],{"class":250},[76,1477,1363],{"class":93},[76,1479,1480,1482,1484,1487,1489,1491,1493],{"class":78,"line":86},[76,1481,1442],{"class":93},[76,1483,1243],{"class":89},[76,1485,1486],{"class":305},"\"请给整型变量a赋值\"",[76,1488,1243],{"class":89},[76,1490,439],{"class":93},[76,1492,1243],{"class":89},[76,1494,1265],{"class":93},[76,1496,1497,1500,1503],{"class":78,"line":97},[76,1498,1499],{"class":93},"cin ",[76,1501,1502],{"class":89},">>",[76,1504,1505],{"class":93}," a;\n",[76,1507,1508,1510,1512,1515,1518,1520,1522],{"class":78,"line":103},[76,1509,1240],{"class":93},[76,1511,1243],{"class":89},[76,1513,1514],{"class":305}," \"整型变量a=\"",[76,1516,1517],{"class":89}," \u003C\u003C",[76,1519,439],{"class":93},[76,1521,1243],{"class":89},[76,1523,1265],{"class":93},[140,1525,1527],{"id":1526},"_15运算符","1.5运算符",[169,1529,1531],{"id":1530},"_151算术运算符","1.5.1算术运算符",[14,1533,1534,1537],{},[56,1535],{"alt":58,"src":1536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[152,1539,1540,1543,1546],{},[155,1541,1542],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[155,1544,1545],{},"两个小数不可以做取模运算",[155,1547,1548],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[169,1550,1552],{"id":1551},"_152赋值运算符","1.5.2赋值运算符",[14,1554,1555],{},[56,1556],{"alt":58,"src":1557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[169,1559,1561],{"id":1560},"_153比较运算符","1.5.3比较运算符",[14,1563,1564],{},[56,1565],{"alt":58,"src":1566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[169,1568,1570],{"id":1569},"_154逻辑运算符","1.5.4逻辑运算符",[14,1572,1573],{},[56,1574],{"alt":58,"src":1575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[140,1577,1579],{"id":1578},"_16程序流程结构","1.6程序流程结构",[169,1581,1583],{"id":1582},"_161选择结构","1.6.1选择结构",[152,1585,1586],{},[155,1587,1588],{},"if语句\n单行、多行、多条件if语句",[67,1590,1592],{"className":190,"code":1591,"language":192,"meta":58,"style":58},"\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",[73,1593,1594,1599,1614,1619,1633,1638,1643,1652,1665,1669,1682,1687,1693,1698,1712,1717,1723,1744,1749,1763,1768,1797,1802,1819,1824,1829,1834,1848,1853],{"__ignoreMap":58},[76,1595,1596],{"class":78,"line":79},[76,1597,1598],{"class":82},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[76,1600,1601,1604,1607,1609,1612],{"class":78,"line":86},[76,1602,1603],{"class":89},"if",[76,1605,1606],{"class":93},"(score",[76,1608,1159],{"class":89},[76,1610,1611],{"class":250},"600",[76,1613,208],{"class":93},[76,1615,1616],{"class":78,"line":97},[76,1617,1618],{"class":93},"{\n",[76,1620,1621,1624,1626,1629,1631],{"class":78,"line":103},[76,1622,1623],{"class":93},"    cout",[76,1625,1243],{"class":89},[76,1627,1628],{"class":305},"'这是单行if语句'",[76,1630,1243],{"class":89},[76,1632,1265],{"class":93},[76,1634,1635],{"class":78,"line":1273},[76,1636,1637],{"class":93},"}\n",[76,1639,1640],{"class":78,"line":1287},[76,1641,1642],{"class":82},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[76,1644,1645,1647,1649],{"class":78,"line":1293},[76,1646,1499],{"class":93},[76,1648,1502],{"class":89},[76,1650,1651],{"class":93}," score\n",[76,1653,1654,1656,1658,1661,1663],{"class":78,"line":1384},[76,1655,1603],{"class":89},[76,1657,1606],{"class":93},[76,1659,1660],{"class":89},"\u003C=",[76,1662,1611],{"class":250},[76,1664,208],{"class":93},[76,1666,1667],{"class":78,"line":1390},[76,1668,1618],{"class":93},[76,1670,1671,1673,1675,1678,1680],{"class":78,"line":1402},[76,1672,1623],{"class":93},[76,1674,1502],{"class":89},[76,1676,1677],{"class":305},"\"小于等于600\"",[76,1679,1243],{"class":89},[76,1681,1265],{"class":93},[76,1683,1685],{"class":78,"line":1684},11,[76,1686,1637],{"class":93},[76,1688,1690],{"class":78,"line":1689},12,[76,1691,1692],{"class":89},"else\n",[76,1694,1696],{"class":78,"line":1695},13,[76,1697,1618],{"class":93},[76,1699,1701,1703,1705,1708,1710],{"class":78,"line":1700},14,[76,1702,1623],{"class":93},[76,1704,1502],{"class":89},[76,1706,1707],{"class":305},"\"大于600\"",[76,1709,1502],{"class":89},[76,1711,1265],{"class":93},[76,1713,1715],{"class":78,"line":1714},15,[76,1716,1637],{"class":93},[76,1718,1720],{"class":78,"line":1719},16,[76,1721,1722],{"class":82},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[76,1724,1726,1728,1731,1733,1735,1738,1740,1742],{"class":78,"line":1725},17,[76,1727,1603],{"class":89},[76,1729,1730],{"class":93}," (",[76,1732,392],{"class":250},[76,1734,1109],{"class":89},[76,1736,1737],{"class":93},"num",[76,1739,1109],{"class":89},[76,1741,512],{"class":250},[76,1743,208],{"class":93},[76,1745,1747],{"class":78,"line":1746},18,[76,1748,1618],{"class":93},[76,1750,1752,1754,1756,1759,1761],{"class":78,"line":1751},19,[76,1753,1623],{"class":93},[76,1755,1243],{"class":89},[76,1757,1758],{"class":305},"\"小于100\"",[76,1760,1243],{"class":89},[76,1762,1265],{"class":93},[76,1764,1766],{"class":78,"line":1765},20,[76,1767,1637],{"class":93},[76,1769,1771,1774,1777,1780,1783,1785,1788,1790,1792,1795],{"class":78,"line":1770},21,[76,1772,1773],{"class":89},"else",[76,1775,1776],{"class":89}," if",[76,1778,1779],{"class":93}," (nmu",[76,1781,1782],{"class":89},">=",[76,1784,512],{"class":250},[76,1786,1787],{"class":89},"&&",[76,1789,1737],{"class":93},[76,1791,1109],{"class":89},[76,1793,1794],{"class":250},"200",[76,1796,208],{"class":93},[76,1798,1800],{"class":78,"line":1799},22,[76,1801,1618],{"class":93},[76,1803,1805,1807,1809,1812,1814,1816],{"class":78,"line":1804},23,[76,1806,1623],{"class":93},[76,1808,1243],{"class":89},[76,1810,1811],{"class":305},"\"不小于100且小于200\"",[76,1813,1243],{"class":89},[76,1815,1311],{"class":93},[76,1817,1818],{"class":82}," \u002F\u002F可以无限else if,python中是elif：\n",[76,1820,1822],{"class":78,"line":1821},24,[76,1823,1637],{"class":93},[76,1825,1827],{"class":78,"line":1826},25,[76,1828,1692],{"class":89},[76,1830,1832],{"class":78,"line":1831},26,[76,1833,1618],{"class":93},[76,1835,1837,1839,1841,1844,1846],{"class":78,"line":1836},27,[76,1838,1623],{"class":93},[76,1840,1243],{"class":89},[76,1842,1843],{"class":305},"\"不小于200\"",[76,1845,1243],{"class":89},[76,1847,1265],{"class":93},[76,1849,1851],{"class":78,"line":1850},28,[76,1852,1637],{"class":93},[76,1854,1856],{"class":78,"line":1855},29,[76,1857,1858],{"class":82},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[152,1860,1861],{"start":86},[155,1862,1863],{},"三目运算符",[67,1865,1867],{"className":190,"code":1866,"language":192,"meta":58,"style":58},"\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",[73,1868,1869,1874,1879,1905,1927,1944,1949,1972,1987],{"__ignoreMap":58},[76,1870,1871],{"class":78,"line":79},[76,1872,1873],{"class":82},"\u002F\u002F创建三个变量a,b,c\n",[76,1875,1876],{"class":78,"line":86},[76,1877,1878],{"class":82},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[76,1880,1881,1883,1885,1887,1889,1892,1894,1896,1899,1901,1903],{"class":78,"line":97},[76,1882,205],{"class":89},[76,1884,1471],{"class":93},[76,1886,247],{"class":89},[76,1888,899],{"class":250},[76,1890,1891],{"class":93},",b",[76,1893,247],{"class":89},[76,1895,646],{"class":250},[76,1897,1898],{"class":93},",c",[76,1900,247],{"class":89},[76,1902,392],{"class":250},[76,1904,1363],{"class":93},[76,1906,1907,1909,1911,1914,1916,1918,1920,1922,1924],{"class":78,"line":103},[76,1908,489],{"class":93},[76,1910,247],{"class":89},[76,1912,1913],{"class":93},"(a",[76,1915,1159],{"class":89},[76,1917,464],{"class":93},[76,1919,1185],{"class":89},[76,1921,439],{"class":93},[76,1923,1058],{"class":89},[76,1925,1926],{"class":93},"b)\n",[76,1928,1929,1931,1933,1936,1938,1940,1942],{"class":78,"line":1273},[76,1930,1442],{"class":93},[76,1932,1243],{"class":89},[76,1934,1935],{"class":305},"\"c=\"",[76,1937,1243],{"class":89},[76,1939,489],{"class":93},[76,1941,1243],{"class":89},[76,1943,1265],{"class":93},[76,1945,1946],{"class":78,"line":1287},[76,1947,1948],{"class":82},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[76,1950,1951,1953,1955,1957,1959,1961,1963,1966,1968,1970],{"class":78,"line":1293},[76,1952,1913],{"class":93},[76,1954,1159],{"class":89},[76,1956,464],{"class":93},[76,1958,1185],{"class":89},[76,1960,439],{"class":93},[76,1962,1058],{"class":89},[76,1964,1965],{"class":93},"b)",[76,1967,247],{"class":89},[76,1969,512],{"class":250},[76,1971,1363],{"class":93},[76,1973,1974,1976,1978,1980,1982,1984],{"class":78,"line":1384},[76,1975,1442],{"class":93},[76,1977,1243],{"class":89},[76,1979,439],{"class":93},[76,1981,1243],{"class":89},[76,1983,1311],{"class":93},[76,1985,1986],{"class":82}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[76,1988,1989,1991,1993,1995,1997,1999],{"class":78,"line":1390},[76,1990,1442],{"class":93},[76,1992,1243],{"class":89},[76,1994,464],{"class":93},[76,1996,1243],{"class":89},[76,1998,1311],{"class":93},[76,2000,2001],{"class":82}," \u002F\u002F10   a>b,b还是原值\n",[152,2003,2004],{"start":97},[155,2005,2006],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[67,2008,2010],{"className":190,"code":2009,"language":192,"meta":58,"style":58},"\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",[73,2011,2012,2017,2025,2039,2049,2053,2067,2080,2090,2098,2103,2128,2149,2171,2192,2214,2235,2255,2260],{"__ignoreMap":58},[76,2013,2014],{"class":78,"line":79},[76,2015,2016],{"class":82},"\u002F\u002F案例-电影打分\n",[76,2018,2019,2022],{"class":78,"line":86},[76,2020,2021],{"class":89},"#include",[76,2023,2024],{"class":305},"\u003Ciostream>\n",[76,2026,2027,2030,2033,2037],{"class":78,"line":97},[76,2028,2029],{"class":89},"using",[76,2031,2032],{"class":89}," namespace",[76,2034,2036],{"class":2035},"sScJk"," std",[76,2038,1363],{"class":93},[76,2040,2041,2043,2046],{"class":78,"line":103},[76,2042,205],{"class":89},[76,2044,2045],{"class":2035}," main",[76,2047,2048],{"class":93},"()\n",[76,2050,2051],{"class":78,"line":1273},[76,2052,1618],{"class":93},[76,2054,2055,2058,2061,2063,2065],{"class":78,"line":1287},[76,2056,2057],{"class":89},"    int",[76,2059,2060],{"class":93}," score",[76,2062,247],{"class":89},[76,2064,392],{"class":250},[76,2066,1363],{"class":93},[76,2068,2069,2071,2073,2076,2078],{"class":78,"line":1293},[76,2070,1623],{"class":93},[76,2072,1243],{"class":89},[76,2074,2075],{"class":305},"\"电影打分：\"",[76,2077,1243],{"class":89},[76,2079,1265],{"class":93},[76,2081,2082,2085,2087],{"class":78,"line":1384},[76,2083,2084],{"class":93},"    cin",[76,2086,1502],{"class":89},[76,2088,2089],{"class":93},"score;\n",[76,2091,2092,2095],{"class":78,"line":1390},[76,2093,2094],{"class":89},"    switch",[76,2096,2097],{"class":93},"(score)\n",[76,2099,2100],{"class":78,"line":1402},[76,2101,2102],{"class":93},"    {\n",[76,2104,2105,2108,2111,2114,2116,2119,2121,2123,2126],{"class":78,"line":1684},[76,2106,2107],{"class":89},"        case",[76,2109,2110],{"class":250}," 10",[76,2112,2113],{"class":93},":cout",[76,2115,1243],{"class":89},[76,2117,2118],{"class":305},"\"经典\"",[76,2120,1243],{"class":89},[76,2122,1311],{"class":93},[76,2124,2125],{"class":89},"break",[76,2127,1363],{"class":93},[76,2129,2130,2132,2135,2137,2139,2141,2143,2145,2147],{"class":78,"line":1689},[76,2131,2107],{"class":89},[76,2133,2134],{"class":250}," 9",[76,2136,2113],{"class":93},[76,2138,1243],{"class":89},[76,2140,2118],{"class":305},[76,2142,1243],{"class":89},[76,2144,1311],{"class":93},[76,2146,2125],{"class":89},[76,2148,1363],{"class":93},[76,2150,2151,2153,2156,2158,2160,2163,2165,2167,2169],{"class":78,"line":1695},[76,2152,2107],{"class":89},[76,2154,2155],{"class":250}," 8",[76,2157,2113],{"class":93},[76,2159,1243],{"class":89},[76,2161,2162],{"class":305},"\"非常好\"",[76,2164,1243],{"class":89},[76,2166,1311],{"class":93},[76,2168,2125],{"class":89},[76,2170,1363],{"class":93},[76,2172,2173,2175,2178,2180,2182,2184,2186,2188,2190],{"class":78,"line":1700},[76,2174,2107],{"class":89},[76,2176,2177],{"class":250}," 7",[76,2179,2113],{"class":93},[76,2181,1243],{"class":89},[76,2183,2162],{"class":305},[76,2185,1243],{"class":89},[76,2187,1311],{"class":93},[76,2189,2125],{"class":89},[76,2191,1363],{"class":93},[76,2193,2194,2196,2199,2201,2203,2206,2208,2210,2212],{"class":78,"line":1714},[76,2195,2107],{"class":89},[76,2197,2198],{"class":250}," 6",[76,2200,2113],{"class":93},[76,2202,1243],{"class":89},[76,2204,2205],{"class":305},"\"一般\"",[76,2207,1243],{"class":89},[76,2209,1311],{"class":93},[76,2211,2125],{"class":89},[76,2213,1363],{"class":93},[76,2215,2216,2218,2221,2223,2225,2227,2229,2231,2233],{"class":78,"line":1719},[76,2217,2107],{"class":89},[76,2219,2220],{"class":250}," 5",[76,2222,2113],{"class":93},[76,2224,1243],{"class":89},[76,2226,2205],{"class":305},[76,2228,1243],{"class":89},[76,2230,1311],{"class":93},[76,2232,2125],{"class":89},[76,2234,1363],{"class":93},[76,2236,2237,2240,2242,2244,2247,2249,2251,2253],{"class":78,"line":1725},[76,2238,2239],{"class":89},"        default",[76,2241,2113],{"class":93},[76,2243,1243],{"class":89},[76,2245,2246],{"class":305},"\"烂片\"",[76,2248,1243],{"class":89},[76,2250,1311],{"class":93},[76,2252,2125],{"class":89},[76,2254,1363],{"class":93},[76,2256,2257],{"class":78,"line":1746},[76,2258,2259],{"class":93},"    }\n",[76,2261,2262],{"class":78,"line":1751},[76,2263,1637],{"class":93},[14,2265,2266],{},"if和switch区别：",[1206,2268,2269,2272],{},[155,2270,2271],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[155,2273,2274],{},"switch优点：结构清晰，执行效率高",[169,2276,2278],{"id":2277},"_162循环结构","1.6.2循环结构",[152,2280,2281],{},[155,2282,2283],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[67,2285,2287],{"className":190,"code":2286,"language":192,"meta":58,"style":58},"\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",[73,2288,2289,2294,2302,2306,2319,2333,2337,2357,2367,2371,2383],{"__ignoreMap":58},[76,2290,2291],{"class":78,"line":79},[76,2292,2293],{"class":82},"\u002F\u002F打印0-9数字\n",[76,2295,2296,2298,2300],{"class":78,"line":86},[76,2297,205],{"class":89},[76,2299,2045],{"class":2035},[76,2301,2048],{"class":93},[76,2303,2304],{"class":78,"line":97},[76,2305,1618],{"class":93},[76,2307,2308,2310,2313,2315,2317],{"class":78,"line":103},[76,2309,2057],{"class":89},[76,2311,2312],{"class":93}," num",[76,2314,247],{"class":89},[76,2316,392],{"class":250},[76,2318,1363],{"class":93},[76,2320,2321,2324,2327,2329,2331],{"class":78,"line":1273},[76,2322,2323],{"class":89},"    while",[76,2325,2326],{"class":93},"(num",[76,2328,1109],{"class":89},[76,2330,646],{"class":250},[76,2332,208],{"class":93},[76,2334,2335],{"class":78,"line":1287},[76,2336,2102],{"class":93},[76,2338,2339,2342,2345,2347,2349,2351,2354],{"class":78,"line":1293},[76,2340,2341],{"class":2035},"       std",[76,2343,2344],{"class":93},"::cout",[76,2346,1243],{"class":89},[76,2348,1737],{"class":93},[76,2350,1243],{"class":89},[76,2352,2353],{"class":2035},"std",[76,2355,2356],{"class":93},"::endl;\n",[76,2358,2359,2362,2365],{"class":78,"line":1384},[76,2360,2361],{"class":93},"        num",[76,2363,2364],{"class":89},"++",[76,2366,1363],{"class":93},[76,2368,2369],{"class":78,"line":1390},[76,2370,2259],{"class":93},[76,2372,2373,2376,2378,2381],{"class":78,"line":1402},[76,2374,2375],{"class":2035},"    system",[76,2377,202],{"class":93},[76,2379,2380],{"class":305},"\"pause\"",[76,2382,208],{"class":93},[76,2384,2385],{"class":78,"line":1684},[76,2386,1637],{"class":93},[14,2388,2389],{},"注意：写好循环条件，避免死循环情况",[67,2391,2393],{"className":190,"code":2392,"language":192,"meta":58,"style":58},"\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",[73,2394,2395,2400,2407,2414,2424,2432,2436,2441,2468,2473,2478,2486,2513,2518,2523,2536,2546,2550,2560,2565,2578,2583,2597,2602,2617,2621,2634,2638,2643,2647,2661,2669,2674,2680,2686,2691],{"__ignoreMap":58},[76,2396,2397],{"class":78,"line":79},[76,2398,2399],{"class":82},"\u002F\u002F循环结构-猜数字\n",[76,2401,2402,2404],{"class":78,"line":86},[76,2403,2021],{"class":89},[76,2405,2406],{"class":305}," \u003Ciostream>\n",[76,2408,2409,2411],{"class":78,"line":97},[76,2410,2021],{"class":89},[76,2412,2413],{"class":305}," \u003Cctime>\n",[76,2415,2416,2418,2420,2422],{"class":78,"line":103},[76,2417,2029],{"class":89},[76,2419,2032],{"class":89},[76,2421,2036],{"class":2035},[76,2423,1363],{"class":93},[76,2425,2426,2428,2430],{"class":78,"line":1273},[76,2427,205],{"class":89},[76,2429,2045],{"class":2035},[76,2431,2048],{"class":93},[76,2433,2434],{"class":78,"line":1287},[76,2435,1618],{"class":93},[76,2437,2438],{"class":78,"line":1293},[76,2439,2440],{"class":82},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[76,2442,2443,2446,2449,2452,2455,2457,2460,2462,2465],{"class":78,"line":1384},[76,2444,2445],{"class":2035},"    srand",[76,2447,2448],{"class":93},"((",[76,2450,2451],{"class":89},"unsigned",[76,2453,2454],{"class":89}," int",[76,2456,629],{"class":93},[76,2458,2459],{"class":2035},"time",[76,2461,202],{"class":93},[76,2463,2464],{"class":250},"NULL",[76,2466,2467],{"class":93},"));\n",[76,2469,2470],{"class":78,"line":1390},[76,2471,2472],{"emptyLinePlaceholder":125},"\n",[76,2474,2475],{"class":78,"line":1402},[76,2476,2477],{"class":82},"    \u002F\u002F1.系统生成随机数\n",[76,2479,2480,2483],{"class":78,"line":1684},[76,2481,2482],{"class":82},"    \u002F\u002Frand()%100",[76,2484,2485],{"class":82}," \u002F\u002F生成0-99的随机数\n",[76,2487,2488,2490,2492,2494,2497,2500,2502,2504,2506,2508,2510],{"class":78,"line":1689},[76,2489,2057],{"class":89},[76,2491,2312],{"class":93},[76,2493,247],{"class":89},[76,2495,2496],{"class":2035},"rand",[76,2498,2499],{"class":93},"()",[76,2501,106],{"class":89},[76,2503,512],{"class":250},[76,2505,681],{"class":89},[76,2507,418],{"class":250},[76,2509,257],{"class":93},[76,2511,2512],{"class":82}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[76,2514,2515],{"class":78,"line":1695},[76,2516,2517],{"class":82},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[76,2519,2520],{"class":78,"line":1700},[76,2521,2522],{"class":82},"    \u002F\u002F2.玩家猜测\n",[76,2524,2525,2527,2530,2532,2534],{"class":78,"line":1714},[76,2526,2057],{"class":89},[76,2528,2529],{"class":93}," val",[76,2531,247],{"class":89},[76,2533,392],{"class":250},[76,2535,1363],{"class":93},[76,2537,2538,2540,2542,2544],{"class":78,"line":1719},[76,2539,2323],{"class":89},[76,2541,1730],{"class":93},[76,2543,418],{"class":250},[76,2545,208],{"class":93},[76,2547,2548],{"class":78,"line":1725},[76,2549,2102],{"class":93},[76,2551,2552,2555,2557],{"class":78,"line":1746},[76,2553,2554],{"class":93},"        cin",[76,2556,1502],{"class":89},[76,2558,2559],{"class":93},"val;\n",[76,2561,2562],{"class":78,"line":1751},[76,2563,2564],{"class":82},"        \u002F\u002F3.判断玩家猜测\n",[76,2566,2567,2570,2573,2575],{"class":78,"line":1765},[76,2568,2569],{"class":89},"        if",[76,2571,2572],{"class":93},"(val",[76,2574,1109],{"class":89},[76,2576,2577],{"class":93},"num) \n",[76,2579,2580],{"class":78,"line":1770},[76,2581,2582],{"class":93},"        {\n",[76,2584,2585,2588,2590,2593,2595],{"class":78,"line":1799},[76,2586,2587],{"class":93},"            cout",[76,2589,1243],{"class":89},[76,2591,2592],{"class":305},"\"猜小了！\"",[76,2594,1243],{"class":89},[76,2596,1265],{"class":93},[76,2598,2599],{"class":78,"line":1804},[76,2600,2601],{"class":93},"        }\n",[76,2603,2604,2607,2609,2612,2614],{"class":78,"line":1821},[76,2605,2606],{"class":89},"        else",[76,2608,1776],{"class":89},[76,2610,2611],{"class":93}," (val",[76,2613,1159],{"class":89},[76,2615,2616],{"class":93},"num)\n",[76,2618,2619],{"class":78,"line":1826},[76,2620,2582],{"class":93},[76,2622,2623,2625,2627,2630,2632],{"class":78,"line":1831},[76,2624,2587],{"class":93},[76,2626,1243],{"class":89},[76,2628,2629],{"class":305},"\"猜大了！\"",[76,2631,1243],{"class":89},[76,2633,1265],{"class":93},[76,2635,2636],{"class":78,"line":1836},[76,2637,2601],{"class":93},[76,2639,2640],{"class":78,"line":1850},[76,2641,2642],{"class":89},"        else\n",[76,2644,2645],{"class":78,"line":1855},[76,2646,2582],{"class":93},[76,2648,2650,2652,2654,2657,2659],{"class":78,"line":2649},30,[76,2651,2587],{"class":93},[76,2653,1243],{"class":89},[76,2655,2656],{"class":305},"\"猜对了！\"",[76,2658,1243],{"class":89},[76,2660,1265],{"class":93},[76,2662,2664,2667],{"class":78,"line":2663},31,[76,2665,2666],{"class":89},"            break",[76,2668,1363],{"class":93},[76,2670,2672],{"class":78,"line":2671},32,[76,2673,2601],{"class":93},[76,2675,2677],{"class":78,"line":2676},33,[76,2678,2679],{"class":82},"        \u002F\u002F猜对 退出游戏\n",[76,2681,2683],{"class":78,"line":2682},34,[76,2684,2685],{"class":82},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[76,2687,2689],{"class":78,"line":2688},35,[76,2690,2259],{"class":93},[76,2692,2694],{"class":78,"line":2693},36,[76,2695,1637],{"class":93},[152,2697,2698],{"start":86},[155,2699,2700,2701,2704],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[350,2702,2703],{},"do...while会先执行一次循环语句","，在判断循环语句",[67,2706,2708],{"className":190,"code":2707,"language":192,"meta":58,"style":58},"\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",[73,2709,2710,2715,2723,2727,2739,2747,2751,2768,2775,2779,2792,2802],{"__ignoreMap":58},[76,2711,2712],{"class":78,"line":79},[76,2713,2714],{"class":82},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[76,2716,2717,2719,2721],{"class":78,"line":86},[76,2718,205],{"class":89},[76,2720,2045],{"class":2035},[76,2722,2048],{"class":93},[76,2724,2725],{"class":78,"line":97},[76,2726,1618],{"class":93},[76,2728,2729,2731,2733,2735,2737],{"class":78,"line":103},[76,2730,2057],{"class":89},[76,2732,2312],{"class":93},[76,2734,247],{"class":89},[76,2736,392],{"class":250},[76,2738,1363],{"class":93},[76,2740,2741,2744],{"class":78,"line":1273},[76,2742,2743],{"class":89},"    do",[76,2745,2746],{"class":93}," \n",[76,2748,2749],{"class":78,"line":1287},[76,2750,2102],{"class":93},[76,2752,2753,2756,2758,2760,2762,2764,2766],{"class":78,"line":1293},[76,2754,2755],{"class":2035},"        std",[76,2757,2344],{"class":93},[76,2759,1243],{"class":89},[76,2761,1737],{"class":93},[76,2763,1243],{"class":89},[76,2765,2353],{"class":2035},[76,2767,2356],{"class":93},[76,2769,2770,2772],{"class":78,"line":1384},[76,2771,2361],{"class":93},[76,2773,2774],{"class":89},"++\n",[76,2776,2777],{"class":78,"line":1390},[76,2778,2259],{"class":93},[76,2780,2781,2783,2785,2787,2789],{"class":78,"line":1402},[76,2782,2323],{"class":89},[76,2784,2326],{"class":93},[76,2786,1109],{"class":89},[76,2788,646],{"class":250},[76,2790,2791],{"class":93},");\n",[76,2793,2794,2796,2798,2800],{"class":78,"line":1684},[76,2795,2375],{"class":2035},[76,2797,202],{"class":93},[76,2799,2380],{"class":305},[76,2801,2791],{"class":93},[76,2803,2804],{"class":78,"line":1689},[76,2805,1637],{"class":93},[14,2807,2808],{},"案例-水仙花数",[14,2810,2811],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2813,2814],{},"例如：1^3+5^3+3^3=153",[14,2816,2817],{},"请用do...while语句，求出所有3位数的水仙花数",[67,2819,2821],{"className":190,"code":2820,"language":192,"meta":58,"style":58},"#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",[73,2822,2823,2829,2839,2847,2851,2856,2868,2874,2878,2883,2899,2915,2931,2946,2965,2980,3028,3032,3044,3048,3056,3060,3074],{"__ignoreMap":58},[76,2824,2825,2827],{"class":78,"line":79},[76,2826,2021],{"class":89},[76,2828,2406],{"class":305},[76,2830,2831,2833,2835,2837],{"class":78,"line":86},[76,2832,2029],{"class":89},[76,2834,2032],{"class":89},[76,2836,2036],{"class":2035},[76,2838,1363],{"class":93},[76,2840,2841,2843,2845],{"class":78,"line":97},[76,2842,205],{"class":89},[76,2844,2045],{"class":2035},[76,2846,2048],{"class":93},[76,2848,2849],{"class":78,"line":103},[76,2850,1618],{"class":93},[76,2852,2853],{"class":78,"line":1273},[76,2854,2855],{"class":82},"    \u002F\u002F1.先打印所有三位数字\n",[76,2857,2858,2860,2862,2864,2866],{"class":78,"line":1287},[76,2859,2057],{"class":89},[76,2861,2312],{"class":93},[76,2863,247],{"class":89},[76,2865,512],{"class":250},[76,2867,1363],{"class":93},[76,2869,2870,2872],{"class":78,"line":1293},[76,2871,2743],{"class":89},[76,2873,2746],{"class":93},[76,2875,2876],{"class":78,"line":1384},[76,2877,2102],{"class":93},[76,2879,2880],{"class":78,"line":1390},[76,2881,2882],{"class":82},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[76,2884,2885,2888,2890,2892,2894,2896],{"class":78,"line":1402},[76,2886,2887],{"class":89},"        int",[76,2889,1471],{"class":93},[76,2891,247],{"class":89},[76,2893,392],{"class":250},[76,2895,257],{"class":93},[76,2897,2898],{"class":82}," \u002F\u002F个位\n",[76,2900,2901,2903,2906,2908,2910,2912],{"class":78,"line":1684},[76,2902,2887],{"class":89},[76,2904,2905],{"class":93}," b",[76,2907,247],{"class":89},[76,2909,392],{"class":250},[76,2911,257],{"class":93},[76,2913,2914],{"class":82}," \u002F\u002F十位\n",[76,2916,2917,2919,2922,2924,2926,2928],{"class":78,"line":1689},[76,2918,2887],{"class":89},[76,2920,2921],{"class":93}," c",[76,2923,247],{"class":89},[76,2925,392],{"class":250},[76,2927,257],{"class":93},[76,2929,2930],{"class":82}," \u002F\u002F百位\n",[76,2932,2933,2936,2938,2940,2942,2944],{"class":78,"line":1695},[76,2934,2935],{"class":93},"        a",[76,2937,247],{"class":89},[76,2939,1737],{"class":93},[76,2941,106],{"class":89},[76,2943,646],{"class":250},[76,2945,1363],{"class":93},[76,2947,2948,2951,2953,2955,2957,2959,2961,2963],{"class":78,"line":1700},[76,2949,2950],{"class":93},"        b",[76,2952,247],{"class":89},[76,2954,1737],{"class":93},[76,2956,783],{"class":89},[76,2958,646],{"class":250},[76,2960,106],{"class":89},[76,2962,646],{"class":250},[76,2964,1363],{"class":93},[76,2966,2967,2970,2972,2974,2976,2978],{"class":78,"line":1714},[76,2968,2969],{"class":93},"        c",[76,2971,247],{"class":89},[76,2973,1737],{"class":93},[76,2975,783],{"class":89},[76,2977,512],{"class":250},[76,2979,1363],{"class":93},[76,2981,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3019,3022,3025],{"class":78,"line":1719},[76,2983,2569],{"class":89},[76,2985,1913],{"class":93},[76,2987,655],{"class":89},[76,2989,439],{"class":93},[76,2991,655],{"class":89},[76,2993,439],{"class":93},[76,2995,681],{"class":89},[76,2997,464],{"class":93},[76,2999,655],{"class":89},[76,3001,464],{"class":93},[76,3003,655],{"class":89},[76,3005,464],{"class":93},[76,3007,681],{"class":89},[76,3009,489],{"class":93},[76,3011,655],{"class":89},[76,3013,489],{"class":93},[76,3015,655],{"class":89},[76,3017,3018],{"class":93},"c ",[76,3020,3021],{"class":89},"==",[76,3023,3024],{"class":93}," num)",[76,3026,3027],{"class":82}," \u002F\u002F如果是水仙花数，才打印\n",[76,3029,3030],{"class":78,"line":1725},[76,3031,2582],{"class":93},[76,3033,3034,3036,3038,3040,3042],{"class":78,"line":1746},[76,3035,2587],{"class":93},[76,3037,1243],{"class":89},[76,3039,1737],{"class":93},[76,3041,1243],{"class":89},[76,3043,1265],{"class":93},[76,3045,3046],{"class":78,"line":1751},[76,3047,2601],{"class":93},[76,3049,3050,3052,3054],{"class":78,"line":1765},[76,3051,2361],{"class":93},[76,3053,2364],{"class":89},[76,3055,1363],{"class":93},[76,3057,3058],{"class":78,"line":1770},[76,3059,2259],{"class":93},[76,3061,3062,3064,3067,3069,3072],{"class":78,"line":1799},[76,3063,2323],{"class":89},[76,3065,3066],{"class":93}," (num ",[76,3068,1109],{"class":89},[76,3070,3071],{"class":250}," 1000",[76,3073,2791],{"class":93},[76,3075,3076],{"class":78,"line":1804},[76,3077,1637],{"class":93},[152,3079,3080],{"start":97},[155,3081,3082],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[67,3084,3086],{"className":190,"code":3085,"language":192,"meta":58,"style":58},"\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",[73,3087,3088,3093,3122,3126,3138,3142,3147,3158,3165,3169,3183,3187,3194,3198,3210,3219],{"__ignoreMap":58},[76,3089,3090],{"class":78,"line":79},[76,3091,3092],{"class":82},"\u002F\u002F从数字0-9打印\n",[76,3094,3095,3098,3100,3102,3105,3107,3109,3112,3114,3116,3118,3120],{"class":78,"line":86},[76,3096,3097],{"class":89},"for",[76,3099,202],{"class":93},[76,3101,205],{"class":89},[76,3103,3104],{"class":93}," i",[76,3106,247],{"class":89},[76,3108,392],{"class":250},[76,3110,3111],{"class":93},";i",[76,3113,1109],{"class":89},[76,3115,646],{"class":250},[76,3117,3111],{"class":93},[76,3119,2364],{"class":89},[76,3121,208],{"class":93},[76,3123,3124],{"class":78,"line":97},[76,3125,1618],{"class":93},[76,3127,3128,3130,3132,3134,3136],{"class":78,"line":103},[76,3129,1623],{"class":93},[76,3131,1243],{"class":89},[76,3133,641],{"class":93},[76,3135,1243],{"class":89},[76,3137,1265],{"class":93},[76,3139,3140],{"class":78,"line":1273},[76,3141,1637],{"class":93},[76,3143,3144],{"class":78,"line":1287},[76,3145,3146],{"class":82},"\u002F\u002F上式可以进行拆分\n",[76,3148,3149,3151,3153,3155],{"class":78,"line":1293},[76,3150,205],{"class":89},[76,3152,3104],{"class":93},[76,3154,247],{"class":89},[76,3156,3157],{"class":250},"0\n",[76,3159,3160,3162],{"class":78,"line":1384},[76,3161,3097],{"class":89},[76,3163,3164],{"class":93},"(;;;)\n",[76,3166,3167],{"class":78,"line":1390},[76,3168,1618],{"class":93},[76,3170,3171,3174,3177,3179,3181],{"class":78,"line":1402},[76,3172,3173],{"class":89},"    if",[76,3175,3176],{"class":93},"(i",[76,3178,1782],{"class":89},[76,3180,646],{"class":250},[76,3182,208],{"class":93},[76,3184,3185],{"class":78,"line":1684},[76,3186,2102],{"class":93},[76,3188,3189,3192],{"class":78,"line":1689},[76,3190,3191],{"class":89},"        break",[76,3193,1363],{"class":93},[76,3195,3196],{"class":78,"line":1695},[76,3197,2259],{"class":93},[76,3199,3200,3202,3204,3206,3208],{"class":78,"line":1700},[76,3201,1623],{"class":93},[76,3203,1243],{"class":89},[76,3205,641],{"class":93},[76,3207,1243],{"class":89},[76,3209,1265],{"class":93},[76,3211,3212,3215,3217],{"class":78,"line":1714},[76,3213,3214],{"class":93},"    i",[76,3216,2364],{"class":89},[76,3218,1363],{"class":93},[76,3220,3221],{"class":78,"line":1719},[76,3222,1637],{"class":93},[14,3224,3225],{},"小练习",[67,3227,3229],{"className":190,"code":3228,"language":192,"meta":58,"style":58},"#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",[73,3230,3231,3237,3247,3255,3259,3264,3269,3297,3301,3306,3311,3352,3356,3369,3373,3377,3381,3393,3397,3401],{"__ignoreMap":58},[76,3232,3233,3235],{"class":78,"line":79},[76,3234,2021],{"class":89},[76,3236,2024],{"class":305},[76,3238,3239,3241,3243,3245],{"class":78,"line":86},[76,3240,2029],{"class":89},[76,3242,2032],{"class":89},[76,3244,2036],{"class":2035},[76,3246,1363],{"class":93},[76,3248,3249,3251,3253],{"class":78,"line":97},[76,3250,205],{"class":89},[76,3252,2045],{"class":2035},[76,3254,2048],{"class":93},[76,3256,3257],{"class":78,"line":103},[76,3258,1618],{"class":93},[76,3260,3261],{"class":78,"line":1273},[76,3262,3263],{"class":82},"    \u002F\u002F敲桌子案例\n",[76,3265,3266],{"class":78,"line":1287},[76,3267,3268],{"class":82},"    \u002F\u002F1.先输出1-100的数字\n",[76,3270,3271,3274,3276,3278,3280,3282,3284,3287,3289,3291,3293,3295],{"class":78,"line":1293},[76,3272,3273],{"class":89},"    for",[76,3275,202],{"class":93},[76,3277,205],{"class":89},[76,3279,3104],{"class":93},[76,3281,247],{"class":89},[76,3283,418],{"class":250},[76,3285,3286],{"class":93},"; i",[76,3288,1660],{"class":89},[76,3290,512],{"class":250},[76,3292,3286],{"class":93},[76,3294,2364],{"class":89},[76,3296,208],{"class":93},[76,3298,3299],{"class":78,"line":1384},[76,3300,2102],{"class":93},[76,3302,3303],{"class":78,"line":1390},[76,3304,3305],{"class":82},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[76,3307,3308],{"class":78,"line":1402},[76,3309,3310],{"class":82},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[76,3312,3313,3315,3317,3319,3321,3323,3325,3328,3330,3332,3334,3336,3338,3340,3342,3344,3346,3348,3350],{"class":78,"line":1684},[76,3314,2569],{"class":89},[76,3316,3176],{"class":93},[76,3318,106],{"class":89},[76,3320,569],{"class":250},[76,3322,3021],{"class":89},[76,3324,392],{"class":250},[76,3326,3327],{"class":89}," ||",[76,3329,3104],{"class":93},[76,3331,106],{"class":89},[76,3333,646],{"class":250},[76,3335,3021],{"class":89},[76,3337,569],{"class":250},[76,3339,3327],{"class":89},[76,3341,3104],{"class":93},[76,3343,783],{"class":89},[76,3345,646],{"class":250},[76,3347,3021],{"class":89},[76,3349,569],{"class":250},[76,3351,208],{"class":93},[76,3353,3354],{"class":78,"line":1689},[76,3355,2582],{"class":93},[76,3357,3358,3360,3362,3365,3367],{"class":78,"line":1695},[76,3359,2587],{"class":93},[76,3361,1243],{"class":89},[76,3363,3364],{"class":305},"\"敲桌子\"",[76,3366,1243],{"class":89},[76,3368,1265],{"class":93},[76,3370,3371],{"class":78,"line":1700},[76,3372,2601],{"class":93},[76,3374,3375],{"class":78,"line":1714},[76,3376,2642],{"class":89},[76,3378,3379],{"class":78,"line":1719},[76,3380,2582],{"class":93},[76,3382,3383,3385,3387,3389,3391],{"class":78,"line":1725},[76,3384,2587],{"class":93},[76,3386,1243],{"class":89},[76,3388,641],{"class":93},[76,3390,1243],{"class":89},[76,3392,1265],{"class":93},[76,3394,3395],{"class":78,"line":1746},[76,3396,2601],{"class":93},[76,3398,3399],{"class":78,"line":1751},[76,3400,2259],{"class":93},[76,3402,3403],{"class":78,"line":1765},[76,3404,1637],{"class":93},[14,3406,3407],{},"嵌套实现星图",[67,3409,3411],{"className":190,"code":3410,"language":192,"meta":58,"style":58},"#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",[73,3412,3413,3419,3429,3437,3441,3467,3471,3500,3504,3515,3519,3528,3532],{"__ignoreMap":58},[76,3414,3415,3417],{"class":78,"line":79},[76,3416,2021],{"class":89},[76,3418,2024],{"class":305},[76,3420,3421,3423,3425,3427],{"class":78,"line":86},[76,3422,2029],{"class":89},[76,3424,2032],{"class":89},[76,3426,2036],{"class":2035},[76,3428,1363],{"class":93},[76,3430,3431,3433,3435],{"class":78,"line":97},[76,3432,205],{"class":89},[76,3434,2045],{"class":2035},[76,3436,2048],{"class":93},[76,3438,3439],{"class":78,"line":103},[76,3440,1618],{"class":93},[76,3442,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465],{"class":78,"line":1273},[76,3444,3273],{"class":89},[76,3446,1730],{"class":93},[76,3448,205],{"class":89},[76,3450,3104],{"class":93},[76,3452,247],{"class":89},[76,3454,392],{"class":250},[76,3456,3111],{"class":93},[76,3458,1109],{"class":89},[76,3460,646],{"class":250},[76,3462,3111],{"class":93},[76,3464,2364],{"class":89},[76,3466,208],{"class":93},[76,3468,3469],{"class":78,"line":1287},[76,3470,2102],{"class":93},[76,3472,3473,3476,3478,3480,3483,3485,3487,3490,3492,3494,3496,3498],{"class":78,"line":1293},[76,3474,3475],{"class":89},"        for",[76,3477,1730],{"class":93},[76,3479,205],{"class":89},[76,3481,3482],{"class":93}," j",[76,3484,247],{"class":89},[76,3486,392],{"class":250},[76,3488,3489],{"class":93},";j",[76,3491,1109],{"class":89},[76,3493,646],{"class":250},[76,3495,3489],{"class":93},[76,3497,2364],{"class":89},[76,3499,208],{"class":93},[76,3501,3502],{"class":78,"line":1384},[76,3503,2582],{"class":93},[76,3505,3506,3508,3510,3513],{"class":78,"line":1390},[76,3507,2587],{"class":93},[76,3509,1243],{"class":89},[76,3511,3512],{"class":305},"\"*\"",[76,3514,1363],{"class":93},[76,3516,3517],{"class":78,"line":1402},[76,3518,2601],{"class":93},[76,3520,3521,3524,3526],{"class":78,"line":1684},[76,3522,3523],{"class":93},"        cout",[76,3525,1243],{"class":89},[76,3527,1265],{"class":93},[76,3529,3530],{"class":78,"line":1689},[76,3531,2259],{"class":93},[76,3533,3534],{"class":78,"line":1695},[76,3535,1637],{"class":93},[14,3537,3538],{},"乘法口诀表",[67,3540,3542],{"className":190,"code":3541,"language":192,"meta":58,"style":58},"#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",[73,3543,3544,3550,3560,3568,3572,3598,3602,3627,3631,3671,3675,3683,3687],{"__ignoreMap":58},[76,3545,3546,3548],{"class":78,"line":79},[76,3547,2021],{"class":89},[76,3549,2406],{"class":305},[76,3551,3552,3554,3556,3558],{"class":78,"line":86},[76,3553,2029],{"class":89},[76,3555,2032],{"class":89},[76,3557,2036],{"class":2035},[76,3559,1363],{"class":93},[76,3561,3562,3564,3566],{"class":78,"line":97},[76,3563,205],{"class":89},[76,3565,2045],{"class":2035},[76,3567,2048],{"class":93},[76,3569,3570],{"class":78,"line":103},[76,3571,1618],{"class":93},[76,3573,3574,3576,3578,3580,3582,3584,3586,3588,3590,3592,3594,3596],{"class":78,"line":1273},[76,3575,3273],{"class":89},[76,3577,202],{"class":93},[76,3579,205],{"class":89},[76,3581,3104],{"class":93},[76,3583,247],{"class":89},[76,3585,418],{"class":250},[76,3587,3111],{"class":93},[76,3589,1109],{"class":89},[76,3591,646],{"class":250},[76,3593,3111],{"class":93},[76,3595,2364],{"class":89},[76,3597,208],{"class":93},[76,3599,3600],{"class":78,"line":1287},[76,3601,2102],{"class":93},[76,3603,3604,3606,3608,3610,3612,3614,3616,3618,3620,3623,3625],{"class":78,"line":1293},[76,3605,3475],{"class":89},[76,3607,202],{"class":93},[76,3609,205],{"class":89},[76,3611,3482],{"class":93},[76,3613,247],{"class":89},[76,3615,418],{"class":250},[76,3617,3489],{"class":93},[76,3619,1660],{"class":89},[76,3621,3622],{"class":93},"i;j",[76,3624,2364],{"class":89},[76,3626,208],{"class":93},[76,3628,3629],{"class":78,"line":1384},[76,3630,2582],{"class":93},[76,3632,3633,3635,3637,3639,3641,3643,3645,3647,3649,3652,3654,3656,3658,3660,3662,3665,3667,3669],{"class":78,"line":1390},[76,3634,2587],{"class":93},[76,3636,1243],{"class":89},[76,3638,667],{"class":93},[76,3640,1243],{"class":89},[76,3642,3512],{"class":305},[76,3644,1243],{"class":89},[76,3646,641],{"class":93},[76,3648,1243],{"class":89},[76,3650,3651],{"class":305},"\"=\"",[76,3653,1243],{"class":89},[76,3655,641],{"class":93},[76,3657,655],{"class":89},[76,3659,667],{"class":93},[76,3661,1243],{"class":89},[76,3663,3664],{"class":305},"'",[76,3666,1303],{"class":250},[76,3668,3664],{"class":305},[76,3670,1363],{"class":93},[76,3672,3673],{"class":78,"line":1402},[76,3674,2601],{"class":93},[76,3676,3677,3679,3681],{"class":78,"line":1684},[76,3678,3523],{"class":93},[76,3680,1243],{"class":89},[76,3682,1265],{"class":93},[76,3684,3685],{"class":78,"line":1689},[76,3686,2259],{"class":93},[76,3688,3689],{"class":78,"line":1695},[76,3690,1637],{"class":93},[169,3692,3694],{"id":3693},"_163跳出语句","1.6.3跳出语句",[152,3696,3697],{},[155,3698,3699],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3701,3702],{},"break使用时机：",[1206,3704,3705,3708,3711],{},[155,3706,3707],{},"出现在switch条件语句中，作用是终止case并跳出switch",[155,3709,3710],{},"出现在循环结构中，作用是跳出当前的循环结构",[155,3712,3713],{},"出现在嵌套循环中，跳出最近的内层循环语句",[152,3715,3716,3719],{"start":86},[155,3717,3718],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[155,3720,3721],{},"goto语句\n语法：goto 标记;",[14,3723,3724],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[67,3726,3728],{"className":190,"code":3727,"language":192,"meta":58,"style":58},"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",[73,3729,3730,3738,3742,3755,3765,3778,3791,3804,3812,3828],{"__ignoreMap":58},[76,3731,3732,3734,3736],{"class":78,"line":79},[76,3733,205],{"class":89},[76,3735,2045],{"class":2035},[76,3737,2048],{"class":93},[76,3739,3740],{"class":78,"line":86},[76,3741,1618],{"class":93},[76,3743,3744,3746,3748,3751,3753],{"class":78,"line":97},[76,3745,1623],{"class":93},[76,3747,1243],{"class":89},[76,3749,3750],{"class":305},"\"1\"",[76,3752,1243],{"class":89},[76,3754,1265],{"class":93},[76,3756,3757,3760,3763],{"class":78,"line":103},[76,3758,3759],{"class":89},"    goto",[76,3761,3762],{"class":2035}," FLAG",[76,3764,1363],{"class":93},[76,3766,3767,3769,3771,3774,3776],{"class":78,"line":1273},[76,3768,1623],{"class":93},[76,3770,1243],{"class":89},[76,3772,3773],{"class":305},"\"2\"",[76,3775,1243],{"class":89},[76,3777,1265],{"class":93},[76,3779,3780,3782,3784,3787,3789],{"class":78,"line":1287},[76,3781,1623],{"class":93},[76,3783,1243],{"class":89},[76,3785,3786],{"class":305},"\"3\"",[76,3788,1243],{"class":89},[76,3790,1265],{"class":93},[76,3792,3793,3795,3797,3800,3802],{"class":78,"line":1293},[76,3794,1623],{"class":93},[76,3796,1243],{"class":89},[76,3798,3799],{"class":305},"\"4\"",[76,3801,1243],{"class":89},[76,3803,1265],{"class":93},[76,3805,3806,3809],{"class":78,"line":1384},[76,3807,3808],{"class":2035},"    FLAG",[76,3810,3811],{"class":93},":\n",[76,3813,3814,3816,3818,3821,3823,3825],{"class":78,"line":1390},[76,3815,1623],{"class":93},[76,3817,1243],{"class":89},[76,3819,3820],{"class":305},"\"5\"",[76,3822,1243],{"class":89},[76,3824,1311],{"class":93},[76,3826,3827],{"class":82},"\u002F\u002F跳过了2,3,4,直接到5\n",[76,3829,3830],{"class":78,"line":1402},[76,3831,1637],{"class":93},[140,3833,3835],{"id":3834},"_17数组","1.7数组",[169,3837,3839],{"id":3838},"_171一维数组","1.7.1一维数组",[152,3841,3842],{},[155,3843,3844],{},"一维数组定义方式",[338,3846,3847,3857],{},[341,3848,3849],{},[344,3850,3851,3854],{},[347,3852,3853],{},"方式",[347,3855,3856],{},"注意事项",[385,3858,3859,3873,3883],{},[344,3860,3861,3867],{},[390,3862,3863,3864,257],{},"数据类型 数组名",[76,3865,3866],{},"数组长度",[390,3868,3869,3870,3872],{},"这种方式是先定义再arr",[76,3871,641],{},"赋值",[344,3874,3875,3880],{},[390,3876,3863,3877,3879],{},[76,3878,3866],{},"={值1,值2....};",[390,3881,3882],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[344,3884,3885,3889],{},[390,3886,3863,3887,3879],{},[76,3888],{},[390,3890,3891,3892,3894],{},"int arr",[76,3893],{},";这是不正确的，按照这样的方式定义必须有初始长度",[152,3896,3897],{"start":86},[155,3898,3899],{},"一维数组数组名\n用途：",[1206,3901,3902],{},[155,3903,3904],{},"1.可以统计整个数组在内存中的长度：",[67,3906,3908],{"className":190,"code":3907,"language":192,"meta":58,"style":58},"sizeof(arr);\nsizeof(arr[0]);\n",[73,3909,3910,3917],{"__ignoreMap":58},[76,3911,3912,3914],{"class":78,"line":79},[76,3913,199],{"class":89},[76,3915,3916],{"class":93},"(arr);\n",[76,3918,3919,3921,3924,3926],{"class":78,"line":86},[76,3920,199],{"class":89},[76,3922,3923],{"class":93},"(arr[",[76,3925,392],{"class":250},[76,3927,3928],{"class":93},"]);\n",[1206,3930,3931],{},[155,3932,3933],{},"2.可以获取数组在内存中的首地址:",[67,3935,3937],{"className":190,"code":3936,"language":192,"meta":58,"style":58},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[73,3938,3939,3944,3957,3962],{"__ignoreMap":58},[76,3940,3941],{"class":78,"line":79},[76,3942,3943],{"class":82},"\u002F\u002F查看16进制的首地址\n",[76,3945,3946,3948,3950,3953,3955],{"class":78,"line":86},[76,3947,1442],{"class":93},[76,3949,1243],{"class":89},[76,3951,3952],{"class":93},"arr",[76,3954,1243],{"class":89},[76,3956,1265],{"class":93},[76,3958,3959],{"class":78,"line":97},[76,3960,3961],{"class":82},"\u002F\u002F看10进制数\n",[76,3963,3964,3966,3968,3970,3972,3974,3976,3979,3981,3983,3985],{"class":78,"line":103},[76,3965,1442],{"class":93},[76,3967,1243],{"class":89},[76,3969,202],{"class":93},[76,3971,205],{"class":89},[76,3973,629],{"class":93},[76,3975,553],{"class":89},[76,3977,3978],{"class":93},"arr[",[76,3980,392],{"class":250},[76,3982,1139],{"class":93},[76,3984,1243],{"class":89},[76,3986,1265],{"class":93},[14,3988,3989],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1206,3991,3992],{},[155,3993,3994],{},"1️⃣五只小猪称体重",[67,3996,3998],{"className":190,"code":3997,"language":192,"meta":58,"style":58},"#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",[73,3999,4000,4006,4016,4024,4028,4068,4081,4107,4111,4123,4127,4137,4141,4145,4158,4168],{"__ignoreMap":58},[76,4001,4002,4004],{"class":78,"line":79},[76,4003,2021],{"class":89},[76,4005,2024],{"class":305},[76,4007,4008,4010,4012,4014],{"class":78,"line":86},[76,4009,2029],{"class":89},[76,4011,2032],{"class":89},[76,4013,2036],{"class":2035},[76,4015,1363],{"class":93},[76,4017,4018,4020,4022],{"class":78,"line":97},[76,4019,205],{"class":89},[76,4021,2045],{"class":2035},[76,4023,2048],{"class":93},[76,4025,4026],{"class":78,"line":103},[76,4027,1618],{"class":93},[76,4029,4030,4032,4035,4037,4039,4041,4043,4046,4048,4051,4053,4055,4057,4060,4062,4065],{"class":78,"line":1273},[76,4031,2057],{"class":89},[76,4033,4034],{"class":93}," arr[",[76,4036,520],{"class":250},[76,4038,1139],{"class":93},[76,4040,247],{"class":89},[76,4042,1095],{"class":93},[76,4044,4045],{"class":250},"300",[76,4047,578],{"class":93},[76,4049,4050],{"class":250},"350",[76,4052,578],{"class":93},[76,4054,1794],{"class":250},[76,4056,578],{"class":93},[76,4058,4059],{"class":250},"400",[76,4061,578],{"class":93},[76,4063,4064],{"class":250},"250",[76,4066,4067],{"class":93},"};\n",[76,4069,4070,4072,4075,4077,4079],{"class":78,"line":1287},[76,4071,2057],{"class":89},[76,4073,4074],{"class":93}," tmp",[76,4076,247],{"class":89},[76,4078,392],{"class":250},[76,4080,1363],{"class":93},[76,4082,4083,4085,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105],{"class":78,"line":1293},[76,4084,3273],{"class":89},[76,4086,1730],{"class":93},[76,4088,205],{"class":89},[76,4090,3104],{"class":93},[76,4092,247],{"class":89},[76,4094,392],{"class":250},[76,4096,3111],{"class":93},[76,4098,1109],{"class":89},[76,4100,520],{"class":250},[76,4102,3111],{"class":93},[76,4104,2364],{"class":89},[76,4106,208],{"class":93},[76,4108,4109],{"class":78,"line":1384},[76,4110,2102],{"class":93},[76,4112,4113,4115,4118,4120],{"class":78,"line":1390},[76,4114,2569],{"class":89},[76,4116,4117],{"class":93},"(tmp",[76,4119,1109],{"class":89},[76,4121,4122],{"class":93},"arr[i])\n",[76,4124,4125],{"class":78,"line":1402},[76,4126,2582],{"class":93},[76,4128,4129,4132,4134],{"class":78,"line":1684},[76,4130,4131],{"class":93},"            tmp",[76,4133,247],{"class":89},[76,4135,4136],{"class":93},"arr[i];\n",[76,4138,4139],{"class":78,"line":1689},[76,4140,2601],{"class":93},[76,4142,4143],{"class":78,"line":1695},[76,4144,2259],{"class":93},[76,4146,4147,4149,4151,4154,4156],{"class":78,"line":1700},[76,4148,1623],{"class":93},[76,4150,1243],{"class":89},[76,4152,4153],{"class":93},"tmp",[76,4155,1243],{"class":89},[76,4157,1265],{"class":93},[76,4159,4160,4163,4166],{"class":78,"line":1714},[76,4161,4162],{"class":89},"    return",[76,4164,4165],{"class":250}," 0",[76,4167,1363],{"class":93},[76,4169,4170],{"class":78,"line":1719},[76,4171,1637],{"class":93},[1206,4173,4174],{},[155,4175,4176],{},"2️⃣数组元素逆置",[67,4178,4180],{"className":190,"code":4179,"language":192,"meta":58,"style":58},"\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",[73,4181,4182,4187,4193,4203,4211,4215,4250,4266,4298,4311,4316,4321,4333,4343,4353,4358,4367,4377,4382,4387,4414,4418,4434,4438,4449,4458],{"__ignoreMap":58},[76,4183,4184],{"class":78,"line":79},[76,4185,4186],{"class":82},"\u002F\u002F元素逆置\n",[76,4188,4189,4191],{"class":78,"line":86},[76,4190,2021],{"class":89},[76,4192,2024],{"class":305},[76,4194,4195,4197,4199,4201],{"class":78,"line":97},[76,4196,2029],{"class":89},[76,4198,2032],{"class":89},[76,4200,2036],{"class":2035},[76,4202,1363],{"class":93},[76,4204,4205,4207,4209],{"class":78,"line":103},[76,4206,205],{"class":89},[76,4208,2045],{"class":2035},[76,4210,2048],{"class":93},[76,4212,4213],{"class":78,"line":1273},[76,4214,1618],{"class":93},[76,4216,4217,4220,4222,4224,4226,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248],{"class":78,"line":1287},[76,4218,4219],{"class":89},"   int",[76,4221,4034],{"class":93},[76,4223,520],{"class":250},[76,4225,1139],{"class":93},[76,4227,247],{"class":89},[76,4229,1095],{"class":93},[76,4231,418],{"class":250},[76,4233,578],{"class":93},[76,4235,278],{"class":250},[76,4237,578],{"class":93},[76,4239,272],{"class":250},[76,4241,578],{"class":93},[76,4243,494],{"class":250},[76,4245,578],{"class":93},[76,4247,520],{"class":250},[76,4249,4067],{"class":93},[76,4251,4252,4254,4257,4259,4261,4263],{"class":78,"line":1293},[76,4253,4219],{"class":89},[76,4255,4256],{"class":93}," start",[76,4258,247],{"class":89},[76,4260,392],{"class":250},[76,4262,257],{"class":93},[76,4264,4265],{"class":82},"\u002F\u002F起始下标\n",[76,4267,4268,4270,4273,4276,4279,4282,4284,4286,4289,4291,4293,4295],{"class":78,"line":1384},[76,4269,4219],{"class":89},[76,4271,4272],{"class":93}," end",[76,4274,4275],{"class":89},"=sizeof",[76,4277,4278],{"class":93},"(arr)",[76,4280,4281],{"class":89},"\u002Fsizeof",[76,4283,3923],{"class":93},[76,4285,392],{"class":250},[76,4287,4288],{"class":93},"])",[76,4290,112],{"class":89},[76,4292,418],{"class":250},[76,4294,257],{"class":93},[76,4296,4297],{"class":82},"\u002F\u002F结束下标\n",[76,4299,4300,4303,4306,4308],{"class":78,"line":1390},[76,4301,4302],{"class":89},"   while",[76,4304,4305],{"class":93}," (start",[76,4307,1109],{"class":89},[76,4309,4310],{"class":93},"end)\n",[76,4312,4313],{"class":78,"line":1402},[76,4314,4315],{"class":93},"   {\n",[76,4317,4318],{"class":78,"line":1684},[76,4319,4320],{"class":82},"    \u002F\u002F实现元素互换代码\n",[76,4322,4323,4325,4328,4330],{"class":78,"line":1689},[76,4324,2057],{"class":89},[76,4326,4327],{"class":93}," temp",[76,4329,247],{"class":89},[76,4331,4332],{"class":93},"arr[start];\n",[76,4334,4335,4338,4340],{"class":78,"line":1695},[76,4336,4337],{"class":93},"    arr[start]",[76,4339,247],{"class":89},[76,4341,4342],{"class":93},"arr[end];\n",[76,4344,4345,4348,4350],{"class":78,"line":1700},[76,4346,4347],{"class":93},"    arr[end]",[76,4349,247],{"class":89},[76,4351,4352],{"class":93},"temp;\n",[76,4354,4355],{"class":78,"line":1714},[76,4356,4357],{"class":82},"    \u002F\u002F下标更新\n",[76,4359,4360,4363,4365],{"class":78,"line":1719},[76,4361,4362],{"class":93},"    start",[76,4364,2364],{"class":89},[76,4366,1363],{"class":93},[76,4368,4369,4372,4375],{"class":78,"line":1725},[76,4370,4371],{"class":93},"    end",[76,4373,4374],{"class":89},"--",[76,4376,1363],{"class":93},[76,4378,4379],{"class":78,"line":1746},[76,4380,4381],{"class":93},"   }\n",[76,4383,4384],{"class":78,"line":1751},[76,4385,4386],{"class":82},"   \u002F\u002F输出逆置后的数组\n",[76,4388,4389,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4412],{"class":78,"line":1765},[76,4390,4391],{"class":89},"   for",[76,4393,1730],{"class":93},[76,4395,205],{"class":89},[76,4397,3104],{"class":93},[76,4399,247],{"class":89},[76,4401,392],{"class":250},[76,4403,3111],{"class":93},[76,4405,1109],{"class":89},[76,4407,520],{"class":250},[76,4409,3111],{"class":93},[76,4411,2364],{"class":89},[76,4413,208],{"class":93},[76,4415,4416],{"class":78,"line":1770},[76,4417,4315],{"class":93},[76,4419,4420,4422,4424,4427,4429,4432],{"class":78,"line":1799},[76,4421,1623],{"class":93},[76,4423,1243],{"class":89},[76,4425,4426],{"class":93},"arr[i]",[76,4428,1243],{"class":89},[76,4430,4431],{"class":305},"\" \"",[76,4433,1363],{"class":93},[76,4435,4436],{"class":78,"line":1804},[76,4437,4381],{"class":93},[76,4439,4440,4443,4445,4447],{"class":78,"line":1821},[76,4441,4442],{"class":2035},"   system",[76,4444,202],{"class":93},[76,4446,2380],{"class":305},[76,4448,2791],{"class":93},[76,4450,4451,4454,4456],{"class":78,"line":1826},[76,4452,4453],{"class":89},"   return",[76,4455,4165],{"class":250},[76,4457,1363],{"class":93},[76,4459,4460],{"class":78,"line":1831},[76,4461,1637],{"class":93},[1206,4463,4464],{},[155,4465,4466],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[67,4468,4470],{"className":190,"code":4469,"language":192,"meta":58,"style":58},"\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",[73,4471,4472,4477,4483,4493,4501,4505,4557,4570,4596,4600,4614,4618,4623,4628,4658,4662,4667,4701,4705,4710,4730,4735,4747,4763,4778,4783,4787,4791,4804,4830,4834,4848,4852,4860],{"__ignoreMap":58},[76,4473,4474],{"class":78,"line":79},[76,4475,4476],{"class":82},"\u002F\u002F冒泡排序,升序\n",[76,4478,4479,4481],{"class":78,"line":86},[76,4480,2021],{"class":89},[76,4482,2024],{"class":305},[76,4484,4485,4487,4489,4491],{"class":78,"line":97},[76,4486,2029],{"class":89},[76,4488,2032],{"class":89},[76,4490,2036],{"class":2035},[76,4492,1363],{"class":93},[76,4494,4495,4497,4499],{"class":78,"line":103},[76,4496,205],{"class":89},[76,4498,2045],{"class":2035},[76,4500,2048],{"class":93},[76,4502,4503],{"class":78,"line":1273},[76,4504,1618],{"class":93},[76,4506,4507,4509,4511,4513,4516,4518,4521,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549,4551,4553,4555],{"class":78,"line":1287},[76,4508,2057],{"class":89},[76,4510,4034],{"class":93},[76,4512,620],{"class":250},[76,4514,4515],{"class":93},"] ",[76,4517,247],{"class":89},[76,4519,4520],{"class":93}," {",[76,4522,494],{"class":250},[76,4524,578],{"class":93},[76,4526,278],{"class":250},[76,4528,578],{"class":93},[76,4530,595],{"class":250},[76,4532,578],{"class":93},[76,4534,392],{"class":250},[76,4536,578],{"class":93},[76,4538,520],{"class":250},[76,4540,578],{"class":93},[76,4542,569],{"class":250},[76,4544,578],{"class":93},[76,4546,418],{"class":250},[76,4548,578],{"class":93},[76,4550,272],{"class":250},[76,4552,578],{"class":93},[76,4554,620],{"class":250},[76,4556,4067],{"class":93},[76,4558,4559,4561,4563,4566,4568],{"class":78,"line":1293},[76,4560,1623],{"class":93},[76,4562,1243],{"class":89},[76,4564,4565],{"class":305},"\"排序前：\"",[76,4567,1243],{"class":89},[76,4569,1265],{"class":93},[76,4571,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594],{"class":78,"line":1384},[76,4573,3273],{"class":89},[76,4575,1730],{"class":93},[76,4577,205],{"class":89},[76,4579,3104],{"class":93},[76,4581,247],{"class":89},[76,4583,392],{"class":250},[76,4585,3111],{"class":93},[76,4587,1109],{"class":89},[76,4589,620],{"class":250},[76,4591,3111],{"class":93},[76,4593,2364],{"class":89},[76,4595,208],{"class":93},[76,4597,4598],{"class":78,"line":1390},[76,4599,2102],{"class":93},[76,4601,4602,4604,4606,4608,4610,4612],{"class":78,"line":1402},[76,4603,3523],{"class":93},[76,4605,1243],{"class":89},[76,4607,4426],{"class":93},[76,4609,1243],{"class":89},[76,4611,4431],{"class":305},[76,4613,1363],{"class":93},[76,4615,4616],{"class":78,"line":1684},[76,4617,2259],{"class":93},[76,4619,4620],{"class":78,"line":1689},[76,4621,4622],{"class":82},"    \u002F\u002F开始冒泡排序\n",[76,4624,4625],{"class":78,"line":1695},[76,4626,4627],{"class":82},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[76,4629,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656],{"class":78,"line":1700},[76,4631,3273],{"class":89},[76,4633,1730],{"class":93},[76,4635,205],{"class":89},[76,4637,3104],{"class":93},[76,4639,247],{"class":89},[76,4641,392],{"class":250},[76,4643,3111],{"class":93},[76,4645,1109],{"class":89},[76,4647,620],{"class":250},[76,4649,112],{"class":89},[76,4651,418],{"class":250},[76,4653,3111],{"class":93},[76,4655,2364],{"class":89},[76,4657,208],{"class":93},[76,4659,4660],{"class":78,"line":1714},[76,4661,2102],{"class":93},[76,4663,4664],{"class":78,"line":1719},[76,4665,4666],{"class":82},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[76,4668,4669,4671,4673,4675,4677,4679,4681,4683,4685,4687,4689,4691,4693,4695,4697,4699],{"class":78,"line":1725},[76,4670,3475],{"class":89},[76,4672,1730],{"class":93},[76,4674,205],{"class":89},[76,4676,3482],{"class":93},[76,4678,247],{"class":89},[76,4680,392],{"class":250},[76,4682,3489],{"class":93},[76,4684,1109],{"class":89},[76,4686,620],{"class":250},[76,4688,112],{"class":89},[76,4690,641],{"class":93},[76,4692,112],{"class":89},[76,4694,418],{"class":250},[76,4696,3489],{"class":93},[76,4698,2364],{"class":89},[76,4700,208],{"class":93},[76,4702,4703],{"class":78,"line":1746},[76,4704,2582],{"class":93},[76,4706,4707],{"class":78,"line":1751},[76,4708,4709],{"class":82},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[76,4711,4712,4715,4718,4720,4723,4725,4727],{"class":78,"line":1765},[76,4713,4714],{"class":89},"            if",[76,4716,4717],{"class":93},"(arr[j]",[76,4719,1159],{"class":89},[76,4721,4722],{"class":93},"arr[j",[76,4724,681],{"class":89},[76,4726,418],{"class":250},[76,4728,4729],{"class":93},"])\n",[76,4731,4732],{"class":78,"line":1770},[76,4733,4734],{"class":93},"            {\n",[76,4736,4737,4740,4742,4744],{"class":78,"line":1799},[76,4738,4739],{"class":89},"                int",[76,4741,4327],{"class":93},[76,4743,247],{"class":89},[76,4745,4746],{"class":93},"arr[j];\n",[76,4748,4749,4752,4754,4756,4758,4760],{"class":78,"line":1804},[76,4750,4751],{"class":93},"                arr[j]",[76,4753,247],{"class":89},[76,4755,4722],{"class":93},[76,4757,681],{"class":89},[76,4759,418],{"class":250},[76,4761,4762],{"class":93},"];\n",[76,4764,4765,4768,4770,4772,4774,4776],{"class":78,"line":1821},[76,4766,4767],{"class":93},"                arr[j",[76,4769,681],{"class":89},[76,4771,418],{"class":250},[76,4773,1139],{"class":93},[76,4775,247],{"class":89},[76,4777,4352],{"class":93},[76,4779,4780],{"class":78,"line":1826},[76,4781,4782],{"class":93},"            }\n",[76,4784,4785],{"class":78,"line":1831},[76,4786,2601],{"class":93},[76,4788,4789],{"class":78,"line":1836},[76,4790,2259],{"class":93},[76,4792,4793,4795,4797,4800,4802],{"class":78,"line":1850},[76,4794,1623],{"class":93},[76,4796,1243],{"class":89},[76,4798,4799],{"class":305},"\"排序后：\"",[76,4801,1243],{"class":89},[76,4803,1265],{"class":93},[76,4805,4806,4808,4810,4812,4814,4816,4818,4820,4822,4824,4826,4828],{"class":78,"line":1855},[76,4807,3273],{"class":89},[76,4809,1730],{"class":93},[76,4811,205],{"class":89},[76,4813,3104],{"class":93},[76,4815,247],{"class":89},[76,4817,392],{"class":250},[76,4819,3111],{"class":93},[76,4821,1109],{"class":89},[76,4823,620],{"class":250},[76,4825,3111],{"class":93},[76,4827,2364],{"class":89},[76,4829,208],{"class":93},[76,4831,4832],{"class":78,"line":2649},[76,4833,2102],{"class":93},[76,4835,4836,4838,4840,4842,4844,4846],{"class":78,"line":2663},[76,4837,3523],{"class":93},[76,4839,1243],{"class":89},[76,4841,4426],{"class":93},[76,4843,1243],{"class":89},[76,4845,4431],{"class":305},[76,4847,1363],{"class":93},[76,4849,4850],{"class":78,"line":2671},[76,4851,2259],{"class":93},[76,4853,4854,4856,4858],{"class":78,"line":2676},[76,4855,4162],{"class":89},[76,4857,4165],{"class":250},[76,4859,1363],{"class":93},[76,4861,4862],{"class":78,"line":2682},[76,4863,1637],{"class":93},[169,4865,4867],{"id":4866},"_172二维数组","1.7.2二维数组",[152,4869,4870],{},[155,4871,4872],{},"二维数组的四种定义方式",[338,4874,4875,4884],{},[341,4876,4877],{},[344,4878,4879,4882],{},[347,4880,4881],{},"序号",[347,4883,3853],{},[385,4885,4886,4896,4905,4914,4923],{},[344,4887,4888,4890],{},[390,4889,418],{},[390,4891,4892,4893,257],{},"数据类型 数组名[行数]",[76,4894,4895],{},"列数",[344,4897,4898,4900],{},[390,4899,278],{},[390,4901,4892,4902,4904],{},[76,4903,4895],{},"={ {数据1,数据2}，{数据3，数据4}... }",[344,4906,4907,4909],{},[390,4908,272],{},[390,4910,4892,4911,4913],{},[76,4912,4895],{},"={数据1,数据2,数据3...}",[344,4915,4916,4918],{},[390,4917,494],{},[390,4919,4920,4921,4913],{},"数据类型 数组名[]",[76,4922,4895],{},[344,4924,4925,4928],{},[390,4926,4927],{},"注意：不能只省略列数",[390,4929],{},[152,4931,4932],{"start":86},[155,4933,4934],{},"二维数组数组名",[1206,4936,4937,4940],{},[155,4938,4939],{},"1.查看二维数组所占内存空间",[155,4941,4942],{},"2.获取二维数组首地址",[14,4944,4945],{},"已知二维数组，求二维数组的行数与列数",[67,4947,4949],{"className":190,"code":4948,"language":192,"meta":58,"style":58},"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",[73,4950,4951,4959,4963,4981,4985,5003,5019,5024,5049,5082],{"__ignoreMap":58},[76,4952,4953,4955,4957],{"class":78,"line":79},[76,4954,205],{"class":89},[76,4956,2045],{"class":2035},[76,4958,2048],{"class":93},[76,4960,4961],{"class":78,"line":86},[76,4962,1618],{"class":93},[76,4964,4965,4967,4969,4971,4974,4976,4978],{"class":78,"line":97},[76,4966,2057],{"class":89},[76,4968,4034],{"class":93},[76,4970,278],{"class":250},[76,4972,4973],{"class":93},"][",[76,4975,272],{"class":250},[76,4977,1139],{"class":93},[76,4979,4980],{"class":89},"=\n",[76,4982,4983],{"class":78,"line":103},[76,4984,2102],{"class":93},[76,4986,4987,4990,4992,4994,4996,4998,5000],{"class":78,"line":1273},[76,4988,4989],{"class":93},"        {",[76,4991,418],{"class":250},[76,4993,578],{"class":93},[76,4995,278],{"class":250},[76,4997,578],{"class":93},[76,4999,272],{"class":250},[76,5001,5002],{"class":93},"},\n",[76,5004,5005,5007,5009,5011,5013,5015,5017],{"class":78,"line":1287},[76,5006,4989],{"class":93},[76,5008,494],{"class":250},[76,5010,578],{"class":93},[76,5012,520],{"class":250},[76,5014,578],{"class":93},[76,5016,544],{"class":250},[76,5018,1637],{"class":93},[76,5020,5021],{"class":78,"line":1293},[76,5022,5023],{"class":93},"    };\n",[76,5025,5026,5028,5030,5033,5035,5037,5039,5041,5043,5045,5047],{"class":78,"line":1384},[76,5027,1623],{"class":93},[76,5029,1243],{"class":89},[76,5031,5032],{"class":305},"\"二维数组的行数\"",[76,5034,1445],{"class":89},[76,5036,4278],{"class":93},[76,5038,4281],{"class":89},[76,5040,3923],{"class":93},[76,5042,392],{"class":250},[76,5044,4288],{"class":93},[76,5046,1243],{"class":89},[76,5048,1265],{"class":93},[76,5050,5051,5053,5055,5058,5060,5062,5064,5066,5068,5070,5072,5074,5076,5078,5080],{"class":78,"line":1390},[76,5052,1623],{"class":93},[76,5054,1243],{"class":89},[76,5056,5057],{"class":305},"\"二维数组的列数\"",[76,5059,1445],{"class":89},[76,5061,3923],{"class":93},[76,5063,392],{"class":250},[76,5065,4288],{"class":93},[76,5067,4281],{"class":89},[76,5069,3923],{"class":93},[76,5071,392],{"class":250},[76,5073,4973],{"class":93},[76,5075,392],{"class":250},[76,5077,4288],{"class":93},[76,5079,1243],{"class":89},[76,5081,1265],{"class":93},[76,5083,5084],{"class":78,"line":1402},[76,5085,1637],{"class":93},[14,5087,5088],{},"查看二维数组首地址",[67,5090,5092],{"className":190,"code":5091,"language":192,"meta":58,"style":58},"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",[73,5093,5094,5111,5137,5162],{"__ignoreMap":58},[76,5095,5096,5098,5100,5103,5105,5107,5109],{"class":78,"line":79},[76,5097,1442],{"class":93},[76,5099,1243],{"class":89},[76,5101,5102],{"class":305},"\"二维数组首地址：\"",[76,5104,1243],{"class":89},[76,5106,3952],{"class":93},[76,5108,1243],{"class":89},[76,5110,1265],{"class":93},[76,5112,5113,5115,5117,5120,5122,5124,5126,5129,5131,5133,5135],{"class":78,"line":86},[76,5114,1442],{"class":93},[76,5116,1243],{"class":89},[76,5118,5119],{"class":305},"\"二维数组第一行的首地址：\"",[76,5121,1243],{"class":89},[76,5123,202],{"class":93},[76,5125,205],{"class":89},[76,5127,5128],{"class":93},")arr[",[76,5130,392],{"class":250},[76,5132,1139],{"class":93},[76,5134,1243],{"class":89},[76,5136,1265],{"class":93},[76,5138,5139,5141,5143,5146,5148,5150,5152,5154,5156,5158,5160],{"class":78,"line":97},[76,5140,1442],{"class":93},[76,5142,1243],{"class":89},[76,5144,5145],{"class":305},"\"二维数组第二行的首地址：\"",[76,5147,1243],{"class":89},[76,5149,202],{"class":93},[76,5151,205],{"class":89},[76,5153,5128],{"class":93},[76,5155,418],{"class":250},[76,5157,1139],{"class":93},[76,5159,1243],{"class":89},[76,5161,1265],{"class":93},[76,5163,5164,5166,5168,5171,5173,5175,5177,5179,5181,5183,5185,5187,5189,5191,5193,5195],{"class":78,"line":103},[76,5165,1442],{"class":93},[76,5167,1243],{"class":89},[76,5169,5170],{"class":305},"\"二维数组第一个元素的首地址:\"",[76,5172,1243],{"class":89},[76,5174,202],{"class":93},[76,5176,205],{"class":89},[76,5178,629],{"class":93},[76,5180,553],{"class":89},[76,5182,3978],{"class":93},[76,5184,392],{"class":250},[76,5186,4973],{"class":93},[76,5188,392],{"class":250},[76,5190,1139],{"class":93},[76,5192,1243],{"class":89},[76,5194,1311],{"class":93},[76,5196,5197],{"class":82},"\u002F\u002F对于数，要加取址符\n",[117,5199,5200],{},"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":58,"searchDepth":86,"depth":86,"links":5202},[5203,5204,5205,5213,5214,5220,5225],{"id":142,"depth":86,"text":143},{"id":149,"depth":86,"text":150},{"id":166,"depth":86,"text":167,"children":5206},[5207,5208,5209,5210,5211,5212],{"id":171,"depth":97,"text":172},{"id":218,"depth":97,"text":219},{"id":286,"depth":97,"text":287},{"id":1224,"depth":97,"text":1225},{"id":1317,"depth":97,"text":1318},{"id":1416,"depth":97,"text":1417},{"id":1458,"depth":86,"text":1459},{"id":1526,"depth":86,"text":1527,"children":5215},[5216,5217,5218,5219],{"id":1530,"depth":97,"text":1531},{"id":1551,"depth":97,"text":1552},{"id":1560,"depth":97,"text":1561},{"id":1569,"depth":97,"text":1570},{"id":1578,"depth":86,"text":1579,"children":5221},[5222,5223,5224],{"id":1582,"depth":97,"text":1583},{"id":2277,"depth":97,"text":2278},{"id":3693,"depth":97,"text":3694},{"id":3834,"depth":86,"text":3835,"children":5226},[5227,5228],{"id":3838,"depth":97,"text":3839},{"id":4866,"depth":97,"text":4867},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":133,"description":58},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5235,"title":5236,"body":5237,"description":58,"extension":123,"meta":6337,"navigation":125,"path":6338,"seo":6339,"stem":6340,"__hash__":6341},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5238,"toc":6329},[5239,5242,5246,5254,5262,5265,5331,5335,5338,5414,5418,5421,5424,5427,5640,5644,5649,5713,5718,5785,5790,5881,5884,5989,5993,5996,6002,6146,6150,6153,6167,6170,6215,6218,6326],[10,5240,5236],{"id":5241},"_2函数",[140,5243,5245],{"id":5244},"_21函数概述","2.1函数概述",[152,5247,5248,5251],{},[155,5249,5250],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[155,5252,5253],{},"语法：",[67,5255,5260],{"className":5256,"code":5258,"language":5259,"meta":58},[5257],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[73,5261,5258],{"__ignoreMap":58},[14,5263,5264],{},"小案例",[67,5266,5268],{"className":190,"code":5267,"language":192,"meta":58,"style":58},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[73,5269,5270,5275,5299,5303,5320,5327],{"__ignoreMap":58},[76,5271,5272],{"class":78,"line":79},[76,5273,5274],{"class":82},"\u002F\u002Fnum1,num2形参\n",[76,5276,5277,5279,5282,5284,5286,5290,5292,5294,5297],{"class":78,"line":86},[76,5278,205],{"class":89},[76,5280,5281],{"class":2035}," add",[76,5283,202],{"class":93},[76,5285,205],{"class":89},[76,5287,5289],{"class":5288},"s4XuR"," num1",[76,5291,578],{"class":93},[76,5293,205],{"class":89},[76,5295,5296],{"class":5288}," num2",[76,5298,208],{"class":93},[76,5300,5301],{"class":78,"line":97},[76,5302,1618],{"class":93},[76,5304,5305,5307,5310,5312,5315,5317],{"class":78,"line":103},[76,5306,2057],{"class":89},[76,5308,5309],{"class":93}," sum",[76,5311,247],{"class":89},[76,5313,5314],{"class":93},"num1",[76,5316,681],{"class":89},[76,5318,5319],{"class":93},"num2;\n",[76,5321,5322,5324],{"class":78,"line":1273},[76,5323,4162],{"class":89},[76,5325,5326],{"class":93}," sum;\n",[76,5328,5329],{"class":78,"line":1287},[76,5330,1637],{"class":93},[140,5332,5334],{"id":5333},"_22函数调用","2.2函数调用",[14,5336,5337],{},"调用刚刚写的求和函数",[67,5339,5341],{"className":190,"code":5340,"language":192,"meta":58,"style":58},"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",[73,5342,5343,5351,5355,5360,5372,5384,5393,5398,5410],{"__ignoreMap":58},[76,5344,5345,5347,5349],{"class":78,"line":79},[76,5346,205],{"class":89},[76,5348,2045],{"class":2035},[76,5350,2048],{"class":93},[76,5352,5353],{"class":78,"line":86},[76,5354,1618],{"class":93},[76,5356,5357],{"class":78,"line":97},[76,5358,5359],{"class":82},"    \u002F\u002Fa,b实参\n",[76,5361,5362,5364,5366,5368,5370],{"class":78,"line":103},[76,5363,2057],{"class":89},[76,5365,1471],{"class":93},[76,5367,247],{"class":89},[76,5369,392],{"class":250},[76,5371,1363],{"class":93},[76,5373,5374,5376,5378,5380,5382],{"class":78,"line":1273},[76,5375,2057],{"class":89},[76,5377,2905],{"class":93},[76,5379,247],{"class":89},[76,5381,392],{"class":250},[76,5383,1363],{"class":93},[76,5385,5386,5388,5390],{"class":78,"line":1287},[76,5387,2084],{"class":93},[76,5389,1502],{"class":89},[76,5391,5392],{"class":93},"a,b;\n",[76,5394,5395],{"class":78,"line":1293},[76,5396,5397],{"class":82},"    \u002F\u002F调用函数时，实参值传给了形参\n",[76,5399,5400,5402,5404,5407],{"class":78,"line":1384},[76,5401,1623],{"class":93},[76,5403,1243],{"class":89},[76,5405,5406],{"class":2035},"add",[76,5408,5409],{"class":93},"(a,b);\n",[76,5411,5412],{"class":78,"line":1390},[76,5413,1637],{"class":93},[140,5415,5417],{"id":5416},"_23值传递","2.3值传递",[14,5419,5420],{},"值传递就是函数调用时实参将数值传给形参",[14,5422,5423],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5425,5426],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[67,5428,5430],{"className":190,"code":5429,"language":192,"meta":58,"style":58},"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",[73,5431,5432,5454,5458,5471,5488,5506,5517,5526,5535,5548,5564,5580,5589,5593,5601,5605,5617,5629,5636],{"__ignoreMap":58},[76,5433,5434,5437,5440,5442,5444,5446,5448,5450,5452],{"class":78,"line":79},[76,5435,5436],{"class":89},"void",[76,5438,5439],{"class":2035}," swap",[76,5441,202],{"class":93},[76,5443,205],{"class":89},[76,5445,5289],{"class":5288},[76,5447,578],{"class":93},[76,5449,205],{"class":89},[76,5451,5296],{"class":5288},[76,5453,208],{"class":93},[76,5455,5456],{"class":78,"line":86},[76,5457,1618],{"class":93},[76,5459,5460,5462,5464,5467,5469],{"class":78,"line":97},[76,5461,1623],{"class":93},[76,5463,1243],{"class":89},[76,5465,5466],{"class":305},"\"交换前：\"",[76,5468,1243],{"class":89},[76,5470,1265],{"class":93},[76,5472,5473,5475,5477,5480,5482,5484,5486],{"class":78,"line":103},[76,5474,1623],{"class":93},[76,5476,1243],{"class":89},[76,5478,5479],{"class":305},"\"num1=\"",[76,5481,1243],{"class":89},[76,5483,5314],{"class":93},[76,5485,1243],{"class":89},[76,5487,1265],{"class":93},[76,5489,5490,5492,5494,5497,5499,5502,5504],{"class":78,"line":1273},[76,5491,1623],{"class":93},[76,5493,1243],{"class":89},[76,5495,5496],{"class":305},"\"num2=\"",[76,5498,1243],{"class":89},[76,5500,5501],{"class":93},"num2",[76,5503,1243],{"class":89},[76,5505,1265],{"class":93},[76,5507,5508,5510,5512,5514],{"class":78,"line":1287},[76,5509,2057],{"class":89},[76,5511,4327],{"class":93},[76,5513,247],{"class":89},[76,5515,5516],{"class":93},"num1;\n",[76,5518,5519,5522,5524],{"class":78,"line":1293},[76,5520,5521],{"class":93},"    num1",[76,5523,247],{"class":89},[76,5525,5319],{"class":93},[76,5527,5528,5531,5533],{"class":78,"line":1384},[76,5529,5530],{"class":93},"    num2",[76,5532,247],{"class":89},[76,5534,4352],{"class":93},[76,5536,5537,5539,5541,5544,5546],{"class":78,"line":1390},[76,5538,1623],{"class":93},[76,5540,1243],{"class":89},[76,5542,5543],{"class":305},"\"交换后：\"",[76,5545,1243],{"class":89},[76,5547,1265],{"class":93},[76,5549,5550,5552,5554,5556,5558,5560,5562],{"class":78,"line":1402},[76,5551,1623],{"class":93},[76,5553,1243],{"class":89},[76,5555,5479],{"class":305},[76,5557,1243],{"class":89},[76,5559,5314],{"class":93},[76,5561,1243],{"class":89},[76,5563,1265],{"class":93},[76,5565,5566,5568,5570,5572,5574,5576,5578],{"class":78,"line":1684},[76,5567,1623],{"class":93},[76,5569,1243],{"class":89},[76,5571,5496],{"class":305},[76,5573,1243],{"class":89},[76,5575,5501],{"class":93},[76,5577,1243],{"class":89},[76,5579,1265],{"class":93},[76,5581,5582,5584,5586],{"class":78,"line":1689},[76,5583,4162],{"class":89},[76,5585,257],{"class":93},[76,5587,5588],{"class":82},"\u002F\u002F或者不写\n",[76,5590,5591],{"class":78,"line":1695},[76,5592,1637],{"class":93},[76,5594,5595,5597,5599],{"class":78,"line":1700},[76,5596,205],{"class":89},[76,5598,2045],{"class":2035},[76,5600,2048],{"class":93},[76,5602,5603],{"class":78,"line":1714},[76,5604,1618],{"class":93},[76,5606,5607,5609,5611,5613,5615],{"class":78,"line":1719},[76,5608,2057],{"class":89},[76,5610,1471],{"class":93},[76,5612,247],{"class":89},[76,5614,646],{"class":250},[76,5616,1363],{"class":93},[76,5618,5619,5621,5623,5625,5627],{"class":78,"line":1725},[76,5620,2057],{"class":89},[76,5622,2905],{"class":93},[76,5624,247],{"class":89},[76,5626,899],{"class":250},[76,5628,1363],{"class":93},[76,5630,5631,5634],{"class":78,"line":1746},[76,5632,5633],{"class":2035},"    swap",[76,5635,5409],{"class":93},[76,5637,5638],{"class":78,"line":1751},[76,5639,1637],{"class":93},[140,5641,5643],{"id":5642},"_24函数的常见形式","2.4函数的常见形式",[152,5645,5646],{},[155,5647,5648],{},"无参无返",[67,5650,5652],{"className":190,"code":5651,"language":192,"meta":58,"style":58},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[73,5653,5654,5663,5667,5680,5684,5692,5696,5701,5709],{"__ignoreMap":58},[76,5655,5656,5658,5661],{"class":78,"line":79},[76,5657,5436],{"class":89},[76,5659,5660],{"class":2035}," test01",[76,5662,2048],{"class":93},[76,5664,5665],{"class":78,"line":86},[76,5666,1618],{"class":93},[76,5668,5669,5671,5673,5676,5678],{"class":78,"line":97},[76,5670,1623],{"class":93},[76,5672,1243],{"class":89},[76,5674,5675],{"class":305},"\"你好\"",[76,5677,1243],{"class":89},[76,5679,1265],{"class":93},[76,5681,5682],{"class":78,"line":103},[76,5683,1637],{"class":93},[76,5685,5686,5688,5690],{"class":78,"line":1273},[76,5687,205],{"class":89},[76,5689,2045],{"class":2035},[76,5691,2048],{"class":93},[76,5693,5694],{"class":78,"line":1287},[76,5695,1618],{"class":93},[76,5697,5698],{"class":78,"line":1293},[76,5699,5700],{"class":82},"    \u002F\u002F函数调用\n",[76,5702,5703,5706],{"class":78,"line":1384},[76,5704,5705],{"class":2035},"    test01",[76,5707,5708],{"class":93},"();\n",[76,5710,5711],{"class":78,"line":1390},[76,5712,1637],{"class":93},[152,5714,5715],{"start":86},[155,5716,5717],{},"有参无返",[67,5719,5721],{"className":190,"code":5720,"language":192,"meta":58,"style":58},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[73,5722,5723,5738,5742,5754,5758,5766,5770,5781],{"__ignoreMap":58},[76,5724,5725,5727,5730,5732,5734,5736],{"class":78,"line":79},[76,5726,5436],{"class":89},[76,5728,5729],{"class":2035}," test02",[76,5731,202],{"class":93},[76,5733,205],{"class":89},[76,5735,1471],{"class":5288},[76,5737,208],{"class":93},[76,5739,5740],{"class":78,"line":86},[76,5741,1618],{"class":93},[76,5743,5744,5746,5748,5750,5752],{"class":78,"line":97},[76,5745,1623],{"class":93},[76,5747,1243],{"class":89},[76,5749,5675],{"class":305},[76,5751,1243],{"class":89},[76,5753,1265],{"class":93},[76,5755,5756],{"class":78,"line":103},[76,5757,1637],{"class":93},[76,5759,5760,5762,5764],{"class":78,"line":1273},[76,5761,205],{"class":89},[76,5763,2045],{"class":2035},[76,5765,2048],{"class":93},[76,5767,5768],{"class":78,"line":1287},[76,5769,1618],{"class":93},[76,5771,5772,5775,5777,5779],{"class":78,"line":1293},[76,5773,5774],{"class":2035},"    test02",[76,5776,202],{"class":93},[76,5778,512],{"class":250},[76,5780,2791],{"class":93},[76,5782,5783],{"class":78,"line":1384},[76,5784,1637],{"class":93},[152,5786,5787],{"start":97},[155,5788,5789],{},"无参有返",[67,5791,5793],{"className":190,"code":5792,"language":192,"meta":58,"style":58},"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",[73,5794,5795,5804,5808,5820,5829,5833,5841,5845,5858,5877],{"__ignoreMap":58},[76,5796,5797,5799,5802],{"class":78,"line":79},[76,5798,205],{"class":89},[76,5800,5801],{"class":2035}," test03",[76,5803,2048],{"class":93},[76,5805,5806],{"class":78,"line":86},[76,5807,1618],{"class":93},[76,5809,5810,5812,5814,5816,5818],{"class":78,"line":97},[76,5811,1623],{"class":93},[76,5813,1243],{"class":89},[76,5815,5675],{"class":305},[76,5817,1243],{"class":89},[76,5819,1265],{"class":93},[76,5821,5822,5824,5827],{"class":78,"line":103},[76,5823,4162],{"class":89},[76,5825,5826],{"class":250}," 100",[76,5828,1363],{"class":93},[76,5830,5831],{"class":78,"line":1273},[76,5832,1637],{"class":93},[76,5834,5835,5837,5839],{"class":78,"line":1287},[76,5836,205],{"class":89},[76,5838,2045],{"class":2035},[76,5840,2048],{"class":93},[76,5842,5843],{"class":78,"line":1293},[76,5844,1618],{"class":93},[76,5846,5847,5849,5851,5853,5856],{"class":78,"line":1384},[76,5848,2057],{"class":89},[76,5850,5289],{"class":93},[76,5852,247],{"class":89},[76,5854,5855],{"class":2035},"test03",[76,5857,5708],{"class":93},[76,5859,5860,5862,5864,5866,5868,5870,5872,5874],{"class":78,"line":1390},[76,5861,1623],{"class":93},[76,5863,1243],{"class":89},[76,5865,5479],{"class":305},[76,5867,1243],{"class":89},[76,5869,5314],{"class":93},[76,5871,1243],{"class":89},[76,5873,1311],{"class":93},[76,5875,5876],{"class":82}," \u002F\u002F100\n",[76,5878,5879],{"class":78,"line":1402},[76,5880,1637],{"class":93},[14,5882,5883],{},"4.有参有返",[67,5885,5887],{"className":190,"code":5886,"language":192,"meta":58,"style":58},"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",[73,5888,5889,5904,5908,5921,5927,5931,5940,5944,5956,5970,5985],{"__ignoreMap":58},[76,5890,5891,5893,5896,5898,5900,5902],{"class":78,"line":79},[76,5892,205],{"class":89},[76,5894,5895],{"class":2035}," test04",[76,5897,202],{"class":93},[76,5899,205],{"class":89},[76,5901,1471],{"class":5288},[76,5903,208],{"class":93},[76,5905,5906],{"class":78,"line":86},[76,5907,1618],{"class":93},[76,5909,5910,5912,5914,5917,5919],{"class":78,"line":97},[76,5911,1623],{"class":93},[76,5913,1243],{"class":89},[76,5915,5916],{"class":305},"\"hello\"",[76,5918,1243],{"class":89},[76,5920,1265],{"class":93},[76,5922,5923,5925],{"class":78,"line":103},[76,5924,4162],{"class":89},[76,5926,1505],{"class":93},[76,5928,5929],{"class":78,"line":1273},[76,5930,1637],{"class":93},[76,5932,5933,5935,5938],{"class":78,"line":1287},[76,5934,205],{"class":89},[76,5936,5937],{"class":2035}," mian",[76,5939,2048],{"class":93},[76,5941,5942],{"class":78,"line":1293},[76,5943,1618],{"class":93},[76,5945,5946,5948,5950,5952,5954],{"class":78,"line":1384},[76,5947,2057],{"class":89},[76,5949,2905],{"class":93},[76,5951,247],{"class":89},[76,5953,418],{"class":250},[76,5955,1363],{"class":93},[76,5957,5958,5960,5962,5964,5967],{"class":78,"line":1390},[76,5959,2057],{"class":89},[76,5961,2921],{"class":93},[76,5963,247],{"class":89},[76,5965,5966],{"class":2035},"test04",[76,5968,5969],{"class":93},"(b);\n",[76,5971,5972,5974,5976,5978,5980,5982],{"class":78,"line":1402},[76,5973,1623],{"class":93},[76,5975,1243],{"class":89},[76,5977,489],{"class":93},[76,5979,1243],{"class":89},[76,5981,1311],{"class":93},[76,5983,5984],{"class":82}," \u002F\u002F1\n",[76,5986,5987],{"class":78,"line":1684},[76,5988,1637],{"class":93},[140,5990,5992],{"id":5991},"_25函数的声明","2.5函数的声明",[14,5994,5995],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5997,5998,5999],{},"函数的",[350,6000,6001],{},"声明可以多次，但是函数的定义只能有一次",[67,6003,6005],{"className":190,"code":6004,"language":192,"meta":58,"style":58},"\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",[73,6006,6007,6012,6017,6042,6051,6055,6067,6079,6095,6099,6119,6123,6142],{"__ignoreMap":58},[76,6008,6009],{"class":78,"line":79},[76,6010,6011],{"class":82},"\u002F\u002F函数声明\n",[76,6013,6014],{"class":78,"line":86},[76,6015,6016],{"class":82},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[76,6018,6019,6021,6024,6026,6028,6030,6032,6034,6036,6039],{"class":78,"line":97},[76,6020,205],{"class":89},[76,6022,6023],{"class":2035}," max",[76,6025,202],{"class":93},[76,6027,205],{"class":89},[76,6029,1471],{"class":5288},[76,6031,578],{"class":93},[76,6033,205],{"class":89},[76,6035,2905],{"class":5288},[76,6037,6038],{"class":93},");",[76,6040,6041],{"class":82},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[76,6043,6044,6046,6048],{"class":78,"line":103},[76,6045,205],{"class":89},[76,6047,2045],{"class":2035},[76,6049,6050],{"class":93},"() \n",[76,6052,6053],{"class":78,"line":1273},[76,6054,1618],{"class":93},[76,6056,6057,6059,6061,6063,6065],{"class":78,"line":1287},[76,6058,2057],{"class":89},[76,6060,1471],{"class":93},[76,6062,247],{"class":89},[76,6064,646],{"class":250},[76,6066,1363],{"class":93},[76,6068,6069,6071,6073,6075,6077],{"class":78,"line":1293},[76,6070,2057],{"class":89},[76,6072,2905],{"class":93},[76,6074,247],{"class":89},[76,6076,899],{"class":250},[76,6078,1363],{"class":93},[76,6080,6081,6083,6085,6088,6091,6093],{"class":78,"line":1384},[76,6082,1623],{"class":93},[76,6084,1243],{"class":89},[76,6086,6087],{"class":2035},"max",[76,6089,6090],{"class":93},"(a,b)",[76,6092,1243],{"class":89},[76,6094,1265],{"class":93},[76,6096,6097],{"class":78,"line":1390},[76,6098,1637],{"class":93},[76,6100,6101,6103,6105,6107,6109,6111,6113,6115,6117],{"class":78,"line":1402},[76,6102,205],{"class":89},[76,6104,6023],{"class":2035},[76,6106,202],{"class":93},[76,6108,205],{"class":89},[76,6110,1471],{"class":5288},[76,6112,578],{"class":93},[76,6114,205],{"class":89},[76,6116,2905],{"class":5288},[76,6118,208],{"class":93},[76,6120,6121],{"class":78,"line":1684},[76,6122,1618],{"class":93},[76,6124,6125,6127,6129,6131,6133,6135,6137,6139],{"class":78,"line":1689},[76,6126,4162],{"class":89},[76,6128,1471],{"class":93},[76,6130,1159],{"class":89},[76,6132,464],{"class":93},[76,6134,1185],{"class":89},[76,6136,439],{"class":93},[76,6138,1058],{"class":89},[76,6140,6141],{"class":93},"b;\n",[76,6143,6144],{"class":78,"line":1695},[76,6145,1637],{"class":93},[140,6147,6149],{"id":6148},"_26函数的分文件编写","2.6函数的分文件编写",[14,6151,6152],{},"4个步骤：",[1206,6154,6155,6158,6161,6164],{},[155,6156,6157],{},"1.创建后缀名为.h的头文件",[155,6159,6160],{},"2.创建后缀名为.cpp的源文件",[155,6162,6163],{},"3.在头文件中写函数的定义",[155,6165,6166],{},"4.在源文件中写函数的定义\n示例：",[14,6168,6169],{},"头文件：swap.h",[67,6171,6173],{"className":190,"code":6172,"language":192,"meta":58,"style":58},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[73,6174,6175,6181,6191,6195],{"__ignoreMap":58},[76,6176,6177,6179],{"class":78,"line":79},[76,6178,2021],{"class":89},[76,6180,2024],{"class":305},[76,6182,6183,6185,6187,6189],{"class":78,"line":86},[76,6184,2029],{"class":89},[76,6186,2032],{"class":89},[76,6188,2036],{"class":2035},[76,6190,1363],{"class":93},[76,6192,6193],{"class":78,"line":97},[76,6194,6011],{"class":82},[76,6196,6197,6199,6201,6203,6205,6207,6209,6211,6213],{"class":78,"line":103},[76,6198,5436],{"class":89},[76,6200,5439],{"class":2035},[76,6202,202],{"class":93},[76,6204,205],{"class":89},[76,6206,1471],{"class":5288},[76,6208,578],{"class":93},[76,6210,205],{"class":89},[76,6212,2905],{"class":5288},[76,6214,2791],{"class":93},[14,6216,6217],{},"源文件：swap.cpp",[67,6219,6221],{"className":190,"code":6220,"language":192,"meta":58,"style":58},"#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",[73,6222,6223,6230,6235,6255,6259,6270,6279,6288,6305,6322],{"__ignoreMap":58},[76,6224,6225,6227],{"class":78,"line":79},[76,6226,2021],{"class":89},[76,6228,6229],{"class":305}," \"swap.h\"\n",[76,6231,6232],{"class":78,"line":86},[76,6233,6234],{"class":82},"\u002F\u002F函数的定义\n",[76,6236,6237,6239,6241,6243,6245,6247,6249,6251,6253],{"class":78,"line":97},[76,6238,5436],{"class":89},[76,6240,5439],{"class":2035},[76,6242,202],{"class":93},[76,6244,205],{"class":89},[76,6246,1471],{"class":5288},[76,6248,578],{"class":93},[76,6250,205],{"class":89},[76,6252,2905],{"class":5288},[76,6254,208],{"class":93},[76,6256,6257],{"class":78,"line":103},[76,6258,1618],{"class":93},[76,6260,6261,6263,6265,6267],{"class":78,"line":1273},[76,6262,2057],{"class":89},[76,6264,4327],{"class":93},[76,6266,247],{"class":89},[76,6268,6269],{"class":93},"a;\n",[76,6271,6272,6275,6277],{"class":78,"line":1287},[76,6273,6274],{"class":93},"    a",[76,6276,247],{"class":89},[76,6278,6141],{"class":93},[76,6280,6281,6284,6286],{"class":78,"line":1293},[76,6282,6283],{"class":93},"    b",[76,6285,247],{"class":89},[76,6287,4352],{"class":93},[76,6289,6290,6292,6294,6297,6299,6301,6303],{"class":78,"line":1384},[76,6291,1623],{"class":93},[76,6293,1243],{"class":89},[76,6295,6296],{"class":305},"\"a=\"",[76,6298,1243],{"class":89},[76,6300,439],{"class":93},[76,6302,1243],{"class":89},[76,6304,1265],{"class":93},[76,6306,6307,6309,6311,6314,6316,6318,6320],{"class":78,"line":1390},[76,6308,1623],{"class":93},[76,6310,1243],{"class":89},[76,6312,6313],{"class":305},"\"b=\"",[76,6315,1243],{"class":89},[76,6317,464],{"class":93},[76,6319,1243],{"class":89},[76,6321,1265],{"class":93},[76,6323,6324],{"class":78,"line":1402},[76,6325,1637],{"class":93},[117,6327,6328],{},"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":58,"searchDepth":86,"depth":86,"links":6330},[6331,6332,6333,6334,6335,6336],{"id":5244,"depth":86,"text":5245},{"id":5333,"depth":86,"text":5334},{"id":5416,"depth":86,"text":5417},{"id":5642,"depth":86,"text":5643},{"id":5991,"depth":86,"text":5992},{"id":6148,"depth":86,"text":6149},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5236,"description":58},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6343,"title":6344,"body":6345,"description":6352,"extension":123,"meta":7757,"navigation":125,"path":7758,"seo":7759,"stem":7760,"__hash__":7761},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6346,"toc":7747},[6347,6350,6353,6357,6519,6523,6526,6529,6532,6535,6675,6679,6682,6685,6688,6753,6757,6762,6829,6832,6836,6839,6850,6855,6875,6878,6883,6902,6905,6909,6928,6931,6935,7170,7174,7177,7180,7183,7345,7348,7352,7355,7361,7744],[10,6348,6344],{"id":6349},"_3指针",[14,6351,6352],{},"通过指针保存一个地址，指针就是个地址",[140,6354,6356],{"id":6355},"_31定义指针","3.1定义指针",[67,6358,6360],{"className":190,"code":6359,"language":192,"meta":58,"style":58},"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",[73,6361,6362,6370,6374,6379,6391,6396,6404,6414,6432,6452,6456,6461,6466,6471,6485,6501,6515],{"__ignoreMap":58},[76,6363,6364,6366,6368],{"class":78,"line":79},[76,6365,205],{"class":89},[76,6367,2045],{"class":2035},[76,6369,2048],{"class":93},[76,6371,6372],{"class":78,"line":86},[76,6373,1618],{"class":93},[76,6375,6376],{"class":78,"line":97},[76,6377,6378],{"class":82},"    \u002F\u002F1.定义指针\n",[76,6380,6381,6383,6385,6387,6389],{"class":78,"line":103},[76,6382,2057],{"class":89},[76,6384,1471],{"class":93},[76,6386,247],{"class":89},[76,6388,646],{"class":250},[76,6390,1363],{"class":93},[76,6392,6393],{"class":78,"line":1273},[76,6394,6395],{"class":82},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[76,6397,6398,6401],{"class":78,"line":1287},[76,6399,6400],{"class":89},"    int*",[76,6402,6403],{"class":93},"p;\n",[76,6405,6406,6409,6412],{"class":78,"line":1293},[76,6407,6408],{"class":93},"    p",[76,6410,6411],{"class":89},"=&",[76,6413,6269],{"class":93},[76,6415,6416,6418,6420,6423,6426,6428,6430],{"class":78,"line":1384},[76,6417,1623],{"class":93},[76,6419,1243],{"class":89},[76,6421,6422],{"class":305},"\"a的地址为：\"",[76,6424,6425],{"class":89},"\u003C\u003C&",[76,6427,439],{"class":93},[76,6429,1243],{"class":89},[76,6431,1265],{"class":93},[76,6433,6434,6436,6438,6441,6443,6445,6447,6449],{"class":78,"line":1390},[76,6435,1623],{"class":93},[76,6437,1243],{"class":89},[76,6439,6440],{"class":305},"\"指针p为：\"",[76,6442,1243],{"class":89},[76,6444,14],{"class":93},[76,6446,1243],{"class":89},[76,6448,1311],{"class":93},[76,6450,6451],{"class":82},"\u002F\u002F指针p表示的就是a的地址\n",[76,6453,6454],{"class":78,"line":1402},[76,6455,2472],{"emptyLinePlaceholder":125},[76,6457,6458],{"class":78,"line":1684},[76,6459,6460],{"class":82},"    \u002F\u002F2.使用指针\n",[76,6462,6463],{"class":78,"line":1689},[76,6464,6465],{"class":82},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[76,6467,6468],{"class":78,"line":1695},[76,6469,6470],{"class":82},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[76,6472,6473,6476,6478,6480,6483],{"class":78,"line":1700},[76,6474,6475],{"class":89},"    *",[76,6477,14],{"class":93},[76,6479,247],{"class":89},[76,6481,6482],{"class":250},"1000",[76,6484,1363],{"class":93},[76,6486,6487,6489,6492,6494,6496,6498],{"class":78,"line":1714},[76,6488,1623],{"class":93},[76,6490,6491],{"class":89},"\u003C\u003C*",[76,6493,14],{"class":93},[76,6495,1243],{"class":89},[76,6497,1311],{"class":93},[76,6499,6500],{"class":82},"\u002F\u002F1000\n",[76,6502,6503,6505,6507,6509,6511,6513],{"class":78,"line":1719},[76,6504,1623],{"class":93},[76,6506,1243],{"class":89},[76,6508,439],{"class":93},[76,6510,1243],{"class":89},[76,6512,1311],{"class":93},[76,6514,6500],{"class":82},[76,6516,6517],{"class":78,"line":1725},[76,6518,1637],{"class":93},[140,6520,6522],{"id":6521},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6524,6525],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6527,6528],{},"在32位操作系统下：占用4个字节空间",[14,6530,6531],{},"在64位操作系统下：占用8个字节空间",[14,6533,6534],{},"上方是不管啥数据类型的",[67,6536,6538],{"className":190,"code":6537,"language":192,"meta":58,"style":58},"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",[73,6539,6540,6548,6552,6557,6569,6574,6579,6584,6597,6619,6645,6671],{"__ignoreMap":58},[76,6541,6542,6544,6546],{"class":78,"line":79},[76,6543,205],{"class":89},[76,6545,2045],{"class":2035},[76,6547,2048],{"class":93},[76,6549,6550],{"class":78,"line":86},[76,6551,1618],{"class":93},[76,6553,6554],{"class":78,"line":97},[76,6555,6556],{"class":82},"    \u002F\u002F指针所占内存空间\n",[76,6558,6559,6561,6563,6565,6567],{"class":78,"line":103},[76,6560,2057],{"class":89},[76,6562,1471],{"class":93},[76,6564,247],{"class":89},[76,6566,646],{"class":250},[76,6568,1363],{"class":93},[76,6570,6571],{"class":78,"line":1273},[76,6572,6573],{"class":82},"    \u002F\u002Fint *p;\n",[76,6575,6576],{"class":78,"line":1287},[76,6577,6578],{"class":82},"    \u002F\u002Fp=&a;\n",[76,6580,6581],{"class":78,"line":1293},[76,6582,6583],{"class":82},"    \u002F\u002F上述可以写为以下：\n",[76,6585,6586,6588,6591,6593,6595],{"class":78,"line":1384},[76,6587,2057],{"class":89},[76,6589,6590],{"class":89}," *",[76,6592,14],{"class":93},[76,6594,6411],{"class":89},[76,6596,6269],{"class":93},[76,6598,6599,6602,6604,6607,6609,6612,6614,6616],{"class":78,"line":1390},[76,6600,6601],{"class":93},"    cout ",[76,6603,1243],{"class":89},[76,6605,6606],{"class":305},"\"sizeof(int *)\"",[76,6608,1445],{"class":89},[76,6610,6611],{"class":93},"(p)",[76,6613,1243],{"class":89},[76,6615,1311],{"class":93},[76,6617,6618],{"class":82},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[76,6620,6621,6623,6625,6627,6629,6631,6633,6635,6637,6639,6642],{"class":78,"line":1402},[76,6622,6601],{"class":93},[76,6624,1243],{"class":89},[76,6626,6606],{"class":305},[76,6628,1445],{"class":89},[76,6630,202],{"class":93},[76,6632,205],{"class":89},[76,6634,6590],{"class":89},[76,6636,629],{"class":93},[76,6638,1243],{"class":89},[76,6640,6641],{"class":93},"endl",[76,6643,6644],{"class":82},"  \u002F\u002F4字节(32位的话)\n",[76,6646,6647,6649,6651,6654,6656,6658,6660,6662,6664,6666,6668],{"class":78,"line":1684},[76,6648,6601],{"class":93},[76,6650,1243],{"class":89},[76,6652,6653],{"class":305},"\"sizeof(char *)\"",[76,6655,1445],{"class":89},[76,6657,202],{"class":93},[76,6659,297],{"class":89},[76,6661,6590],{"class":89},[76,6663,629],{"class":93},[76,6665,1243],{"class":89},[76,6667,1311],{"class":93},[76,6669,6670],{"class":82}," \u002F\u002F4字节(32位的话)\n",[76,6672,6673],{"class":78,"line":1689},[76,6674,1637],{"class":93},[140,6676,6678],{"id":6677},"_33空指针","3.3空指针",[14,6680,6681],{},"空指针：指针变量指向内存中编号为0的空间",[14,6683,6684],{},"用途：初始化指针变量",[14,6686,6687],{},"注意：空指针指向的内存是不可以访问的",[67,6689,6691],{"className":190,"code":6690,"language":192,"meta":58,"style":58},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[73,6692,6693,6701,6705,6710,6724,6729,6744,6749],{"__ignoreMap":58},[76,6694,6695,6697,6699],{"class":78,"line":79},[76,6696,205],{"class":89},[76,6698,2045],{"class":2035},[76,6700,2048],{"class":93},[76,6702,6703],{"class":78,"line":86},[76,6704,1618],{"class":93},[76,6706,6707],{"class":78,"line":97},[76,6708,6709],{"class":82},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[76,6711,6712,6714,6716,6718,6720,6722],{"class":78,"line":103},[76,6713,2057],{"class":89},[76,6715,6590],{"class":89},[76,6717,14],{"class":93},[76,6719,247],{"class":89},[76,6721,2464],{"class":250},[76,6723,1363],{"class":93},[76,6725,6726],{"class":78,"line":1273},[76,6727,6728],{"class":82},"    \u002F\u002F2.空指针不能进行访问\n",[76,6730,6731,6733,6735,6737,6739,6741],{"class":78,"line":1287},[76,6732,6475],{"class":89},[76,6734,14],{"class":93},[76,6736,247],{"class":89},[76,6738,512],{"class":250},[76,6740,257],{"class":93},[76,6742,6743],{"class":82},"\u002F\u002F直接报错，压根不能访问\n",[76,6745,6746],{"class":78,"line":1293},[76,6747,6748],{"class":82},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[76,6750,6751],{"class":78,"line":1384},[76,6752,1637],{"class":93},[140,6754,6756],{"id":6755},"_34野指针","3.4野指针",[14,6758,6759],{},[350,6760,6761],{},"指针变量指向非法的内存空间",[67,6763,6765],{"className":190,"code":6764,"language":192,"meta":58,"style":58},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[73,6766,6767,6775,6779,6808,6813,6825],{"__ignoreMap":58},[76,6768,6769,6771,6773],{"class":78,"line":79},[76,6770,205],{"class":89},[76,6772,2045],{"class":2035},[76,6774,2048],{"class":93},[76,6776,6777],{"class":78,"line":86},[76,6778,1618],{"class":93},[76,6780,6781,6783,6785,6787,6789,6791,6793,6795,6797,6800,6803,6805],{"class":78,"line":97},[76,6782,2057],{"class":89},[76,6784,6590],{"class":89},[76,6786,14],{"class":93},[76,6788,247],{"class":89},[76,6790,202],{"class":93},[76,6792,205],{"class":89},[76,6794,6590],{"class":89},[76,6796,629],{"class":93},[76,6798,6799],{"class":89},"0x",[76,6801,6802],{"class":250},"1100",[76,6804,257],{"class":93},[76,6806,6807],{"class":82}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[76,6809,6810],{"class":78,"line":103},[76,6811,6812],{"class":82},"    \u002F\u002F访问野指针报错\n",[76,6814,6815,6817,6819,6821,6823],{"class":78,"line":1273},[76,6816,1623],{"class":93},[76,6818,6491],{"class":89},[76,6820,14],{"class":93},[76,6822,1243],{"class":89},[76,6824,1265],{"class":93},[76,6826,6827],{"class":78,"line":1287},[76,6828,1637],{"class":93},[14,6830,6831],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[140,6833,6835],{"id":6834},"_35const修饰指针","3.5const修饰指针",[14,6837,6838],{},"三种情况：",[1206,6840,6841,6844,6847],{},[155,6842,6843],{},"const修饰指针 常量指针",[155,6845,6846],{},"const修饰常量 指针常量",[155,6848,6849],{},"const即修饰指针，又修饰常量",[152,6851,6852],{},[155,6853,6854],{},"常量指针",[67,6856,6858],{"className":190,"code":6857,"language":192,"meta":58,"style":58},"const int *p=&a;\n",[73,6859,6860],{"__ignoreMap":58},[76,6861,6862,6865,6867,6869,6871,6873],{"class":78,"line":79},[76,6863,6864],{"class":89},"const",[76,6866,2454],{"class":89},[76,6868,6590],{"class":89},[76,6870,14],{"class":93},[76,6872,6411],{"class":89},[76,6874,6269],{"class":93},[14,6876,6877],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[152,6879,6880],{"start":86},[155,6881,6882],{},"指针常量",[67,6884,6886],{"className":190,"code":6885,"language":192,"meta":58,"style":58},"int *const p=&a;\n",[73,6887,6888],{"__ignoreMap":58},[76,6889,6890,6892,6895,6898,6900],{"class":78,"line":79},[76,6891,205],{"class":89},[76,6893,6894],{"class":89}," *const",[76,6896,6897],{"class":93}," p",[76,6899,6411],{"class":89},[76,6901,6269],{"class":93},[14,6903,6904],{},"指针的指向不可以改，指针指向的值可以改",[152,6906,6907],{"start":97},[155,6908,6849],{},[67,6910,6912],{"className":190,"code":6911,"language":192,"meta":58,"style":58},"const int *const p=&a;\n",[73,6913,6914],{"__ignoreMap":58},[76,6915,6916,6918,6920,6922,6924,6926],{"class":78,"line":79},[76,6917,6864],{"class":89},[76,6919,2454],{"class":89},[76,6921,6894],{"class":89},[76,6923,6897],{"class":93},[76,6925,6411],{"class":89},[76,6927,6269],{"class":93},[14,6929,6930],{},"指针的指向和指针指向的值都不可以改变",[140,6932,6934],{"id":6933},"_36指针和数组","3.6指针和数组",[67,6936,6938],{"className":190,"code":6937,"language":192,"meta":58,"style":58},"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",[73,6939,6940,6948,6952,6957,7011,7032,7048,7064,7075,7092,7097,7111,7137,7141,7153,7162,7166],{"__ignoreMap":58},[76,6941,6942,6944,6946],{"class":78,"line":79},[76,6943,205],{"class":89},[76,6945,2045],{"class":2035},[76,6947,2048],{"class":93},[76,6949,6950],{"class":78,"line":86},[76,6951,1618],{"class":93},[76,6953,6954],{"class":78,"line":97},[76,6955,6956],{"class":82},"    \u002F\u002F利用指针访问数组中的元素\n",[76,6958,6959,6961,6963,6965,6967,6969,6971,6973,6975,6977,6979,6981,6983,6985,6987,6989,6991,6993,6995,6997,6999,7001,7003,7005,7007,7009],{"class":78,"line":103},[76,6960,2057],{"class":89},[76,6962,4034],{"class":93},[76,6964,646],{"class":250},[76,6966,1139],{"class":93},[76,6968,247],{"class":89},[76,6970,1095],{"class":93},[76,6972,418],{"class":250},[76,6974,578],{"class":93},[76,6976,278],{"class":250},[76,6978,578],{"class":93},[76,6980,272],{"class":250},[76,6982,578],{"class":93},[76,6984,494],{"class":250},[76,6986,578],{"class":93},[76,6988,520],{"class":250},[76,6990,578],{"class":93},[76,6992,544],{"class":250},[76,6994,578],{"class":93},[76,6996,569],{"class":250},[76,6998,578],{"class":93},[76,7000,595],{"class":250},[76,7002,578],{"class":93},[76,7004,620],{"class":250},[76,7006,578],{"class":93},[76,7008,646],{"class":250},[76,7010,4067],{"class":93},[76,7012,7013,7015,7017,7020,7022,7024,7026,7028,7030],{"class":78,"line":1273},[76,7014,1623],{"class":93},[76,7016,1243],{"class":89},[76,7018,7019],{"class":305},"\"数组的第一个元素为：\"",[76,7021,1243],{"class":89},[76,7023,3978],{"class":93},[76,7025,392],{"class":250},[76,7027,1139],{"class":93},[76,7029,1243],{"class":89},[76,7031,1265],{"class":93},[76,7033,7034,7036,7038,7040,7042,7045],{"class":78,"line":1287},[76,7035,2057],{"class":89},[76,7037,6590],{"class":89},[76,7039,14],{"class":93},[76,7041,247],{"class":89},[76,7043,7044],{"class":93},"arr;",[76,7046,7047],{"class":82},"\u002F\u002F注意数才要加取地址符号&\n",[76,7049,7050,7052,7054,7056,7058,7060,7062],{"class":78,"line":1293},[76,7051,1623],{"class":93},[76,7053,1243],{"class":89},[76,7055,7019],{"class":305},[76,7057,6491],{"class":89},[76,7059,14],{"class":93},[76,7061,1243],{"class":89},[76,7063,1265],{"class":93},[76,7065,7066,7068,7070,7072],{"class":78,"line":1384},[76,7067,6408],{"class":93},[76,7069,2364],{"class":89},[76,7071,257],{"class":93},[76,7073,7074],{"class":82}," \u002F\u002F让指针向后偏移4个字节\n",[76,7076,7077,7079,7081,7084,7086,7088,7090],{"class":78,"line":1390},[76,7078,1623],{"class":93},[76,7080,1243],{"class":89},[76,7082,7083],{"class":305},"\"数组的第二个元素为：\"",[76,7085,6491],{"class":89},[76,7087,14],{"class":93},[76,7089,1243],{"class":89},[76,7091,1265],{"class":93},[76,7093,7094],{"class":78,"line":1402},[76,7095,7096],{"class":82},"    \u002F\u002F利用指针遍历数组\n",[76,7098,7099,7101,7103,7106,7108],{"class":78,"line":1684},[76,7100,2057],{"class":89},[76,7102,6590],{"class":89},[76,7104,7105],{"class":93},"p2",[76,7107,247],{"class":89},[76,7109,7110],{"class":93},"arr;\n",[76,7112,7113,7115,7117,7119,7121,7123,7125,7127,7129,7131,7133,7135],{"class":78,"line":1689},[76,7114,3273],{"class":89},[76,7116,1730],{"class":93},[76,7118,205],{"class":89},[76,7120,3104],{"class":93},[76,7122,247],{"class":89},[76,7124,392],{"class":250},[76,7126,3111],{"class":93},[76,7128,1109],{"class":89},[76,7130,646],{"class":250},[76,7132,3111],{"class":93},[76,7134,2364],{"class":89},[76,7136,208],{"class":93},[76,7138,7139],{"class":78,"line":1695},[76,7140,2102],{"class":93},[76,7142,7143,7145,7147,7149,7151],{"class":78,"line":1700},[76,7144,3523],{"class":93},[76,7146,6491],{"class":89},[76,7148,7105],{"class":93},[76,7150,1243],{"class":89},[76,7152,1265],{"class":93},[76,7154,7155,7158,7160],{"class":78,"line":1714},[76,7156,7157],{"class":93},"        p2",[76,7159,2364],{"class":89},[76,7161,1363],{"class":93},[76,7163,7164],{"class":78,"line":1719},[76,7165,2259],{"class":93},[76,7167,7168],{"class":78,"line":1725},[76,7169,1637],{"class":93},[140,7171,7173],{"id":7172},"_37指针和函数","3.7指针和函数",[14,7175,7176],{},"利用指针做函数参数，可以修改实参的值",[14,7178,7179],{},"值传递：只改变形参，不改变实参",[14,7181,7182],{},"地址传递：",[67,7184,7186],{"className":190,"code":7185,"language":192,"meta":58,"style":58},"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",[73,7187,7188,7213,7217,7229,7240,7250,7254,7262,7266,7278,7290,7295,7311,7326,7341],{"__ignoreMap":58},[76,7189,7190,7192,7194,7196,7198,7200,7203,7205,7207,7209,7211],{"class":78,"line":79},[76,7191,5436],{"class":89},[76,7193,5439],{"class":2035},[76,7195,202],{"class":93},[76,7197,205],{"class":89},[76,7199,6590],{"class":89},[76,7201,7202],{"class":5288},"p1",[76,7204,578],{"class":93},[76,7206,205],{"class":89},[76,7208,6590],{"class":89},[76,7210,7105],{"class":5288},[76,7212,208],{"class":93},[76,7214,7215],{"class":78,"line":86},[76,7216,1618],{"class":93},[76,7218,7219,7221,7223,7226],{"class":78,"line":97},[76,7220,2057],{"class":89},[76,7222,4327],{"class":93},[76,7224,7225],{"class":89},"=*",[76,7227,7228],{"class":93},"p1;\n",[76,7230,7231,7233,7235,7237],{"class":78,"line":103},[76,7232,6475],{"class":89},[76,7234,7202],{"class":93},[76,7236,7225],{"class":89},[76,7238,7239],{"class":93},"p2;\n",[76,7241,7242,7244,7246,7248],{"class":78,"line":1273},[76,7243,6475],{"class":89},[76,7245,7105],{"class":93},[76,7247,247],{"class":89},[76,7249,4352],{"class":93},[76,7251,7252],{"class":78,"line":1287},[76,7253,1637],{"class":93},[76,7255,7256,7258,7260],{"class":78,"line":1293},[76,7257,205],{"class":89},[76,7259,2045],{"class":2035},[76,7261,2048],{"class":93},[76,7263,7264],{"class":78,"line":1384},[76,7265,1618],{"class":93},[76,7267,7268,7270,7272,7274,7276],{"class":78,"line":1390},[76,7269,2057],{"class":89},[76,7271,1471],{"class":93},[76,7273,247],{"class":89},[76,7275,646],{"class":250},[76,7277,1363],{"class":93},[76,7279,7280,7282,7284,7286,7288],{"class":78,"line":1402},[76,7281,2057],{"class":89},[76,7283,2905],{"class":93},[76,7285,247],{"class":89},[76,7287,899],{"class":250},[76,7289,1363],{"class":93},[76,7291,7292],{"class":78,"line":1684},[76,7293,7294],{"class":82},"    \u002F\u002F地址传递\n",[76,7296,7297,7299,7301,7303,7306,7308],{"class":78,"line":1689},[76,7298,5633],{"class":2035},[76,7300,202],{"class":93},[76,7302,553],{"class":89},[76,7304,7305],{"class":93},"a,",[76,7307,553],{"class":89},[76,7309,7310],{"class":93},"b);\n",[76,7312,7313,7315,7317,7319,7321,7323],{"class":78,"line":1695},[76,7314,1623],{"class":93},[76,7316,1243],{"class":89},[76,7318,439],{"class":93},[76,7320,1243],{"class":89},[76,7322,1311],{"class":93},[76,7324,7325],{"class":82},"\u002F\u002F20\n",[76,7327,7328,7330,7332,7334,7336,7338],{"class":78,"line":1700},[76,7329,1623],{"class":93},[76,7331,1243],{"class":89},[76,7333,464],{"class":93},[76,7335,1243],{"class":89},[76,7337,1311],{"class":93},[76,7339,7340],{"class":82},"\u002F\u002F10\n",[76,7342,7343],{"class":78,"line":1714},[76,7344,1637],{"class":93},[14,7346,7347],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[140,7349,7351],{"id":7350},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7353,7354],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7356,7357,7358,7360],{},"例如数组：int arr",[76,7359,646],{},"={4,3,6,9,1,2,10,8,7,5}",[67,7362,7364],{"className":190,"code":7363,"language":192,"meta":58,"style":58},"#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",[73,7365,7366,7372,7382,7406,7410,7441,7445,7479,7483,7501,7505,7516,7531,7546,7550,7554,7558,7562,7566,7574,7578,7583,7637,7649,7661,7666,7674,7678,7683,7708,7712,7727,7736,7740],{"__ignoreMap":58},[76,7367,7368,7370],{"class":78,"line":79},[76,7369,2021],{"class":89},[76,7371,2024],{"class":305},[76,7373,7374,7376,7378,7380],{"class":78,"line":86},[76,7375,2029],{"class":89},[76,7377,2032],{"class":89},[76,7379,2036],{"class":2035},[76,7381,1363],{"class":93},[76,7383,7384,7386,7389,7391,7393,7395,7397,7399,7401,7404],{"class":78,"line":97},[76,7385,5436],{"class":89},[76,7387,7388],{"class":2035}," bubbleSort",[76,7390,202],{"class":93},[76,7392,205],{"class":89},[76,7394,6590],{"class":89},[76,7396,14],{"class":5288},[76,7398,578],{"class":93},[76,7400,205],{"class":89},[76,7402,7403],{"class":5288}," len",[76,7405,208],{"class":93},[76,7407,7408],{"class":78,"line":103},[76,7409,1618],{"class":93},[76,7411,7412,7414,7416,7418,7420,7422,7424,7426,7428,7431,7433,7435,7437,7439],{"class":78,"line":1273},[76,7413,3273],{"class":89},[76,7415,202],{"class":93},[76,7417,205],{"class":89},[76,7419,3104],{"class":93},[76,7421,247],{"class":89},[76,7423,392],{"class":250},[76,7425,3111],{"class":93},[76,7427,1109],{"class":89},[76,7429,7430],{"class":93},"len",[76,7432,112],{"class":89},[76,7434,418],{"class":250},[76,7436,3111],{"class":93},[76,7438,2364],{"class":89},[76,7440,208],{"class":93},[76,7442,7443],{"class":78,"line":1287},[76,7444,2102],{"class":93},[76,7446,7447,7449,7451,7453,7455,7457,7459,7461,7463,7465,7467,7469,7471,7473,7475,7477],{"class":78,"line":1293},[76,7448,3475],{"class":89},[76,7450,202],{"class":93},[76,7452,205],{"class":89},[76,7454,3482],{"class":93},[76,7456,247],{"class":89},[76,7458,392],{"class":250},[76,7460,3489],{"class":93},[76,7462,1109],{"class":89},[76,7464,7430],{"class":93},[76,7466,112],{"class":89},[76,7468,641],{"class":93},[76,7470,112],{"class":89},[76,7472,418],{"class":250},[76,7474,3489],{"class":93},[76,7476,2364],{"class":89},[76,7478,208],{"class":93},[76,7480,7481],{"class":78,"line":1384},[76,7482,2582],{"class":93},[76,7484,7485,7487,7490,7492,7495,7497,7499],{"class":78,"line":1390},[76,7486,4714],{"class":89},[76,7488,7489],{"class":93},"(p[j]",[76,7491,1159],{"class":89},[76,7493,7494],{"class":93},"p[j",[76,7496,681],{"class":89},[76,7498,418],{"class":250},[76,7500,4729],{"class":93},[76,7502,7503],{"class":78,"line":1402},[76,7504,4734],{"class":93},[76,7506,7507,7509,7511,7513],{"class":78,"line":1684},[76,7508,4739],{"class":89},[76,7510,4327],{"class":93},[76,7512,247],{"class":89},[76,7514,7515],{"class":93},"p[j];\n",[76,7517,7518,7521,7523,7525,7527,7529],{"class":78,"line":1689},[76,7519,7520],{"class":93},"                p[j]",[76,7522,247],{"class":89},[76,7524,7494],{"class":93},[76,7526,681],{"class":89},[76,7528,418],{"class":250},[76,7530,4762],{"class":93},[76,7532,7533,7536,7538,7540,7542,7544],{"class":78,"line":1695},[76,7534,7535],{"class":93},"                p[j",[76,7537,681],{"class":89},[76,7539,418],{"class":250},[76,7541,1139],{"class":93},[76,7543,247],{"class":89},[76,7545,4352],{"class":93},[76,7547,7548],{"class":78,"line":1700},[76,7549,4782],{"class":93},[76,7551,7552],{"class":78,"line":1714},[76,7553,2601],{"class":93},[76,7555,7556],{"class":78,"line":1719},[76,7557,2259],{"class":93},[76,7559,7560],{"class":78,"line":1725},[76,7561,1637],{"class":93},[76,7563,7564],{"class":78,"line":1746},[76,7565,2472],{"emptyLinePlaceholder":125},[76,7567,7568,7570,7572],{"class":78,"line":1751},[76,7569,205],{"class":89},[76,7571,2045],{"class":2035},[76,7573,2048],{"class":93},[76,7575,7576],{"class":78,"line":1765},[76,7577,1618],{"class":93},[76,7579,7580],{"class":78,"line":1770},[76,7581,7582],{"class":82},"    \u002F\u002F 1.创建数组\n",[76,7584,7585,7587,7589,7591,7593,7595,7597,7599,7601,7603,7605,7607,7609,7611,7613,7615,7617,7619,7621,7623,7625,7627,7629,7631,7633,7635],{"class":78,"line":1799},[76,7586,2057],{"class":89},[76,7588,4034],{"class":93},[76,7590,646],{"class":250},[76,7592,1139],{"class":93},[76,7594,247],{"class":89},[76,7596,1095],{"class":93},[76,7598,494],{"class":250},[76,7600,578],{"class":93},[76,7602,272],{"class":250},[76,7604,578],{"class":93},[76,7606,544],{"class":250},[76,7608,578],{"class":93},[76,7610,620],{"class":250},[76,7612,578],{"class":93},[76,7614,418],{"class":250},[76,7616,578],{"class":93},[76,7618,278],{"class":250},[76,7620,578],{"class":93},[76,7622,646],{"class":250},[76,7624,578],{"class":93},[76,7626,595],{"class":250},[76,7628,578],{"class":93},[76,7630,569],{"class":250},[76,7632,578],{"class":93},[76,7634,520],{"class":250},[76,7636,4067],{"class":93},[76,7638,7639,7641,7643,7645,7647],{"class":78,"line":1804},[76,7640,2057],{"class":89},[76,7642,7403],{"class":93},[76,7644,247],{"class":89},[76,7646,646],{"class":250},[76,7648,1363],{"class":93},[76,7650,7651,7653,7655,7657,7659],{"class":78,"line":1821},[76,7652,2057],{"class":89},[76,7654,6590],{"class":89},[76,7656,14],{"class":93},[76,7658,247],{"class":89},[76,7660,7110],{"class":93},[76,7662,7663],{"class":78,"line":1826},[76,7664,7665],{"class":82},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[76,7667,7668,7671],{"class":78,"line":1831},[76,7669,7670],{"class":2035},"    bubbleSort",[76,7672,7673],{"class":93},"(p,len);\n",[76,7675,7676],{"class":78,"line":1836},[76,7677,2472],{"emptyLinePlaceholder":125},[76,7679,7680],{"class":78,"line":1850},[76,7681,7682],{"class":82},"    \u002F\u002F 3.打印排序后的数组\n",[76,7684,7685,7687,7689,7691,7693,7695,7697,7699,7701,7704,7706],{"class":78,"line":1855},[76,7686,3273],{"class":89},[76,7688,1730],{"class":93},[76,7690,205],{"class":89},[76,7692,3104],{"class":93},[76,7694,247],{"class":89},[76,7696,392],{"class":250},[76,7698,3286],{"class":93},[76,7700,1109],{"class":89},[76,7702,7703],{"class":93},"len; i",[76,7705,2364],{"class":89},[76,7707,208],{"class":93},[76,7709,7710],{"class":78,"line":2649},[76,7711,2102],{"class":93},[76,7713,7714,7716,7718,7720,7722,7725],{"class":78,"line":2663},[76,7715,3523],{"class":93},[76,7717,6491],{"class":89},[76,7719,14],{"class":93},[76,7721,1243],{"class":89},[76,7723,7724],{"class":305},"\"\"",[76,7726,1363],{"class":93},[76,7728,7729,7732,7734],{"class":78,"line":2671},[76,7730,7731],{"class":93},"        p",[76,7733,2364],{"class":89},[76,7735,1363],{"class":93},[76,7737,7738],{"class":78,"line":2676},[76,7739,2259],{"class":93},[76,7741,7742],{"class":78,"line":2682},[76,7743,1637],{"class":93},[117,7745,7746],{},"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":58,"searchDepth":86,"depth":86,"links":7748},[7749,7750,7751,7752,7753,7754,7755,7756],{"id":6355,"depth":86,"text":6356},{"id":6521,"depth":86,"text":6522},{"id":6677,"depth":86,"text":6678},{"id":6755,"depth":86,"text":6756},{"id":6834,"depth":86,"text":6835},{"id":6933,"depth":86,"text":6934},{"id":7172,"depth":86,"text":7173},{"id":7350,"depth":86,"text":7351},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6344,"description":6352},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7763,"title":7764,"body":7765,"description":7772,"extension":123,"meta":10746,"navigation":125,"path":10747,"seo":10748,"stem":10749,"__hash__":10750},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7766,"toc":10737},[7767,7770,7773,7777,7780,7783,7794,8132,8135,8139,8142,8149,8404,8408,8411,8414,8569,8573,8576,8579,8785,8789,8792,9095,9098,9106,9110,9113,9264,9266,9277,9334,9338,9343,10000,10008,10011,10105,10108,10728,10734],[10,7768,7764],{"id":7769},"_4结构体",[14,7771,7772],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[140,7774,7776],{"id":7775},"_41结构体定义与使用","4.1结构体定义与使用",[14,7778,7779],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7781,7782],{},"通过结构体创建变量的方式：",[1206,7784,7785,7788,7791],{},[155,7786,7787],{},"struct 结构体名 变量名",[155,7789,7790],{},"struct 结构体名 变量名={成员1值，成员2值...}",[155,7792,7793],{},"定义结构体时顺便创建变量",[67,7795,7797],{"className":190,"code":7796,"language":192,"meta":58,"style":58},"#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",[73,7798,7799,7805,7815,7822,7827,7835,7839,7844,7848,7853,7858,7863,7870,7875,7882,7886,7893,7897,7901,7905,7909,7913,7917,7923,7927,7933,7941,7949,7953,7958,7963,7974,7979,7991,8002,8013,8018,8042,8047,8053,8080,8085,8091,8103,8115,8127],{"__ignoreMap":58},[76,7800,7801,7803],{"class":78,"line":79},[76,7802,2021],{"class":89},[76,7804,2024],{"class":305},[76,7806,7807,7809,7811,7813],{"class":78,"line":86},[76,7808,2029],{"class":89},[76,7810,2032],{"class":89},[76,7812,2036],{"class":2035},[76,7814,1363],{"class":93},[76,7816,7817,7819],{"class":78,"line":97},[76,7818,2021],{"class":89},[76,7820,7821],{"class":305},"\u003Cstring>\n",[76,7823,7824],{"class":78,"line":103},[76,7825,7826],{"class":82},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[76,7828,7829,7832],{"class":78,"line":1273},[76,7830,7831],{"class":89},"struct",[76,7833,7834],{"class":2035}," Student\n",[76,7836,7837],{"class":78,"line":1287},[76,7838,1618],{"class":93},[76,7840,7841],{"class":78,"line":1293},[76,7842,7843],{"class":82},"    \u002F\u002F成员列表\n",[76,7845,7846],{"class":78,"line":1384},[76,7847,2472],{"emptyLinePlaceholder":125},[76,7849,7850],{"class":78,"line":1390},[76,7851,7852],{"class":82},"    \u002F\u002F姓名\n",[76,7854,7855],{"class":78,"line":1402},[76,7856,7857],{"class":93},"    string name;\n",[76,7859,7860],{"class":78,"line":1684},[76,7861,7862],{"class":82},"    \u002F\u002F年龄\n",[76,7864,7865,7867],{"class":78,"line":1689},[76,7866,2057],{"class":89},[76,7868,7869],{"class":93}," age;\n",[76,7871,7872],{"class":78,"line":1695},[76,7873,7874],{"class":82},"    \u002F\u002F分数\n",[76,7876,7877,7879],{"class":78,"line":1700},[76,7878,2057],{"class":89},[76,7880,7881],{"class":93}," score;\n",[76,7883,7884],{"class":78,"line":1714},[76,7885,4067],{"class":93},[76,7887,7888,7890],{"class":78,"line":1719},[76,7889,7831],{"class":89},[76,7891,7892],{"class":2035}," School\n",[76,7894,7895],{"class":78,"line":1725},[76,7896,1618],{"class":93},[76,7898,7899],{"class":78,"line":1746},[76,7900,7843],{"class":82},[76,7902,7903],{"class":78,"line":1751},[76,7904,2472],{"emptyLinePlaceholder":125},[76,7906,7907],{"class":78,"line":1765},[76,7908,7852],{"class":82},[76,7910,7911],{"class":78,"line":1770},[76,7912,7857],{"class":93},[76,7914,7915],{"class":78,"line":1799},[76,7916,7862],{"class":82},[76,7918,7919,7921],{"class":78,"line":1804},[76,7920,2057],{"class":89},[76,7922,7869],{"class":93},[76,7924,7925],{"class":78,"line":1821},[76,7926,7874],{"class":82},[76,7928,7929,7931],{"class":78,"line":1826},[76,7930,2057],{"class":89},[76,7932,7881],{"class":93},[76,7934,7935,7938],{"class":78,"line":1831},[76,7936,7937],{"class":93},"} s3;",[76,7939,7940],{"class":82}," \u002F\u002F创建结构体时就创建了变量\n",[76,7942,7943,7945,7947],{"class":78,"line":1836},[76,7944,205],{"class":89},[76,7946,2045],{"class":2035},[76,7948,2048],{"class":93},[76,7950,7951],{"class":78,"line":1850},[76,7952,1618],{"class":93},[76,7954,7955],{"class":78,"line":1855},[76,7956,7957],{"class":82},"    \u002F\u002F2.通过学生类型创建具体学生\n",[76,7959,7960],{"class":78,"line":2649},[76,7961,7962],{"class":82},"    \u002F\u002F2.1 struct Student s1;\n",[76,7964,7965,7968,7971],{"class":78,"line":2663},[76,7966,7967],{"class":89},"    struct",[76,7969,7970],{"class":2035}," Student",[76,7972,7973],{"class":93}," s1;\n",[76,7975,7976],{"class":78,"line":2671},[76,7977,7978],{"class":82},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[76,7980,7981,7984,7986,7989],{"class":78,"line":2676},[76,7982,7983],{"class":93},"    s1.name",[76,7985,247],{"class":89},[76,7987,7988],{"class":305},"\"张三\"",[76,7990,1363],{"class":93},[76,7992,7993,7996,7998,8000],{"class":78,"line":2682},[76,7994,7995],{"class":93},"    s1.age",[76,7997,247],{"class":89},[76,7999,849],{"class":250},[76,8001,1363],{"class":93},[76,8003,8004,8007,8009,8011],{"class":78,"line":2688},[76,8005,8006],{"class":93},"    s1.score",[76,8008,247],{"class":89},[76,8010,455],{"class":250},[76,8012,1363],{"class":93},[76,8014,8015],{"class":78,"line":2693},[76,8016,8017],{"class":82},"    \u002F\u002F输出结果\n",[76,8019,8021,8023,8025,8028,8030,8033,8035,8038,8040],{"class":78,"line":8020},37,[76,8022,1623],{"class":93},[76,8024,1243],{"class":89},[76,8026,8027],{"class":93},"s1.name",[76,8029,1243],{"class":89},[76,8031,8032],{"class":93},"s1.age",[76,8034,1243],{"class":89},[76,8036,8037],{"class":93},"s1.score",[76,8039,1243],{"class":89},[76,8041,1265],{"class":93},[76,8043,8045],{"class":78,"line":8044},38,[76,8046,2472],{"emptyLinePlaceholder":125},[76,8048,8050],{"class":78,"line":8049},39,[76,8051,8052],{"class":82},"    \u002F\u002F2.2 struct Student s2={...}\n",[76,8054,8056,8058,8060,8063,8065,8067,8070,8072,8074,8076,8078],{"class":78,"line":8055},40,[76,8057,7967],{"class":89},[76,8059,7970],{"class":2035},[76,8061,8062],{"class":93}," s2",[76,8064,247],{"class":89},[76,8066,1095],{"class":93},[76,8068,8069],{"class":305},"\"王五\"",[76,8071,578],{"class":93},[76,8073,849],{"class":250},[76,8075,578],{"class":93},[76,8077,455],{"class":250},[76,8079,4067],{"class":93},[76,8081,8083],{"class":78,"line":8082},41,[76,8084,2472],{"emptyLinePlaceholder":125},[76,8086,8088],{"class":78,"line":8087},42,[76,8089,8090],{"class":82},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[76,8092,8094,8097,8099,8101],{"class":78,"line":8093},43,[76,8095,8096],{"class":93},"    s3.name",[76,8098,247],{"class":89},[76,8100,3750],{"class":305},[76,8102,1363],{"class":93},[76,8104,8106,8109,8111,8113],{"class":78,"line":8105},44,[76,8107,8108],{"class":93},"    s3.age",[76,8110,247],{"class":89},[76,8112,849],{"class":250},[76,8114,1363],{"class":93},[76,8116,8118,8121,8123,8125],{"class":78,"line":8117},45,[76,8119,8120],{"class":93},"    s3.score",[76,8122,247],{"class":89},[76,8124,899],{"class":250},[76,8126,1363],{"class":93},[76,8128,8130],{"class":78,"line":8129},46,[76,8131,1637],{"class":93},[14,8133,8134],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[140,8136,8138],{"id":8137},"_42结构体数组","4.2结构体数组",[14,8140,8141],{},"将自定义的结构体放入到数组中方便维护",[14,8143,8144,8145,8148],{},"语法：struct 结构体名 数组名",[76,8146,8147],{},"元素个数","={ {}，{},...{} };",[67,8150,8152],{"className":190,"code":8151,"language":192,"meta":58,"style":58},"#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",[73,8153,8154,8160,8170,8176,8181,8187,8191,8195,8201,8207,8211,8215,8223,8227,8232,8247,8251,8267,8283,8287,8292,8308,8323,8338,8343,8369,8373,8396,8400],{"__ignoreMap":58},[76,8155,8156,8158],{"class":78,"line":79},[76,8157,2021],{"class":89},[76,8159,2024],{"class":305},[76,8161,8162,8164,8166,8168],{"class":78,"line":86},[76,8163,2029],{"class":89},[76,8165,2032],{"class":89},[76,8167,2036],{"class":2035},[76,8169,1363],{"class":93},[76,8171,8172,8174],{"class":78,"line":97},[76,8173,2021],{"class":89},[76,8175,7821],{"class":305},[76,8177,8178],{"class":78,"line":103},[76,8179,8180],{"class":82},"\u002F\u002F1.定义结构体\n",[76,8182,8183,8185],{"class":78,"line":1273},[76,8184,7831],{"class":89},[76,8186,7834],{"class":2035},[76,8188,8189],{"class":78,"line":1287},[76,8190,1618],{"class":93},[76,8192,8193],{"class":78,"line":1293},[76,8194,7857],{"class":93},[76,8196,8197,8199],{"class":78,"line":1384},[76,8198,2057],{"class":89},[76,8200,7869],{"class":93},[76,8202,8203,8205],{"class":78,"line":1390},[76,8204,2057],{"class":89},[76,8206,7881],{"class":93},[76,8208,8209],{"class":78,"line":1402},[76,8210,2472],{"emptyLinePlaceholder":125},[76,8212,8213],{"class":78,"line":1684},[76,8214,4067],{"class":93},[76,8216,8217,8219,8221],{"class":78,"line":1689},[76,8218,205],{"class":89},[76,8220,2045],{"class":2035},[76,8222,2048],{"class":93},[76,8224,8225],{"class":78,"line":1695},[76,8226,1618],{"class":93},[76,8228,8229],{"class":78,"line":1700},[76,8230,8231],{"class":82},"    \u002F\u002F2.创建结构体数组\n",[76,8233,8234,8236,8238,8241,8243,8245],{"class":78,"line":1714},[76,8235,7967],{"class":89},[76,8237,7970],{"class":2035},[76,8239,8240],{"class":93}," stuArray[",[76,8242,278],{"class":250},[76,8244,1139],{"class":93},[76,8246,4980],{"class":89},[76,8248,8249],{"class":78,"line":1719},[76,8250,2102],{"class":93},[76,8252,8253,8255,8257,8259,8261,8263,8265],{"class":78,"line":1725},[76,8254,4989],{"class":93},[76,8256,7988],{"class":305},[76,8258,578],{"class":93},[76,8260,849],{"class":250},[76,8262,578],{"class":93},[76,8264,512],{"class":250},[76,8266,5002],{"class":93},[76,8268,8269,8271,8273,8275,8277,8279,8281],{"class":78,"line":1746},[76,8270,4989],{"class":93},[76,8272,3750],{"class":305},[76,8274,578],{"class":93},[76,8276,774],{"class":250},[76,8278,578],{"class":93},[76,8280,774],{"class":250},[76,8282,1637],{"class":93},[76,8284,8285],{"class":78,"line":1751},[76,8286,2259],{"class":93},[76,8288,8289],{"class":78,"line":1765},[76,8290,8291],{"class":82},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[76,8293,8294,8297,8299,8302,8304,8306],{"class":78,"line":1770},[76,8295,8296],{"class":93},"    stuArray[",[76,8298,418],{"class":250},[76,8300,8301],{"class":93},"].name",[76,8303,247],{"class":89},[76,8305,3773],{"class":305},[76,8307,1363],{"class":93},[76,8309,8310,8312,8314,8317,8319,8321],{"class":78,"line":1799},[76,8311,8296],{"class":93},[76,8313,418],{"class":250},[76,8315,8316],{"class":93},"].age",[76,8318,247],{"class":89},[76,8320,278],{"class":250},[76,8322,1363],{"class":93},[76,8324,8325,8327,8329,8332,8334,8336],{"class":78,"line":1804},[76,8326,8296],{"class":93},[76,8328,418],{"class":250},[76,8330,8331],{"class":93},"].score",[76,8333,247],{"class":89},[76,8335,278],{"class":250},[76,8337,1363],{"class":93},[76,8339,8340],{"class":78,"line":1821},[76,8341,8342],{"class":82},"    \u002F\u002F4.遍历结构体数组\n",[76,8344,8345,8347,8349,8351,8353,8355,8357,8359,8361,8363,8365,8367],{"class":78,"line":1826},[76,8346,3273],{"class":89},[76,8348,1730],{"class":93},[76,8350,205],{"class":89},[76,8352,3104],{"class":93},[76,8354,247],{"class":89},[76,8356,392],{"class":250},[76,8358,3111],{"class":93},[76,8360,1109],{"class":89},[76,8362,278],{"class":250},[76,8364,3111],{"class":93},[76,8366,2364],{"class":89},[76,8368,208],{"class":93},[76,8370,8371],{"class":78,"line":1831},[76,8372,2102],{"class":93},[76,8374,8375,8377,8379,8382,8384,8387,8389,8392,8394],{"class":78,"line":1836},[76,8376,3523],{"class":93},[76,8378,1243],{"class":89},[76,8380,8381],{"class":93},"stuArray[i].name",[76,8383,1243],{"class":89},[76,8385,8386],{"class":93},"stuArray[i].age",[76,8388,1243],{"class":89},[76,8390,8391],{"class":93},"stuArray[i].score",[76,8393,1243],{"class":89},[76,8395,1265],{"class":93},[76,8397,8398],{"class":78,"line":1850},[76,8399,2259],{"class":93},[76,8401,8402],{"class":78,"line":1855},[76,8403,1637],{"class":93},[140,8405,8407],{"id":8406},"_43结构体指针","4.3结构体指针",[14,8409,8410],{},"作用：通过指针访问结构体中的成员",[14,8412,8413],{},"利用操作符->可以通过结构体指针访问结构体属性",[67,8415,8417],{"className":190,"code":8416,"language":192,"meta":58,"style":58},"#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",[73,8418,8419,8425,8435,8441,8445,8451,8455,8459,8465,8471,8475,8483,8487,8492,8517,8522,8537,8542,8565],{"__ignoreMap":58},[76,8420,8421,8423],{"class":78,"line":79},[76,8422,2021],{"class":89},[76,8424,2024],{"class":305},[76,8426,8427,8429,8431,8433],{"class":78,"line":86},[76,8428,2029],{"class":89},[76,8430,2032],{"class":89},[76,8432,2036],{"class":2035},[76,8434,1363],{"class":93},[76,8436,8437,8439],{"class":78,"line":97},[76,8438,2021],{"class":89},[76,8440,7821],{"class":305},[76,8442,8443],{"class":78,"line":103},[76,8444,8180],{"class":82},[76,8446,8447,8449],{"class":78,"line":1273},[76,8448,7831],{"class":89},[76,8450,7834],{"class":2035},[76,8452,8453],{"class":78,"line":1287},[76,8454,1618],{"class":93},[76,8456,8457],{"class":78,"line":1293},[76,8458,7857],{"class":93},[76,8460,8461,8463],{"class":78,"line":1384},[76,8462,2057],{"class":89},[76,8464,7869],{"class":93},[76,8466,8467,8469],{"class":78,"line":1390},[76,8468,2057],{"class":89},[76,8470,7881],{"class":93},[76,8472,8473],{"class":78,"line":1402},[76,8474,4067],{"class":93},[76,8476,8477,8479,8481],{"class":78,"line":1684},[76,8478,205],{"class":89},[76,8480,2045],{"class":2035},[76,8482,2048],{"class":93},[76,8484,8485],{"class":78,"line":1689},[76,8486,1618],{"class":93},[76,8488,8489],{"class":78,"line":1695},[76,8490,8491],{"class":82},"    \u002F\u002F创建学生结构体变量\n",[76,8493,8494,8496,8498,8501,8503,8505,8507,8509,8511,8513,8515],{"class":78,"line":1700},[76,8495,7967],{"class":89},[76,8497,7970],{"class":2035},[76,8499,8500],{"class":93}," s",[76,8502,247],{"class":89},[76,8504,1095],{"class":93},[76,8506,7988],{"class":305},[76,8508,578],{"class":93},[76,8510,849],{"class":250},[76,8512,578],{"class":93},[76,8514,1794],{"class":250},[76,8516,4067],{"class":93},[76,8518,8519],{"class":78,"line":1714},[76,8520,8521],{"class":82},"    \u002F\u002F通过指针指向结构体变量\n",[76,8523,8524,8526,8528,8530,8532,8534],{"class":78,"line":1719},[76,8525,7967],{"class":89},[76,8527,7970],{"class":2035},[76,8529,6590],{"class":89},[76,8531,14],{"class":93},[76,8533,6411],{"class":89},[76,8535,8536],{"class":93},"s\n",[76,8538,8539],{"class":78,"line":1725},[76,8540,8541],{"class":82},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[76,8543,8544,8546,8548,8551,8553,8556,8558,8561,8563],{"class":78,"line":1746},[76,8545,1623],{"class":93},[76,8547,1243],{"class":89},[76,8549,8550],{"class":93},"p->name",[76,8552,1243],{"class":89},[76,8554,8555],{"class":93},"p->age",[76,8557,1243],{"class":89},[76,8559,8560],{"class":93},"p->score",[76,8562,1243],{"class":89},[76,8564,1265],{"class":93},[76,8566,8567],{"class":78,"line":1751},[76,8568,1637],{"class":93},[140,8570,8572],{"id":8571},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8574,8575],{},"作用：结构体中的成员可以是另一个结构体",[14,8577,8578],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[67,8580,8582],{"className":190,"code":8581,"language":192,"meta":58,"style":58},"#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",[73,8583,8584,8590,8600,8606,8611,8619,8623,8627,8633,8639,8643,8648,8655,8659,8666,8670,8676,8681,8685,8693,8697,8702,8707,8712,8723,8735,8746,8759,8770,8781],{"__ignoreMap":58},[76,8585,8586,8588],{"class":78,"line":79},[76,8587,2021],{"class":89},[76,8589,2024],{"class":305},[76,8591,8592,8594,8596,8598],{"class":78,"line":86},[76,8593,2029],{"class":89},[76,8595,2032],{"class":89},[76,8597,2036],{"class":2035},[76,8599,1363],{"class":93},[76,8601,8602,8604],{"class":78,"line":97},[76,8603,2021],{"class":89},[76,8605,7821],{"class":305},[76,8607,8608],{"class":78,"line":103},[76,8609,8610],{"class":82},"\u002F\u002F定义学生结构体\n",[76,8612,8613,8615,8617],{"class":78,"line":1273},[76,8614,7831],{"class":89},[76,8616,7970],{"class":2035},[76,8618,2746],{"class":93},[76,8620,8621],{"class":78,"line":1287},[76,8622,1618],{"class":93},[76,8624,8625],{"class":78,"line":1293},[76,8626,7857],{"class":93},[76,8628,8629,8631],{"class":78,"line":1384},[76,8630,2057],{"class":89},[76,8632,7869],{"class":93},[76,8634,8635,8637],{"class":78,"line":1390},[76,8636,2057],{"class":89},[76,8638,7881],{"class":93},[76,8640,8641],{"class":78,"line":1402},[76,8642,1637],{"class":93},[76,8644,8645],{"class":78,"line":1684},[76,8646,8647],{"class":82},"\u002F\u002F定义老师结构体\n",[76,8649,8650,8652],{"class":78,"line":1689},[76,8651,7831],{"class":89},[76,8653,8654],{"class":2035}," Teacher\n",[76,8656,8657],{"class":78,"line":1695},[76,8658,1618],{"class":93},[76,8660,8661,8663],{"class":78,"line":1700},[76,8662,2057],{"class":89},[76,8664,8665],{"class":93}," id;\n",[76,8667,8668],{"class":78,"line":1714},[76,8669,7857],{"class":93},[76,8671,8672,8674],{"class":78,"line":1719},[76,8673,2057],{"class":89},[76,8675,7869],{"class":93},[76,8677,8678],{"class":78,"line":1725},[76,8679,8680],{"class":93},"    Student stu;\n",[76,8682,8683],{"class":78,"line":1746},[76,8684,1637],{"class":93},[76,8686,8687,8689,8691],{"class":78,"line":1751},[76,8688,205],{"class":89},[76,8690,2045],{"class":2035},[76,8692,6050],{"class":93},[76,8694,8695],{"class":78,"line":1765},[76,8696,1618],{"class":93},[76,8698,8699],{"class":78,"line":1770},[76,8700,8701],{"class":82},"    \u002F\u002F结构体嵌套结构体\n",[76,8703,8704],{"class":78,"line":1799},[76,8705,8706],{"class":82},"    \u002F\u002F创建老师\n",[76,8708,8709],{"class":78,"line":1804},[76,8710,8711],{"class":93},"    Teacher t;\n",[76,8713,8714,8717,8719,8721],{"class":78,"line":1821},[76,8715,8716],{"class":93},"    t.id",[76,8718,247],{"class":89},[76,8720,512],{"class":250},[76,8722,1363],{"class":93},[76,8724,8725,8728,8730,8733],{"class":78,"line":1826},[76,8726,8727],{"class":93},"    t.name",[76,8729,247],{"class":89},[76,8731,8732],{"class":305},"\"老王\"",[76,8734,1363],{"class":93},[76,8736,8737,8740,8742,8744],{"class":78,"line":1831},[76,8738,8739],{"class":93},"    t.age",[76,8741,247],{"class":89},[76,8743,849],{"class":250},[76,8745,1363],{"class":93},[76,8747,8748,8751,8753,8756],{"class":78,"line":1836},[76,8749,8750],{"class":93},"    t.stu.name",[76,8752,247],{"class":89},[76,8754,8755],{"class":305},"\"小王\"",[76,8757,8758],{"class":93},"；\n",[76,8760,8761,8764,8766,8768],{"class":78,"line":1850},[76,8762,8763],{"class":93},"    t.stu.age",[76,8765,247],{"class":89},[76,8767,899],{"class":250},[76,8769,1363],{"class":93},[76,8771,8772,8775,8777,8779],{"class":78,"line":1855},[76,8773,8774],{"class":93},"    t.stu.score",[76,8776,247],{"class":89},[76,8778,544],{"class":250},[76,8780,1363],{"class":93},[76,8782,8783],{"class":78,"line":2649},[76,8784,1637],{"class":93},[140,8786,8788],{"id":8787},"_45结构体做函数参数","4.5结构体做函数参数",[14,8790,8791],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[67,8793,8795],{"className":190,"code":8794,"language":192,"meta":58,"style":58},"#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",[73,8796,8797,8803,8813,8819,8825,8829,8833,8839,8845,8849,8854,8859,8876,8880,8913,8917,8922,8941,8945,8976,8980,8988,8992,9001,9013,9025,9037,9050,9058,9071,9083,9091],{"__ignoreMap":58},[76,8798,8799,8801],{"class":78,"line":79},[76,8800,2021],{"class":89},[76,8802,2024],{"class":305},[76,8804,8805,8807,8809,8811],{"class":78,"line":86},[76,8806,2029],{"class":89},[76,8808,2032],{"class":89},[76,8810,2036],{"class":2035},[76,8812,1363],{"class":93},[76,8814,8815,8817],{"class":78,"line":97},[76,8816,2021],{"class":89},[76,8818,7821],{"class":305},[76,8820,8821,8823],{"class":78,"line":103},[76,8822,7831],{"class":89},[76,8824,7834],{"class":2035},[76,8826,8827],{"class":78,"line":1273},[76,8828,1618],{"class":93},[76,8830,8831],{"class":78,"line":1287},[76,8832,7857],{"class":93},[76,8834,8835,8837],{"class":78,"line":1293},[76,8836,2057],{"class":89},[76,8838,7869],{"class":93},[76,8840,8841,8843],{"class":78,"line":1384},[76,8842,2057],{"class":89},[76,8844,7881],{"class":93},[76,8846,8847],{"class":78,"line":1390},[76,8848,4067],{"class":93},[76,8850,8851],{"class":78,"line":1402},[76,8852,8853],{"class":82},"\u002F\u002F打印学生信息的函数\n",[76,8855,8856],{"class":78,"line":1684},[76,8857,8858],{"class":82},"\u002F\u002F值传递\n",[76,8860,8861,8863,8866,8868,8870,8872,8874],{"class":78,"line":1689},[76,8862,5436],{"class":89},[76,8864,8865],{"class":2035}," printStudent1",[76,8867,202],{"class":93},[76,8869,7831],{"class":89},[76,8871,7970],{"class":2035},[76,8873,8500],{"class":5288},[76,8875,208],{"class":93},[76,8877,8878],{"class":78,"line":1695},[76,8879,1618],{"class":93},[76,8881,8882,8884,8886,8889,8891,8894,8896,8899,8901,8903,8905,8908,8910],{"class":78,"line":1700},[76,8883,6601],{"class":93},[76,8885,1243],{"class":89},[76,8887,8888],{"class":93}," s.name ",[76,8890,1243],{"class":89},[76,8892,8893],{"class":305}," \" \"",[76,8895,1517],{"class":89},[76,8897,8898],{"class":93}," s.age ",[76,8900,1243],{"class":89},[76,8902,8893],{"class":305},[76,8904,1517],{"class":89},[76,8906,8907],{"class":93}," s.score ",[76,8909,1243],{"class":89},[76,8911,8912],{"class":93}," endl;\n",[76,8914,8915],{"class":78,"line":1714},[76,8916,1637],{"class":93},[76,8918,8919],{"class":78,"line":1719},[76,8920,8921],{"class":82},"\u002F\u002F地址传递\n",[76,8923,8924,8926,8929,8931,8933,8935,8937,8939],{"class":78,"line":1725},[76,8925,5436],{"class":89},[76,8927,8928],{"class":2035}," printStudent2",[76,8930,202],{"class":93},[76,8932,7831],{"class":89},[76,8934,7970],{"class":2035},[76,8936,6590],{"class":89},[76,8938,894],{"class":5288},[76,8940,208],{"class":93},[76,8942,8943],{"class":78,"line":1746},[76,8944,1618],{"class":93},[76,8946,8947,8949,8951,8954,8956,8958,8960,8963,8965,8967,8969,8972,8974],{"class":78,"line":1751},[76,8948,6601],{"class":93},[76,8950,1243],{"class":89},[76,8952,8953],{"class":93}," s->name ",[76,8955,1243],{"class":89},[76,8957,8893],{"class":305},[76,8959,1517],{"class":89},[76,8961,8962],{"class":93}," s->age ",[76,8964,1243],{"class":89},[76,8966,8893],{"class":305},[76,8968,1517],{"class":89},[76,8970,8971],{"class":93}," s->score ",[76,8973,1243],{"class":89},[76,8975,8912],{"class":93},[76,8977,8978],{"class":78,"line":1765},[76,8979,1637],{"class":93},[76,8981,8982,8984,8986],{"class":78,"line":1770},[76,8983,205],{"class":89},[76,8985,2045],{"class":2035},[76,8987,2048],{"class":93},[76,8989,8990],{"class":78,"line":1799},[76,8991,1618],{"class":93},[76,8993,8994,8996,8998],{"class":78,"line":1804},[76,8995,7967],{"class":89},[76,8997,7970],{"class":2035},[76,8999,9000],{"class":93}," s;\n",[76,9002,9003,9006,9008,9011],{"class":78,"line":1821},[76,9004,9005],{"class":93},"    s.name ",[76,9007,247],{"class":89},[76,9009,9010],{"class":305}," \"张三\"",[76,9012,1363],{"class":93},[76,9014,9015,9018,9020,9023],{"class":78,"line":1826},[76,9016,9017],{"class":93},"    s.age ",[76,9019,247],{"class":89},[76,9021,9022],{"class":250}," 20",[76,9024,1363],{"class":93},[76,9026,9027,9030,9032,9035],{"class":78,"line":1831},[76,9028,9029],{"class":93},"    s.score ",[76,9031,247],{"class":89},[76,9033,9034],{"class":250}," 85",[76,9036,1363],{"class":93},[76,9038,9039,9041,9043,9046,9048],{"class":78,"line":1836},[76,9040,1623],{"class":93},[76,9042,1243],{"class":89},[76,9044,9045],{"class":305},"\"值传递:\"",[76,9047,1243],{"class":89},[76,9049,1265],{"class":93},[76,9051,9052,9055],{"class":78,"line":1850},[76,9053,9054],{"class":2035},"    printStudent1",[76,9056,9057],{"class":93},"(s);\n",[76,9059,9060,9062,9064,9067,9069],{"class":78,"line":1855},[76,9061,1623],{"class":93},[76,9063,1243],{"class":89},[76,9065,9066],{"class":305},"\"地址传递:\"",[76,9068,1243],{"class":89},[76,9070,1265],{"class":93},[76,9072,9073,9076,9078,9080],{"class":78,"line":2649},[76,9074,9075],{"class":2035},"    printStudent2",[76,9077,202],{"class":93},[76,9079,553],{"class":89},[76,9081,9082],{"class":93},"s); \n",[76,9084,9085,9087,9089],{"class":78,"line":2663},[76,9086,4162],{"class":89},[76,9088,4165],{"class":250},[76,9090,1363],{"class":93},[76,9092,9093],{"class":78,"line":2671},[76,9094,1637],{"class":93},[14,9096,9097],{},"注意：",[1206,9099,9100,9103],{},[155,9101,9102],{},"1.先定义结构体，不要在函数中写结构体的定义",[155,9104,9105],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[140,9107,9109],{"id":9108},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9111,9112],{},"用const防止误操作",[67,9114,9116],{"className":190,"code":9115,"language":192,"meta":58,"style":58},"#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",[73,9117,9118,9124,9134,9140,9145,9149,9153,9159,9165,9169,9185,9189,9212,9216,9224,9228,9249,9256,9260],{"__ignoreMap":58},[76,9119,9120,9122],{"class":78,"line":79},[76,9121,2021],{"class":89},[76,9123,2024],{"class":305},[76,9125,9126,9128,9130,9132],{"class":78,"line":86},[76,9127,2029],{"class":89},[76,9129,2032],{"class":89},[76,9131,2036],{"class":2035},[76,9133,1363],{"class":93},[76,9135,9136,9138],{"class":78,"line":97},[76,9137,2021],{"class":89},[76,9139,7821],{"class":305},[76,9141,9142],{"class":78,"line":103},[76,9143,9144],{"class":93},"sctuct Student\n",[76,9146,9147],{"class":78,"line":1273},[76,9148,1618],{"class":93},[76,9150,9151],{"class":78,"line":1287},[76,9152,7857],{"class":93},[76,9154,9155,9157],{"class":78,"line":1293},[76,9156,2057],{"class":89},[76,9158,7869],{"class":93},[76,9160,9161,9163],{"class":78,"line":1384},[76,9162,2057],{"class":89},[76,9164,7881],{"class":93},[76,9166,9167],{"class":78,"line":1390},[76,9168,4067],{"class":93},[76,9170,9171,9173,9176,9178,9181,9183],{"class":78,"line":1402},[76,9172,5436],{"class":89},[76,9174,9175],{"class":2035}," printStudents",[76,9177,202],{"class":93},[76,9179,9180],{"class":2035},"student",[76,9182,8500],{"class":5288},[76,9184,208],{"class":93},[76,9186,9187],{"class":78,"line":1684},[76,9188,1618],{"class":93},[76,9190,9191,9193,9195,9198,9200,9203,9205,9208,9210],{"class":78,"line":1689},[76,9192,1623],{"class":93},[76,9194,1243],{"class":89},[76,9196,9197],{"class":93},"s.name",[76,9199,1243],{"class":89},[76,9201,9202],{"class":93},"s.age",[76,9204,1243],{"class":89},[76,9206,9207],{"class":93},"s.score",[76,9209,1243],{"class":89},[76,9211,1265],{"class":93},[76,9213,9214],{"class":78,"line":1695},[76,9215,1637],{"class":93},[76,9217,9218,9220,9222],{"class":78,"line":1700},[76,9219,205],{"class":89},[76,9221,2045],{"class":2035},[76,9223,6050],{"class":93},[76,9225,9226],{"class":78,"line":1714},[76,9227,1618],{"class":93},[76,9229,9230,9233,9235,9237,9239,9241,9243,9245,9247],{"class":78,"line":1719},[76,9231,9232],{"class":93},"    Student s",[76,9234,247],{"class":89},[76,9236,1095],{"class":93},[76,9238,7988],{"class":305},[76,9240,578],{"class":93},[76,9242,849],{"class":250},[76,9244,578],{"class":93},[76,9246,849],{"class":250},[76,9248,4067],{"class":93},[76,9250,9251,9254],{"class":78,"line":1725},[76,9252,9253],{"class":2035},"    printStudent",[76,9255,9057],{"class":93},[76,9257,9258],{"class":78,"line":1746},[76,9259,2472],{"emptyLinePlaceholder":125},[76,9261,9262],{"class":78,"line":1751},[76,9263,1637],{"class":93},[14,9265,9097],{},[1206,9267,9268,9271,9274],{},[155,9269,9270],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[155,9272,9273],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[155,9275,9276],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[67,9278,9280],{"className":190,"code":9279,"language":192,"meta":58,"style":58},"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",[73,9281,9282,9301,9305,9310,9330],{"__ignoreMap":58},[76,9283,9284,9286,9288,9290,9292,9295,9297,9299],{"class":78,"line":79},[76,9285,5436],{"class":89},[76,9287,9175],{"class":2035},[76,9289,202],{"class":93},[76,9291,6864],{"class":89},[76,9293,9294],{"class":2035}," student",[76,9296,6590],{"class":89},[76,9298,894],{"class":5288},[76,9300,208],{"class":93},[76,9302,9303],{"class":78,"line":86},[76,9304,1618],{"class":93},[76,9306,9307],{"class":78,"line":97},[76,9308,9309],{"class":82},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[76,9311,9312,9314,9316,9318,9320,9322,9324,9326,9328],{"class":78,"line":103},[76,9313,1623],{"class":93},[76,9315,1243],{"class":89},[76,9317,9197],{"class":93},[76,9319,1243],{"class":89},[76,9321,9202],{"class":93},[76,9323,1243],{"class":89},[76,9325,9207],{"class":93},[76,9327,1243],{"class":89},[76,9329,1265],{"class":93},[76,9331,9332],{"class":78,"line":1273},[76,9333,1637],{"class":93},[140,9335,9337],{"id":9336},"_47案例","4.7案例",[152,9339,9340],{},[155,9341,9342],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[67,9344,9346],{"className":190,"code":9345,"language":192,"meta":58,"style":58},"#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",[73,9347,9348,9354,9364,9370,9377,9381,9387,9391,9396,9402,9408,9412,9416,9422,9426,9431,9436,9449,9453,9458,9484,9488,9500,9527,9531,9543,9553,9557,9562,9591,9595,9607,9616,9643,9654,9664,9668,9672,9676,9681,9705,9709,9733,9737,9756,9782,9786,9811,9834,9858,9863,9868,9873,9882,9887,9893,9914,9920,9934,9940,9967,9976,9982,9990,9995],{"__ignoreMap":58},[76,9349,9350,9352],{"class":78,"line":79},[76,9351,2021],{"class":89},[76,9353,2024],{"class":305},[76,9355,9356,9358,9360,9362],{"class":78,"line":86},[76,9357,2029],{"class":89},[76,9359,2032],{"class":89},[76,9361,2036],{"class":2035},[76,9363,1363],{"class":93},[76,9365,9366,9368],{"class":78,"line":97},[76,9367,2021],{"class":89},[76,9369,7821],{"class":305},[76,9371,9372,9374],{"class":78,"line":103},[76,9373,2021],{"class":89},[76,9375,9376],{"class":305},"\u003Cctime>\n",[76,9378,9379],{"class":78,"line":1273},[76,9380,8610],{"class":82},[76,9382,9383,9385],{"class":78,"line":1287},[76,9384,7831],{"class":89},[76,9386,7834],{"class":2035},[76,9388,9389],{"class":78,"line":1293},[76,9390,1618],{"class":93},[76,9392,9393],{"class":78,"line":1384},[76,9394,9395],{"class":93},"    string sName;\n",[76,9397,9398,9400],{"class":78,"line":1390},[76,9399,2057],{"class":89},[76,9401,7869],{"class":93},[76,9403,9404,9406],{"class":78,"line":1402},[76,9405,2057],{"class":89},[76,9407,7881],{"class":93},[76,9409,9410],{"class":78,"line":1684},[76,9411,4067],{"class":93},[76,9413,9414],{"class":78,"line":1689},[76,9415,8647],{"class":82},[76,9417,9418,9420],{"class":78,"line":1695},[76,9419,7831],{"class":89},[76,9421,8654],{"class":2035},[76,9423,9424],{"class":78,"line":1700},[76,9425,1618],{"class":93},[76,9427,9428],{"class":78,"line":1714},[76,9429,9430],{"class":93},"    string tName;\n",[76,9432,9433],{"class":78,"line":1719},[76,9434,9435],{"class":82},"    \u002F\u002F学生数组\n",[76,9437,9438,9440,9442,9445,9447],{"class":78,"line":1725},[76,9439,7967],{"class":89},[76,9441,7970],{"class":2035},[76,9443,9444],{"class":93}," sArray[",[76,9446,520],{"class":250},[76,9448,4762],{"class":93},[76,9450,9451],{"class":78,"line":1746},[76,9452,4067],{"class":93},[76,9454,9455],{"class":78,"line":1751},[76,9456,9457],{"class":82},"\u002F\u002F给老师和学生赋值的函数\n",[76,9459,9460,9462,9465,9467,9469,9472,9475,9478,9480,9482],{"class":78,"line":1765},[76,9461,5436],{"class":89},[76,9463,9464],{"class":2035}," allocateSpace",[76,9466,202],{"class":93},[76,9468,7831],{"class":89},[76,9470,9471],{"class":2035}," Teacher",[76,9473,9474],{"class":5288}," tArray",[76,9476,9477],{"class":93},"[],",[76,9479,205],{"class":89},[76,9481,7403],{"class":5288},[76,9483,208],{"class":93},[76,9485,9486],{"class":78,"line":1770},[76,9487,1618],{"class":93},[76,9489,9490,9493,9495,9498],{"class":78,"line":1799},[76,9491,9492],{"class":93},"    string nameSeed",[76,9494,247],{"class":89},[76,9496,9497],{"class":305},"\"ABCDE\"",[76,9499,1363],{"class":93},[76,9501,9502,9504,9506,9508,9511,9513,9515,9518,9520,9523,9525],{"class":78,"line":1804},[76,9503,3273],{"class":89},[76,9505,1730],{"class":93},[76,9507,205],{"class":89},[76,9509,9510],{"class":93}," i ",[76,9512,247],{"class":89},[76,9514,4165],{"class":250},[76,9516,9517],{"class":93},"; i ",[76,9519,1109],{"class":89},[76,9521,9522],{"class":93}," len; i",[76,9524,2364],{"class":89},[76,9526,208],{"class":93},[76,9528,9529],{"class":78,"line":1821},[76,9530,2102],{"class":93},[76,9532,9533,9536,9538,9541],{"class":78,"line":1826},[76,9534,9535],{"class":93},"        tArray[i].tName ",[76,9537,247],{"class":89},[76,9539,9540],{"class":305}," \"Teacher_\"",[76,9542,1363],{"class":93},[76,9544,9545,9547,9550],{"class":78,"line":1831},[76,9546,9535],{"class":93},[76,9548,9549],{"class":89},"+=",[76,9551,9552],{"class":93},"nameSeed[i];\n",[76,9554,9555],{"class":78,"line":1836},[76,9556,2472],{"emptyLinePlaceholder":125},[76,9558,9559],{"class":78,"line":1850},[76,9560,9561],{"class":82},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[76,9563,9564,9566,9568,9570,9573,9575,9577,9580,9582,9584,9587,9589],{"class":78,"line":1855},[76,9565,3475],{"class":89},[76,9567,1730],{"class":93},[76,9569,205],{"class":89},[76,9571,9572],{"class":93}," j ",[76,9574,247],{"class":89},[76,9576,4165],{"class":250},[76,9578,9579],{"class":93},"; j ",[76,9581,1109],{"class":89},[76,9583,2220],{"class":250},[76,9585,9586],{"class":93},"; j",[76,9588,2364],{"class":89},[76,9590,208],{"class":93},[76,9592,9593],{"class":78,"line":2649},[76,9594,2582],{"class":93},[76,9596,9597,9600,9602,9605],{"class":78,"line":2663},[76,9598,9599],{"class":93},"            tArray[i].sArray[j].sName ",[76,9601,247],{"class":89},[76,9603,9604],{"class":305}," \"Student_\"",[76,9606,1363],{"class":93},[76,9608,9609,9611,9613],{"class":78,"line":2671},[76,9610,9599],{"class":93},[76,9612,9549],{"class":89},[76,9614,9615],{"class":93}," nameSeed[j];\n",[76,9617,9618,9621,9624,9626,9628,9630,9632,9634,9636,9638,9640],{"class":78,"line":2676},[76,9619,9620],{"class":89},"            int",[76,9622,9623],{"class":93}," random",[76,9625,247],{"class":89},[76,9627,2496],{"class":2035},[76,9629,2499],{"class":93},[76,9631,106],{"class":89},[76,9633,1106],{"class":250},[76,9635,681],{"class":89},[76,9637,601],{"class":250},[76,9639,257],{"class":93},[76,9641,9642],{"class":82},"\u002F\u002F40~99\n",[76,9644,9645,9648,9650,9652],{"class":78,"line":2682},[76,9646,9647],{"class":93},"            tArray[i].sArray[j].age ",[76,9649,247],{"class":89},[76,9651,9022],{"class":250},[76,9653,1363],{"class":93},[76,9655,9656,9659,9661],{"class":78,"line":2688},[76,9657,9658],{"class":93},"            tArray[i].sArray[j].score ",[76,9660,247],{"class":89},[76,9662,9663],{"class":93}," random;\n",[76,9665,9666],{"class":78,"line":2693},[76,9667,2601],{"class":93},[76,9669,9670],{"class":78,"line":8020},[76,9671,2259],{"class":93},[76,9673,9674],{"class":78,"line":8044},[76,9675,1637],{"class":93},[76,9677,9678],{"class":78,"line":8049},[76,9679,9680],{"class":82},"\u002F\u002F打印所有信息的函数\n",[76,9682,9683,9685,9688,9690,9692,9694,9696,9699,9701,9703],{"class":78,"line":8055},[76,9684,5436],{"class":89},[76,9686,9687],{"class":2035}," printInfo",[76,9689,202],{"class":93},[76,9691,7831],{"class":89},[76,9693,9471],{"class":2035},[76,9695,9474],{"class":5288},[76,9697,9698],{"class":93},"[], ",[76,9700,205],{"class":89},[76,9702,7403],{"class":5288},[76,9704,208],{"class":93},[76,9706,9707],{"class":78,"line":8082},[76,9708,1618],{"class":93},[76,9710,9711,9713,9715,9717,9719,9721,9723,9725,9727,9729,9731],{"class":78,"line":8087},[76,9712,3273],{"class":89},[76,9714,1730],{"class":93},[76,9716,205],{"class":89},[76,9718,9510],{"class":93},[76,9720,247],{"class":89},[76,9722,4165],{"class":250},[76,9724,9517],{"class":93},[76,9726,1109],{"class":89},[76,9728,9522],{"class":93},[76,9730,2364],{"class":89},[76,9732,208],{"class":93},[76,9734,9735],{"class":78,"line":8093},[76,9736,2102],{"class":93},[76,9738,9739,9742,9744,9747,9749,9752,9754],{"class":78,"line":8105},[76,9740,9741],{"class":93},"        cout ",[76,9743,1243],{"class":89},[76,9745,9746],{"class":305}," \"Teacher: \"",[76,9748,1517],{"class":89},[76,9750,9751],{"class":93}," tArray[i].tName ",[76,9753,1243],{"class":89},[76,9755,8912],{"class":93},[76,9757,9758,9760,9762,9764,9766,9768,9770,9772,9774,9776,9778,9780],{"class":78,"line":8117},[76,9759,3475],{"class":89},[76,9761,1730],{"class":93},[76,9763,205],{"class":89},[76,9765,9572],{"class":93},[76,9767,247],{"class":89},[76,9769,4165],{"class":250},[76,9771,9579],{"class":93},[76,9773,1109],{"class":89},[76,9775,2220],{"class":250},[76,9777,9586],{"class":93},[76,9779,2364],{"class":89},[76,9781,208],{"class":93},[76,9783,9784],{"class":78,"line":8129},[76,9785,2582],{"class":93},[76,9787,9789,9792,9794,9797,9799,9802,9804,9807,9809],{"class":78,"line":9788},47,[76,9790,9791],{"class":93},"            cout ",[76,9793,1243],{"class":89},[76,9795,9796],{"class":305}," \"",[76,9798,1303],{"class":250},[76,9800,9801],{"class":305},"Student: \"",[76,9803,1517],{"class":89},[76,9805,9806],{"class":93}," tArray[i].sArray[j].sName",[76,9808,1243],{"class":89},[76,9810,1265],{"class":93},[76,9812,9814,9816,9818,9820,9822,9825,9827,9830,9832],{"class":78,"line":9813},48,[76,9815,9791],{"class":93},[76,9817,1243],{"class":89},[76,9819,9796],{"class":305},[76,9821,1303],{"class":250},[76,9823,9824],{"class":305},"Age: \"",[76,9826,1517],{"class":89},[76,9828,9829],{"class":93}," tArray[i].sArray[j].age ",[76,9831,1243],{"class":89},[76,9833,8912],{"class":93},[76,9835,9837,9839,9841,9843,9845,9848,9850,9853,9855],{"class":78,"line":9836},49,[76,9838,9791],{"class":93},[76,9840,1243],{"class":89},[76,9842,9796],{"class":305},[76,9844,1303],{"class":250},[76,9846,9847],{"class":305},"Score: \"",[76,9849,1517],{"class":89},[76,9851,9852],{"class":93}," tArray[i].sArray[j].score ",[76,9854,1243],{"class":89},[76,9856,9857],{"class":93}," endl;   \n",[76,9859,9861],{"class":78,"line":9860},50,[76,9862,2601],{"class":93},[76,9864,9866],{"class":78,"line":9865},51,[76,9867,2259],{"class":93},[76,9869,9871],{"class":78,"line":9870},52,[76,9872,1637],{"class":93},[76,9874,9876,9878,9880],{"class":78,"line":9875},53,[76,9877,205],{"class":89},[76,9879,2045],{"class":2035},[76,9881,2048],{"class":93},[76,9883,9885],{"class":78,"line":9884},54,[76,9886,1618],{"class":93},[76,9888,9890],{"class":78,"line":9889},55,[76,9891,9892],{"class":82},"    \u002F\u002F随机数种子\n",[76,9894,9896,9898,9900,9902,9904,9906,9908,9910,9912],{"class":78,"line":9895},56,[76,9897,2445],{"class":2035},[76,9899,2448],{"class":93},[76,9901,2451],{"class":89},[76,9903,2454],{"class":89},[76,9905,629],{"class":93},[76,9907,2459],{"class":2035},[76,9909,202],{"class":93},[76,9911,2464],{"class":250},[76,9913,2467],{"class":93},[76,9915,9917],{"class":78,"line":9916},57,[76,9918,9919],{"class":82},"    \u002F\u002F1.创建3名老师的数组\n",[76,9921,9923,9925,9927,9930,9932],{"class":78,"line":9922},58,[76,9924,7967],{"class":89},[76,9926,9471],{"class":2035},[76,9928,9929],{"class":93}," tArray[",[76,9931,272],{"class":250},[76,9933,4762],{"class":93},[76,9935,9937],{"class":78,"line":9936},59,[76,9938,9939],{"class":82},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[76,9941,9943,9945,9948,9950,9953,9956,9958,9960,9963,9965],{"class":78,"line":9942},60,[76,9944,2057],{"class":89},[76,9946,9947],{"class":93}," len ",[76,9949,247],{"class":89},[76,9951,9952],{"class":89}," sizeof",[76,9954,9955],{"class":93},"(tArray) ",[76,9957,783],{"class":89},[76,9959,9952],{"class":89},[76,9961,9962],{"class":93},"(tArray[",[76,9964,392],{"class":250},[76,9966,3928],{"class":93},[76,9968,9970,9973],{"class":78,"line":9969},61,[76,9971,9972],{"class":2035},"    allocateSpace",[76,9974,9975],{"class":93},"(tArray, len);\n",[76,9977,9979],{"class":78,"line":9978},62,[76,9980,9981],{"class":82},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[76,9983,9985,9988],{"class":78,"line":9984},63,[76,9986,9987],{"class":2035},"    printInfo",[76,9989,9975],{"class":93},[76,9991,9993],{"class":78,"line":9992},64,[76,9994,2472],{"emptyLinePlaceholder":125},[76,9996,9998],{"class":78,"line":9997},65,[76,9999,1637],{"class":93},[152,10001,10002],{"start":86},[155,10003,10004,10007],{},[350,10005,10006],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10009,10010],{},"五名英雄信息如下：",[67,10012,10016],{"className":10013,"code":10014,"language":10015,"meta":58,"style":58},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[73,10017,10018,10036,10053,10070,10087],{"__ignoreMap":58},[76,10019,10020,10022,10025,10027,10029,10031,10034],{"class":78,"line":79},[76,10021,4989],{"class":93},[76,10023,10024],{"class":305},"\"刘备\"",[76,10026,578],{"class":93},[76,10028,974],{"class":250},[76,10030,578],{"class":93},[76,10032,10033],{"class":305},"\"男\"",[76,10035,5002],{"class":93},[76,10037,10038,10040,10043,10045,10047,10049,10051],{"class":78,"line":86},[76,10039,4989],{"class":93},[76,10041,10042],{"class":305},"\"关羽\"",[76,10044,578],{"class":93},[76,10046,949],{"class":250},[76,10048,578],{"class":93},[76,10050,10033],{"class":305},[76,10052,5002],{"class":93},[76,10054,10055,10057,10060,10062,10064,10066,10068],{"class":78,"line":97},[76,10056,4989],{"class":93},[76,10058,10059],{"class":305},"\"张飞\"",[76,10061,578],{"class":93},[76,10063,899],{"class":250},[76,10065,578],{"class":93},[76,10067,10033],{"class":305},[76,10069,5002],{"class":93},[76,10071,10072,10074,10077,10079,10081,10083,10085],{"class":78,"line":103},[76,10073,4989],{"class":93},[76,10075,10076],{"class":305},"\"赵云\"",[76,10078,578],{"class":93},[76,10080,924],{"class":250},[76,10082,578],{"class":93},[76,10084,10033],{"class":305},[76,10086,5002],{"class":93},[76,10088,10089,10091,10094,10096,10098,10100,10103],{"class":78,"line":1273},[76,10090,4989],{"class":93},[76,10092,10093],{"class":305},"\"貂蝉\"",[76,10095,578],{"class":93},[76,10097,874],{"class":250},[76,10099,578],{"class":93},[76,10101,10102],{"class":305},"\"女\"",[76,10104,5002],{"class":93},[14,10106,10107],{},"代码：",[67,10109,10111],{"className":190,"code":10110,"language":192,"meta":58,"style":58},"#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",[73,10112,10113,10119,10129,10135,10142,10146,10150,10156,10161,10165,10170,10193,10197,10222,10226,10259,10264,10293,10298,10313,10339,10359,10364,10369,10373,10377,10382,10404,10408,10432,10436,10498,10502,10506,10514,10518,10523,10534,10538,10554,10570,10586,10602,10618,10622,10642,10664,10669,10682,10689,10694,10700,10705,10718,10724],{"__ignoreMap":58},[76,10114,10115,10117],{"class":78,"line":79},[76,10116,2021],{"class":89},[76,10118,2024],{"class":305},[76,10120,10121,10123,10125,10127],{"class":78,"line":86},[76,10122,2029],{"class":89},[76,10124,2032],{"class":89},[76,10126,2036],{"class":2035},[76,10128,1363],{"class":93},[76,10130,10131,10133],{"class":78,"line":97},[76,10132,2021],{"class":89},[76,10134,7821],{"class":305},[76,10136,10137,10139],{"class":78,"line":103},[76,10138,7831],{"class":89},[76,10140,10141],{"class":2035}," Sanguo\n",[76,10143,10144],{"class":78,"line":1273},[76,10145,1618],{"class":93},[76,10147,10148],{"class":78,"line":1287},[76,10149,7857],{"class":93},[76,10151,10152,10154],{"class":78,"line":1293},[76,10153,2057],{"class":89},[76,10155,7869],{"class":93},[76,10157,10158],{"class":78,"line":1384},[76,10159,10160],{"class":93},"    string gender;\n",[76,10162,10163],{"class":78,"line":1390},[76,10164,4067],{"class":93},[76,10166,10167],{"class":78,"line":1402},[76,10168,10169],{"class":82},"\u002F\u002F定义排序函数\n",[76,10171,10172,10174,10176,10178,10181,10183,10185,10187,10189,10191],{"class":78,"line":1684},[76,10173,5436],{"class":89},[76,10175,7388],{"class":2035},[76,10177,202],{"class":93},[76,10179,10180],{"class":2035},"Sanguo",[76,10182,6590],{"class":89},[76,10184,894],{"class":5288},[76,10186,578],{"class":93},[76,10188,205],{"class":89},[76,10190,7403],{"class":5288},[76,10192,208],{"class":93},[76,10194,10195],{"class":78,"line":1689},[76,10196,1618],{"class":93},[76,10198,10199,10201,10203,10205,10207,10209,10211,10213,10215,10218,10220],{"class":78,"line":1695},[76,10200,3273],{"class":89},[76,10202,202],{"class":93},[76,10204,205],{"class":89},[76,10206,3104],{"class":93},[76,10208,247],{"class":89},[76,10210,392],{"class":250},[76,10212,3111],{"class":93},[76,10214,1109],{"class":89},[76,10216,10217],{"class":93},"len;i",[76,10219,2364],{"class":89},[76,10221,208],{"class":93},[76,10223,10224],{"class":78,"line":1700},[76,10225,2102],{"class":93},[76,10227,10228,10231,10233,10235,10237,10239,10241,10243,10245,10247,10249,10251,10253,10255,10257],{"class":78,"line":1714},[76,10229,10230],{"class":89},"     for",[76,10232,1730],{"class":93},[76,10234,205],{"class":89},[76,10236,3482],{"class":93},[76,10238,247],{"class":89},[76,10240,392],{"class":250},[76,10242,3489],{"class":93},[76,10244,1109],{"class":89},[76,10246,7430],{"class":93},[76,10248,112],{"class":89},[76,10250,418],{"class":250},[76,10252,112],{"class":89},[76,10254,3622],{"class":93},[76,10256,2364],{"class":89},[76,10258,208],{"class":93},[76,10260,10261],{"class":78,"line":1719},[76,10262,10263],{"class":93},"     {\n",[76,10265,10266,10269,10272,10274,10277,10279,10282,10284,10286,10288,10290],{"class":78,"line":1725},[76,10267,10268],{"class":89},"         if",[76,10270,10271],{"class":93}," ((s",[76,10273,681],{"class":89},[76,10275,10276],{"class":93},"j)->age ",[76,10278,1159],{"class":89},[76,10280,10281],{"class":93}," (s",[76,10283,681],{"class":89},[76,10285,667],{"class":93},[76,10287,681],{"class":89},[76,10289,418],{"class":250},[76,10291,10292],{"class":93},")->age)\n",[76,10294,10295],{"class":78,"line":1746},[76,10296,10297],{"class":93},"         {\n",[76,10299,10300,10303,10305,10308,10310],{"class":78,"line":1751},[76,10301,10302],{"class":93},"             Sanguo temp",[76,10304,7225],{"class":89},[76,10306,10307],{"class":93},"(s",[76,10309,681],{"class":89},[76,10311,10312],{"class":93},"j);\n",[76,10314,10315,10318,10320,10322,10325,10327,10329,10331,10333,10335,10337],{"class":78,"line":1765},[76,10316,10317],{"class":89},"             *",[76,10319,10307],{"class":93},[76,10321,681],{"class":89},[76,10323,10324],{"class":93},"j)",[76,10326,7225],{"class":89},[76,10328,10307],{"class":93},[76,10330,681],{"class":89},[76,10332,667],{"class":93},[76,10334,681],{"class":89},[76,10336,418],{"class":250},[76,10338,2791],{"class":93},[76,10340,10341,10343,10345,10347,10349,10351,10353,10355,10357],{"class":78,"line":1770},[76,10342,10317],{"class":89},[76,10344,10307],{"class":93},[76,10346,681],{"class":89},[76,10348,667],{"class":93},[76,10350,681],{"class":89},[76,10352,418],{"class":250},[76,10354,629],{"class":93},[76,10356,247],{"class":89},[76,10358,4352],{"class":93},[76,10360,10361],{"class":78,"line":1799},[76,10362,10363],{"class":93},"         }\n",[76,10365,10366],{"class":78,"line":1804},[76,10367,10368],{"class":93},"     }\n",[76,10370,10371],{"class":78,"line":1821},[76,10372,2259],{"class":93},[76,10374,10375],{"class":78,"line":1826},[76,10376,1637],{"class":93},[76,10378,10379],{"class":78,"line":1831},[76,10380,10381],{"class":82},"\u002F\u002F定义打印函数\n",[76,10383,10384,10386,10388,10390,10392,10394,10396,10398,10400,10402],{"class":78,"line":1836},[76,10385,5436],{"class":89},[76,10387,9687],{"class":2035},[76,10389,202],{"class":93},[76,10391,10180],{"class":2035},[76,10393,6590],{"class":89},[76,10395,894],{"class":5288},[76,10397,578],{"class":93},[76,10399,205],{"class":89},[76,10401,7403],{"class":5288},[76,10403,208],{"class":93},[76,10405,10406],{"class":78,"line":1850},[76,10407,1618],{"class":93},[76,10409,10410,10412,10414,10416,10418,10420,10422,10424,10426,10428,10430],{"class":78,"line":1855},[76,10411,3273],{"class":89},[76,10413,1730],{"class":93},[76,10415,205],{"class":89},[76,10417,3104],{"class":93},[76,10419,247],{"class":89},[76,10421,392],{"class":250},[76,10423,3111],{"class":93},[76,10425,1109],{"class":89},[76,10427,10217],{"class":93},[76,10429,2364],{"class":89},[76,10431,208],{"class":93},[76,10433,10434],{"class":78,"line":2649},[76,10435,2102],{"class":93},[76,10437,10438,10440,10442,10444,10446,10449,10451,10453,10455,10458,10460,10462,10464,10467,10469,10471,10473,10476,10478,10480,10482,10485,10487,10489,10491,10494,10496],{"class":78,"line":2663},[76,10439,3523],{"class":93},[76,10441,1243],{"class":89},[76,10443,452],{"class":305},[76,10445,1303],{"class":250},[76,10447,10448],{"class":305},"姓名：\"",[76,10450,1243],{"class":89},[76,10452,10307],{"class":93},[76,10454,681],{"class":89},[76,10456,10457],{"class":93},"i)->name",[76,10459,1243],{"class":89},[76,10461,452],{"class":305},[76,10463,1303],{"class":250},[76,10465,10466],{"class":305},"年龄：\"",[76,10468,1243],{"class":89},[76,10470,10307],{"class":93},[76,10472,681],{"class":89},[76,10474,10475],{"class":93},"i)->age",[76,10477,1243],{"class":89},[76,10479,452],{"class":305},[76,10481,1303],{"class":250},[76,10483,10484],{"class":305},"性别：\"",[76,10486,1243],{"class":89},[76,10488,10307],{"class":93},[76,10490,681],{"class":89},[76,10492,10493],{"class":93},"i)->gender",[76,10495,1243],{"class":89},[76,10497,1265],{"class":93},[76,10499,10500],{"class":78,"line":2671},[76,10501,2259],{"class":93},[76,10503,10504],{"class":78,"line":2676},[76,10505,1637],{"class":93},[76,10507,10508,10510,10512],{"class":78,"line":2682},[76,10509,205],{"class":89},[76,10511,2045],{"class":2035},[76,10513,2048],{"class":93},[76,10515,10516],{"class":78,"line":2688},[76,10517,1618],{"class":93},[76,10519,10520],{"class":78,"line":2693},[76,10521,10522],{"class":82},"    \u002F\u002F定义结构体变量\n",[76,10524,10525,10528,10530,10532],{"class":78,"line":8020},[76,10526,10527],{"class":93},"    Sanguo s1[",[76,10529,520],{"class":250},[76,10531,1139],{"class":93},[76,10533,4980],{"class":89},[76,10535,10536],{"class":78,"line":8044},[76,10537,2102],{"class":93},[76,10539,10540,10542,10544,10546,10548,10550,10552],{"class":78,"line":8049},[76,10541,4989],{"class":93},[76,10543,10024],{"class":305},[76,10545,578],{"class":93},[76,10547,974],{"class":250},[76,10549,578],{"class":93},[76,10551,10033],{"class":305},[76,10553,5002],{"class":93},[76,10555,10556,10558,10560,10562,10564,10566,10568],{"class":78,"line":8055},[76,10557,4989],{"class":93},[76,10559,10042],{"class":305},[76,10561,578],{"class":93},[76,10563,949],{"class":250},[76,10565,578],{"class":93},[76,10567,10033],{"class":305},[76,10569,5002],{"class":93},[76,10571,10572,10574,10576,10578,10580,10582,10584],{"class":78,"line":8082},[76,10573,4989],{"class":93},[76,10575,10059],{"class":305},[76,10577,578],{"class":93},[76,10579,899],{"class":250},[76,10581,578],{"class":93},[76,10583,10033],{"class":305},[76,10585,5002],{"class":93},[76,10587,10588,10590,10592,10594,10596,10598,10600],{"class":78,"line":8087},[76,10589,4989],{"class":93},[76,10591,10076],{"class":305},[76,10593,578],{"class":93},[76,10595,924],{"class":250},[76,10597,578],{"class":93},[76,10599,10033],{"class":305},[76,10601,5002],{"class":93},[76,10603,10604,10606,10608,10610,10612,10614,10616],{"class":78,"line":8093},[76,10605,4989],{"class":93},[76,10607,10093],{"class":305},[76,10609,578],{"class":93},[76,10611,874],{"class":250},[76,10613,578],{"class":93},[76,10615,10102],{"class":305},[76,10617,5002],{"class":93},[76,10619,10620],{"class":78,"line":8105},[76,10621,5023],{"class":93},[76,10623,10624,10626,10628,10630,10633,10635,10638,10640],{"class":78,"line":8117},[76,10625,2057],{"class":89},[76,10627,7403],{"class":93},[76,10629,4275],{"class":89},[76,10631,10632],{"class":93},"(s1)",[76,10634,4281],{"class":89},[76,10636,10637],{"class":93},"(s1[",[76,10639,392],{"class":250},[76,10641,3928],{"class":93},[76,10643,10644,10647,10649,10652,10654,10657,10660,10662],{"class":78,"line":8129},[76,10645,10646],{"class":93},"    Sanguo ",[76,10648,655],{"class":89},[76,10650,10651],{"class":93},"s ",[76,10653,247],{"class":89},[76,10655,10656],{"class":89}," &",[76,10658,10659],{"class":93},"s1[",[76,10661,392],{"class":250},[76,10663,4762],{"class":93},[76,10665,10666],{"class":78,"line":9788},[76,10667,10668],{"class":82},"    \u002F\u002F排序前：\n",[76,10670,10671,10673,10675,10678,10680],{"class":78,"line":9813},[76,10672,6601],{"class":93},[76,10674,1243],{"class":89},[76,10676,10677],{"class":305}," \"排序前：\"",[76,10679,1517],{"class":89},[76,10681,8912],{"class":93},[76,10683,10684,10686],{"class":78,"line":9836},[76,10685,9987],{"class":2035},[76,10687,10688],{"class":93},"(s,len);\n",[76,10690,10691],{"class":78,"line":9860},[76,10692,10693],{"class":82},"    \u002F\u002F调用排序函数\n",[76,10695,10696,10698],{"class":78,"line":9865},[76,10697,7670],{"class":2035},[76,10699,10688],{"class":93},[76,10701,10702],{"class":78,"line":9870},[76,10703,10704],{"class":82},"    \u002F\u002F排序后\n",[76,10706,10707,10709,10711,10714,10716],{"class":78,"line":9875},[76,10708,6601],{"class":93},[76,10710,1243],{"class":89},[76,10712,10713],{"class":305}," \"排序后：\"",[76,10715,1517],{"class":89},[76,10717,8912],{"class":93},[76,10719,10720,10722],{"class":78,"line":9884},[76,10721,9987],{"class":2035},[76,10723,10688],{"class":93},[76,10725,10726],{"class":78,"line":9889},[76,10727,1637],{"class":93},[14,10729,10730,10731,10733],{},"注意：使用指针时直接用传首地址**&s",[76,10732,392],{},"**",[117,10735,10736],{},"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":58,"searchDepth":86,"depth":86,"links":10738},[10739,10740,10741,10742,10743,10744,10745],{"id":7775,"depth":86,"text":7776},{"id":8137,"depth":86,"text":8138},{"id":8406,"depth":86,"text":8407},{"id":8571,"depth":86,"text":8572},{"id":8787,"depth":86,"text":8788},{"id":9108,"depth":86,"text":9109},{"id":9336,"depth":86,"text":9337},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7764,"description":7772},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10752,"title":10753,"body":10754,"description":58,"extension":123,"meta":12097,"navigation":125,"path":12098,"seo":12099,"stem":12100,"__hash__":12101},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10755,"toc":12091},[10756,10759,10763,10769,10783,10788,10791,10795,10802,10808,10811,10818,10824,10829,10832,10835,10838,11402,11405,11419,11423,11428,11444,11584,11587,11593,11596,11601,11609,11717,11720,11725,11728,11733,11736,11742,11745,12088],[10,10757,10753],{"id":10758},"_5程序内存模型",[140,10760,10762],{"id":10761},"_51内存分区模型","5.1内存分区模型",[14,10764,10765,10766],{},"C++程序在执行时，将内存大方向划分为",[350,10767,10768],{},"4个区域",[1206,10770,10771,10774,10777,10780],{},[155,10772,10773],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[155,10775,10776],{},"全局区：存放全局变量和静态变量以及常量",[155,10778,10779],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[155,10781,10782],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10784,10785],{},[350,10786,10787],{},"内存四区意义：",[14,10789,10790],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[169,10792,10794],{"id":10793},"_511程序运行前","5.1.1程序运行前",[14,10796,10797,10798,10801],{},"​\t在程序编译后，生成了exe可执行程序，",[350,10799,10800],{},"未执行该程序前","分为两个区域",[14,10803,10804,10805],{},"​\t",[350,10806,10807],{},"代码区：",[14,10809,10810],{},"​\t\t存放 CPU 执行的机器指令",[14,10812,10813,10814,10817],{},"​\t\t代码区是",[350,10815,10816],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10819,10813,10820,10823],{},[350,10821,10822],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10825,10804,10826],{},[350,10827,10828],{},"全局区：",[14,10830,10831],{},"​\t\t全局变量和静态变量存放在此.",[14,10833,10834],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10836,10837],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[67,10839,10841],{"className":190,"code":10840,"language":192,"meta":58,"style":58},"\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",[73,10842,10843,10848,10861,10874,10878,10883,10898,10913,10917,10926,10930,10935,10948,10961,10965,10970,10996,11022,11026,11053,11079,11083,11088,11104,11119,11123,11149,11175,11179,11204,11229,11233,11259,11285,11289,11305,11320,11346,11372,11376,11386,11390,11398],{"__ignoreMap":58},[76,10844,10845],{"class":78,"line":79},[76,10846,10847],{"class":82},"\u002F\u002F全局变量\n",[76,10849,10850,10852,10855,10857,10859],{"class":78,"line":86},[76,10851,205],{"class":89},[76,10853,10854],{"class":93}," g_a ",[76,10856,247],{"class":89},[76,10858,2110],{"class":250},[76,10860,1363],{"class":93},[76,10862,10863,10865,10868,10870,10872],{"class":78,"line":97},[76,10864,205],{"class":89},[76,10866,10867],{"class":93}," g_b ",[76,10869,247],{"class":89},[76,10871,2110],{"class":250},[76,10873,1363],{"class":93},[76,10875,10876],{"class":78,"line":103},[76,10877,2472],{"emptyLinePlaceholder":125},[76,10879,10880],{"class":78,"line":1273},[76,10881,10882],{"class":82},"\u002F\u002F全局常量\n",[76,10884,10885,10887,10889,10892,10894,10896],{"class":78,"line":1287},[76,10886,6864],{"class":89},[76,10888,2454],{"class":89},[76,10890,10891],{"class":93}," c_g_a ",[76,10893,247],{"class":89},[76,10895,2110],{"class":250},[76,10897,1363],{"class":93},[76,10899,10900,10902,10904,10907,10909,10911],{"class":78,"line":1293},[76,10901,6864],{"class":89},[76,10903,2454],{"class":89},[76,10905,10906],{"class":93}," c_g_b ",[76,10908,247],{"class":89},[76,10910,2110],{"class":250},[76,10912,1363],{"class":93},[76,10914,10915],{"class":78,"line":1384},[76,10916,2472],{"emptyLinePlaceholder":125},[76,10918,10919,10921,10923],{"class":78,"line":1390},[76,10920,205],{"class":89},[76,10922,2045],{"class":2035},[76,10924,10925],{"class":93},"() {\n",[76,10927,10928],{"class":78,"line":1402},[76,10929,2472],{"emptyLinePlaceholder":125},[76,10931,10932],{"class":78,"line":1684},[76,10933,10934],{"class":82},"    \u002F\u002F局部变量\n",[76,10936,10937,10939,10942,10944,10946],{"class":78,"line":1689},[76,10938,2057],{"class":89},[76,10940,10941],{"class":93}," a ",[76,10943,247],{"class":89},[76,10945,2110],{"class":250},[76,10947,1363],{"class":93},[76,10949,10950,10952,10955,10957,10959],{"class":78,"line":1695},[76,10951,2057],{"class":89},[76,10953,10954],{"class":93}," b ",[76,10956,247],{"class":89},[76,10958,2110],{"class":250},[76,10960,1363],{"class":93},[76,10962,10963],{"class":78,"line":1700},[76,10964,2472],{"emptyLinePlaceholder":125},[76,10966,10967],{"class":78,"line":1714},[76,10968,10969],{"class":82},"    \u002F\u002F打印地址\n",[76,10971,10972,10974,10976,10979,10981,10983,10985,10987,10989,10992,10994],{"class":78,"line":1719},[76,10973,6601],{"class":93},[76,10975,1243],{"class":89},[76,10977,10978],{"class":305}," \"局部变量a地址为： \"",[76,10980,1517],{"class":89},[76,10982,1730],{"class":93},[76,10984,205],{"class":89},[76,10986,629],{"class":93},[76,10988,553],{"class":89},[76,10990,10991],{"class":93},"a ",[76,10993,1243],{"class":89},[76,10995,8912],{"class":93},[76,10997,10998,11000,11002,11005,11007,11009,11011,11013,11015,11018,11020],{"class":78,"line":1725},[76,10999,6601],{"class":93},[76,11001,1243],{"class":89},[76,11003,11004],{"class":305}," \"局部变量b地址为： \"",[76,11006,1517],{"class":89},[76,11008,1730],{"class":93},[76,11010,205],{"class":89},[76,11012,629],{"class":93},[76,11014,553],{"class":89},[76,11016,11017],{"class":93},"b ",[76,11019,1243],{"class":89},[76,11021,8912],{"class":93},[76,11023,11024],{"class":78,"line":1746},[76,11025,2472],{"emptyLinePlaceholder":125},[76,11027,11028,11030,11032,11035,11037,11040,11042,11044,11046,11049,11051],{"class":78,"line":1751},[76,11029,6601],{"class":93},[76,11031,1243],{"class":89},[76,11033,11034],{"class":305}," \"全局变量g_a地址为： \"",[76,11036,1517],{"class":89},[76,11038,11039],{"class":93},"  (",[76,11041,205],{"class":89},[76,11043,629],{"class":93},[76,11045,553],{"class":89},[76,11047,11048],{"class":93},"g_a ",[76,11050,1243],{"class":89},[76,11052,8912],{"class":93},[76,11054,11055,11057,11059,11062,11064,11066,11068,11070,11072,11075,11077],{"class":78,"line":1765},[76,11056,6601],{"class":93},[76,11058,1243],{"class":89},[76,11060,11061],{"class":305}," \"全局变量g_b地址为： \"",[76,11063,1517],{"class":89},[76,11065,11039],{"class":93},[76,11067,205],{"class":89},[76,11069,629],{"class":93},[76,11071,553],{"class":89},[76,11073,11074],{"class":93},"g_b ",[76,11076,1243],{"class":89},[76,11078,8912],{"class":93},[76,11080,11081],{"class":78,"line":1770},[76,11082,2472],{"emptyLinePlaceholder":125},[76,11084,11085],{"class":78,"line":1799},[76,11086,11087],{"class":82},"    \u002F\u002F静态变量\n",[76,11089,11090,11093,11095,11098,11100,11102],{"class":78,"line":1804},[76,11091,11092],{"class":89},"    static",[76,11094,2454],{"class":89},[76,11096,11097],{"class":93}," s_a ",[76,11099,247],{"class":89},[76,11101,2110],{"class":250},[76,11103,1363],{"class":93},[76,11105,11106,11108,11110,11113,11115,11117],{"class":78,"line":1821},[76,11107,11092],{"class":89},[76,11109,2454],{"class":89},[76,11111,11112],{"class":93}," s_b ",[76,11114,247],{"class":89},[76,11116,2110],{"class":250},[76,11118,1363],{"class":93},[76,11120,11121],{"class":78,"line":1826},[76,11122,2472],{"emptyLinePlaceholder":125},[76,11124,11125,11127,11129,11132,11134,11136,11138,11140,11142,11145,11147],{"class":78,"line":1831},[76,11126,6601],{"class":93},[76,11128,1243],{"class":89},[76,11130,11131],{"class":305}," \"静态变量s_a地址为： \"",[76,11133,1517],{"class":89},[76,11135,1730],{"class":93},[76,11137,205],{"class":89},[76,11139,629],{"class":93},[76,11141,553],{"class":89},[76,11143,11144],{"class":93},"s_a ",[76,11146,1243],{"class":89},[76,11148,8912],{"class":93},[76,11150,11151,11153,11155,11158,11160,11162,11164,11166,11168,11171,11173],{"class":78,"line":1836},[76,11152,6601],{"class":93},[76,11154,1243],{"class":89},[76,11156,11157],{"class":305}," \"静态变量s_b地址为： \"",[76,11159,1517],{"class":89},[76,11161,1730],{"class":93},[76,11163,205],{"class":89},[76,11165,629],{"class":93},[76,11167,553],{"class":89},[76,11169,11170],{"class":93},"s_b ",[76,11172,1243],{"class":89},[76,11174,8912],{"class":93},[76,11176,11177],{"class":78,"line":1850},[76,11178,2472],{"emptyLinePlaceholder":125},[76,11180,11181,11183,11185,11188,11190,11192,11194,11196,11198,11200,11202],{"class":78,"line":1855},[76,11182,6601],{"class":93},[76,11184,1243],{"class":89},[76,11186,11187],{"class":305}," \"字符串常量地址为： \"",[76,11189,1517],{"class":89},[76,11191,1730],{"class":93},[76,11193,205],{"class":89},[76,11195,629],{"class":93},[76,11197,553],{"class":89},[76,11199,1260],{"class":305},[76,11201,1517],{"class":89},[76,11203,8912],{"class":93},[76,11205,11206,11208,11210,11212,11214,11216,11218,11220,11222,11225,11227],{"class":78,"line":2649},[76,11207,6601],{"class":93},[76,11209,1243],{"class":89},[76,11211,11187],{"class":305},[76,11213,1517],{"class":89},[76,11215,1730],{"class":93},[76,11217,205],{"class":89},[76,11219,629],{"class":93},[76,11221,553],{"class":89},[76,11223,11224],{"class":305},"\"hello world1\"",[76,11226,1517],{"class":89},[76,11228,8912],{"class":93},[76,11230,11231],{"class":78,"line":2663},[76,11232,2472],{"emptyLinePlaceholder":125},[76,11234,11235,11237,11239,11242,11244,11246,11248,11250,11252,11255,11257],{"class":78,"line":2671},[76,11236,6601],{"class":93},[76,11238,1243],{"class":89},[76,11240,11241],{"class":305}," \"全局常量c_g_a地址为： \"",[76,11243,1517],{"class":89},[76,11245,1730],{"class":93},[76,11247,205],{"class":89},[76,11249,629],{"class":93},[76,11251,553],{"class":89},[76,11253,11254],{"class":93},"c_g_a ",[76,11256,1243],{"class":89},[76,11258,8912],{"class":93},[76,11260,11261,11263,11265,11268,11270,11272,11274,11276,11278,11281,11283],{"class":78,"line":2676},[76,11262,6601],{"class":93},[76,11264,1243],{"class":89},[76,11266,11267],{"class":305}," \"全局常量c_g_b地址为： \"",[76,11269,1517],{"class":89},[76,11271,1730],{"class":93},[76,11273,205],{"class":89},[76,11275,629],{"class":93},[76,11277,553],{"class":89},[76,11279,11280],{"class":93},"c_g_b ",[76,11282,1243],{"class":89},[76,11284,8912],{"class":93},[76,11286,11287],{"class":78,"line":2682},[76,11288,2472],{"emptyLinePlaceholder":125},[76,11290,11291,11294,11296,11299,11301,11303],{"class":78,"line":2688},[76,11292,11293],{"class":89},"    const",[76,11295,2454],{"class":89},[76,11297,11298],{"class":93}," c_l_a ",[76,11300,247],{"class":89},[76,11302,2110],{"class":250},[76,11304,1363],{"class":93},[76,11306,11307,11309,11311,11314,11316,11318],{"class":78,"line":2693},[76,11308,11293],{"class":89},[76,11310,2454],{"class":89},[76,11312,11313],{"class":93}," c_l_b ",[76,11315,247],{"class":89},[76,11317,2110],{"class":250},[76,11319,1363],{"class":93},[76,11321,11322,11324,11326,11329,11331,11333,11335,11337,11339,11342,11344],{"class":78,"line":8020},[76,11323,6601],{"class":93},[76,11325,1243],{"class":89},[76,11327,11328],{"class":305}," \"局部常量c_l_a地址为： \"",[76,11330,1517],{"class":89},[76,11332,1730],{"class":93},[76,11334,205],{"class":89},[76,11336,629],{"class":93},[76,11338,553],{"class":89},[76,11340,11341],{"class":93},"c_l_a ",[76,11343,1243],{"class":89},[76,11345,8912],{"class":93},[76,11347,11348,11350,11352,11355,11357,11359,11361,11363,11365,11368,11370],{"class":78,"line":8044},[76,11349,6601],{"class":93},[76,11351,1243],{"class":89},[76,11353,11354],{"class":305}," \"局部常量c_l_b地址为： \"",[76,11356,1517],{"class":89},[76,11358,1730],{"class":93},[76,11360,205],{"class":89},[76,11362,629],{"class":93},[76,11364,553],{"class":89},[76,11366,11367],{"class":93},"c_l_b ",[76,11369,1243],{"class":89},[76,11371,8912],{"class":93},[76,11373,11374],{"class":78,"line":8049},[76,11375,2472],{"emptyLinePlaceholder":125},[76,11377,11378,11380,11382,11384],{"class":78,"line":8055},[76,11379,2375],{"class":2035},[76,11381,202],{"class":93},[76,11383,2380],{"class":305},[76,11385,2791],{"class":93},[76,11387,11388],{"class":78,"line":8082},[76,11389,2472],{"emptyLinePlaceholder":125},[76,11391,11392,11394,11396],{"class":78,"line":8087},[76,11393,4162],{"class":89},[76,11395,4165],{"class":250},[76,11397,1363],{"class":93},[76,11399,11400],{"class":78,"line":8093},[76,11401,1637],{"class":93},[14,11403,11404],{},"总结：",[1206,11406,11407,11410,11413,11416],{},[155,11408,11409],{},"c++中程序运行前分为全局区和代码区",[155,11411,11412],{},"代码区特点是共享和只读",[155,11414,11415],{},"全局区中存放全局变量、静态变量、常量",[155,11417,11418],{},"常量区中存放const修饰的全局常量和字符串常量",[169,11420,11422],{"id":11421},"_512程序运行后","5.1.2程序运行后",[152,11424,11425],{},[155,11426,11427],{},"栈区：",[1206,11429,11430,11437],{},[155,11431,11432,11433,11436],{},"由编译器自动分配释放, 存放",[350,11434,11435],{},"函数的参数值,局部变量","等",[155,11438,11439,11440,11443],{},"注意事项：",[350,11441,11442],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[67,11445,11447],{"className":190,"code":11446,"language":192,"meta":58,"style":58},"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",[73,11448,11449,11460,11464,11479,11491,11495,11499,11507,11512,11527,11545,11562,11572,11580],{"__ignoreMap":58},[76,11450,11451,11453,11455,11458],{"class":78,"line":79},[76,11452,205],{"class":89},[76,11454,6590],{"class":89},[76,11456,11457],{"class":2035}," func",[76,11459,2048],{"class":93},[76,11461,11462],{"class":78,"line":86},[76,11463,1618],{"class":93},[76,11465,11466,11468,11470,11472,11474,11476],{"class":78,"line":97},[76,11467,2057],{"class":89},[76,11469,10941],{"class":93},[76,11471,247],{"class":89},[76,11473,2110],{"class":250},[76,11475,257],{"class":93},[76,11477,11478],{"class":82}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[76,11480,11481,11483,11485,11488],{"class":78,"line":103},[76,11482,4162],{"class":89},[76,11484,10656],{"class":89},[76,11486,11487],{"class":93},"a;",[76,11489,11490],{"class":82}," \u002F\u002F放回局部变量的地址\n",[76,11492,11493],{"class":78,"line":1273},[76,11494,1637],{"class":93},[76,11496,11497],{"class":78,"line":1287},[76,11498,2472],{"emptyLinePlaceholder":125},[76,11500,11501,11503,11505],{"class":78,"line":1293},[76,11502,205],{"class":89},[76,11504,2045],{"class":2035},[76,11506,10925],{"class":93},[76,11508,11509],{"class":78,"line":1384},[76,11510,11511],{"class":82},"    \u002F\u002F接受func的返回值\n",[76,11513,11514,11516,11518,11521,11523,11525],{"class":78,"line":1390},[76,11515,2057],{"class":89},[76,11517,6590],{"class":89},[76,11519,11520],{"class":93},"p ",[76,11522,247],{"class":89},[76,11524,11457],{"class":2035},[76,11526,5708],{"class":93},[76,11528,11529,11531,11533,11535,11537,11539,11542],{"class":78,"line":1402},[76,11530,6601],{"class":93},[76,11532,1243],{"class":89},[76,11534,6590],{"class":89},[76,11536,11520],{"class":93},[76,11538,1243],{"class":89},[76,11540,11541],{"class":93}," endl;",[76,11543,11544],{"class":82}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[76,11546,11547,11549,11551,11553,11555,11557,11559],{"class":78,"line":1684},[76,11548,6601],{"class":93},[76,11550,1243],{"class":89},[76,11552,6590],{"class":89},[76,11554,11520],{"class":93},[76,11556,1243],{"class":89},[76,11558,11541],{"class":93},[76,11560,11561],{"class":82}," \u002F\u002F第二次这个数据不再保留\n",[76,11563,11564,11566,11568,11570],{"class":78,"line":1689},[76,11565,2375],{"class":2035},[76,11567,202],{"class":93},[76,11569,2380],{"class":305},[76,11571,2791],{"class":93},[76,11573,11574,11576,11578],{"class":78,"line":1695},[76,11575,4162],{"class":89},[76,11577,4165],{"class":250},[76,11579,1363],{"class":93},[76,11581,11582],{"class":78,"line":1700},[76,11583,1637],{"class":93},[14,11585,11586],{},"输出结果：",[14,11588,11589],{},[56,11590],{"alt":11591,"src":11592},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11594,11595],{},"总结：不要返回局部变量的地址",[152,11597,11598],{"start":86},[155,11599,11600],{},"堆区",[1206,11602,11603,11606],{},[155,11604,11605],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[155,11607,11608],{},"在c++中主要利用new在堆区开辟内存",[67,11610,11612],{"className":190,"code":11611,"language":192,"meta":58,"style":58},"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",[73,11613,11614,11629,11633,11638,11659,11666,11670,11678,11682,11687,11701,11713],{"__ignoreMap":58},[76,11615,11616,11618,11621,11624,11626],{"class":78,"line":79},[76,11617,205],{"class":89},[76,11619,11620],{"class":89},"  *",[76,11622,11623],{"class":2035},"func",[76,11625,2499],{"class":93},[76,11627,11628],{"class":82},"  \u002F\u002F函数返回指针\n",[76,11630,11631],{"class":78,"line":86},[76,11632,1618],{"class":93},[76,11634,11635],{"class":78,"line":97},[76,11636,11637],{"class":82},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[76,11639,11640,11642,11644,11646,11648,11651,11653,11655,11657],{"class":78,"line":103},[76,11641,4219],{"class":89},[76,11643,6590],{"class":89},[76,11645,14],{"class":93},[76,11647,247],{"class":89},[76,11649,11650],{"class":89}," new",[76,11652,2454],{"class":89},[76,11654,202],{"class":93},[76,11656,646],{"class":250},[76,11658,2791],{"class":93},[76,11660,11661,11663],{"class":78,"line":1273},[76,11662,4453],{"class":89},[76,11664,11665],{"class":93}," p;\n",[76,11667,11668],{"class":78,"line":1287},[76,11669,1637],{"class":93},[76,11671,11672,11674,11676],{"class":78,"line":1293},[76,11673,205],{"class":89},[76,11675,2045],{"class":2035},[76,11677,2048],{"class":93},[76,11679,11680],{"class":78,"line":1384},[76,11681,1618],{"class":93},[76,11683,11684],{"class":78,"line":1390},[76,11685,11686],{"class":82},"    \u002F\u002F在堆区开辟数据\n",[76,11688,11689,11691,11693,11695,11697,11699],{"class":78,"line":1402},[76,11690,2057],{"class":89},[76,11692,6590],{"class":89},[76,11694,14],{"class":93},[76,11696,247],{"class":89},[76,11698,11623],{"class":2035},[76,11700,5708],{"class":93},[76,11702,11703,11705,11707,11709,11711],{"class":78,"line":1684},[76,11704,1623],{"class":93},[76,11706,6491],{"class":89},[76,11708,14],{"class":93},[76,11710,1243],{"class":89},[76,11712,1265],{"class":93},[76,11714,11715],{"class":78,"line":1689},[76,11716,1637],{"class":93},[14,11718,11719],{},"图片展示：",[14,11721,11722],{},[56,11723],{"alt":11591,"src":11724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11726,11727],{},"堆区内存由程序员管生死！！！",[152,11729,11730],{"start":97},[155,11731,11732],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11734,11735],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11737,11738,11739],{},"​语法：",[73,11740,11741],{}," new 数据类型",[14,11743,11744],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[67,11746,11748],{"className":190,"code":11747,"language":192,"meta":58,"style":58},"\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",[73,11749,11750,11755,11765,11769,11774,11779,11801,11805,11813,11817,11831,11843,11855,11867,11872,11877,11888,11892,11897,11905,11909,11914,11936,11962,11966,11984,11988,12014,12018,12030,12034,12039,12044,12052,12056,12060,12068,12072,12078,12084],{"__ignoreMap":58},[76,11751,11752],{"class":78,"line":79},[76,11753,11754],{"class":82},"\u002F\u002F1.new的基本语法\n",[76,11756,11757,11759,11761,11763],{"class":78,"line":86},[76,11758,205],{"class":89},[76,11760,6590],{"class":89},[76,11762,11623],{"class":2035},[76,11764,2048],{"class":93},[76,11766,11767],{"class":78,"line":97},[76,11768,1618],{"class":93},[76,11770,11771],{"class":78,"line":103},[76,11772,11773],{"class":82},"    \u002F\u002F在堆区创建整型数据\n",[76,11775,11776],{"class":78,"line":1273},[76,11777,11778],{"class":82},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[76,11780,11781,11783,11785,11787,11790,11792,11794,11796,11798],{"class":78,"line":1287},[76,11782,2057],{"class":89},[76,11784,6590],{"class":89},[76,11786,14],{"class":93},[76,11788,11789],{"class":89},"=new",[76,11791,2454],{"class":89},[76,11793,202],{"class":93},[76,11795,646],{"class":250},[76,11797,6038],{"class":93},[76,11799,11800],{"class":82},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[76,11802,11803],{"class":78,"line":1293},[76,11804,1637],{"class":93},[76,11806,11807,11809,11811],{"class":78,"line":1384},[76,11808,5436],{"class":89},[76,11810,5660],{"class":2035},[76,11812,2048],{"class":93},[76,11814,11815],{"class":78,"line":1390},[76,11816,1618],{"class":93},[76,11818,11819,11821,11823,11825,11827,11829],{"class":78,"line":1402},[76,11820,2057],{"class":89},[76,11822,6590],{"class":89},[76,11824,14],{"class":93},[76,11826,247],{"class":89},[76,11828,11623],{"class":2035},[76,11830,5708],{"class":93},[76,11832,11833,11835,11837,11839,11841],{"class":78,"line":1684},[76,11834,1623],{"class":93},[76,11836,6491],{"class":89},[76,11838,14],{"class":93},[76,11840,1243],{"class":89},[76,11842,1265],{"class":93},[76,11844,11845,11847,11849,11851,11853],{"class":78,"line":1689},[76,11846,1623],{"class":93},[76,11848,6491],{"class":89},[76,11850,14],{"class":93},[76,11852,1243],{"class":89},[76,11854,1265],{"class":93},[76,11856,11857,11859,11861,11863,11865],{"class":78,"line":1695},[76,11858,1623],{"class":93},[76,11860,6491],{"class":89},[76,11862,14],{"class":93},[76,11864,1243],{"class":89},[76,11866,1265],{"class":93},[76,11868,11869],{"class":78,"line":1700},[76,11870,11871],{"class":82},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[76,11873,11874],{"class":78,"line":1714},[76,11875,11876],{"class":82},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[76,11878,11879,11882,11885],{"class":78,"line":1719},[76,11880,11881],{"class":89},"    delete",[76,11883,11884],{"class":93}," p;",[76,11886,11887],{"class":82},"\u002F\u002F删除这块地址\n",[76,11889,11890],{"class":78,"line":1725},[76,11891,1637],{"class":93},[76,11893,11894],{"class":78,"line":1746},[76,11895,11896],{"class":82},"\u002F\u002F2.在堆区利用new开辟数组\n",[76,11898,11899,11901,11903],{"class":78,"line":1751},[76,11900,5436],{"class":89},[76,11902,5729],{"class":2035},[76,11904,2048],{"class":93},[76,11906,11907],{"class":78,"line":1765},[76,11908,1618],{"class":93},[76,11910,11911],{"class":78,"line":1770},[76,11912,11913],{"class":82},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[76,11915,11916,11918,11920,11922,11924,11926,11928,11930,11933],{"class":78,"line":1799},[76,11917,2057],{"class":89},[76,11919,6590],{"class":89},[76,11921,3952],{"class":93},[76,11923,11789],{"class":89},[76,11925,2454],{"class":89},[76,11927,1089],{"class":93},[76,11929,646],{"class":250},[76,11931,11932],{"class":93},"];",[76,11934,11935],{"class":82},"\u002F\u002F10代表数组有10个元素\n",[76,11937,11938,11940,11942,11944,11946,11948,11950,11952,11954,11956,11958,11960],{"class":78,"line":1804},[76,11939,3273],{"class":89},[76,11941,1730],{"class":93},[76,11943,205],{"class":89},[76,11945,3104],{"class":93},[76,11947,247],{"class":89},[76,11949,392],{"class":250},[76,11951,3111],{"class":93},[76,11953,1109],{"class":89},[76,11955,646],{"class":250},[76,11957,3111],{"class":93},[76,11959,2364],{"class":89},[76,11961,208],{"class":93},[76,11963,11964],{"class":78,"line":1821},[76,11965,2102],{"class":93},[76,11967,11968,11971,11973,11975,11977,11979,11981],{"class":78,"line":1826},[76,11969,11970],{"class":93},"        arr[i]",[76,11972,247],{"class":89},[76,11974,641],{"class":93},[76,11976,681],{"class":89},[76,11978,512],{"class":250},[76,11980,257],{"class":93},[76,11982,11983],{"class":82},"\u002F\u002F给10个元素赋值100～109\n",[76,11985,11986],{"class":78,"line":1831},[76,11987,2259],{"class":93},[76,11989,11990,11992,11994,11996,11998,12000,12002,12004,12006,12008,12010,12012],{"class":78,"line":1836},[76,11991,3273],{"class":89},[76,11993,1730],{"class":93},[76,11995,205],{"class":89},[76,11997,3104],{"class":93},[76,11999,247],{"class":89},[76,12001,392],{"class":250},[76,12003,3111],{"class":93},[76,12005,1109],{"class":89},[76,12007,646],{"class":250},[76,12009,3111],{"class":93},[76,12011,2364],{"class":89},[76,12013,208],{"class":93},[76,12015,12016],{"class":78,"line":1850},[76,12017,2102],{"class":93},[76,12019,12020,12022,12024,12026,12028],{"class":78,"line":1855},[76,12021,3523],{"class":93},[76,12023,1243],{"class":89},[76,12025,4426],{"class":93},[76,12027,1243],{"class":89},[76,12029,1265],{"class":93},[76,12031,12032],{"class":78,"line":2649},[76,12033,2259],{"class":93},[76,12035,12036],{"class":78,"line":2663},[76,12037,12038],{"class":82},"    \u002F\u002F释放堆区数组\n",[76,12040,12041],{"class":78,"line":2671},[76,12042,12043],{"class":82},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[76,12045,12046,12049],{"class":78,"line":2676},[76,12047,12048],{"class":89},"    delete[]",[76,12050,12051],{"class":93}," arr;\n",[76,12053,12054],{"class":78,"line":2682},[76,12055,1637],{"class":93},[76,12057,12058],{"class":78,"line":2688},[76,12059,2472],{"emptyLinePlaceholder":125},[76,12061,12062,12064,12066],{"class":78,"line":2693},[76,12063,205],{"class":89},[76,12065,2045],{"class":2035},[76,12067,2048],{"class":93},[76,12069,12070],{"class":78,"line":8020},[76,12071,1618],{"class":93},[76,12073,12074,12076],{"class":78,"line":8044},[76,12075,5705],{"class":2035},[76,12077,5708],{"class":93},[76,12079,12080,12082],{"class":78,"line":8049},[76,12081,5774],{"class":2035},[76,12083,5708],{"class":93},[76,12085,12086],{"class":78,"line":8055},[76,12087,1637],{"class":93},[117,12089,12090],{},"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":58,"searchDepth":86,"depth":86,"links":12092},[12093],{"id":10761,"depth":86,"text":10762,"children":12094},[12095,12096],{"id":10793,"depth":97,"text":10794},{"id":11421,"depth":97,"text":11422},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10753,"description":58},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12103,"title":12104,"body":12105,"description":58,"extension":123,"meta":13586,"navigation":125,"path":13587,"seo":13588,"stem":13589,"__hash__":13590},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12106,"toc":13578},[12107,12110,12114,12117,12120,12289,12293,12298,12315,12320,12472,12476,12479,12482,12876,12880,12883,12888,12891,13203,13207,13213,13373,13375,13383,13387,13390,13397,13575],[10,12108,12104],{"id":12109},"_6引用",[140,12111,12113],{"id":12112},"_61引用基本用法","6.1引用基本用法",[14,12115,12116],{},"引用的本质：给变量起别名",[14,12118,12119],{},"语法：数据类型 &别名=原名",[67,12121,12123],{"className":190,"code":12122,"language":192,"meta":58,"style":58},"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",[73,12124,12125,12133,12137,12149,12161,12165,12184,12203,12207,12218,12222,12241,12259,12263,12273,12277,12285],{"__ignoreMap":58},[76,12126,12127,12129,12131],{"class":78,"line":79},[76,12128,205],{"class":89},[76,12130,2045],{"class":2035},[76,12132,10925],{"class":93},[76,12134,12135],{"class":78,"line":86},[76,12136,2472],{"emptyLinePlaceholder":125},[76,12138,12139,12141,12143,12145,12147],{"class":78,"line":97},[76,12140,2057],{"class":89},[76,12142,10941],{"class":93},[76,12144,247],{"class":89},[76,12146,2110],{"class":250},[76,12148,1363],{"class":93},[76,12150,12151,12153,12155,12157,12159],{"class":78,"line":103},[76,12152,2057],{"class":89},[76,12154,10656],{"class":89},[76,12156,11017],{"class":93},[76,12158,247],{"class":89},[76,12160,1505],{"class":93},[76,12162,12163],{"class":78,"line":1273},[76,12164,2472],{"emptyLinePlaceholder":125},[76,12166,12167,12169,12171,12174,12176,12178,12180,12182],{"class":78,"line":1287},[76,12168,6601],{"class":93},[76,12170,1243],{"class":89},[76,12172,12173],{"class":305}," \"a = \"",[76,12175,1517],{"class":89},[76,12177,10941],{"class":93},[76,12179,1243],{"class":89},[76,12181,11541],{"class":93},[76,12183,7340],{"class":82},[76,12185,12186,12188,12190,12193,12195,12197,12199,12201],{"class":78,"line":1293},[76,12187,6601],{"class":93},[76,12189,1243],{"class":89},[76,12191,12192],{"class":305}," \"b = \"",[76,12194,1517],{"class":89},[76,12196,10954],{"class":93},[76,12198,1243],{"class":89},[76,12200,11541],{"class":93},[76,12202,7340],{"class":82},[76,12204,12205],{"class":78,"line":1384},[76,12206,2472],{"emptyLinePlaceholder":125},[76,12208,12209,12212,12214,12216],{"class":78,"line":1390},[76,12210,12211],{"class":93},"    b ",[76,12213,247],{"class":89},[76,12215,5826],{"class":250},[76,12217,1363],{"class":93},[76,12219,12220],{"class":78,"line":1402},[76,12221,2472],{"emptyLinePlaceholder":125},[76,12223,12224,12226,12228,12230,12232,12234,12236,12238],{"class":78,"line":1684},[76,12225,6601],{"class":93},[76,12227,1243],{"class":89},[76,12229,12173],{"class":305},[76,12231,1517],{"class":89},[76,12233,10941],{"class":93},[76,12235,1243],{"class":89},[76,12237,11541],{"class":93},[76,12239,12240],{"class":82},"\u002F\u002F100\n",[76,12242,12243,12245,12247,12249,12251,12253,12255,12257],{"class":78,"line":1689},[76,12244,6601],{"class":93},[76,12246,1243],{"class":89},[76,12248,12192],{"class":305},[76,12250,1517],{"class":89},[76,12252,10954],{"class":93},[76,12254,1243],{"class":89},[76,12256,11541],{"class":93},[76,12258,12240],{"class":82},[76,12260,12261],{"class":78,"line":1695},[76,12262,2472],{"emptyLinePlaceholder":125},[76,12264,12265,12267,12269,12271],{"class":78,"line":1700},[76,12266,2375],{"class":2035},[76,12268,202],{"class":93},[76,12270,2380],{"class":305},[76,12272,2791],{"class":93},[76,12274,12275],{"class":78,"line":1714},[76,12276,2472],{"emptyLinePlaceholder":125},[76,12278,12279,12281,12283],{"class":78,"line":1719},[76,12280,4162],{"class":89},[76,12282,4165],{"class":250},[76,12284,1363],{"class":93},[76,12286,12287],{"class":78,"line":1725},[76,12288,1637],{"class":93},[140,12290,12292],{"id":12291},"_62引用的注意事项","6.2引用的注意事项",[152,12294,12295],{},[155,12296,12297],{},"引用必须要初始化",[67,12299,12301],{"className":190,"code":12300,"language":192,"meta":58,"style":58},"int &b;\u002F\u002F非常错误！\n",[73,12302,12303],{"__ignoreMap":58},[76,12304,12305,12307,12309,12312],{"class":78,"line":79},[76,12306,205],{"class":89},[76,12308,10656],{"class":89},[76,12310,12311],{"class":93},"b;",[76,12313,12314],{"class":82},"\u002F\u002F非常错误！\n",[152,12316,12317],{"start":86},[155,12318,12319],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[67,12321,12323],{"className":190,"code":12322,"language":192,"meta":58,"style":58},"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",[73,12324,12325,12333,12345,12357,12365,12381,12394,12412,12430,12450,12460,12468],{"__ignoreMap":58},[76,12326,12327,12329,12331],{"class":78,"line":79},[76,12328,205],{"class":89},[76,12330,2045],{"class":2035},[76,12332,10925],{"class":93},[76,12334,12335,12337,12339,12341,12343],{"class":78,"line":86},[76,12336,2057],{"class":89},[76,12338,10941],{"class":93},[76,12340,247],{"class":89},[76,12342,2110],{"class":250},[76,12344,1363],{"class":93},[76,12346,12347,12349,12351,12353,12355],{"class":78,"line":97},[76,12348,2057],{"class":89},[76,12350,10954],{"class":93},[76,12352,247],{"class":89},[76,12354,9022],{"class":250},[76,12356,1363],{"class":93},[76,12358,12359,12362],{"class":78,"line":103},[76,12360,12361],{"class":82},"    \u002F\u002Fint &c;",[76,12363,12364],{"class":82}," \u002F\u002F错误，引用必须初始化\n",[76,12366,12367,12369,12371,12373,12375,12378],{"class":78,"line":1273},[76,12368,2057],{"class":89},[76,12370,10656],{"class":89},[76,12372,3018],{"class":93},[76,12374,247],{"class":89},[76,12376,12377],{"class":93}," a;",[76,12379,12380],{"class":82}," \u002F\u002F一旦初始化后，就不可以更改\n",[76,12382,12383,12386,12388,12391],{"class":78,"line":1287},[76,12384,12385],{"class":93},"    c ",[76,12387,247],{"class":89},[76,12389,12390],{"class":93}," b;",[76,12392,12393],{"class":82}," \u002F\u002F这是赋值操作，不是更改引用\n",[76,12395,12396,12398,12400,12402,12404,12406,12408,12410],{"class":78,"line":1293},[76,12397,6601],{"class":93},[76,12399,1243],{"class":89},[76,12401,12173],{"class":305},[76,12403,1517],{"class":89},[76,12405,10941],{"class":93},[76,12407,1243],{"class":89},[76,12409,11541],{"class":93},[76,12411,7325],{"class":82},[76,12413,12414,12416,12418,12420,12422,12424,12426,12428],{"class":78,"line":1384},[76,12415,6601],{"class":93},[76,12417,1243],{"class":89},[76,12419,12192],{"class":305},[76,12421,1517],{"class":89},[76,12423,10954],{"class":93},[76,12425,1243],{"class":89},[76,12427,11541],{"class":93},[76,12429,7325],{"class":82},[76,12431,12432,12434,12436,12439,12441,12444,12446,12448],{"class":78,"line":1390},[76,12433,6601],{"class":93},[76,12435,1243],{"class":89},[76,12437,12438],{"class":305}," \"c = \"",[76,12440,1517],{"class":89},[76,12442,12443],{"class":93}," c ",[76,12445,1243],{"class":89},[76,12447,11541],{"class":93},[76,12449,7325],{"class":82},[76,12451,12452,12454,12456,12458],{"class":78,"line":1402},[76,12453,2375],{"class":2035},[76,12455,202],{"class":93},[76,12457,2380],{"class":305},[76,12459,2791],{"class":93},[76,12461,12462,12464,12466],{"class":78,"line":1684},[76,12463,4162],{"class":89},[76,12465,4165],{"class":250},[76,12467,1363],{"class":93},[76,12469,12470],{"class":78,"line":1689},[76,12471,1637],{"class":93},[140,12473,12475],{"id":12474},"_63引用做函数参数","6.3引用做函数参数",[14,12477,12478],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12480,12481],{},"优点：可以简化指针修改实参",[67,12483,12485],{"className":190,"code":12484,"language":192,"meta":58,"style":58},"\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",[73,12486,12487,12492,12515,12526,12536,12545,12549,12553,12558,12580,12592,12604,12614,12618,12622,12627,12649,12659,12667,12675,12679,12683,12691,12695,12707,12719,12723,12734,12760,12764,12784,12808,12812,12822,12846,12850,12860,12864,12872],{"__ignoreMap":58},[76,12488,12489],{"class":78,"line":79},[76,12490,12491],{"class":82},"\u002F\u002F1. 值传递\n",[76,12493,12494,12496,12499,12501,12503,12505,12508,12510,12512],{"class":78,"line":86},[76,12495,5436],{"class":89},[76,12497,12498],{"class":2035}," mySwap01",[76,12500,202],{"class":93},[76,12502,205],{"class":89},[76,12504,1471],{"class":5288},[76,12506,12507],{"class":93},", ",[76,12509,205],{"class":89},[76,12511,2905],{"class":5288},[76,12513,12514],{"class":93},") {\n",[76,12516,12517,12519,12522,12524],{"class":78,"line":97},[76,12518,2057],{"class":89},[76,12520,12521],{"class":93}," temp ",[76,12523,247],{"class":89},[76,12525,1505],{"class":93},[76,12527,12528,12531,12533],{"class":78,"line":103},[76,12529,12530],{"class":93},"    a ",[76,12532,247],{"class":89},[76,12534,12535],{"class":93}," b;\n",[76,12537,12538,12540,12542],{"class":78,"line":1273},[76,12539,12211],{"class":93},[76,12541,247],{"class":89},[76,12543,12544],{"class":93}," temp;\n",[76,12546,12547],{"class":78,"line":1287},[76,12548,1637],{"class":93},[76,12550,12551],{"class":78,"line":1293},[76,12552,2472],{"emptyLinePlaceholder":125},[76,12554,12555],{"class":78,"line":1384},[76,12556,12557],{"class":82},"\u002F\u002F2. 地址传递\n",[76,12559,12560,12562,12565,12567,12570,12572,12574,12576,12578],{"class":78,"line":1390},[76,12561,5436],{"class":89},[76,12563,12564],{"class":2035}," mySwap02",[76,12566,202],{"class":93},[76,12568,12569],{"class":89},"int*",[76,12571,1471],{"class":5288},[76,12573,12507],{"class":93},[76,12575,12569],{"class":89},[76,12577,2905],{"class":5288},[76,12579,12514],{"class":93},[76,12581,12582,12584,12586,12588,12590],{"class":78,"line":1402},[76,12583,2057],{"class":89},[76,12585,12521],{"class":93},[76,12587,247],{"class":89},[76,12589,6590],{"class":89},[76,12591,6269],{"class":93},[76,12593,12594,12596,12598,12600,12602],{"class":78,"line":1684},[76,12595,6475],{"class":89},[76,12597,10991],{"class":93},[76,12599,247],{"class":89},[76,12601,6590],{"class":89},[76,12603,6141],{"class":93},[76,12605,12606,12608,12610,12612],{"class":78,"line":1689},[76,12607,6475],{"class":89},[76,12609,11017],{"class":93},[76,12611,247],{"class":89},[76,12613,12544],{"class":93},[76,12615,12616],{"class":78,"line":1695},[76,12617,1637],{"class":93},[76,12619,12620],{"class":78,"line":1700},[76,12621,2472],{"emptyLinePlaceholder":125},[76,12623,12624],{"class":78,"line":1714},[76,12625,12626],{"class":82},"\u002F\u002F3. 引用传递\n",[76,12628,12629,12631,12634,12636,12639,12641,12643,12645,12647],{"class":78,"line":1719},[76,12630,5436],{"class":89},[76,12632,12633],{"class":2035}," mySwap03",[76,12635,202],{"class":93},[76,12637,12638],{"class":89},"int&",[76,12640,1471],{"class":5288},[76,12642,12507],{"class":93},[76,12644,12638],{"class":89},[76,12646,2905],{"class":5288},[76,12648,12514],{"class":93},[76,12650,12651,12653,12655,12657],{"class":78,"line":1725},[76,12652,2057],{"class":89},[76,12654,12521],{"class":93},[76,12656,247],{"class":89},[76,12658,1505],{"class":93},[76,12660,12661,12663,12665],{"class":78,"line":1746},[76,12662,12530],{"class":93},[76,12664,247],{"class":89},[76,12666,12535],{"class":93},[76,12668,12669,12671,12673],{"class":78,"line":1751},[76,12670,12211],{"class":93},[76,12672,247],{"class":89},[76,12674,12544],{"class":93},[76,12676,12677],{"class":78,"line":1765},[76,12678,1637],{"class":93},[76,12680,12681],{"class":78,"line":1770},[76,12682,2472],{"emptyLinePlaceholder":125},[76,12684,12685,12687,12689],{"class":78,"line":1799},[76,12686,205],{"class":89},[76,12688,2045],{"class":2035},[76,12690,10925],{"class":93},[76,12692,12693],{"class":78,"line":1804},[76,12694,2472],{"emptyLinePlaceholder":125},[76,12696,12697,12699,12701,12703,12705],{"class":78,"line":1821},[76,12698,2057],{"class":89},[76,12700,10941],{"class":93},[76,12702,247],{"class":89},[76,12704,2110],{"class":250},[76,12706,1363],{"class":93},[76,12708,12709,12711,12713,12715,12717],{"class":78,"line":1826},[76,12710,2057],{"class":89},[76,12712,10954],{"class":93},[76,12714,247],{"class":89},[76,12716,9022],{"class":250},[76,12718,1363],{"class":93},[76,12720,12721],{"class":78,"line":1831},[76,12722,2472],{"emptyLinePlaceholder":125},[76,12724,12725,12728,12731],{"class":78,"line":1836},[76,12726,12727],{"class":2035},"    mySwap01",[76,12729,12730],{"class":93},"(a, b);",[76,12732,12733],{"class":82},"\u002F\u002F值传递，形参不会修饰实参\n",[76,12735,12736,12738,12740,12743,12745,12747,12749,12752,12754,12756,12758],{"class":78,"line":1850},[76,12737,6601],{"class":93},[76,12739,1243],{"class":89},[76,12741,12742],{"class":305}," \"a:\"",[76,12744,1517],{"class":89},[76,12746,10941],{"class":93},[76,12748,1243],{"class":89},[76,12750,12751],{"class":305}," \" b:\"",[76,12753,1517],{"class":89},[76,12755,10954],{"class":93},[76,12757,1243],{"class":89},[76,12759,8912],{"class":93},[76,12761,12762],{"class":78,"line":1855},[76,12763,2472],{"emptyLinePlaceholder":125},[76,12765,12766,12769,12771,12773,12776,12778,12781],{"class":78,"line":2649},[76,12767,12768],{"class":2035},"    mySwap02",[76,12770,202],{"class":93},[76,12772,553],{"class":89},[76,12774,12775],{"class":93},"a, ",[76,12777,553],{"class":89},[76,12779,12780],{"class":93},"b);",[76,12782,12783],{"class":82},"\u002F\u002F地址传递，形参会修饰实参\n",[76,12785,12786,12788,12790,12792,12794,12796,12798,12800,12802,12804,12806],{"class":78,"line":2663},[76,12787,6601],{"class":93},[76,12789,1243],{"class":89},[76,12791,12742],{"class":305},[76,12793,1517],{"class":89},[76,12795,10941],{"class":93},[76,12797,1243],{"class":89},[76,12799,12751],{"class":305},[76,12801,1517],{"class":89},[76,12803,10954],{"class":93},[76,12805,1243],{"class":89},[76,12807,8912],{"class":93},[76,12809,12810],{"class":78,"line":2671},[76,12811,2472],{"emptyLinePlaceholder":125},[76,12813,12814,12817,12819],{"class":78,"line":2676},[76,12815,12816],{"class":2035},"    mySwap03",[76,12818,12730],{"class":93},[76,12820,12821],{"class":82},"\u002F\u002F引用传递，形参会修饰实参\n",[76,12823,12824,12826,12828,12830,12832,12834,12836,12838,12840,12842,12844],{"class":78,"line":2682},[76,12825,6601],{"class":93},[76,12827,1243],{"class":89},[76,12829,12742],{"class":305},[76,12831,1517],{"class":89},[76,12833,10941],{"class":93},[76,12835,1243],{"class":89},[76,12837,12751],{"class":305},[76,12839,1517],{"class":89},[76,12841,10954],{"class":93},[76,12843,1243],{"class":89},[76,12845,8912],{"class":93},[76,12847,12848],{"class":78,"line":2688},[76,12849,2472],{"emptyLinePlaceholder":125},[76,12851,12852,12854,12856,12858],{"class":78,"line":2693},[76,12853,2375],{"class":2035},[76,12855,202],{"class":93},[76,12857,2380],{"class":305},[76,12859,2791],{"class":93},[76,12861,12862],{"class":78,"line":8020},[76,12863,2472],{"emptyLinePlaceholder":125},[76,12865,12866,12868,12870],{"class":78,"line":8044},[76,12867,4162],{"class":89},[76,12869,4165],{"class":250},[76,12871,1363],{"class":93},[76,12873,12874],{"class":78,"line":8049},[76,12875,1637],{"class":93},[140,12877,12879],{"id":12878},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12881,12882],{},"作用：引用是可以作为函数的返回值存在的",[14,12884,9097,12885],{},[350,12886,12887],{},"不要返回局部变量引用",[14,12889,12890],{},"用法：函数调用作为左值",[67,12892,12894],{"className":10013,"code":12893,"language":10015,"meta":58,"style":58},"\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",[73,12895,12896,12901,12909,12924,12930,12934,12938,12943,12951,12968,12974,12978,12982,12990,12994,12999,13013,13033,13052,13056,13061,13074,13094,13112,13116,13132,13136,13155,13173,13177,13187,13191,13199],{"__ignoreMap":58},[76,12897,12898],{"class":78,"line":79},[76,12899,12900],{"class":82},"\u002F\u002F返回局部变量引用\n",[76,12902,12903,12905,12907],{"class":78,"line":86},[76,12904,12638],{"class":89},[76,12906,5660],{"class":2035},[76,12908,10925],{"class":93},[76,12910,12911,12913,12915,12917,12919,12921],{"class":78,"line":97},[76,12912,2057],{"class":89},[76,12914,10941],{"class":93},[76,12916,247],{"class":89},[76,12918,2110],{"class":250},[76,12920,257],{"class":93},[76,12922,12923],{"class":82}," \u002F\u002F局部变量\n",[76,12925,12926,12928],{"class":78,"line":103},[76,12927,4162],{"class":89},[76,12929,1505],{"class":93},[76,12931,12932],{"class":78,"line":1273},[76,12933,1637],{"class":93},[76,12935,12936],{"class":78,"line":1287},[76,12937,2472],{"emptyLinePlaceholder":125},[76,12939,12940],{"class":78,"line":1293},[76,12941,12942],{"class":82},"\u002F\u002F返回静态变量引用\n",[76,12944,12945,12947,12949],{"class":78,"line":1384},[76,12946,12638],{"class":89},[76,12948,5729],{"class":2035},[76,12950,10925],{"class":93},[76,12952,12953,12955,12957,12959,12961,12963,12965],{"class":78,"line":1390},[76,12954,11092],{"class":89},[76,12956,2454],{"class":89},[76,12958,10941],{"class":93},[76,12960,247],{"class":89},[76,12962,9022],{"class":250},[76,12964,257],{"class":93},[76,12966,12967],{"class":82},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[76,12969,12970,12972],{"class":78,"line":1402},[76,12971,4162],{"class":89},[76,12973,1505],{"class":93},[76,12975,12976],{"class":78,"line":1684},[76,12977,1637],{"class":93},[76,12979,12980],{"class":78,"line":1689},[76,12981,2472],{"emptyLinePlaceholder":125},[76,12983,12984,12986,12988],{"class":78,"line":1695},[76,12985,205],{"class":89},[76,12987,2045],{"class":2035},[76,12989,10925],{"class":93},[76,12991,12992],{"class":78,"line":1700},[76,12993,2472],{"emptyLinePlaceholder":125},[76,12995,12996],{"class":78,"line":1714},[76,12997,12998],{"class":82},"    \u002F\u002F不能返回局部变量的引用\n",[76,13000,13001,13004,13007,13009,13011],{"class":78,"line":1719},[76,13002,13003],{"class":89},"    int&",[76,13005,13006],{"class":93}," ref ",[76,13008,247],{"class":89},[76,13010,5660],{"class":2035},[76,13012,5708],{"class":93},[76,13014,13015,13017,13019,13022,13024,13026,13028,13030],{"class":78,"line":1725},[76,13016,6601],{"class":93},[76,13018,1243],{"class":89},[76,13020,13021],{"class":305}," \"ref = \"",[76,13023,1517],{"class":89},[76,13025,13006],{"class":93},[76,13027,1243],{"class":89},[76,13029,11541],{"class":93},[76,13031,13032],{"class":82},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[76,13034,13035,13037,13039,13041,13043,13045,13047,13049],{"class":78,"line":1746},[76,13036,6601],{"class":93},[76,13038,1243],{"class":89},[76,13040,13021],{"class":305},[76,13042,1517],{"class":89},[76,13044,13006],{"class":93},[76,13046,1243],{"class":89},[76,13048,11541],{"class":93},[76,13050,13051],{"class":82},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[76,13053,13054],{"class":78,"line":1751},[76,13055,2472],{"emptyLinePlaceholder":125},[76,13057,13058],{"class":78,"line":1765},[76,13059,13060],{"class":82},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[76,13062,13063,13065,13068,13070,13072],{"class":78,"line":1770},[76,13064,13003],{"class":89},[76,13066,13067],{"class":93}," ref2 ",[76,13069,247],{"class":89},[76,13071,5729],{"class":2035},[76,13073,5708],{"class":93},[76,13075,13076,13078,13080,13083,13085,13087,13089,13091],{"class":78,"line":1799},[76,13077,6601],{"class":93},[76,13079,1243],{"class":89},[76,13081,13082],{"class":305}," \"ref2 = \"",[76,13084,1517],{"class":89},[76,13086,13067],{"class":93},[76,13088,1243],{"class":89},[76,13090,11541],{"class":93},[76,13092,13093],{"class":82}," \u002F\u002F20\n",[76,13095,13096,13098,13100,13102,13104,13106,13108,13110],{"class":78,"line":1804},[76,13097,6601],{"class":93},[76,13099,1243],{"class":89},[76,13101,13082],{"class":305},[76,13103,1517],{"class":89},[76,13105,13067],{"class":93},[76,13107,1243],{"class":89},[76,13109,11541],{"class":93},[76,13111,13093],{"class":82},[76,13113,13114],{"class":78,"line":1821},[76,13115,2472],{"emptyLinePlaceholder":125},[76,13117,13118,13120,13123,13125,13127,13129],{"class":78,"line":1826},[76,13119,5774],{"class":2035},[76,13121,13122],{"class":93},"() ",[76,13124,247],{"class":89},[76,13126,3071],{"class":250},[76,13128,257],{"class":93},[76,13130,13131],{"class":82},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[76,13133,13134],{"class":78,"line":1831},[76,13135,2472],{"emptyLinePlaceholder":125},[76,13137,13138,13140,13142,13144,13146,13148,13150,13152],{"class":78,"line":1836},[76,13139,6601],{"class":93},[76,13141,1243],{"class":89},[76,13143,13082],{"class":305},[76,13145,1517],{"class":89},[76,13147,13067],{"class":93},[76,13149,1243],{"class":89},[76,13151,11541],{"class":93},[76,13153,13154],{"class":82}," \u002F\u002F1000\n",[76,13156,13157,13159,13161,13163,13165,13167,13169,13171],{"class":78,"line":1850},[76,13158,6601],{"class":93},[76,13160,1243],{"class":89},[76,13162,13082],{"class":305},[76,13164,1517],{"class":89},[76,13166,13067],{"class":93},[76,13168,1243],{"class":89},[76,13170,11541],{"class":93},[76,13172,13154],{"class":82},[76,13174,13175],{"class":78,"line":1855},[76,13176,2472],{"emptyLinePlaceholder":125},[76,13178,13179,13181,13183,13185],{"class":78,"line":2649},[76,13180,2375],{"class":2035},[76,13182,202],{"class":93},[76,13184,2380],{"class":305},[76,13186,2791],{"class":93},[76,13188,13189],{"class":78,"line":2663},[76,13190,2472],{"emptyLinePlaceholder":125},[76,13192,13193,13195,13197],{"class":78,"line":2671},[76,13194,4162],{"class":89},[76,13196,4165],{"class":250},[76,13198,1363],{"class":93},[76,13200,13201],{"class":78,"line":2676},[76,13202,1637],{"class":93},[140,13204,13206],{"id":13205},"_65引用的本质","6.5引用的本质",[14,13208,13209,13210],{},"本质：",[350,13211,13212],{},"引用的本质在c++内部实现是一个指针常量.",[67,13214,13216],{"className":190,"code":13215,"language":192,"meta":58,"style":58},"\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",[73,13217,13218,13223,13239,13253,13257,13266,13278,13283,13288,13299,13312,13316,13332,13349,13353,13361,13369],{"__ignoreMap":58},[76,13219,13220],{"class":78,"line":79},[76,13221,13222],{"class":82},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[76,13224,13225,13227,13229,13231,13233,13236],{"class":78,"line":86},[76,13226,5436],{"class":89},[76,13228,11457],{"class":2035},[76,13230,202],{"class":93},[76,13232,12638],{"class":89},[76,13234,13235],{"class":5288}," ref",[76,13237,13238],{"class":93},"){\n",[76,13240,13241,13244,13246,13248,13250],{"class":78,"line":97},[76,13242,13243],{"class":93},"    ref ",[76,13245,247],{"class":89},[76,13247,5826],{"class":250},[76,13249,257],{"class":93},[76,13251,13252],{"class":82}," \u002F\u002F ref是引用，转换为*ref = 100\n",[76,13254,13255],{"class":78,"line":103},[76,13256,1637],{"class":93},[76,13258,13259,13261,13263],{"class":78,"line":1273},[76,13260,205],{"class":89},[76,13262,2045],{"class":2035},[76,13264,13265],{"class":93},"(){\n",[76,13267,13268,13270,13272,13274,13276],{"class":78,"line":1287},[76,13269,2057],{"class":89},[76,13271,10941],{"class":93},[76,13273,247],{"class":89},[76,13275,2110],{"class":250},[76,13277,1363],{"class":93},[76,13279,13280],{"class":78,"line":1293},[76,13281,13282],{"class":93},"    \n",[76,13284,13285],{"class":78,"line":1384},[76,13286,13287],{"class":82},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[76,13289,13290,13292,13294,13296],{"class":78,"line":1390},[76,13291,13003],{"class":89},[76,13293,13006],{"class":93},[76,13295,247],{"class":89},[76,13297,13298],{"class":93}," a; \n",[76,13300,13301,13303,13305,13307,13309],{"class":78,"line":1402},[76,13302,13243],{"class":93},[76,13304,247],{"class":89},[76,13306,9022],{"class":250},[76,13308,257],{"class":93},[76,13310,13311],{"class":82}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[76,13313,13314],{"class":78,"line":1684},[76,13315,13282],{"class":93},[76,13317,13318,13320,13322,13324,13326,13328,13330],{"class":78,"line":1689},[76,13319,6601],{"class":93},[76,13321,1243],{"class":89},[76,13323,12742],{"class":305},[76,13325,1517],{"class":89},[76,13327,10941],{"class":93},[76,13329,1243],{"class":89},[76,13331,8912],{"class":93},[76,13333,13334,13336,13338,13341,13343,13345,13347],{"class":78,"line":1695},[76,13335,6601],{"class":93},[76,13337,1243],{"class":89},[76,13339,13340],{"class":305}," \"ref:\"",[76,13342,1517],{"class":89},[76,13344,13006],{"class":93},[76,13346,1243],{"class":89},[76,13348,8912],{"class":93},[76,13350,13351],{"class":78,"line":1700},[76,13352,13282],{"class":93},[76,13354,13355,13358],{"class":78,"line":1714},[76,13356,13357],{"class":2035},"    func",[76,13359,13360],{"class":93},"(a);\n",[76,13362,13363,13365,13367],{"class":78,"line":1719},[76,13364,4162],{"class":89},[76,13366,4165],{"class":250},[76,13368,1363],{"class":93},[76,13370,13371],{"class":78,"line":1725},[76,13372,1637],{"class":93},[14,13374,11404],{},[152,13376,13377,13380],{},[155,13378,13379],{},"引用的本质，就是一个指针常量",[155,13381,13382],{},"引用一旦初始化，就不可以发生改变",[140,13384,13386],{"id":13385},"_66常量引用","6.6常量引用",[14,13388,13389],{},"作用：常量引用主要用来修饰形参",[14,13391,13392,13393,13396],{},"在函数形参列表中，可以加",[350,13394,13395],{},"const修饰形参","，防止形参改变实参",[67,13398,13400],{"className":190,"code":13399,"language":192,"meta":58,"style":58},"\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",[73,13401,13402,13407,13412,13431,13436,13449,13453,13457,13465,13469,13474,13479,13493,13497,13505,13517,13521,13526,13538,13545,13549,13559,13563,13571],{"__ignoreMap":58},[76,13403,13404],{"class":78,"line":79},[76,13405,13406],{"class":82},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[76,13408,13409],{"class":78,"line":86},[76,13410,13411],{"class":82},"\u002F\u002F加上const就不能修改实参的\n",[76,13413,13414,13416,13419,13421,13423,13426,13429],{"class":78,"line":97},[76,13415,5436],{"class":89},[76,13417,13418],{"class":2035}," showValue",[76,13420,202],{"class":93},[76,13422,6864],{"class":89},[76,13424,13425],{"class":89}," int&",[76,13427,13428],{"class":5288}," v",[76,13430,12514],{"class":93},[76,13432,13433],{"class":78,"line":103},[76,13434,13435],{"class":82},"    \u002F\u002Fv += 100;\n",[76,13437,13438,13440,13442,13445,13447],{"class":78,"line":1273},[76,13439,6601],{"class":93},[76,13441,1243],{"class":89},[76,13443,13444],{"class":93}," v ",[76,13446,1243],{"class":89},[76,13448,8912],{"class":93},[76,13450,13451],{"class":78,"line":1287},[76,13452,1637],{"class":93},[76,13454,13455],{"class":78,"line":1293},[76,13456,2472],{"emptyLinePlaceholder":125},[76,13458,13459,13461,13463],{"class":78,"line":1384},[76,13460,205],{"class":89},[76,13462,2045],{"class":2035},[76,13464,10925],{"class":93},[76,13466,13467],{"class":78,"line":1390},[76,13468,2472],{"emptyLinePlaceholder":125},[76,13470,13471],{"class":78,"line":1402},[76,13472,13473],{"class":82},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[76,13475,13476],{"class":78,"line":1684},[76,13477,13478],{"class":82},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[76,13480,13481,13483,13485,13487,13489,13491],{"class":78,"line":1689},[76,13482,11293],{"class":89},[76,13484,13425],{"class":89},[76,13486,13006],{"class":93},[76,13488,247],{"class":89},[76,13490,2110],{"class":250},[76,13492,1363],{"class":93},[76,13494,13495],{"class":78,"line":1695},[76,13496,2472],{"emptyLinePlaceholder":125},[76,13498,13499,13502],{"class":78,"line":1700},[76,13500,13501],{"class":82},"    \u002F\u002Fref = 100;",[76,13503,13504],{"class":82},"  \u002F\u002F加入const后不可以修改变量\n",[76,13506,13507,13509,13511,13513,13515],{"class":78,"line":1714},[76,13508,6601],{"class":93},[76,13510,1243],{"class":89},[76,13512,13006],{"class":93},[76,13514,1243],{"class":89},[76,13516,8912],{"class":93},[76,13518,13519],{"class":78,"line":1719},[76,13520,2472],{"emptyLinePlaceholder":125},[76,13522,13523],{"class":78,"line":1725},[76,13524,13525],{"class":82},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[76,13527,13528,13530,13532,13534,13536],{"class":78,"line":1746},[76,13529,2057],{"class":89},[76,13531,10941],{"class":93},[76,13533,247],{"class":89},[76,13535,2110],{"class":250},[76,13537,1363],{"class":93},[76,13539,13540,13543],{"class":78,"line":1751},[76,13541,13542],{"class":2035},"    showValue",[76,13544,13360],{"class":93},[76,13546,13547],{"class":78,"line":1765},[76,13548,2472],{"emptyLinePlaceholder":125},[76,13550,13551,13553,13555,13557],{"class":78,"line":1770},[76,13552,2375],{"class":2035},[76,13554,202],{"class":93},[76,13556,2380],{"class":305},[76,13558,2791],{"class":93},[76,13560,13561],{"class":78,"line":1799},[76,13562,2472],{"emptyLinePlaceholder":125},[76,13564,13565,13567,13569],{"class":78,"line":1804},[76,13566,4162],{"class":89},[76,13568,4165],{"class":250},[76,13570,1363],{"class":93},[76,13572,13573],{"class":78,"line":1821},[76,13574,1637],{"class":93},[117,13576,13577],{},"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":58,"searchDepth":86,"depth":86,"links":13579},[13580,13581,13582,13583,13584,13585],{"id":12112,"depth":86,"text":12113},{"id":12291,"depth":86,"text":12292},{"id":12474,"depth":86,"text":12475},{"id":12878,"depth":86,"text":12879},{"id":13205,"depth":86,"text":13206},{"id":13385,"depth":86,"text":13386},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12104,"description":58},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13592,"title":13593,"body":13594,"description":58,"extension":123,"meta":14675,"navigation":125,"path":14676,"seo":14677,"stem":14678,"__hash__":14679},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13595,"toc":14667},[13596,13599,13603,13606,13611,13843,13845,13856,13860,13863,13871,13975,13978,13982,13985,13989,13992,13997,14019,14025,14352,14355,14359,14367,14664],[10,13597,13593],{"id":13598},"_7函数高级部分",[140,13600,13602],{"id":13601},"_71函数默认参数","7.1函数默认参数",[14,13604,13605],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13607,5253,13608],{},[73,13609,13610],{}," 返回值类型  函数名 （参数= 默认值）{}",[67,13612,13614],{"className":190,"code":13613,"language":192,"meta":58,"style":58},"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",[73,13615,13616,13651,13666,13670,13674,13679,13684,13713,13733,13743,13747,13751,13759,13763,13791,13813,13817,13827,13831,13839],{"__ignoreMap":58},[76,13617,13618,13620,13622,13624,13626,13628,13630,13632,13634,13637,13639,13641,13643,13645,13647,13649],{"class":78,"line":79},[76,13619,205],{"class":89},[76,13621,11457],{"class":2035},[76,13623,202],{"class":93},[76,13625,205],{"class":89},[76,13627,1471],{"class":5288},[76,13629,12507],{"class":93},[76,13631,205],{"class":89},[76,13633,2905],{"class":5288},[76,13635,13636],{"class":89}," =",[76,13638,2110],{"class":250},[76,13640,12507],{"class":93},[76,13642,205],{"class":89},[76,13644,2921],{"class":5288},[76,13646,13636],{"class":89},[76,13648,2110],{"class":250},[76,13650,12514],{"class":93},[76,13652,13653,13655,13657,13659,13661,13663],{"class":78,"line":86},[76,13654,4162],{"class":89},[76,13656,10941],{"class":93},[76,13658,681],{"class":89},[76,13660,10954],{"class":93},[76,13662,681],{"class":89},[76,13664,13665],{"class":93}," c;\n",[76,13667,13668],{"class":78,"line":97},[76,13669,1637],{"class":93},[76,13671,13672],{"class":78,"line":103},[76,13673,2472],{"emptyLinePlaceholder":125},[76,13675,13676],{"class":78,"line":1273},[76,13677,13678],{"class":82},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[76,13680,13681],{"class":78,"line":1287},[76,13682,13683],{"class":82},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[76,13685,13686,13688,13691,13693,13695,13697,13699,13701,13703,13705,13707,13709,13711],{"class":78,"line":1293},[76,13687,205],{"class":89},[76,13689,13690],{"class":2035}," func2",[76,13692,202],{"class":93},[76,13694,205],{"class":89},[76,13696,1471],{"class":5288},[76,13698,13636],{"class":89},[76,13700,2110],{"class":250},[76,13702,12507],{"class":93},[76,13704,205],{"class":89},[76,13706,2905],{"class":5288},[76,13708,13636],{"class":89},[76,13710,2110],{"class":250},[76,13712,2791],{"class":93},[76,13714,13715,13717,13719,13721,13723,13725,13727,13729,13731],{"class":78,"line":1384},[76,13716,205],{"class":89},[76,13718,13690],{"class":2035},[76,13720,202],{"class":93},[76,13722,205],{"class":89},[76,13724,1471],{"class":5288},[76,13726,12507],{"class":93},[76,13728,205],{"class":89},[76,13730,2905],{"class":5288},[76,13732,12514],{"class":93},[76,13734,13735,13737,13739,13741],{"class":78,"line":1390},[76,13736,4162],{"class":89},[76,13738,10941],{"class":93},[76,13740,681],{"class":89},[76,13742,12535],{"class":93},[76,13744,13745],{"class":78,"line":1402},[76,13746,1637],{"class":93},[76,13748,13749],{"class":78,"line":1684},[76,13750,2472],{"emptyLinePlaceholder":125},[76,13752,13753,13755,13757],{"class":78,"line":1689},[76,13754,205],{"class":89},[76,13756,2045],{"class":2035},[76,13758,10925],{"class":93},[76,13760,13761],{"class":78,"line":1695},[76,13762,2472],{"emptyLinePlaceholder":125},[76,13764,13765,13767,13769,13772,13774,13776,13778,13780,13782,13784,13787,13789],{"class":78,"line":1700},[76,13766,6601],{"class":93},[76,13768,1243],{"class":89},[76,13770,13771],{"class":305}," \"ret = \"",[76,13773,1517],{"class":89},[76,13775,11457],{"class":2035},[76,13777,202],{"class":93},[76,13779,899],{"class":250},[76,13781,12507],{"class":93},[76,13783,899],{"class":250},[76,13785,13786],{"class":93},") ",[76,13788,1243],{"class":89},[76,13790,8912],{"class":93},[76,13792,13793,13795,13797,13799,13801,13803,13805,13807,13809,13811],{"class":78,"line":1714},[76,13794,6601],{"class":93},[76,13796,1243],{"class":89},[76,13798,13771],{"class":305},[76,13800,1517],{"class":89},[76,13802,11457],{"class":2035},[76,13804,202],{"class":93},[76,13806,512],{"class":250},[76,13808,13786],{"class":93},[76,13810,1243],{"class":89},[76,13812,8912],{"class":93},[76,13814,13815],{"class":78,"line":1719},[76,13816,2472],{"emptyLinePlaceholder":125},[76,13818,13819,13821,13823,13825],{"class":78,"line":1725},[76,13820,2375],{"class":2035},[76,13822,202],{"class":93},[76,13824,2380],{"class":305},[76,13826,2791],{"class":93},[76,13828,13829],{"class":78,"line":1746},[76,13830,2472],{"emptyLinePlaceholder":125},[76,13832,13833,13835,13837],{"class":78,"line":1751},[76,13834,4162],{"class":89},[76,13836,4165],{"class":250},[76,13838,1363],{"class":93},[76,13840,13841],{"class":78,"line":1765},[76,13842,1637],{"class":93},[14,13844,11404],{},[152,13846,13847,13850,13853],{},[155,13848,13849],{},"我传就用我；没传就用你",[155,13851,13852],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[155,13854,13855],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[140,13857,13859],{"id":13858},"_72函数的占位参数","7.2函数的占位参数",[14,13861,13862],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13864,13865,13867,13868],{},[350,13866,5253],{}," ",[73,13869,13870],{},"返回值类型 函数名 (数据类型){}",[67,13872,13874],{"className":190,"code":13873,"language":192,"meta":58,"style":58},"\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",[73,13875,13876,13881,13899,13912,13916,13924,13928,13945,13949,13959,13963,13971],{"__ignoreMap":58},[76,13877,13878],{"class":78,"line":79},[76,13879,13880],{"class":82},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[76,13882,13883,13885,13887,13889,13891,13893,13895,13897],{"class":78,"line":86},[76,13884,5436],{"class":89},[76,13886,11457],{"class":2035},[76,13888,202],{"class":93},[76,13890,205],{"class":89},[76,13892,1471],{"class":5288},[76,13894,12507],{"class":93},[76,13896,205],{"class":89},[76,13898,12514],{"class":93},[76,13900,13901,13903,13905,13908,13910],{"class":78,"line":97},[76,13902,6601],{"class":93},[76,13904,1243],{"class":89},[76,13906,13907],{"class":305}," \"this is func\"",[76,13909,1517],{"class":89},[76,13911,8912],{"class":93},[76,13913,13914],{"class":78,"line":103},[76,13915,1637],{"class":93},[76,13917,13918,13920,13922],{"class":78,"line":1273},[76,13919,205],{"class":89},[76,13921,2045],{"class":2035},[76,13923,10925],{"class":93},[76,13925,13926],{"class":78,"line":1287},[76,13927,2472],{"emptyLinePlaceholder":125},[76,13929,13930,13932,13934,13936,13938,13940,13942],{"class":78,"line":1293},[76,13931,13357],{"class":2035},[76,13933,202],{"class":93},[76,13935,646],{"class":250},[76,13937,578],{"class":93},[76,13939,646],{"class":250},[76,13941,6038],{"class":93},[76,13943,13944],{"class":82}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[76,13946,13947],{"class":78,"line":1384},[76,13948,2472],{"emptyLinePlaceholder":125},[76,13950,13951,13953,13955,13957],{"class":78,"line":1390},[76,13952,2375],{"class":2035},[76,13954,202],{"class":93},[76,13956,2380],{"class":305},[76,13958,2791],{"class":93},[76,13960,13961],{"class":78,"line":1402},[76,13962,2472],{"emptyLinePlaceholder":125},[76,13964,13965,13967,13969],{"class":78,"line":1684},[76,13966,4162],{"class":89},[76,13968,4165],{"class":250},[76,13970,1363],{"class":93},[76,13972,13973],{"class":78,"line":1689},[76,13974,1637],{"class":93},[14,13976,13977],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[140,13979,13981],{"id":13980},"_73函数重载","7.3函数重载",[14,13983,13984],{},"意思是函数名是可以相同的",[169,13986,13988],{"id":13987},"_731基本语法","7.3.1基本语法",[14,13990,13991],{},"作用：函数名可以相同，提高复用性",[14,13993,13994],{},[350,13995,13996],{},"函数重载满足条件：",[1206,13998,13999,14002,14005],{},[155,14000,14001],{},"同一个作用域下",[155,14003,14004],{},"函数名称相同",[155,14006,14007,14008,14011,14012,14015,14016],{},"函数参数",[350,14009,14010],{},"类型不同","  或者 ",[350,14013,14014],{},"个数不同"," 或者 ",[350,14017,14018],{},"顺序不同",[14,14020,14021,14024],{},[350,14022,14023],{},"注意:","  函数的返回值不可以作为函数重载的条件",[67,14026,14028],{"className":10013,"code":14027,"language":10015,"meta":58,"style":58},"\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",[73,14029,14030,14035,14043,14047,14060,14064,14078,14082,14095,14099,14114,14118,14131,14135,14156,14160,14173,14177,14197,14201,14214,14218,14222,14227,14232,14237,14242,14247,14251,14255,14263,14267,14273,14283,14293,14307,14322,14326,14336,14340,14348],{"__ignoreMap":58},[76,14031,14032],{"class":78,"line":79},[76,14033,14034],{"class":82},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[76,14036,14037,14039,14041],{"class":78,"line":86},[76,14038,5436],{"class":89},[76,14040,11457],{"class":2035},[76,14042,2048],{"class":93},[76,14044,14045],{"class":78,"line":97},[76,14046,1618],{"class":93},[76,14048,14049,14051,14053,14056,14058],{"class":78,"line":103},[76,14050,6601],{"class":93},[76,14052,1243],{"class":89},[76,14054,14055],{"class":305}," \"func 的调用！\"",[76,14057,1517],{"class":89},[76,14059,8912],{"class":93},[76,14061,14062],{"class":78,"line":1273},[76,14063,1637],{"class":93},[76,14065,14066,14068,14070,14072,14074,14076],{"class":78,"line":1287},[76,14067,5436],{"class":89},[76,14069,11457],{"class":2035},[76,14071,202],{"class":93},[76,14073,205],{"class":89},[76,14075,1471],{"class":5288},[76,14077,208],{"class":93},[76,14079,14080],{"class":78,"line":1293},[76,14081,1618],{"class":93},[76,14083,14084,14086,14088,14091,14093],{"class":78,"line":1384},[76,14085,6601],{"class":93},[76,14087,1243],{"class":89},[76,14089,14090],{"class":305}," \"func (int a) 的调用！\"",[76,14092,1517],{"class":89},[76,14094,8912],{"class":93},[76,14096,14097],{"class":78,"line":1390},[76,14098,1637],{"class":93},[76,14100,14101,14103,14105,14107,14110,14112],{"class":78,"line":1402},[76,14102,5436],{"class":89},[76,14104,11457],{"class":2035},[76,14106,202],{"class":93},[76,14108,14109],{"class":89},"double",[76,14111,1471],{"class":5288},[76,14113,208],{"class":93},[76,14115,14116],{"class":78,"line":1684},[76,14117,1618],{"class":93},[76,14119,14120,14122,14124,14127,14129],{"class":78,"line":1689},[76,14121,6601],{"class":93},[76,14123,1243],{"class":89},[76,14125,14126],{"class":305}," \"func (double a)的调用！\"",[76,14128,1517],{"class":89},[76,14130,8912],{"class":93},[76,14132,14133],{"class":78,"line":1695},[76,14134,1637],{"class":93},[76,14136,14137,14139,14141,14143,14145,14147,14150,14152,14154],{"class":78,"line":1700},[76,14138,5436],{"class":89},[76,14140,11457],{"class":2035},[76,14142,202],{"class":93},[76,14144,205],{"class":89},[76,14146,1471],{"class":5288},[76,14148,14149],{"class":93}," ,",[76,14151,14109],{"class":89},[76,14153,2905],{"class":5288},[76,14155,208],{"class":93},[76,14157,14158],{"class":78,"line":1714},[76,14159,1618],{"class":93},[76,14161,14162,14164,14166,14169,14171],{"class":78,"line":1719},[76,14163,6601],{"class":93},[76,14165,1243],{"class":89},[76,14167,14168],{"class":305}," \"func (int a ,double b) 的调用！\"",[76,14170,1517],{"class":89},[76,14172,8912],{"class":93},[76,14174,14175],{"class":78,"line":1725},[76,14176,1637],{"class":93},[76,14178,14179,14181,14183,14185,14187,14189,14191,14193,14195],{"class":78,"line":1746},[76,14180,5436],{"class":89},[76,14182,11457],{"class":2035},[76,14184,202],{"class":93},[76,14186,14109],{"class":89},[76,14188,1471],{"class":5288},[76,14190,14149],{"class":93},[76,14192,205],{"class":89},[76,14194,2905],{"class":5288},[76,14196,208],{"class":93},[76,14198,14199],{"class":78,"line":1751},[76,14200,1618],{"class":93},[76,14202,14203,14205,14207,14210,14212],{"class":78,"line":1765},[76,14204,6601],{"class":93},[76,14206,1243],{"class":89},[76,14208,14209],{"class":305}," \"func (double a ,int b)的调用！\"",[76,14211,1517],{"class":89},[76,14213,8912],{"class":93},[76,14215,14216],{"class":78,"line":1770},[76,14217,1637],{"class":93},[76,14219,14220],{"class":78,"line":1799},[76,14221,2472],{"emptyLinePlaceholder":125},[76,14223,14224],{"class":78,"line":1804},[76,14225,14226],{"class":82},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[76,14228,14229],{"class":78,"line":1821},[76,14230,14231],{"class":82},"\u002F\u002Fint func(double a, int b)\n",[76,14233,14234],{"class":78,"line":1826},[76,14235,14236],{"class":82},"\u002F\u002F{\n",[76,14238,14239],{"class":78,"line":1831},[76,14240,14241],{"class":82},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[76,14243,14244],{"class":78,"line":1836},[76,14245,14246],{"class":82},"\u002F\u002F}\n",[76,14248,14249],{"class":78,"line":1850},[76,14250,2472],{"emptyLinePlaceholder":125},[76,14252,14253],{"class":78,"line":1855},[76,14254,2472],{"emptyLinePlaceholder":125},[76,14256,14257,14259,14261],{"class":78,"line":2649},[76,14258,205],{"class":89},[76,14260,2045],{"class":2035},[76,14262,10925],{"class":93},[76,14264,14265],{"class":78,"line":2663},[76,14266,2472],{"emptyLinePlaceholder":125},[76,14268,14269,14271],{"class":78,"line":2671},[76,14270,13357],{"class":2035},[76,14272,5708],{"class":93},[76,14274,14275,14277,14279,14281],{"class":78,"line":2676},[76,14276,13357],{"class":2035},[76,14278,202],{"class":93},[76,14280,646],{"class":250},[76,14282,2791],{"class":93},[76,14284,14285,14287,14289,14291],{"class":78,"line":2682},[76,14286,13357],{"class":2035},[76,14288,202],{"class":93},[76,14290,251],{"class":250},[76,14292,2791],{"class":93},[76,14294,14295,14297,14299,14301,14303,14305],{"class":78,"line":2688},[76,14296,13357],{"class":2035},[76,14298,202],{"class":93},[76,14300,646],{"class":250},[76,14302,578],{"class":93},[76,14304,251],{"class":250},[76,14306,2791],{"class":93},[76,14308,14309,14311,14313,14315,14318,14320],{"class":78,"line":2693},[76,14310,13357],{"class":2035},[76,14312,202],{"class":93},[76,14314,251],{"class":250},[76,14316,14317],{"class":93}," , ",[76,14319,646],{"class":250},[76,14321,2791],{"class":93},[76,14323,14324],{"class":78,"line":8020},[76,14325,13282],{"class":93},[76,14327,14328,14330,14332,14334],{"class":78,"line":8044},[76,14329,2375],{"class":2035},[76,14331,202],{"class":93},[76,14333,2380],{"class":305},[76,14335,2791],{"class":93},[76,14337,14338],{"class":78,"line":8049},[76,14339,2472],{"emptyLinePlaceholder":125},[76,14341,14342,14344,14346],{"class":78,"line":8055},[76,14343,4162],{"class":89},[76,14345,4165],{"class":250},[76,14347,1363],{"class":93},[76,14349,14350],{"class":78,"line":8082},[76,14351,1637],{"class":93},[14,14353,14354],{},"重点：函数返回值不可以作为函数重载条件！",[169,14356,14358],{"id":14357},"_732注意事项","7.3.2注意事项",[1206,14360,14361,14364],{},[155,14362,14363],{},"引用作为重载条件!!!",[155,14365,14366],{},"函数重载碰到函数默认参数",[67,14368,14370],{"className":190,"code":14369,"language":192,"meta":58,"style":58},"\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",[73,14371,14372,14377,14382,14386,14402,14406,14419,14423,14427,14445,14449,14462,14466,14470,14474,14479,14483,14507,14511,14524,14528,14532,14546,14550,14563,14567,14571,14579,14583,14595,14605,14618,14622,14626,14634,14638,14648,14652,14660],{"__ignoreMap":58},[76,14373,14374],{"class":78,"line":79},[76,14375,14376],{"class":82},"\u002F\u002F函数重载注意事项\n",[76,14378,14379],{"class":78,"line":86},[76,14380,14381],{"class":82},"\u002F\u002F1、引用作为重载条件\n",[76,14383,14384],{"class":78,"line":97},[76,14385,2472],{"emptyLinePlaceholder":125},[76,14387,14388,14390,14392,14394,14396,14398,14400],{"class":78,"line":103},[76,14389,5436],{"class":89},[76,14391,11457],{"class":2035},[76,14393,202],{"class":93},[76,14395,205],{"class":89},[76,14397,10656],{"class":89},[76,14399,439],{"class":5288},[76,14401,208],{"class":93},[76,14403,14404],{"class":78,"line":1273},[76,14405,1618],{"class":93},[76,14407,14408,14410,14412,14415,14417],{"class":78,"line":1287},[76,14409,6601],{"class":93},[76,14411,1243],{"class":89},[76,14413,14414],{"class":305}," \"func (int &a) 调用 \"",[76,14416,1517],{"class":89},[76,14418,8912],{"class":93},[76,14420,14421],{"class":78,"line":1293},[76,14422,1637],{"class":93},[76,14424,14425],{"class":78,"line":1384},[76,14426,2472],{"emptyLinePlaceholder":125},[76,14428,14429,14431,14433,14435,14437,14439,14441,14443],{"class":78,"line":1390},[76,14430,5436],{"class":89},[76,14432,11457],{"class":2035},[76,14434,202],{"class":93},[76,14436,6864],{"class":89},[76,14438,2454],{"class":89},[76,14440,10656],{"class":89},[76,14442,439],{"class":5288},[76,14444,208],{"class":93},[76,14446,14447],{"class":78,"line":1402},[76,14448,1618],{"class":93},[76,14450,14451,14453,14455,14458,14460],{"class":78,"line":1684},[76,14452,6601],{"class":93},[76,14454,1243],{"class":89},[76,14456,14457],{"class":305}," \"func (const int &a) 调用 \"",[76,14459,1517],{"class":89},[76,14461,8912],{"class":93},[76,14463,14464],{"class":78,"line":1689},[76,14465,1637],{"class":93},[76,14467,14468],{"class":78,"line":1695},[76,14469,2472],{"emptyLinePlaceholder":125},[76,14471,14472],{"class":78,"line":1700},[76,14473,2472],{"emptyLinePlaceholder":125},[76,14475,14476],{"class":78,"line":1714},[76,14477,14478],{"class":82},"\u002F\u002F2、函数重载碰到函数默认参数\n",[76,14480,14481],{"class":78,"line":1719},[76,14482,2472],{"emptyLinePlaceholder":125},[76,14484,14485,14487,14489,14491,14493,14495,14497,14499,14501,14503,14505],{"class":78,"line":1725},[76,14486,5436],{"class":89},[76,14488,13690],{"class":2035},[76,14490,202],{"class":93},[76,14492,205],{"class":89},[76,14494,1471],{"class":5288},[76,14496,12507],{"class":93},[76,14498,205],{"class":89},[76,14500,2905],{"class":5288},[76,14502,13636],{"class":89},[76,14504,2110],{"class":250},[76,14506,208],{"class":93},[76,14508,14509],{"class":78,"line":1746},[76,14510,1618],{"class":93},[76,14512,14513,14515,14517,14520,14522],{"class":78,"line":1751},[76,14514,6601],{"class":93},[76,14516,1243],{"class":89},[76,14518,14519],{"class":305}," \"func2(int a, int b = 10) 调用\"",[76,14521,1517],{"class":89},[76,14523,8912],{"class":93},[76,14525,14526],{"class":78,"line":1765},[76,14527,1637],{"class":93},[76,14529,14530],{"class":78,"line":1770},[76,14531,2472],{"emptyLinePlaceholder":125},[76,14533,14534,14536,14538,14540,14542,14544],{"class":78,"line":1799},[76,14535,5436],{"class":89},[76,14537,13690],{"class":2035},[76,14539,202],{"class":93},[76,14541,205],{"class":89},[76,14543,1471],{"class":5288},[76,14545,208],{"class":93},[76,14547,14548],{"class":78,"line":1804},[76,14549,1618],{"class":93},[76,14551,14552,14554,14556,14559,14561],{"class":78,"line":1821},[76,14553,6601],{"class":93},[76,14555,1243],{"class":89},[76,14557,14558],{"class":305}," \"func2(int a) 调用\"",[76,14560,1517],{"class":89},[76,14562,8912],{"class":93},[76,14564,14565],{"class":78,"line":1826},[76,14566,1637],{"class":93},[76,14568,14569],{"class":78,"line":1831},[76,14570,2472],{"emptyLinePlaceholder":125},[76,14572,14573,14575,14577],{"class":78,"line":1836},[76,14574,205],{"class":89},[76,14576,2045],{"class":2035},[76,14578,10925],{"class":93},[76,14580,14581],{"class":78,"line":1850},[76,14582,13282],{"class":93},[76,14584,14585,14587,14589,14591,14593],{"class":78,"line":1855},[76,14586,2057],{"class":89},[76,14588,10941],{"class":93},[76,14590,247],{"class":89},[76,14592,2110],{"class":250},[76,14594,1363],{"class":93},[76,14596,14597,14599,14602],{"class":78,"line":2649},[76,14598,13357],{"class":2035},[76,14600,14601],{"class":93},"(a);",[76,14603,14604],{"class":82}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[76,14606,14607,14609,14611,14613,14615],{"class":78,"line":2663},[76,14608,13357],{"class":2035},[76,14610,202],{"class":93},[76,14612,646],{"class":250},[76,14614,6038],{"class":93},[76,14616,14617],{"class":82},"\u002F\u002F调用有const   10是个常量\n",[76,14619,14620],{"class":78,"line":2671},[76,14621,2472],{"emptyLinePlaceholder":125},[76,14623,14624],{"class":78,"line":2676},[76,14625,2472],{"emptyLinePlaceholder":125},[76,14627,14628,14631],{"class":78,"line":2682},[76,14629,14630],{"class":82},"    \u002F\u002Ffunc2(10);",[76,14632,14633],{"class":82}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[76,14635,14636],{"class":78,"line":2688},[76,14637,2472],{"emptyLinePlaceholder":125},[76,14639,14640,14642,14644,14646],{"class":78,"line":2693},[76,14641,2375],{"class":2035},[76,14643,202],{"class":93},[76,14645,2380],{"class":305},[76,14647,2791],{"class":93},[76,14649,14650],{"class":78,"line":8020},[76,14651,2472],{"emptyLinePlaceholder":125},[76,14653,14654,14656,14658],{"class":78,"line":8044},[76,14655,4162],{"class":89},[76,14657,4165],{"class":250},[76,14659,1363],{"class":93},[76,14661,14662],{"class":78,"line":8049},[76,14663,1637],{"class":93},[117,14665,14666],{},"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":58,"searchDepth":86,"depth":86,"links":14668},[14669,14670,14671],{"id":13601,"depth":86,"text":13602},{"id":13858,"depth":86,"text":13859},{"id":13980,"depth":86,"text":13981,"children":14672},[14673,14674],{"id":13987,"depth":97,"text":13988},{"id":14357,"depth":97,"text":14358},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13593,"description":58},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14681,"title":14682,"body":14683,"description":23437,"extension":123,"meta":23438,"navigation":125,"path":23439,"seo":23440,"stem":23441,"__hash__":23442},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14684,"toc":23418},[14685,14688,14694,14701,14706,14709,14712,14715,14719,14723,14726,14729,14737,14742,14745,14752,14757,14916,14919,15172,15175,15178,15181,15186,15189,15192,15203,15208,15444,15448,15458,15461,15469,15616,15620,15623,15626,15630,16075,16079,16087,16095,17007,17014,17019,17647,17650,17653,17656,17775,17778,17865,17868,17994,17997,18091,18094,18447,18451,18459,18463,18470,18473,18476,18487,18493,18498,18510,18518,18538,18546,18563,18749,18752,18756,18759,18762,18765,18768,18771,18774,18777,19237,19243,19247,19250,19261,19848,19851,20340,20344,20347,20350,20353,20356,20359,20367,20763,20767,20770,20773,21220,21223,21226,21231,21234,21239,21242,21246,21249,21251,21257,21260,21566,21576,21617,21621,21624,21626,21659,21662,21969,21971,21986,21989,22012,22021,22027,22030,22034,22037,22040,22045,22056,22061,22069,22074,22204,22207,22210,22385,22390,22602,22606,22609,22723,22728,22967,22971,22975,22978,22981,22986,23091,23094,23097,23100,23104,23215,23218,23221,23226,23278,23281,23284,23289,23335,23338,23343,23411,23413,23416],[10,14686,14682],{"id":14687},"_8类和对象",[14,14689,14690,14691],{},"C++面向对象的三大特性为",[350,14692,14693],{},"封装、继承、多态",[14,14695,14696,14697,14700],{},"C++认为",[350,14698,14699],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14702,14703],{},[350,14704,14705],{},"例如：",[14,14707,14708],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14710,14711],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14713,14714],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[140,14716,14718],{"id":14717},"_81封装","8.1封装",[169,14720,14722],{"id":14721},"_811封装的意义","8.1.1封装的意义",[14,14724,14725],{},"封装是C++面向对象三大特性之一",[14,14727,14728],{},"封装的意义：",[1206,14730,14731,14734],{},[155,14732,14733],{},"将属性和行为作为一个整体，表现生活中的事物",[155,14735,14736],{},"将属性和行为加以权限控制",[14,14738,14739],{},[350,14740,14741],{},"封装意义一：",[14,14743,14744],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14746,14747,13867,14749],{},[350,14748,5253],{},[73,14750,14751],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[152,14753,14754],{},[155,14755,14756],{},"**示例1：**设计一个圆类，求圆的周长",[67,14758,14760],{"className":190,"code":14759,"language":192,"meta":58,"style":58},"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",[73,14761,14762,14770,14774,14779,14784,14789,14794,14801,14806,14816,14820,14838,14842,14846,14854,14858,14863,14868,14873,14878,14889,14912],{"__ignoreMap":58},[76,14763,14764,14767],{"class":78,"line":79},[76,14765,14766],{"class":89},"class",[76,14768,14769],{"class":2035}," Circle\n",[76,14771,14772],{"class":78,"line":86},[76,14773,1618],{"class":93},[76,14775,14776],{"class":78,"line":97},[76,14777,14778],{"class":82},"    \u002F\u002F访问权限\n",[76,14780,14781],{"class":78,"line":103},[76,14782,14783],{"class":82},"    \u002F\u002F公共权限\n",[76,14785,14786],{"class":78,"line":1273},[76,14787,14788],{"class":89},"public:\n",[76,14790,14791],{"class":78,"line":1287},[76,14792,14793],{"class":82},"    \u002F\u002F属性\n",[76,14795,14796,14798],{"class":78,"line":1293},[76,14797,2057],{"class":89},[76,14799,14800],{"class":93}," m_r;\n",[76,14802,14803],{"class":78,"line":1384},[76,14804,14805],{"class":82},"    \u002F\u002F行为\n",[76,14807,14808,14811,14814],{"class":78,"line":1390},[76,14809,14810],{"class":89},"    double",[76,14812,14813],{"class":2035}," calculateZC",[76,14815,2048],{"class":93},[76,14817,14818],{"class":78,"line":1402},[76,14819,2102],{"class":93},[76,14821,14822,14825,14828,14830,14833,14835],{"class":78,"line":1684},[76,14823,14824],{"class":89},"        return",[76,14826,14827],{"class":250}," 2",[76,14829,655],{"class":89},[76,14831,14832],{"class":93},"PI",[76,14834,655],{"class":89},[76,14836,14837],{"class":93},"m_r;\n",[76,14839,14840],{"class":78,"line":1689},[76,14841,2259],{"class":93},[76,14843,14844],{"class":78,"line":1695},[76,14845,4067],{"class":93},[76,14847,14848,14850,14852],{"class":78,"line":1700},[76,14849,205],{"class":89},[76,14851,2045],{"class":2035},[76,14853,2048],{"class":93},[76,14855,14856],{"class":78,"line":1714},[76,14857,1618],{"class":93},[76,14859,14860],{"class":78,"line":1719},[76,14861,14862],{"class":82},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[76,14864,14865],{"class":78,"line":1725},[76,14866,14867],{"class":82},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[76,14869,14870],{"class":78,"line":1746},[76,14871,14872],{"class":93},"    Circle c1;\n",[76,14874,14875],{"class":78,"line":1751},[76,14876,14877],{"class":82},"    \u002F\u002F给圆对象 的属性进行赋值\n",[76,14879,14880,14883,14885,14887],{"class":78,"line":1765},[76,14881,14882],{"class":93},"    c1.m_r",[76,14884,247],{"class":89},[76,14886,646],{"class":250},[76,14888,1363],{"class":93},[76,14890,14891,14893,14895,14898,14900,14903,14906,14908,14910],{"class":78,"line":1770},[76,14892,1623],{"class":93},[76,14894,1243],{"class":89},[76,14896,14897],{"class":305},"\"圆的周长\"",[76,14899,1243],{"class":89},[76,14901,14902],{"class":93},"c1.",[76,14904,14905],{"class":2035},"calculateZC",[76,14907,2499],{"class":93},[76,14909,1243],{"class":89},[76,14911,1265],{"class":93},[76,14913,14914],{"class":78,"line":1799},[76,14915,1637],{"class":93},[14,14917,14918],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[67,14920,14922],{"className":190,"code":14921,"language":192,"meta":58,"style":58},"#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",[73,14923,14924,14930,14940,14946,14952,14956,14960,14965,14972,14977,14995,14999,15009,15013,15018,15034,15038,15048,15052,15057,15065,15069,15101,15105,15109,15117,15121,15126,15131,15145,15159,15168],{"__ignoreMap":58},[76,14925,14926,14928],{"class":78,"line":79},[76,14927,2021],{"class":89},[76,14929,2024],{"class":305},[76,14931,14932,14934,14936,14938],{"class":78,"line":86},[76,14933,2029],{"class":89},[76,14935,2032],{"class":89},[76,14937,2036],{"class":2035},[76,14939,1363],{"class":93},[76,14941,14942,14944],{"class":78,"line":97},[76,14943,2021],{"class":89},[76,14945,7821],{"class":305},[76,14947,14948,14950],{"class":78,"line":103},[76,14949,14766],{"class":89},[76,14951,7834],{"class":2035},[76,14953,14954],{"class":78,"line":1273},[76,14955,1618],{"class":93},[76,14957,14958],{"class":78,"line":1287},[76,14959,14788],{"class":89},[76,14961,14962],{"class":78,"line":1293},[76,14963,14964],{"class":93},"    string m_name;\n",[76,14966,14967,14969],{"class":78,"line":1384},[76,14968,2057],{"class":89},[76,14970,14971],{"class":93}," m_id;\n",[76,14973,14974],{"class":78,"line":1390},[76,14975,14976],{"class":82},"    \u002F\u002F赋值姓名\n",[76,14978,14979,14982,14985,14987,14990,14993],{"class":78,"line":1402},[76,14980,14981],{"class":89},"    void",[76,14983,14984],{"class":2035}," setName",[76,14986,202],{"class":93},[76,14988,14989],{"class":2035},"string",[76,14991,14992],{"class":5288}," name",[76,14994,208],{"class":93},[76,14996,14997],{"class":78,"line":1684},[76,14998,2102],{"class":93},[76,15000,15001,15004,15006],{"class":78,"line":1689},[76,15002,15003],{"class":93},"        m_name",[76,15005,247],{"class":89},[76,15007,15008],{"class":93},"name;\n",[76,15010,15011],{"class":78,"line":1695},[76,15012,2259],{"class":93},[76,15014,15015],{"class":78,"line":1700},[76,15016,15017],{"class":82},"    \u002F\u002F赋值学号\n",[76,15019,15020,15022,15025,15027,15029,15032],{"class":78,"line":1714},[76,15021,14981],{"class":89},[76,15023,15024],{"class":2035}," setId",[76,15026,202],{"class":93},[76,15028,205],{"class":89},[76,15030,15031],{"class":5288}," id",[76,15033,208],{"class":93},[76,15035,15036],{"class":78,"line":1719},[76,15037,2102],{"class":93},[76,15039,15040,15043,15045],{"class":78,"line":1725},[76,15041,15042],{"class":93},"        m_id",[76,15044,247],{"class":89},[76,15046,15047],{"class":93},"id;\n",[76,15049,15050],{"class":78,"line":1746},[76,15051,2259],{"class":93},[76,15053,15054],{"class":78,"line":1751},[76,15055,15056],{"class":82},"    \u002F\u002F打印学生信息\n",[76,15058,15059,15061,15063],{"class":78,"line":1765},[76,15060,14981],{"class":89},[76,15062,9687],{"class":2035},[76,15064,2048],{"class":93},[76,15066,15067],{"class":78,"line":1770},[76,15068,2102],{"class":93},[76,15070,15071,15073,15075,15078,15080,15083,15085,15087,15089,15092,15094,15097,15099],{"class":78,"line":1799},[76,15072,3523],{"class":93},[76,15074,1243],{"class":89},[76,15076,15077],{"class":305},"\"姓名：\"",[76,15079,1243],{"class":89},[76,15081,15082],{"class":93},"m_name",[76,15084,1243],{"class":89},[76,15086,4431],{"class":305},[76,15088,1243],{"class":89},[76,15090,15091],{"class":305},"\"学号：\"",[76,15093,1243],{"class":89},[76,15095,15096],{"class":93},"m_id",[76,15098,1243],{"class":89},[76,15100,1265],{"class":93},[76,15102,15103],{"class":78,"line":1804},[76,15104,2259],{"class":93},[76,15106,15107],{"class":78,"line":1821},[76,15108,4067],{"class":93},[76,15110,15111,15113,15115],{"class":78,"line":1826},[76,15112,205],{"class":89},[76,15114,2045],{"class":2035},[76,15116,2048],{"class":93},[76,15118,15119],{"class":78,"line":1831},[76,15120,1618],{"class":93},[76,15122,15123],{"class":78,"line":1836},[76,15124,15125],{"class":82},"    \u002F\u002F实例化\n",[76,15127,15128],{"class":78,"line":1850},[76,15129,15130],{"class":93},"    Student s1;\n",[76,15132,15133,15136,15139,15141,15143],{"class":78,"line":1855},[76,15134,15135],{"class":93},"    s1.",[76,15137,15138],{"class":2035},"setName",[76,15140,202],{"class":93},[76,15142,7988],{"class":305},[76,15144,2791],{"class":93},[76,15146,15147,15149,15152,15154,15157],{"class":78,"line":2649},[76,15148,15135],{"class":93},[76,15150,15151],{"class":2035},"setId",[76,15153,202],{"class":93},[76,15155,15156],{"class":250},"123456",[76,15158,2791],{"class":93},[76,15160,15161,15163,15166],{"class":78,"line":2663},[76,15162,15135],{"class":93},[76,15164,15165],{"class":2035},"printInfo",[76,15167,5708],{"class":93},[76,15169,15170],{"class":78,"line":2671},[76,15171,1637],{"class":93},[14,15173,15174],{},"类中的属性和行为统称为成员",[14,15176,15177],{},"属性：成员属性(成员变量)",[14,15179,15180],{},"方法：成员函数(成员方法)",[14,15182,15183],{},[350,15184,15185],{},"封装意义二：",[14,15187,15188],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15190,15191],{},"访问权限有三种：",[152,15193,15194,15197,15200],{},[155,15195,15196],{},"public        公共权限",[155,15198,15199],{},"protected 保护权限",[155,15201,15202],{},"private      私有权限",[14,15204,15205],{},[350,15206,15207],{},"示例：",[67,15209,15211],{"className":10013,"code":15210,"language":10015,"meta":58,"style":58},"\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",[73,15212,15213,15218,15223,15228,15233,15237,15244,15248,15253,15257,15262,15266,15271,15276,15281,15285,15290,15295,15302,15306,15310,15318,15322,15333,15345,15357,15361,15365,15369,15377,15381,15386,15398,15406,15414,15418,15428,15432,15440],{"__ignoreMap":58},[76,15214,15215],{"class":78,"line":79},[76,15216,15217],{"class":82},"\u002F\u002F三种权限\n",[76,15219,15220],{"class":78,"line":86},[76,15221,15222],{"class":82},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[76,15224,15225],{"class":78,"line":97},[76,15226,15227],{"class":82},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[76,15229,15230],{"class":78,"line":103},[76,15231,15232],{"class":82},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[76,15234,15235],{"class":78,"line":1273},[76,15236,2472],{"emptyLinePlaceholder":125},[76,15238,15239,15241],{"class":78,"line":1287},[76,15240,14766],{"class":89},[76,15242,15243],{"class":2035}," Person\n",[76,15245,15246],{"class":78,"line":1293},[76,15247,1618],{"class":93},[76,15249,15250],{"class":78,"line":1384},[76,15251,15252],{"class":82},"    \u002F\u002F姓名  公共权限\n",[76,15254,15255],{"class":78,"line":1390},[76,15256,14788],{"class":89},[76,15258,15259],{"class":78,"line":1402},[76,15260,15261],{"class":93},"    string m_Name;\n",[76,15263,15264],{"class":78,"line":1684},[76,15265,2472],{"emptyLinePlaceholder":125},[76,15267,15268],{"class":78,"line":1689},[76,15269,15270],{"class":82},"    \u002F\u002F汽车  保护权限\n",[76,15272,15273],{"class":78,"line":1695},[76,15274,15275],{"class":89},"protected:\n",[76,15277,15278],{"class":78,"line":1700},[76,15279,15280],{"class":93},"    string m_Car;\n",[76,15282,15283],{"class":78,"line":1714},[76,15284,2472],{"emptyLinePlaceholder":125},[76,15286,15287],{"class":78,"line":1719},[76,15288,15289],{"class":82},"    \u002F\u002F银行卡密码  私有权限\n",[76,15291,15292],{"class":78,"line":1725},[76,15293,15294],{"class":89},"private:\n",[76,15296,15297,15299],{"class":78,"line":1746},[76,15298,2057],{"class":89},[76,15300,15301],{"class":93}," m_Password;\n",[76,15303,15304],{"class":78,"line":1751},[76,15305,2472],{"emptyLinePlaceholder":125},[76,15307,15308],{"class":78,"line":1765},[76,15309,14788],{"class":89},[76,15311,15312,15314,15316],{"class":78,"line":1770},[76,15313,14981],{"class":89},[76,15315,11457],{"class":2035},[76,15317,2048],{"class":93},[76,15319,15320],{"class":78,"line":1799},[76,15321,2102],{"class":93},[76,15323,15324,15327,15329,15331],{"class":78,"line":1804},[76,15325,15326],{"class":93},"        m_Name ",[76,15328,247],{"class":89},[76,15330,9010],{"class":305},[76,15332,1363],{"class":93},[76,15334,15335,15338,15340,15343],{"class":78,"line":1821},[76,15336,15337],{"class":93},"        m_Car ",[76,15339,247],{"class":89},[76,15341,15342],{"class":305}," \"拖拉机\"",[76,15344,1363],{"class":93},[76,15346,15347,15350,15352,15355],{"class":78,"line":1826},[76,15348,15349],{"class":93},"        m_Password ",[76,15351,247],{"class":89},[76,15353,15354],{"class":250}," 123456",[76,15356,1363],{"class":93},[76,15358,15359],{"class":78,"line":1831},[76,15360,2259],{"class":93},[76,15362,15363],{"class":78,"line":1836},[76,15364,4067],{"class":93},[76,15366,15367],{"class":78,"line":1850},[76,15368,2472],{"emptyLinePlaceholder":125},[76,15370,15371,15373,15375],{"class":78,"line":1855},[76,15372,205],{"class":89},[76,15374,2045],{"class":2035},[76,15376,10925],{"class":93},[76,15378,15379],{"class":78,"line":2649},[76,15380,2472],{"emptyLinePlaceholder":125},[76,15382,15383],{"class":78,"line":2663},[76,15384,15385],{"class":93},"    Person p;\n",[76,15387,15388,15391,15393,15396],{"class":78,"line":2671},[76,15389,15390],{"class":93},"    p.m_Name ",[76,15392,247],{"class":89},[76,15394,15395],{"class":305}," \"李四\"",[76,15397,1363],{"class":93},[76,15399,15400,15403],{"class":78,"line":2676},[76,15401,15402],{"class":82},"    \u002F\u002Fp.m_Car = \"奔驰\";",[76,15404,15405],{"class":82},"  \u002F\u002F保护权限类外访问不到\n",[76,15407,15408,15411],{"class":78,"line":2682},[76,15409,15410],{"class":82},"    \u002F\u002Fp.m_Password = 123;",[76,15412,15413],{"class":82}," \u002F\u002F私有权限类外访问不到\n",[76,15415,15416],{"class":78,"line":2688},[76,15417,2472],{"emptyLinePlaceholder":125},[76,15419,15420,15422,15424,15426],{"class":78,"line":2693},[76,15421,2375],{"class":2035},[76,15423,202],{"class":93},[76,15425,2380],{"class":305},[76,15427,2791],{"class":93},[76,15429,15430],{"class":78,"line":8020},[76,15431,2472],{"emptyLinePlaceholder":125},[76,15433,15434,15436,15438],{"class":78,"line":8044},[76,15435,4162],{"class":89},[76,15437,4165],{"class":250},[76,15439,1363],{"class":93},[76,15441,15442],{"class":78,"line":8049},[76,15443,1637],{"class":93},[169,15445,15447],{"id":15446},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15449,15450,15451,15454,15455],{},"在C++中 struct和class唯一的",[350,15452,15453],{},"区别","就在于 ",[350,15456,15457],{},"默认的访问权限不同",[14,15459,15460],{},"区别：",[1206,15462,15463,15466],{},[155,15464,15465],{},"struct 默认权限为公共",[155,15467,15468],{},"class   默认权限为私有",[67,15470,15472],{"className":10013,"code":15471,"language":10015,"meta":58,"style":58},"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",[73,15473,15474,15481,15485,15495,15499,15503,15510,15514,15524,15528,15532,15540,15544,15549,15563,15567,15572,15586,15590,15600,15604,15612],{"__ignoreMap":58},[76,15475,15476,15478],{"class":78,"line":79},[76,15477,14766],{"class":89},[76,15479,15480],{"class":2035}," C1\n",[76,15482,15483],{"class":78,"line":86},[76,15484,1618],{"class":93},[76,15486,15487,15489,15492],{"class":78,"line":97},[76,15488,2057],{"class":89},[76,15490,15491],{"class":93},"  m_A;",[76,15493,15494],{"class":82}," \u002F\u002F默认是私有权限\n",[76,15496,15497],{"class":78,"line":103},[76,15498,4067],{"class":93},[76,15500,15501],{"class":78,"line":1273},[76,15502,2472],{"emptyLinePlaceholder":125},[76,15504,15505,15507],{"class":78,"line":1287},[76,15506,7831],{"class":89},[76,15508,15509],{"class":2035}," C2\n",[76,15511,15512],{"class":78,"line":1293},[76,15513,1618],{"class":93},[76,15515,15516,15518,15521],{"class":78,"line":1384},[76,15517,2057],{"class":89},[76,15519,15520],{"class":93}," m_A;",[76,15522,15523],{"class":82},"  \u002F\u002F默认是公共权限\n",[76,15525,15526],{"class":78,"line":1390},[76,15527,4067],{"class":93},[76,15529,15530],{"class":78,"line":1402},[76,15531,2472],{"emptyLinePlaceholder":125},[76,15533,15534,15536,15538],{"class":78,"line":1684},[76,15535,205],{"class":89},[76,15537,2045],{"class":2035},[76,15539,10925],{"class":93},[76,15541,15542],{"class":78,"line":1689},[76,15543,2472],{"emptyLinePlaceholder":125},[76,15545,15546],{"class":78,"line":1695},[76,15547,15548],{"class":93},"    C1 c1;\n",[76,15550,15551,15554,15556,15558,15560],{"class":78,"line":1700},[76,15552,15553],{"class":93},"    c1.m_A ",[76,15555,247],{"class":89},[76,15557,2110],{"class":250},[76,15559,257],{"class":93},[76,15561,15562],{"class":82}," \u002F\u002F错误，访问权限是私有\n",[76,15564,15565],{"class":78,"line":1714},[76,15566,2472],{"emptyLinePlaceholder":125},[76,15568,15569],{"class":78,"line":1719},[76,15570,15571],{"class":93},"    C2 c2;\n",[76,15573,15574,15577,15579,15581,15583],{"class":78,"line":1725},[76,15575,15576],{"class":93},"    c2.m_A ",[76,15578,247],{"class":89},[76,15580,2110],{"class":250},[76,15582,257],{"class":93},[76,15584,15585],{"class":82}," \u002F\u002F正确，访问权限是公共\n",[76,15587,15588],{"class":78,"line":1746},[76,15589,2472],{"emptyLinePlaceholder":125},[76,15591,15592,15594,15596,15598],{"class":78,"line":1751},[76,15593,2375],{"class":2035},[76,15595,202],{"class":93},[76,15597,2380],{"class":305},[76,15599,2791],{"class":93},[76,15601,15602],{"class":78,"line":1765},[76,15603,2472],{"emptyLinePlaceholder":125},[76,15605,15606,15608,15610],{"class":78,"line":1770},[76,15607,4162],{"class":89},[76,15609,4165],{"class":250},[76,15611,1363],{"class":93},[76,15613,15614],{"class":78,"line":1799},[76,15615,1637],{"class":93},[169,15617,15619],{"id":15618},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15621,15622],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15624,15625],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15627,15628],{},[350,15629,15207],{},[67,15631,15633],{"className":10013,"code":15632,"language":10015,"meta":58,"style":58},"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",[73,15634,15635,15645,15649,15653,15658,15672,15681,15685,15695,15699,15706,15710,15714,15718,15723,15732,15739,15743,15748,15764,15787,15800,15807,15811,15820,15824,15828,15833,15849,15859,15863,15867,15871,15879,15883,15893,15897,15905,15909,15913,15921,15925,15929,15934,15947,15970,15974,15979,15992,16014,16018,16023,16037,16045,16049,16059,16063,16071],{"__ignoreMap":58},[76,15636,15637,15639,15642],{"class":78,"line":79},[76,15638,14766],{"class":89},[76,15640,15641],{"class":2035}," Person",[76,15643,15644],{"class":93}," {\n",[76,15646,15647],{"class":78,"line":86},[76,15648,14788],{"class":89},[76,15650,15651],{"class":78,"line":97},[76,15652,2472],{"emptyLinePlaceholder":125},[76,15654,15655],{"class":78,"line":103},[76,15656,15657],{"class":82},"    \u002F\u002F姓名设置可读可写\n",[76,15659,15660,15662,15664,15666,15668,15670],{"class":78,"line":1273},[76,15661,14981],{"class":89},[76,15663,14984],{"class":2035},[76,15665,202],{"class":93},[76,15667,14989],{"class":2035},[76,15669,14992],{"class":5288},[76,15671,12514],{"class":93},[76,15673,15674,15676,15678],{"class":78,"line":1287},[76,15675,15326],{"class":93},[76,15677,247],{"class":89},[76,15679,15680],{"class":93}," name;\n",[76,15682,15683],{"class":78,"line":1293},[76,15684,2259],{"class":93},[76,15686,15687,15690,15693],{"class":78,"line":1384},[76,15688,15689],{"class":2035},"    string",[76,15691,15692],{"class":2035}," getName",[76,15694,2048],{"class":93},[76,15696,15697],{"class":78,"line":1390},[76,15698,2102],{"class":93},[76,15700,15701,15703],{"class":78,"line":1402},[76,15702,14824],{"class":89},[76,15704,15705],{"class":93}," m_Name;\n",[76,15707,15708],{"class":78,"line":1684},[76,15709,2259],{"class":93},[76,15711,15712],{"class":78,"line":1689},[76,15713,2472],{"emptyLinePlaceholder":125},[76,15715,15716],{"class":78,"line":1695},[76,15717,2472],{"emptyLinePlaceholder":125},[76,15719,15720],{"class":78,"line":1700},[76,15721,15722],{"class":82},"    \u002F\u002F获取年龄 \n",[76,15724,15725,15727,15730],{"class":78,"line":1714},[76,15726,2057],{"class":89},[76,15728,15729],{"class":2035}," getAge",[76,15731,10925],{"class":93},[76,15733,15734,15736],{"class":78,"line":1719},[76,15735,14824],{"class":89},[76,15737,15738],{"class":93}," m_Age;\n",[76,15740,15741],{"class":78,"line":1725},[76,15742,2259],{"class":93},[76,15744,15745],{"class":78,"line":1746},[76,15746,15747],{"class":82},"    \u002F\u002F设置年龄\n",[76,15749,15750,15752,15755,15757,15759,15762],{"class":78,"line":1751},[76,15751,14981],{"class":89},[76,15753,15754],{"class":2035}," setAge",[76,15756,202],{"class":93},[76,15758,205],{"class":89},[76,15760,15761],{"class":5288}," age",[76,15763,12514],{"class":93},[76,15765,15766,15768,15771,15773,15775,15777,15780,15782,15785],{"class":78,"line":1765},[76,15767,2569],{"class":89},[76,15769,15770],{"class":93}," (age ",[76,15772,1109],{"class":89},[76,15774,4165],{"class":250},[76,15776,3327],{"class":89},[76,15778,15779],{"class":93}," age ",[76,15781,1159],{"class":89},[76,15783,15784],{"class":250}," 150",[76,15786,12514],{"class":93},[76,15788,15789,15791,15793,15796,15798],{"class":78,"line":1770},[76,15790,9791],{"class":93},[76,15792,1243],{"class":89},[76,15794,15795],{"class":305}," \"你个老妖精!\"",[76,15797,1517],{"class":89},[76,15799,8912],{"class":93},[76,15801,15802,15805],{"class":78,"line":1799},[76,15803,15804],{"class":89},"            return",[76,15806,1363],{"class":93},[76,15808,15809],{"class":78,"line":1804},[76,15810,2601],{"class":93},[76,15812,15813,15816,15818],{"class":78,"line":1821},[76,15814,15815],{"class":93},"        m_Age ",[76,15817,247],{"class":89},[76,15819,7869],{"class":93},[76,15821,15822],{"class":78,"line":1826},[76,15823,2259],{"class":93},[76,15825,15826],{"class":78,"line":1831},[76,15827,2472],{"emptyLinePlaceholder":125},[76,15829,15830],{"class":78,"line":1836},[76,15831,15832],{"class":82},"    \u002F\u002F情人设置为只写\n",[76,15834,15835,15837,15840,15842,15844,15847],{"class":78,"line":1850},[76,15836,14981],{"class":89},[76,15838,15839],{"class":2035}," setLover",[76,15841,202],{"class":93},[76,15843,14989],{"class":2035},[76,15845,15846],{"class":5288}," lover",[76,15848,12514],{"class":93},[76,15850,15851,15854,15856],{"class":78,"line":1855},[76,15852,15853],{"class":93},"        m_Lover ",[76,15855,247],{"class":89},[76,15857,15858],{"class":93}," lover;\n",[76,15860,15861],{"class":78,"line":2649},[76,15862,2259],{"class":93},[76,15864,15865],{"class":78,"line":2663},[76,15866,2472],{"emptyLinePlaceholder":125},[76,15868,15869],{"class":78,"line":2671},[76,15870,15294],{"class":89},[76,15872,15873,15876],{"class":78,"line":2676},[76,15874,15875],{"class":93},"    string m_Name;",[76,15877,15878],{"class":82}," \u002F\u002F可读可写  姓名\n",[76,15880,15881],{"class":78,"line":2682},[76,15882,13282],{"class":93},[76,15884,15885,15887,15890],{"class":78,"line":2688},[76,15886,2057],{"class":89},[76,15888,15889],{"class":93}," m_Age;",[76,15891,15892],{"class":82}," \u002F\u002F只读  年龄\n",[76,15894,15895],{"class":78,"line":2693},[76,15896,2472],{"emptyLinePlaceholder":125},[76,15898,15899,15902],{"class":78,"line":8020},[76,15900,15901],{"class":93},"    string m_Lover;",[76,15903,15904],{"class":82}," \u002F\u002F只写  情人\n",[76,15906,15907],{"class":78,"line":8044},[76,15908,4067],{"class":93},[76,15910,15911],{"class":78,"line":8049},[76,15912,2472],{"emptyLinePlaceholder":125},[76,15914,15915,15917,15919],{"class":78,"line":8055},[76,15916,205],{"class":89},[76,15918,2045],{"class":2035},[76,15920,10925],{"class":93},[76,15922,15923],{"class":78,"line":8082},[76,15924,2472],{"emptyLinePlaceholder":125},[76,15926,15927],{"class":78,"line":8087},[76,15928,15385],{"class":93},[76,15930,15931],{"class":78,"line":8093},[76,15932,15933],{"class":82},"    \u002F\u002F姓名设置\n",[76,15935,15936,15939,15941,15943,15945],{"class":78,"line":8105},[76,15937,15938],{"class":93},"    p.",[76,15940,15138],{"class":2035},[76,15942,202],{"class":93},[76,15944,7988],{"class":305},[76,15946,2791],{"class":93},[76,15948,15949,15951,15953,15956,15958,15961,15964,15966,15968],{"class":78,"line":8117},[76,15950,6601],{"class":93},[76,15952,1243],{"class":89},[76,15954,15955],{"class":305}," \"姓名： \"",[76,15957,1517],{"class":89},[76,15959,15960],{"class":93}," p.",[76,15962,15963],{"class":2035},"getName",[76,15965,13122],{"class":93},[76,15967,1243],{"class":89},[76,15969,8912],{"class":93},[76,15971,15972],{"class":78,"line":8129},[76,15973,2472],{"emptyLinePlaceholder":125},[76,15975,15976],{"class":78,"line":9788},[76,15977,15978],{"class":82},"    \u002F\u002F年龄设置\n",[76,15980,15981,15983,15986,15988,15990],{"class":78,"line":9813},[76,15982,15938],{"class":93},[76,15984,15985],{"class":2035},"setAge",[76,15987,202],{"class":93},[76,15989,855],{"class":250},[76,15991,2791],{"class":93},[76,15993,15994,15996,15998,16001,16003,16005,16008,16010,16012],{"class":78,"line":9836},[76,15995,6601],{"class":93},[76,15997,1243],{"class":89},[76,15999,16000],{"class":305}," \"年龄： \"",[76,16002,1517],{"class":89},[76,16004,15960],{"class":93},[76,16006,16007],{"class":2035},"getAge",[76,16009,13122],{"class":93},[76,16011,1243],{"class":89},[76,16013,8912],{"class":93},[76,16015,16016],{"class":78,"line":9860},[76,16017,2472],{"emptyLinePlaceholder":125},[76,16019,16020],{"class":78,"line":9865},[76,16021,16022],{"class":82},"    \u002F\u002F情人设置\n",[76,16024,16025,16027,16030,16032,16035],{"class":78,"line":9870},[76,16026,15938],{"class":93},[76,16028,16029],{"class":2035},"setLover",[76,16031,202],{"class":93},[76,16033,16034],{"class":305},"\"苍井\"",[76,16036,2791],{"class":93},[76,16038,16039,16042],{"class":78,"line":9875},[76,16040,16041],{"class":82},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[76,16043,16044],{"class":82},"  \u002F\u002F只写属性，不可以读取\n",[76,16046,16047],{"class":78,"line":9884},[76,16048,2472],{"emptyLinePlaceholder":125},[76,16050,16051,16053,16055,16057],{"class":78,"line":9889},[76,16052,2375],{"class":2035},[76,16054,202],{"class":93},[76,16056,2380],{"class":305},[76,16058,2791],{"class":93},[76,16060,16061],{"class":78,"line":9895},[76,16062,2472],{"emptyLinePlaceholder":125},[76,16064,16065,16067,16069],{"class":78,"line":9916},[76,16066,4162],{"class":89},[76,16068,4165],{"class":250},[76,16070,1363],{"class":93},[76,16072,16073],{"class":78,"line":9922},[76,16074,1637],{"class":93},[169,16076,16078],{"id":16077},"_814封装案例","8.1.4封装案例",[152,16080,16081],{},[155,16082,16083,16086],{},[350,16084,16085],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1206,16088,16089,16092],{},[155,16090,16091],{},"求出立方体的面积和体积",[155,16093,16094],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[67,16096,16098],{"className":190,"code":16097,"language":192,"meta":58,"style":58},"#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",[73,16099,16100,16106,16116,16123,16127,16131,16136,16166,16170,16180,16190,16200,16204,16213,16217,16253,16257,16266,16270,16286,16290,16295,16304,16308,16315,16319,16328,16332,16339,16343,16352,16356,16363,16367,16372,16389,16393,16439,16443,16452,16456,16460,16464,16473,16477,16481,16486,16490,16496,16502,16508,16512,16516,16521,16543,16547,16601,16605,16613,16617,16622,16627,16640,16647,16663,16674,16680,16703,16709,16732,16746,16766,16772,16783,16806,16828,16833,16839,16853,16866,16871,16885,16890,16896,16901,16915,16920,16925,16939,16951,16956,16969,16974,16979,16984,16997,17002],{"__ignoreMap":58},[76,16101,16102,16104],{"class":78,"line":79},[76,16103,2021],{"class":89},[76,16105,2024],{"class":305},[76,16107,16108,16110,16112,16114],{"class":78,"line":86},[76,16109,2029],{"class":89},[76,16111,2032],{"class":89},[76,16113,2036],{"class":2035},[76,16115,1363],{"class":93},[76,16117,16118,16120],{"class":78,"line":97},[76,16119,14766],{"class":89},[76,16121,16122],{"class":2035}," Cube\n",[76,16124,16125],{"class":78,"line":103},[76,16126,1618],{"class":93},[76,16128,16129],{"class":78,"line":1273},[76,16130,14788],{"class":89},[76,16132,16133],{"class":78,"line":1287},[76,16134,16135],{"class":82},"    \u002F\u002F输入长宽高\n",[76,16137,16138,16140,16143,16145,16147,16150,16152,16154,16157,16159,16161,16164],{"class":78,"line":1293},[76,16139,14981],{"class":89},[76,16141,16142],{"class":2035}," setLwh",[76,16144,202],{"class":93},[76,16146,205],{"class":89},[76,16148,16149],{"class":5288}," l",[76,16151,578],{"class":93},[76,16153,205],{"class":89},[76,16155,16156],{"class":5288}," w",[76,16158,578],{"class":93},[76,16160,205],{"class":89},[76,16162,16163],{"class":5288}," h",[76,16165,208],{"class":93},[76,16167,16168],{"class":78,"line":1384},[76,16169,2102],{"class":93},[76,16171,16172,16175,16177],{"class":78,"line":1390},[76,16173,16174],{"class":93},"        m_L",[76,16176,247],{"class":89},[76,16178,16179],{"class":93},"l;\n",[76,16181,16182,16185,16187],{"class":78,"line":1402},[76,16183,16184],{"class":93},"        m_W",[76,16186,247],{"class":89},[76,16188,16189],{"class":93},"w;\n",[76,16191,16192,16195,16197],{"class":78,"line":1684},[76,16193,16194],{"class":93},"        m_H",[76,16196,247],{"class":89},[76,16198,16199],{"class":93},"h;\n",[76,16201,16202],{"class":78,"line":1689},[76,16203,2259],{"class":93},[76,16205,16206,16208,16211],{"class":78,"line":1695},[76,16207,2057],{"class":89},[76,16209,16210],{"class":2035}," mianji",[76,16212,2048],{"class":93},[76,16214,16215],{"class":78,"line":1700},[76,16216,2102],{"class":93},[76,16218,16219,16221,16223,16225,16228,16230,16233,16235,16238,16240,16243,16245,16248,16250],{"class":78,"line":1714},[76,16220,14824],{"class":89},[76,16222,14827],{"class":250},[76,16224,655],{"class":89},[76,16226,16227],{"class":93},"(m_L",[76,16229,655],{"class":89},[76,16231,16232],{"class":93},"m_W ",[76,16234,681],{"class":89},[76,16236,16237],{"class":93}," m_L",[76,16239,655],{"class":89},[76,16241,16242],{"class":93},"m_H ",[76,16244,681],{"class":89},[76,16246,16247],{"class":93}," m_W",[76,16249,655],{"class":89},[76,16251,16252],{"class":93},"m_H);\n",[76,16254,16255],{"class":78,"line":1719},[76,16256,2259],{"class":93},[76,16258,16259,16261,16264],{"class":78,"line":1725},[76,16260,2057],{"class":89},[76,16262,16263],{"class":2035}," tiji",[76,16265,2048],{"class":93},[76,16267,16268],{"class":78,"line":1746},[76,16269,2102],{"class":93},[76,16271,16272,16274,16276,16278,16281,16283],{"class":78,"line":1751},[76,16273,14824],{"class":89},[76,16275,16237],{"class":93},[76,16277,655],{"class":89},[76,16279,16280],{"class":93},"m_W",[76,16282,655],{"class":89},[76,16284,16285],{"class":93},"m_H;\n",[76,16287,16288],{"class":78,"line":1765},[76,16289,2259],{"class":93},[76,16291,16292],{"class":78,"line":1770},[76,16293,16294],{"class":82},"    \u002F\u002F获取长宽高\n",[76,16296,16297,16299,16302],{"class":78,"line":1799},[76,16298,2057],{"class":89},[76,16300,16301],{"class":2035}," getLength",[76,16303,2048],{"class":93},[76,16305,16306],{"class":78,"line":1804},[76,16307,2102],{"class":93},[76,16309,16310,16312],{"class":78,"line":1821},[76,16311,14824],{"class":89},[76,16313,16314],{"class":93}," m_L;\n",[76,16316,16317],{"class":78,"line":1826},[76,16318,2259],{"class":93},[76,16320,16321,16323,16326],{"class":78,"line":1831},[76,16322,2057],{"class":89},[76,16324,16325],{"class":2035}," getWidth",[76,16327,2048],{"class":93},[76,16329,16330],{"class":78,"line":1836},[76,16331,2102],{"class":93},[76,16333,16334,16336],{"class":78,"line":1850},[76,16335,14824],{"class":89},[76,16337,16338],{"class":93}," m_W;\n",[76,16340,16341],{"class":78,"line":1855},[76,16342,2259],{"class":93},[76,16344,16345,16347,16350],{"class":78,"line":2649},[76,16346,2057],{"class":89},[76,16348,16349],{"class":2035}," getHeight",[76,16351,2048],{"class":93},[76,16353,16354],{"class":78,"line":2663},[76,16355,2102],{"class":93},[76,16357,16358,16360],{"class":78,"line":2671},[76,16359,14824],{"class":89},[76,16361,16362],{"class":93}," m_H;\n",[76,16364,16365],{"class":78,"line":2676},[76,16366,2259],{"class":93},[76,16368,16369],{"class":78,"line":2682},[76,16370,16371],{"class":82},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[76,16373,16374,16377,16380,16382,16385,16387],{"class":78,"line":2688},[76,16375,16376],{"class":89},"    bool",[76,16378,16379],{"class":2035}," isEqual",[76,16381,202],{"class":93},[76,16383,16384],{"class":2035},"Cube",[76,16386,2921],{"class":5288},[76,16388,208],{"class":93},[76,16390,16391],{"class":78,"line":2693},[76,16392,2102],{"class":93},[76,16394,16395,16397,16400,16403,16405,16407,16410,16412,16415,16418,16420,16422,16425,16427,16429,16432,16434,16436],{"class":78,"line":8020},[76,16396,2569],{"class":89},[76,16398,16399],{"class":93}," (c.",[76,16401,16402],{"class":2035},"getLength",[76,16404,13122],{"class":93},[76,16406,3021],{"class":89},[76,16408,16409],{"class":93}," m_L ",[76,16411,1787],{"class":89},[76,16413,16414],{"class":93}," c.",[76,16416,16417],{"class":2035},"getWidth",[76,16419,13122],{"class":93},[76,16421,3021],{"class":89},[76,16423,16424],{"class":93}," m_W ",[76,16426,1787],{"class":89},[76,16428,16414],{"class":93},[76,16430,16431],{"class":2035},"getHeight",[76,16433,13122],{"class":93},[76,16435,3021],{"class":89},[76,16437,16438],{"class":93}," m_H)\n",[76,16440,16441],{"class":78,"line":8044},[76,16442,2582],{"class":93},[76,16444,16445,16447,16450],{"class":78,"line":8049},[76,16446,15804],{"class":89},[76,16448,16449],{"class":250}," true",[76,16451,1363],{"class":93},[76,16453,16454],{"class":78,"line":8055},[76,16455,2601],{"class":93},[76,16457,16458],{"class":78,"line":8082},[76,16459,2642],{"class":89},[76,16461,16462],{"class":78,"line":8087},[76,16463,2582],{"class":93},[76,16465,16466,16468,16471],{"class":78,"line":8093},[76,16467,15804],{"class":89},[76,16469,16470],{"class":250}," false",[76,16472,1363],{"class":93},[76,16474,16475],{"class":78,"line":8105},[76,16476,2601],{"class":93},[76,16478,16479],{"class":78,"line":8117},[76,16480,2259],{"class":93},[76,16482,16483],{"class":78,"line":8129},[76,16484,16485],{"class":82},"    \u002F\u002F私有属性\n",[76,16487,16488],{"class":78,"line":9788},[76,16489,15294],{"class":89},[76,16491,16492,16494],{"class":78,"line":9813},[76,16493,2057],{"class":89},[76,16495,16314],{"class":93},[76,16497,16498,16500],{"class":78,"line":9836},[76,16499,2057],{"class":89},[76,16501,16338],{"class":93},[76,16503,16504,16506],{"class":78,"line":9860},[76,16505,2057],{"class":89},[76,16507,16362],{"class":93},[76,16509,16510],{"class":78,"line":9865},[76,16511,2472],{"emptyLinePlaceholder":125},[76,16513,16514],{"class":78,"line":9870},[76,16515,4067],{"class":93},[76,16517,16518],{"class":78,"line":9875},[76,16519,16520],{"class":82},"\u002F\u002F全局函数判断两个立方体是否相等\n",[76,16522,16523,16525,16527,16529,16531,16534,16536,16538,16541],{"class":78,"line":9884},[76,16524,1427],{"class":89},[76,16526,16379],{"class":2035},[76,16528,202],{"class":93},[76,16530,16384],{"class":2035},[76,16532,16533],{"class":5288}," c1",[76,16535,578],{"class":93},[76,16537,16384],{"class":2035},[76,16539,16540],{"class":5288}," c2",[76,16542,208],{"class":93},[76,16544,16545],{"class":78,"line":9889},[76,16546,1618],{"class":93},[76,16548,16549,16551,16554,16556,16558,16560,16563,16565,16568,16570,16572,16574,16576,16578,16580,16582,16584,16586,16588,16590,16592,16594,16596,16598],{"class":78,"line":9895},[76,16550,4162],{"class":89},[76,16552,16553],{"class":93}," (c1.",[76,16555,16402],{"class":2035},[76,16557,13122],{"class":93},[76,16559,3021],{"class":89},[76,16561,16562],{"class":93}," c2.",[76,16564,16402],{"class":2035},[76,16566,16567],{"class":93},"()) ",[76,16569,1787],{"class":89},[76,16571,16553],{"class":93},[76,16573,16417],{"class":2035},[76,16575,13122],{"class":93},[76,16577,3021],{"class":89},[76,16579,16562],{"class":93},[76,16581,16417],{"class":2035},[76,16583,16567],{"class":93},[76,16585,1787],{"class":89},[76,16587,16553],{"class":93},[76,16589,16431],{"class":2035},[76,16591,13122],{"class":93},[76,16593,3021],{"class":89},[76,16595,16562],{"class":93},[76,16597,16431],{"class":2035},[76,16599,16600],{"class":93},"());\n",[76,16602,16603],{"class":78,"line":9916},[76,16604,1637],{"class":93},[76,16606,16607,16609,16611],{"class":78,"line":9922},[76,16608,205],{"class":89},[76,16610,2045],{"class":2035},[76,16612,2048],{"class":93},[76,16614,16615],{"class":78,"line":9936},[76,16616,1618],{"class":93},[76,16618,16619],{"class":78,"line":9942},[76,16620,16621],{"class":93},"    Cube c1;\n",[76,16623,16624],{"class":78,"line":9969},[76,16625,16626],{"class":82},"    \u002F\u002F输入立方体的长宽高\n",[76,16628,16629,16631,16633,16636,16638],{"class":78,"line":9978},[76,16630,1623],{"class":93},[76,16632,1243],{"class":89},[76,16634,16635],{"class":305},"\"请输入第一个立方体的长、宽、高：\"",[76,16637,1243],{"class":89},[76,16639,1265],{"class":93},[76,16641,16642,16644],{"class":78,"line":9984},[76,16643,2057],{"class":89},[76,16645,16646],{"class":93}," l,w,h,l1,w1,h1;\n",[76,16648,16649,16651,16653,16655,16657,16659,16661],{"class":78,"line":9992},[76,16650,2084],{"class":93},[76,16652,1502],{"class":89},[76,16654,718],{"class":93},[76,16656,1502],{"class":89},[76,16658,994],{"class":93},[76,16660,1502],{"class":89},[76,16662,16199],{"class":93},[76,16664,16665,16668,16671],{"class":78,"line":9997},[76,16666,16667],{"class":93},"    c1.",[76,16669,16670],{"class":2035},"setLwh",[76,16672,16673],{"class":93},"(l,w,h);\n",[76,16675,16677],{"class":78,"line":16676},66,[76,16678,16679],{"class":82},"    \u002F\u002F面积\n",[76,16681,16683,16685,16687,16690,16692,16694,16697,16699,16701],{"class":78,"line":16682},67,[76,16684,1623],{"class":93},[76,16686,1243],{"class":89},[76,16688,16689],{"class":305},"\"立方体的表面积为：\"",[76,16691,1243],{"class":89},[76,16693,14902],{"class":93},[76,16695,16696],{"class":2035},"mianji",[76,16698,2499],{"class":93},[76,16700,1243],{"class":89},[76,16702,1265],{"class":93},[76,16704,16706],{"class":78,"line":16705},68,[76,16707,16708],{"class":82},"    \u002F\u002F体积\n",[76,16710,16712,16714,16716,16719,16721,16723,16726,16728,16730],{"class":78,"line":16711},69,[76,16713,1623],{"class":93},[76,16715,1243],{"class":89},[76,16717,16718],{"class":305},"\"立方体的体积为：\"",[76,16720,1243],{"class":89},[76,16722,14902],{"class":93},[76,16724,16725],{"class":2035},"tiji",[76,16727,2499],{"class":93},[76,16729,1243],{"class":89},[76,16731,1265],{"class":93},[76,16733,16735,16737,16739,16742,16744],{"class":78,"line":16734},70,[76,16736,1623],{"class":93},[76,16738,1243],{"class":89},[76,16740,16741],{"class":305},"\"请输入第二个立方体的长、宽、高：\"",[76,16743,1243],{"class":89},[76,16745,1265],{"class":93},[76,16747,16749,16751,16753,16756,16758,16761,16763],{"class":78,"line":16748},71,[76,16750,2084],{"class":93},[76,16752,1502],{"class":89},[76,16754,16755],{"class":93},"l1",[76,16757,1502],{"class":89},[76,16759,16760],{"class":93},"w1",[76,16762,1502],{"class":89},[76,16764,16765],{"class":93},"h1;\n",[76,16767,16769],{"class":78,"line":16768},72,[76,16770,16771],{"class":93},"    Cube c2;\n",[76,16773,16775,16778,16780],{"class":78,"line":16774},73,[76,16776,16777],{"class":93},"    c2.",[76,16779,16670],{"class":2035},[76,16781,16782],{"class":93},"(l1,w1,h1);\n",[76,16784,16786,16788,16790,16793,16795,16798,16800,16802,16804],{"class":78,"line":16785},74,[76,16787,1623],{"class":93},[76,16789,1243],{"class":89},[76,16791,16792],{"class":305},"\"第二个立方体的表面积为：\"",[76,16794,1243],{"class":89},[76,16796,16797],{"class":93},"c2.",[76,16799,16696],{"class":2035},[76,16801,2499],{"class":93},[76,16803,1243],{"class":89},[76,16805,1265],{"class":93},[76,16807,16809,16811,16813,16816,16818,16820,16822,16824,16826],{"class":78,"line":16808},75,[76,16810,1623],{"class":93},[76,16812,1243],{"class":89},[76,16814,16815],{"class":305},"\"第二个立方体的体积为：\"",[76,16817,1243],{"class":89},[76,16819,16797],{"class":93},[76,16821,16725],{"class":2035},[76,16823,2499],{"class":93},[76,16825,1243],{"class":89},[76,16827,1265],{"class":93},[76,16829,16831],{"class":78,"line":16830},76,[76,16832,2472],{"emptyLinePlaceholder":125},[76,16834,16836],{"class":78,"line":16835},77,[76,16837,16838],{"class":82},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[76,16840,16842,16844,16846,16849,16851],{"class":78,"line":16841},78,[76,16843,1623],{"class":93},[76,16845,1243],{"class":89},[76,16847,16848],{"class":305},"\"内部函数判断结果：\"",[76,16850,1243],{"class":89},[76,16852,1265],{"class":93},[76,16854,16856,16858,16860,16863],{"class":78,"line":16855},79,[76,16857,3173],{"class":89},[76,16859,16553],{"class":93},[76,16861,16862],{"class":2035},"isEqual",[76,16864,16865],{"class":93},"(c2))\n",[76,16867,16869],{"class":78,"line":16868},80,[76,16870,2102],{"class":93},[76,16872,16874,16876,16878,16881,16883],{"class":78,"line":16873},81,[76,16875,3523],{"class":93},[76,16877,1243],{"class":89},[76,16879,16880],{"class":305},"\"两个立方体相等\"",[76,16882,1243],{"class":89},[76,16884,1265],{"class":93},[76,16886,16888],{"class":78,"line":16887},82,[76,16889,2259],{"class":93},[76,16891,16893],{"class":78,"line":16892},83,[76,16894,16895],{"class":89},"    else\n",[76,16897,16899],{"class":78,"line":16898},84,[76,16900,2102],{"class":93},[76,16902,16904,16906,16908,16911,16913],{"class":78,"line":16903},85,[76,16905,3523],{"class":93},[76,16907,1243],{"class":89},[76,16909,16910],{"class":305},"\"两个立方体不相等\"",[76,16912,1243],{"class":89},[76,16914,1265],{"class":93},[76,16916,16918],{"class":78,"line":16917},86,[76,16919,2259],{"class":93},[76,16921,16923],{"class":78,"line":16922},87,[76,16924,2472],{"emptyLinePlaceholder":125},[76,16926,16928,16930,16932,16935,16937],{"class":78,"line":16927},88,[76,16929,1623],{"class":93},[76,16931,1243],{"class":89},[76,16933,16934],{"class":305},"\"全局函数判断结果：\"",[76,16936,1243],{"class":89},[76,16938,1265],{"class":93},[76,16940,16942,16944,16946,16948],{"class":78,"line":16941},89,[76,16943,3173],{"class":89},[76,16945,1730],{"class":93},[76,16947,16862],{"class":2035},[76,16949,16950],{"class":93},"(c1, c2))\n",[76,16952,16954],{"class":78,"line":16953},90,[76,16955,2102],{"class":93},[76,16957,16959,16961,16963,16965,16967],{"class":78,"line":16958},91,[76,16960,3523],{"class":93},[76,16962,1243],{"class":89},[76,16964,16880],{"class":305},[76,16966,1243],{"class":89},[76,16968,1265],{"class":93},[76,16970,16972],{"class":78,"line":16971},92,[76,16973,2259],{"class":93},[76,16975,16977],{"class":78,"line":16976},93,[76,16978,16895],{"class":89},[76,16980,16982],{"class":78,"line":16981},94,[76,16983,2102],{"class":93},[76,16985,16987,16989,16991,16993,16995],{"class":78,"line":16986},95,[76,16988,3523],{"class":93},[76,16990,1243],{"class":89},[76,16992,16910],{"class":305},[76,16994,1243],{"class":89},[76,16996,1265],{"class":93},[76,16998,17000],{"class":78,"line":16999},96,[76,17001,2259],{"class":93},[76,17003,17005],{"class":78,"line":17004},97,[76,17006,1637],{"class":93},[152,17008,17009],{"start":86},[155,17010,17011],{},[350,17012,17013],{},"练习案例2：点和圆的关系",[1206,17015,17016],{},[155,17017,17018],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[67,17020,17022],{"className":190,"code":17021,"language":192,"meta":58,"style":58},"#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",[73,17023,17024,17030,17040,17047,17054,17058,17062,17067,17101,17106,17122,17136,17140,17144,17151,17158,17162,17168,17172,17176,17180,17202,17225,17230,17244,17259,17263,17267,17273,17278,17283,17287,17313,17317,17347,17375,17403,17420,17424,17437,17441,17445,17449,17462,17466,17470,17478,17482,17486,17490,17495,17499,17510,17517,17526,17536,17547,17554,17567,17578,17588,17599,17606,17620,17625,17635,17643],{"__ignoreMap":58},[76,17025,17026,17028],{"class":78,"line":79},[76,17027,2021],{"class":89},[76,17029,2024],{"class":305},[76,17031,17032,17034,17036,17038],{"class":78,"line":86},[76,17033,2029],{"class":89},[76,17035,2032],{"class":89},[76,17037,2036],{"class":2035},[76,17039,1363],{"class":93},[76,17041,17042,17044],{"class":78,"line":97},[76,17043,2021],{"class":89},[76,17045,17046],{"class":305},"\u003Ccmath>\n",[76,17048,17049,17051],{"class":78,"line":103},[76,17050,14766],{"class":89},[76,17052,17053],{"class":2035}," Point\n",[76,17055,17056],{"class":78,"line":1273},[76,17057,1618],{"class":93},[76,17059,17060],{"class":78,"line":1287},[76,17061,14788],{"class":89},[76,17063,17064],{"class":78,"line":1293},[76,17065,17066],{"class":82},"    \u002F\u002F赋值\n",[76,17068,17069,17071,17074,17076,17078,17081,17083,17085,17088,17091,17093,17096,17098],{"class":78,"line":1384},[76,17070,14981],{"class":89},[76,17072,17073],{"class":2035}," setPoint",[76,17075,202],{"class":93},[76,17077,14109],{"class":89},[76,17079,17080],{"class":5288}," x",[76,17082,12507],{"class":93},[76,17084,14109],{"class":89},[76,17086,17087],{"class":5288}," y",[76,17089,17090],{"class":93},") { m_x ",[76,17092,247],{"class":89},[76,17094,17095],{"class":93}," x; m_y ",[76,17097,247],{"class":89},[76,17099,17100],{"class":93}," y; }\n",[76,17102,17103],{"class":78,"line":1390},[76,17104,17105],{"class":82},"    \u002F\u002F获取坐标\n",[76,17107,17108,17110,17113,17116,17119],{"class":78,"line":1402},[76,17109,14810],{"class":89},[76,17111,17112],{"class":2035}," getX",[76,17114,17115],{"class":93},"() { ",[76,17117,17118],{"class":89},"return",[76,17120,17121],{"class":93}," m_x; }\n",[76,17123,17124,17126,17129,17131,17133],{"class":78,"line":1684},[76,17125,14810],{"class":89},[76,17127,17128],{"class":2035}," getY",[76,17130,17115],{"class":93},[76,17132,17118],{"class":89},[76,17134,17135],{"class":93}," m_y; }\n",[76,17137,17138],{"class":78,"line":1689},[76,17139,2472],{"emptyLinePlaceholder":125},[76,17141,17142],{"class":78,"line":1695},[76,17143,15294],{"class":89},[76,17145,17146,17148],{"class":78,"line":1700},[76,17147,14810],{"class":89},[76,17149,17150],{"class":93}," m_x;\n",[76,17152,17153,17155],{"class":78,"line":1714},[76,17154,14810],{"class":89},[76,17156,17157],{"class":93}," m_y;\n",[76,17159,17160],{"class":78,"line":1719},[76,17161,4067],{"class":93},[76,17163,17164,17166],{"class":78,"line":1725},[76,17165,14766],{"class":89},[76,17167,14769],{"class":2035},[76,17169,17170],{"class":78,"line":1746},[76,17171,1618],{"class":93},[76,17173,17174],{"class":78,"line":1751},[76,17175,14788],{"class":89},[76,17177,17178],{"class":78,"line":1765},[76,17179,17066],{"class":82},[76,17181,17182,17184,17187,17189,17191,17194,17197,17199],{"class":78,"line":1770},[76,17183,14981],{"class":89},[76,17185,17186],{"class":2035}," setRadius",[76,17188,202],{"class":93},[76,17190,14109],{"class":89},[76,17192,17193],{"class":5288}," r",[76,17195,17196],{"class":93},") { m_r ",[76,17198,247],{"class":89},[76,17200,17201],{"class":93}," r; }\n",[76,17203,17204,17206,17209,17211,17214,17217,17220,17222],{"class":78,"line":1799},[76,17205,14981],{"class":89},[76,17207,17208],{"class":2035}," setCenter",[76,17210,202],{"class":93},[76,17212,17213],{"class":2035},"Point",[76,17215,17216],{"class":5288}," center",[76,17218,17219],{"class":93},") { m_center ",[76,17221,247],{"class":89},[76,17223,17224],{"class":93}," center; }\n",[76,17226,17227],{"class":78,"line":1804},[76,17228,17229],{"class":82},"    \u002F\u002F获取属性\n",[76,17231,17232,17234,17237,17239,17241],{"class":78,"line":1821},[76,17233,14810],{"class":89},[76,17235,17236],{"class":2035}," getRadius",[76,17238,17115],{"class":93},[76,17240,17118],{"class":89},[76,17242,17243],{"class":93}," m_r; }\n",[76,17245,17246,17249,17252,17254,17256],{"class":78,"line":1826},[76,17247,17248],{"class":2035},"    Point",[76,17250,17251],{"class":2035}," getCenter",[76,17253,17115],{"class":93},[76,17255,17118],{"class":89},[76,17257,17258],{"class":93}," m_center; }\n",[76,17260,17261],{"class":78,"line":1831},[76,17262,2472],{"emptyLinePlaceholder":125},[76,17264,17265],{"class":78,"line":1836},[76,17266,15294],{"class":89},[76,17268,17269,17271],{"class":78,"line":1850},[76,17270,14810],{"class":89},[76,17272,14800],{"class":93},[76,17274,17275],{"class":78,"line":1855},[76,17276,17277],{"class":82},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[76,17279,17280],{"class":78,"line":2649},[76,17281,17282],{"class":93},"    Point m_center;\n",[76,17284,17285],{"class":78,"line":2663},[76,17286,4067],{"class":93},[76,17288,17289,17291,17294,17296,17299,17301,17303,17305,17307,17309,17311],{"class":78,"line":2671},[76,17290,5436],{"class":89},[76,17292,17293],{"class":2035}," isInCircle",[76,17295,202],{"class":93},[76,17297,17298],{"class":2035},"Circle",[76,17300,10656],{"class":89},[76,17302,489],{"class":5288},[76,17304,578],{"class":93},[76,17306,17213],{"class":2035},[76,17308,10656],{"class":89},[76,17310,14],{"class":5288},[76,17312,208],{"class":93},[76,17314,17315],{"class":78,"line":2676},[76,17316,1618],{"class":93},[76,17318,17319,17321,17324,17326,17328,17331,17334,17337,17339,17341,17343,17345],{"class":78,"line":2682},[76,17320,14810],{"class":89},[76,17322,17323],{"class":93}," dx ",[76,17325,247],{"class":89},[76,17327,16414],{"class":93},[76,17329,17330],{"class":2035},"getCenter",[76,17332,17333],{"class":93},"().",[76,17335,17336],{"class":2035},"getX",[76,17338,13122],{"class":93},[76,17340,112],{"class":89},[76,17342,15960],{"class":93},[76,17344,17336],{"class":2035},[76,17346,5708],{"class":93},[76,17348,17349,17351,17354,17356,17358,17360,17362,17365,17367,17369,17371,17373],{"class":78,"line":2688},[76,17350,14810],{"class":89},[76,17352,17353],{"class":93}," dy ",[76,17355,247],{"class":89},[76,17357,16414],{"class":93},[76,17359,17330],{"class":2035},[76,17361,17333],{"class":93},[76,17363,17364],{"class":2035},"getY",[76,17366,13122],{"class":93},[76,17368,112],{"class":89},[76,17370,15960],{"class":93},[76,17372,17364],{"class":2035},[76,17374,5708],{"class":93},[76,17376,17377,17379,17382,17384,17387,17390,17392,17394,17396,17398,17400],{"class":78,"line":2693},[76,17378,14810],{"class":89},[76,17380,17381],{"class":93}," distance ",[76,17383,247],{"class":89},[76,17385,17386],{"class":2035}," sqrt",[76,17388,17389],{"class":93},"(dx ",[76,17391,655],{"class":89},[76,17393,17323],{"class":93},[76,17395,681],{"class":89},[76,17397,17353],{"class":93},[76,17399,655],{"class":89},[76,17401,17402],{"class":93}," dy);\n",[76,17404,17405,17407,17410,17412,17414,17417],{"class":78,"line":8020},[76,17406,3173],{"class":89},[76,17408,17409],{"class":93}," (distance ",[76,17411,1109],{"class":89},[76,17413,16414],{"class":93},[76,17415,17416],{"class":2035},"getRadius",[76,17418,17419],{"class":93},"())\n",[76,17421,17422],{"class":78,"line":8044},[76,17423,2102],{"class":93},[76,17425,17426,17428,17430,17433,17435],{"class":78,"line":8049},[76,17427,9741],{"class":93},[76,17429,1243],{"class":89},[76,17431,17432],{"class":305}," \"点在圆内\"",[76,17434,1517],{"class":89},[76,17436,8912],{"class":93},[76,17438,17439],{"class":78,"line":8055},[76,17440,2259],{"class":93},[76,17442,17443],{"class":78,"line":8082},[76,17444,16895],{"class":89},[76,17446,17447],{"class":78,"line":8087},[76,17448,2102],{"class":93},[76,17450,17451,17453,17455,17458,17460],{"class":78,"line":8093},[76,17452,9741],{"class":93},[76,17454,1243],{"class":89},[76,17456,17457],{"class":305}," \"点在圆外\"",[76,17459,1517],{"class":89},[76,17461,8912],{"class":93},[76,17463,17464],{"class":78,"line":8105},[76,17465,2259],{"class":93},[76,17467,17468],{"class":78,"line":8117},[76,17469,1637],{"class":93},[76,17471,17472,17474,17476],{"class":78,"line":8129},[76,17473,205],{"class":89},[76,17475,2045],{"class":2035},[76,17477,2048],{"class":93},[76,17479,17480],{"class":78,"line":9788},[76,17481,1618],{"class":93},[76,17483,17484],{"class":78,"line":9813},[76,17485,15125],{"class":82},[76,17487,17488],{"class":78,"line":9836},[76,17489,14872],{"class":93},[76,17491,17492],{"class":78,"line":9860},[76,17493,17494],{"class":93},"    Point p1;\n",[76,17496,17497],{"class":78,"line":9865},[76,17498,17066],{"class":82},[76,17500,17501,17503,17505,17508],{"class":78,"line":9870},[76,17502,1623],{"class":93},[76,17504,1243],{"class":89},[76,17506,17507],{"class":305},"\"请输入圆的半径：\"",[76,17509,1363],{"class":93},[76,17511,17512,17514],{"class":78,"line":9875},[76,17513,14810],{"class":89},[76,17515,17516],{"class":93}," r;\n",[76,17518,17519,17521,17523],{"class":78,"line":9884},[76,17520,2084],{"class":93},[76,17522,1502],{"class":89},[76,17524,17525],{"class":93},"r;\n",[76,17527,17528,17530,17533],{"class":78,"line":9889},[76,17529,16667],{"class":93},[76,17531,17532],{"class":2035},"setRadius",[76,17534,17535],{"class":93},"(r);\n",[76,17537,17538,17540,17542,17545],{"class":78,"line":9895},[76,17539,1623],{"class":93},[76,17541,1243],{"class":89},[76,17543,17544],{"class":305},"\"请输入圆心坐标：\"",[76,17546,1363],{"class":93},[76,17548,17549,17551],{"class":78,"line":9916},[76,17550,14810],{"class":89},[76,17552,17553],{"class":93}," x, y;\n",[76,17555,17556,17558,17560,17562,17564],{"class":78,"line":9922},[76,17557,2084],{"class":93},[76,17559,1502],{"class":89},[76,17561,1019],{"class":93},[76,17563,1502],{"class":89},[76,17565,17566],{"class":93},"y;\n",[76,17568,17569,17572,17575],{"class":78,"line":9936},[76,17570,17571],{"class":93},"    p1.",[76,17573,17574],{"class":2035},"setPoint",[76,17576,17577],{"class":93},"(x, y);\n",[76,17579,17580,17582,17585],{"class":78,"line":9942},[76,17581,16667],{"class":93},[76,17583,17584],{"class":2035},"setCenter",[76,17586,17587],{"class":93},"(p1);\n",[76,17589,17590,17592,17594,17597],{"class":78,"line":9969},[76,17591,1623],{"class":93},[76,17593,1243],{"class":89},[76,17595,17596],{"class":305},"\"请输入测试点坐标：\"",[76,17598,1363],{"class":93},[76,17600,17601,17603],{"class":78,"line":9978},[76,17602,14810],{"class":89},[76,17604,17605],{"class":93}," x1, y1;\n",[76,17607,17608,17610,17612,17615,17617],{"class":78,"line":9984},[76,17609,2084],{"class":93},[76,17611,1502],{"class":89},[76,17613,17614],{"class":93},"x1",[76,17616,1502],{"class":89},[76,17618,17619],{"class":93},"y1;\n",[76,17621,17622],{"class":78,"line":9992},[76,17623,17624],{"class":93},"    Point p2;\n",[76,17626,17627,17630,17632],{"class":78,"line":9997},[76,17628,17629],{"class":93},"    p2.",[76,17631,17574],{"class":2035},[76,17633,17634],{"class":93},"(x1, y1);\n",[76,17636,17637,17640],{"class":78,"line":16676},[76,17638,17639],{"class":2035},"    isInCircle",[76,17641,17642],{"class":93},"(c1, p2);\n",[76,17644,17645],{"class":78,"line":16682},[76,17646,1637],{"class":93},[14,17648,17649],{},"在类中可以让另一个类作为本来的成员",[14,17651,17652],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17654,17655],{},"创建point.h",[67,17657,17659],{"className":190,"code":17658,"language":192,"meta":58,"style":58},"#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",[73,17660,17661,17672,17678,17688,17694,17698,17703,17707,17711,17731,17735,17743,17751,17755,17759,17765,17771],{"__ignoreMap":58},[76,17662,17663,17666,17669],{"class":78,"line":79},[76,17664,17665],{"class":89},"#pragma",[76,17667,17668],{"class":2035}," once",[76,17670,17671],{"class":82}," \u002F\u002F防止头文件重复包含\n",[76,17673,17674,17676],{"class":78,"line":86},[76,17675,2021],{"class":89},[76,17677,2024],{"class":305},[76,17679,17680,17682,17684,17686],{"class":78,"line":97},[76,17681,2029],{"class":89},[76,17683,2032],{"class":89},[76,17685,2036],{"class":2035},[76,17687,1363],{"class":93},[76,17689,17690,17692],{"class":78,"line":103},[76,17691,14766],{"class":89},[76,17693,17053],{"class":2035},[76,17695,17696],{"class":78,"line":1273},[76,17697,1618],{"class":93},[76,17699,17700],{"class":78,"line":1287},[76,17701,17702],{"class":82},"\u002F\u002F做好声明与变量定义就可以\n",[76,17704,17705],{"class":78,"line":1293},[76,17706,14788],{"class":89},[76,17708,17709],{"class":78,"line":1384},[76,17710,17066],{"class":82},[76,17712,17713,17715,17717,17719,17721,17723,17725,17727,17729],{"class":78,"line":1390},[76,17714,14981],{"class":89},[76,17716,17073],{"class":2035},[76,17718,202],{"class":93},[76,17720,14109],{"class":89},[76,17722,17080],{"class":5288},[76,17724,12507],{"class":93},[76,17726,14109],{"class":89},[76,17728,17087],{"class":5288},[76,17730,2791],{"class":93},[76,17732,17733],{"class":78,"line":1402},[76,17734,17105],{"class":82},[76,17736,17737,17739,17741],{"class":78,"line":1684},[76,17738,14810],{"class":89},[76,17740,17112],{"class":2035},[76,17742,5708],{"class":93},[76,17744,17745,17747,17749],{"class":78,"line":1689},[76,17746,14810],{"class":89},[76,17748,17128],{"class":2035},[76,17750,5708],{"class":93},[76,17752,17753],{"class":78,"line":1695},[76,17754,2472],{"emptyLinePlaceholder":125},[76,17756,17757],{"class":78,"line":1700},[76,17758,15294],{"class":89},[76,17760,17761,17763],{"class":78,"line":1714},[76,17762,14810],{"class":89},[76,17764,17150],{"class":93},[76,17766,17767,17769],{"class":78,"line":1719},[76,17768,14810],{"class":89},[76,17770,17157],{"class":93},[76,17772,17773],{"class":78,"line":1725},[76,17774,4067],{"class":93},[14,17776,17777],{},"创建point.cpp",[67,17779,17781],{"className":190,"code":17780,"language":192,"meta":58,"style":58},"#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",[73,17782,17783,17790,17795,17829,17833,17849],{"__ignoreMap":58},[76,17784,17785,17787],{"class":78,"line":79},[76,17786,2021],{"class":89},[76,17788,17789],{"class":305},"\u003Cpoint.h>\n",[76,17791,17792],{"class":78,"line":86},[76,17793,17794],{"class":82},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[76,17796,17797,17799,17802,17805,17807,17809,17811,17813,17815,17817,17819,17821,17823,17825,17827],{"class":78,"line":97},[76,17798,14981],{"class":89},[76,17800,17801],{"class":2035}," Point",[76,17803,17804],{"class":93},"::",[76,17806,17574],{"class":2035},[76,17808,202],{"class":93},[76,17810,14109],{"class":89},[76,17812,17080],{"class":5288},[76,17814,12507],{"class":93},[76,17816,14109],{"class":89},[76,17818,17087],{"class":5288},[76,17820,17090],{"class":93},[76,17822,247],{"class":89},[76,17824,17095],{"class":93},[76,17826,247],{"class":89},[76,17828,17100],{"class":93},[76,17830,17831],{"class":78,"line":103},[76,17832,17105],{"class":82},[76,17834,17835,17837,17839,17841,17843,17845,17847],{"class":78,"line":1273},[76,17836,14810],{"class":89},[76,17838,17801],{"class":2035},[76,17840,17804],{"class":93},[76,17842,17336],{"class":2035},[76,17844,17115],{"class":93},[76,17846,17118],{"class":89},[76,17848,17121],{"class":93},[76,17850,17851,17853,17855,17857,17859,17861,17863],{"class":78,"line":1287},[76,17852,14810],{"class":89},[76,17854,17801],{"class":2035},[76,17856,17804],{"class":93},[76,17858,17364],{"class":2035},[76,17860,17115],{"class":93},[76,17862,17118],{"class":89},[76,17864,17135],{"class":93},[14,17866,17867],{},"创建circle.h",[67,17869,17871],{"className":190,"code":17870,"language":192,"meta":58,"style":58},"#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",[73,17872,17873,17880,17886,17896,17902,17908,17912,17916,17920,17934,17948,17952,17960,17968,17972,17976,17982,17986,17990],{"__ignoreMap":58},[76,17874,17875,17877],{"class":78,"line":79},[76,17876,17665],{"class":89},[76,17878,17879],{"class":2035}," once\n",[76,17881,17882,17884],{"class":78,"line":86},[76,17883,2021],{"class":89},[76,17885,2024],{"class":305},[76,17887,17888,17890,17892,17894],{"class":78,"line":97},[76,17889,2029],{"class":89},[76,17891,2032],{"class":89},[76,17893,2036],{"class":2035},[76,17895,1363],{"class":93},[76,17897,17898,17900],{"class":78,"line":103},[76,17899,2021],{"class":89},[76,17901,17789],{"class":305},[76,17903,17904,17906],{"class":78,"line":1273},[76,17905,14766],{"class":89},[76,17907,14769],{"class":2035},[76,17909,17910],{"class":78,"line":1287},[76,17911,1618],{"class":93},[76,17913,17914],{"class":78,"line":1293},[76,17915,14788],{"class":89},[76,17917,17918],{"class":78,"line":1384},[76,17919,17066],{"class":82},[76,17921,17922,17924,17926,17928,17930,17932],{"class":78,"line":1390},[76,17923,14981],{"class":89},[76,17925,17186],{"class":2035},[76,17927,202],{"class":93},[76,17929,14109],{"class":89},[76,17931,17193],{"class":5288},[76,17933,2791],{"class":93},[76,17935,17936,17938,17940,17942,17944,17946],{"class":78,"line":1402},[76,17937,14981],{"class":89},[76,17939,17208],{"class":2035},[76,17941,202],{"class":93},[76,17943,17213],{"class":2035},[76,17945,17216],{"class":5288},[76,17947,2791],{"class":93},[76,17949,17950],{"class":78,"line":1684},[76,17951,17229],{"class":82},[76,17953,17954,17956,17958],{"class":78,"line":1689},[76,17955,14810],{"class":89},[76,17957,17236],{"class":2035},[76,17959,5708],{"class":93},[76,17961,17962,17964,17966],{"class":78,"line":1695},[76,17963,17248],{"class":2035},[76,17965,17251],{"class":2035},[76,17967,5708],{"class":93},[76,17969,17970],{"class":78,"line":1700},[76,17971,2472],{"emptyLinePlaceholder":125},[76,17973,17974],{"class":78,"line":1714},[76,17975,15294],{"class":89},[76,17977,17978,17980],{"class":78,"line":1719},[76,17979,14810],{"class":89},[76,17981,14800],{"class":93},[76,17983,17984],{"class":78,"line":1725},[76,17985,17277],{"class":82},[76,17987,17988],{"class":78,"line":1746},[76,17989,17282],{"class":93},[76,17991,17992],{"class":78,"line":1751},[76,17993,4067],{"class":93},[14,17995,17996],{},"创建circle.cpp",[67,17998,18000],{"className":190,"code":17999,"language":192,"meta":58,"style":58},"#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",[73,18001,18002,18009,18032,18054,18059,18075],{"__ignoreMap":58},[76,18003,18004,18006],{"class":78,"line":79},[76,18005,2021],{"class":89},[76,18007,18008],{"class":305},"\u003Ccircle.h>\n",[76,18010,18011,18013,18016,18018,18020,18022,18024,18026,18028,18030],{"class":78,"line":86},[76,18012,5436],{"class":89},[76,18014,18015],{"class":2035}," Circle",[76,18017,17804],{"class":93},[76,18019,17532],{"class":2035},[76,18021,202],{"class":93},[76,18023,14109],{"class":89},[76,18025,17193],{"class":5288},[76,18027,17196],{"class":93},[76,18029,247],{"class":89},[76,18031,17201],{"class":93},[76,18033,18034,18036,18038,18040,18042,18044,18046,18048,18050,18052],{"class":78,"line":97},[76,18035,5436],{"class":89},[76,18037,18015],{"class":2035},[76,18039,17804],{"class":93},[76,18041,17584],{"class":2035},[76,18043,202],{"class":93},[76,18045,17213],{"class":2035},[76,18047,17216],{"class":5288},[76,18049,17219],{"class":93},[76,18051,247],{"class":89},[76,18053,17224],{"class":93},[76,18055,18056],{"class":78,"line":103},[76,18057,18058],{"class":82},"\u002F\u002F获取属性\n",[76,18060,18061,18063,18065,18067,18069,18071,18073],{"class":78,"line":1273},[76,18062,14109],{"class":89},[76,18064,18015],{"class":2035},[76,18066,17804],{"class":93},[76,18068,17416],{"class":2035},[76,18070,17115],{"class":93},[76,18072,17118],{"class":89},[76,18074,17243],{"class":93},[76,18076,18077,18079,18081,18083,18085,18087,18089],{"class":78,"line":1287},[76,18078,17213],{"class":2035},[76,18080,18015],{"class":2035},[76,18082,17804],{"class":93},[76,18084,17330],{"class":2035},[76,18086,17115],{"class":93},[76,18088,17118],{"class":89},[76,18090,17258],{"class":93},[14,18092,18093],{},"使用封装的类",[67,18095,18097],{"className":190,"code":18096,"language":192,"meta":58,"style":58},"#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",[73,18098,18099,18105,18115,18121,18127,18151,18155,18181,18207,18231,18245,18249,18261,18265,18269,18273,18285,18289,18293,18301,18305,18309,18313,18317,18321,18331,18337,18345,18353,18363,18369,18381,18389,18397,18407,18413,18425,18429,18437,18443],{"__ignoreMap":58},[76,18100,18101,18103],{"class":78,"line":79},[76,18102,2021],{"class":89},[76,18104,2024],{"class":305},[76,18106,18107,18109,18111,18113],{"class":78,"line":86},[76,18108,2029],{"class":89},[76,18110,2032],{"class":89},[76,18112,2036],{"class":2035},[76,18114,1363],{"class":93},[76,18116,18117,18119],{"class":78,"line":97},[76,18118,2021],{"class":89},[76,18120,18008],{"class":305},[76,18122,18123,18125],{"class":78,"line":103},[76,18124,2021],{"class":89},[76,18126,17789],{"class":305},[76,18128,18129,18131,18133,18135,18137,18139,18141,18143,18145,18147,18149],{"class":78,"line":1273},[76,18130,5436],{"class":89},[76,18132,17293],{"class":2035},[76,18134,202],{"class":93},[76,18136,17298],{"class":2035},[76,18138,10656],{"class":89},[76,18140,489],{"class":5288},[76,18142,578],{"class":93},[76,18144,17213],{"class":2035},[76,18146,10656],{"class":89},[76,18148,14],{"class":5288},[76,18150,208],{"class":93},[76,18152,18153],{"class":78,"line":1287},[76,18154,1618],{"class":93},[76,18156,18157,18159,18161,18163,18165,18167,18169,18171,18173,18175,18177,18179],{"class":78,"line":1293},[76,18158,14810],{"class":89},[76,18160,17323],{"class":93},[76,18162,247],{"class":89},[76,18164,16414],{"class":93},[76,18166,17330],{"class":2035},[76,18168,17333],{"class":93},[76,18170,17336],{"class":2035},[76,18172,13122],{"class":93},[76,18174,112],{"class":89},[76,18176,15960],{"class":93},[76,18178,17336],{"class":2035},[76,18180,5708],{"class":93},[76,18182,18183,18185,18187,18189,18191,18193,18195,18197,18199,18201,18203,18205],{"class":78,"line":1384},[76,18184,14810],{"class":89},[76,18186,17353],{"class":93},[76,18188,247],{"class":89},[76,18190,16414],{"class":93},[76,18192,17330],{"class":2035},[76,18194,17333],{"class":93},[76,18196,17364],{"class":2035},[76,18198,13122],{"class":93},[76,18200,112],{"class":89},[76,18202,15960],{"class":93},[76,18204,17364],{"class":2035},[76,18206,5708],{"class":93},[76,18208,18209,18211,18213,18215,18217,18219,18221,18223,18225,18227,18229],{"class":78,"line":1390},[76,18210,14810],{"class":89},[76,18212,17381],{"class":93},[76,18214,247],{"class":89},[76,18216,17386],{"class":2035},[76,18218,17389],{"class":93},[76,18220,655],{"class":89},[76,18222,17323],{"class":93},[76,18224,681],{"class":89},[76,18226,17353],{"class":93},[76,18228,655],{"class":89},[76,18230,17402],{"class":93},[76,18232,18233,18235,18237,18239,18241,18243],{"class":78,"line":1402},[76,18234,3173],{"class":89},[76,18236,17409],{"class":93},[76,18238,1109],{"class":89},[76,18240,16414],{"class":93},[76,18242,17416],{"class":2035},[76,18244,17419],{"class":93},[76,18246,18247],{"class":78,"line":1684},[76,18248,2102],{"class":93},[76,18250,18251,18253,18255,18257,18259],{"class":78,"line":1689},[76,18252,9741],{"class":93},[76,18254,1243],{"class":89},[76,18256,17432],{"class":305},[76,18258,1517],{"class":89},[76,18260,8912],{"class":93},[76,18262,18263],{"class":78,"line":1695},[76,18264,2259],{"class":93},[76,18266,18267],{"class":78,"line":1700},[76,18268,16895],{"class":89},[76,18270,18271],{"class":78,"line":1714},[76,18272,2102],{"class":93},[76,18274,18275,18277,18279,18281,18283],{"class":78,"line":1719},[76,18276,9741],{"class":93},[76,18278,1243],{"class":89},[76,18280,17457],{"class":305},[76,18282,1517],{"class":89},[76,18284,8912],{"class":93},[76,18286,18287],{"class":78,"line":1725},[76,18288,2259],{"class":93},[76,18290,18291],{"class":78,"line":1746},[76,18292,1637],{"class":93},[76,18294,18295,18297,18299],{"class":78,"line":1751},[76,18296,205],{"class":89},[76,18298,2045],{"class":2035},[76,18300,2048],{"class":93},[76,18302,18303],{"class":78,"line":1765},[76,18304,1618],{"class":93},[76,18306,18307],{"class":78,"line":1770},[76,18308,15125],{"class":82},[76,18310,18311],{"class":78,"line":1799},[76,18312,14872],{"class":93},[76,18314,18315],{"class":78,"line":1804},[76,18316,17494],{"class":93},[76,18318,18319],{"class":78,"line":1821},[76,18320,17066],{"class":82},[76,18322,18323,18325,18327,18329],{"class":78,"line":1826},[76,18324,1623],{"class":93},[76,18326,1243],{"class":89},[76,18328,17507],{"class":305},[76,18330,1363],{"class":93},[76,18332,18333,18335],{"class":78,"line":1831},[76,18334,14810],{"class":89},[76,18336,17516],{"class":93},[76,18338,18339,18341,18343],{"class":78,"line":1836},[76,18340,2084],{"class":93},[76,18342,1502],{"class":89},[76,18344,17525],{"class":93},[76,18346,18347,18349,18351],{"class":78,"line":1850},[76,18348,16667],{"class":93},[76,18350,17532],{"class":2035},[76,18352,17535],{"class":93},[76,18354,18355,18357,18359,18361],{"class":78,"line":1855},[76,18356,1623],{"class":93},[76,18358,1243],{"class":89},[76,18360,17544],{"class":305},[76,18362,1363],{"class":93},[76,18364,18365,18367],{"class":78,"line":2649},[76,18366,14810],{"class":89},[76,18368,17553],{"class":93},[76,18370,18371,18373,18375,18377,18379],{"class":78,"line":2663},[76,18372,2084],{"class":93},[76,18374,1502],{"class":89},[76,18376,1019],{"class":93},[76,18378,1502],{"class":89},[76,18380,17566],{"class":93},[76,18382,18383,18385,18387],{"class":78,"line":2671},[76,18384,17571],{"class":93},[76,18386,17574],{"class":2035},[76,18388,17577],{"class":93},[76,18390,18391,18393,18395],{"class":78,"line":2676},[76,18392,16667],{"class":93},[76,18394,17584],{"class":2035},[76,18396,17587],{"class":93},[76,18398,18399,18401,18403,18405],{"class":78,"line":2682},[76,18400,1623],{"class":93},[76,18402,1243],{"class":89},[76,18404,17596],{"class":305},[76,18406,1363],{"class":93},[76,18408,18409,18411],{"class":78,"line":2688},[76,18410,14810],{"class":89},[76,18412,17605],{"class":93},[76,18414,18415,18417,18419,18421,18423],{"class":78,"line":2693},[76,18416,2084],{"class":93},[76,18418,1502],{"class":89},[76,18420,17614],{"class":93},[76,18422,1502],{"class":89},[76,18424,17619],{"class":93},[76,18426,18427],{"class":78,"line":8020},[76,18428,17624],{"class":93},[76,18430,18431,18433,18435],{"class":78,"line":8044},[76,18432,17629],{"class":93},[76,18434,17574],{"class":2035},[76,18436,17634],{"class":93},[76,18438,18439,18441],{"class":78,"line":8049},[76,18440,17639],{"class":2035},[76,18442,17642],{"class":93},[76,18444,18445],{"class":78,"line":8055},[76,18446,1637],{"class":93},[140,18448,18450],{"id":18449},"_82对象的初始化清理","8.2对象的初始化清理",[1206,18452,18453,18456],{},[155,18454,18455],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[155,18457,18458],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[169,18460,18462],{"id":18461},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18464,18465,18466,18469],{},"对象的",[350,18467,18468],{},"初始化和清理","也是两个非常重要的安全问题",[14,18471,18472],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18474,18475],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18477,18478,18479,18482,18483,18486],{},"c++利用了",[350,18480,18481],{},"构造函数","和",[350,18484,18485],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18488,18489,18490],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[350,18491,18492],{},"我们不提供构造和析构，编译器会提供",[14,18494,18495],{},[350,18496,18497],{},"编译器提供的构造函数和析构函数是空实现。",[1206,18499,18500,18503],{},[155,18501,18502],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[155,18504,18505,18506,18509],{},"析构函数：主要作用在于对象",[350,18507,18508],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18511,18512,18515],{},[350,18513,18514],{},"构造函数语法：",[73,18516,18517],{},"类名(){}",[152,18519,18520,18523,18526,18529,18532],{},[155,18521,18522],{},"构造函数，没有返回值也不写void",[155,18524,18525],{},"函数名称与类名相同",[155,18527,18528],{},"构造函数可以有参数，因此可以发生重载",[155,18530,18531],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[155,18533,18534,18535,629],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[73,18536,18537],{},"Person(){}",[14,18539,18540,13867,18543],{},[350,18541,18542],{},"析构函数语法：",[73,18544,18545],{},"~类名(){}",[152,18547,18548,18551,18554,18560],{},[155,18549,18550],{},"析构函数，没有返回值也不写void",[155,18552,18553],{},"函数名称与类名相同,在名称前加上符号  ~",[155,18555,18556,18557],{},"析构函数不可以有参数，因此",[350,18558,18559],{},"不可以发生重载",[155,18561,18562],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[67,18564,18566],{"className":190,"code":18565,"language":192,"meta":58,"style":58},"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",[73,18567,18568,18574,18578,18582,18587,18594,18598,18611,18615,18620,18627,18631,18644,18648,18652,18656,18660,18668,18672,18680,18684,18688,18696,18700,18705,18709,18716,18720,18733,18737,18745],{"__ignoreMap":58},[76,18569,18570,18572],{"class":78,"line":79},[76,18571,14766],{"class":89},[76,18573,15243],{"class":2035},[76,18575,18576],{"class":78,"line":86},[76,18577,1618],{"class":93},[76,18579,18580],{"class":78,"line":97},[76,18581,14788],{"class":89},[76,18583,18584],{"class":78,"line":103},[76,18585,18586],{"class":82},"    \u002F\u002F构造函数\n",[76,18588,18589,18592],{"class":78,"line":1273},[76,18590,18591],{"class":2035},"    Person",[76,18593,2048],{"class":93},[76,18595,18596],{"class":78,"line":1287},[76,18597,2102],{"class":93},[76,18599,18600,18602,18604,18607,18609],{"class":78,"line":1293},[76,18601,9741],{"class":93},[76,18603,1243],{"class":89},[76,18605,18606],{"class":305}," \"Person的构造函数调用\"",[76,18608,1517],{"class":89},[76,18610,8912],{"class":93},[76,18612,18613],{"class":78,"line":1384},[76,18614,2259],{"class":93},[76,18616,18617],{"class":78,"line":1390},[76,18618,18619],{"class":82},"    \u002F\u002F析构函数\n",[76,18621,18622,18625],{"class":78,"line":1402},[76,18623,18624],{"class":2035},"    ~Person",[76,18626,2048],{"class":93},[76,18628,18629],{"class":78,"line":1684},[76,18630,2102],{"class":93},[76,18632,18633,18635,18637,18640,18642],{"class":78,"line":1689},[76,18634,9741],{"class":93},[76,18636,1243],{"class":89},[76,18638,18639],{"class":305}," \"Person的析构函数调用\"",[76,18641,1517],{"class":89},[76,18643,8912],{"class":93},[76,18645,18646],{"class":78,"line":1695},[76,18647,2259],{"class":93},[76,18649,18650],{"class":78,"line":1700},[76,18651,2472],{"emptyLinePlaceholder":125},[76,18653,18654],{"class":78,"line":1714},[76,18655,4067],{"class":93},[76,18657,18658],{"class":78,"line":1719},[76,18659,2472],{"emptyLinePlaceholder":125},[76,18661,18662,18664,18666],{"class":78,"line":1725},[76,18663,5436],{"class":89},[76,18665,5660],{"class":2035},[76,18667,2048],{"class":93},[76,18669,18670],{"class":78,"line":1746},[76,18671,1618],{"class":93},[76,18673,18674,18677],{"class":78,"line":1751},[76,18675,18676],{"class":93},"    Person p;",[76,18678,18679],{"class":82},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[76,18681,18682],{"class":78,"line":1765},[76,18683,1637],{"class":93},[76,18685,18686],{"class":78,"line":1770},[76,18687,2472],{"emptyLinePlaceholder":125},[76,18689,18690,18692,18694],{"class":78,"line":1799},[76,18691,205],{"class":89},[76,18693,2045],{"class":2035},[76,18695,10925],{"class":93},[76,18697,18698],{"class":78,"line":1804},[76,18699,13282],{"class":93},[76,18701,18702],{"class":78,"line":1821},[76,18703,18704],{"class":82},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[76,18706,18707],{"class":78,"line":1826},[76,18708,2472],{"emptyLinePlaceholder":125},[76,18710,18711,18713],{"class":78,"line":1831},[76,18712,18676],{"class":93},[76,18714,18715],{"class":82},"\u002F\u002F只有构造函数\n",[76,18717,18718],{"class":78,"line":1836},[76,18719,2472],{"emptyLinePlaceholder":125},[76,18721,18722,18724,18726,18728,18730],{"class":78,"line":1850},[76,18723,2375],{"class":2035},[76,18725,202],{"class":93},[76,18727,2380],{"class":305},[76,18729,6038],{"class":93},[76,18731,18732],{"class":82},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[76,18734,18735],{"class":78,"line":1855},[76,18736,2472],{"emptyLinePlaceholder":125},[76,18738,18739,18741,18743],{"class":78,"line":2649},[76,18740,4162],{"class":89},[76,18742,4165],{"class":250},[76,18744,1363],{"class":93},[76,18746,18747],{"class":78,"line":2663},[76,18748,1637],{"class":93},[14,18750,18751],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[169,18753,18755],{"id":18754},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18757,18758],{},"两种分类方式：",[14,18760,18761],{},"​\t按参数分为： 有参构造和无参构造",[14,18763,18764],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18766,18767],{},"三种调用方式：",[14,18769,18770],{},"​\t括号法",[14,18772,18773],{},"​\t显示法",[14,18775,18776],{},"​\t隐式转换法",[67,18778,18780],{"className":190,"code":18779,"language":192,"meta":58,"style":58},"#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",[73,18781,18782,18788,18798,18803,18808,18813,18818,18822,18830,18834,18838,18842,18848,18852,18865,18869,18881,18885,18894,18907,18911,18915,18921,18925,18938,18942,18947,18963,18967,18972,18981,18994,18998,19004,19008,19013,19021,19025,19030,19034,19042,19046,19051,19056,19061,19066,19071,19075,19080,19085,19090,19095,19099,19104,19109,19125,19137,19142,19146,19151,19156,19161,19165,19170,19184,19197,19201,19209,19213,19219,19225,19233],{"__ignoreMap":58},[76,18783,18784,18786],{"class":78,"line":79},[76,18785,2021],{"class":89},[76,18787,2024],{"class":305},[76,18789,18790,18792,18794,18796],{"class":78,"line":86},[76,18791,2029],{"class":89},[76,18793,2032],{"class":89},[76,18795,2036],{"class":2035},[76,18797,1363],{"class":93},[76,18799,18800],{"class":78,"line":97},[76,18801,18802],{"class":82},"\u002F\u002F1.构造函数的分类及调用\n",[76,18804,18805],{"class":78,"line":103},[76,18806,18807],{"class":82},"\u002F\u002F分类\n",[76,18809,18810],{"class":78,"line":1273},[76,18811,18812],{"class":82},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[76,18814,18815],{"class":78,"line":1287},[76,18816,18817],{"class":82},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[76,18819,18820],{"class":78,"line":1293},[76,18821,2472],{"emptyLinePlaceholder":125},[76,18823,18824,18826,18828],{"class":78,"line":1384},[76,18825,14766],{"class":89},[76,18827,15641],{"class":2035},[76,18829,2746],{"class":93},[76,18831,18832],{"class":78,"line":1390},[76,18833,1618],{"class":93},[76,18835,18836],{"class":78,"line":1402},[76,18837,14788],{"class":89},[76,18839,18840],{"class":78,"line":1684},[76,18841,18586],{"class":82},[76,18843,18844,18846],{"class":78,"line":1689},[76,18845,18591],{"class":2035},[76,18847,2048],{"class":93},[76,18849,18850],{"class":78,"line":1695},[76,18851,2102],{"class":93},[76,18853,18854,18856,18858,18861,18863],{"class":78,"line":1700},[76,18855,3523],{"class":93},[76,18857,1243],{"class":89},[76,18859,18860],{"class":305},"\"Person构造函数无参构造\"",[76,18862,1243],{"class":89},[76,18864,1265],{"class":93},[76,18866,18867],{"class":78,"line":1714},[76,18868,2259],{"class":93},[76,18870,18871,18873,18875,18877,18879],{"class":78,"line":1719},[76,18872,18591],{"class":2035},[76,18874,202],{"class":93},[76,18876,205],{"class":89},[76,18878,1471],{"class":5288},[76,18880,208],{"class":93},[76,18882,18883],{"class":78,"line":1725},[76,18884,2102],{"class":93},[76,18886,18887,18890,18892],{"class":78,"line":1746},[76,18888,18889],{"class":93},"        age",[76,18891,247],{"class":89},[76,18893,6269],{"class":93},[76,18895,18896,18898,18900,18903,18905],{"class":78,"line":1751},[76,18897,3523],{"class":93},[76,18899,1243],{"class":89},[76,18901,18902],{"class":305},"\"Person构造函数有参构造\"",[76,18904,1243],{"class":89},[76,18906,1265],{"class":93},[76,18908,18909],{"class":78,"line":1765},[76,18910,2259],{"class":93},[76,18912,18913],{"class":78,"line":1770},[76,18914,18619],{"class":82},[76,18916,18917,18919],{"class":78,"line":1799},[76,18918,18624],{"class":2035},[76,18920,2048],{"class":93},[76,18922,18923],{"class":78,"line":1804},[76,18924,2102],{"class":93},[76,18926,18927,18929,18931,18934,18936],{"class":78,"line":1821},[76,18928,3523],{"class":93},[76,18930,1243],{"class":89},[76,18932,18933],{"class":305},"\"Person析构函数被调用\"",[76,18935,1243],{"class":89},[76,18937,1265],{"class":93},[76,18939,18940],{"class":78,"line":1826},[76,18941,2259],{"class":93},[76,18943,18944],{"class":78,"line":1831},[76,18945,18946],{"class":82},"    \u002F\u002F拷贝构造函数\n",[76,18948,18949,18951,18953,18955,18957,18959,18961],{"class":78,"line":1836},[76,18950,18591],{"class":2035},[76,18952,202],{"class":93},[76,18954,6864],{"class":89},[76,18956,15641],{"class":2035},[76,18958,10656],{"class":89},[76,18960,14],{"class":5288},[76,18962,208],{"class":93},[76,18964,18965],{"class":78,"line":1850},[76,18966,2102],{"class":93},[76,18968,18969],{"class":78,"line":1855},[76,18970,18971],{"class":82},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[76,18973,18974,18976,18978],{"class":78,"line":2649},[76,18975,18889],{"class":93},[76,18977,247],{"class":89},[76,18979,18980],{"class":93},"p.age;\n",[76,18982,18983,18985,18987,18990,18992],{"class":78,"line":2663},[76,18984,3523],{"class":93},[76,18986,1243],{"class":89},[76,18988,18989],{"class":305},"\"Person拷贝构造函数被调用\"",[76,18991,1243],{"class":89},[76,18993,1265],{"class":93},[76,18995,18996],{"class":78,"line":2671},[76,18997,2259],{"class":93},[76,18999,19000,19002],{"class":78,"line":2676},[76,19001,2057],{"class":89},[76,19003,7869],{"class":93},[76,19005,19006],{"class":78,"line":2682},[76,19007,4067],{"class":93},[76,19009,19010],{"class":78,"line":2688},[76,19011,19012],{"class":82},"\u002F\u002F调用\n",[76,19014,19015,19017,19019],{"class":78,"line":2693},[76,19016,5436],{"class":89},[76,19018,5660],{"class":2035},[76,19020,2048],{"class":93},[76,19022,19023],{"class":78,"line":8020},[76,19024,1618],{"class":93},[76,19026,19027],{"class":78,"line":8044},[76,19028,19029],{"class":82},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[76,19031,19032],{"class":78,"line":8049},[76,19033,1637],{"class":93},[76,19035,19036,19038,19040],{"class":78,"line":8055},[76,19037,5436],{"class":89},[76,19039,5729],{"class":2035},[76,19041,2048],{"class":93},[76,19043,19044],{"class":78,"line":8082},[76,19045,1618],{"class":93},[76,19047,19048],{"class":78,"line":8087},[76,19049,19050],{"class":82},"    \u002F\u002F1.括号法\n",[76,19052,19053],{"class":78,"line":8093},[76,19054,19055],{"class":82},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[76,19057,19058],{"class":78,"line":8105},[76,19059,19060],{"class":82},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[76,19062,19063],{"class":78,"line":8117},[76,19064,19065],{"class":82},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[76,19067,19068],{"class":78,"line":8129},[76,19069,19070],{"class":82},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[76,19072,19073],{"class":78,"line":9788},[76,19074,2472],{"emptyLinePlaceholder":125},[76,19076,19077],{"class":78,"line":9813},[76,19078,19079],{"class":82},"    \u002F\u002F注意事项\n",[76,19081,19082],{"class":78,"line":9836},[76,19083,19084],{"class":82},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[76,19086,19087],{"class":78,"line":9860},[76,19088,19089],{"class":82},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[76,19091,19092],{"class":78,"line":9865},[76,19093,19094],{"class":82},"    \u002F\u002F Person p4();\n",[76,19096,19097],{"class":78,"line":9870},[76,19098,2472],{"emptyLinePlaceholder":125},[76,19100,19101],{"class":78,"line":9875},[76,19102,19103],{"class":82},"    \u002F\u002F2.显示法\n",[76,19105,19106],{"class":78,"line":9884},[76,19107,19108],{"class":93},"    Person p1;\n",[76,19110,19111,19114,19116,19119,19121,19123],{"class":78,"line":9889},[76,19112,19113],{"class":93},"    Person p2",[76,19115,247],{"class":89},[76,19117,19118],{"class":2035},"Person",[76,19120,202],{"class":93},[76,19122,646],{"class":250},[76,19124,2791],{"class":93},[76,19126,19127,19130,19132,19134],{"class":78,"line":9895},[76,19128,19129],{"class":93},"    Person p3",[76,19131,247],{"class":89},[76,19133,19118],{"class":2035},[76,19135,19136],{"class":93},"(p2);\n",[76,19138,19139],{"class":78,"line":9916},[76,19140,19141],{"class":82},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[76,19143,19144],{"class":78,"line":9922},[76,19145,2472],{"emptyLinePlaceholder":125},[76,19147,19148],{"class":78,"line":9936},[76,19149,19150],{"class":82},"    \u002F\u002F 注意事项2\n",[76,19152,19153],{"class":78,"line":9942},[76,19154,19155],{"class":82},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[76,19157,19158],{"class":78,"line":9969},[76,19159,19160],{"class":82},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[76,19162,19163],{"class":78,"line":9978},[76,19164,2472],{"emptyLinePlaceholder":125},[76,19166,19167],{"class":78,"line":9984},[76,19168,19169],{"class":82},"    \u002F\u002F3.隐士转换法\n",[76,19171,19172,19175,19177,19179,19181],{"class":78,"line":9992},[76,19173,19174],{"class":93},"    Person p4",[76,19176,247],{"class":89},[76,19178,646],{"class":250},[76,19180,257],{"class":93},[76,19182,19183],{"class":82},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[76,19185,19186,19189,19191,19194],{"class":78,"line":9997},[76,19187,19188],{"class":93},"    Person p5",[76,19190,247],{"class":89},[76,19192,19193],{"class":93},"p4;",[76,19195,19196],{"class":82}," \u002F\u002F 这里会调用拷贝构造函数\n",[76,19198,19199],{"class":78,"line":16676},[76,19200,1637],{"class":93},[76,19202,19203,19205,19207],{"class":78,"line":16682},[76,19204,205],{"class":89},[76,19206,2045],{"class":2035},[76,19208,2048],{"class":93},[76,19210,19211],{"class":78,"line":16705},[76,19212,1618],{"class":93},[76,19214,19215,19217],{"class":78,"line":16711},[76,19216,5705],{"class":2035},[76,19218,5708],{"class":93},[76,19220,19221,19223],{"class":78,"line":16734},[76,19222,5774],{"class":2035},[76,19224,5708],{"class":93},[76,19226,19227,19229,19231],{"class":78,"line":16748},[76,19228,4162],{"class":89},[76,19230,4165],{"class":250},[76,19232,1363],{"class":93},[76,19234,19235],{"class":78,"line":16768},[76,19236,1637],{"class":93},[14,19238,19239,19242],{},[350,19240,19241],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[169,19244,19246],{"id":19245},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19248,19249],{},"C++中拷贝构造函数调用时机通常有三种情况",[1206,19251,19252,19255,19258],{},[155,19253,19254],{},"使用一个已经创建完毕的对象来初始化一个新对象",[155,19256,19257],{},"值传递的方式给函数参数传值",[155,19259,19260],{},"以值方式返回局部对象",[67,19262,19264],{"className":190,"code":19263,"language":192,"meta":58,"style":58},"#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",[73,19265,19266,19272,19282,19286,19291,19295,19300,19305,19310,19316,19320,19324,19330,19334,19347,19351,19356,19368,19372,19380,19393,19397,19401,19417,19421,19430,19443,19447,19453,19457,19469,19473,19479,19483,19487,19495,19499,19512,19520,19538,19542,19547,19552,19567,19571,19584,19588,19596,19600,19604,19612,19616,19621,19630,19634,19638,19663,19673,19677,19685,19689,19700,19725,19729,19733,19737,19745,19749,19754,19759,19766,19771,19776,19781,19786,19790,19795,19799,19804,19808,19813,19818,19822,19826,19831,19836,19844],{"__ignoreMap":58},[76,19267,19268,19270],{"class":78,"line":79},[76,19269,2021],{"class":89},[76,19271,2024],{"class":305},[76,19273,19274,19276,19278,19280],{"class":78,"line":86},[76,19275,2029],{"class":89},[76,19277,2032],{"class":89},[76,19279,2036],{"class":2035},[76,19281,1363],{"class":93},[76,19283,19284],{"class":78,"line":97},[76,19285,2472],{"emptyLinePlaceholder":125},[76,19287,19288],{"class":78,"line":103},[76,19289,19290],{"class":82},"\u002F\u002F拷贝构造函数调用时机\n",[76,19292,19293],{"class":78,"line":1273},[76,19294,2472],{"emptyLinePlaceholder":125},[76,19296,19297],{"class":78,"line":1287},[76,19298,19299],{"class":82},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[76,19301,19302],{"class":78,"line":1293},[76,19303,19304],{"class":82},"\u002F\u002F2.值传递的方式给函数参数传值\n",[76,19306,19307],{"class":78,"line":1384},[76,19308,19309],{"class":82},"\u002F\u002F3.以值方式返回局部对象\n",[76,19311,19312,19314],{"class":78,"line":1390},[76,19313,14766],{"class":89},[76,19315,15243],{"class":2035},[76,19317,19318],{"class":78,"line":1402},[76,19319,1618],{"class":93},[76,19321,19322],{"class":78,"line":1684},[76,19323,14788],{"class":89},[76,19325,19326,19328],{"class":78,"line":1689},[76,19327,18591],{"class":2035},[76,19329,2048],{"class":93},[76,19331,19332],{"class":78,"line":1695},[76,19333,2102],{"class":93},[76,19335,19336,19338,19340,19343,19345],{"class":78,"line":1700},[76,19337,9741],{"class":93},[76,19339,1243],{"class":89},[76,19341,19342],{"class":305}," \"Person的默认构造函数调用\"",[76,19344,1517],{"class":89},[76,19346,8912],{"class":93},[76,19348,19349],{"class":78,"line":1714},[76,19350,2259],{"class":93},[76,19352,19353],{"class":78,"line":1719},[76,19354,19355],{"class":82},"    \u002F\u002F有参构造\n",[76,19357,19358,19360,19362,19364,19366],{"class":78,"line":1725},[76,19359,18591],{"class":2035},[76,19361,202],{"class":93},[76,19363,205],{"class":89},[76,19365,15761],{"class":5288},[76,19367,208],{"class":93},[76,19369,19370],{"class":78,"line":1746},[76,19371,2102],{"class":93},[76,19373,19374,19376,19378],{"class":78,"line":1751},[76,19375,15815],{"class":93},[76,19377,247],{"class":89},[76,19379,7869],{"class":93},[76,19381,19382,19384,19386,19389,19391],{"class":78,"line":1765},[76,19383,9741],{"class":93},[76,19385,1243],{"class":89},[76,19387,19388],{"class":305}," \"Person的有参构造函数调用\"",[76,19390,1517],{"class":89},[76,19392,8912],{"class":93},[76,19394,19395],{"class":78,"line":1770},[76,19396,2259],{"class":93},[76,19398,19399],{"class":78,"line":1799},[76,19400,18946],{"class":82},[76,19402,19403,19405,19407,19409,19411,19413,19415],{"class":78,"line":1804},[76,19404,18591],{"class":2035},[76,19406,202],{"class":93},[76,19408,6864],{"class":89},[76,19410,15641],{"class":2035},[76,19412,10656],{"class":89},[76,19414,14],{"class":5288},[76,19416,208],{"class":93},[76,19418,19419],{"class":78,"line":1821},[76,19420,2102],{"class":93},[76,19422,19423,19425,19427],{"class":78,"line":1826},[76,19424,15815],{"class":93},[76,19426,247],{"class":89},[76,19428,19429],{"class":93}," p.m_Age;\n",[76,19431,19432,19434,19436,19439,19441],{"class":78,"line":1831},[76,19433,9741],{"class":93},[76,19435,1243],{"class":89},[76,19437,19438],{"class":305}," \"Person的拷贝构造函数调用\"",[76,19440,1517],{"class":89},[76,19442,8912],{"class":93},[76,19444,19445],{"class":78,"line":1836},[76,19446,2259],{"class":93},[76,19448,19449,19451],{"class":78,"line":1850},[76,19450,18624],{"class":2035},[76,19452,2048],{"class":93},[76,19454,19455],{"class":78,"line":1855},[76,19456,2102],{"class":93},[76,19458,19459,19461,19463,19465,19467],{"class":78,"line":2649},[76,19460,9741],{"class":93},[76,19462,1243],{"class":89},[76,19464,18639],{"class":305},[76,19466,1517],{"class":89},[76,19468,8912],{"class":93},[76,19470,19471],{"class":78,"line":2663},[76,19472,2259],{"class":93},[76,19474,19475,19477],{"class":78,"line":2671},[76,19476,2057],{"class":89},[76,19478,15738],{"class":93},[76,19480,19481],{"class":78,"line":2676},[76,19482,4067],{"class":93},[76,19484,19485],{"class":78,"line":2682},[76,19486,19299],{"class":82},[76,19488,19489,19491,19493],{"class":78,"line":2688},[76,19490,5436],{"class":89},[76,19492,5660],{"class":2035},[76,19494,2048],{"class":93},[76,19496,19497],{"class":78,"line":2693},[76,19498,1618],{"class":93},[76,19500,19501,19504,19506,19508,19510],{"class":78,"line":8020},[76,19502,19503],{"class":93},"    Person ",[76,19505,7202],{"class":2035},[76,19507,202],{"class":93},[76,19509,899],{"class":250},[76,19511,2791],{"class":93},[76,19513,19514,19516,19518],{"class":78,"line":8044},[76,19515,19503],{"class":93},[76,19517,7105],{"class":2035},[76,19519,17587],{"class":93},[76,19521,19522,19524,19526,19529,19531,19534,19536],{"class":78,"line":8049},[76,19523,1623],{"class":93},[76,19525,1243],{"class":89},[76,19527,19528],{"class":305},"\"P2的年龄为：\"",[76,19530,1243],{"class":89},[76,19532,19533],{"class":93},"p2.m_Age",[76,19535,1243],{"class":89},[76,19537,1265],{"class":93},[76,19539,19540],{"class":78,"line":8055},[76,19541,1637],{"class":93},[76,19543,19544],{"class":78,"line":8082},[76,19545,19546],{"class":82},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[76,19548,19549],{"class":78,"line":8087},[76,19550,19551],{"class":82},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[76,19553,19554,19556,19559,19561,19563,19565],{"class":78,"line":8093},[76,19555,5436],{"class":89},[76,19557,19558],{"class":2035}," doWork",[76,19560,202],{"class":93},[76,19562,19118],{"class":2035},[76,19564,6897],{"class":5288},[76,19566,208],{"class":93},[76,19568,19569],{"class":78,"line":8105},[76,19570,1618],{"class":93},[76,19572,19573,19575,19577,19580,19582],{"class":78,"line":8117},[76,19574,6601],{"class":93},[76,19576,1243],{"class":89},[76,19578,19579],{"class":305}," \"doWork函数调用\"",[76,19581,1517],{"class":89},[76,19583,8912],{"class":93},[76,19585,19586],{"class":78,"line":8129},[76,19587,1637],{"class":93},[76,19589,19590,19592,19594],{"class":78,"line":9788},[76,19591,5436],{"class":89},[76,19593,5729],{"class":2035},[76,19595,2048],{"class":93},[76,19597,19598],{"class":78,"line":9813},[76,19599,1618],{"class":93},[76,19601,19602],{"class":78,"line":9836},[76,19603,15385],{"class":93},[76,19605,19606,19609],{"class":78,"line":9860},[76,19607,19608],{"class":2035},"    doWork",[76,19610,19611],{"class":93},"(p);\n",[76,19613,19614],{"class":78,"line":9865},[76,19615,1637],{"class":93},[76,19617,19618],{"class":78,"line":9870},[76,19619,19620],{"class":82},"\u002F\u002F 3.以值方式返回局部对象\n",[76,19622,19623,19625,19628],{"class":78,"line":9875},[76,19624,19118],{"class":2035},[76,19626,19627],{"class":2035}," doWork2",[76,19629,2048],{"class":93},[76,19631,19632],{"class":78,"line":9884},[76,19633,1618],{"class":93},[76,19635,19636],{"class":78,"line":9889},[76,19637,19108],{"class":93},[76,19639,19640,19642,19644,19646,19648,19650,19652,19654,19656,19658,19660],{"class":78,"line":9895},[76,19641,1623],{"class":93},[76,19643,1243],{"class":89},[76,19645,202],{"class":93},[76,19647,205],{"class":89},[76,19649,6590],{"class":89},[76,19651,629],{"class":93},[76,19653,553],{"class":89},[76,19655,7202],{"class":93},[76,19657,1243],{"class":89},[76,19659,1311],{"class":93},[76,19661,19662],{"class":82},"\u002F\u002F打印p1的地址\n",[76,19664,19665,19667,19670],{"class":78,"line":9916},[76,19666,4162],{"class":89},[76,19668,19669],{"class":93}," p1;",[76,19671,19672],{"class":82},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[76,19674,19675],{"class":78,"line":9922},[76,19676,1637],{"class":93},[76,19678,19679,19681,19683],{"class":78,"line":9936},[76,19680,5436],{"class":89},[76,19682,5801],{"class":2035},[76,19684,2048],{"class":93},[76,19686,19687],{"class":78,"line":9942},[76,19688,1618],{"class":93},[76,19690,19691,19694,19696,19698],{"class":78,"line":9969},[76,19692,19693],{"class":93},"    Person p ",[76,19695,247],{"class":89},[76,19697,19627],{"class":2035},[76,19699,5708],{"class":93},[76,19701,19702,19704,19706,19708,19710,19712,19714,19716,19718,19720,19722],{"class":78,"line":9978},[76,19703,1623],{"class":93},[76,19705,1243],{"class":89},[76,19707,202],{"class":93},[76,19709,205],{"class":89},[76,19711,6590],{"class":89},[76,19713,629],{"class":93},[76,19715,553],{"class":89},[76,19717,14],{"class":93},[76,19719,1243],{"class":89},[76,19721,1311],{"class":93},[76,19723,19724],{"class":82},"\u002F\u002F打印p的地址\n",[76,19726,19727],{"class":78,"line":9984},[76,19728,1637],{"class":93},[76,19730,19731],{"class":78,"line":9992},[76,19732,2472],{"emptyLinePlaceholder":125},[76,19734,19735],{"class":78,"line":9997},[76,19736,2472],{"emptyLinePlaceholder":125},[76,19738,19739,19741,19743],{"class":78,"line":16676},[76,19740,205],{"class":89},[76,19742,2045],{"class":2035},[76,19744,2048],{"class":93},[76,19746,19747],{"class":78,"line":16682},[76,19748,1618],{"class":93},[76,19750,19751],{"class":78,"line":16705},[76,19752,19753],{"class":82},"    \u002F\u002F test01();\n",[76,19755,19756],{"class":78,"line":16711},[76,19757,19758],{"class":82},"    \u002F\u002F test02();\n",[76,19760,19761,19764],{"class":78,"line":16734},[76,19762,19763],{"class":2035},"    test03",[76,19765,5708],{"class":93},[76,19767,19768],{"class":78,"line":16748},[76,19769,19770],{"class":82},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[76,19772,19773],{"class":78,"line":16768},[76,19774,19775],{"class":82},"\u002F\u002F 输出结果如下：\n",[76,19777,19778],{"class":78,"line":16774},[76,19779,19780],{"class":82},"\u002F\u002F Person的默认构造函数调用\n",[76,19782,19783],{"class":78,"line":16785},[76,19784,19785],{"class":82},"\u002F\u002F 0x7fffffffceec\n",[76,19787,19788],{"class":78,"line":16808},[76,19789,19785],{"class":82},[76,19791,19792],{"class":78,"line":16830},[76,19793,19794],{"class":82},"\u002F\u002F Person的析构函数调用\n",[76,19796,19797],{"class":78,"line":16835},[76,19798,2472],{"emptyLinePlaceholder":125},[76,19800,19801],{"class":78,"line":16841},[76,19802,19803],{"class":82},"\u002F\u002F 之前的输出结果如下：\n",[76,19805,19806],{"class":78,"line":16855},[76,19807,19780],{"class":82},[76,19809,19810],{"class":78,"line":16868},[76,19811,19812],{"class":82},"\u002F\u002F 地址\n",[76,19814,19815],{"class":78,"line":16873},[76,19816,19817],{"class":82},"\u002F\u002F Person的拷贝构造函数调用\n",[76,19819,19820],{"class":78,"line":16887},[76,19821,19794],{"class":82},[76,19823,19824],{"class":78,"line":16892},[76,19825,19812],{"class":82},[76,19827,19828],{"class":78,"line":16898},[76,19829,19830],{"class":82},"\u002F\u002F (这两次输出的地址也是不同的) \n",[76,19832,19833],{"class":78,"line":16903},[76,19834,19835],{"class":82},"\u002F\u002F Person的析构函数调用     \n",[76,19837,19838,19840,19842],{"class":78,"line":16917},[76,19839,4162],{"class":89},[76,19841,4165],{"class":250},[76,19843,1363],{"class":93},[76,19845,19846],{"class":78,"line":16922},[76,19847,1637],{"class":93},[14,19849,19850],{},"简化版理解",[67,19852,19854],{"className":190,"code":19853,"language":192,"meta":58,"style":58},"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",[73,19855,19856,19864,19868,19874,19887,19898,19902,19914,19927,19935,19939,19955,19968,19977,19981,19986,19992,20005,20009,20013,20020,20024,20028,20033,20041,20045,20061,20074,20087,20091,20096,20104,20108,20112,20117,20122,20138,20146,20153,20159,20163,20167,20172,20180,20184,20188,20211,20218,20222,20226,20234,20238,20248,20270,20274,20278,20282,20290,20294,20299,20304,20310,20314,20324,20328,20336],{"__ignoreMap":58},[76,19857,19858,19860,19862],{"class":78,"line":79},[76,19859,14766],{"class":89},[76,19861,15641],{"class":2035},[76,19863,15644],{"class":93},[76,19865,19866],{"class":78,"line":86},[76,19867,14788],{"class":89},[76,19869,19870,19872],{"class":78,"line":97},[76,19871,18591],{"class":2035},[76,19873,10925],{"class":93},[76,19875,19876,19878,19880,19883,19885],{"class":78,"line":103},[76,19877,9741],{"class":93},[76,19879,1243],{"class":89},[76,19881,19882],{"class":305}," \"无参构造函数!\"",[76,19884,1517],{"class":89},[76,19886,8912],{"class":93},[76,19888,19889,19892,19894,19896],{"class":78,"line":1273},[76,19890,19891],{"class":93},"        mAge ",[76,19893,247],{"class":89},[76,19895,4165],{"class":250},[76,19897,1363],{"class":93},[76,19899,19900],{"class":78,"line":1287},[76,19901,2259],{"class":93},[76,19903,19904,19906,19908,19910,19912],{"class":78,"line":1293},[76,19905,18591],{"class":2035},[76,19907,202],{"class":93},[76,19909,205],{"class":89},[76,19911,15761],{"class":5288},[76,19913,12514],{"class":93},[76,19915,19916,19918,19920,19923,19925],{"class":78,"line":1384},[76,19917,9741],{"class":93},[76,19919,1243],{"class":89},[76,19921,19922],{"class":305}," \"有参构造函数!\"",[76,19924,1517],{"class":89},[76,19926,8912],{"class":93},[76,19928,19929,19931,19933],{"class":78,"line":1390},[76,19930,19891],{"class":93},[76,19932,247],{"class":89},[76,19934,7869],{"class":93},[76,19936,19937],{"class":78,"line":1402},[76,19938,2259],{"class":93},[76,19940,19941,19943,19945,19947,19949,19951,19953],{"class":78,"line":1684},[76,19942,18591],{"class":2035},[76,19944,202],{"class":93},[76,19946,6864],{"class":89},[76,19948,15641],{"class":2035},[76,19950,553],{"class":89},[76,19952,6897],{"class":5288},[76,19954,12514],{"class":93},[76,19956,19957,19959,19961,19964,19966],{"class":78,"line":1689},[76,19958,9741],{"class":93},[76,19960,1243],{"class":89},[76,19962,19963],{"class":305}," \"拷贝构造函数!\"",[76,19965,1517],{"class":89},[76,19967,8912],{"class":93},[76,19969,19970,19972,19974],{"class":78,"line":1695},[76,19971,19891],{"class":93},[76,19973,247],{"class":89},[76,19975,19976],{"class":93}," p.mAge;\n",[76,19978,19979],{"class":78,"line":1700},[76,19980,2259],{"class":93},[76,19982,19983],{"class":78,"line":1714},[76,19984,19985],{"class":82},"    \u002F\u002F析构函数在释放内存之前调用\n",[76,19987,19988,19990],{"class":78,"line":1719},[76,19989,18624],{"class":2035},[76,19991,10925],{"class":93},[76,19993,19994,19996,19998,20001,20003],{"class":78,"line":1725},[76,19995,9741],{"class":93},[76,19997,1243],{"class":89},[76,19999,20000],{"class":305}," \"析构函数!\"",[76,20002,1517],{"class":89},[76,20004,8912],{"class":93},[76,20006,20007],{"class":78,"line":1746},[76,20008,2259],{"class":93},[76,20010,20011],{"class":78,"line":1751},[76,20012,14788],{"class":89},[76,20014,20015,20017],{"class":78,"line":1765},[76,20016,2057],{"class":89},[76,20018,20019],{"class":93}," mAge;\n",[76,20021,20022],{"class":78,"line":1770},[76,20023,4067],{"class":93},[76,20025,20026],{"class":78,"line":1799},[76,20027,2472],{"emptyLinePlaceholder":125},[76,20029,20030],{"class":78,"line":1804},[76,20031,20032],{"class":82},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[76,20034,20035,20037,20039],{"class":78,"line":1821},[76,20036,5436],{"class":89},[76,20038,5660],{"class":2035},[76,20040,10925],{"class":93},[76,20042,20043],{"class":78,"line":1826},[76,20044,2472],{"emptyLinePlaceholder":125},[76,20046,20047,20049,20052,20054,20056,20058],{"class":78,"line":1831},[76,20048,19503],{"class":93},[76,20050,20051],{"class":2035},"man",[76,20053,202],{"class":93},[76,20055,512],{"class":250},[76,20057,6038],{"class":93},[76,20059,20060],{"class":82}," \u002F\u002Fp对象已经创建完毕\n",[76,20062,20063,20065,20068,20071],{"class":78,"line":1836},[76,20064,19503],{"class":93},[76,20066,20067],{"class":2035},"newman",[76,20069,20070],{"class":93},"(man);",[76,20072,20073],{"class":82}," \u002F\u002F调用拷贝构造函数\n",[76,20075,20076,20079,20081,20084],{"class":78,"line":1850},[76,20077,20078],{"class":93},"    Person newman2 ",[76,20080,247],{"class":89},[76,20082,20083],{"class":93}," man;",[76,20085,20086],{"class":82}," \u002F\u002F拷贝构造\n",[76,20088,20089],{"class":78,"line":1855},[76,20090,2472],{"emptyLinePlaceholder":125},[76,20092,20093],{"class":78,"line":2649},[76,20094,20095],{"class":82},"    \u002F\u002FPerson newman3;\n",[76,20097,20098,20101],{"class":78,"line":2663},[76,20099,20100],{"class":82},"    \u002F\u002Fnewman3 = man;",[76,20102,20103],{"class":82}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[76,20105,20106],{"class":78,"line":2671},[76,20107,1637],{"class":93},[76,20109,20110],{"class":78,"line":2676},[76,20111,2472],{"emptyLinePlaceholder":125},[76,20113,20114],{"class":78,"line":2682},[76,20115,20116],{"class":82},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[76,20118,20119],{"class":78,"line":2688},[76,20120,20121],{"class":82},"\u002F\u002F相当于Person p1 = p;\n",[76,20123,20124,20126,20128,20130,20132,20135],{"class":78,"line":2693},[76,20125,5436],{"class":89},[76,20127,19558],{"class":2035},[76,20129,202],{"class":93},[76,20131,19118],{"class":2035},[76,20133,20134],{"class":5288}," p1",[76,20136,20137],{"class":93},") {}\n",[76,20139,20140,20142,20144],{"class":78,"line":8020},[76,20141,5436],{"class":89},[76,20143,5729],{"class":2035},[76,20145,10925],{"class":93},[76,20147,20148,20150],{"class":78,"line":8044},[76,20149,18676],{"class":93},[76,20151,20152],{"class":82}," \u002F\u002F无参构造函数\n",[76,20154,20155,20157],{"class":78,"line":8049},[76,20156,19608],{"class":2035},[76,20158,19611],{"class":93},[76,20160,20161],{"class":78,"line":8055},[76,20162,1637],{"class":93},[76,20164,20165],{"class":78,"line":8082},[76,20166,2472],{"emptyLinePlaceholder":125},[76,20168,20169],{"class":78,"line":8087},[76,20170,20171],{"class":82},"\u002F\u002F3. 以值方式返回局部对象\n",[76,20173,20174,20176,20178],{"class":78,"line":8093},[76,20175,19118],{"class":2035},[76,20177,19627],{"class":2035},[76,20179,2048],{"class":93},[76,20181,20182],{"class":78,"line":8105},[76,20183,1618],{"class":93},[76,20185,20186],{"class":78,"line":8117},[76,20187,19108],{"class":93},[76,20189,20190,20192,20194,20196,20198,20200,20202,20204,20207,20209],{"class":78,"line":8129},[76,20191,6601],{"class":93},[76,20193,1243],{"class":89},[76,20195,1730],{"class":93},[76,20197,205],{"class":89},[76,20199,6590],{"class":89},[76,20201,629],{"class":93},[76,20203,553],{"class":89},[76,20205,20206],{"class":93},"p1 ",[76,20208,1243],{"class":89},[76,20210,8912],{"class":93},[76,20212,20213,20215],{"class":78,"line":9788},[76,20214,4162],{"class":89},[76,20216,20217],{"class":93}," p1;\n",[76,20219,20220],{"class":78,"line":9813},[76,20221,1637],{"class":93},[76,20223,20224],{"class":78,"line":9836},[76,20225,2472],{"emptyLinePlaceholder":125},[76,20227,20228,20230,20232],{"class":78,"line":9860},[76,20229,5436],{"class":89},[76,20231,5801],{"class":2035},[76,20233,2048],{"class":93},[76,20235,20236],{"class":78,"line":9865},[76,20237,1618],{"class":93},[76,20239,20240,20242,20244,20246],{"class":78,"line":9870},[76,20241,19693],{"class":93},[76,20243,247],{"class":89},[76,20245,19627],{"class":2035},[76,20247,5708],{"class":93},[76,20249,20250,20252,20254,20256,20258,20260,20262,20264,20266,20268],{"class":78,"line":9875},[76,20251,6601],{"class":93},[76,20253,1243],{"class":89},[76,20255,1730],{"class":93},[76,20257,205],{"class":89},[76,20259,6590],{"class":89},[76,20261,629],{"class":93},[76,20263,553],{"class":89},[76,20265,11520],{"class":93},[76,20267,1243],{"class":89},[76,20269,8912],{"class":93},[76,20271,20272],{"class":78,"line":9884},[76,20273,1637],{"class":93},[76,20275,20276],{"class":78,"line":9889},[76,20277,2472],{"emptyLinePlaceholder":125},[76,20279,20280],{"class":78,"line":9895},[76,20281,2472],{"emptyLinePlaceholder":125},[76,20283,20284,20286,20288],{"class":78,"line":9916},[76,20285,205],{"class":89},[76,20287,2045],{"class":2035},[76,20289,10925],{"class":93},[76,20291,20292],{"class":78,"line":9922},[76,20293,2472],{"emptyLinePlaceholder":125},[76,20295,20296],{"class":78,"line":9936},[76,20297,20298],{"class":82},"    \u002F\u002Ftest01();\n",[76,20300,20301],{"class":78,"line":9942},[76,20302,20303],{"class":82},"    \u002F\u002Ftest02();\n",[76,20305,20306,20308],{"class":78,"line":9969},[76,20307,19763],{"class":2035},[76,20309,5708],{"class":93},[76,20311,20312],{"class":78,"line":9978},[76,20313,2472],{"emptyLinePlaceholder":125},[76,20315,20316,20318,20320,20322],{"class":78,"line":9984},[76,20317,2375],{"class":2035},[76,20319,202],{"class":93},[76,20321,2380],{"class":305},[76,20323,2791],{"class":93},[76,20325,20326],{"class":78,"line":9992},[76,20327,2472],{"emptyLinePlaceholder":125},[76,20329,20330,20332,20334],{"class":78,"line":9997},[76,20331,4162],{"class":89},[76,20333,4165],{"class":250},[76,20335,1363],{"class":93},[76,20337,20338],{"class":78,"line":16676},[76,20339,1637],{"class":93},[169,20341,20343],{"id":20342},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20345,20346],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20348,20349],{},"1．默认构造函数(无参，函数体为空)",[14,20351,20352],{},"2．默认析构函数(无参，函数体为空)",[14,20354,20355],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20357,20358],{},"构造函数调用规则如下：",[1206,20360,20361,20364],{},[155,20362,20363],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[155,20365,20366],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[67,20368,20370],{"className":190,"code":20369,"language":192,"meta":58,"style":58},"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",[73,20371,20372,20380,20384,20389,20395,20407,20411,20416,20428,20437,20449,20453,20457,20473,20482,20494,20498,20502,20508,20520,20524,20528,20534,20538,20542,20550,20554,20566,20571,20579,20583,20601,20605,20609,20617,20621,20626,20634,20649,20662,20666,20671,20678,20694,20707,20711,20715,20723,20727,20733,20737,20747,20751,20759],{"__ignoreMap":58},[76,20373,20374,20376,20378],{"class":78,"line":79},[76,20375,14766],{"class":89},[76,20377,15641],{"class":2035},[76,20379,15644],{"class":93},[76,20381,20382],{"class":78,"line":86},[76,20383,14788],{"class":89},[76,20385,20386],{"class":78,"line":97},[76,20387,20388],{"class":82},"    \u002F\u002F无参（默认）构造函数\n",[76,20390,20391,20393],{"class":78,"line":103},[76,20392,18591],{"class":2035},[76,20394,10925],{"class":93},[76,20396,20397,20399,20401,20403,20405],{"class":78,"line":1273},[76,20398,9741],{"class":93},[76,20400,1243],{"class":89},[76,20402,19882],{"class":305},[76,20404,1517],{"class":89},[76,20406,8912],{"class":93},[76,20408,20409],{"class":78,"line":1287},[76,20410,2259],{"class":93},[76,20412,20413],{"class":78,"line":1293},[76,20414,20415],{"class":82},"    \u002F\u002F有参构造函数\n",[76,20417,20418,20420,20422,20424,20426],{"class":78,"line":1384},[76,20419,18591],{"class":2035},[76,20421,202],{"class":93},[76,20423,205],{"class":89},[76,20425,1471],{"class":5288},[76,20427,12514],{"class":93},[76,20429,20430,20433,20435],{"class":78,"line":1390},[76,20431,20432],{"class":93},"        age ",[76,20434,247],{"class":89},[76,20436,1505],{"class":93},[76,20438,20439,20441,20443,20445,20447],{"class":78,"line":1402},[76,20440,9741],{"class":93},[76,20442,1243],{"class":89},[76,20444,19922],{"class":305},[76,20446,1517],{"class":89},[76,20448,8912],{"class":93},[76,20450,20451],{"class":78,"line":1684},[76,20452,2259],{"class":93},[76,20454,20455],{"class":78,"line":1689},[76,20456,18946],{"class":82},[76,20458,20459,20461,20463,20465,20467,20469,20471],{"class":78,"line":1695},[76,20460,18591],{"class":2035},[76,20462,202],{"class":93},[76,20464,6864],{"class":89},[76,20466,15641],{"class":2035},[76,20468,553],{"class":89},[76,20470,6897],{"class":5288},[76,20472,12514],{"class":93},[76,20474,20475,20477,20479],{"class":78,"line":1700},[76,20476,20432],{"class":93},[76,20478,247],{"class":89},[76,20480,20481],{"class":93}," p.age;\n",[76,20483,20484,20486,20488,20490,20492],{"class":78,"line":1714},[76,20485,9741],{"class":93},[76,20487,1243],{"class":89},[76,20489,19963],{"class":305},[76,20491,1517],{"class":89},[76,20493,8912],{"class":93},[76,20495,20496],{"class":78,"line":1719},[76,20497,2259],{"class":93},[76,20499,20500],{"class":78,"line":1725},[76,20501,18619],{"class":82},[76,20503,20504,20506],{"class":78,"line":1746},[76,20505,18624],{"class":2035},[76,20507,10925],{"class":93},[76,20509,20510,20512,20514,20516,20518],{"class":78,"line":1751},[76,20511,9741],{"class":93},[76,20513,1243],{"class":89},[76,20515,20000],{"class":305},[76,20517,1517],{"class":89},[76,20519,8912],{"class":93},[76,20521,20522],{"class":78,"line":1765},[76,20523,2259],{"class":93},[76,20525,20526],{"class":78,"line":1770},[76,20527,14788],{"class":89},[76,20529,20530,20532],{"class":78,"line":1799},[76,20531,2057],{"class":89},[76,20533,7869],{"class":93},[76,20535,20536],{"class":78,"line":1804},[76,20537,4067],{"class":93},[76,20539,20540],{"class":78,"line":1821},[76,20541,2472],{"emptyLinePlaceholder":125},[76,20543,20544,20546,20548],{"class":78,"line":1826},[76,20545,5436],{"class":89},[76,20547,5660],{"class":2035},[76,20549,2048],{"class":93},[76,20551,20552],{"class":78,"line":1831},[76,20553,1618],{"class":93},[76,20555,20556,20558,20560,20562,20564],{"class":78,"line":1836},[76,20557,19503],{"class":93},[76,20559,7202],{"class":2035},[76,20561,202],{"class":93},[76,20563,849],{"class":250},[76,20565,2791],{"class":93},[76,20567,20568],{"class":78,"line":1850},[76,20569,20570],{"class":82},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[76,20572,20573,20575,20577],{"class":78,"line":1855},[76,20574,19503],{"class":93},[76,20576,7105],{"class":2035},[76,20578,17587],{"class":93},[76,20580,20581],{"class":78,"line":2649},[76,20582,2472],{"emptyLinePlaceholder":125},[76,20584,20585,20587,20589,20592,20594,20597,20599],{"class":78,"line":2663},[76,20586,6601],{"class":93},[76,20588,1243],{"class":89},[76,20590,20591],{"class":305}," \"p2的年龄为： \"",[76,20593,1517],{"class":89},[76,20595,20596],{"class":93}," p2.age ",[76,20598,1243],{"class":89},[76,20600,8912],{"class":93},[76,20602,20603],{"class":78,"line":2671},[76,20604,1637],{"class":93},[76,20606,20607],{"class":78,"line":2676},[76,20608,2472],{"emptyLinePlaceholder":125},[76,20610,20611,20613,20615],{"class":78,"line":2682},[76,20612,5436],{"class":89},[76,20614,5729],{"class":2035},[76,20616,2048],{"class":93},[76,20618,20619],{"class":78,"line":2688},[76,20620,1618],{"class":93},[76,20622,20623],{"class":78,"line":2693},[76,20624,20625],{"class":82},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[76,20627,20628,20631],{"class":78,"line":8020},[76,20629,20630],{"class":93},"    Person p1;",[76,20632,20633],{"class":82}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[76,20635,20636,20638,20640,20642,20644,20646],{"class":78,"line":8044},[76,20637,19503],{"class":93},[76,20639,7105],{"class":2035},[76,20641,202],{"class":93},[76,20643,646],{"class":250},[76,20645,6038],{"class":93},[76,20647,20648],{"class":82}," \u002F\u002F用户提供的有参\n",[76,20650,20651,20653,20656,20659],{"class":78,"line":8049},[76,20652,19503],{"class":93},[76,20654,20655],{"class":2035},"p3",[76,20657,20658],{"class":93},"(p2);",[76,20660,20661],{"class":82}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[76,20663,20664],{"class":78,"line":8055},[76,20665,2472],{"emptyLinePlaceholder":125},[76,20667,20668],{"class":78,"line":8082},[76,20669,20670],{"class":82},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[76,20672,20673,20676],{"class":78,"line":8087},[76,20674,20675],{"class":93},"    Person p4;",[76,20677,20633],{"class":82},[76,20679,20680,20682,20685,20687,20689,20691],{"class":78,"line":8093},[76,20681,19503],{"class":93},[76,20683,20684],{"class":2035},"p5",[76,20686,202],{"class":93},[76,20688,646],{"class":250},[76,20690,6038],{"class":93},[76,20692,20693],{"class":82}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[76,20695,20696,20698,20701,20704],{"class":78,"line":8105},[76,20697,19503],{"class":93},[76,20699,20700],{"class":2035},"p6",[76,20702,20703],{"class":93},"(p5);",[76,20705,20706],{"class":82}," \u002F\u002F用户自己提供拷贝构造\n",[76,20708,20709],{"class":78,"line":8117},[76,20710,1637],{"class":93},[76,20712,20713],{"class":78,"line":8129},[76,20714,2472],{"emptyLinePlaceholder":125},[76,20716,20717,20719,20721],{"class":78,"line":9788},[76,20718,205],{"class":89},[76,20720,2045],{"class":2035},[76,20722,10925],{"class":93},[76,20724,20725],{"class":78,"line":9813},[76,20726,2472],{"emptyLinePlaceholder":125},[76,20728,20729,20731],{"class":78,"line":9836},[76,20730,5705],{"class":2035},[76,20732,5708],{"class":93},[76,20734,20735],{"class":78,"line":9860},[76,20736,2472],{"emptyLinePlaceholder":125},[76,20738,20739,20741,20743,20745],{"class":78,"line":9865},[76,20740,2375],{"class":2035},[76,20742,202],{"class":93},[76,20744,2380],{"class":305},[76,20746,2791],{"class":93},[76,20748,20749],{"class":78,"line":9870},[76,20750,2472],{"emptyLinePlaceholder":125},[76,20752,20753,20755,20757],{"class":78,"line":9875},[76,20754,4162],{"class":89},[76,20756,4165],{"class":250},[76,20758,1363],{"class":93},[76,20760,20761],{"class":78,"line":9884},[76,20762,1637],{"class":93},[169,20764,20766],{"id":20765},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20768,20769],{},"浅拷贝：简单的赋值拷贝操作",[14,20771,20772],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[67,20774,20776],{"className":190,"code":20775,"language":192,"meta":58,"style":58},"#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",[73,20777,20778,20784,20794,20800,20804,20808,20813,20819,20823,20836,20840,20844,20851,20855,20865,20880,20893,20897,20902,20907,20923,20927,20940,20945,20950,20955,20964,20969,20984,20988,20992,20996,21002,21006,21011,21026,21030,21041,21055,21059,21068,21072,21078,21090,21094,21102,21106,21123,21154,21162,21190,21194,21198,21206,21210,21216],{"__ignoreMap":58},[76,20779,20780,20782],{"class":78,"line":79},[76,20781,2021],{"class":89},[76,20783,2024],{"class":305},[76,20785,20786,20788,20790,20792],{"class":78,"line":86},[76,20787,2029],{"class":89},[76,20789,2032],{"class":89},[76,20791,2036],{"class":2035},[76,20793,1363],{"class":93},[76,20795,20796,20798],{"class":78,"line":97},[76,20797,14766],{"class":89},[76,20799,15243],{"class":2035},[76,20801,20802],{"class":78,"line":103},[76,20803,1618],{"class":93},[76,20805,20806],{"class":78,"line":1273},[76,20807,14788],{"class":89},[76,20809,20810],{"class":78,"line":1287},[76,20811,20812],{"class":82},"    \u002F\u002F默认构造函数\n",[76,20814,20815,20817],{"class":78,"line":1293},[76,20816,18591],{"class":2035},[76,20818,2048],{"class":93},[76,20820,20821],{"class":78,"line":1384},[76,20822,2102],{"class":93},[76,20824,20825,20827,20829,20832,20834],{"class":78,"line":1390},[76,20826,3523],{"class":93},[76,20828,1243],{"class":89},[76,20830,20831],{"class":305},"\"默认构造函数\"",[76,20833,1243],{"class":89},[76,20835,1265],{"class":93},[76,20837,20838],{"class":78,"line":1402},[76,20839,2259],{"class":93},[76,20841,20842],{"class":78,"line":1684},[76,20843,20415],{"class":82},[76,20845,20846,20848],{"class":78,"line":1689},[76,20847,18624],{"class":2035},[76,20849,20850],{"class":93},"(int age,int height)\n",[76,20852,20853],{"class":78,"line":1695},[76,20854,2102],{"class":93},[76,20856,20857,20860,20862],{"class":78,"line":1700},[76,20858,20859],{"class":93},"        m_Age",[76,20861,247],{"class":89},[76,20863,20864],{"class":93},"age;\n",[76,20866,20867,20870,20872,20874,20877],{"class":78,"line":1714},[76,20868,20869],{"class":93},"        m_Height",[76,20871,11789],{"class":89},[76,20873,2454],{"class":89},[76,20875,20876],{"class":93},"(height);",[76,20878,20879],{"class":82},"\u002F\u002F放到堆区\n",[76,20881,20882,20884,20886,20889,20891],{"class":78,"line":1719},[76,20883,3523],{"class":93},[76,20885,1243],{"class":89},[76,20887,20888],{"class":305},"\"有参构造函数\"",[76,20890,1243],{"class":89},[76,20892,1265],{"class":93},[76,20894,20895],{"class":78,"line":1725},[76,20896,2259],{"class":93},[76,20898,20899],{"class":78,"line":1746},[76,20900,20901],{"class":82},"    \u002F\u002F深拷贝解决上述问题\n",[76,20903,20904],{"class":78,"line":1751},[76,20905,20906],{"class":82},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[76,20908,20909,20911,20913,20915,20917,20919,20921],{"class":78,"line":1765},[76,20910,18591],{"class":2035},[76,20912,202],{"class":93},[76,20914,6864],{"class":89},[76,20916,15641],{"class":2035},[76,20918,10656],{"class":89},[76,20920,14],{"class":5288},[76,20922,208],{"class":93},[76,20924,20925],{"class":78,"line":1770},[76,20926,2102],{"class":93},[76,20928,20929,20931,20933,20936,20938],{"class":78,"line":1799},[76,20930,3523],{"class":93},[76,20932,1243],{"class":89},[76,20934,20935],{"class":305},"\"拷贝构造函数\"",[76,20937,1243],{"class":89},[76,20939,1265],{"class":93},[76,20941,20942],{"class":78,"line":1804},[76,20943,20944],{"class":82},"        \u002F\u002F编译器默认的写如下注释部分\n",[76,20946,20947],{"class":78,"line":1821},[76,20948,20949],{"class":82},"        \u002F\u002Fm_Age=p.m_Age;\n",[76,20951,20952],{"class":78,"line":1826},[76,20953,20954],{"class":82},"        \u002F\u002Fm_Height=p.m_Height;\n",[76,20956,20957,20959,20961],{"class":78,"line":1831},[76,20958,20859],{"class":93},[76,20960,247],{"class":89},[76,20962,20963],{"class":93},"p.m_Age;\n",[76,20965,20966],{"class":78,"line":1836},[76,20967,20968],{"class":82},"        \u002F\u002F深拷贝操作\n",[76,20970,20971,20973,20975,20977,20979,20981],{"class":78,"line":1850},[76,20972,20869],{"class":93},[76,20974,11789],{"class":89},[76,20976,2454],{"class":89},[76,20978,202],{"class":93},[76,20980,655],{"class":89},[76,20982,20983],{"class":93},"p.m_Height);\n",[76,20985,20986],{"class":78,"line":1855},[76,20987,2259],{"class":93},[76,20989,20990],{"class":78,"line":2649},[76,20991,2472],{"emptyLinePlaceholder":125},[76,20993,20994],{"class":78,"line":2663},[76,20995,18619],{"class":82},[76,20997,20998,21000],{"class":78,"line":2671},[76,20999,18624],{"class":2035},[76,21001,2048],{"class":93},[76,21003,21004],{"class":78,"line":2676},[76,21005,2102],{"class":93},[76,21007,21008],{"class":78,"line":2682},[76,21009,21010],{"class":82},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[76,21012,21013,21015,21018,21021,21024],{"class":78,"line":2688},[76,21014,2569],{"class":89},[76,21016,21017],{"class":93},"(m_Height ",[76,21019,21020],{"class":89},"!=",[76,21022,21023],{"class":250}," NULL",[76,21025,208],{"class":93},[76,21027,21028],{"class":78,"line":2693},[76,21029,2582],{"class":93},[76,21031,21032,21035,21038],{"class":78,"line":8020},[76,21033,21034],{"class":89},"            delete",[76,21036,21037],{"class":93}," m_Height;",[76,21039,21040],{"class":82}," \u002F\u002F释放堆区内存\n",[76,21042,21043,21046,21048,21050,21052],{"class":78,"line":8044},[76,21044,21045],{"class":93},"            m_Height",[76,21047,247],{"class":89},[76,21049,2464],{"class":250},[76,21051,257],{"class":93},[76,21053,21054],{"class":82}," \u002F\u002F防止野指针\n",[76,21056,21057],{"class":78,"line":8049},[76,21058,2601],{"class":93},[76,21060,21061,21063,21065],{"class":78,"line":8055},[76,21062,3523],{"class":93},[76,21064,1243],{"class":89},[76,21066,21067],{"class":305},"\"Person的析构函数调用\"\n",[76,21069,21070],{"class":78,"line":8082},[76,21071,2259],{"class":93},[76,21073,21074,21076],{"class":78,"line":8087},[76,21075,2057],{"class":89},[76,21077,15738],{"class":93},[76,21079,21080,21082,21084,21087],{"class":78,"line":8093},[76,21081,2057],{"class":89},[76,21083,6590],{"class":89},[76,21085,21086],{"class":93},"m_Height;",[76,21088,21089],{"class":82}," \u002F\u002F定义一个指针，指向身高\n",[76,21091,21092],{"class":78,"line":8105},[76,21093,4067],{"class":93},[76,21095,21096,21098,21100],{"class":78,"line":8117},[76,21097,5436],{"class":89},[76,21099,5660],{"class":2035},[76,21101,2048],{"class":93},[76,21103,21104],{"class":78,"line":8129},[76,21105,1618],{"class":93},[76,21107,21108,21110,21112,21114,21116,21118,21121],{"class":78,"line":9788},[76,21109,19503],{"class":93},[76,21111,7202],{"class":2035},[76,21113,202],{"class":93},[76,21115,849],{"class":250},[76,21117,578],{"class":93},[76,21119,21120],{"class":250},"160",[76,21122,2791],{"class":93},[76,21124,21125,21127,21129,21132,21134,21137,21139,21142,21144,21147,21149,21151],{"class":78,"line":9813},[76,21126,1623],{"class":93},[76,21128,1243],{"class":89},[76,21130,21131],{"class":305},"\"p1的年龄为:\"",[76,21133,1243],{"class":89},[76,21135,21136],{"class":93},"p1.m_Age",[76,21138,1243],{"class":89},[76,21140,21141],{"class":305},"\"身高为：\"",[76,21143,6491],{"class":89},[76,21145,21146],{"class":93},"p1.m_Height",[76,21148,1243],{"class":89},[76,21150,1311],{"class":93},[76,21152,21153],{"class":82},"  \u002F\u002F18\n",[76,21155,21156,21158,21160],{"class":78,"line":9836},[76,21157,19503],{"class":93},[76,21159,7105],{"class":2035},[76,21161,17587],{"class":93},[76,21163,21164,21166,21168,21171,21173,21175,21177,21179,21181,21184,21186,21188],{"class":78,"line":9860},[76,21165,1623],{"class":93},[76,21167,1243],{"class":89},[76,21169,21170],{"class":305},"\"p2的年龄为：\"",[76,21172,1243],{"class":89},[76,21174,19533],{"class":93},[76,21176,1243],{"class":89},[76,21178,21141],{"class":305},[76,21180,6491],{"class":89},[76,21182,21183],{"class":93},"p2.m_Height",[76,21185,1243],{"class":89},[76,21187,1311],{"class":93},[76,21189,21153],{"class":82},[76,21191,21192],{"class":78,"line":9865},[76,21193,13282],{"class":93},[76,21195,21196],{"class":78,"line":9870},[76,21197,1637],{"class":93},[76,21199,21200,21202,21204],{"class":78,"line":9875},[76,21201,205],{"class":89},[76,21203,2045],{"class":2035},[76,21205,2048],{"class":93},[76,21207,21208],{"class":78,"line":9884},[76,21209,1618],{"class":93},[76,21211,21212,21214],{"class":78,"line":9889},[76,21213,5705],{"class":2035},[76,21215,5708],{"class":93},[76,21217,21218],{"class":78,"line":9895},[76,21219,1637],{"class":93},[14,21221,21222],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21224,21225],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21227,21228],{},[56,21229],{"alt":58,"src":21230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21232,21233],{},"浅拷贝问题要使用深拷贝来解决",[14,21235,21236],{},[56,21237],{"alt":58,"src":21238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21240,21241],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[169,21243,21245],{"id":21244},"_826初始化列表","8.2.6初始化列表",[14,21247,21248],{},"作用：初始化属性",[14,21250,5253],{},[67,21252,21255],{"className":21253,"code":21254,"language":5259},[5257],"构造函数():属性1(值1),属性2(值2).....{}\n",[73,21256,21254],{"__ignoreMap":58},[14,21258,21259],{},"例子",[67,21261,21263],{"className":190,"code":21262,"language":192,"meta":58,"style":58},"#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",[73,21264,21265,21271,21281,21287,21291,21296,21300,21305,21310,21315,21320,21325,21330,21334,21339,21344,21387,21396,21414,21432,21450,21454,21458,21465,21472,21479,21483,21487,21495,21499,21503,21523,21532,21536,21540,21550,21554,21562],{"__ignoreMap":58},[76,21266,21267,21269],{"class":78,"line":79},[76,21268,2021],{"class":89},[76,21270,2024],{"class":305},[76,21272,21273,21275,21277,21279],{"class":78,"line":86},[76,21274,2029],{"class":89},[76,21276,2032],{"class":89},[76,21278,2036],{"class":2035},[76,21280,1363],{"class":93},[76,21282,21283,21285],{"class":78,"line":97},[76,21284,14766],{"class":89},[76,21286,15243],{"class":2035},[76,21288,21289],{"class":78,"line":103},[76,21290,1618],{"class":93},[76,21292,21293],{"class":78,"line":1273},[76,21294,21295],{"class":89},"    public:\n",[76,21297,21298],{"class":78,"line":1287},[76,21299,2472],{"emptyLinePlaceholder":125},[76,21301,21302],{"class":78,"line":1293},[76,21303,21304],{"class":82},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[76,21306,21307],{"class":78,"line":1384},[76,21308,21309],{"class":82},"    \u002F\u002FPerson(int a, int b, int c) {\n",[76,21311,21312],{"class":78,"line":1390},[76,21313,21314],{"class":82},"    \u002F\u002F  m_A = a;\n",[76,21316,21317],{"class":78,"line":1402},[76,21318,21319],{"class":82},"    \u002F\u002F  m_B = b;\n",[76,21321,21322],{"class":78,"line":1684},[76,21323,21324],{"class":82},"    \u002F\u002F  m_C = c;\n",[76,21326,21327],{"class":78,"line":1689},[76,21328,21329],{"class":82},"    \u002F\u002F}\n",[76,21331,21332],{"class":78,"line":1695},[76,21333,2472],{"emptyLinePlaceholder":125},[76,21335,21336],{"class":78,"line":1700},[76,21337,21338],{"class":82},"    \u002F\u002F初始化列表方式初始化\n",[76,21340,21341],{"class":78,"line":1714},[76,21342,21343],{"class":82},"    \u002F\u002F使用有参构造函数\n",[76,21345,21346,21348,21350,21352,21354,21356,21358,21360,21362,21364,21366,21369,21372,21375,21378,21381,21384],{"class":78,"line":1719},[76,21347,18591],{"class":2035},[76,21349,202],{"class":93},[76,21351,205],{"class":89},[76,21353,1471],{"class":5288},[76,21355,12507],{"class":93},[76,21357,205],{"class":89},[76,21359,2905],{"class":5288},[76,21361,12507],{"class":93},[76,21363,205],{"class":89},[76,21365,2921],{"class":5288},[76,21367,21368],{"class":93},") :",[76,21370,21371],{"class":2035},"m_A",[76,21373,21374],{"class":93},"(a), ",[76,21376,21377],{"class":2035},"m_B",[76,21379,21380],{"class":93},"(b), ",[76,21382,21383],{"class":2035},"m_C",[76,21385,21386],{"class":93},"(c) {}\n",[76,21388,21389,21391,21394],{"class":78,"line":1725},[76,21390,14981],{"class":89},[76,21392,21393],{"class":2035}," PrintPerson",[76,21395,10925],{"class":93},[76,21397,21398,21400,21402,21405,21407,21410,21412],{"class":78,"line":1746},[76,21399,9741],{"class":93},[76,21401,1243],{"class":89},[76,21403,21404],{"class":305}," \"mA:\"",[76,21406,1517],{"class":89},[76,21408,21409],{"class":93}," m_A ",[76,21411,1243],{"class":89},[76,21413,8912],{"class":93},[76,21415,21416,21418,21420,21423,21425,21428,21430],{"class":78,"line":1751},[76,21417,9741],{"class":93},[76,21419,1243],{"class":89},[76,21421,21422],{"class":305}," \"mB:\"",[76,21424,1517],{"class":89},[76,21426,21427],{"class":93}," m_B ",[76,21429,1243],{"class":89},[76,21431,8912],{"class":93},[76,21433,21434,21436,21438,21441,21443,21446,21448],{"class":78,"line":1765},[76,21435,9741],{"class":93},[76,21437,1243],{"class":89},[76,21439,21440],{"class":305}," \"mC:\"",[76,21442,1517],{"class":89},[76,21444,21445],{"class":93}," m_C ",[76,21447,1243],{"class":89},[76,21449,8912],{"class":93},[76,21451,21452],{"class":78,"line":1770},[76,21453,2259],{"class":93},[76,21455,21456],{"class":78,"line":1799},[76,21457,15294],{"class":89},[76,21459,21460,21462],{"class":78,"line":1804},[76,21461,2057],{"class":89},[76,21463,21464],{"class":93}," m_A;\n",[76,21466,21467,21469],{"class":78,"line":1821},[76,21468,2057],{"class":89},[76,21470,21471],{"class":93}," m_B;\n",[76,21473,21474,21476],{"class":78,"line":1826},[76,21475,2057],{"class":89},[76,21477,21478],{"class":93}," m_C;\n",[76,21480,21481],{"class":78,"line":1831},[76,21482,4067],{"class":93},[76,21484,21485],{"class":78,"line":1836},[76,21486,2472],{"emptyLinePlaceholder":125},[76,21488,21489,21491,21493],{"class":78,"line":1850},[76,21490,205],{"class":89},[76,21492,2045],{"class":2035},[76,21494,6050],{"class":93},[76,21496,21497],{"class":78,"line":1855},[76,21498,1618],{"class":93},[76,21500,21501],{"class":78,"line":2649},[76,21502,2472],{"emptyLinePlaceholder":125},[76,21504,21505,21507,21509,21511,21513,21515,21517,21519,21521],{"class":78,"line":2663},[76,21506,19503],{"class":93},[76,21508,14],{"class":2035},[76,21510,202],{"class":93},[76,21512,418],{"class":250},[76,21514,12507],{"class":93},[76,21516,278],{"class":250},[76,21518,12507],{"class":93},[76,21520,272],{"class":250},[76,21522,2791],{"class":93},[76,21524,21525,21527,21530],{"class":78,"line":2671},[76,21526,15938],{"class":93},[76,21528,21529],{"class":2035},"PrintPerson",[76,21531,5708],{"class":93},[76,21533,21534],{"class":78,"line":2676},[76,21535,2472],{"emptyLinePlaceholder":125},[76,21537,21538],{"class":78,"line":2682},[76,21539,2472],{"emptyLinePlaceholder":125},[76,21541,21542,21544,21546,21548],{"class":78,"line":2688},[76,21543,2375],{"class":2035},[76,21545,202],{"class":93},[76,21547,2380],{"class":305},[76,21549,2791],{"class":93},[76,21551,21552],{"class":78,"line":2693},[76,21553,2472],{"emptyLinePlaceholder":125},[76,21555,21556,21558,21560],{"class":78,"line":8020},[76,21557,4162],{"class":89},[76,21559,4165],{"class":250},[76,21561,1363],{"class":93},[76,21563,21564],{"class":78,"line":8044},[76,21565,1637],{"class":93},[14,21567,21568,21569,21572,21573],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[350,21570,21571],{},"参数名就是定义的对象属性","，",[350,21574,21575],{},"属性后面的值为有参构造函数的形参",[67,21577,21579],{"className":190,"code":21578,"language":192,"meta":58,"style":58},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[73,21580,21581],{"__ignoreMap":58},[76,21582,21583,21585,21587,21589,21592,21594,21597,21599,21602,21604,21607,21609,21612,21614],{"class":78,"line":79},[76,21584,19118],{"class":2035},[76,21586,202],{"class":93},[76,21588,205],{"class":89},[76,21590,21591],{"class":93}," a.",[76,21593,205],{"class":89},[76,21595,21596],{"class":93}," b,",[76,21598,205],{"class":89},[76,21600,21601],{"class":93}," b):",[76,21603,21371],{"class":2035},[76,21605,21606],{"class":93},"(a),",[76,21608,21377],{"class":2035},[76,21610,21611],{"class":93},"(c),",[76,21613,21383],{"class":2035},[76,21615,21616],{"class":93},"(b) {}\n",[169,21618,21620],{"id":21619},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21622,21623],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21625,14705],{},[67,21627,21629],{"className":190,"code":21628,"language":192,"meta":58,"style":58},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[73,21630,21631,21636,21641,21645,21650,21654],{"__ignoreMap":58},[76,21632,21633],{"class":78,"line":79},[76,21634,21635],{"class":93},"A{};\n",[76,21637,21638],{"class":78,"line":86},[76,21639,21640],{"class":93},"B\n",[76,21642,21643],{"class":78,"line":97},[76,21644,1618],{"class":93},[76,21646,21647],{"class":78,"line":103},[76,21648,21649],{"class":93},"    A a;\n",[76,21651,21652],{"class":78,"line":1273},[76,21653,1637],{"class":93},[76,21655,21656],{"class":78,"line":1287},[76,21657,21658],{"class":82},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21660,21661],{},"案例",[67,21663,21665],{"className":190,"code":21664,"language":192,"meta":58,"style":58},"\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",[73,21666,21667,21672,21679,21683,21688,21693,21707,21711,21721,21732,21736,21743,21747,21760,21764,21769,21774,21778,21784,21788,21792,21796,21827,21831,21842,21846,21852,21856,21869,21873,21877,21881,21886,21891,21895,21903,21907,21924,21943,21947,21955,21959,21965],{"__ignoreMap":58},[76,21668,21669],{"class":78,"line":79},[76,21670,21671],{"class":82},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[76,21673,21674,21676],{"class":78,"line":86},[76,21675,14766],{"class":89},[76,21677,21678],{"class":2035}," Phone\n",[76,21680,21681],{"class":78,"line":97},[76,21682,1618],{"class":93},[76,21684,21685],{"class":78,"line":103},[76,21686,21687],{"class":93},"public：\n",[76,21689,21690],{"class":78,"line":1273},[76,21691,21692],{"class":82},"    \u002F\u002F 赋值(构造函数)\n",[76,21694,21695,21698,21700,21702,21705],{"class":78,"line":1287},[76,21696,21697],{"class":2035},"    Phone",[76,21699,202],{"class":93},[76,21701,14989],{"class":2035},[76,21703,21704],{"class":5288}," pName",[76,21706,208],{"class":93},[76,21708,21709],{"class":78,"line":1293},[76,21710,2102],{"class":93},[76,21712,21713,21716,21718],{"class":78,"line":1384},[76,21714,21715],{"class":93},"        m_pName",[76,21717,247],{"class":89},[76,21719,21720],{"class":93},"pName;\n",[76,21722,21723,21725,21727,21730],{"class":78,"line":1390},[76,21724,3523],{"class":93},[76,21726,1243],{"class":89},[76,21728,21729],{"class":305},"\"Phone的构造函数调用\"",[76,21731,1363],{"class":93},[76,21733,21734],{"class":78,"line":1402},[76,21735,2259],{"class":93},[76,21737,21738,21741],{"class":78,"line":1684},[76,21739,21740],{"class":2035},"    ~Phone",[76,21742,2048],{"class":93},[76,21744,21745],{"class":78,"line":1689},[76,21746,2102],{"class":93},[76,21748,21749,21751,21753,21756,21758],{"class":78,"line":1695},[76,21750,3523],{"class":93},[76,21752,1243],{"class":89},[76,21754,21755],{"class":305},"\"Phone析构函数调用\"",[76,21757,1243],{"class":89},[76,21759,1265],{"class":93},[76,21761,21762],{"class":78,"line":1700},[76,21763,2259],{"class":93},[76,21765,21766],{"class":78,"line":1714},[76,21767,21768],{"class":82},"    \u002F\u002F\n",[76,21770,21771],{"class":78,"line":1719},[76,21772,21773],{"class":93},"    string m_PName;\n",[76,21775,21776],{"class":78,"line":1725},[76,21777,4067],{"class":93},[76,21779,21780,21782],{"class":78,"line":1746},[76,21781,14766],{"class":89},[76,21783,15243],{"class":2035},[76,21785,21786],{"class":78,"line":1751},[76,21787,1618],{"class":93},[76,21789,21790],{"class":78,"line":1765},[76,21791,14788],{"class":89},[76,21793,21794],{"class":78,"line":1770},[76,21795,17066],{"class":82},[76,21797,21798,21800,21802,21804,21806,21808,21810,21813,21816,21818,21821,21824],{"class":78,"line":1799},[76,21799,18591],{"class":2035},[76,21801,202],{"class":93},[76,21803,14989],{"class":2035},[76,21805,14992],{"class":5288},[76,21807,578],{"class":93},[76,21809,14989],{"class":2035},[76,21811,21812],{"class":5288}," pname",[76,21814,21815],{"class":93},"):",[76,21817,15082],{"class":2035},[76,21819,21820],{"class":93},"(name),m_phone.",[76,21822,21823],{"class":2035},"m_PName",[76,21825,21826],{"class":93},"(pname) \n",[76,21828,21829],{"class":78,"line":1804},[76,21830,2102],{"class":93},[76,21832,21833,21835,21837,21840],{"class":78,"line":1821},[76,21834,3523],{"class":93},[76,21836,1243],{"class":89},[76,21838,21839],{"class":305},"\"Person的构造函数调用\"",[76,21841,1363],{"class":93},[76,21843,21844],{"class":78,"line":1826},[76,21845,2259],{"class":93},[76,21847,21848,21850],{"class":78,"line":1831},[76,21849,18624],{"class":2035},[76,21851,2048],{"class":93},[76,21853,21854],{"class":78,"line":1836},[76,21855,2102],{"class":93},[76,21857,21858,21860,21862,21865,21867],{"class":78,"line":1850},[76,21859,3523],{"class":93},[76,21861,1243],{"class":89},[76,21863,21864],{"class":305},"\"Person析构函数调用\"",[76,21866,1243],{"class":89},[76,21868,1265],{"class":93},[76,21870,21871],{"class":78,"line":1855},[76,21872,2259],{"class":93},[76,21874,21875],{"class":78,"line":2649},[76,21876,7852],{"class":82},[76,21878,21879],{"class":78,"line":2663},[76,21880,14964],{"class":93},[76,21882,21883],{"class":78,"line":2671},[76,21884,21885],{"class":82},"    \u002F\u002F手机\n",[76,21887,21888],{"class":78,"line":2676},[76,21889,21890],{"class":93},"    Phone m_Phone;\n",[76,21892,21893],{"class":78,"line":2682},[76,21894,4067],{"class":93},[76,21896,21897,21899,21901],{"class":78,"line":2688},[76,21898,5436],{"class":89},[76,21900,5660],{"class":2035},[76,21902,2048],{"class":93},[76,21904,21905],{"class":78,"line":2693},[76,21906,1618],{"class":93},[76,21908,21909,21911,21913,21915,21917,21919,21922],{"class":78,"line":8020},[76,21910,19503],{"class":93},[76,21912,14],{"class":2035},[76,21914,202],{"class":93},[76,21916,7988],{"class":305},[76,21918,578],{"class":93},[76,21920,21921],{"class":305},"\"安卓\"",[76,21923,2791],{"class":93},[76,21925,21926,21928,21930,21933,21935,21938,21940],{"class":78,"line":8044},[76,21927,1623],{"class":93},[76,21929,1243],{"class":89},[76,21931,21932],{"class":93},"p.Name",[76,21934,1243],{"class":89},[76,21936,21937],{"class":305},"\"拿着：\"",[76,21939,1243],{"class":89},[76,21941,21942],{"class":93},"p.m_phone.m_PName;\n",[76,21944,21945],{"class":78,"line":8049},[76,21946,1637],{"class":93},[76,21948,21949,21951,21953],{"class":78,"line":8055},[76,21950,205],{"class":89},[76,21952,2045],{"class":2035},[76,21954,2048],{"class":93},[76,21956,21957],{"class":78,"line":8082},[76,21958,1618],{"class":93},[76,21960,21961,21963],{"class":78,"line":8087},[76,21962,5705],{"class":2035},[76,21964,5708],{"class":93},[76,21966,21967],{"class":78,"line":8093},[76,21968,1637],{"class":93},[14,21970,9097],{},[67,21972,21974],{"className":190,"code":21973,"language":192,"meta":58,"style":58},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[73,21975,21976,21981],{"__ignoreMap":58},[76,21977,21978],{"class":78,"line":79},[76,21979,21980],{"class":82},"    \u002F\u002F不需要写这个：\n",[76,21982,21983],{"class":78,"line":86},[76,21984,21985],{"class":82},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21987,21988],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[67,21990,21992],{"className":190,"code":21991,"language":192,"meta":58,"style":58},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[73,21993,21994],{"__ignoreMap":58},[76,21995,21996,21998,22001,22003,22006,22009],{"class":78,"line":79},[76,21997,19118],{"class":2035},[76,21999,22000],{"class":93},"(string name.string pname):",[76,22002,15082],{"class":2035},[76,22004,22005],{"class":93},"(name),",[76,22007,22008],{"class":2035},"m_phone",[76,22010,22011],{"class":93},"(pname) {}\n",[14,22013,22014,22015,247,22018],{},"采用的是隐式转换法，实际为如下：\n",[73,22016,22017],{},"m_phone(pname)",[73,22019,22020],{},"Phone m_phone=pname",[14,22022,22023,22026],{},[350,22024,22025],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22028,22029],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[169,22031,22033],{"id":22032},"_828静态对象","8.2.8静态对象",[14,22035,22036],{},"静态对象在成员对象前static，称为静态对象",[14,22038,22039],{},"静态对象分为两类：",[152,22041,22042],{},[155,22043,22044],{},"静态成员变量",[1206,22046,22047,22050,22053],{},[155,22048,22049],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[155,22051,22052],{},"②在编译阶段分配内存",[155,22054,22055],{},"③类内声明，类外初始化",[152,22057,22058],{"start":86},[155,22059,22060],{},"静态成员函数",[1206,22062,22063,22066],{},[155,22064,22065],{},"①所有对象共享同一个函数",[155,22067,22068],{},"②静态成员函数只能访问静态成员变量",[22070,22071,22073],"h4",{"id":22072},"_8281静态成员变量","8.2.8.1静态成员变量",[67,22075,22077],{"className":190,"code":22076,"language":192,"meta":58,"style":58},"#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",[73,22078,22079,22085,22095,22101,22105,22109,22114,22119,22124,22132,22136,22140,22144,22152,22156,22160,22165,22178,22182,22190,22194,22200],{"__ignoreMap":58},[76,22080,22081,22083],{"class":78,"line":79},[76,22082,2021],{"class":89},[76,22084,2024],{"class":305},[76,22086,22087,22089,22091,22093],{"class":78,"line":86},[76,22088,2029],{"class":89},[76,22090,2032],{"class":89},[76,22092,2036],{"class":2035},[76,22094,1363],{"class":93},[76,22096,22097,22099],{"class":78,"line":97},[76,22098,14766],{"class":89},[76,22100,15243],{"class":2035},[76,22102,22103],{"class":78,"line":103},[76,22104,1618],{"class":93},[76,22106,22107],{"class":78,"line":1273},[76,22108,14788],{"class":89},[76,22110,22111],{"class":78,"line":1287},[76,22112,22113],{"class":82},"    \u002F\u002F非静态成员变量\n",[76,22115,22116],{"class":78,"line":1293},[76,22117,22118],{"class":82},"    \u002F\u002F int m_A;\n",[76,22120,22121],{"class":78,"line":1384},[76,22122,22123],{"class":82},"    \u002F\u002F定义静态成员变量\n",[76,22125,22126,22128,22130],{"class":78,"line":1390},[76,22127,11092],{"class":89},[76,22129,2454],{"class":89},[76,22131,21464],{"class":93},[76,22133,22134],{"class":78,"line":1402},[76,22135,2472],{"emptyLinePlaceholder":125},[76,22137,22138],{"class":78,"line":1684},[76,22139,2472],{"emptyLinePlaceholder":125},[76,22141,22142],{"class":78,"line":1689},[76,22143,4067],{"class":93},[76,22145,22146,22148,22150],{"class":78,"line":1695},[76,22147,5436],{"class":89},[76,22149,5660],{"class":2035},[76,22151,2048],{"class":93},[76,22153,22154],{"class":78,"line":1700},[76,22155,1618],{"class":93},[76,22157,22158],{"class":78,"line":1714},[76,22159,15385],{"class":93},[76,22161,22162],{"class":78,"line":1719},[76,22163,22164],{"class":82},"    \u002F\u002F输出类成员变量这块内存\n",[76,22166,22167,22169,22171,22174,22176],{"class":78,"line":1725},[76,22168,1623],{"class":93},[76,22170,1243],{"class":89},[76,22172,22173],{"class":93},"p.m_A",[76,22175,1243],{"class":89},[76,22177,1265],{"class":93},[76,22179,22180],{"class":78,"line":1746},[76,22181,1637],{"class":93},[76,22183,22184,22186,22188],{"class":78,"line":1751},[76,22185,205],{"class":89},[76,22187,2045],{"class":2035},[76,22189,2048],{"class":93},[76,22191,22192],{"class":78,"line":1765},[76,22193,1618],{"class":93},[76,22195,22196,22198],{"class":78,"line":1770},[76,22197,5705],{"class":2035},[76,22199,2048],{"class":93},[76,22201,22202],{"class":78,"line":1799},[76,22203,1637],{"class":93},[14,22205,22206],{},"此时输出是报错的：无法解析外部命令",[14,22208,22209],{},"解决这一问题：必须用到类内声明，类外初始化操作",[67,22211,22213],{"className":190,"code":22212,"language":192,"meta":58,"style":58},"#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",[73,22214,22215,22221,22231,22237,22241,22245,22250,22258,22262,22267,22282,22290,22294,22298,22303,22308,22320,22325,22336,22341,22346,22359,22363,22371,22375,22381],{"__ignoreMap":58},[76,22216,22217,22219],{"class":78,"line":79},[76,22218,2021],{"class":89},[76,22220,2024],{"class":305},[76,22222,22223,22225,22227,22229],{"class":78,"line":86},[76,22224,2029],{"class":89},[76,22226,2032],{"class":89},[76,22228,2036],{"class":2035},[76,22230,1363],{"class":93},[76,22232,22233,22235],{"class":78,"line":97},[76,22234,14766],{"class":89},[76,22236,15243],{"class":2035},[76,22238,22239],{"class":78,"line":103},[76,22240,1618],{"class":93},[76,22242,22243],{"class":78,"line":1273},[76,22244,14788],{"class":89},[76,22246,22247],{"class":78,"line":1287},[76,22248,22249],{"class":82},"    \u002F\u002F类内声明\n",[76,22251,22252,22254,22256],{"class":78,"line":1293},[76,22253,11092],{"class":89},[76,22255,2454],{"class":89},[76,22257,21464],{"class":93},[76,22259,22260],{"class":78,"line":1384},[76,22261,4067],{"class":93},[76,22263,22264],{"class":78,"line":1390},[76,22265,22266],{"class":82},"\u002F\u002F类外初始化\n",[76,22268,22269,22271,22273,22276,22278,22280],{"class":78,"line":1402},[76,22270,205],{"class":89},[76,22272,15641],{"class":2035},[76,22274,22275],{"class":93},"::m_A",[76,22277,247],{"class":89},[76,22279,646],{"class":250},[76,22281,1363],{"class":93},[76,22283,22284,22286,22288],{"class":78,"line":1684},[76,22285,5436],{"class":89},[76,22287,5660],{"class":2035},[76,22289,2048],{"class":93},[76,22291,22292],{"class":78,"line":1689},[76,22293,1618],{"class":93},[76,22295,22296],{"class":78,"line":1695},[76,22297,15385],{"class":93},[76,22299,22300],{"class":78,"line":1700},[76,22301,22302],{"class":82},"    \u002F\u002F访问变量的原内存空间\n",[76,22304,22305],{"class":78,"line":1714},[76,22306,22307],{"class":82},"    \u002F\u002F100\n",[76,22309,22310,22312,22314,22316,22318],{"class":78,"line":1719},[76,22311,1623],{"class":93},[76,22313,1243],{"class":89},[76,22315,22173],{"class":93},[76,22317,1243],{"class":89},[76,22319,1265],{"class":93},[76,22321,22322],{"class":78,"line":1725},[76,22323,22324],{"class":93},"    Person p2;\n",[76,22326,22327,22330,22332,22334],{"class":78,"line":1746},[76,22328,22329],{"class":93},"    p2.m_A",[76,22331,247],{"class":89},[76,22333,1794],{"class":250},[76,22335,1363],{"class":93},[76,22337,22338],{"class":78,"line":1751},[76,22339,22340],{"class":82},"    \u002F\u002F继续访问这片空间\n",[76,22342,22343],{"class":78,"line":1765},[76,22344,22345],{"class":82},"    \u002F\u002F200\n",[76,22347,22348,22350,22352,22355,22357],{"class":78,"line":1770},[76,22349,1623],{"class":93},[76,22351,1243],{"class":89},[76,22353,22354],{"class":93},"p2.m_A",[76,22356,1243],{"class":89},[76,22358,1265],{"class":93},[76,22360,22361],{"class":78,"line":1799},[76,22362,1637],{"class":93},[76,22364,22365,22367,22369],{"class":78,"line":1804},[76,22366,205],{"class":89},[76,22368,2045],{"class":2035},[76,22370,2048],{"class":93},[76,22372,22373],{"class":78,"line":1821},[76,22374,1618],{"class":93},[76,22376,22377,22379],{"class":78,"line":1826},[76,22378,5705],{"class":2035},[76,22380,5708],{"class":93},[76,22382,22383],{"class":78,"line":1831},[76,22384,1637],{"class":93},[14,22386,22387],{},[350,22388,22389],{},"静态变量的访问",[67,22391,22393],{"className":190,"code":22392,"language":192,"meta":58,"style":58},"#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",[73,22394,22395,22401,22411,22417,22421,22425,22429,22437,22441,22446,22454,22458,22462,22476,22491,22499,22503,22508,22513,22518,22523,22535,22540,22545,22559,22576,22580,22588,22592,22598],{"__ignoreMap":58},[76,22396,22397,22399],{"class":78,"line":79},[76,22398,2021],{"class":89},[76,22400,2024],{"class":305},[76,22402,22403,22405,22407,22409],{"class":78,"line":86},[76,22404,2029],{"class":89},[76,22406,2032],{"class":89},[76,22408,2036],{"class":2035},[76,22410,1363],{"class":93},[76,22412,22413,22415],{"class":78,"line":97},[76,22414,14766],{"class":89},[76,22416,15243],{"class":2035},[76,22418,22419],{"class":78,"line":103},[76,22420,1618],{"class":93},[76,22422,22423],{"class":78,"line":1273},[76,22424,14788],{"class":89},[76,22426,22427],{"class":78,"line":1287},[76,22428,22249],{"class":82},[76,22430,22431,22433,22435],{"class":78,"line":1293},[76,22432,11092],{"class":89},[76,22434,2454],{"class":89},[76,22436,21464],{"class":93},[76,22438,22439],{"class":78,"line":1384},[76,22440,15294],{"class":89},[76,22442,22443],{"class":78,"line":1390},[76,22444,22445],{"class":82},"    \u002F\u002F静态成员变量也是有访问权限的\n",[76,22447,22448,22450,22452],{"class":78,"line":1402},[76,22449,11092],{"class":89},[76,22451,2454],{"class":89},[76,22453,21471],{"class":93},[76,22455,22456],{"class":78,"line":1684},[76,22457,4067],{"class":93},[76,22459,22460],{"class":78,"line":1689},[76,22461,22266],{"class":82},[76,22463,22464,22466,22468,22470,22472,22474],{"class":78,"line":1695},[76,22465,205],{"class":89},[76,22467,15641],{"class":2035},[76,22469,22275],{"class":93},[76,22471,247],{"class":89},[76,22473,646],{"class":250},[76,22475,1363],{"class":93},[76,22477,22478,22480,22482,22485,22487,22489],{"class":78,"line":1700},[76,22479,205],{"class":89},[76,22481,15641],{"class":2035},[76,22483,22484],{"class":93},"::m_B",[76,22486,247],{"class":89},[76,22488,899],{"class":250},[76,22490,1363],{"class":93},[76,22492,22493,22495,22497],{"class":78,"line":1714},[76,22494,5436],{"class":89},[76,22496,5729],{"class":2035},[76,22498,2048],{"class":93},[76,22500,22501],{"class":78,"line":1719},[76,22502,1618],{"class":93},[76,22504,22505],{"class":78,"line":1725},[76,22506,22507],{"class":82},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[76,22509,22510],{"class":78,"line":1746},[76,22511,22512],{"class":82},"    \u002F\u002F静态成员变量有两种访问方式：\n",[76,22514,22515],{"class":78,"line":1751},[76,22516,22517],{"class":82},"    \u002F\u002F1.通过对象进行访问\n",[76,22519,22520],{"class":78,"line":1765},[76,22521,22522],{"class":93},"    Person p;  \n",[76,22524,22525,22527,22529,22531,22533],{"class":78,"line":1770},[76,22526,1623],{"class":93},[76,22528,1243],{"class":89},[76,22530,22173],{"class":93},[76,22532,1243],{"class":89},[76,22534,1265],{"class":93},[76,22536,22537],{"class":78,"line":1799},[76,22538,22539],{"class":82},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[76,22541,22542],{"class":78,"line":1804},[76,22543,22544],{"class":82},"    \u002F\u002F2.通过类名进行访问\n",[76,22546,22547,22549,22551,22553,22555,22557],{"class":78,"line":1821},[76,22548,1623],{"class":93},[76,22550,1243],{"class":89},[76,22552,19118],{"class":2035},[76,22554,22275],{"class":93},[76,22556,1243],{"class":89},[76,22558,1265],{"class":93},[76,22560,22561,22563,22565,22567,22569,22571,22573],{"class":78,"line":1826},[76,22562,1623],{"class":93},[76,22564,1243],{"class":89},[76,22566,19118],{"class":2035},[76,22568,22484],{"class":93},[76,22570,1243],{"class":89},[76,22572,1311],{"class":93},[76,22574,22575],{"class":82}," \u002F\u002F没有访问权限，报错\n",[76,22577,22578],{"class":78,"line":1831},[76,22579,1637],{"class":93},[76,22581,22582,22584,22586],{"class":78,"line":1836},[76,22583,205],{"class":89},[76,22585,2045],{"class":2035},[76,22587,2048],{"class":93},[76,22589,22590],{"class":78,"line":1850},[76,22591,1618],{"class":93},[76,22593,22594,22596],{"class":78,"line":1855},[76,22595,5774],{"class":2035},[76,22597,5708],{"class":93},[76,22599,22600],{"class":78,"line":2649},[76,22601,1637],{"class":93},[22070,22603,22605],{"id":22604},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22607,22608],{},"1.静态成员函数定义与访问",[67,22610,22612],{"className":190,"code":22611,"language":192,"meta":58,"style":58},"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",[73,22613,22614,22620,22624,22628,22633,22644,22648,22662,22666,22670,22678,22682,22687,22692,22696,22704,22709,22719],{"__ignoreMap":58},[76,22615,22616,22618],{"class":78,"line":79},[76,22617,14766],{"class":89},[76,22619,15243],{"class":2035},[76,22621,22622],{"class":78,"line":86},[76,22623,1618],{"class":93},[76,22625,22626],{"class":78,"line":97},[76,22627,14788],{"class":89},[76,22629,22630],{"class":78,"line":103},[76,22631,22632],{"class":82},"    \u002F\u002F在公共权限下定义静态成员函数\n",[76,22634,22635,22637,22640,22642],{"class":78,"line":1273},[76,22636,11092],{"class":89},[76,22638,22639],{"class":89}," void",[76,22641,11457],{"class":2035},[76,22643,2048],{"class":93},[76,22645,22646],{"class":78,"line":1287},[76,22647,2102],{"class":93},[76,22649,22650,22653,22655,22658,22660],{"class":78,"line":1293},[76,22651,22652],{"class":93},"        coout",[76,22654,1243],{"class":89},[76,22656,22657],{"class":305},"\"静态成员函数的调用\"",[76,22659,1243],{"class":89},[76,22661,1265],{"class":93},[76,22663,22664],{"class":78,"line":1384},[76,22665,2259],{"class":93},[76,22667,22668],{"class":78,"line":1390},[76,22669,4067],{"class":93},[76,22671,22672,22674,22676],{"class":78,"line":1402},[76,22673,5436],{"class":89},[76,22675,5660],{"class":2035},[76,22677,2048],{"class":93},[76,22679,22680],{"class":78,"line":1684},[76,22681,1618],{"class":93},[76,22683,22684],{"class":78,"line":1689},[76,22685,22686],{"class":82},"    \u002F\u002F静态成员函数的调用方式:\n",[76,22688,22689],{"class":78,"line":1695},[76,22690,22691],{"class":82},"    \u002F\u002F1.通过对象访问\n",[76,22693,22694],{"class":78,"line":1700},[76,22695,15385],{"class":93},[76,22697,22698,22700,22702],{"class":78,"line":1714},[76,22699,15938],{"class":93},[76,22701,11623],{"class":2035},[76,22703,5708],{"class":93},[76,22705,22706],{"class":78,"line":1719},[76,22707,22708],{"class":82},"    \u002F\u002F2.通过类名访问\n",[76,22710,22711,22713,22715,22717],{"class":78,"line":1725},[76,22712,18591],{"class":2035},[76,22714,17804],{"class":93},[76,22716,11623],{"class":2035},[76,22718,5708],{"class":93},[76,22720,22721],{"class":78,"line":1746},[76,22722,1637],{"class":93},[152,22724,22725],{"start":86},[155,22726,22727],{},"静态成员函数只能访问静态成员变量",[67,22729,22731],{"className":190,"code":22730,"language":192,"meta":58,"style":58},"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",[73,22732,22733,22739,22743,22747,22751,22761,22765,22779,22784,22796,22800,22811,22821,22825,22829,22833,22843,22847,22860,22864,22868,22872,22876,22890,22898,22902,22906,22910,22914,22922,22926,22936,22941,22945,22953,22957,22963],{"__ignoreMap":58},[76,22734,22735,22737],{"class":78,"line":79},[76,22736,14766],{"class":89},[76,22738,15243],{"class":2035},[76,22740,22741],{"class":78,"line":86},[76,22742,1618],{"class":93},[76,22744,22745],{"class":78,"line":97},[76,22746,14788],{"class":89},[76,22748,22749],{"class":78,"line":103},[76,22750,22632],{"class":82},[76,22752,22753,22755,22757,22759],{"class":78,"line":1273},[76,22754,11092],{"class":89},[76,22756,22639],{"class":89},[76,22758,11457],{"class":2035},[76,22760,2048],{"class":93},[76,22762,22763],{"class":78,"line":1287},[76,22764,2102],{"class":93},[76,22766,22767,22770,22772,22774,22776],{"class":78,"line":1293},[76,22768,22769],{"class":93},"        m_A",[76,22771,247],{"class":89},[76,22773,512],{"class":250},[76,22775,257],{"class":93},[76,22777,22778],{"class":82}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[76,22780,22781],{"class":78,"line":1384},[76,22782,22783],{"class":82},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[76,22785,22786,22788,22790,22792,22794],{"class":78,"line":1390},[76,22787,22652],{"class":93},[76,22789,1243],{"class":89},[76,22791,22657],{"class":305},[76,22793,1243],{"class":89},[76,22795,1265],{"class":93},[76,22797,22798],{"class":78,"line":1402},[76,22799,2259],{"class":93},[76,22801,22802,22804,22806,22808],{"class":78,"line":1684},[76,22803,11092],{"class":89},[76,22805,2454],{"class":89},[76,22807,15520],{"class":93},[76,22809,22810],{"class":82}," \u002F\u002F静态成员变量\n",[76,22812,22813,22815,22818],{"class":78,"line":1689},[76,22814,2057],{"class":89},[76,22816,22817],{"class":93}," m_B;",[76,22819,22820],{"class":82}," \u002F\u002F非静态成员变量\n",[76,22822,22823],{"class":78,"line":1695},[76,22824,2472],{"emptyLinePlaceholder":125},[76,22826,22827],{"class":78,"line":1700},[76,22828,15294],{"class":89},[76,22830,22831],{"class":78,"line":1714},[76,22832,22445],{"class":82},[76,22834,22835,22837,22839,22841],{"class":78,"line":1719},[76,22836,11092],{"class":89},[76,22838,22639],{"class":89},[76,22840,13690],{"class":2035},[76,22842,2048],{"class":93},[76,22844,22845],{"class":78,"line":1725},[76,22846,2102],{"class":93},[76,22848,22849,22851,22853,22856,22858],{"class":78,"line":1746},[76,22850,3523],{"class":93},[76,22852,1243],{"class":89},[76,22854,22855],{"class":305},"\"这是私有权限下的静态函数调用\"",[76,22857,1243],{"class":89},[76,22859,1265],{"class":93},[76,22861,22862],{"class":78,"line":1751},[76,22863,2259],{"class":93},[76,22865,22866],{"class":78,"line":1765},[76,22867,2472],{"emptyLinePlaceholder":125},[76,22869,22870],{"class":78,"line":1770},[76,22871,2472],{"emptyLinePlaceholder":125},[76,22873,22874],{"class":78,"line":1799},[76,22875,4067],{"class":93},[76,22877,22878,22880,22882,22884,22886,22888],{"class":78,"line":1804},[76,22879,205],{"class":89},[76,22881,15641],{"class":2035},[76,22883,22275],{"class":93},[76,22885,247],{"class":89},[76,22887,392],{"class":250},[76,22889,1363],{"class":93},[76,22891,22892,22894,22896],{"class":78,"line":1821},[76,22893,5436],{"class":89},[76,22895,5660],{"class":2035},[76,22897,2048],{"class":93},[76,22899,22900],{"class":78,"line":1826},[76,22901,1618],{"class":93},[76,22903,22904],{"class":78,"line":1831},[76,22905,22686],{"class":82},[76,22907,22908],{"class":78,"line":1836},[76,22909,22691],{"class":82},[76,22911,22912],{"class":78,"line":1850},[76,22913,15385],{"class":93},[76,22915,22916,22918,22920],{"class":78,"line":1855},[76,22917,15938],{"class":93},[76,22919,11623],{"class":2035},[76,22921,5708],{"class":93},[76,22923,22924],{"class":78,"line":2649},[76,22925,22708],{"class":82},[76,22927,22928,22930,22932,22934],{"class":78,"line":2663},[76,22929,18591],{"class":2035},[76,22931,17804],{"class":93},[76,22933,11623],{"class":2035},[76,22935,5708],{"class":93},[76,22937,22938],{"class":78,"line":2671},[76,22939,22940],{"class":82},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[76,22942,22943],{"class":78,"line":2676},[76,22944,1637],{"class":93},[76,22946,22947,22949,22951],{"class":78,"line":2682},[76,22948,205],{"class":89},[76,22950,2045],{"class":2035},[76,22952,2048],{"class":93},[76,22954,22955],{"class":78,"line":2688},[76,22956,1618],{"class":93},[76,22958,22959,22961],{"class":78,"line":2693},[76,22960,5705],{"class":2035},[76,22962,5708],{"class":93},[76,22964,22965],{"class":78,"line":8020},[76,22966,1637],{"class":93},[169,22968,22970],{"id":22969},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22070,22972,22974],{"id":22973},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22976,22977],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22979,22980],{},"只有非静态成员变量才属于类的对象上",[22982,22983,22985],"h5",{"id":22984},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[67,22987,22989],{"className":190,"code":22988,"language":192,"meta":58,"style":58},"#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",[73,22990,22991,22998,23008,23014,23018,23022,23026,23034,23038,23042,23065,23069,23077,23081,23087],{"__ignoreMap":58},[76,22992,22993,22995],{"class":78,"line":79},[76,22994,2021],{"class":89},[76,22996,22997],{"class":305},"\u003Ciostraem>\n",[76,22999,23000,23002,23004,23006],{"class":78,"line":86},[76,23001,2029],{"class":89},[76,23003,2032],{"class":89},[76,23005,2036],{"class":2035},[76,23007,1363],{"class":93},[76,23009,23010,23012],{"class":78,"line":97},[76,23011,14766],{"class":89},[76,23013,15243],{"class":2035},[76,23015,23016],{"class":78,"line":103},[76,23017,1618],{"class":93},[76,23019,23020],{"class":78,"line":1273},[76,23021,2472],{"emptyLinePlaceholder":125},[76,23023,23024],{"class":78,"line":1287},[76,23025,4067],{"class":93},[76,23027,23028,23030,23032],{"class":78,"line":1293},[76,23029,5436],{"class":89},[76,23031,5660],{"class":2035},[76,23033,2048],{"class":93},[76,23035,23036],{"class":78,"line":1384},[76,23037,1618],{"class":93},[76,23039,23040],{"class":78,"line":1390},[76,23041,15385],{"class":93},[76,23043,23044,23046,23048,23051,23053,23056,23058,23060,23062],{"class":78,"line":1402},[76,23045,1623],{"class":93},[76,23047,1243],{"class":89},[76,23049,23050],{"class":305},"\"size of p=\"",[76,23052,1243],{"class":89},[76,23054,23055],{"class":2035},"sizeoif",[76,23057,6611],{"class":93},[76,23059,1243],{"class":89},[76,23061,1311],{"class":93},[76,23063,23064],{"class":82}," \u002F\u002F查看这个空类的占用的内存空间\n",[76,23066,23067],{"class":78,"line":1684},[76,23068,1637],{"class":93},[76,23070,23071,23073,23075],{"class":78,"line":1689},[76,23072,205],{"class":89},[76,23074,2045],{"class":2035},[76,23076,2048],{"class":93},[76,23078,23079],{"class":78,"line":1695},[76,23080,1618],{"class":93},[76,23082,23083,23085],{"class":78,"line":1700},[76,23084,5705],{"class":2035},[76,23086,5708],{"class":93},[76,23088,23089],{"class":78,"line":1714},[76,23090,1637],{"class":93},[14,23092,23093],{},"输出结果为：size of p=1",[14,23095,23096],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23098,23099],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22982,23101,23103],{"id":23102},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[67,23105,23107],{"className":190,"code":23106,"language":192,"meta":58,"style":58},"#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",[73,23108,23109,23115,23125,23133,23137,23146,23150,23158,23162,23166,23185,23189,23193,23201,23205,23211],{"__ignoreMap":58},[76,23110,23111,23113],{"class":78,"line":79},[76,23112,2021],{"class":89},[76,23114,2024],{"class":305},[76,23116,23117,23119,23121,23123],{"class":78,"line":86},[76,23118,2029],{"class":89},[76,23120,2032],{"class":89},[76,23122,2036],{"class":2035},[76,23124,1363],{"class":93},[76,23126,23127,23129,23131],{"class":78,"line":97},[76,23128,14766],{"class":89},[76,23130,15641],{"class":2035},[76,23132,2746],{"class":93},[76,23134,23135],{"class":78,"line":103},[76,23136,1618],{"class":93},[76,23138,23139,23141,23143],{"class":78,"line":1273},[76,23140,2057],{"class":89},[76,23142,15520],{"class":93},[76,23144,23145],{"class":82},"\u002F\u002F非静态成员变量\n",[76,23147,23148],{"class":78,"line":1287},[76,23149,4067],{"class":93},[76,23151,23152,23154,23156],{"class":78,"line":1293},[76,23153,5436],{"class":89},[76,23155,5660],{"class":2035},[76,23157,2048],{"class":93},[76,23159,23160],{"class":78,"line":1384},[76,23161,1618],{"class":93},[76,23163,23164],{"class":78,"line":1390},[76,23165,15385],{"class":93},[76,23167,23168,23170,23172,23174,23176,23178,23180,23182],{"class":78,"line":1402},[76,23169,1623],{"class":93},[76,23171,1243],{"class":89},[76,23173,23050],{"class":305},[76,23175,1445],{"class":89},[76,23177,6611],{"class":93},[76,23179,1243],{"class":89},[76,23181,1311],{"class":93},[76,23183,23184],{"class":82}," \u002F\u002F查看不是空对象时占用多少内存\n",[76,23186,23187],{"class":78,"line":1684},[76,23188,2472],{"emptyLinePlaceholder":125},[76,23190,23191],{"class":78,"line":1689},[76,23192,1637],{"class":93},[76,23194,23195,23197,23199],{"class":78,"line":1695},[76,23196,205],{"class":89},[76,23198,2045],{"class":2035},[76,23200,2048],{"class":93},[76,23202,23203],{"class":78,"line":1700},[76,23204,1618],{"class":93},[76,23206,23207,23209],{"class":78,"line":1714},[76,23208,5705],{"class":2035},[76,23210,5708],{"class":93},[76,23212,23213],{"class":78,"line":1719},[76,23214,1637],{"class":93},[14,23216,23217],{},"输出结果：size of p=4",[14,23219,23220],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[152,23222,23223],{},[155,23224,23225],{},"如果加上非静态成员变量，Person类修改如下",[67,23227,23229],{"className":190,"code":23228,"language":192,"meta":58,"style":58},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[73,23230,23231,23237,23241,23247,23255,23259,23264],{"__ignoreMap":58},[76,23232,23233,23235],{"class":78,"line":79},[76,23234,14766],{"class":89},[76,23236,15243],{"class":2035},[76,23238,23239],{"class":78,"line":86},[76,23240,1618],{"class":93},[76,23242,23243,23245],{"class":78,"line":97},[76,23244,2057],{"class":89},[76,23246,21464],{"class":93},[76,23248,23249,23251,23253],{"class":78,"line":103},[76,23250,11092],{"class":89},[76,23252,2454],{"class":89},[76,23254,21471],{"class":93},[76,23256,23257],{"class":78,"line":1273},[76,23258,4067],{"class":93},[76,23260,23261],{"class":78,"line":1287},[76,23262,23263],{"class":82},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[76,23265,23266,23268,23270,23272,23274,23276],{"class":78,"line":1293},[76,23267,205],{"class":89},[76,23269,15641],{"class":2035},[76,23271,22484],{"class":93},[76,23273,247],{"class":89},[76,23275,392],{"class":250},[76,23277,1363],{"class":93},[14,23279,23280],{},"输出结果：4",[14,23282,23283],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[152,23285,23286],{"start":86},[155,23287,23288],{},"加上非静态成员函数",[67,23290,23292],{"className":190,"code":23291,"language":192,"meta":58,"style":58},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[73,23293,23294,23301,23305,23311,23319,23323,23327,23331],{"__ignoreMap":58},[76,23295,23296,23298],{"class":78,"line":79},[76,23297,14766],{"class":89},[76,23299,23300],{"class":2035},"  Person\n",[76,23302,23303],{"class":78,"line":86},[76,23304,1618],{"class":93},[76,23306,23307,23309],{"class":78,"line":97},[76,23308,2057],{"class":89},[76,23310,21464],{"class":93},[76,23312,23313,23315,23317],{"class":78,"line":103},[76,23314,14981],{"class":89},[76,23316,11457],{"class":2035},[76,23318,2048],{"class":93},[76,23320,23321],{"class":78,"line":1273},[76,23322,2102],{"class":93},[76,23324,23325],{"class":78,"line":1287},[76,23326,2472],{"emptyLinePlaceholder":125},[76,23328,23329],{"class":78,"line":1293},[76,23330,2259],{"class":93},[76,23332,23333],{"class":78,"line":1384},[76,23334,4067],{"class":93},[14,23336,23337],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[152,23339,23340],{"start":97},[155,23341,23342],{},"加上静态成员函数",[67,23344,23346],{"className":190,"code":23345,"language":192,"meta":58,"style":58},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[73,23347,23348,23354,23358,23364,23372,23376,23380,23384,23395,23399,23403,23407],{"__ignoreMap":58},[76,23349,23350,23352],{"class":78,"line":79},[76,23351,14766],{"class":89},[76,23353,23300],{"class":2035},[76,23355,23356],{"class":78,"line":86},[76,23357,1618],{"class":93},[76,23359,23360,23362],{"class":78,"line":97},[76,23361,2057],{"class":89},[76,23363,21464],{"class":93},[76,23365,23366,23368,23370],{"class":78,"line":103},[76,23367,14981],{"class":89},[76,23369,11457],{"class":2035},[76,23371,2048],{"class":93},[76,23373,23374],{"class":78,"line":1273},[76,23375,2102],{"class":93},[76,23377,23378],{"class":78,"line":1287},[76,23379,2472],{"emptyLinePlaceholder":125},[76,23381,23382],{"class":78,"line":1293},[76,23383,2259],{"class":93},[76,23385,23386,23388,23390,23393],{"class":78,"line":1384},[76,23387,11092],{"class":89},[76,23389,22639],{"class":89},[76,23391,23392],{"class":2035}," func1",[76,23394,2048],{"class":93},[76,23396,23397],{"class":78,"line":1390},[76,23398,2102],{"class":93},[76,23400,23401],{"class":78,"line":1402},[76,23402,2472],{"emptyLinePlaceholder":125},[76,23404,23405],{"class":78,"line":1684},[76,23406,2259],{"class":93},[76,23408,23409],{"class":78,"line":1689},[76,23410,4067],{"class":93},[14,23412,23280],{},[14,23414,23415],{},"解释：静态成员函数也不属于类上",[117,23417,7746],{},{"title":58,"searchDepth":86,"depth":86,"links":23419},[23420,23426],{"id":14717,"depth":86,"text":14718,"children":23421},[23422,23423,23424,23425],{"id":14721,"depth":97,"text":14722},{"id":15446,"depth":97,"text":15447},{"id":15618,"depth":97,"text":15619},{"id":16077,"depth":97,"text":16078},{"id":18449,"depth":86,"text":18450,"children":23427},[23428,23429,23430,23431,23432,23433,23434,23435,23436],{"id":18461,"depth":97,"text":18462},{"id":18754,"depth":97,"text":18755},{"id":19245,"depth":97,"text":19246},{"id":20342,"depth":97,"text":20343},{"id":20765,"depth":97,"text":20766},{"id":21244,"depth":97,"text":21245},{"id":21619,"depth":97,"text":21620},{"id":22032,"depth":97,"text":22033},{"id":22969,"depth":97,"text":22970},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14682,"description":23437},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23444,"title":192,"body":23445,"description":122,"extension":123,"meta":23449,"navigation":125,"path":23451,"seo":23452,"stem":23453,"__hash__":23454},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23446,"toc":23447},[],{"title":58,"searchDepth":86,"depth":86,"links":23448},[],{"category":23450},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":192,"description":122},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23456,"title":23457,"body":23458,"description":58,"extension":123,"meta":24049,"navigation":125,"path":24050,"seo":24051,"stem":24052,"__hash__":24053},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23459,"toc":24031},[23460,23463,23467,23470,23473,23476,23494,23499,23502,23505,23508,23511,23516,23519,23524,23527,23530,23534,23537,23540,23546,23549,23567,23571,23575,23578,23583,23586,23590,23593,23606,23609,23613,23616,23619,23622,23647,23650,23659,23670,23685,23717,23721,23728,23736,23740,23743,23746,23751,23755,23758,23761,23766,23769,23773,23776,23779,23784,23787,23791,23796,23800,23867,23871,23874,23877,23880,23883,23886,23892,23913,23916,23930,23939,23943,23946,23949,23954,23957,23962,23967,23970,23973,23978,23983,23986,23991,23996,23999,24004,24009,24012,24015,24020,24023,24028],[10,23461,23457],{"id":23462},"_1强化学习基本认识",[140,23464,23466],{"id":23465},"_11什么是强化学习","1.1.什么是强化学习",[14,23468,23469],{},"强化学习有两部分组成：智能体和环境；",[14,23471,23472],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23474,23475],{},"强化学习与监督学习的区别:",[152,23477,23478,23481,23484,23487],{},[155,23479,23480],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[155,23482,23483],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[155,23485,23486],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[155,23488,23489,23490,23493],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[350,23491,23492],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23495,23496],{},[56,23497],{"alt":58,"src":23498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23500,23501],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23503,23504],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23506,23507],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23509,23510],{},"获取奖励",[14,23512,23513],{},[56,23514],{"alt":58,"src":23515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23517,23518],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23520,23521],{},[56,23522],{"alt":58,"src":23523},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23525,23526],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23528,23529],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[140,23531,23533],{"id":23532},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23535,23536],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23538,23539],{},"具身智能中的应用",[14,23541,23542,23545],{},[350,23543,23544],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23547,23548],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23550,23551,23552,23555,23556,23559,23560,23563,23564],{},"机器人是",[350,23553,23554],{},"躯体","，深度学习是",[350,23557,23558],{},"神经元****网络","，VLA是",[350,23561,23562],{},"通用的行为逻辑","，而强化学习是",[350,23565,23566],{},"教练",[140,23568,23570],{"id":23569},"_13序列决策","1.3.序列决策",[169,23572,23574],{"id":23573},"_131智能体与环境","1.3.1.智能体与环境",[14,23576,23577],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23579,23580],{},[56,23581],{"alt":58,"src":23582},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23584,23585],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[169,23587,23589],{"id":23588},"_132奖励","1.3.2.奖励",[14,23591,23592],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23594,23595,23596,23605],{},"取某个策略的表现如何。强化学习的目的就是",[350,23597,23598,23599,23604],{},"最大化",[350,23600,23601],{},[350,23602,23603],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23607,23608],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[169,23610,23612],{"id":23611},"_133序列决策","1.3.3.序列决策",[14,23614,23615],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23617,23618],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23620,23621],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23623,23624,23628,23629,23631,23632,23634,23635,23637,23638,13867,23641,13867,23644],{},[23625,23626,23627],"em",{},"Ht"," = ",[23625,23630,795],{},"1*, a",[23625,23633,418],{},", r",[23625,23636,418],{},", . . . ,* ",[23625,23639,23640],{},"ot",[23625,23642,23643],{},", at ,",[23625,23645,23646],{},"rt",[14,23648,23649],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23651,23652,23628,23655,1730,23657,629],{},[23625,23653,23654],{},"st",[23625,23656,254],{},[23625,23658,23627],{},[14,23660,23661,23662,23665,23666,23669],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[350,23663,23664],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[350,23667,23668],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23671,23672,23673,23676,23677,23680,23681,23684],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[350,23674,23675],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[350,23678,23679],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23625,23682,23683],{},"S, A, T, R, Ω, O, γ",")。",[14,23686,23687,23688,23690,23691,23693,23694,202,23696,23699,23700,23702,23703,202,23706,23709,23710,23712,23713,23716],{},"其中 ",[23625,23689,888],{}," 表示状态空间，为隐变量，",[23625,23692,433],{}," 为动作空间，",[23625,23695,913],{},[23625,23697,23698],{},"s ′ |s, a",") 为状态转移概率，",[23625,23701,863],{}," 为奖励函数，",[23625,23704,23705],{},"Ω",[23625,23707,23708],{},"o|s, a",") 为观测概率，",[23625,23711,789],{}," 为观测空间，",[23625,23714,23715],{},"γ"," 为折扣因子。",[140,23718,23720],{"id":23719},"_14动作空间","1.4.动作空间",[14,23722,23723,23724,23727],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[350,23725,23726],{},"动作空间"," ，动作空间分为:",[152,23729,23730,23733],{},[155,23731,23732],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[155,23734,23735],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[140,23737,23739],{"id":23738},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23741,23742],{},"由策略、价值函数、模型三部分组成",[14,23744,23745],{},"这三者组成马尔可夫决策过程",[14,23747,23748],{},[56,23749],{"alt":58,"src":23750},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[169,23752,23754],{"id":23753},"_151策略","1.5.1.策略",[14,23756,23757],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23759,23760],{},"策略可分为两种：",[14,23762,23763],{},[56,23764],{"alt":58,"src":23765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23767,23768],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[169,23770,23772],{"id":23771},"_152价值函数","1.5.2.价值函数",[14,23774,23775],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23777,23778],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23780,23781],{},[56,23782],{"alt":58,"src":23783},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23785,23786],{},"进入某个状态采取的最优动作可以通过Q函数得到",[169,23788,23790],{"id":23789},"_153模型","1.5.3.模型",[14,23792,23793],{},[56,23794],{"alt":58,"src":23795},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[140,23797,23799],{"id":23798},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[338,23801,23802,23813],{},[341,23803,23804],{},[344,23805,23806,23810],{},[347,23807,23809],{"align":23808},"left","类型",[347,23811,23812],{"align":23808},"特点",[385,23814,23815,23825,23835,23845,23857],{},[344,23816,23817,23822],{},[390,23818,23819],{"align":23808},[350,23820,23821],{},"基于价值的智能体",[390,23823,23824],{"align":23808},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[344,23826,23827,23832],{},[390,23828,23829],{"align":23808},[350,23830,23831],{},"基于策略的智能体",[390,23833,23834],{"align":23808},"直接学习策略，没有学习价值函数",[344,23836,23837,23842],{},[390,23838,23839],{"align":23808},[350,23840,23841],{},"演员-评论员智能体",[390,23843,23844],{"align":23808},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[344,23846,23847,23852],{},[390,23848,23849],{"align":23808},[350,23850,23851],{},"有模型强化学习智能体",[390,23853,23854],{"align":23808},[56,23855],{"alt":58,"src":23856},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[344,23858,23859,23864],{},[390,23860,23861],{"align":23808},[350,23862,23863],{},"免模型强化学习智能体",[390,23865,23866],{"align":23808},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[140,23868,23870],{"id":23869},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23872,23873],{},"学习和规划是序列决策的两个基本问题",[14,23875,23876],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23878,23879],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23881,23882],{},"强化学习用到的库：Gym",[14,23884,23885],{},"Gym可以检验强化学习算法的优劣",[14,23887,23888,23891],{},[350,23889,23890],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[67,23893,23897],{"className":23894,"code":23895,"language":23896,"meta":58,"style":58},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[73,23898,23899],{"__ignoreMap":58},[76,23900,23901,23904,23907,23910],{"class":78,"line":79},[76,23902,23903],{"class":2035},"pip",[76,23905,23906],{"class":305}," install",[76,23908,23909],{"class":305}," gym==",[76,23911,23912],{"class":250},"0.25.2\n",[14,23914,23915],{},"显示图形界面需要",[67,23917,23919],{"className":23894,"code":23918,"language":23896,"meta":58,"style":58},"pip install pygame\n",[73,23920,23921],{"__ignoreMap":58},[76,23922,23923,23925,23927],{"class":78,"line":79},[76,23924,23903],{"class":2035},[76,23926,23906],{"class":305},[76,23928,23929],{"class":305}," pygame\n",[14,23931,23932,23933],{},"有关Gym库的相关文档介绍：",[439,23934,23938],{"href":23935,"rel":23936},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23937],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[140,23940,23942],{"id":23941},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23944,23945],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23947,23948],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23950,23951],{},[56,23952],{"alt":58,"src":23953},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23955,23956],{},"折扣率需要自己来设定",[14,23958,23959],{},[56,23960],{"alt":58,"src":23961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[152,23963,23964],{},[155,23965,23966],{},"状态转移函数：",[14,23968,23969],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23971,23972],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23974,23975],{},[56,23976],{"alt":58,"src":23977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[152,23979,23980],{"start":86},[155,23981,23982],{},"动作价值函数：",[14,23984,23985],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23987,23988],{},[56,23989],{"alt":58,"src":23990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[152,23992,23993],{"start":97},[155,23994,23995],{},"最优动作价值函数：",[14,23997,23998],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,24000,24001],{},[56,24002],{"alt":58,"src":24003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[152,24005,24006],{"start":103},[155,24007,24008],{},"状态价值函数:",[14,24010,24011],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24013,24014],{},"它衡量的是“一个具体动作”的长期价值",[14,24016,24017],{},[56,24018],{"alt":58,"src":24019},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24021,24022],{},"几个价值函数之间的比较：",[14,24024,24025],{},[56,24026],{"alt":58,"src":24027},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[117,24029,24030],{},"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":58,"searchDepth":86,"depth":86,"links":24032},[24033,24034,24035,24040,24041,24046,24047,24048],{"id":23465,"depth":86,"text":23466},{"id":23532,"depth":86,"text":23533},{"id":23569,"depth":86,"text":23570,"children":24036},[24037,24038,24039],{"id":23573,"depth":97,"text":23574},{"id":23588,"depth":97,"text":23589},{"id":23611,"depth":97,"text":23612},{"id":23719,"depth":86,"text":23720},{"id":23738,"depth":86,"text":23739,"children":24042},[24043,24044,24045],{"id":23753,"depth":97,"text":23754},{"id":23771,"depth":97,"text":23772},{"id":23789,"depth":97,"text":23790},{"id":23798,"depth":86,"text":23799},{"id":23869,"depth":86,"text":23870},{"id":23941,"depth":86,"text":23942},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23457,"description":58},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24055,"title":24056,"body":24057,"description":24064,"extension":123,"meta":24075,"navigation":125,"path":24076,"seo":24077,"stem":24078,"__hash__":24079},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24058,"toc":24073},[24059,24062,24065,24070],[10,24060,24056],{"id":24061},"_2马尔可夫决策过程",[14,24063,24064],{},"这是强化学习的基本框架",[14,24066,24067],{},[56,24068],{"alt":58,"src":24069},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24071,24072],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":58,"searchDepth":86,"depth":86,"links":24074},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24056,"description":24064},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24081,"title":24082,"body":24083,"description":58,"extension":123,"meta":24199,"navigation":125,"path":24200,"seo":24201,"stem":24202,"__hash__":24203},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24084,"toc":24194},[24085,24088,24092,24095,24100,24105,24108,24113,24116,24121,24124,24128,24133,24136,24141,24146,24151,24154,24158,24163,24166,24171,24176,24181,24186,24189],[10,24086,24082],{"id":24087},"_3动作价值函数",[140,24089,24091],{"id":24090},"_31dqn","3.1.DQN",[14,24093,24094],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24096,24097],{},[56,24098],{"alt":58,"src":24099},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24101,24102],{},[56,24103],{"alt":58,"src":24104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24106,24107],{},"DQN算法的描述：",[14,24109,24110],{},[56,24111],{"alt":58,"src":24112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24114,24115],{},"这里的Dense指的是全连接层",[14,24117,24118],{},[56,24119],{"alt":58,"src":24120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24122,24123],{},"当前观测的状态为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算法",[140,24125,24127],{"id":24126},"_32dqn的举例","3.2.DQN的举例",[14,24129,24130],{},[56,24131],{"alt":58,"src":24132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24134,24135],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24137,24138],{},[56,24139],{"alt":58,"src":24140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24142,24143],{},[56,24144],{"alt":58,"src":24145},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24147,24148],{},[56,24149],{"alt":58,"src":24150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24152,24153],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[140,24155,24157],{"id":24156},"_33td算法","3.3.TD算法",[14,24159,24160],{},[56,24161],{"alt":58,"src":24162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24164,24165],{},"强化学习TD算法公式的粗略解释：",[14,24167,24168],{},[56,24169],{"alt":58,"src":24170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24172,24173],{},[56,24174],{"alt":58,"src":24175},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24177,24178],{},[56,24179],{"alt":58,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24182,24183],{},[56,24184],{"alt":58,"src":24185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24187,24188],{},"TD算法总结：",[14,24190,24191],{},[56,24192],{"alt":58,"src":24193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":58,"searchDepth":86,"depth":86,"links":24195},[24196,24197,24198],{"id":24090,"depth":86,"text":24091},{"id":24126,"depth":86,"text":24127},{"id":24156,"depth":86,"text":24157},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24082,"description":58},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24205,"title":24206,"body":24207,"description":58,"extension":123,"meta":24440,"navigation":125,"path":24441,"seo":24442,"stem":24443,"__hash__":24444},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24208,"toc":24436},[24209,24212,24216,24219,24222,24227,24232,24235,24240,24245,24248,24253,24256,24261,24264,24269,24272,24277,24280,24285,24290,24293,24298,24301,24304,24309,24312,24317,24322,24326,24329,24332,24337,24342,24345,24350,24355,24358,24363,24366,24369,24374,24377,24382,24385,24390,24395,24398,24403,24408,24411,24416,24419,24424,24427],[10,24210,24206],{"id":24211},"_4策略学习",[140,24213,24215],{"id":24214},"_41概念描述","4.1.概念描述",[14,24217,24218],{},"用神经网络（策略网络）近似策略函数",[14,24220,24221],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24223,24224],{},[56,24225],{"alt":58,"src":24226},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24228,24229],{},[56,24230],{"alt":58,"src":24231},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24233,24234],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24236,24237],{},[56,24238],{"alt":58,"src":24239},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24241,24242],{},[56,24243],{"alt":58,"src":24244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24246,24247],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24249,24250],{},[56,24251],{"alt":58,"src":24252},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24254,24255],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24257,24258],{},[56,24259],{"alt":58,"src":24260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24262,24263],{},"改进theta要用到策略梯度算法",[14,24265,24266],{},[56,24267],{"alt":58,"src":24268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24270,24271],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24273,24274],{},[56,24275],{"alt":58,"src":24276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24278,24279],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24281,24282],{},[56,24283],{"alt":58,"src":24284},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24286,24287],{},[56,24288],{"alt":58,"src":24289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24291,24292],{},"梯度公式总结：",[14,24294,24295],{},[56,24296],{"alt":58,"src":24297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24299,24300],{},"两个公式的分别应用场景：",[14,24302,24303],{},"对于离散的动作：",[14,24305,24306],{},[56,24307],{"alt":58,"src":24308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24310,24311],{},"对于连续的动作：",[14,24313,24314],{},[56,24315],{"alt":58,"src":24316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24318,24319],{},[56,24320],{"alt":58,"src":24321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[140,24323,24325],{"id":24324},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24327,24328],{},"使用蒙特卡洛来近似计算策略梯度",[14,24330,24331],{},"蒙特卡洛法的解释如下：",[14,24333,24334],{},[56,24335],{"alt":58,"src":24336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24338,24339],{},[56,24340],{"alt":58,"src":24341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24343,24344],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[152,24346,24347],{},[155,24348,24349],{},"方法一：reinforce算法",[14,24351,24352],{},[56,24353],{"alt":58,"src":24354},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24356,24357],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[152,24359,24360],{"start":86},[155,24361,24362],{},"方法二：actor-critic算法",[14,24364,24365],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24367,24368],{},"两个网络的构建：",[14,24370,24371],{},[56,24372],{"alt":58,"src":24373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24375,24376],{},"actor网路：",[14,24378,24379],{},[56,24380],{"alt":58,"src":24381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24383,24384],{},"critic网络",[14,24386,24387],{},[56,24388],{"alt":58,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[152,24391,24392],{"start":97},[155,24393,24394],{},"网络的训练",[14,24396,24397],{},"网络描述",[14,24399,24400],{},[56,24401],{"alt":58,"src":24402},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24404,24405],{},[56,24406],{"alt":58,"src":24407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24409,24410],{},"TD算法更新梯度：",[14,24412,24413],{},[56,24414],{"alt":58,"src":24415},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24417,24418],{},"策略网络更新梯度：",[14,24420,24421],{},[56,24422],{"alt":58,"src":24423},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24425,24426],{},"训练整个流程的具体描述：",[14,24428,24429,24432,24433],{},[56,24430],{"alt":58,"src":24431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[56,24434],{"alt":58,"src":24435},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":58,"searchDepth":86,"depth":86,"links":24437},[24438,24439],{"id":24214,"depth":86,"text":24215},{"id":24324,"depth":86,"text":24325},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24206,"description":58},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24446,"title":24447,"body":24448,"description":24455,"extension":123,"meta":24505,"navigation":125,"path":24506,"seo":24507,"stem":24508,"__hash__":24509},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24449,"toc":24501},[24450,24453,24456,24460,24463,24468,24472,24475,24480,24483,24488,24493,24496],[10,24451,24447],{"id":24452},"_5alphago算法",[14,24454,24455],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[140,24457,24459],{"id":24458},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24461,24462],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24464,24465],{},[56,24466],{"alt":58,"src":24467},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[140,24469,24471],{"id":24470},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24473,24474],{},"采用强化学习的方式训练策略网络",[14,24476,24477],{},[56,24478],{"alt":58,"src":24479},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24481,24482],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24484,24485],{},[56,24486],{"alt":58,"src":24487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24489,24490],{},[56,24491],{"alt":58,"src":24492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24494,24495],{},"强化学习训练策略网络的总结：",[14,24497,24498],{},[56,24499],{"alt":58,"src":24500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":58,"searchDepth":86,"depth":86,"links":24502},[24503,24504],{"id":24458,"depth":86,"text":24459},{"id":24470,"depth":86,"text":24471},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24447,"description":24455},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24511,"title":24512,"body":24513,"description":24520,"extension":123,"meta":24523,"navigation":125,"path":24524,"seo":24525,"stem":24526,"__hash__":24527},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24514,"toc":24521},[24515,24518],[10,24516,24512],{"id":24517},"_6价值网络",[14,24519,24520],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":58,"searchDepth":86,"depth":86,"links":24522},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24512,"description":24520},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24529,"title":24530,"body":24531,"description":24535,"extension":123,"meta":24536,"navigation":125,"path":24537,"seo":24538,"stem":24539,"__hash__":24540},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24532,"toc":24533},[],{"title":58,"searchDepth":86,"depth":86,"links":24534},[],"记录自己的强化学习笔记。",{"category":23450},"\u002Fwiki\u002F2025-12-04",{"title":24530,"description":24535},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24542,"title":24543,"body":24544,"description":122,"extension":123,"meta":24583,"navigation":125,"path":24584,"seo":24585,"stem":24586,"__hash__":24587},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24545,"toc":24581},[24546,24549,24552,24558,24561,24567,24570,24575,24578],[10,24547,24543],{"id":24548},"_1-项目概览与官方资源",[14,24550,24551],{},"官方文档：",[14,24553,24554],{},[439,24555,24556],{"href":24556,"rel":24557},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23937],[14,24559,24560],{},"官方代码仓库：",[14,24562,24563],{},[439,24564,24565],{"href":24565,"rel":24566},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23937],[14,24568,24569],{},"复现大体流程：",[14,24571,24572],{},[56,24573],{"alt":58,"src":24574},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24576,24577],{},"本教程的目标是打通这条链路：",[14,24579,24580],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":58,"searchDepth":86,"depth":86,"links":24582},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24543,"description":122},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24589,"title":24590,"body":24591,"description":122,"extension":123,"meta":24707,"navigation":125,"path":24708,"seo":24709,"stem":24710,"__hash__":24711},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24592,"toc":24702},[24593,24596,24600,24603,24610,24614,24617,24626,24636,24640,24670,24673,24699],[10,24594,24590],{"id":24595},"_2-环境准备与设备连接",[140,24597,24599],{"id":24598},"_21-系统与环境","2.1 系统与环境",[14,24601,24602],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24604,24605,24606,24609],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[73,24607,24608],{},"lerobot"," 依赖。",[140,24611,24613],{"id":24612},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24615,24616],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[67,24618,24620],{"className":23894,"code":24619,"language":23896,"meta":58,"style":58},"lerobot-find-out\n",[73,24621,24622],{"__ignoreMap":58},[76,24623,24624],{"class":78,"line":79},[76,24625,24619],{"class":2035},[14,24627,24628,24629,413,24632,24635],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[73,24630,24631],{},"\u002Fdev\u002FttyACM0",[73,24633,24634],{},"\u002Fdev\u002FttyACM1","）。",[140,24637,24639],{"id":24638},"_23-串口授权","2.3 串口授权",[67,24641,24643],{"className":23894,"code":24642,"language":23896,"meta":58,"style":58},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[73,24644,24645,24659],{"__ignoreMap":58},[76,24646,24647,24650,24653,24656],{"class":78,"line":79},[76,24648,24649],{"class":2035},"sudo",[76,24651,24652],{"class":305}," chmod",[76,24654,24655],{"class":250}," 666",[76,24657,24658],{"class":305}," \u002Fdev\u002FttyACM0\n",[76,24660,24661,24663,24665,24667],{"class":78,"line":86},[76,24662,24649],{"class":2035},[76,24664,24652],{"class":305},[76,24666,24655],{"class":250},[76,24668,24669],{"class":305}," \u002Fdev\u002FttyACM1\n",[14,24671,24672],{},"说明：",[1206,24674,24675,24680,24686,24696],{},[155,24676,24677,24679],{},[73,24678,24649],{},"：以 root 权限执行命令。",[155,24681,24682,24685],{},[73,24683,24684],{},"chmod","：修改设备节点权限。",[155,24687,24688,24691,24692,24695],{},[73,24689,24690],{},"666","：",[73,24693,24694],{},"rw-rw-rw-","，所有用户可读写。",[155,24697,24698],{},"串口号必须替换为你机器上的真实端口。",[117,24700,24701],{},"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":58,"searchDepth":86,"depth":86,"links":24703},[24704,24705,24706],{"id":24598,"depth":86,"text":24599},{"id":24612,"depth":86,"text":24613},{"id":24638,"depth":86,"text":24639},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24590,"description":122},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24713,"title":24714,"body":24715,"description":122,"extension":123,"meta":24876,"navigation":125,"path":24877,"seo":24878,"stem":24879,"__hash__":24880},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24716,"toc":24872},[24717,24721,24725,24731,24734,24791,24794,24798,24801,24869],[10,24718,24720],{"id":24719},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[140,24722,24724],{"id":24723},"_31-配置电机-id","3.1 配置电机 ID",[14,24726,24727,24728,24730],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[73,24729,418],{},"，需要改成机械臂链路里不冲突的编号。",[14,24732,24733],{},"方式一：用 LeRobot 命令逐步写入。",[67,24735,24737],{"className":23894,"code":24736,"language":23896,"meta":58,"style":58},"# 主臂舵机配置 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",[73,24738,24739,24744,24752,24759,24764,24768,24773,24779,24786],{"__ignoreMap":58},[76,24740,24741],{"class":78,"line":79},[76,24742,24743],{"class":82},"# 主臂舵机配置 ID\n",[76,24745,24746,24749],{"class":78,"line":86},[76,24747,24748],{"class":2035},"lerobot-setup-motors",[76,24750,24751],{"class":250}," \\\n",[76,24753,24754,24757],{"class":78,"line":97},[76,24755,24756],{"class":250},"  --teleop.type=so101_leader",[76,24758,24751],{"class":250},[76,24760,24761],{"class":78,"line":103},[76,24762,24763],{"class":250},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[76,24765,24766],{"class":78,"line":1273},[76,24767,2472],{"emptyLinePlaceholder":125},[76,24769,24770],{"class":78,"line":1287},[76,24771,24772],{"class":82},"# 从臂舵机配置 ID\n",[76,24774,24775,24777],{"class":78,"line":1293},[76,24776,24748],{"class":2035},[76,24778,24751],{"class":250},[76,24780,24781,24784],{"class":78,"line":1384},[76,24782,24783],{"class":250},"  --robot.type=so101_follower",[76,24785,24751],{"class":250},[76,24787,24788],{"class":78,"line":1390},[76,24789,24790],{"class":250},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24792,24793],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[140,24795,24797],{"id":24796},"_32-机械臂校准","3.2 机械臂校准",[14,24799,24800],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[67,24802,24804],{"className":23894,"code":24803,"language":23896,"meta":58,"style":58},"# 主臂校准\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",[73,24805,24806,24811,24818,24824,24831,24836,24840,24845,24851,24857,24864],{"__ignoreMap":58},[76,24807,24808],{"class":78,"line":79},[76,24809,24810],{"class":82},"# 主臂校准\n",[76,24812,24813,24816],{"class":78,"line":86},[76,24814,24815],{"class":2035},"lerobot-calibrate",[76,24817,24751],{"class":250},[76,24819,24820,24822],{"class":78,"line":97},[76,24821,24756],{"class":250},[76,24823,24751],{"class":250},[76,24825,24826,24829],{"class":78,"line":103},[76,24827,24828],{"class":250},"  --teleop.port=\u002Fdev\u002FttyACM0",[76,24830,24751],{"class":250},[76,24832,24833],{"class":78,"line":1273},[76,24834,24835],{"class":250},"  --teleop.id=my_awesome_leader_arm\n",[76,24837,24838],{"class":78,"line":1287},[76,24839,2472],{"emptyLinePlaceholder":125},[76,24841,24842],{"class":78,"line":1293},[76,24843,24844],{"class":82},"# 从臂校准\n",[76,24846,24847,24849],{"class":78,"line":1384},[76,24848,24815],{"class":2035},[76,24850,24751],{"class":250},[76,24852,24853,24855],{"class":78,"line":1390},[76,24854,24783],{"class":250},[76,24856,24751],{"class":250},[76,24858,24859,24862],{"class":78,"line":1402},[76,24860,24861],{"class":250},"  --robot.port=\u002Fdev\u002FttyACM1",[76,24863,24751],{"class":250},[76,24865,24866],{"class":78,"line":1684},[76,24867,24868],{"class":250},"  --robot.id=my_awesome_follower_arm\n",[117,24870,24871],{},"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":58,"searchDepth":86,"depth":86,"links":24873},[24874,24875],{"id":24723,"depth":86,"text":24724},{"id":24796,"depth":86,"text":24797},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24714,"description":122},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24882,"title":24883,"body":24884,"description":122,"extension":123,"meta":25075,"navigation":125,"path":25076,"seo":25077,"stem":25078,"__hash__":25079},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24885,"toc":25071},[24886,24889,24893,24940,24944,24957,25020,25023,25068],[10,24887,24883],{"id":24888},"_4-遥操与相机接入",[140,24890,24892],{"id":24891},"_41-不带相机遥操","4.1 不带相机遥操",[67,24894,24896],{"className":23894,"code":24895,"language":23896,"meta":58,"style":58},"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",[73,24897,24898,24905,24911,24917,24924,24930,24936],{"__ignoreMap":58},[76,24899,24900,24903],{"class":78,"line":79},[76,24901,24902],{"class":2035},"lerobot-teleoperate",[76,24904,24751],{"class":250},[76,24906,24907,24909],{"class":78,"line":86},[76,24908,24783],{"class":250},[76,24910,24751],{"class":250},[76,24912,24913,24915],{"class":78,"line":97},[76,24914,24861],{"class":250},[76,24916,24751],{"class":250},[76,24918,24919,24922],{"class":78,"line":103},[76,24920,24921],{"class":250},"  --robot.id=my_awesome_follower_arm",[76,24923,24751],{"class":250},[76,24925,24926,24928],{"class":78,"line":1273},[76,24927,24756],{"class":250},[76,24929,24751],{"class":250},[76,24931,24932,24934],{"class":78,"line":1287},[76,24933,24828],{"class":250},[76,24935,24751],{"class":250},[76,24937,24938],{"class":78,"line":1293},[76,24939,24835],{"class":250},[140,24941,24943],{"id":24942},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[67,24945,24947],{"className":23894,"code":24946,"language":23896,"meta":58,"style":58},"lerobot-find-cameras opencv\n",[73,24948,24949],{"__ignoreMap":58},[76,24950,24951,24954],{"class":78,"line":79},[76,24952,24953],{"class":2035},"lerobot-find-cameras",[76,24955,24956],{"class":305}," opencv\n",[67,24958,24960],{"className":23894,"code":24959,"language":23896,"meta":58,"style":58},"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",[73,24961,24962,24968,24974,24980,24986,24996,25002,25008,25015],{"__ignoreMap":58},[76,24963,24964,24966],{"class":78,"line":79},[76,24965,24902],{"class":2035},[76,24967,24751],{"class":250},[76,24969,24970,24972],{"class":78,"line":86},[76,24971,24783],{"class":250},[76,24973,24751],{"class":250},[76,24975,24976,24978],{"class":78,"line":97},[76,24977,24861],{"class":250},[76,24979,24751],{"class":250},[76,24981,24982,24984],{"class":78,"line":103},[76,24983,24921],{"class":250},[76,24985,24751],{"class":250},[76,24987,24988,24991,24994],{"class":78,"line":1273},[76,24989,24990],{"class":250},"  --robot.cameras=",[76,24992,24993],{"class":305},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[76,24995,24751],{"class":250},[76,24997,24998,25000],{"class":78,"line":1287},[76,24999,24756],{"class":250},[76,25001,24751],{"class":250},[76,25003,25004,25006],{"class":78,"line":1293},[76,25005,24828],{"class":250},[76,25007,24751],{"class":250},[76,25009,25010,25013],{"class":78,"line":1384},[76,25011,25012],{"class":250},"  --teleop.id=my_awesome_leader_arm",[76,25014,24751],{"class":250},[76,25016,25017],{"class":78,"line":1390},[76,25018,25019],{"class":250},"  --display_data=true\n",[14,25021,25022],{},"相机参数说明：",[1206,25024,25025,25031,25037,25046,25056,25062],{},[155,25026,25027,25030],{},[73,25028,25029],{},"front","：相机名称。",[155,25032,25033,25036],{},[73,25034,25035],{},"type: opencv","：相机驱动类型。",[155,25038,25039,25042,25043,24635],{},[73,25040,25041],{},"index_or_path","：设备编号或设备路径（如 ",[73,25044,25045],{},"\u002Fdev\u002Fvideo4",[155,25047,25048,25051,25052,25055],{},[73,25049,25050],{},"width"," \u002F ",[73,25053,25054],{},"height","：图像分辨率。",[155,25057,25058,25061],{},[73,25059,25060],{},"fps","：采样帧率。",[155,25063,25064,25067],{},[73,25065,25066],{},"--display_data=true","：启用实时可视化。",[117,25069,25070],{},"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":58,"searchDepth":86,"depth":86,"links":25072},[25073,25074],{"id":24891,"depth":86,"text":24892},{"id":24942,"depth":86,"text":24943},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24883,"description":122},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25081,"title":25082,"body":25083,"description":122,"extension":123,"meta":25255,"navigation":125,"path":25256,"seo":25257,"stem":25258,"__hash__":25259},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25084,"toc":25250},[25085,25089,25093,25098,25103,25106,25148,25154,25158,25207,25212,25216,25219,25227,25232,25237,25242,25247],[10,25086,25088],{"id":25087},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[140,25090,25092],{"id":25091},"_51-生成访问令牌","5.1 生成访问令牌",[14,25094,25095],{},[56,25096],{"alt":58,"src":25097},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25099,25100],{},[56,25101],{"alt":58,"src":25102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25104,25105],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[67,25107,25109],{"className":23894,"code":25108,"language":23896,"meta":58,"style":58},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[73,25110,25111,25124],{"__ignoreMap":58},[76,25112,25113,25116,25119,25121],{"class":78,"line":79},[76,25114,25115],{"class":89},"export",[76,25117,25118],{"class":93}," HF_TOKEN",[76,25120,247],{"class":89},[76,25122,25123],{"class":305},"\"your_huggingface_token\"\n",[76,25125,25126,25129,25132,25135,25138,25140,25143,25145],{"class":78,"line":86},[76,25127,25128],{"class":2035},"hf",[76,25130,25131],{"class":305}," auth",[76,25133,25134],{"class":305}," login",[76,25136,25137],{"class":250}," --token",[76,25139,9796],{"class":305},[76,25141,25142],{"class":93},"$HF_TOKEN",[76,25144,452],{"class":305},[76,25146,25147],{"class":250}," --add-to-git-credential\n",[14,25149,25150,25153],{},[73,25151,25152],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[140,25155,25157],{"id":25156},"_52-验证登录","5.2 验证登录",[67,25159,25161],{"className":23894,"code":25160,"language":23896,"meta":58,"style":58},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[73,25162,25163,25194],{"__ignoreMap":58},[76,25164,25165,25168,25170,25173,25175,25177,25180,25183,25186,25189,25192],{"class":78,"line":79},[76,25166,25167],{"class":93},"HF_USER",[76,25169,247],{"class":89},[76,25171,25172],{"class":93},"$(",[76,25174,25128],{"class":2035},[76,25176,25131],{"class":305},[76,25178,25179],{"class":305}," whoami",[76,25181,25182],{"class":89}," |",[76,25184,25185],{"class":2035}," head",[76,25187,25188],{"class":250}," -n",[76,25190,25191],{"class":250}," 1",[76,25193,208],{"class":93},[76,25195,25196,25199,25201,25204],{"class":78,"line":86},[76,25197,25198],{"class":250},"echo",[76,25200,9796],{"class":305},[76,25202,25203],{"class":93},"$HF_USER",[76,25205,25206],{"class":305},"\"\n",[14,25208,25209],{},[56,25210],{"alt":58,"src":25211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[140,25213,25215],{"id":25214},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25217,25218],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1206,25220,25221,25224],{},[155,25222,25223],{},"Dataset Repo（用于上传演示数据）",[155,25225,25226],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25228,25229],{},[56,25230],{"alt":58,"src":25231},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25233,25234],{},[56,25235],{"alt":58,"src":25236},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25238,25239],{},[56,25240],{"alt":58,"src":25241},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25243,25244],{},[56,25245],{"alt":58,"src":25246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[117,25248,25249],{},"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":58,"searchDepth":86,"depth":86,"links":25251},[25252,25253,25254],{"id":25091,"depth":86,"text":25092},{"id":25156,"depth":86,"text":25157},{"id":25214,"depth":86,"text":25215},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25082,"description":122},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25261,"title":25262,"body":25263,"description":122,"extension":123,"meta":25460,"navigation":125,"path":25461,"seo":25462,"stem":25463,"__hash__":25464},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25264,"toc":25455},[25265,25269,25273,25369,25377,25382,25386,25402,25405,25409,25452],[10,25266,25268],{"id":25267},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[140,25270,25272],{"id":25271},"_61-录制示教数据","6.1 录制示教数据",[67,25274,25276],{"className":23894,"code":25275,"language":23896,"meta":58,"style":58},"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",[73,25277,25278,25285,25291,25297,25303,25312,25318,25324,25330,25337,25347,25354,25364],{"__ignoreMap":58},[76,25279,25280,25283],{"class":78,"line":79},[76,25281,25282],{"class":2035},"lerobot-record",[76,25284,24751],{"class":250},[76,25286,25287,25289],{"class":78,"line":86},[76,25288,24783],{"class":250},[76,25290,24751],{"class":250},[76,25292,25293,25295],{"class":78,"line":97},[76,25294,24861],{"class":250},[76,25296,24751],{"class":250},[76,25298,25299,25301],{"class":78,"line":103},[76,25300,24921],{"class":250},[76,25302,24751],{"class":250},[76,25304,25305,25307,25310],{"class":78,"line":1273},[76,25306,24990],{"class":250},[76,25308,25309],{"class":305},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[76,25311,24751],{"class":250},[76,25313,25314,25316],{"class":78,"line":1287},[76,25315,24756],{"class":250},[76,25317,24751],{"class":250},[76,25319,25320,25322],{"class":78,"line":1293},[76,25321,24828],{"class":250},[76,25323,24751],{"class":250},[76,25325,25326,25328],{"class":78,"line":1384},[76,25327,25012],{"class":250},[76,25329,24751],{"class":250},[76,25331,25332,25335],{"class":78,"line":1390},[76,25333,25334],{"class":250},"  --display_data=true",[76,25336,24751],{"class":250},[76,25338,25339,25342,25345],{"class":78,"line":1402},[76,25340,25341],{"class":250},"  --dataset.repo_id=",[76,25343,25344],{"class":305},"\"Embodied-AI-6\u002Fso101_test\"",[76,25346,24751],{"class":250},[76,25348,25349,25352],{"class":78,"line":1684},[76,25350,25351],{"class":250},"  --dataset.num_episodes=10",[76,25353,24751],{"class":250},[76,25355,25356,25359,25362],{"class":78,"line":1689},[76,25357,25358],{"class":250},"  --dataset.single_task=",[76,25360,25361],{"class":305},"\"Grab the green cube\"",[76,25363,24751],{"class":250},[76,25365,25366],{"class":78,"line":1695},[76,25367,25368],{"class":250},"  --resume=true\n",[1206,25370,25371],{},[155,25372,25373,25376],{},[73,25374,25375],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25378,25379],{},[56,25380],{"alt":58,"src":25381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[140,25383,25385],{"id":25384},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[67,25387,25389],{"className":23894,"code":25388,"language":23896,"meta":58,"style":58},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[73,25390,25391],{"__ignoreMap":58},[76,25392,25393,25396,25399],{"class":78,"line":79},[76,25394,25395],{"class":2035},"rm",[76,25397,25398],{"class":250}," -rf",[76,25400,25401],{"class":305}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25403,25404],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[140,25406,25408],{"id":25407},"_63-回放指定-episode","6.3 回放指定 episode",[67,25410,25412],{"className":23894,"code":25411,"language":23896,"meta":58,"style":58},"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",[73,25413,25414,25421,25427,25433,25439,25447],{"__ignoreMap":58},[76,25415,25416,25419],{"class":78,"line":79},[76,25417,25418],{"class":2035},"lerobot-replay",[76,25420,24751],{"class":250},[76,25422,25423,25425],{"class":78,"line":86},[76,25424,24783],{"class":250},[76,25426,24751],{"class":250},[76,25428,25429,25431],{"class":78,"line":97},[76,25430,24861],{"class":250},[76,25432,24751],{"class":250},[76,25434,25435,25437],{"class":78,"line":103},[76,25436,24921],{"class":250},[76,25438,24751],{"class":250},[76,25440,25441,25443,25445],{"class":78,"line":1273},[76,25442,25341],{"class":250},[76,25444,25344],{"class":305},[76,25446,24751],{"class":250},[76,25448,25449],{"class":78,"line":1287},[76,25450,25451],{"class":250},"  --dataset.episode=0\n",[117,25453,25454],{},"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":58,"searchDepth":86,"depth":86,"links":25456},[25457,25458,25459],{"id":25271,"depth":86,"text":25272},{"id":25384,"depth":86,"text":25385},{"id":25407,"depth":86,"text":25408},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25262,"description":122},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25466,"title":25467,"body":25468,"description":122,"extension":123,"meta":25596,"navigation":125,"path":25597,"seo":25598,"stem":25599,"__hash__":25600},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25469,"toc":25594},[25470,25474,25537,25540,25587,25592],[10,25471,25473],{"id":25472},"_7-act-模型训练","7. ACT 模型训练",[67,25475,25477],{"className":23894,"code":25476,"language":23896,"meta":58,"style":58},"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",[73,25478,25479,25486,25494,25501,25508,25515,25522,25529],{"__ignoreMap":58},[76,25480,25481,25484],{"class":78,"line":79},[76,25482,25483],{"class":2035},"lerobot-train",[76,25485,24751],{"class":250},[76,25487,25488,25490,25492],{"class":78,"line":86},[76,25489,25341],{"class":250},[76,25491,25344],{"class":305},[76,25493,24751],{"class":250},[76,25495,25496,25499],{"class":78,"line":97},[76,25497,25498],{"class":250},"  --policy.type=act",[76,25500,24751],{"class":250},[76,25502,25503,25506],{"class":78,"line":103},[76,25504,25505],{"class":250},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[76,25507,24751],{"class":250},[76,25509,25510,25513],{"class":78,"line":1273},[76,25511,25512],{"class":250},"  --job_name=act_so101_test",[76,25514,24751],{"class":250},[76,25516,25517,25520],{"class":78,"line":1287},[76,25518,25519],{"class":250},"  --policy.device=cuda",[76,25521,24751],{"class":250},[76,25523,25524,25527],{"class":78,"line":1293},[76,25525,25526],{"class":250},"  --wandb.enable=false",[76,25528,24751],{"class":250},[76,25530,25531,25534],{"class":78,"line":1384},[76,25532,25533],{"class":250},"  --policy.repo_id=",[76,25535,25536],{"class":305},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25538,25539],{},"参数说明：",[1206,25541,25542,25548,25554,25560,25566,25575,25581],{},[155,25543,25544,25547],{},[73,25545,25546],{},"--dataset.repo_id","：训练数据集仓库。",[155,25549,25550,25553],{},[73,25551,25552],{},"--policy.type=act","：策略模型类型为 ACT。",[155,25555,25556,25559],{},[73,25557,25558],{},"--output_dir","：本地训练输出目录。",[155,25561,25562,25565],{},[73,25563,25564],{},"--job_name","：训练任务名称。",[155,25567,25568,25571,25572,24635],{},[73,25569,25570],{},"--policy.device","：训练设备（如 ",[73,25573,25574],{},"cuda",[155,25576,25577,25580],{},[73,25578,25579],{},"--wandb.enable","：是否启用 WandB 可视化。",[155,25582,25583,25586],{},[73,25584,25585],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25588,25589],{},[56,25590],{"alt":58,"src":25591},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[117,25593,25454],{},{"title":58,"searchDepth":86,"depth":86,"links":25595},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25467,"description":122},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25602,"title":25603,"body":25604,"description":122,"extension":123,"meta":25691,"navigation":125,"path":25692,"seo":25693,"stem":25694,"__hash__":25695},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25605,"toc":25689},[25606,25609,25612,25679,25687],[10,25607,25603],{"id":25608},"_8-策略部署与自动采集",[14,25610,25611],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[67,25613,25615],{"className":23894,"code":25614,"language":23896,"meta":58,"style":58},"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",[73,25616,25617,25623,25629,25635,25643,25649,25656,25664,25672],{"__ignoreMap":58},[76,25618,25619,25621],{"class":78,"line":79},[76,25620,25282],{"class":2035},[76,25622,24751],{"class":250},[76,25624,25625,25627],{"class":78,"line":86},[76,25626,24783],{"class":250},[76,25628,24751],{"class":250},[76,25630,25631,25633],{"class":78,"line":97},[76,25632,24861],{"class":250},[76,25634,24751],{"class":250},[76,25636,25637,25639,25641],{"class":78,"line":103},[76,25638,24990],{"class":250},[76,25640,25309],{"class":305},[76,25642,24751],{"class":250},[76,25644,25645,25647],{"class":78,"line":1273},[76,25646,24921],{"class":250},[76,25648,24751],{"class":250},[76,25650,25651,25654],{"class":78,"line":1287},[76,25652,25653],{"class":250},"  --display_data=false",[76,25655,24751],{"class":250},[76,25657,25658,25660,25662],{"class":78,"line":1293},[76,25659,25341],{"class":250},[76,25661,25344],{"class":305},[76,25663,24751],{"class":250},[76,25665,25666,25668,25670],{"class":78,"line":1384},[76,25667,25358],{"class":250},[76,25669,25361],{"class":305},[76,25671,24751],{"class":250},[76,25673,25674,25677],{"class":78,"line":1390},[76,25675,25676],{"class":250},"  --policy.path=",[76,25678,25536],{"class":305},[1206,25680,25681],{},[155,25682,25683,25686],{},[73,25684,25685],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[117,25688,25454],{},{"title":58,"searchDepth":86,"depth":86,"links":25690},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25603,"description":122},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25697,"title":25698,"body":25699,"description":122,"extension":123,"meta":25728,"navigation":125,"path":25729,"seo":25730,"stem":25731,"__hash__":25732},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25700,"toc":25726},[25701,25705,25708,25714,25717,25723],[10,25702,25704],{"id":25703},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25706,25707],{},"项目地址：",[14,25709,25710],{},[439,25711,25712],{"href":25712,"rel":25713},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23937],[14,25715,25716],{},"参考教程：",[14,25718,25719],{},[439,25720,25721],{"href":25721,"rel":25722},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23937],[14,25724,25725],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":58,"searchDepth":86,"depth":86,"links":25727},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25698,"description":122},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25734,"title":25735,"body":25736,"description":25740,"extension":123,"meta":25741,"navigation":125,"path":25742,"seo":25743,"stem":25744,"__hash__":25745},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25737,"toc":25738},[],{"title":58,"searchDepth":86,"depth":86,"links":25739},[],"act复现",{"category":23450},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25735,"description":25740},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25747,"title":25748,"body":25749,"description":58,"extension":123,"meta":26051,"navigation":125,"path":26052,"seo":26053,"stem":26054,"__hash__":26055},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25750,"toc":26043},[25751,25754,25758,25768,25775,25782,25785,25792,25795,25798,25802,25814,25818,25864,25867,25870,25873,25876,25879,25883,25921,25927,25931,25985,25990,25993,25996,26001,26004,26009,26012,26015,26019,26022,26025,26029],[10,25752,25748],{"id":25753},"_1简介",[169,25755,25757],{"id":25756},"_11什么是-docker","1.1什么是 Docker？",[14,25759,25760,25761,25764,25765],{},"Docker 是一个开源的 ",[350,25762,25763],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[350,25766,25767],{},"一次构建，到处运行。",[14,25769,25770,25771,25774],{},"“ ",[350,25772,25773],{},"一次构建，到处运行"," ”也就是说：",[152,25776,25777],{},[155,25778,25779],{},[350,25780,25781],{},"之前：",[14,25783,25784],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[152,25786,25787],{},[155,25788,25789],{},[350,25790,25791],{},"使用docker后：",[14,25793,25794],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25796,25797],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[169,25799,25801],{"id":25800},"_12它是怎么工作的","1.2.它是怎么工作的？",[1206,25803,25804,25807],{},[155,25805,25806],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[155,25808,25809,25810,25813],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[350,25811,25812],{},"无论在哪运行都一样稳定"," 。",[169,25815,25817],{"id":25816},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[338,25819,25820,25830],{},[341,25821,25822],{},[344,25823,25824,25827],{},[347,25825,25826],{"align":23808},"概念",[347,25828,25829],{"align":23808},"解释",[385,25831,25832,25840,25848,25856],{},[344,25833,25834,25837],{},[390,25835,25836],{"align":23808},"镜像",[390,25838,25839],{"align":23808},"Image，运行容器的模板，像是一个应用快照",[344,25841,25842,25845],{},[390,25843,25844],{"align":23808},"容器",[390,25846,25847],{"align":23808},"Container，运行中的镜像实例，有自己的文件系统、网络等",[344,25849,25850,25853],{},[390,25851,25852],{"align":23808},"Dockerfile",[390,25854,25855],{"align":23808},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[344,25857,25858,25861],{},[390,25859,25860],{"align":23808},"仓库",[390,25862,25863],{"align":23808},"Registry，存放镜像的地方，比如 Docker Hub",[14,25865,25866],{},"抽象化理解:",[14,25868,25869],{},"Docker镜像≈C++类",[14,25871,25872],{},"Docker容器≈C++类实例(即对象)",[14,25874,25875],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25877,25878],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[169,25880,25882],{"id":25881},"_14类比理解","1.4.类比理解",[338,25884,25885,25895],{},[341,25886,25887],{},[344,25888,25889,25892],{},[347,25890,25891],{"align":23808},"传统部署",[347,25893,25894],{"align":23808},"Docker部署",[385,25896,25897,25905,25913],{},[344,25898,25899,25902],{},[390,25900,25901],{"align":23808},"手动安装依赖、调试版本不一致问题",[390,25903,25904],{"align":23808},"一次打包环境和代码",[344,25906,25907,25910],{},[390,25908,25909],{"align":23808},"程序“裸奔”跑在系统上",[390,25911,25912],{"align":23808},"程序“穿着容器”隔离运行",[344,25914,25915,25918],{},[390,25916,25917],{"align":23808},"容易“在我电脑上能跑”",[390,25919,25920],{"align":23808},"保证“无论在哪都能跑”",[14,25922,25923,25924],{},"就像快递包裹： ",[350,25925,25926],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[169,25928,25930],{"id":25929},"_15docker-的核心优势","1.5.Docker 的核心优势",[338,25932,25933,25943],{},[341,25934,25935],{},[344,25936,25937,25940],{},[347,25938,25939],{"align":23808},"优势",[347,25941,25942],{"align":23808},"说明",[385,25944,25945,25953,25961,25969,25977],{},[344,25946,25947,25950],{},[390,25948,25949],{"align":23808},"轻量级",[390,25951,25952],{"align":23808},"基于系统内核共享，启动速度快，占资源少",[344,25954,25955,25958],{},[390,25956,25957],{"align":23808},"跨平台",[390,25959,25960],{"align":23808},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[344,25962,25963,25966],{},[390,25964,25965],{"align":23808},"易于迁移部署",[390,25967,25968],{"align":23808},"应用和环境一起封装，不怕依赖不一致",[344,25970,25971,25974],{},[390,25972,25973],{"align":23808},"易于版本控制",[390,25975,25976],{"align":23808},"镜像版本可控，支持回滚",[344,25978,25979,25982],{},[390,25980,25981],{"align":23808},"生态丰富",[390,25983,25984],{"align":23808},"Docker Hub 上有成千上万的现成镜像可用",[152,25986,25987],{},[155,25988,25989],{},"在Linux上可以几乎实现无性能损失。",[14,25991,25992],{},"docker里的发行版和本机共用Linux内核。",[14,25994,25995],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[152,25997,25998],{},[155,25999,26000],{},"可以快速部署在绝大多数Linux发行版",[14,26002,26003],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[152,26005,26006],{},[155,26007,26008],{},"配置环境简单",[14,26010,26011],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26013,26014],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[152,26016,26017],{},[155,26018,25981],{},[14,26020,26021],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26023,26024],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[169,26026,26028],{"id":26027},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1206,26030,26031,26034,26037,26040],{},[155,26032,26033],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[155,26035,26036],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[155,26038,26039],{},"微服务架构：每个服务一个容器，灵活组合",[155,26041,26042],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":58,"searchDepth":86,"depth":86,"links":26044},[26045,26046,26047,26048,26049,26050],{"id":25756,"depth":97,"text":25757},{"id":25800,"depth":97,"text":25801},{"id":25816,"depth":97,"text":25817},{"id":25881,"depth":97,"text":25882},{"id":25929,"depth":97,"text":25930},{"id":26027,"depth":97,"text":26028},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25748,"description":58},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26057,"title":26058,"body":26059,"description":58,"extension":123,"meta":26792,"navigation":125,"path":26793,"seo":26794,"stem":26795,"__hash__":26796},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26060,"toc":26787},[26061,26064,26068,26071,26074,26080,26086,26090,26099,26102,26159,26162,26213,26216,26299,26302,26339,26343,26354,26367,26374,26377,26457,26460,26510,26513,26536,26540,26547,26550,26566,26572,26575,26591,26597,26600,26616,26630,26636,26656,26662,26665,26677,26683,26686,26700,26706,26709,26729,26734,26737,26740,26744,26747,26750,26753,26760,26763,26766,26769,26774,26779,26784],[10,26062,26058],{"id":26063},"_2安装docker",[169,26065,26067],{"id":26066},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26069,26070],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26072,26073],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26075,26076],{},[439,26077,26078],{"href":26078,"rel":26079},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23937],[14,26081,26082],{},[439,26083,26084],{"href":26084,"rel":26085},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23937],[22070,26087,26089],{"id":26088},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26091,26092,26093,26098],{},"以下内容根据 ",[439,26094,26097],{"href":26095,"rel":26096},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23937],"官方文档"," 修改而来。",[14,26100,26101],{},"如果你过去安装过 docker，先删掉：",[67,26103,26105],{"className":23894,"code":26104,"language":23896,"meta":58,"style":58},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[73,26106,26107],{"__ignoreMap":58},[76,26108,26109,26111,26114,26117,26120,26123,26126,26129,26132,26135,26138,26141,26144,26147,26150,26153,26156],{"class":78,"line":79},[76,26110,3097],{"class":89},[76,26112,26113],{"class":93}," pkg ",[76,26115,26116],{"class":89},"in",[76,26118,26119],{"class":305}," docker.io",[76,26121,26122],{"class":305}," docker-doc",[76,26124,26125],{"class":305}," docker-compose",[76,26127,26128],{"class":305}," docker-compose-v2",[76,26130,26131],{"class":305}," podman-docker",[76,26133,26134],{"class":305}," containerd",[76,26136,26137],{"class":305}," runc",[76,26139,26140],{"class":93},"; ",[76,26142,26143],{"class":89},"do",[76,26145,26146],{"class":2035}," sudo",[76,26148,26149],{"class":305}," apt-get",[76,26151,26152],{"class":305}," remove",[76,26154,26155],{"class":93}," $pkg; ",[76,26157,26158],{"class":89},"done\n",[14,26160,26161],{},"首先安装依赖和GPG：",[67,26163,26167],{"className":26164,"code":26165,"language":26166,"meta":58,"style":58},"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",[73,26168,26169,26174,26179,26184,26189,26194,26199,26203,26208],{"__ignoreMap":58},[76,26170,26171],{"class":78,"line":79},[76,26172,26173],{},"# Add Docker's official GPG key:\n",[76,26175,26176],{"class":78,"line":86},[76,26177,26178],{},"sudo apt-get update\n",[76,26180,26181],{"class":78,"line":97},[76,26182,26183],{},"sudo apt-get install ca-certificates curl\n",[76,26185,26186],{"class":78,"line":103},[76,26187,26188],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[76,26190,26191],{"class":78,"line":1273},[76,26192,26193],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[76,26195,26196],{"class":78,"line":1287},[76,26197,26198],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[76,26200,26201],{"class":78,"line":1293},[76,26202,2472],{"emptyLinePlaceholder":125},[76,26204,26205],{"class":78,"line":1384},[76,26206,26207],{},"# 如果上面这行报错就弄下面这行\n",[76,26209,26210],{"class":78,"line":1390},[76,26211,26212],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26214,26215],{},"信任 Docker 的 GPG 公钥并添加仓库：",[67,26217,26219],{"className":23894,"code":26218,"language":23896,"meta":58,"style":58},"# 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",[73,26220,26221,26226,26232,26249,26282],{"__ignoreMap":58},[76,26222,26223],{"class":78,"line":79},[76,26224,26225],{"class":82},"# Add the repository to Apt sources:\n",[76,26227,26228,26230],{"class":78,"line":86},[76,26229,25198],{"class":250},[76,26231,24751],{"class":250},[76,26233,26234,26237,26240,26243,26246],{"class":78,"line":97},[76,26235,26236],{"class":305},"  \"deb [arch=$(",[76,26238,26239],{"class":2035},"dpkg",[76,26241,26242],{"class":250}," --print-architecture",[76,26244,26245],{"class":305},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[76,26247,26248],{"class":250},"\\\n",[76,26250,26251,26254,26256,26258,26261,26264,26266,26268,26271,26273,26275,26278,26280],{"class":78,"line":103},[76,26252,26253],{"class":305},"  \"",[76,26255,25172],{"class":93},[76,26257,757],{"class":250},[76,26259,26260],{"class":305}," \u002Fetc\u002Fos-release",[76,26262,26263],{"class":93}," && ",[76,26265,25198],{"class":250},[76,26267,9796],{"class":305},[76,26269,26270],{"class":93},"$VERSION_CODENAME",[76,26272,452],{"class":305},[76,26274,629],{"class":93},[76,26276,26277],{"class":305},"\" stable\"",[76,26279,25182],{"class":89},[76,26281,24751],{"class":250},[76,26283,26284,26287,26290,26293,26296],{"class":78,"line":1273},[76,26285,26286],{"class":2035},"  sudo",[76,26288,26289],{"class":305}," tee",[76,26291,26292],{"class":305}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[76,26294,26295],{"class":89}," >",[76,26297,26298],{"class":305}," \u002Fdev\u002Fnull\n",[14,26300,26301],{},"最后安装",[67,26303,26305],{"className":23894,"code":26304,"language":23896,"meta":58,"style":58},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[73,26306,26307,26316],{"__ignoreMap":58},[76,26308,26309,26311,26313],{"class":78,"line":79},[76,26310,24649],{"class":2035},[76,26312,26149],{"class":305},[76,26314,26315],{"class":305}," update\n",[76,26317,26318,26320,26322,26324,26327,26330,26333,26336],{"class":78,"line":86},[76,26319,24649],{"class":2035},[76,26321,26149],{"class":305},[76,26323,23906],{"class":305},[76,26325,26326],{"class":305}," docker-ce",[76,26328,26329],{"class":305}," docker-ce-cli",[76,26331,26332],{"class":305}," containerd.io",[76,26334,26335],{"class":305}," docker-buildx-plugin",[76,26337,26338],{"class":305}," docker-compose-plugin\n",[22070,26340,26342],{"id":26341},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26344,26345,26346,26349,26350,26353],{},"查看自己自己包管理工具版本（dnf是 ",[350,26347,26348],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[350,26351,26352],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[67,26355,26357],{"className":23894,"code":26356,"language":23896,"meta":58,"style":58},"dnf --version\n",[73,26358,26359],{"__ignoreMap":58},[76,26360,26361,26364],{"class":78,"line":79},[76,26362,26363],{"class":2035},"dnf",[76,26365,26366],{"class":250}," --version\n",[14,26368,26092,26369,26373],{},[439,26370,26097],{"href":26371,"rel":26372},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23937]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26375,26376],{},"如果你之前安装过 docker，请先删掉",[67,26378,26380],{"className":23894,"code":26379,"language":23896,"meta":58,"style":58},"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",[73,26381,26382,26396,26403,26410,26417,26424,26431,26438,26445,26452],{"__ignoreMap":58},[76,26383,26384,26386,26389,26391,26394],{"class":78,"line":79},[76,26385,24649],{"class":2035},[76,26387,26388],{"class":305}," dnf",[76,26390,26152],{"class":305},[76,26392,26393],{"class":305}," docker",[76,26395,24751],{"class":250},[76,26397,26398,26401],{"class":78,"line":86},[76,26399,26400],{"class":305},"                  docker-client",[76,26402,24751],{"class":250},[76,26404,26405,26408],{"class":78,"line":97},[76,26406,26407],{"class":305},"                  docker-client-latest",[76,26409,24751],{"class":250},[76,26411,26412,26415],{"class":78,"line":103},[76,26413,26414],{"class":305},"                  docker-common",[76,26416,24751],{"class":250},[76,26418,26419,26422],{"class":78,"line":1273},[76,26420,26421],{"class":305},"                  docker-latest",[76,26423,24751],{"class":250},[76,26425,26426,26429],{"class":78,"line":1287},[76,26427,26428],{"class":305},"                  docker-latest-logrotate",[76,26430,24751],{"class":250},[76,26432,26433,26436],{"class":78,"line":1293},[76,26434,26435],{"class":305},"                  docker-logrotate",[76,26437,24751],{"class":250},[76,26439,26440,26443],{"class":78,"line":1384},[76,26441,26442],{"class":305},"                  docker-selinux",[76,26444,24751],{"class":250},[76,26446,26447,26450],{"class":78,"line":1390},[76,26448,26449],{"class":305},"                  docker-engine-selinux",[76,26451,24751],{"class":250},[76,26453,26454],{"class":78,"line":1402},[76,26455,26456],{"class":305},"                  docker-engine\n",[14,26458,26459],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[67,26461,26463],{"className":23894,"code":26462,"language":23896,"meta":58,"style":58},"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",[73,26464,26465,26479,26494],{"__ignoreMap":58},[76,26466,26467,26469,26471,26474,26476],{"class":78,"line":79},[76,26468,24649],{"class":2035},[76,26470,26388],{"class":305},[76,26472,26473],{"class":250}," -y",[76,26475,23906],{"class":305},[76,26477,26478],{"class":305}," dnf-plugins-core\n",[76,26480,26481,26483,26485,26488,26491],{"class":78,"line":86},[76,26482,24649],{"class":2035},[76,26484,26388],{"class":305},[76,26486,26487],{"class":305}," config-manager",[76,26489,26490],{"class":305}," addrepo",[76,26492,26493],{"class":250}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[76,26495,26496,26498,26501,26504,26507],{"class":78,"line":97},[76,26497,24649],{"class":2035},[76,26499,26500],{"class":305}," sed",[76,26502,26503],{"class":250}," -i",[76,26505,26506],{"class":305}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[76,26508,26509],{"class":305}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26511,26512],{},"最后安装：",[67,26514,26516],{"className":23894,"code":26515,"language":23896,"meta":58,"style":58},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[73,26517,26518],{"__ignoreMap":58},[76,26519,26520,26522,26524,26526,26528,26530,26532,26534],{"class":78,"line":79},[76,26521,24649],{"class":2035},[76,26523,26388],{"class":305},[76,26525,23906],{"class":305},[76,26527,26326],{"class":305},[76,26529,26329],{"class":305},[76,26531,26332],{"class":305},[76,26533,26335],{"class":305},[76,26535,26338],{"class":305},[169,26537,26539],{"id":26538},"_22配置环境","2.2.配置环境",[22070,26541,26543,26546],{"id":26542},"_221检查-docker-服务状态",[350,26544,26545],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26548,26549],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[67,26551,26553],{"className":23894,"code":26552,"language":23896,"meta":58,"style":58},"systemctl status docker\n",[73,26554,26555],{"__ignoreMap":58},[76,26556,26557,26560,26563],{"class":78,"line":79},[76,26558,26559],{"class":2035},"systemctl",[76,26561,26562],{"class":305}," status",[76,26564,26565],{"class":305}," docker\n",[22070,26567,26569,26546],{"id":26568},"_222启动-docker-服务",[350,26570,26571],{},"2.2.2.启动 Docker 服务",[14,26573,26574],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[67,26576,26578],{"className":23894,"code":26577,"language":23896,"meta":58,"style":58},"sudo systemctl start docker\n",[73,26579,26580],{"__ignoreMap":58},[76,26581,26582,26584,26587,26589],{"class":78,"line":79},[76,26583,24649],{"class":2035},[76,26585,26586],{"class":305}," systemctl",[76,26588,4256],{"class":305},[76,26590,26565],{"class":305},[22070,26592,26594,26546],{"id":26593},"_223设置-docker-开机自启",[350,26595,26596],{},"2.2.3.设置 Docker 开机自启",[14,26598,26599],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[67,26601,26603],{"className":23894,"code":26602,"language":23896,"meta":58,"style":58},"sudo systemctl enable docker\n",[73,26604,26605],{"__ignoreMap":58},[76,26606,26607,26609,26611,26614],{"class":78,"line":79},[76,26608,24649],{"class":2035},[76,26610,26586],{"class":305},[76,26612,26613],{"class":305}," enable",[76,26615,26565],{"class":305},[22070,26617,26619,13867,26622,13867,26627,26546],{"id":26618},"_224将用户添加到-docker-组",[350,26620,26621],{},"2.2.4.将用户添加到",[350,26623,26624],{},[73,26625,26626],{},"docker",[350,26628,26629],{},"组",[14,26631,26632,26633,26635],{},"使用以下命令将当前用户添加到 ",[73,26634,26626],{}," 组：",[67,26637,26639],{"className":23894,"code":26638,"language":23896,"meta":58,"style":58},"sudo usermod -aG docker $USER\n",[73,26640,26641],{"__ignoreMap":58},[76,26642,26643,26645,26648,26651,26653],{"class":78,"line":79},[76,26644,24649],{"class":2035},[76,26646,26647],{"class":305}," usermod",[76,26649,26650],{"class":250}," -aG",[76,26652,26393],{"class":305},[76,26654,26655],{"class":93}," $USER\n",[22070,26657,26659,26546],{"id":26658},"_225退出并重新登录",[350,26660,26661],{},"2.2.5.退出并重新登录",[14,26663,26664],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[67,26666,26668],{"className":23894,"code":26667,"language":23896,"meta":58,"style":58},"newgrp docker\n",[73,26669,26670],{"__ignoreMap":58},[76,26671,26672,26675],{"class":78,"line":79},[76,26673,26674],{"class":2035},"newgrp",[76,26676,26565],{"class":305},[22070,26678,26680,26546],{"id":26679},"_226重新启动-docker-服务如果需要",[350,26681,26682],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26684,26685],{},"确保 Docker 服务正在运行，可以使用以下命令：",[67,26687,26688],{"className":23894,"code":26577,"language":23896,"meta":58,"style":58},[73,26689,26690],{"__ignoreMap":58},[76,26691,26692,26694,26696,26698],{"class":78,"line":79},[76,26693,24649],{"class":2035},[76,26695,26586],{"class":305},[76,26697,4256],{"class":305},[76,26699,26565],{"class":305},[22070,26701,26703,26546],{"id":26702},"_227重启电脑后检查-docker-服务状态",[350,26704,26705],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26707,26708],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[67,26710,26712],{"className":23894,"code":26711,"language":23896,"meta":58,"style":58},"sudo reboot\nsystemctl status docker\n",[73,26713,26714,26721],{"__ignoreMap":58},[76,26715,26716,26718],{"class":78,"line":79},[76,26717,24649],{"class":2035},[76,26719,26720],{"class":305}," reboot\n",[76,26722,26723,26725,26727],{"class":78,"line":86},[76,26724,26559],{"class":2035},[76,26726,26562],{"class":305},[76,26728,26565],{"class":305},[14,26730,26731],{},[56,26732],{"alt":58,"src":26733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26735,26736],{},"第三行显示enabled说明开机自启动成功",[14,26738,26739],{},"按q退出",[169,26741,26743],{"id":26742},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26745,26746],{},"优先使用linux来使用docker是比较好的",[14,26748,26749],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26751,26752],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26754,26755,26756],{},"官方下载安装:",[439,26757,26758],{"href":26758,"rel":26759},"https:\u002F\u002Fwww.docker.com\u002F",[23937],[14,26761,26762],{},"Windows的Docker显卡直通与USB直通:",[14,26764,26765],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26767,26768],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26770,26771],{},[56,26772],{"alt":58,"src":26773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26775,26776],{},[56,26777],{"alt":58,"src":26778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26780,26781],{},[56,26782],{"alt":58,"src":26783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[117,26785,26786],{},"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":58,"searchDepth":86,"depth":86,"links":26788},[26789,26790,26791],{"id":26066,"depth":97,"text":26067},{"id":26538,"depth":97,"text":26539},{"id":26742,"depth":97,"text":26743},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26058,"description":58},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26798,"title":26799,"body":26800,"description":26807,"extension":123,"meta":27500,"navigation":125,"path":27501,"seo":27502,"stem":27503,"__hash__":27504},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26801,"toc":27494},[26802,26805,26808,26812,26817,26822,26825,26853,26858,26867,26870,26875,26879,26886,26891,26897,26901,26904,26908,26913,27005,27010,27028,27033,27054,27059,27075,27079,27084,27113,27118,27164,27169,27213,27221,27238,27243,27259,27264,27278,27281,27284,27287,27290,27319,27322,27327,27331,27334,27337,27343,27346,27349,27352,27414,27421,27426,27429,27447,27451,27454,27471,27474,27477,27491],[10,26803,26799],{"id":26804},"_3docker直通",[14,26806,26807],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[169,26809,26811],{"id":26810},"_31usb直通","3.1.USB直通",[14,26813,26814],{},[56,26815],{"alt":58,"src":26816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[152,26818,26819],{},[155,26820,26821],{},"方法一(不是很推荐新手)：",[14,26823,26824],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[67,26826,26828],{"className":23894,"code":26827,"language":23896,"meta":58,"style":58},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[73,26829,26830,26838,26843],{"__ignoreMap":58},[76,26831,26832,26835],{"class":78,"line":79},[76,26833,26834],{"class":2035},"ls",[76,26836,26837],{"class":305}," \u002Fdev\n",[76,26839,26840],{"class":78,"line":86},[76,26841,26842],{"class":82},"#例如\n",[76,26844,26845,26848,26850],{"class":78,"line":97},[76,26846,26847],{"class":93},"--device",[76,26849,247],{"class":89},[76,26851,26852],{"class":305},"\u002Fdev\u002Ftty_USB0\n",[152,26854,26855],{"start":86},[155,26856,26857],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[67,26859,26861],{"className":23894,"code":26860,"language":23896,"meta":58,"style":58},"--privileged\n",[73,26862,26863],{"__ignoreMap":58},[76,26864,26865],{"class":78,"line":79},[76,26866,26860],{"class":2035},[14,26868,26869],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26871,26872],{},[56,26873],{"alt":58,"src":26874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[169,26876,26878],{"id":26877},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26880,26881,26882,26885],{},"NVIDIA Container Toolkit使用户 ",[350,26883,26884],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26887,26888],{},[56,26889],{"alt":58,"src":26890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26892,26893],{},[439,26894,26895],{"href":26895,"rel":26896},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23937],[22070,26898,26900],{"id":26899},"_321安装","3.2.1.安装",[14,26902,26903],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22982,26905,26907],{"id":26906},"_3211ubuntu","3.2.1.1.Ubuntu",[152,26909,26910],{},[155,26911,26912],{},"配置存储库 并更新",[67,26914,26916],{"className":23894,"code":26915,"language":23896,"meta":58,"style":58},"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",[73,26917,26918,26947,26967,26979,26991,26997],{"__ignoreMap":58},[76,26919,26920,26923,26926,26929,26931,26933,26936,26939,26942,26945],{"class":78,"line":79},[76,26921,26922],{"class":2035},"curl",[76,26924,26925],{"class":250}," -fsSL",[76,26927,26928],{"class":305}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[76,26930,25182],{"class":89},[76,26932,26146],{"class":2035},[76,26934,26935],{"class":305}," gpg",[76,26937,26938],{"class":250}," --dearmor",[76,26940,26941],{"class":250}," -o",[76,26943,26944],{"class":305}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[76,26946,24751],{"class":250},[76,26948,26949,26952,26954,26957,26960,26963,26965],{"class":78,"line":86},[76,26950,26951],{"class":93},"  && ",[76,26953,26922],{"class":2035},[76,26955,26956],{"class":250}," -s",[76,26958,26959],{"class":250}," -L",[76,26961,26962],{"class":305}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[76,26964,25182],{"class":89},[76,26966,24751],{"class":250},[76,26968,26969,26972,26975,26977],{"class":78,"line":97},[76,26970,26971],{"class":2035},"    sed",[76,26973,26974],{"class":305}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[76,26976,25182],{"class":89},[76,26978,24751],{"class":250},[76,26980,26981,26984,26986,26989],{"class":78,"line":103},[76,26982,26983],{"class":2035},"    sudo",[76,26985,26289],{"class":305},[76,26987,26988],{"class":305}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[76,26990,24751],{"class":250},[76,26992,26993,26995],{"class":78,"line":1273},[76,26994,26951],{"class":93},[76,26996,26248],{"class":250},[76,26998,26999,27001,27003],{"class":78,"line":1287},[76,27000,26983],{"class":2035},[76,27002,26149],{"class":305},[76,27004,26315],{"class":305},[152,27006,27007],{"start":86},[155,27008,27009],{},"安装nvidia-docker2",[67,27011,27013],{"className":23894,"code":27012,"language":23896,"meta":58,"style":58},"sudo apt-get install -y nvidia-docker2\n",[73,27014,27015],{"__ignoreMap":58},[76,27016,27017,27019,27021,27023,27025],{"class":78,"line":79},[76,27018,24649],{"class":2035},[76,27020,26149],{"class":305},[76,27022,23906],{"class":305},[76,27024,26473],{"class":250},[76,27026,27027],{"class":305}," nvidia-docker2\n",[152,27029,27030],{"start":97},[155,27031,27032],{},"使用nvidia-ctk命令配置container runtime",[67,27034,27036],{"className":23894,"code":27035,"language":23896,"meta":58,"style":58},"sudo nvidia-ctk runtime configure --runtime=docker\n",[73,27037,27038],{"__ignoreMap":58},[76,27039,27040,27042,27045,27048,27051],{"class":78,"line":79},[76,27041,24649],{"class":2035},[76,27043,27044],{"class":305}," nvidia-ctk",[76,27046,27047],{"class":305}," runtime",[76,27049,27050],{"class":305}," configure",[76,27052,27053],{"class":250}," --runtime=docker\n",[152,27055,27056],{"start":103},[155,27057,27058],{},"重启docker服务:",[67,27060,27062],{"className":23894,"code":27061,"language":23896,"meta":58,"style":58},"sudo systemctl restart docker\n",[73,27063,27064],{"__ignoreMap":58},[76,27065,27066,27068,27070,27073],{"class":78,"line":79},[76,27067,24649],{"class":2035},[76,27069,26586],{"class":305},[76,27071,27072],{"class":305}," restart",[76,27074,26565],{"class":305},[22982,27076,27078],{"id":27077},"_3212fedora","3.2.1.2.Fedora",[152,27080,27081],{},[155,27082,27083],{},"配置存储库",[67,27085,27087],{"className":23894,"code":27086,"language":23896,"meta":58,"style":58},"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",[73,27088,27089,27104],{"__ignoreMap":58},[76,27090,27091,27093,27095,27097,27100,27102],{"class":78,"line":79},[76,27092,26922],{"class":2035},[76,27094,26956],{"class":250},[76,27096,26959],{"class":250},[76,27098,27099],{"class":305}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[76,27101,25182],{"class":89},[76,27103,24751],{"class":250},[76,27105,27106,27108,27110],{"class":78,"line":86},[76,27107,24649],{"class":2035},[76,27109,26289],{"class":305},[76,27111,27112],{"class":305}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[152,27114,27115],{"start":86},[155,27116,27117],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[67,27119,27121],{"className":23894,"code":27120,"language":23896,"meta":58,"style":58},"# 如果是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",[73,27122,27123,27128,27142,27146,27151],{"__ignoreMap":58},[76,27124,27125],{"class":78,"line":79},[76,27126,27127],{"class":82},"# 如果是RHEL或者Rocky（DNF4）\n",[76,27129,27130,27132,27134,27136,27139],{"class":78,"line":86},[76,27131,24649],{"class":2035},[76,27133,26388],{"class":305},[76,27135,26487],{"class":305},[76,27137,27138],{"class":250}," --add-repo",[76,27140,27141],{"class":305}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[76,27143,27144],{"class":78,"line":97},[76,27145,2472],{"emptyLinePlaceholder":125},[76,27147,27148],{"class":78,"line":103},[76,27149,27150],{"class":82},"# 如果是Feodra41+（DNF5）\n",[76,27152,27153,27155,27157,27159,27161],{"class":78,"line":1273},[76,27154,24649],{"class":2035},[76,27156,26388],{"class":305},[76,27158,26487],{"class":305},[76,27160,26490],{"class":305},[76,27162,27163],{"class":250}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[152,27165,27166],{"start":97},[155,27167,27168],{},"安装NVIDIA Container Toolki包",[67,27170,27172],{"className":23894,"code":27171,"language":23896,"meta":58,"style":58},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[73,27173,27174,27179,27192,27196,27201],{"__ignoreMap":58},[76,27175,27176],{"class":78,"line":79},[76,27177,27178],{"class":82},"# 如果是RHEL或者Rocky\n",[76,27180,27181,27183,27185,27187,27189],{"class":78,"line":86},[76,27182,24649],{"class":2035},[76,27184,26388],{"class":305},[76,27186,23906],{"class":305},[76,27188,26473],{"class":250},[76,27190,27191],{"class":305}," nvidia-container-toolkit\n",[76,27193,27194],{"class":78,"line":97},[76,27195,2472],{"emptyLinePlaceholder":125},[76,27197,27198],{"class":78,"line":103},[76,27199,27200],{"class":82},"# 如果是Fedora\n",[76,27202,27203,27205,27207,27209,27211],{"class":78,"line":1273},[76,27204,24649],{"class":2035},[76,27206,26388],{"class":305},[76,27208,23906],{"class":305},[76,27210,26473],{"class":250},[76,27212,27191],{"class":305},[152,27214,27215],{"start":103},[155,27216,27217,27218,27220],{},"安装nvidia-docker2 ： 在Fedora上使用",[73,27219,26363],{},"进行安装",[67,27222,27224],{"className":23894,"code":27223,"language":23896,"meta":58,"style":58},"sudo dnf install -y nvidia-docker2\n",[73,27225,27226],{"__ignoreMap":58},[76,27227,27228,27230,27232,27234,27236],{"class":78,"line":79},[76,27229,24649],{"class":2035},[76,27231,26388],{"class":305},[76,27233,23906],{"class":305},[76,27235,26473],{"class":250},[76,27237,27027],{"class":305},[152,27239,27240],{"start":1273},[155,27241,27242],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[67,27244,27245],{"className":23894,"code":27035,"language":23896,"meta":58,"style":58},[73,27246,27247],{"__ignoreMap":58},[76,27248,27249,27251,27253,27255,27257],{"class":78,"line":79},[76,27250,24649],{"class":2035},[76,27252,27044],{"class":305},[76,27254,27047],{"class":305},[76,27256,27050],{"class":305},[76,27258,27053],{"class":250},[152,27260,27261],{"start":1287},[155,27262,27263],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[67,27265,27266],{"className":23894,"code":27061,"language":23896,"meta":58,"style":58},[73,27267,27268],{"__ignoreMap":58},[76,27269,27270,27272,27274,27276],{"class":78,"line":79},[76,27271,24649],{"class":2035},[76,27273,26586],{"class":305},[76,27275,27072],{"class":305},[76,27277,26565],{"class":305},[14,27279,27280],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27282,27283],{},"方法：",[14,27285,27286],{},"1️⃣nvidia-smi",[14,27288,27289],{},"2️⃣运行nvidia cuda 容器进行测试",[67,27291,27293],{"className":23894,"code":27292,"language":23896,"meta":58,"style":58},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[73,27294,27295],{"__ignoreMap":58},[76,27296,27297,27299,27301,27304,27307,27310,27313,27316],{"class":78,"line":79},[76,27298,24649],{"class":2035},[76,27300,26393],{"class":305},[76,27302,27303],{"class":305}," run",[76,27305,27306],{"class":250}," --rm",[76,27308,27309],{"class":250}," --gpus",[76,27311,27312],{"class":305}," all",[76,27314,27315],{"class":305}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[76,27317,27318],{"class":305}," nvidia-smi\n",[14,27320,27321],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27323,27324],{},[56,27325],{"alt":58,"src":27326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[169,27328,27330],{"id":27329},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27332,27333],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27335,27336],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27338,27339],{},[439,27340,27341],{"href":27341,"rel":27342},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23937],[14,27344,27345],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27347,27348],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27350,27351],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[338,27353,27354,27370],{},[341,27355,27356],{},[344,27357,27358,27361,27364,27367],{},[347,27359,27360],{"align":23808},"镜像类型",[347,27362,27363],{"align":23808},"适用场景",[347,27365,27366],{"align":23808},"示例标签",[347,27368,27369],{"align":23808},"大小",[385,27371,27372,27386,27400],{},[344,27373,27374,27377,27380,27383],{},[390,27375,27376],{"align":23808},"base",[390,27378,27379],{"align":23808},"仅需 CUDA 运行时库",[390,27381,27382],{"align":23808},"12.4.0-base-ubuntu22.04",[390,27384,27385],{"align":23808},"~240MB",[344,27387,27388,27391,27394,27397],{},[390,27389,27390],{"align":23808},"runtime",[390,27392,27393],{"align":23808},"部署编译后的应用（含数学库）",[390,27395,27396],{"align":23808},"12.4.0-runtime-ubuntu22.04",[390,27398,27399],{"align":23808},"~2GB",[344,27401,27402,27405,27408,27411],{},[390,27403,27404],{"align":23808},"devel",[390,27406,27407],{"align":23808},"开发环境（含编译工具）",[390,27409,27410],{"align":23808},"12.4.0-devel-ubuntu22.04",[390,27412,27413],{"align":23808},"~3GB",[14,27415,27416,27417,27420],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[73,27418,27419],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27422,27423],{},[56,27424],{"alt":58,"src":27425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27427,27428],{},"在dockerfile里就可以开头这么写：",[67,27430,27432],{"className":23894,"code":27431,"language":23896,"meta":58,"style":58},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[73,27433,27434,27439],{"__ignoreMap":58},[76,27435,27436],{"class":78,"line":79},[76,27437,27438],{"class":82},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[76,27440,27441,27444],{"class":78,"line":86},[76,27442,27443],{"class":2035},"FROM",[76,27445,27446],{"class":305}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[169,27448,27450],{"id":27449},"_34配置以太网","3.4.配置以太网",[14,27452,27453],{},"指定网络模式",[67,27455,27457],{"className":23894,"code":27456,"language":23896,"meta":58,"style":58},"--net=host \\\n",[73,27458,27459],{"__ignoreMap":58},[76,27460,27461,27464,27466,27469],{"class":78,"line":79},[76,27462,27463],{"class":93},"--net",[76,27465,247],{"class":89},[76,27467,27468],{"class":305},"host",[76,27470,24751],{"class":2035},[14,27472,27473],{},"启动参数里加上这行即可。具体在下方",[14,27475,27476],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1206,27478,27479,27482,27485,27488],{},[155,27480,27481],{},"--net=bridge:默认选项，表示连接到默认的网桥",[155,27483,27484],{},"--net=host:容器使用宿主机的网络",[155,27486,27487],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[155,27489,27490],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[117,27492,27493],{},"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":58,"searchDepth":86,"depth":86,"links":27495},[27496,27497,27498,27499],{"id":26810,"depth":97,"text":26811},{"id":26877,"depth":97,"text":26878},{"id":27329,"depth":97,"text":27330},{"id":27449,"depth":97,"text":27450},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26799,"description":26807},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27506,"title":27507,"body":27508,"description":27515,"extension":123,"meta":27521,"navigation":125,"path":27522,"seo":27523,"stem":27524,"__hash__":27525},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27509,"toc":27519},[27510,27513,27516],[10,27511,27507],{"id":27512},"_4dockerhub换源",[14,27514,27515],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27517,27518],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":58,"searchDepth":86,"depth":86,"links":27520},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27507,"description":27515},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27527,"title":27528,"body":27529,"description":58,"extension":123,"meta":28541,"navigation":125,"path":28542,"seo":28543,"stem":28544,"__hash__":28545},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27530,"toc":28536},[27531,27534,27538,27544,27548,27551,27891,27894,27897,27900,27905,27910,27913,27916,27919,27922,27941,27944,27955,27961,28143,28153,28169,28432,28434,28459,28474,28483,28533],[10,27532,27528],{"id":27533},"_5docker命令学习",[169,27535,27537],{"id":27536},"_51参考文档","5.1.参考文档",[14,27539,27540],{},[439,27541,27542],{"href":27542,"rel":27543},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23937],[169,27545,27547],{"id":27546},"_52常用命令","5.2.常用命令",[14,27549,27550],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[338,27552,27553,27566],{},[341,27554,27555],{},[344,27556,27557,27560,27563],{},[347,27558,27559],{"align":23808},"命令",[347,27561,27562],{"align":23808},"描述",[347,27564,27565],{"align":23808},"示例",[385,27567,27568,27579,27590,27601,27612,27623,27634,27645,27655,27666,27677,27688,27698,27709,27720,27731,27741,27751,27761,27771,27782,27793,27804,27815,27826,27837,27847,27858,27869,27880],{},[344,27569,27570,27573,27576],{},[390,27571,27572],{"align":23808},"docker run",[390,27574,27575],{"align":23808},"创建并启动一个新的容器。",[390,27577,27578],{"align":23808},"docker run -it ubuntu bash",[344,27580,27581,27584,27587],{},[390,27582,27583],{"align":23808},"docker build",[390,27585,27586],{"align":23808},"通过指定的 Dockerfile 创建一个新的镜像。",[390,27588,27589],{"align":23808},"docker build -t myimage .",[344,27591,27592,27595,27598],{},[390,27593,27594],{"align":23808},"docker pull",[390,27596,27597],{"align":23808},"从 Docker 仓库拉取镜像。",[390,27599,27600],{"align":23808},"docker pull ubuntu",[344,27602,27603,27606,27609],{},[390,27604,27605],{"align":23808},"docker push",[390,27607,27608],{"align":23808},"将本地镜像推送到 Docker 仓库。",[390,27610,27611],{"align":23808},"docker push myimage",[344,27613,27614,27617,27620],{},[390,27615,27616],{"align":23808},"docker stop",[390,27618,27619],{"align":23808},"停止一个正在运行的容器。",[390,27621,27622],{"align":23808},"docker stop container_id",[344,27624,27625,27628,27631],{},[390,27626,27627],{"align":23808},"docker start",[390,27629,27630],{"align":23808},"启动一个已经存在的容器。",[390,27632,27633],{"align":23808},"docker start container_id",[344,27635,27636,27639,27642],{},[390,27637,27638],{"align":23808},"docker restart",[390,27640,27641],{"align":23808},"重新启动容器。",[390,27643,27644],{"align":23808},"docker restart container_id",[344,27646,27647,27650,27653],{},[390,27648,27649],{"align":23808},"docker ps",[390,27651,27652],{"align":23808},"列出当前正在运行的容器。",[390,27654,27649],{"align":23808},[344,27656,27657,27660,27663],{},[390,27658,27659],{"align":23808},"docker rm",[390,27661,27662],{"align":23808},"删除一个或多个停止的容器。",[390,27664,27665],{"align":23808},"docker rm container_id",[344,27667,27668,27671,27674],{},[390,27669,27670],{"align":23808},"docker exec",[390,27672,27673],{"align":23808},"在一个正在运行的容器中执行命令。",[390,27675,27676],{"align":23808},"docker exec -it container_id bash",[344,27678,27679,27682,27685],{},[390,27680,27681],{"align":23808},"docker logs",[390,27683,27684],{"align":23808},"查看容器的日志输出。",[390,27686,27687],{"align":23808},"docker logs container_id",[344,27689,27690,27693,27696],{},[390,27691,27692],{"align":23808},"docker images",[390,27694,27695],{"align":23808},"列出本地所有镜像。",[390,27697,27692],{"align":23808},[344,27699,27700,27703,27706],{},[390,27701,27702],{"align":23808},"docker rmi",[390,27704,27705],{"align":23808},"删除一个或多个镜像。",[390,27707,27708],{"align":23808},"docker rmi myimage",[344,27710,27711,27714,27717],{},[390,27712,27713],{"align":23808},"docker network",[390,27715,27716],{"align":23808},"管理 Docker 网络。",[390,27718,27719],{"align":23808},"docker network ls",[344,27721,27722,27725,27728],{},[390,27723,27724],{"align":23808},"docker volume",[390,27726,27727],{"align":23808},"管理 Docker 数据卷。",[390,27729,27730],{"align":23808},"docker volume ls",[344,27732,27733,27736,27739],{},[390,27734,27735],{"align":23808},"docker-compose up",[390,27737,27738],{"align":23808},"启动 docker-compose.yml 中定义的所有服务。",[390,27740,27735],{"align":23808},[344,27742,27743,27746,27749],{},[390,27744,27745],{"align":23808},"docker-compose down",[390,27747,27748],{"align":23808},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[390,27750,27745],{"align":23808},[344,27752,27753,27756,27759],{},[390,27754,27755],{"align":23808},"docker info",[390,27757,27758],{"align":23808},"显示 Docker 系统的详细信息。",[390,27760,27755],{"align":23808},[344,27762,27763,27766,27769],{},[390,27764,27765],{"align":23808},"docker stats",[390,27767,27768],{"align":23808},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[390,27770,27765],{"align":23808},[344,27772,27773,27776,27779],{},[390,27774,27775],{"align":23808},"docker inspect",[390,27777,27778],{"align":23808},"查看容器或镜像的详细信息（JSON 格式）。",[390,27780,27781],{"align":23808},"docker inspect container_id",[344,27783,27784,27787,27790],{},[390,27785,27786],{"align":23808},"docker save",[390,27788,27789],{"align":23808},"将一个镜像保存为 tar 文件。",[390,27791,27792],{"align":23808},"docker save -o myimage.tar myimage",[344,27794,27795,27798,27801],{},[390,27796,27797],{"align":23808},"docker load",[390,27799,27800],{"align":23808},"从 tar 文件中加载镜像。",[390,27802,27803],{"align":23808},"docker load -i myimage.tar",[344,27805,27806,27809,27812],{},[390,27807,27808],{"align":23808},"docker tag",[390,27810,27811],{"align":23808},"为镜像添加标签（tag）。",[390,27813,27814],{"align":23808},"docker tag myimage myimage:v1",[344,27816,27817,27820,27823],{},[390,27818,27819],{"align":23808},"docker buildx build",[390,27821,27822],{"align":23808},"使用 Buildx 构建多架构镜像。",[390,27824,27825],{"align":23808},"docker buildx build -t myimage .",[344,27827,27828,27831,27834],{},[390,27829,27830],{"align":23808},"docker buildx create",[390,27832,27833],{"align":23808},"创建一个新的 Buildx 构建实例。",[390,27835,27836],{"align":23808},"docker buildx create –use",[344,27838,27839,27842,27845],{},[390,27840,27841],{"align":23808},"docker buildx ls",[390,27843,27844],{"align":23808},"列出所有可用的 Buildx 构建实例。",[390,27846,27841],{"align":23808},[344,27848,27849,27852,27855],{},[390,27850,27851],{"align":23808},"docker buildx use",[390,27853,27854],{"align":23808},"设置当前的 Buildx 构建实例。",[390,27856,27857],{"align":23808},"docker buildx use mybuilder",[344,27859,27860,27863,27866],{},[390,27861,27862],{"align":23808},"docker buildx bake",[390,27864,27865],{"align":23808},"使用 Bake 文件批量构建镜像。",[390,27867,27868],{"align":23808},"docker buildx bake -f bake.hcl",[344,27870,27871,27874,27877],{},[390,27872,27873],{"align":23808},"docker buildx build –push",[390,27875,27876],{"align":23808},"构建镜像并推送到镜像仓库。",[390,27878,27879],{"align":23808},"docker buildx build –push -t myimage .",[344,27881,27882,27885,27888],{},[390,27883,27884],{"align":23808},"docker buildx build –platform",[390,27886,27887],{"align":23808},"构建镜像并为多个平台生成支持。",[390,27889,27890],{"align":23808},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27892,27893],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27895,27896],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27898,27899],{},"docker images 可以查看已经下载的镜像",[14,27901,27902],{},[56,27903],{"alt":58,"src":27904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27906,27907],{},[350,27908,27909],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27911,27912],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27914,27915],{},"docker container logs 查看容器日志",[14,27917,27918],{},"docker top 查看容器里的进程",[14,27920,27921],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[67,27923,27925],{"className":23894,"code":27924,"language":23896,"meta":58,"style":58},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[73,27926,27927],{"__ignoreMap":58},[76,27928,27929,27932,27935,27938],{"class":78,"line":79},[76,27930,27931],{"class":2035},"如：docker",[76,27933,27934],{"class":305}," cp",[76,27936,27937],{"class":305}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[76,27939,27940],{"class":305}," \u002Fmydata\u002Fnginx\n",[14,27942,27943],{},"docker run时在启动容器的时候会有几个常用的选项：",[1206,27945,27946,27949,27952],{},[155,27947,27948],{},"-d选项：表示后台运行",[155,27950,27951],{},"-P选项：随机端口映射",[155,27953,27954],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[169,27956,27958],{"id":27957},"_53run命令的参数非常重要",[350,27959,27960],{},"5.3.run命令的参数（非常重要）",[338,27962,27963,27976],{},[341,27964,27965],{},[344,27966,27967,27970,27973],{},[347,27968,27969],{"align":23808},"参数\u002F配置",[347,27971,27972],{"align":23808},"功能说明",[347,27974,27975],{"align":23808},"重要性与参考依据",[385,27977,27978,27989,28000,28011,28022,28033,28044,28055,28066,28077,28088,28099,28110,28121,28132],{},[344,27979,27980,27983,27986],{},[390,27981,27982],{"align":23808},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[390,27984,27985],{"align":23808},"指定容器名称，便于后续管理",[390,27987,27988],{"align":23808},"替代随机生成的容器名。",[344,27990,27991,27994,27997],{},[390,27992,27993],{"align":23808},"–gpus all",[390,27995,27996],{"align":23808},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[390,27998,27999],{"align":23808},"用于CUDA加速等GPU依赖任务。",[344,28001,28002,28005,28008],{},[390,28003,28004],{"align":23808},"-e NVIDIA_DRIVER_CAPABILITIES=all",[390,28006,28007],{"align":23808},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[390,28009,28010],{"align":23808},"确保容器内GPU功能完整67。",[344,28012,28013,28016,28019],{},[390,28014,28015],{"align":23808},"-dit",[390,28017,28018],{"align":23808},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[390,28020,28021],{"align":23808},"允许容器在后台运行并支持交互操作。",[344,28023,28024,28027,28030],{},[390,28025,28026],{"align":23808},"–privileged",[390,28028,28029],{"align":23808},"赋予容器完全主机权限（可访问设备、内核模块等）",[390,28031,28032],{"align":23808},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[344,28034,28035,28038,28041],{},[390,28036,28037],{"align":23808},"–net=host",[390,28039,28040],{"align":23808},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[390,28042,28043],{"align":23808},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[344,28045,28046,28049,28052],{},[390,28047,28048],{"align":23808},"–group-add audio–group-add video–group-add dialout",[390,28050,28051],{"align":23808},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[390,28053,28054],{"align":23808},"避免权限问题（如避免无法调用摄像头、麦克风）。",[344,28056,28057,28060,28063],{},[390,28058,28059],{"align":23808},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[390,28061,28062],{"align":23808},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[390,28064,28065],{"align":23808},"支持容器内运行图形界面应用（如OpenCV可视化）。",[344,28067,28068,28071,28074],{},[390,28069,28070],{"align":23808},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[390,28072,28073],{"align":23808},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[390,28075,28076],{"align":23808},"实现容器内图形显示。",[344,28078,28079,28082,28085],{},[390,28080,28081],{"align":23808},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[390,28083,28084],{"align":23808},"挂载X11认证文件（只读）",[390,28086,28087],{"align":23808},"确保容器有权连接宿主机显示服务。",[344,28089,28090,28093,28096],{},[390,28091,28092],{"align":23808},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[390,28094,28095],{"align":23808},"挂载Wayland显示协议相关目录",[390,28097,28098],{"align":23808},"支持Wayland协议的图形显示。",[344,28100,28101,28104,28107],{},[390,28102,28103],{"align":23808},"–ulimit nofile=1024:524288",[390,28105,28106],{"align":23808},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[390,28108,28109],{"align":23808},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[344,28111,28112,28115,28118],{},[390,28113,28114],{"align":23808},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[390,28116,28117],{"align":23808},"挂载宿主机用户目录到容器内同名路径",[390,28119,28120],{"align":23808},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[344,28122,28123,28126,28129],{},[390,28124,28125],{"align":23808},"-w \u002Fhome\u002Ftungchiahui",[390,28127,28128],{"align":23808},"设置容器启动后的默认工作目录",[390,28130,28131],{"align":23808},"直接进入项目路径，方便执行命令2324。",[344,28133,28134,28137,28140],{},[390,28135,28136],{"align":23808},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[390,28138,28139],{"align":23808},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[390,28141,28142],{"align":23808},"提供预配置的深度学习与机器人开发环境。",[14,28144,28145,28146,28148,28149,28152],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[73,28147,24649],{},"加不加",[73,28150,28151],{},"sudo -E","都无所谓。",[14,28154,28155,28156,28158,28159,28161,28162,28165,28166,28168],{},"用户已经被加到docker组了，不用",[73,28157,24649],{},"也行跑，其次，",[73,28160,24649],{},"运行的话，你的",[73,28163,28164],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[73,28167,28164],{},"更不可能变了。",[67,28170,28172],{"className":23894,"code":28171,"language":23896,"meta":58,"style":58},"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",[73,28173,28174,28187,28197,28207,28219,28226,28233,28240,28250,28259,28268,28282,28294,28306,28315,28325,28334,28349,28382,28409,28420,28427],{"__ignoreMap":58},[76,28175,28176,28178,28180,28182,28185],{"class":78,"line":79},[76,28177,24649],{"class":2035},[76,28179,26393],{"class":305},[76,28181,27303],{"class":305},[76,28183,28184],{"class":250}," --name=ros_opencv_cuda",[76,28186,24751],{"class":250},[76,28188,28189,28192,28195],{"class":78,"line":86},[76,28190,28191],{"class":93},"--gpus ",[76,28193,28194],{"class":305},"all",[76,28196,24751],{"class":250},[76,28198,28199,28202,28205],{"class":78,"line":97},[76,28200,28201],{"class":93},"-e ",[76,28203,28204],{"class":305},"NVIDIA_DRIVER_CAPABILITIES=all",[76,28206,24751],{"class":250},[76,28208,28209,28211,28214,28217],{"class":78,"line":103},[76,28210,28201],{"class":93},[76,28212,28213],{"class":305},"DISPLAY=",[76,28215,28216],{"class":93},"$DISPLAY ",[76,28218,26248],{"class":250},[76,28220,28221,28224],{"class":78,"line":1273},[76,28222,28223],{"class":93},"-dit ",[76,28225,26248],{"class":250},[76,28227,28228,28231],{"class":78,"line":1287},[76,28229,28230],{"class":93},"--privileged ",[76,28232,26248],{"class":250},[76,28234,28235,28238],{"class":78,"line":1293},[76,28236,28237],{"class":93},"--net=host ",[76,28239,26248],{"class":250},[76,28241,28242,28245,28248],{"class":78,"line":1384},[76,28243,28244],{"class":93},"--group-add ",[76,28246,28247],{"class":305},"audio",[76,28249,24751],{"class":250},[76,28251,28252,28254,28257],{"class":78,"line":1390},[76,28253,28244],{"class":93},[76,28255,28256],{"class":305},"video",[76,28258,24751],{"class":250},[76,28260,28261,28263,28266],{"class":78,"line":1402},[76,28262,28244],{"class":93},[76,28264,28265],{"class":305},"dialout",[76,28267,24751],{"class":250},[76,28269,28270,28272,28275,28277,28280],{"class":78,"line":1684},[76,28271,28201],{"class":93},[76,28273,28274],{"class":305},"XAUTHORITY=",[76,28276,28164],{"class":93},[76,28278,28279],{"class":305},"\u002F.Xauthority",[76,28281,24751],{"class":250},[76,28283,28284,28286,28289,28292],{"class":78,"line":1689},[76,28285,28201],{"class":93},[76,28287,28288],{"class":305},"WAYLAND_DISPLAY=",[76,28290,28291],{"class":93},"$WAYLAND_DISPLAY ",[76,28293,26248],{"class":250},[76,28295,28296,28298,28301,28304],{"class":78,"line":1695},[76,28297,28201],{"class":93},[76,28299,28300],{"class":305},"XDG_RUNTIME_DIR=",[76,28302,28303],{"class":93},"$XDG_RUNTIME_DIR ",[76,28305,26248],{"class":250},[76,28307,28308,28310,28313],{"class":78,"line":1700},[76,28309,28201],{"class":93},[76,28311,28312],{"class":305},"QT_QPA_PLATFORM=xcb",[76,28314,24751],{"class":250},[76,28316,28317,28320,28323],{"class":78,"line":1714},[76,28318,28319],{"class":93},"-v ",[76,28321,28322],{"class":305},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[76,28324,24751],{"class":250},[76,28326,28327,28329,28332],{"class":78,"line":1719},[76,28328,28319],{"class":93},[76,28330,28331],{"class":305},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[76,28333,24751],{"class":250},[76,28335,28336,28339,28342,28344,28347],{"class":78,"line":1725},[76,28337,28338],{"class":93},"-v $HOME",[76,28340,28341],{"class":305},"\u002F.Xauthority:",[76,28343,28164],{"class":93},[76,28345,28346],{"class":305},"\u002F.Xauthority:ro",[76,28348,24751],{"class":250},[76,28350,28351,28353,28356,28358,28361,28364,28366,28369,28371,28373,28375,28377,28380],{"class":78,"line":1746},[76,28352,28319],{"class":93},[76,28354,28355],{"class":305},"\u002Frun\u002Fuser\u002F",[76,28357,25172],{"class":93},[76,28359,28360],{"class":2035},"id",[76,28362,28363],{"class":250}," -u",[76,28365,629],{"class":93},[76,28367,28368],{"class":305},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[76,28370,25172],{"class":93},[76,28372,28360],{"class":2035},[76,28374,28363],{"class":250},[76,28376,629],{"class":93},[76,28378,28379],{"class":305},"\u002Fwayland-0",[76,28381,24751],{"class":250},[76,28383,28384,28386,28388,28390,28392,28394,28396,28399,28401,28403,28405,28407],{"class":78,"line":1751},[76,28385,28319],{"class":93},[76,28387,28355],{"class":305},[76,28389,25172],{"class":93},[76,28391,28360],{"class":2035},[76,28393,28363],{"class":250},[76,28395,629],{"class":93},[76,28397,28398],{"class":305},":\u002Frun\u002Fuser\u002F",[76,28400,25172],{"class":93},[76,28402,28360],{"class":2035},[76,28404,28363],{"class":250},[76,28406,13786],{"class":93},[76,28408,26248],{"class":250},[76,28410,28411,28413,28415,28418],{"class":78,"line":1765},[76,28412,28338],{"class":93},[76,28414,1058],{"class":305},[76,28416,28417],{"class":93},"$HOME ",[76,28419,26248],{"class":250},[76,28421,28422,28425],{"class":78,"line":1770},[76,28423,28424],{"class":93},"-w $HOME ",[76,28426,26248],{"class":250},[76,28428,28429],{"class":78,"line":1799},[76,28430,28431],{"class":93},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28433,9097],{},[152,28435,28436,28444,28447,28450],{},[155,28437,28438,13867,28440,28443],{},[73,28439,28204],{},[73,28441,28442],{},"--gpus all","没有英伟达显卡请注释。",[155,28445,28446],{},"--name后面请自己为容器起名。",[155,28448,28449],{},"最后一行仓库名称请你自己找对应的镜像填上。",[155,28451,28452,28453,28458],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23625,28454,28455],{},[350,28456,28457],{},"请不要加","。",[67,28460,28462],{"className":23894,"code":28461,"language":23896,"meta":58,"style":58},"--ulimit nofile=1024:524288 \\\n",[73,28463,28464],{"__ignoreMap":58},[76,28465,28466,28469,28472],{"class":78,"line":79},[76,28467,28468],{"class":2035},"--ulimit",[76,28470,28471],{"class":305}," nofile=1024:524288",[76,28473,24751],{"class":250},[14,28475,28476,28477,28482],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23625,28478,28479],{},[350,28480,28481],{},"不建议","**.**",[67,28484,28486],{"className":23894,"code":28485,"language":23896,"meta":58,"style":58},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[73,28487,28488,28515,28524],{"__ignoreMap":58},[76,28489,28490,28493,28496,28498,28500,28502,28504,28506,28508,28511,28513],{"class":78,"line":79},[76,28491,28492],{"class":2035},"--user",[76,28494,28495],{"class":93}," $(",[76,28497,28360],{"class":2035},[76,28499,28363],{"class":250},[76,28501,629],{"class":93},[76,28503,1058],{"class":305},[76,28505,25172],{"class":93},[76,28507,28360],{"class":2035},[76,28509,28510],{"class":250}," -g",[76,28512,13786],{"class":93},[76,28514,26248],{"class":250},[76,28516,28517,28519,28522],{"class":78,"line":86},[76,28518,28319],{"class":93},[76,28520,28521],{"class":305},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[76,28523,24751],{"class":250},[76,28525,28526,28528,28531],{"class":78,"line":97},[76,28527,28319],{"class":93},[76,28529,28530],{"class":305},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[76,28532,24751],{"class":250},[117,28534,28535],{},"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":58,"searchDepth":86,"depth":86,"links":28537},[28538,28539,28540],{"id":27536,"depth":97,"text":27537},{"id":27546,"depth":97,"text":27547},{"id":27957,"depth":97,"text":27960},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27528,"description":58},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28547,"title":28548,"body":28549,"description":58,"extension":123,"meta":30172,"navigation":125,"path":30173,"seo":30174,"stem":30175,"__hash__":30176},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28550,"toc":30167},[28551,28554,28558,28561,28783,28787,28791,28794,28900,28905,28908,28913,28916,28921,28924,28929,28932,28944,28947,28952,28959,28987,28994,29070,29075,29078,29101,29103,29178,29183,29186,29190,29198,29203,29208,29212,29223,29229,29232,29235,29259,29262,29265,29293,29296,29299,29764,29767,29772,29777,29781,29804,29809,29813,29817,29820,29823,29826,29853,29856,29859,29877,29880,29883,29905,29913,29918,29923,29927,29930,29933,29936,29939,29984,29987,30005,30008,30013,30016,30037,30040,30096,30099,30104,30108,30111,30118,30121,30124,30129,30132,30148,30151,30164],[10,28552,28548],{"id":28553},"_6手动创建docker镜像",[169,28555,28557],{"id":28556},"_61dockerfile","6.1.DockerFile",[14,28559,28560],{},"常用命令：",[338,28562,28563,28574],{},[341,28564,28565],{},[344,28566,28567,28570,28572],{},[347,28568,28569],{"align":23808},"指令",[347,28571,25942],{"align":23808},[347,28573,27565],{"align":23808},[385,28575,28576,28586,28602,28613,28624,28635,28646,28657,28668,28682,28696,28707,28721,28732,28743,28757,28772],{},[344,28577,28578,28580,28583],{},[390,28579,27443],{"align":23808},[390,28581,28582],{"align":23808},"指定基础镜像，是 Dockerfile 的起点",[390,28584,28585],{"align":23808},"FROM ubuntu:22.04",[344,28587,28588,28591,28594],{},[390,28589,28590],{"align":23808},"LABEL",[390,28592,28593],{"align":23808},"添加元数据（如作者、版本等）",[390,28595,28596,28597,28601],{"align":23808},"LABEL maintainer=”",[439,28598,28600],{"href":28599},"mailto:you@example.com","you@example.com","”",[344,28603,28604,28607,28610],{},[390,28605,28606],{"align":23808},"ENV",[390,28608,28609],{"align":23808},"设置环境变量",[390,28611,28612],{"align":23808},"ENV PORT=8080",[344,28614,28615,28618,28621],{},[390,28616,28617],{"align":23808},"ARG",[390,28619,28620],{"align":23808},"构建参数，只在构建期间可用",[390,28622,28623],{"align":23808},"ARG VERSION=1.0",[344,28625,28626,28629,28632],{},[390,28627,28628],{"align":23808},"RUN",[390,28630,28631],{"align":23808},"构建镜像时运行命令",[390,28633,28634],{"align":23808},"RUN apt-get update && apt-get install -y curl",[344,28636,28637,28640,28643],{},[390,28638,28639],{"align":23808},"COPY",[390,28641,28642],{"align":23808},"复制文件到镜像中",[390,28644,28645],{"align":23808},"COPY . \u002Fapp",[344,28647,28648,28651,28654],{},[390,28649,28650],{"align":23808},"ADD",[390,28652,28653],{"align":23808},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[390,28655,28656],{"align":23808},"ADD archive.tar.gz \u002Fdata\u002F",[344,28658,28659,28662,28665],{},[390,28660,28661],{"align":23808},"WORKDIR",[390,28663,28664],{"align":23808},"设置工作目录",[390,28666,28667],{"align":23808},"WORKDIR \u002Fopt",[344,28669,28670,28673,28676],{},[390,28671,28672],{"align":23808},"CMD",[390,28674,28675],{"align":23808},"设置容器启动时默认命令（可被 docker run 覆盖）",[390,28677,28678,28679],{"align":23808},"CMD ",[76,28680,28681],{},"“node”, “index.js”",[344,28683,28684,28687,28690],{},[390,28685,28686],{"align":23808},"ENTRYPOINT",[390,28688,28689],{"align":23808},"设置容器启动时固定命令（通常用于 CLI 工具等）",[390,28691,28692,28693],{"align":23808},"ENTRYPOINT ",[76,28694,28695],{},"“python3”",[344,28697,28698,28701,28704],{},[390,28699,28700],{"align":23808},"EXPOSE",[390,28702,28703],{"align":23808},"声明镜像内服务监听的端口（不会自动映射）",[390,28705,28706],{"align":23808},"EXPOSE 80",[344,28708,28709,28712,28715],{},[390,28710,28711],{"align":23808},"VOLUME",[390,28713,28714],{"align":23808},"声明数据卷挂载点",[390,28716,28717,28718],{"align":23808},"VOLUME ",[76,28719,28720],{},"“\u002Fdata”",[344,28722,28723,28726,28729],{},[390,28724,28725],{"align":23808},"USER",[390,28727,28728],{"align":23808},"设置后续命令执行的用户",[390,28730,28731],{"align":23808},"USER appuser",[344,28733,28734,28737,28740],{},[390,28735,28736],{"align":23808},"ONBUILD",[390,28738,28739],{"align":23808},"当镜像作为其他镜像基础镜像时触发的构建指令",[390,28741,28742],{"align":23808},"ONBUILD COPY . \u002Fsrc",[344,28744,28745,28748,28751],{},[390,28746,28747],{"align":23808},"SHELL",[390,28749,28750],{"align":23808},"更改默认 shell，比如将 sh -c 改为 bash -c",[390,28752,28753,28754],{"align":23808},"SHELL ",[76,28755,28756],{},"“\u002Fbin\u002Fbash”, “-c”",[344,28758,28759,28762,28765],{},[390,28760,28761],{"align":23808},"HEALTHCHECK",[390,28763,28764],{"align":23808},"定义容器运行时的健康检查命令",[390,28766,28767,28768],{"align":23808},"`HEALTHCHECK CMD curl –fail ",[439,28769,28770],{"href":28770,"rel":28771},"http:\u002F\u002Flocalhost:8080",[23937],[344,28773,28774,28777,28780],{},[390,28775,28776],{"align":23808},"STOPSIGNAL",[390,28778,28779],{"align":23808},"容器停止时发送的信号",[390,28781,28782],{"align":23808},"STOPSIGNAL SIGKILL",[169,28784,28786],{"id":28785},"_62自己创建容器","6.2.自己创建容器",[22070,28788,28790],{"id":28789},"_621手动创建","6.2.1.手动创建",[14,28792,28793],{},"在x86电脑上编译x86的：",[67,28795,28797],{"className":23894,"code":28796,"language":23896,"meta":58,"style":58},"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",[73,28798,28799,28815,28819,28832,28836,28849,28853,28866,28870,28883,28887],{"__ignoreMap":58},[76,28800,28801,28803,28806,28809,28812],{"class":78,"line":79},[76,28802,26626],{"class":2035},[76,28804,28805],{"class":305}," build",[76,28807,28808],{"class":250}," -t",[76,28810,28811],{"class":305}," ros-melodic-cuda118-cudnn8-bionic:latest",[76,28813,28814],{"class":305}," .\n",[76,28816,28817],{"class":78,"line":86},[76,28818,2472],{"emptyLinePlaceholder":125},[76,28820,28821,28823,28825,28827,28830],{"class":78,"line":97},[76,28822,26626],{"class":2035},[76,28824,28805],{"class":305},[76,28826,28808],{"class":250},[76,28828,28829],{"class":305}," ros-noetic-focal:latest",[76,28831,28814],{"class":305},[76,28833,28834],{"class":78,"line":103},[76,28835,2472],{"emptyLinePlaceholder":125},[76,28837,28838,28840,28842,28844,28847],{"class":78,"line":1273},[76,28839,26626],{"class":2035},[76,28841,28805],{"class":305},[76,28843,28808],{"class":250},[76,28845,28846],{"class":305}," ros-humble-jammy:latest",[76,28848,28814],{"class":305},[76,28850,28851],{"class":78,"line":1287},[76,28852,2472],{"emptyLinePlaceholder":125},[76,28854,28855,28857,28859,28861,28864],{"class":78,"line":1293},[76,28856,26626],{"class":2035},[76,28858,28805],{"class":305},[76,28860,28808],{"class":250},[76,28862,28863],{"class":305}," ros-jazzy-noble:latest",[76,28865,28814],{"class":305},[76,28867,28868],{"class":78,"line":1384},[76,28869,2472],{"emptyLinePlaceholder":125},[76,28871,28872,28874,28876,28878,28881],{"class":78,"line":1390},[76,28873,26626],{"class":2035},[76,28875,28805],{"class":305},[76,28877,28808],{"class":250},[76,28879,28880],{"class":305}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[76,28882,28814],{"class":305},[76,28884,28885],{"class":78,"line":1402},[76,28886,2472],{"emptyLinePlaceholder":125},[76,28888,28889,28891,28893,28895,28898],{"class":78,"line":1684},[76,28890,26626],{"class":2035},[76,28892,28805],{"class":305},[76,28894,28808],{"class":250},[76,28896,28897],{"class":305}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[76,28899,28814],{"class":305},[14,28901,28902],{},[56,28903],{"alt":58,"src":28904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28906,28907],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28909,28910],{},[56,28911],{"alt":58,"src":28912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28914,28915],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[152,28917,28918],{},[155,28919,28920],{},"创建 Docker Hub 账户",[14,28922,28923],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[152,28925,28926],{"start":86},[155,28927,28928],{},"登录 Docker Hub",[14,28930,28931],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[67,28933,28935],{"className":23894,"code":28934,"language":23896,"meta":58,"style":58},"docker login\n",[73,28936,28937],{"__ignoreMap":58},[76,28938,28939,28941],{"class":78,"line":79},[76,28940,26626],{"class":2035},[76,28942,28943],{"class":305}," login\n",[14,28945,28946],{},"输入你的 Docker Hub 用户名和密码进行验证。",[152,28948,28949],{},[155,28950,28951],{},"为你的镜像打标签",[14,28953,28954,28955,28958],{},"Docker Hub 使用 ",[73,28956,28957],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[67,28960,28962],{"className":23894,"code":28961,"language":23896,"meta":58,"style":58},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[73,28963,28964],{"__ignoreMap":58},[76,28965,28966,28968,28971,28973,28976,28979,28982,28984],{"class":78,"line":79},[76,28967,26626],{"class":2035},[76,28969,28970],{"class":305}," tag",[76,28972,28863],{"class":305},[76,28974,28975],{"class":89}," \u003C",[76,28977,28978],{"class":305},"你的用户",[76,28980,28981],{"class":93},"名",[76,28983,1159],{"class":89},[76,28985,28986],{"class":305},"\u002Fros-jazzy-noble:latest\n",[14,28988,28989,28990,28993],{},"例如，如果你的 Docker Hub 用户名是 ",[73,28991,28992],{},"tungchiahui","，你应该执行：",[67,28995,28997],{"className":23894,"code":28996,"language":23896,"meta":58,"style":58},"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",[73,28998,28999,29010,29014,29025,29029,29040,29044,29055,29059],{"__ignoreMap":58},[76,29000,29001,29003,29005,29007],{"class":78,"line":79},[76,29002,26626],{"class":2035},[76,29004,28970],{"class":305},[76,29006,28829],{"class":305},[76,29008,29009],{"class":305}," tungchiahui\u002Fros-noetic-focal:latest\n",[76,29011,29012],{"class":78,"line":86},[76,29013,2472],{"emptyLinePlaceholder":125},[76,29015,29016,29018,29020,29022],{"class":78,"line":97},[76,29017,26626],{"class":2035},[76,29019,28970],{"class":305},[76,29021,28846],{"class":305},[76,29023,29024],{"class":305}," tungchiahui\u002Fros-humble-jammy:latest\n",[76,29026,29027],{"class":78,"line":103},[76,29028,2472],{"emptyLinePlaceholder":125},[76,29030,29031,29033,29035,29037],{"class":78,"line":1273},[76,29032,26626],{"class":2035},[76,29034,28970],{"class":305},[76,29036,28863],{"class":305},[76,29038,29039],{"class":305}," tungchiahui\u002Fros-jazzy-noble:latest\n",[76,29041,29042],{"class":78,"line":1287},[76,29043,2472],{"emptyLinePlaceholder":125},[76,29045,29046,29048,29050,29052],{"class":78,"line":1293},[76,29047,26626],{"class":2035},[76,29049,28970],{"class":305},[76,29051,28880],{"class":305},[76,29053,29054],{"class":305}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[76,29056,29057],{"class":78,"line":1384},[76,29058,2472],{"emptyLinePlaceholder":125},[76,29060,29061,29063,29065,29067],{"class":78,"line":1390},[76,29062,26626],{"class":2035},[76,29064,28970],{"class":305},[76,29066,28897],{"class":305},[76,29068,29069],{"class":305}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[152,29071,29072],{"start":86},[155,29073,29074],{},"推送镜像到 Docker Hub",[14,29076,29077],{},"使用以下命令将镜像推送到 Docker Hub：",[67,29079,29081],{"className":23894,"code":29080,"language":23896,"meta":58,"style":58},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[73,29082,29083],{"__ignoreMap":58},[76,29084,29085,29087,29090,29092,29094,29096,29098],{"class":78,"line":79},[76,29086,26626],{"class":2035},[76,29088,29089],{"class":305}," push",[76,29091,28975],{"class":89},[76,29093,28978],{"class":305},[76,29095,28981],{"class":93},[76,29097,1159],{"class":89},[76,29099,29100],{"class":305},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29102,14705],{},[67,29104,29106],{"className":23894,"code":29105,"language":23896,"meta":58,"style":58},"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",[73,29107,29108,29116,29120,29128,29132,29140,29144,29153,29157,29165,29169],{"__ignoreMap":58},[76,29109,29110,29112,29114],{"class":78,"line":79},[76,29111,26626],{"class":2035},[76,29113,29089],{"class":305},[76,29115,29009],{"class":305},[76,29117,29118],{"class":78,"line":86},[76,29119,2472],{"emptyLinePlaceholder":125},[76,29121,29122,29124,29126],{"class":78,"line":97},[76,29123,26626],{"class":2035},[76,29125,29089],{"class":305},[76,29127,29024],{"class":305},[76,29129,29130],{"class":78,"line":103},[76,29131,2472],{"emptyLinePlaceholder":125},[76,29133,29134,29136,29138],{"class":78,"line":1273},[76,29135,26626],{"class":2035},[76,29137,29089],{"class":305},[76,29139,29039],{"class":305},[76,29141,29142],{"class":78,"line":1287},[76,29143,2472],{"emptyLinePlaceholder":125},[76,29145,29146,29148,29150],{"class":78,"line":1293},[76,29147,26626],{"class":2035},[76,29149,29089],{"class":305},[76,29151,29152],{"class":305}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[76,29154,29155],{"class":78,"line":1384},[76,29156,2472],{"emptyLinePlaceholder":125},[76,29158,29159,29161,29163],{"class":78,"line":1390},[76,29160,26626],{"class":2035},[76,29162,29089],{"class":305},[76,29164,29069],{"class":305},[76,29166,29167],{"class":78,"line":1402},[76,29168,2472],{"emptyLinePlaceholder":125},[76,29170,29171,29173,29175],{"class":78,"line":1684},[76,29172,26626],{"class":2035},[76,29174,29089],{"class":305},[76,29176,29177],{"class":305}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[152,29179,29180],{"start":97},[155,29181,29182],{},"验证推送成功",[14,29184,29185],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29187,29188],{},[350,29189,3856],{},[1206,29191,29192,29195],{},[155,29193,29194],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[155,29196,29197],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29199,29200],{},[56,29201],{"alt":58,"src":29202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29204,29205],{},[56,29206],{"alt":58,"src":29207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22070,29209,29211],{"id":29210},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29213,29214,29215,29218,29219,29222],{},"如果您想在 ",[350,29216,29217],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[350,29220,29221],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29224,29225,29226],{},"1. ",[350,29227,29228],{},"启用 Docker 跨平台构建",[14,29230,29231],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29233,29234],{},"第一步：启用 buildx（只需执行一次）",[67,29236,29238],{"className":23894,"code":29237,"language":23896,"meta":58,"style":58},"docker buildx create --name multiarch_builder --use\n",[73,29239,29240],{"__ignoreMap":58},[76,29241,29242,29244,29247,29250,29253,29256],{"class":78,"line":79},[76,29243,26626],{"class":2035},[76,29245,29246],{"class":305}," buildx",[76,29248,29249],{"class":305}," create",[76,29251,29252],{"class":250}," --name",[76,29254,29255],{"class":305}," multiarch_builder",[76,29257,29258],{"class":250}," --use\n",[14,29260,29261],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29263,29264],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[67,29266,29268],{"className":23894,"code":29267,"language":23896,"meta":58,"style":58},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[73,29269,29270],{"__ignoreMap":58},[76,29271,29272,29274,29276,29278,29281,29284,29287,29290],{"class":78,"line":79},[76,29273,26626],{"class":2035},[76,29275,27303],{"class":305},[76,29277,27306],{"class":250},[76,29279,29280],{"class":250}," --privileged",[76,29282,29283],{"class":305}," multiarch\u002Fqemu-user-static",[76,29285,29286],{"class":250}," --reset",[76,29288,29289],{"class":250}," -p",[76,29291,29292],{"class":305}," yes\n",[14,29294,29295],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29297,29298],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[67,29300,29302],{"className":23894,"code":29301,"language":23896,"meta":58,"style":58},"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",[73,29303,29304,29346,29350,29355,29365,29375,29384,29390,29394,29398,29408,29416,29425,29431,29435,29439,29449,29457,29466,29472,29476,29480,29490,29498,29507,29513,29517,29521,29531,29539,29548,29554,29558,29562,29572,29580,29589,29595,29599,29603,29613,29621,29630,29636,29640,29644,29654,29662,29671,29677,29681,29685,29695,29703,29712,29718,29722,29726,29737,29745,29754,29760],{"__ignoreMap":58},[76,29305,29306,29308,29310,29312,29315,29318,29320,29322,29325,29327,29329,29331,29333,29336,29339,29341,29344],{"class":78,"line":79},[76,29307,26626],{"class":2035},[76,29309,29246],{"class":305},[76,29311,28805],{"class":305},[76,29313,29314],{"class":250}," --platform",[76,29316,29317],{"class":305}," linux\u002Famd64,linux\u002Farm64",[76,29319,28808],{"class":250},[76,29321,28975],{"class":89},[76,29323,29324],{"class":305},"你的镜像",[76,29326,28981],{"class":93},[76,29328,1159],{"class":89},[76,29330,1058],{"class":305},[76,29332,1109],{"class":89},[76,29334,29335],{"class":305},"标",[76,29337,29338],{"class":93},"签",[76,29340,1159],{"class":89},[76,29342,29343],{"class":250}," --push",[76,29345,28814],{"class":305},[76,29347,29348],{"class":78,"line":86},[76,29349,2472],{"emptyLinePlaceholder":125},[76,29351,29352],{"class":78,"line":97},[76,29353,29354],{"class":82},"# 例子：\n",[76,29356,29357,29359,29361,29363],{"class":78,"line":103},[76,29358,26626],{"class":2035},[76,29360,29246],{"class":305},[76,29362,28805],{"class":305},[76,29364,24751],{"class":250},[76,29366,29367,29370,29373],{"class":78,"line":1273},[76,29368,29369],{"class":93},"--platform ",[76,29371,29372],{"class":305},"linux\u002Famd64,linux\u002Farm64",[76,29374,24751],{"class":250},[76,29376,29377,29379,29382],{"class":78,"line":1287},[76,29378,28808],{"class":250},[76,29380,29381],{"class":305}," tungchiahui\u002Fros:noetic-focal",[76,29383,24751],{"class":250},[76,29385,29386,29388],{"class":78,"line":1293},[76,29387,29343],{"class":250},[76,29389,24751],{"class":250},[76,29391,29392],{"class":78,"line":1384},[76,29393,28814],{"class":305},[76,29395,29396],{"class":78,"line":1390},[76,29397,2472],{"emptyLinePlaceholder":125},[76,29399,29400,29402,29404,29406],{"class":78,"line":1402},[76,29401,26626],{"class":2035},[76,29403,29246],{"class":305},[76,29405,28805],{"class":305},[76,29407,24751],{"class":250},[76,29409,29410,29412,29414],{"class":78,"line":1684},[76,29411,29369],{"class":93},[76,29413,29372],{"class":305},[76,29415,24751],{"class":250},[76,29417,29418,29420,29423],{"class":78,"line":1689},[76,29419,28808],{"class":250},[76,29421,29422],{"class":305}," tungchiahui\u002Fros:humble-jammy",[76,29424,24751],{"class":250},[76,29426,29427,29429],{"class":78,"line":1695},[76,29428,29343],{"class":250},[76,29430,24751],{"class":250},[76,29432,29433],{"class":78,"line":1700},[76,29434,28814],{"class":305},[76,29436,29437],{"class":78,"line":1714},[76,29438,2472],{"emptyLinePlaceholder":125},[76,29440,29441,29443,29445,29447],{"class":78,"line":1719},[76,29442,26626],{"class":2035},[76,29444,29246],{"class":305},[76,29446,28805],{"class":305},[76,29448,24751],{"class":250},[76,29450,29451,29453,29455],{"class":78,"line":1725},[76,29452,29369],{"class":93},[76,29454,29372],{"class":305},[76,29456,24751],{"class":250},[76,29458,29459,29461,29464],{"class":78,"line":1746},[76,29460,28808],{"class":250},[76,29462,29463],{"class":305}," tungchiahui\u002Fros:jazzy-noble",[76,29465,24751],{"class":250},[76,29467,29468,29470],{"class":78,"line":1751},[76,29469,29343],{"class":250},[76,29471,24751],{"class":250},[76,29473,29474],{"class":78,"line":1765},[76,29475,28814],{"class":305},[76,29477,29478],{"class":78,"line":1770},[76,29479,2472],{"emptyLinePlaceholder":125},[76,29481,29482,29484,29486,29488],{"class":78,"line":1799},[76,29483,26393],{"class":2035},[76,29485,29246],{"class":305},[76,29487,28805],{"class":305},[76,29489,24751],{"class":250},[76,29491,29492,29494,29496],{"class":78,"line":1804},[76,29493,29369],{"class":93},[76,29495,29372],{"class":305},[76,29497,24751],{"class":250},[76,29499,29500,29502,29505],{"class":78,"line":1821},[76,29501,28808],{"class":250},[76,29503,29504],{"class":305}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[76,29506,24751],{"class":250},[76,29508,29509,29511],{"class":78,"line":1826},[76,29510,29343],{"class":250},[76,29512,24751],{"class":250},[76,29514,29515],{"class":78,"line":1831},[76,29516,28814],{"class":305},[76,29518,29519],{"class":78,"line":1836},[76,29520,2472],{"emptyLinePlaceholder":125},[76,29522,29523,29525,29527,29529],{"class":78,"line":1850},[76,29524,26626],{"class":2035},[76,29526,29246],{"class":305},[76,29528,28805],{"class":305},[76,29530,24751],{"class":250},[76,29532,29533,29535,29537],{"class":78,"line":1855},[76,29534,29369],{"class":93},[76,29536,29372],{"class":305},[76,29538,24751],{"class":250},[76,29540,29541,29543,29546],{"class":78,"line":2649},[76,29542,28808],{"class":250},[76,29544,29545],{"class":305}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[76,29547,24751],{"class":250},[76,29549,29550,29552],{"class":78,"line":2663},[76,29551,29343],{"class":250},[76,29553,24751],{"class":250},[76,29555,29556],{"class":78,"line":2671},[76,29557,28814],{"class":305},[76,29559,29560],{"class":78,"line":2676},[76,29561,2472],{"emptyLinePlaceholder":125},[76,29563,29564,29566,29568,29570],{"class":78,"line":2682},[76,29565,26393],{"class":2035},[76,29567,29246],{"class":305},[76,29569,28805],{"class":305},[76,29571,24751],{"class":250},[76,29573,29574,29576,29578],{"class":78,"line":2688},[76,29575,29369],{"class":93},[76,29577,29372],{"class":305},[76,29579,24751],{"class":250},[76,29581,29582,29584,29587],{"class":78,"line":2693},[76,29583,28808],{"class":250},[76,29585,29586],{"class":305}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[76,29588,24751],{"class":250},[76,29590,29591,29593],{"class":78,"line":8020},[76,29592,29343],{"class":250},[76,29594,24751],{"class":250},[76,29596,29597],{"class":78,"line":8044},[76,29598,28814],{"class":305},[76,29600,29601],{"class":78,"line":8049},[76,29602,2472],{"emptyLinePlaceholder":125},[76,29604,29605,29607,29609,29611],{"class":78,"line":8055},[76,29606,26626],{"class":2035},[76,29608,29246],{"class":305},[76,29610,28805],{"class":305},[76,29612,24751],{"class":250},[76,29614,29615,29617,29619],{"class":78,"line":8082},[76,29616,29369],{"class":93},[76,29618,29372],{"class":305},[76,29620,24751],{"class":250},[76,29622,29623,29625,29628],{"class":78,"line":8087},[76,29624,28808],{"class":250},[76,29626,29627],{"class":305}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[76,29629,24751],{"class":250},[76,29631,29632,29634],{"class":78,"line":8093},[76,29633,29343],{"class":250},[76,29635,24751],{"class":250},[76,29637,29638],{"class":78,"line":8105},[76,29639,28814],{"class":305},[76,29641,29642],{"class":78,"line":8117},[76,29643,2472],{"emptyLinePlaceholder":125},[76,29645,29646,29648,29650,29652],{"class":78,"line":8129},[76,29647,26626],{"class":2035},[76,29649,29246],{"class":305},[76,29651,28805],{"class":305},[76,29653,24751],{"class":250},[76,29655,29656,29658,29660],{"class":78,"line":9788},[76,29657,29369],{"class":93},[76,29659,29372],{"class":305},[76,29661,24751],{"class":250},[76,29663,29664,29666,29669],{"class":78,"line":9813},[76,29665,28808],{"class":250},[76,29667,29668],{"class":305}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[76,29670,24751],{"class":250},[76,29672,29673,29675],{"class":78,"line":9836},[76,29674,29343],{"class":250},[76,29676,24751],{"class":250},[76,29678,29679],{"class":78,"line":9860},[76,29680,28814],{"class":305},[76,29682,29683],{"class":78,"line":9865},[76,29684,2472],{"emptyLinePlaceholder":125},[76,29686,29687,29689,29691,29693],{"class":78,"line":9870},[76,29688,26393],{"class":2035},[76,29690,29246],{"class":305},[76,29692,28805],{"class":305},[76,29694,24751],{"class":250},[76,29696,29697,29699,29701],{"class":78,"line":9875},[76,29698,29369],{"class":93},[76,29700,29372],{"class":305},[76,29702,24751],{"class":250},[76,29704,29705,29707,29710],{"class":78,"line":9884},[76,29706,28808],{"class":250},[76,29708,29709],{"class":305}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[76,29711,24751],{"class":250},[76,29713,29714,29716],{"class":78,"line":9889},[76,29715,29343],{"class":250},[76,29717,24751],{"class":250},[76,29719,29720],{"class":78,"line":9895},[76,29721,28814],{"class":305},[76,29723,29724],{"class":78,"line":9916},[76,29725,2472],{"emptyLinePlaceholder":125},[76,29727,29728,29731,29733,29735],{"class":78,"line":9922},[76,29729,29730],{"class":2035},"  docker",[76,29732,29246],{"class":305},[76,29734,28805],{"class":305},[76,29736,24751],{"class":250},[76,29738,29739,29741,29743],{"class":78,"line":9936},[76,29740,29369],{"class":93},[76,29742,29372],{"class":305},[76,29744,24751],{"class":250},[76,29746,29747,29749,29752],{"class":78,"line":9942},[76,29748,28808],{"class":250},[76,29750,29751],{"class":305}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[76,29753,24751],{"class":250},[76,29755,29756,29758],{"class":78,"line":9969},[76,29757,29343],{"class":250},[76,29759,24751],{"class":250},[76,29761,29762],{"class":78,"line":9978},[76,29763,28814],{"class":305},[14,29765,29766],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29768,29769],{},[56,29770],{"alt":58,"src":29771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29773,29774],{},[56,29775],{"alt":58,"src":29776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22070,29778,29780],{"id":29779},"_623清除构建缓存","6.2.3.清除构建缓存",[67,29782,29784],{"className":23894,"code":29783,"language":23896,"meta":58,"style":58},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[73,29785,29786,29791],{"__ignoreMap":58},[76,29787,29788],{"class":78,"line":79},[76,29789,29790],{"class":82},"# 清理BuildKit构建缓存\n",[76,29792,29793,29795,29798,29801],{"class":78,"line":86},[76,29794,26626],{"class":2035},[76,29796,29797],{"class":305}," builder",[76,29799,29800],{"class":305}," prune",[76,29802,29803],{"class":250}," -f\n",[14,29805,29806],{},[56,29807],{"alt":58,"src":29808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[169,29810,29812],{"id":29811},"_63补充","6.3.补充",[22070,29814,29816],{"id":29815},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29818,29819],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29821,29822],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29824,29825],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[67,29827,29829],{"className":23894,"code":29828,"language":23896,"meta":58,"style":58},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[73,29830,29831,29838],{"__ignoreMap":58},[76,29832,29833,29835],{"class":78,"line":79},[76,29834,27443],{"class":2035},[76,29836,29837],{"class":305}," nginx\n",[76,29839,29840,29842,29845,29848,29850],{"class":78,"line":86},[76,29841,28628],{"class":2035},[76,29843,29844],{"class":305}," echo",[76,29846,29847],{"class":305}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[76,29849,26295],{"class":89},[76,29851,29852],{"class":305}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29854,29855],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29857,29858],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[67,29860,29862],{"className":23894,"code":29861,"language":23896,"meta":58,"style":58},"docker build -t nginx:tuling .\n",[73,29863,29864],{"__ignoreMap":58},[76,29865,29866,29868,29870,29872,29875],{"class":78,"line":79},[76,29867,26626],{"class":2035},[76,29869,28805],{"class":305},[76,29871,28808],{"class":250},[76,29873,29874],{"class":305}," nginx:tuling",[76,29876,28814],{"class":305},[14,29878,29879],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29881,29882],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[67,29884,29886],{"className":23894,"code":29885,"language":23896,"meta":58,"style":58},"docker run -d -p 92:80 nginx:tuling\n",[73,29887,29888],{"__ignoreMap":58},[76,29889,29890,29892,29894,29897,29899,29902],{"class":78,"line":79},[76,29891,26626],{"class":2035},[76,29893,27303],{"class":305},[76,29895,29896],{"class":250}," -d",[76,29898,29289],{"class":250},[76,29900,29901],{"class":305}," 92:80",[76,29903,29904],{"class":305}," nginx:tuling\n",[14,29906,29907,29908],{},"4、访问 ",[439,29909,29912],{"href":29910,"rel":29911},"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",[23937],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29914,29915],{},[56,29916],{"alt":58,"src":29917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29919,29920],{},[56,29921],{"alt":58,"src":29922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22070,29924,29926],{"id":29925},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29928,29929],{},"只需要知道大体流程即可",[14,29931,29932],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29934,29935],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29937,29938],{},"2、在Dockerfile中添加以下内容",[67,29940,29942],{"className":26164,"code":29941,"language":26166,"meta":58,"style":58},"# 基于哪个镜像\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",[73,29943,29944,29949,29954,29959,29964,29969,29974,29979],{"__ignoreMap":58},[76,29945,29946],{"class":78,"line":79},[76,29947,29948],{},"# 基于哪个镜像\n",[76,29950,29951],{"class":78,"line":86},[76,29952,29953],{},"From java:8\n",[76,29955,29956],{"class":78,"line":97},[76,29957,29958],{},"# 复制文件到容器\n",[76,29960,29961],{"class":78,"line":103},[76,29962,29963],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[76,29965,29966],{"class":78,"line":1273},[76,29967,29968],{},"# 声明需要暴露的端口\n",[76,29970,29971],{"class":78,"line":1287},[76,29972,29973],{},"EXPOSE 8877\n",[76,29975,29976],{"class":78,"line":1293},[76,29977,29978],{},"# 配置容器启动后执行的命令\n",[76,29980,29981],{"class":78,"line":1384},[76,29982,29983],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29985,29986],{},"3、使用docker build命令构建镜像",[67,29988,29990],{"className":23894,"code":29989,"language":23896,"meta":58,"style":58},"docker build -t tulingmall-member:0.0.5 .\n",[73,29991,29992],{"__ignoreMap":58},[76,29993,29994,29996,29998,30000,30003],{"class":78,"line":79},[76,29995,26626],{"class":2035},[76,29997,28805],{"class":305},[76,29999,28808],{"class":250},[76,30001,30002],{"class":305}," tulingmall-member:0.0.5",[76,30004,28814],{"class":305},[14,30006,30007],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30009,30010],{},[56,30011],{"alt":58,"src":30012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30014,30015],{},"4、启动镜像，加-d可在后台启动",[67,30017,30019],{"className":23894,"code":30018,"language":23896,"meta":58,"style":58},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[73,30020,30021],{"__ignoreMap":58},[76,30022,30023,30025,30027,30029,30031,30034],{"class":78,"line":79},[76,30024,26626],{"class":2035},[76,30026,27303],{"class":305},[76,30028,29896],{"class":250},[76,30030,29289],{"class":250},[76,30032,30033],{"class":305}," 8877:8877",[76,30035,30036],{"class":305}," tulingmall-member:0.0.5\n",[14,30038,30039],{},"加上JVM参数：",[67,30041,30043],{"className":23894,"code":30042,"language":23896,"meta":58,"style":58},"# --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",[73,30044,30045,30050,30065,30075,30084,30091],{"__ignoreMap":58},[76,30046,30047],{"class":78,"line":79},[76,30048,30049],{"class":82},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[76,30051,30052,30054,30056,30059,30061,30063],{"class":78,"line":86},[76,30053,26626],{"class":2035},[76,30055,27303],{"class":305},[76,30057,30058],{"class":250},"  -d",[76,30060,29289],{"class":250},[76,30062,30033],{"class":305},[76,30064,24751],{"class":250},[76,30066,30067,30069,30072],{"class":78,"line":97},[76,30068,28201],{"class":93},[76,30070,30071],{"class":305},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[76,30073,30074],{"class":250},"  \\\n",[76,30076,30077,30079,30082],{"class":78,"line":103},[76,30078,28201],{"class":93},[76,30080,30081],{"class":305},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[76,30083,30074],{"class":250},[76,30085,30086,30089],{"class":78,"line":1273},[76,30087,30088],{"class":93},"--cap-add=SYS_PTRACE  ",[76,30090,26248],{"class":250},[76,30092,30093],{"class":78,"line":1287},[76,30094,30095],{"class":93},"tulingmall-member:0.0.5\n",[14,30097,30098],{},"5、访问会员服务接口",[14,30100,30101],{},[56,30102],{"alt":58,"src":30103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22070,30105,30107],{"id":30106},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30109,30110],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30112,30113,30114],{},"阿里云docker镜像仓库：",[439,30115,30116],{"href":30116,"rel":30117},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23937],[14,30119,30120],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30122,30123],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30125,30126],{},[56,30127],{"alt":58,"src":30128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30130,30131],{},"要把镜像推送到镜像仓库",[67,30133,30135],{"className":23894,"code":30134,"language":23896,"meta":58,"style":58},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[73,30136,30137],{"__ignoreMap":58},[76,30138,30139,30141,30143,30145],{"class":78,"line":79},[76,30140,26626],{"class":2035},[76,30142,28970],{"class":305},[76,30144,30002],{"class":305},[76,30146,30147],{"class":305}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30149,30150],{},"最后将镜像推送到远程仓库",[67,30152,30154],{"className":23894,"code":30153,"language":23896,"meta":58,"style":58},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[73,30155,30156],{"__ignoreMap":58},[76,30157,30158,30160,30162],{"class":78,"line":79},[76,30159,26626],{"class":2035},[76,30161,29089],{"class":305},[76,30163,30147],{"class":305},[117,30165,30166],{},"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":58,"searchDepth":86,"depth":86,"links":30168},[30169,30170,30171],{"id":28556,"depth":97,"text":28557},{"id":28785,"depth":97,"text":28786},{"id":29811,"depth":97,"text":29812},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28548,"description":58},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30178,"title":30179,"body":30180,"description":58,"extension":123,"meta":30323,"navigation":125,"path":30324,"seo":30325,"stem":30326,"__hash__":30327},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30181,"toc":30321},[30182,30185,30190,30195,30198,30203,30208,30211,30216,30221,30224,30229,30232,30235,30238,30241,30244,30247,30267,30289,30292,30295,30315,30318],[10,30183,30179],{"id":30184},"_7vscode远程开发",[152,30186,30187],{},[155,30188,30189],{},"插件1：微软Docker工具",[14,30191,30192],{},[56,30193],{"alt":58,"src":30194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30196,30197],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30199,30200],{},[56,30201],{"alt":58,"src":30202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[152,30204,30205],{"start":86},[155,30206,30207],{},"插件2：微软Docker远程开发工具",[14,30209,30210],{},"下面这是远程开发的插件。",[14,30212,30213],{},[56,30214],{"alt":58,"src":30215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30217,30218],{},[56,30219],{"alt":58,"src":30220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30222,30223],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30225,30226],{},[56,30227],{"alt":58,"src":30228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30230,30231],{},"安装完拓展之后，vscode进行链接：",[14,30233,30234],{},"1.按ctrl+shift+p",[14,30236,30237],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30239,30240],{},"3.选择目前运行的容器",[14,30242,30243],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30245,30246],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[67,30248,30250],{"className":23894,"code":30249,"language":23896,"meta":58,"style":58},"docker run -v 主机目录:容器目录 image-name\n",[73,30251,30252],{"__ignoreMap":58},[76,30253,30254,30256,30258,30261,30264],{"class":78,"line":79},[76,30255,26626],{"class":2035},[76,30257,27303],{"class":305},[76,30259,30260],{"class":250}," -v",[76,30262,30263],{"class":305}," 主机目录:容器目录",[76,30265,30266],{"class":305}," image-name\n",[67,30268,30270],{"className":23894,"code":30269,"language":23896,"meta":58,"style":58},"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",[73,30271,30272],{"__ignoreMap":58},[76,30273,30274,30276,30278,30281,30283,30286],{"class":78,"line":79},[76,30275,26626],{"class":2035},[76,30277,27303],{"class":305},[76,30279,30280],{"class":250}," -it",[76,30282,30260],{"class":250},[76,30284,30285],{"class":305}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[76,30287,30288],{"class":305}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30290,30291],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30293,30294],{},"查看挂载情况：",[67,30296,30298],{"className":23894,"code":30297,"language":23896,"meta":58,"style":58},"mount | grep -i project\n",[73,30299,30300],{"__ignoreMap":58},[76,30301,30302,30305,30307,30310,30312],{"class":78,"line":79},[76,30303,30304],{"class":2035},"mount",[76,30306,25182],{"class":89},[76,30308,30309],{"class":2035}," grep",[76,30311,26503],{"class":250},[76,30313,30314],{"class":305}," project\n",[14,30316,30317],{},"也可以通过ls来进行查看",[117,30319,30320],{},"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":58,"searchDepth":86,"depth":86,"links":30322},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30179,"description":58},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30329,"title":30330,"body":30331,"description":122,"extension":123,"meta":30335,"navigation":125,"path":30337,"seo":30338,"stem":30339,"__hash__":30340},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30332,"toc":30333},[],{"title":58,"searchDepth":86,"depth":86,"links":30334},[],{"category":30336},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30330,"description":122},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30342,"title":30343,"body":30344,"description":122,"extension":123,"meta":30348,"navigation":125,"path":30349,"seo":30350,"stem":30351,"__hash__":30352},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30345,"toc":30346},[],{"title":58,"searchDepth":86,"depth":86,"links":30347},[],{"category":30336},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30343,"description":122},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30354,"title":30355,"body":30356,"description":122,"extension":123,"meta":30646,"navigation":125,"path":30647,"seo":30648,"stem":30649,"__hash__":30650},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30357,"toc":30644},[30358,30361,30369,30384,30389,30440,30443,30449,30633,30638,30641],[10,30359,30355],{"id":30360},"_1验证深度学习环境",[14,30362,30363,30364],{},"关于环境的安装，看",[439,30365,30368],{"href":30366,"rel":30367},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23937],"Pytorch-->深度学习",[14,30370,30371,30372,30375,30376,30379,30380,30383],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[73,30373,30374],{},"pytorch-cuda=12.4"," 是一个“ ",[350,30377,30378],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[350,30381,30382],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30385,30386],{},[56,30387],{"alt":58,"src":30388},"\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",[67,30390,30392],{"className":23894,"code":30391,"language":23896,"meta":58,"style":58},"# 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",[73,30393,30394,30399],{"__ignoreMap":58},[76,30395,30396],{"class":78,"line":79},[76,30397,30398],{"class":82},"# CUDA 12.4\n",[76,30400,30401,30404,30406,30409,30412,30415,30418,30421,30423,30426,30429,30432,30435,30437],{"class":78,"line":86},[76,30402,30403],{"class":2035},"conda",[76,30405,23906],{"class":305},[76,30407,30408],{"class":305}," pytorch==",[76,30410,30411],{"class":250},"2.5.1",[76,30413,30414],{"class":305}," torchvision==",[76,30416,30417],{"class":250},"0.20.1",[76,30419,30420],{"class":305}," torchaudio==",[76,30422,30411],{"class":250},[76,30424,30425],{"class":305}," pytorch-cuda=",[76,30427,30428],{"class":250},"12.4",[76,30430,30431],{"class":250}," -c",[76,30433,30434],{"class":305}," pytorch",[76,30436,30431],{"class":250},[76,30438,30439],{"class":305}," nvidia\n",[14,30441,30442],{},"）：",[14,30444,30445],{},[439,30446,30447],{"href":30447,"rel":30448},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23937],[67,30450,30452],{"className":69,"code":30451,"language":71,"meta":58,"style":58},"# 对深度学习环境进行测试\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",[73,30453,30454,30459,30466,30471,30481,30497,30502,30512,30549,30556,30568,30584,30589,30599,30611,30621],{"__ignoreMap":58},[76,30455,30456],{"class":78,"line":79},[76,30457,30458],{"class":82},"# 对深度学习环境进行测试\n",[76,30460,30461,30463],{"class":78,"line":86},[76,30462,90],{"class":89},[76,30464,30465],{"class":93}," torch\n",[76,30467,30468],{"class":78,"line":97},[76,30469,30470],{"class":82},"# 查看cuda是否被激活\n",[76,30472,30473,30476,30478],{"class":78,"line":103},[76,30474,30475],{"class":93},"flag",[76,30477,247],{"class":89},[76,30479,30480],{"class":93},"torch.cuda.is_available()\n",[76,30482,30483,30486,30488,30491,30494],{"class":78,"line":1273},[76,30484,30485],{"class":250},"print",[76,30487,202],{"class":93},[76,30489,30490],{"class":305},"\"cuda:\"",[76,30492,30493],{"class":93},", flag)   ",[76,30495,30496],{"class":82},"#返回true的话说明被激活\n",[76,30498,30499],{"class":78,"line":1287},[76,30500,30501],{"class":82},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[76,30503,30504,30507,30509],{"class":78,"line":1293},[76,30505,30506],{"class":93},"ngpu",[76,30508,247],{"class":89},[76,30510,30511],{"class":250},"1\n",[76,30513,30514,30517,30519,30522,30525,30527,30530,30533,30536,30538,30540,30542,30544,30547],{"class":78,"line":1384},[76,30515,30516],{"class":93},"device",[76,30518,247],{"class":89},[76,30520,30521],{"class":93},"torch.device(",[76,30523,30524],{"class":305},"\"cuda:0\"",[76,30526,1776],{"class":89},[76,30528,30529],{"class":93},"(torch.cuda.is_available() ",[76,30531,30532],{"class":89},"and",[76,30534,30535],{"class":93}," ngpu",[76,30537,1159],{"class":89},[76,30539,392],{"class":250},[76,30541,13786],{"class":93},[76,30543,1773],{"class":89},[76,30545,30546],{"class":305}," \"cpu\"",[76,30548,208],{"class":93},[76,30550,30551,30553],{"class":78,"line":1390},[76,30552,30485],{"class":250},[76,30554,30555],{"class":93},"(device)\n",[76,30557,30558,30560,30563,30565],{"class":78,"line":1402},[76,30559,30485],{"class":250},[76,30561,30562],{"class":93},"(torch.cuda.get_device_name(",[76,30564,392],{"class":250},[76,30566,30567],{"class":93},"))\n",[76,30569,30570,30572,30575,30577,30579,30581],{"class":78,"line":1684},[76,30571,30485],{"class":250},[76,30573,30574],{"class":93},"(torch.rand(",[76,30576,272],{"class":250},[76,30578,578],{"class":93},[76,30580,272],{"class":250},[76,30582,30583],{"class":93},").cuda())\n",[76,30585,30586],{"class":78,"line":1689},[76,30587,30588],{"class":82},"# 查看cuda和cudnn的版本\n",[76,30590,30591,30594,30596],{"class":78,"line":1695},[76,30592,30593],{"class":93},"cuda_version",[76,30595,247],{"class":89},[76,30597,30598],{"class":93},"torch.version.cuda\n",[76,30600,30601,30603,30605,30608],{"class":78,"line":1700},[76,30602,30485],{"class":250},[76,30604,202],{"class":93},[76,30606,30607],{"class":305},"\"cuda version\"",[76,30609,30610],{"class":93},",cuda_version)\n",[76,30612,30613,30616,30618],{"class":78,"line":1714},[76,30614,30615],{"class":93},"cudnn_version",[76,30617,247],{"class":89},[76,30619,30620],{"class":93},"torch.backends.cudnn.version()\n",[76,30622,30623,30625,30627,30630],{"class":78,"line":1719},[76,30624,30485],{"class":250},[76,30626,202],{"class":93},[76,30628,30629],{"class":305},"\"cudnn version\"",[76,30631,30632],{"class":93},",cudnn_version)\n",[14,30634,30635],{},[56,30636],{"alt":58,"src":30637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,30639,30640],{},"cuda:0 指的是一块显卡",[117,30642,30643],{},"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":58,"searchDepth":86,"depth":86,"links":30645},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30355,"description":122},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30652,"title":30653,"body":30654,"description":122,"extension":123,"meta":50458,"navigation":125,"path":50459,"seo":50460,"stem":50461,"__hash__":50462},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30655,"toc":50452},[30656,30659,30663,30667,30670,30675,30680,30683,30688,30693,30698,30701,30705,30710,30714,30719,30722,30727,30730,30733,30736,30739,30744,30747,30752,30757,30762,30767,30770,30774,30777,30782,31386,31391,31394,31399,31402,31405,31869,31872,31875,31878,31881,33932,33935,33940,33945,34740,34743,34748,35526,35530,37189,37193,37907,37911,37915,37920,37925,37930,37933,37938,37943,37948,37953,37958,37962,37967,39249,39254,39257,39260,39263,39418,39421,39424,40640,40645,41340,41344,41348,41353,41358,41361,41366,41371,41376,41381,41386,41391,41396,41401,41406,41411,41416,41421,41426,41431,41436,41441,41446,41451,41456,41461,41466,41471,41476,41481,41486,41491,41496,41501,41506,41511,41515,41519,41522,43000,43004,44651,44655,45349,45353,45356,45359,45903,45906,45910,45913,47310,47314,47317,47895,49682,49686,49689,50449],[10,30657,30653],{"id":30658},"_2经典神经网络",[169,30660,30662],{"id":30661},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22070,30664,30666],{"id":30665},"_211原理介绍","2.1.1.原理介绍",[14,30668,30669],{},"LeNet-5",[152,30671,30672],{},[155,30673,30674],{},"原理",[14,30676,30677],{},[56,30678],{"alt":58,"src":30679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,30681,30682],{},"B是batch批次；C是channel通道",[152,30684,30685],{"start":86},[155,30686,30687],{},"网络参数详细",[14,30689,30690],{},[56,30691],{"alt":58,"src":30692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[14,30694,30695],{},[56,30696],{"alt":58,"src":30697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30699,30700],{},"AlexNet",[152,30702,30703],{},[155,30704,30674],{},[14,30706,30707],{},[56,30708],{"alt":58,"src":30709},"\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",[152,30711,30712],{"start":86},[155,30713,30687],{},[14,30715,30716],{},[56,30717],{"alt":58,"src":30718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,30720,30721],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30723,30724],{},[56,30725],{"alt":58,"src":30726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30728,30729],{},"数据处理中的图像增强操作:",[14,30731,30732],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30734,30735],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30737,30738],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30740,30741],{},[56,30742],{"alt":58,"src":30743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,30745,30746],{},"提升网络精确度的方法：LRN正则化",[14,30748,30749],{},[56,30750],{"alt":58,"src":30751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,30753,30754],{},[56,30755],{"alt":58,"src":30756},"\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",[152,30758,30759],{"start":97},[155,30760,30761],{},"AlexNet的总结",[14,30763,30764],{},[56,30765],{"alt":58,"src":30766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,30768,30769],{},"比LeNet模型要深一丢丢",[22070,30771,30773],{"id":30772},"_212代码实现","2.1.2.代码实现",[14,30775,30776],{},"（1）LeNet",[152,30778,30779],{},[155,30780,30781],{},"模型搭建",[67,30783,30785],{"className":69,"code":30784,"language":71,"meta":58,"style":58},"# 导入库\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",[73,30786,30787,30792,30798,30803,30816,30821,30833,30837,30857,30862,30867,30878,30883,30902,30906,30911,30960,30972,30977,31006,31041,31068,31073,31085,31090,31110,31129,31148,31152,31157,31167,31184,31195,31210,31221,31232,31247,31262,31273,31280,31284,31298,31303,31326,31331,31336,31341,31345,31350,31355,31365],{"__ignoreMap":58},[76,30788,30789],{"class":78,"line":79},[76,30790,30791],{"class":82},"# 导入库\n",[76,30793,30794,30796],{"class":78,"line":86},[76,30795,90],{"class":89},[76,30797,30465],{"class":93},[76,30799,30800],{"class":78,"line":97},[76,30801,30802],{"class":82},"# 导入神经网络层\n",[76,30804,30805,30808,30811,30813],{"class":78,"line":103},[76,30806,30807],{"class":89},"from",[76,30809,30810],{"class":93}," torch ",[76,30812,90],{"class":89},[76,30814,30815],{"class":93}," nn\n",[76,30817,30818],{"class":78,"line":1273},[76,30819,30820],{"class":82},"# 导入展示神经网络参数的包\n",[76,30822,30823,30825,30828,30830],{"class":78,"line":1287},[76,30824,30807],{"class":89},[76,30826,30827],{"class":93}," torchsummary ",[76,30829,90],{"class":89},[76,30831,30832],{"class":93}," summary\n",[76,30834,30835],{"class":78,"line":1293},[76,30836,2472],{"emptyLinePlaceholder":125},[76,30838,30839,30841,30844,30846,30849,30851,30854],{"class":78,"line":1384},[76,30840,14766],{"class":89},[76,30842,30843],{"class":2035}," LeNet",[76,30845,202],{"class":93},[76,30847,30848],{"class":2035},"nn",[76,30850,757],{"class":93},[76,30852,30853],{"class":2035},"Module",[76,30855,30856],{"class":93},"):\n",[76,30858,30859],{"class":78,"line":1390},[76,30860,30861],{"class":82},"    # 模型初始化:\n",[76,30863,30864],{"class":78,"line":1402},[76,30865,30866],{"class":82},"    # 定义一些网络层和激活函数\n",[76,30868,30869,30872,30875],{"class":78,"line":1684},[76,30870,30871],{"class":89},"    def",[76,30873,30874],{"class":250}," __init__",[76,30876,30877],{"class":93},"(self):\n",[76,30879,30880],{"class":78,"line":1689},[76,30881,30882],{"class":82},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[76,30884,30885,30888,30891,30894,30897,30900],{"class":78,"line":1695},[76,30886,30887],{"class":250},"        super",[76,30889,30890],{"class":93},"(LeNet,",[76,30892,30893],{"class":250},"self",[76,30895,30896],{"class":93},").",[76,30898,30899],{"class":250},"__init__",[76,30901,2048],{"class":93},[76,30903,30904],{"class":78,"line":1700},[76,30905,2472],{"emptyLinePlaceholder":125},[76,30907,30908],{"class":78,"line":1714},[76,30909,30910],{"class":82},"        # 定义网络层\n",[76,30912,30913,30916,30919,30921,30924,30927,30929,30931,30933,30936,30938,30940,30942,30945,30947,30949,30951,30954,30956,30958],{"class":78,"line":1719},[76,30914,30915],{"class":250},"        self",[76,30917,30918],{"class":93},".c1",[76,30920,247],{"class":89},[76,30922,30923],{"class":93},"nn.Conv2d(",[76,30925,30926],{"class":5288},"in_channels",[76,30928,247],{"class":89},[76,30930,418],{"class":250},[76,30932,578],{"class":93},[76,30934,30935],{"class":5288},"out_channels",[76,30937,247],{"class":89},[76,30939,544],{"class":250},[76,30941,578],{"class":93},[76,30943,30944],{"class":5288},"kernel_size",[76,30946,247],{"class":89},[76,30948,520],{"class":250},[76,30950,578],{"class":93},[76,30952,30953],{"class":5288},"padding",[76,30955,247],{"class":89},[76,30957,278],{"class":250},[76,30959,208],{"class":93},[76,30961,30962,30964,30967,30969],{"class":78,"line":1725},[76,30963,30915],{"class":250},[76,30965,30966],{"class":93},".sig",[76,30968,247],{"class":89},[76,30970,30971],{"class":93},"nn.Sigmoid()\n",[76,30973,30974],{"class":78,"line":1746},[76,30975,30976],{"class":82},"        # 定义池化\n",[76,30978,30979,30981,30984,30986,30989,30991,30993,30995,30997,31000,31002,31004],{"class":78,"line":1751},[76,30980,30915],{"class":250},[76,30982,30983],{"class":93},".s2",[76,30985,247],{"class":89},[76,30987,30988],{"class":93},"nn.AvgPool2d(",[76,30990,30944],{"class":5288},[76,30992,247],{"class":89},[76,30994,278],{"class":250},[76,30996,578],{"class":93},[76,30998,30999],{"class":5288},"stride",[76,31001,247],{"class":89},[76,31003,278],{"class":250},[76,31005,208],{"class":93},[76,31007,31008,31010,31013,31015,31017,31019,31021,31023,31025,31027,31029,31031,31033,31035,31037,31039],{"class":78,"line":1765},[76,31009,30915],{"class":250},[76,31011,31012],{"class":93},".c3",[76,31014,247],{"class":89},[76,31016,30923],{"class":93},[76,31018,30926],{"class":5288},[76,31020,247],{"class":89},[76,31022,544],{"class":250},[76,31024,578],{"class":93},[76,31026,30935],{"class":5288},[76,31028,247],{"class":89},[76,31030,800],{"class":250},[76,31032,578],{"class":93},[76,31034,30944],{"class":5288},[76,31036,247],{"class":89},[76,31038,520],{"class":250},[76,31040,208],{"class":93},[76,31042,31043,31045,31048,31050,31052,31054,31056,31058,31060,31062,31064,31066],{"class":78,"line":1770},[76,31044,30915],{"class":250},[76,31046,31047],{"class":93},".s4",[76,31049,247],{"class":89},[76,31051,30988],{"class":93},[76,31053,30944],{"class":5288},[76,31055,247],{"class":89},[76,31057,278],{"class":250},[76,31059,578],{"class":93},[76,31061,30999],{"class":5288},[76,31063,247],{"class":89},[76,31065,278],{"class":250},[76,31067,208],{"class":93},[76,31069,31070],{"class":78,"line":1799},[76,31071,31072],{"class":82},"        # 定义平展层\n",[76,31074,31075,31077,31080,31082],{"class":78,"line":1804},[76,31076,30915],{"class":250},[76,31078,31079],{"class":93},".flatten",[76,31081,247],{"class":89},[76,31083,31084],{"class":93},"nn.Flatten()\n",[76,31086,31087],{"class":78,"line":1821},[76,31088,31089],{"class":82},"        # 定义全连接层\n",[76,31091,31092,31094,31097,31099,31102,31104,31106,31108],{"class":78,"line":1826},[76,31093,30915],{"class":250},[76,31095,31096],{"class":93},".f5",[76,31098,247],{"class":89},[76,31100,31101],{"class":93},"nn.Linear(",[76,31103,4059],{"class":250},[76,31105,578],{"class":93},[76,31107,1016],{"class":250},[76,31109,208],{"class":93},[76,31111,31112,31114,31117,31119,31121,31123,31125,31127],{"class":78,"line":1831},[76,31113,30915],{"class":250},[76,31115,31116],{"class":93},".f6",[76,31118,247],{"class":89},[76,31120,31101],{"class":93},[76,31122,1016],{"class":250},[76,31124,578],{"class":93},[76,31126,910],{"class":250},[76,31128,208],{"class":93},[76,31130,31131,31133,31136,31138,31140,31142,31144,31146],{"class":78,"line":1836},[76,31132,30915],{"class":250},[76,31134,31135],{"class":93},".f7",[76,31137,247],{"class":89},[76,31139,31101],{"class":93},[76,31141,910],{"class":250},[76,31143,578],{"class":93},[76,31145,646],{"class":250},[76,31147,208],{"class":93},[76,31149,31150],{"class":78,"line":1850},[76,31151,2472],{"emptyLinePlaceholder":125},[76,31153,31154],{"class":78,"line":1855},[76,31155,31156],{"class":82},"    # 写工具->写前向传播\n",[76,31158,31159,31161,31164],{"class":78,"line":2649},[76,31160,30871],{"class":89},[76,31162,31163],{"class":2035}," forward",[76,31165,31166],{"class":93},"(self,x):\n",[76,31168,31169,31172,31174,31176,31179,31181],{"class":78,"line":2663},[76,31170,31171],{"class":93},"        x",[76,31173,247],{"class":89},[76,31175,30893],{"class":250},[76,31177,31178],{"class":93},".sig(",[76,31180,30893],{"class":250},[76,31182,31183],{"class":93},".c1(x))\n",[76,31185,31186,31188,31190,31192],{"class":78,"line":2671},[76,31187,31171],{"class":93},[76,31189,247],{"class":89},[76,31191,30893],{"class":250},[76,31193,31194],{"class":93},".s2(x)\n",[76,31196,31197,31199,31201,31203,31205,31207],{"class":78,"line":2676},[76,31198,31171],{"class":93},[76,31200,247],{"class":89},[76,31202,30893],{"class":250},[76,31204,31178],{"class":93},[76,31206,30893],{"class":250},[76,31208,31209],{"class":93},".c3(x))\n",[76,31211,31212,31214,31216,31218],{"class":78,"line":2682},[76,31213,31171],{"class":93},[76,31215,247],{"class":89},[76,31217,30893],{"class":250},[76,31219,31220],{"class":93},".s4(x)\n",[76,31222,31223,31225,31227,31229],{"class":78,"line":2688},[76,31224,31171],{"class":93},[76,31226,247],{"class":89},[76,31228,30893],{"class":250},[76,31230,31231],{"class":93},".flatten(x)\n",[76,31233,31234,31236,31238,31240,31242,31244],{"class":78,"line":2693},[76,31235,31171],{"class":93},[76,31237,247],{"class":89},[76,31239,30893],{"class":250},[76,31241,31178],{"class":93},[76,31243,30893],{"class":250},[76,31245,31246],{"class":93},".f5(x))\n",[76,31248,31249,31251,31253,31255,31257,31259],{"class":78,"line":8020},[76,31250,31171],{"class":93},[76,31252,247],{"class":89},[76,31254,30893],{"class":250},[76,31256,31178],{"class":93},[76,31258,30893],{"class":250},[76,31260,31261],{"class":93},".f6(x))\n",[76,31263,31264,31266,31268,31270],{"class":78,"line":8044},[76,31265,31171],{"class":93},[76,31267,247],{"class":89},[76,31269,30893],{"class":250},[76,31271,31272],{"class":93},".f7(x)\n",[76,31274,31275,31277],{"class":78,"line":8049},[76,31276,14824],{"class":89},[76,31278,31279],{"class":93}," x\n",[76,31281,31282],{"class":78,"line":8055},[76,31283,2472],{"emptyLinePlaceholder":125},[76,31285,31286,31288,31291,31293,31296],{"class":78,"line":8082},[76,31287,1603],{"class":89},[76,31289,31290],{"class":250}," __name__",[76,31292,3021],{"class":89},[76,31294,31295],{"class":305},"\"__main__\"",[76,31297,3811],{"class":93},[76,31299,31300],{"class":78,"line":8087},[76,31301,31302],{"class":82},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[76,31304,31305,31308,31310,31312,31315,31317,31320,31322,31324],{"class":78,"line":8093},[76,31306,31307],{"class":93},"    device",[76,31309,247],{"class":89},[76,31311,30521],{"class":93},[76,31313,31314],{"class":305},"\"cuda\"",[76,31316,1776],{"class":89},[76,31318,31319],{"class":93}," torch.cuda.is_available() ",[76,31321,1773],{"class":89},[76,31323,30546],{"class":305},[76,31325,208],{"class":93},[76,31327,31328],{"class":78,"line":8105},[76,31329,31330],{"class":82},"    # 如果就是想指定用cpu用下方代码:\n",[76,31332,31333],{"class":78,"line":8117},[76,31334,31335],{"class":82},"    # device=\"cpu\"\n",[76,31337,31338],{"class":78,"line":8129},[76,31339,31340],{"class":82},"    # print(device)\n",[76,31342,31343],{"class":78,"line":9788},[76,31344,2472],{"emptyLinePlaceholder":125},[76,31346,31347],{"class":78,"line":9813},[76,31348,31349],{"class":82},"    # 实例化模型\n",[76,31351,31352],{"class":78,"line":9836},[76,31353,31354],{"class":82},"    # 将模型放到设备中去运行\n",[76,31356,31357,31360,31362],{"class":78,"line":9860},[76,31358,31359],{"class":93},"    model",[76,31361,247],{"class":89},[76,31363,31364],{"class":93},"LeNet().to(device)\n",[76,31366,31367,31370,31373,31375,31377,31379,31381,31383],{"class":78,"line":9865},[76,31368,31369],{"class":250},"    print",[76,31371,31372],{"class":93},"(summary(model,(",[76,31374,418],{"class":250},[76,31376,578],{"class":93},[76,31378,1100],{"class":250},[76,31380,578],{"class":93},[76,31382,1100],{"class":250},[76,31384,31385],{"class":93},")))\n",[14,31387,31388],{},[56,31389],{"alt":58,"src":31390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,31392,31393],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[152,31395,31396],{"start":86},[155,31397,31398],{},"训练",[14,31400,31401],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31403,31404],{},"在训练之前可以将数据展示看一下",[67,31406,31408],{"className":69,"code":31407,"language":71,"meta":58,"style":58},"# 建立画图的函数，用于展示数据\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",[73,31409,31410,31415,31420,31432,31444,31457,31462,31474,31479,31491,31496,31508,31512,31516,31537,31549,31554,31575,31586,31590,31595,31613,31624,31629,31640,31645,31656,31660,31665,31680,31693,31698,31703,31716,31729,31742,31747,31751,31756,31776,31793,31813,31826,31839,31849,31864],{"__ignoreMap":58},[76,31411,31412],{"class":78,"line":79},[76,31413,31414],{"class":82},"# 建立画图的函数，用于展示数据\n",[76,31416,31417],{"class":78,"line":86},[76,31418,31419],{"class":82},"# torchvision中包含很多内置的数据集\n",[76,31421,31422,31424,31427,31429],{"class":78,"line":97},[76,31423,30807],{"class":89},[76,31425,31426],{"class":93}," sklearn.externals.array_api_compat.torch ",[76,31428,90],{"class":89},[76,31430,31431],{"class":93}," squeeze\n",[76,31433,31434,31436,31439,31441],{"class":78,"line":103},[76,31435,30807],{"class":89},[76,31437,31438],{"class":93}," torchvision.datasets ",[76,31440,90],{"class":89},[76,31442,31443],{"class":93}," FashionMNIST\n",[76,31445,31446,31448,31451,31454],{"class":78,"line":1273},[76,31447,90],{"class":89},[76,31449,31450],{"class":93}," numpy ",[76,31452,31453],{"class":89},"as",[76,31455,31456],{"class":93}," np\n",[76,31458,31459],{"class":78,"line":1287},[76,31460,31461],{"class":82},"# 引入处理数据集的包\n",[76,31463,31464,31466,31469,31471],{"class":78,"line":1293},[76,31465,30807],{"class":89},[76,31467,31468],{"class":93}," torchvision ",[76,31470,90],{"class":89},[76,31472,31473],{"class":93}," transforms\n",[76,31475,31476],{"class":78,"line":1384},[76,31477,31478],{"class":82},"# 从torch库中引入数据处理的包\n",[76,31480,31481,31483,31486,31488],{"class":78,"line":1390},[76,31482,90],{"class":89},[76,31484,31485],{"class":93}," torch.utils.data ",[76,31487,31453],{"class":89},[76,31489,31490],{"class":93}," Data\n",[76,31492,31493],{"class":78,"line":1402},[76,31494,31495],{"class":82},"# 导入画图的库\n",[76,31497,31498,31500,31503,31505],{"class":78,"line":1684},[76,31499,90],{"class":89},[76,31501,31502],{"class":93}," matplotlib.pyplot ",[76,31504,31453],{"class":89},[76,31506,31507],{"class":93}," plt\n",[76,31509,31510],{"class":78,"line":1689},[76,31511,2472],{"emptyLinePlaceholder":125},[76,31513,31514],{"class":78,"line":1695},[76,31515,2472],{"emptyLinePlaceholder":125},[76,31517,31518,31521,31523,31526,31529,31531,31534],{"class":78,"line":1700},[76,31519,31520],{"class":93},"train_data",[76,31522,247],{"class":89},[76,31524,31525],{"class":93},"FashionMNIST(",[76,31527,31528],{"class":5288},"root",[76,31530,247],{"class":89},[76,31532,31533],{"class":305},"'.\u002Fdata'",[76,31535,31536],{"class":93},",\n",[76,31538,31539,31542,31544,31547],{"class":78,"line":1714},[76,31540,31541],{"class":5288},"                        train",[76,31543,247],{"class":89},[76,31545,31546],{"class":250},"True",[76,31548,31536],{"class":93},[76,31550,31551],{"class":78,"line":1719},[76,31552,31553],{"class":82},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[76,31555,31556,31559,31561,31564,31567,31569,31572],{"class":78,"line":1725},[76,31557,31558],{"class":5288},"                        transform",[76,31560,247],{"class":89},[76,31562,31563],{"class":93},"transforms.Compose([transforms.Resize(",[76,31565,31566],{"class":5288},"size",[76,31568,247],{"class":89},[76,31570,31571],{"class":250},"224",[76,31573,31574],{"class":93},"),transforms.ToTensor()]),\n",[76,31576,31577,31580,31582,31584],{"class":78,"line":1746},[76,31578,31579],{"class":5288},"                        download",[76,31581,247],{"class":89},[76,31583,31546],{"class":250},[76,31585,208],{"class":93},[76,31587,31588],{"class":78,"line":1751},[76,31589,2472],{"emptyLinePlaceholder":125},[76,31591,31592],{"class":78,"line":1765},[76,31593,31594],{"class":82},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[76,31596,31597,31600,31602,31605,31608,31610],{"class":78,"line":1770},[76,31598,31599],{"class":93},"train_loader",[76,31601,247],{"class":89},[76,31603,31604],{"class":93},"Data.DataLoader(",[76,31606,31607],{"class":5288},"dataset",[76,31609,247],{"class":89},[76,31611,31612],{"class":93},"train_data,\n",[76,31614,31615,31618,31620,31622],{"class":78,"line":1799},[76,31616,31617],{"class":5288},"                             batch_size",[76,31619,247],{"class":89},[76,31621,404],{"class":250},[76,31623,31536],{"class":93},[76,31625,31626],{"class":78,"line":1804},[76,31627,31628],{"class":82},"                             # 数据是否打乱\n",[76,31630,31631,31634,31636,31638],{"class":78,"line":1821},[76,31632,31633],{"class":5288},"                             shuffle",[76,31635,247],{"class":89},[76,31637,31546],{"class":250},[76,31639,31536],{"class":93},[76,31641,31642],{"class":78,"line":1826},[76,31643,31644],{"class":82},"                             # 规定加载数据的进程\n",[76,31646,31647,31650,31652,31654],{"class":78,"line":1831},[76,31648,31649],{"class":5288},"                             num_workers",[76,31651,247],{"class":89},[76,31653,392],{"class":250},[76,31655,208],{"class":93},[76,31657,31658],{"class":78,"line":1836},[76,31659,2472],{"emptyLinePlaceholder":125},[76,31661,31662],{"class":78,"line":1850},[76,31663,31664],{"class":82},"# 获得一个batch的数据\n",[76,31666,31667,31669,31672,31674,31677],{"class":78,"line":1855},[76,31668,3097],{"class":89},[76,31670,31671],{"class":93}," step,(b_x,b_y) ",[76,31673,26116],{"class":89},[76,31675,31676],{"class":250}," enumerate",[76,31678,31679],{"class":93},"(train_loader):\n",[76,31681,31682,31684,31687,31689,31691],{"class":78,"line":2649},[76,31683,3173],{"class":89},[76,31685,31686],{"class":93}," step ",[76,31688,1159],{"class":89},[76,31690,4165],{"class":250},[76,31692,3811],{"class":93},[76,31694,31695],{"class":78,"line":2663},[76,31696,31697],{"class":89},"        break\n",[76,31699,31700],{"class":78,"line":2671},[76,31701,31702],{"class":82},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[76,31704,31705,31708,31710,31713],{"class":78,"line":2676},[76,31706,31707],{"class":93},"batch_x",[76,31709,247],{"class":89},[76,31711,31712],{"class":93},"b_x.squeeze().numpy()  ",[76,31714,31715],{"class":82},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[76,31717,31718,31721,31723,31726],{"class":78,"line":2682},[76,31719,31720],{"class":93},"batch_y",[76,31722,247],{"class":89},[76,31724,31725],{"class":93},"b_y.numpy()   ",[76,31727,31728],{"class":82},"#将张量转换成功numpy数组\n",[76,31730,31731,31734,31736,31739],{"class":78,"line":2688},[76,31732,31733],{"class":93},"class_label",[76,31735,247],{"class":89},[76,31737,31738],{"class":93},"train_data.classes  ",[76,31740,31741],{"class":82},"#训练集标签\n",[76,31743,31744],{"class":78,"line":2693},[76,31745,31746],{"class":82},"# print(class_label)\n",[76,31748,31749],{"class":78,"line":8020},[76,31750,2472],{"emptyLinePlaceholder":125},[76,31752,31753],{"class":78,"line":8044},[76,31754,31755],{"class":82},"# 可视化一个batch的图像\n",[76,31757,31758,31761,31764,31766,31768,31770,31772,31774],{"class":78,"line":8049},[76,31759,31760],{"class":93},"plt.figure(",[76,31762,31763],{"class":5288},"figsize",[76,31765,247],{"class":89},[76,31767,202],{"class":93},[76,31769,698],{"class":250},[76,31771,578],{"class":93},[76,31773,520],{"class":250},[76,31775,30567],{"class":93},[76,31777,31778,31780,31783,31785,31788,31790],{"class":78,"line":8055},[76,31779,3097],{"class":89},[76,31781,31782],{"class":93}," ii ",[76,31784,26116],{"class":89},[76,31786,31787],{"class":93}," np.arange(",[76,31789,7430],{"class":250},[76,31791,31792],{"class":93},"(batch_y)):\n",[76,31794,31795,31798,31800,31802,31804,31807,31809,31811],{"class":78,"line":8082},[76,31796,31797],{"class":93},"    plt.subplot(",[76,31799,494],{"class":250},[76,31801,578],{"class":93},[76,31803,800],{"class":250},[76,31805,31806],{"class":93},",ii ",[76,31808,681],{"class":89},[76,31810,25191],{"class":250},[76,31812,208],{"class":93},[76,31814,31815,31818,31821,31823],{"class":78,"line":8087},[76,31816,31817],{"class":93},"    plt.imshow(batch_x[ii,:,:],",[76,31819,31820],{"class":5288},"cmap",[76,31822,247],{"class":89},[76,31824,31825],{"class":93},"plt.cm.gray)\n",[76,31827,31828,31831,31833,31835,31837],{"class":78,"line":8093},[76,31829,31830],{"class":93},"    plt.title(class_label[batch_y[ii]],",[76,31832,31566],{"class":5288},[76,31834,247],{"class":89},[76,31836,646],{"class":250},[76,31838,208],{"class":93},[76,31840,31841,31844,31847],{"class":78,"line":8105},[76,31842,31843],{"class":93},"    plt.axis(",[76,31845,31846],{"class":305},"\"off\"",[76,31848,208],{"class":93},[76,31850,31851,31854,31857,31859,31862],{"class":78,"line":8117},[76,31852,31853],{"class":93},"    plt.subplots_adjust(",[76,31855,31856],{"class":5288},"wspace",[76,31858,247],{"class":89},[76,31860,31861],{"class":250},"0.05",[76,31863,208],{"class":93},[76,31865,31866],{"class":78,"line":8129},[76,31867,31868],{"class":93},"plt.show()\n",[14,31870,31871],{},"用matplotlib进行展示的过程可以后续再补",[14,31873,31874],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31876,31877],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31879,31880],{},"模型训练：",[67,31882,31884],{"className":69,"code":31883,"language":71,"meta":58,"style":58},"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",[73,31885,31886,31893,31900,31904,31916,31922,31933,31943,31953,31963,31973,31978,31990,32000,32004,32008,32013,32024,32037,32048,32065,32076,32115,32131,32143,32154,32159,32170,32186,32197,32208,32219,32226,32230,32235,32240,32244,32249,32259,32280,32284,32288,32293,32298,32303,32323,32327,32332,32342,32346,32351,32360,32365,32370,32375,32385,32389,32393,32398,32403,32413,32418,32428,32433,32442,32447,32456,32461,32470,32474,32479,32489,32493,32497,32502,32517,32545,32560,32564,32569,32574,32583,32588,32597,32602,32611,32616,32625,32630,32639,32644,32653,32658,32671,32676,32686,32691,32701,32707,32713,32719,32725,32736,32742,32762,32768,32779,32785,32791,32797,32803,32809,32815,32821,32841,32847,32863,32869,32883,32889,32904,32910,32919,32925,32934,32940,32946,32955,32961,32972,32978,32997,33003,33014,33020,33040,33056,33062,33076,33082,33088,33099,33105,33111,33121,33127,33138,33144,33154,33159,33165,33214,33261,33266,33272,33291,33297,33317,33323,33329,33339,33344,33350,33366,33411,33417,33423,33429,33440,33446,33452,33458,33476,33490,33499,33508,33517,33526,33532,33538,33546,33551,33557,33568,33574,33594,33600,33606,33612,33629,33635,33641,33647,33653,33659,33686,33710,33716,33722,33728,33739,33750,33756,33773,33796,33819,33825,33830,33839,33849,33855,33860,33866,33879,33885,33896,33907,33926],{"__ignoreMap":58},[76,31887,31888,31890],{"class":78,"line":79},[76,31889,90],{"class":89},[76,31891,31892],{"class":93}," copy\n",[76,31894,31895,31897],{"class":78,"line":86},[76,31896,90],{"class":89},[76,31898,31899],{"class":93}," time\n",[76,31901,31902],{"class":78,"line":97},[76,31903,2472],{"emptyLinePlaceholder":125},[76,31905,31906,31908,31911,31913],{"class":78,"line":103},[76,31907,90],{"class":89},[76,31909,31910],{"class":93}," pandas ",[76,31912,31453],{"class":89},[76,31914,31915],{"class":93}," pd\n",[76,31917,31918,31920],{"class":78,"line":1273},[76,31919,90],{"class":89},[76,31921,30465],{"class":93},[76,31923,31924,31926,31928,31930],{"class":78,"line":1287},[76,31925,30807],{"class":89},[76,31927,31485],{"class":93},[76,31929,90],{"class":89},[76,31931,31932],{"class":93}," Dataset\n",[76,31934,31935,31937,31939,31941],{"class":78,"line":1293},[76,31936,30807],{"class":89},[76,31938,31438],{"class":93},[76,31940,90],{"class":89},[76,31942,31443],{"class":93},[76,31944,31945,31947,31949,31951],{"class":78,"line":1384},[76,31946,30807],{"class":89},[76,31948,31468],{"class":93},[76,31950,90],{"class":89},[76,31952,31473],{"class":93},[76,31954,31955,31957,31959,31961],{"class":78,"line":1390},[76,31956,90],{"class":89},[76,31958,31485],{"class":93},[76,31960,31453],{"class":89},[76,31962,31490],{"class":93},[76,31964,31965,31967,31969,31971],{"class":78,"line":1402},[76,31966,90],{"class":89},[76,31968,31502],{"class":93},[76,31970,31453],{"class":89},[76,31972,31507],{"class":93},[76,31974,31975],{"class":78,"line":1684},[76,31976,31977],{"class":82},"# 导入模型\n",[76,31979,31980,31982,31985,31987],{"class":78,"line":1689},[76,31981,30807],{"class":89},[76,31983,31984],{"class":93}," model ",[76,31986,90],{"class":89},[76,31988,31989],{"class":93}," LeNet\n",[76,31991,31992,31994,31996,31998],{"class":78,"line":1695},[76,31993,30807],{"class":89},[76,31995,30810],{"class":93},[76,31997,90],{"class":89},[76,31999,30815],{"class":93},[76,32001,32002],{"class":78,"line":1700},[76,32003,2472],{"emptyLinePlaceholder":125},[76,32005,32006],{"class":78,"line":1714},[76,32007,2472],{"emptyLinePlaceholder":125},[76,32009,32010],{"class":78,"line":1719},[76,32011,32012],{"class":82},"# 处理训练集与验证集函数--->划分数据集\n",[76,32014,32015,32018,32021],{"class":78,"line":1725},[76,32016,32017],{"class":89},"def",[76,32019,32020],{"class":2035}," train_val_data_process",[76,32022,32023],{"class":93},"():\n",[76,32025,32026,32029,32031,32033,32035],{"class":78,"line":1746},[76,32027,32028],{"class":93},"    train_data",[76,32030,247],{"class":89},[76,32032,31525],{"class":93},[76,32034,31533],{"class":305},[76,32036,31536],{"class":93},[76,32038,32039,32042,32044,32046],{"class":78,"line":1751},[76,32040,32041],{"class":5288},"                            train",[76,32043,247],{"class":89},[76,32045,31546],{"class":250},[76,32047,31536],{"class":93},[76,32049,32050,32053,32055,32057,32059,32061,32063],{"class":78,"line":1765},[76,32051,32052],{"class":5288},"                            transform",[76,32054,247],{"class":89},[76,32056,31563],{"class":93},[76,32058,31566],{"class":5288},[76,32060,247],{"class":89},[76,32062,1100],{"class":250},[76,32064,31574],{"class":93},[76,32066,32067,32070,32072,32074],{"class":78,"line":1770},[76,32068,32069],{"class":5288},"                            download",[76,32071,247],{"class":89},[76,32073,31546],{"class":250},[76,32075,208],{"class":93},[76,32077,32078,32081,32083,32086,32089,32091,32094,32096,32098,32101,32103,32105,32108,32110,32112],{"class":78,"line":1799},[76,32079,32080],{"class":93},"    train_data,val_data",[76,32082,247],{"class":89},[76,32084,32085],{"class":93},"Data.random_split(train_data,[",[76,32087,32088],{"class":250},"round",[76,32090,202],{"class":93},[76,32092,32093],{"class":250},"0.8",[76,32095,655],{"class":89},[76,32097,7430],{"class":250},[76,32099,32100],{"class":93},"(train_data)),",[76,32102,32088],{"class":250},[76,32104,202],{"class":93},[76,32106,32107],{"class":250},"0.2",[76,32109,655],{"class":89},[76,32111,7430],{"class":250},[76,32113,32114],{"class":93},"(train_data))])\n",[76,32116,32117,32120,32122,32125,32127,32129],{"class":78,"line":1804},[76,32118,32119],{"class":93},"    train_dataloader ",[76,32121,247],{"class":89},[76,32123,32124],{"class":93}," Data.DataLoader(",[76,32126,31607],{"class":5288},[76,32128,247],{"class":89},[76,32130,31612],{"class":93},[76,32132,32133,32136,32138,32141],{"class":78,"line":1821},[76,32134,32135],{"class":5288},"                                       batch_size",[76,32137,247],{"class":89},[76,32139,32140],{"class":250},"128",[76,32142,31536],{"class":93},[76,32144,32145,32148,32150,32152],{"class":78,"line":1826},[76,32146,32147],{"class":5288},"                                       shuffle",[76,32149,247],{"class":89},[76,32151,31546],{"class":250},[76,32153,31536],{"class":93},[76,32155,32156],{"class":78,"line":1831},[76,32157,32158],{"class":82},"                                       # 规定8个进程\n",[76,32160,32161,32164,32166,32168],{"class":78,"line":1836},[76,32162,32163],{"class":5288},"                                       num_workers",[76,32165,247],{"class":89},[76,32167,595],{"class":250},[76,32169,208],{"class":93},[76,32171,32172,32175,32177,32179,32181,32183],{"class":78,"line":1850},[76,32173,32174],{"class":93},"    val_dataloader",[76,32176,247],{"class":89},[76,32178,31604],{"class":93},[76,32180,31607],{"class":5288},[76,32182,247],{"class":89},[76,32184,32185],{"class":93},"val_data,\n",[76,32187,32188,32191,32193,32195],{"class":78,"line":1855},[76,32189,32190],{"class":5288},"                                   batch_size",[76,32192,247],{"class":89},[76,32194,32140],{"class":250},[76,32196,31536],{"class":93},[76,32198,32199,32202,32204,32206],{"class":78,"line":2649},[76,32200,32201],{"class":5288},"                                   shuffle",[76,32203,247],{"class":89},[76,32205,31546],{"class":250},[76,32207,31536],{"class":93},[76,32209,32210,32213,32215,32217],{"class":78,"line":2663},[76,32211,32212],{"class":5288},"                                   num_workers",[76,32214,247],{"class":89},[76,32216,595],{"class":250},[76,32218,208],{"class":93},[76,32220,32221,32223],{"class":78,"line":2671},[76,32222,4162],{"class":89},[76,32224,32225],{"class":93}," train_dataloader,val_dataloader\n",[76,32227,32228],{"class":78,"line":2676},[76,32229,2472],{"emptyLinePlaceholder":125},[76,32231,32232],{"class":78,"line":2682},[76,32233,32234],{"class":82},"# 验证是否出错\n",[76,32236,32237],{"class":78,"line":2688},[76,32238,32239],{"class":82},"# train_val_data_process()\n",[76,32241,32242],{"class":78,"line":2693},[76,32243,2472],{"emptyLinePlaceholder":125},[76,32245,32246],{"class":78,"line":8020},[76,32247,32248],{"class":82},"# 定义模型训练函数\n",[76,32250,32251,32253,32256],{"class":78,"line":8044},[76,32252,32017],{"class":89},[76,32254,32255],{"class":2035}," train_model_process",[76,32257,32258],{"class":93},"(model,train_dataloader,val_dataloader,num_epochs):\n",[76,32260,32261,32263,32265,32267,32269,32271,32273,32275,32278],{"class":78,"line":8049},[76,32262,31307],{"class":93},[76,32264,247],{"class":89},[76,32266,30521],{"class":93},[76,32268,31314],{"class":305},[76,32270,1776],{"class":89},[76,32272,31319],{"class":93},[76,32274,1773],{"class":89},[76,32276,32277],{"class":305}," 'cpu'",[76,32279,208],{"class":93},[76,32281,32282],{"class":78,"line":8055},[76,32283,2472],{"emptyLinePlaceholder":125},[76,32285,32286],{"class":78,"line":8082},[76,32287,2472],{"emptyLinePlaceholder":125},[76,32289,32290],{"class":78,"line":8087},[76,32291,32292],{"class":82},"    # 定义优化器\n",[76,32294,32295],{"class":78,"line":8093},[76,32296,32297],{"class":82},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[76,32299,32300],{"class":78,"line":8105},[76,32301,32302],{"class":82},"    # lr为学习率\n",[76,32304,32305,32308,32310,32313,32316,32318,32321],{"class":78,"line":8117},[76,32306,32307],{"class":93},"    optimizer",[76,32309,247],{"class":89},[76,32311,32312],{"class":93},"torch.optim.Adam(model.parameters(),",[76,32314,32315],{"class":5288},"lr",[76,32317,247],{"class":89},[76,32319,32320],{"class":250},"0.001",[76,32322,208],{"class":93},[76,32324,32325],{"class":78,"line":8129},[76,32326,2472],{"emptyLinePlaceholder":125},[76,32328,32329],{"class":78,"line":9788},[76,32330,32331],{"class":82},"    # 定义损失函数使用交叉熵损失函数\n",[76,32333,32334,32337,32339],{"class":78,"line":9813},[76,32335,32336],{"class":93},"    criterion",[76,32338,247],{"class":89},[76,32340,32341],{"class":93},"nn.CrossEntropyLoss()\n",[76,32343,32344],{"class":78,"line":9836},[76,32345,2472],{"emptyLinePlaceholder":125},[76,32347,32348],{"class":78,"line":9860},[76,32349,32350],{"class":82},"    # 将模型放到GPU中进行训练\n",[76,32352,32353,32355,32357],{"class":78,"line":9865},[76,32354,31359],{"class":93},[76,32356,247],{"class":89},[76,32358,32359],{"class":93},"model.to(device)\n",[76,32361,32362],{"class":78,"line":9870},[76,32363,32364],{"class":82},"    # 复制当前模型的参数\n",[76,32366,32367],{"class":78,"line":9875},[76,32368,32369],{"class":82},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[76,32371,32372],{"class":78,"line":9884},[76,32373,32374],{"class":82},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[76,32376,32377,32380,32382],{"class":78,"line":9889},[76,32378,32379],{"class":93},"    best_model_wts",[76,32381,247],{"class":89},[76,32383,32384],{"class":93},"copy.deepcopy(model.state_dict())\n",[76,32386,32387],{"class":78,"line":9895},[76,32388,2472],{"emptyLinePlaceholder":125},[76,32390,32391],{"class":78,"line":9916},[76,32392,2472],{"emptyLinePlaceholder":125},[76,32394,32395],{"class":78,"line":9922},[76,32396,32397],{"class":82},"    # 初始化参数\n",[76,32399,32400],{"class":78,"line":9936},[76,32401,32402],{"class":82},"    # 最高准确度\n",[76,32404,32405,32408,32410],{"class":78,"line":9942},[76,32406,32407],{"class":93},"    best_acc",[76,32409,247],{"class":89},[76,32411,32412],{"class":250},"0.0\n",[76,32414,32415],{"class":78,"line":9969},[76,32416,32417],{"class":82},"    # 训练集损失列表\n",[76,32419,32420,32423,32425],{"class":78,"line":9978},[76,32421,32422],{"class":93},"    train_loss_all",[76,32424,247],{"class":89},[76,32426,32427],{"class":93},"[]\n",[76,32429,32430],{"class":78,"line":9984},[76,32431,32432],{"class":82},"    # 验证集函数列表\n",[76,32434,32435,32438,32440],{"class":78,"line":9992},[76,32436,32437],{"class":93},"    val_loss_all",[76,32439,247],{"class":89},[76,32441,32427],{"class":93},[76,32443,32444],{"class":78,"line":9997},[76,32445,32446],{"class":82},"    # 训练集准确度列表\n",[76,32448,32449,32452,32454],{"class":78,"line":16676},[76,32450,32451],{"class":93},"    train_acc_all",[76,32453,247],{"class":89},[76,32455,32427],{"class":93},[76,32457,32458],{"class":78,"line":16682},[76,32459,32460],{"class":82},"    # 验证集准确度列表\n",[76,32462,32463,32466,32468],{"class":78,"line":16705},[76,32464,32465],{"class":93},"    val_acc_all",[76,32467,247],{"class":89},[76,32469,32427],{"class":93},[76,32471,32472],{"class":78,"line":16711},[76,32473,2472],{"emptyLinePlaceholder":125},[76,32475,32476],{"class":78,"line":16734},[76,32477,32478],{"class":82},"    # 保存当前时间--->方便看每轮训练的时间\n",[76,32480,32481,32484,32486],{"class":78,"line":16748},[76,32482,32483],{"class":93},"    since",[76,32485,247],{"class":89},[76,32487,32488],{"class":93},"time.time()\n",[76,32490,32491],{"class":78,"line":16768},[76,32492,2472],{"emptyLinePlaceholder":125},[76,32494,32495],{"class":78,"line":16774},[76,32496,2472],{"emptyLinePlaceholder":125},[76,32498,32499],{"class":78,"line":16785},[76,32500,32501],{"class":82},"    # 准备工作完成--->开始训练模型\n",[76,32503,32504,32506,32509,32511,32514],{"class":78,"line":16808},[76,32505,3273],{"class":89},[76,32507,32508],{"class":93}," epoch ",[76,32510,26116],{"class":89},[76,32512,32513],{"class":250}," range",[76,32515,32516],{"class":93},"(num_epochs):\n",[76,32518,32519,32522,32524,32527,32530,32532,32534,32536,32539,32541,32543],{"class":78,"line":16830},[76,32520,32521],{"class":250},"        print",[76,32523,202],{"class":93},[76,32525,32526],{"class":305},"\"Epoch ",[76,32528,32529],{"class":250},"{}",[76,32531,783],{"class":305},[76,32533,32529],{"class":250},[76,32535,452],{"class":305},[76,32537,32538],{"class":93},".format(epoch,num_epochs",[76,32540,112],{"class":89},[76,32542,418],{"class":250},[76,32544,30567],{"class":93},[76,32546,32547,32549,32551,32554,32556,32558],{"class":78,"line":16835},[76,32548,32521],{"class":250},[76,32550,202],{"class":93},[76,32552,32553],{"class":305},"\"-\"",[76,32555,655],{"class":89},[76,32557,646],{"class":250},[76,32559,208],{"class":93},[76,32561,32562],{"class":78,"line":16841},[76,32563,2472],{"emptyLinePlaceholder":125},[76,32565,32566],{"class":78,"line":16855},[76,32567,32568],{"class":82},"        # 初始化参数\n",[76,32570,32571],{"class":78,"line":16868},[76,32572,32573],{"class":82},"        # 训练集损失函数\n",[76,32575,32576,32579,32581],{"class":78,"line":16873},[76,32577,32578],{"class":93},"        train_loss",[76,32580,247],{"class":89},[76,32582,32412],{"class":250},[76,32584,32585],{"class":78,"line":16887},[76,32586,32587],{"class":82},"        # 训练集准确度\n",[76,32589,32590,32593,32595],{"class":78,"line":16892},[76,32591,32592],{"class":93},"        train_corrects",[76,32594,247],{"class":89},[76,32596,3157],{"class":250},[76,32598,32599],{"class":78,"line":16898},[76,32600,32601],{"class":82},"        # 验证集损失函数\n",[76,32603,32604,32607,32609],{"class":78,"line":16903},[76,32605,32606],{"class":93},"        val_loss",[76,32608,247],{"class":89},[76,32610,32412],{"class":250},[76,32612,32613],{"class":78,"line":16917},[76,32614,32615],{"class":82},"        # 验证集准确度\n",[76,32617,32618,32621,32623],{"class":78,"line":16922},[76,32619,32620],{"class":93},"        val_corrects",[76,32622,247],{"class":89},[76,32624,3157],{"class":250},[76,32626,32627],{"class":78,"line":16927},[76,32628,32629],{"class":82},"        # 训练集样本数量\n",[76,32631,32632,32635,32637],{"class":78,"line":16941},[76,32633,32634],{"class":93},"        train_num",[76,32636,247],{"class":89},[76,32638,3157],{"class":250},[76,32640,32641],{"class":78,"line":16953},[76,32642,32643],{"class":82},"        # 验证集样本数量\n",[76,32645,32646,32649,32651],{"class":78,"line":16958},[76,32647,32648],{"class":93},"        val_num",[76,32650,247],{"class":89},[76,32652,3157],{"class":250},[76,32654,32655],{"class":78,"line":16971},[76,32656,32657],{"class":82},"        # 将数据放到设备,并开始训练\n",[76,32659,32660,32662,32664,32666,32668],{"class":78,"line":16976},[76,32661,3475],{"class":89},[76,32663,31671],{"class":93},[76,32665,26116],{"class":89},[76,32667,31676],{"class":250},[76,32669,32670],{"class":93},"(train_dataloader):\n",[76,32672,32673],{"class":78,"line":16981},[76,32674,32675],{"class":82},"            # 将特征放入到训练设备\n",[76,32677,32678,32681,32683],{"class":78,"line":16986},[76,32679,32680],{"class":93},"            b_x",[76,32682,247],{"class":89},[76,32684,32685],{"class":93},"b_x.to(device)\n",[76,32687,32688],{"class":78,"line":16999},[76,32689,32690],{"class":82},"            # 将标签放入到训练设备当中\n",[76,32692,32693,32696,32698],{"class":78,"line":17004},[76,32694,32695],{"class":93},"            b_y",[76,32697,247],{"class":89},[76,32699,32700],{"class":93},"b_y.to(device)\n",[76,32702,32704],{"class":78,"line":32703},98,[76,32705,32706],{"class":82},"            # 设置模型为训练模式\n",[76,32708,32710],{"class":78,"line":32709},99,[76,32711,32712],{"class":93},"            model.train()\n",[76,32714,32716],{"class":78,"line":32715},100,[76,32717,32718],{"class":82},"            # 将数据放到模型当中,开始前向传播\n",[76,32720,32722],{"class":78,"line":32721},101,[76,32723,32724],{"class":82},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[76,32726,32728,32731,32733],{"class":78,"line":32727},102,[76,32729,32730],{"class":93},"            output",[76,32732,247],{"class":89},[76,32734,32735],{"class":93},"model(b_x)\n",[76,32737,32739],{"class":78,"line":32738},103,[76,32740,32741],{"class":82},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[76,32743,32745,32748,32750,32753,32756,32758,32760],{"class":78,"line":32744},104,[76,32746,32747],{"class":93},"            pre_lab",[76,32749,247],{"class":89},[76,32751,32752],{"class":93},"torch.argmax(output,",[76,32754,32755],{"class":5288},"dim",[76,32757,247],{"class":89},[76,32759,418],{"class":250},[76,32761,208],{"class":93},[76,32763,32765],{"class":78,"line":32764},105,[76,32766,32767],{"class":82},"            # 计算每一个batch的损失函数\n",[76,32769,32771,32774,32776],{"class":78,"line":32770},106,[76,32772,32773],{"class":93},"            loss",[76,32775,247],{"class":89},[76,32777,32778],{"class":93},"criterion(output,b_y)\n",[76,32780,32782],{"class":78,"line":32781},107,[76,32783,32784],{"class":82},"            # 将梯度初始化为0\n",[76,32786,32788],{"class":78,"line":32787},108,[76,32789,32790],{"class":93},"            optimizer.zero_grad()\n",[76,32792,32794],{"class":78,"line":32793},109,[76,32795,32796],{"class":82},"            # 梯度置为0后再进行反向传播\n",[76,32798,32800],{"class":78,"line":32799},110,[76,32801,32802],{"class":93},"            loss.backward()\n",[76,32804,32806],{"class":78,"line":32805},111,[76,32807,32808],{"class":82},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[76,32810,32812],{"class":78,"line":32811},112,[76,32813,32814],{"class":93},"            optimizer.step()\n",[76,32816,32818],{"class":78,"line":32817},113,[76,32819,32820],{"class":82},"            # loss.item()指的是batch的平均损失\n",[76,32822,32824,32827,32829,32832,32834,32837,32839],{"class":78,"line":32823},114,[76,32825,32826],{"class":93},"            train_loss",[76,32828,9549],{"class":89},[76,32830,32831],{"class":93},"loss.item()",[76,32833,655],{"class":89},[76,32835,32836],{"class":93},"b_x.size(",[76,32838,392],{"class":250},[76,32840,208],{"class":93},[76,32842,32844],{"class":78,"line":32843},115,[76,32845,32846],{"class":82},"            # 计算每个批次中正确预测的数量\n",[76,32848,32850,32853,32855,32858,32860],{"class":78,"line":32849},116,[76,32851,32852],{"class":93},"            train_corrects",[76,32854,9549],{"class":89},[76,32856,32857],{"class":93},"torch.sum(pre_lab",[76,32859,3021],{"class":89},[76,32861,32862],{"class":93},"b_y.data)\n",[76,32864,32866],{"class":78,"line":32865},117,[76,32867,32868],{"class":82},"            # 计算目前为止一共处理了多少样本\n",[76,32870,32872,32875,32877,32879,32881],{"class":78,"line":32871},118,[76,32873,32874],{"class":93},"            train_num",[76,32876,9549],{"class":89},[76,32878,32836],{"class":93},[76,32880,392],{"class":250},[76,32882,208],{"class":93},[76,32884,32886],{"class":78,"line":32885},119,[76,32887,32888],{"class":82},"        # 验证数据\n",[76,32890,32892,32894,32897,32899,32901],{"class":78,"line":32891},120,[76,32893,3475],{"class":89},[76,32895,32896],{"class":93}," step ,(b_x,b_y) ",[76,32898,26116],{"class":89},[76,32900,31676],{"class":250},[76,32902,32903],{"class":93},"(val_dataloader):\n",[76,32905,32907],{"class":78,"line":32906},121,[76,32908,32909],{"class":82},"            # 将特征放到验证设备当中\n",[76,32911,32913,32915,32917],{"class":78,"line":32912},122,[76,32914,32680],{"class":93},[76,32916,247],{"class":89},[76,32918,32685],{"class":93},[76,32920,32922],{"class":78,"line":32921},123,[76,32923,32924],{"class":82},"            # 将标签放到放到训练设备当中\n",[76,32926,32928,32930,32932],{"class":78,"line":32927},124,[76,32929,32695],{"class":93},[76,32931,247],{"class":89},[76,32933,32700],{"class":93},[76,32935,32937],{"class":78,"line":32936},125,[76,32938,32939],{"class":82},"            # 开启验证模式，设置模型为评估模式\n",[76,32941,32943],{"class":78,"line":32942},126,[76,32944,32945],{"class":93},"            model.eval()\n",[76,32947,32949,32952],{"class":78,"line":32948},127,[76,32950,32951],{"class":89},"            with",[76,32953,32954],{"class":93}," torch.no_grad():\n",[76,32956,32958],{"class":78,"line":32957},128,[76,32959,32960],{"class":82},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[76,32962,32964,32967,32969],{"class":78,"line":32963},129,[76,32965,32966],{"class":93},"                output ",[76,32968,247],{"class":89},[76,32970,32971],{"class":93}," model(b_x)\n",[76,32973,32975],{"class":78,"line":32974},130,[76,32976,32977],{"class":82},"                # 查找每一行中最大值对应的下标\n",[76,32979,32981,32984,32986,32989,32991,32993,32995],{"class":78,"line":32980},131,[76,32982,32983],{"class":93},"                pre_lab ",[76,32985,247],{"class":89},[76,32987,32988],{"class":93}," torch.argmax(output, ",[76,32990,32755],{"class":5288},[76,32992,247],{"class":89},[76,32994,418],{"class":250},[76,32996,208],{"class":93},[76,32998,33000],{"class":78,"line":32999},132,[76,33001,33002],{"class":82},"                # 计算验证集上的当前 batch 损失\n",[76,33004,33006,33009,33011],{"class":78,"line":33005},133,[76,33007,33008],{"class":93},"                val_batch_loss ",[76,33010,247],{"class":89},[76,33012,33013],{"class":93}," criterion(output, b_y)\n",[76,33015,33017],{"class":78,"line":33016},134,[76,33018,33019],{"class":82},"                # 对损失函数进行累加（按样本数加权）\n",[76,33021,33023,33026,33028,33031,33033,33036,33038],{"class":78,"line":33022},135,[76,33024,33025],{"class":93},"                val_loss ",[76,33027,9549],{"class":89},[76,33029,33030],{"class":93}," val_batch_loss.item() ",[76,33032,655],{"class":89},[76,33034,33035],{"class":93}," b_x.size(",[76,33037,392],{"class":250},[76,33039,208],{"class":93},[76,33041,33043,33046,33048,33051,33053],{"class":78,"line":33042},136,[76,33044,33045],{"class":93},"                val_corrects ",[76,33047,9549],{"class":89},[76,33049,33050],{"class":93}," torch.sum(pre_lab ",[76,33052,3021],{"class":89},[76,33054,33055],{"class":93}," b_y.data)\n",[76,33057,33059],{"class":78,"line":33058},137,[76,33060,33061],{"class":82},"                # 当前用于验证的样本数量\n",[76,33063,33065,33068,33070,33072,33074],{"class":78,"line":33064},138,[76,33066,33067],{"class":93},"            val_num ",[76,33069,9549],{"class":89},[76,33071,33035],{"class":93},[76,33073,392],{"class":250},[76,33075,208],{"class":93},[76,33077,33079],{"class":78,"line":33078},139,[76,33080,33081],{"class":82},"        # 计算并保存每一次迭代的loss值和准确率\n",[76,33083,33085],{"class":78,"line":33084},140,[76,33086,33087],{"class":82},"        # 计算并保存训练集的loss值\n",[76,33089,33091,33094,33096],{"class":78,"line":33090},141,[76,33092,33093],{"class":93},"        train_loss_all.append(train_loss",[76,33095,783],{"class":89},[76,33097,33098],{"class":93},"train_num)\n",[76,33100,33102],{"class":78,"line":33101},142,[76,33103,33104],{"class":82},"        # 取双精度\n",[76,33106,33108],{"class":78,"line":33107},143,[76,33109,33110],{"class":82},"        # 计算并保存训练集的准确率\n",[76,33112,33114,33117,33119],{"class":78,"line":33113},144,[76,33115,33116],{"class":93},"        train_acc_all.append(train_corrects.double().item()",[76,33118,783],{"class":89},[76,33120,33098],{"class":93},[76,33122,33124],{"class":78,"line":33123},145,[76,33125,33126],{"class":82},"        # 计算并保存验证集的loss值\n",[76,33128,33130,33133,33135],{"class":78,"line":33129},146,[76,33131,33132],{"class":93},"        val_loss_all.append(val_loss",[76,33134,783],{"class":89},[76,33136,33137],{"class":93},"val_num)\n",[76,33139,33141],{"class":78,"line":33140},147,[76,33142,33143],{"class":82},"        # 计算并保存验证集的准确率\n",[76,33145,33147,33150,33152],{"class":78,"line":33146},148,[76,33148,33149],{"class":93},"        val_acc_all.append(val_corrects.double().item()",[76,33151,783],{"class":89},[76,33153,33137],{"class":93},[76,33155,33157],{"class":78,"line":33156},149,[76,33158,2472],{"emptyLinePlaceholder":125},[76,33160,33162],{"class":78,"line":33161},150,[76,33163,33164],{"class":82},"        # 打印训练一轮的loss值和准确率\n",[76,33166,33168,33170,33172,33174,33176,33179,33181,33184,33186,33189,33191,33193,33195,33197,33200,33202,33204,33207,33209,33211],{"class":78,"line":33167},151,[76,33169,32521],{"class":250},[76,33171,202],{"class":93},[76,33173,3664],{"class":305},[76,33175,32529],{"class":250},[76,33177,33178],{"class":305},"train loss:",[76,33180,1095],{"class":250},[76,33182,33183],{"class":89},":.4f",[76,33185,1145],{"class":250},[76,33187,33188],{"class":305}," train acc:",[76,33190,1095],{"class":250},[76,33192,33183],{"class":89},[76,33194,1145],{"class":250},[76,33196,3664],{"class":305},[76,33198,33199],{"class":93},".format(epoch,train_loss_all[",[76,33201,112],{"class":89},[76,33203,418],{"class":250},[76,33205,33206],{"class":93},"],train_acc_all[",[76,33208,112],{"class":89},[76,33210,418],{"class":250},[76,33212,33213],{"class":93},"]))\n",[76,33215,33217,33219,33221,33223,33225,33228,33230,33232,33234,33237,33239,33241,33243,33245,33248,33250,33252,33255,33257,33259],{"class":78,"line":33216},152,[76,33218,32521],{"class":250},[76,33220,202],{"class":93},[76,33222,3664],{"class":305},[76,33224,32529],{"class":250},[76,33226,33227],{"class":305},"val loss:",[76,33229,1095],{"class":250},[76,33231,33183],{"class":89},[76,33233,1145],{"class":250},[76,33235,33236],{"class":305}," val acc:",[76,33238,1095],{"class":250},[76,33240,33183],{"class":89},[76,33242,1145],{"class":250},[76,33244,3664],{"class":305},[76,33246,33247],{"class":93},".format(epoch,val_loss_all[",[76,33249,112],{"class":89},[76,33251,418],{"class":250},[76,33253,33254],{"class":93},"],val_acc_all[",[76,33256,112],{"class":89},[76,33258,418],{"class":250},[76,33260,33213],{"class":93},[76,33262,33264],{"class":78,"line":33263},153,[76,33265,2472],{"emptyLinePlaceholder":125},[76,33267,33269],{"class":78,"line":33268},154,[76,33270,33271],{"class":82},"        # 判断准确度--->保存最优模型\n",[76,33273,33275,33277,33280,33282,33284,33286,33288],{"class":78,"line":33274},155,[76,33276,2569],{"class":89},[76,33278,33279],{"class":93}," val_acc_all[",[76,33281,112],{"class":89},[76,33283,418],{"class":250},[76,33285,1139],{"class":93},[76,33287,1159],{"class":89},[76,33289,33290],{"class":93},"best_acc:\n",[76,33292,33294],{"class":78,"line":33293},156,[76,33295,33296],{"class":82},"            # 保存当前模型准确度\n",[76,33298,33300,33303,33305,33307,33310,33312,33314],{"class":78,"line":33299},157,[76,33301,33302],{"class":93},"            best_acc:",[76,33304,241],{"class":250},[76,33306,247],{"class":89},[76,33308,33309],{"class":93},"val_acc_all[",[76,33311,112],{"class":89},[76,33313,418],{"class":250},[76,33315,33316],{"class":93},"]\n",[76,33318,33320],{"class":78,"line":33319},158,[76,33321,33322],{"class":82},"            # 保存当前的准确度\n",[76,33324,33326],{"class":78,"line":33325},159,[76,33327,33328],{"class":82},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[76,33330,33332,33335,33337],{"class":78,"line":33331},160,[76,33333,33334],{"class":93},"            best_model_wts",[76,33336,247],{"class":89},[76,33338,32384],{"class":93},[76,33340,33342],{"class":78,"line":33341},161,[76,33343,2472],{"emptyLinePlaceholder":125},[76,33345,33347],{"class":78,"line":33346},162,[76,33348,33349],{"class":82},"        # 计算耗时\n",[76,33351,33353,33356,33358,33361,33363],{"class":78,"line":33352},163,[76,33354,33355],{"class":93},"        time_use",[76,33357,247],{"class":89},[76,33359,33360],{"class":93},"time.time()",[76,33362,112],{"class":89},[76,33364,33365],{"class":93},"since\n",[76,33367,33369,33371,33373,33376,33378,33381,33383,33385,33387,33389,33391,33394,33397,33400,33402,33405,33407,33409],{"class":78,"line":33368},164,[76,33370,32521],{"class":250},[76,33372,202],{"class":93},[76,33374,33375],{"class":305},"'训练和验证耗费的时间",[76,33377,1095],{"class":250},[76,33379,33380],{"class":89},":.0f",[76,33382,1145],{"class":250},[76,33384,743],{"class":305},[76,33386,1095],{"class":250},[76,33388,33380],{"class":89},[76,33390,1145],{"class":250},[76,33392,33393],{"class":305},"s'",[76,33395,33396],{"class":93},".format(time_use",[76,33398,33399],{"class":89},"\u002F\u002F",[76,33401,1106],{"class":250},[76,33403,33404],{"class":93},",time_use",[76,33406,106],{"class":89},[76,33408,1106],{"class":250},[76,33410,30567],{"class":93},[76,33412,33414],{"class":78,"line":33413},165,[76,33415,33416],{"class":82},"    # 选择最优参数\n",[76,33418,33420],{"class":78,"line":33419},166,[76,33421,33422],{"class":82},"    # 加载最高准确率下的模型参数\n",[76,33424,33426],{"class":78,"line":33425},167,[76,33427,33428],{"class":82},"    # model.load_state_dict(best_model_wts)\n",[76,33430,33432,33435,33438],{"class":78,"line":33431},168,[76,33433,33434],{"class":93},"    torch.save(model.state_dict(best_model_wts), ",[76,33436,33437],{"class":305},"'.\u002Fbest_model.pth'",[76,33439,208],{"class":93},[76,33441,33443],{"class":78,"line":33442},169,[76,33444,33445],{"class":82},"    # 或者写成\n",[76,33447,33449],{"class":78,"line":33448},170,[76,33450,33451],{"class":82},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[76,33453,33455],{"class":78,"line":33454},171,[76,33456,33457],{"class":82},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[76,33459,33461,33464,33466,33469,33472,33474],{"class":78,"line":33460},172,[76,33462,33463],{"class":93},"    train_process",[76,33465,247],{"class":89},[76,33467,33468],{"class":93},"pd.DataFrame(",[76,33470,33471],{"class":5288},"data",[76,33473,247],{"class":89},[76,33475,1618],{"class":93},[76,33477,33479,33482,33484,33487],{"class":78,"line":33478},173,[76,33480,33481],{"class":305},"        \"epoch\"",[76,33483,1058],{"class":93},[76,33485,33486],{"class":250},"range",[76,33488,33489],{"class":93},"(num_epochs),\n",[76,33491,33493,33496],{"class":78,"line":33492},174,[76,33494,33495],{"class":305},"        \"train_loss_all\"",[76,33497,33498],{"class":93},":train_loss_all,\n",[76,33500,33502,33505],{"class":78,"line":33501},175,[76,33503,33504],{"class":305},"        \"val_loss_all\"",[76,33506,33507],{"class":93},":val_loss_all,\n",[76,33509,33511,33514],{"class":78,"line":33510},176,[76,33512,33513],{"class":305},"        \"train_acc_all\"",[76,33515,33516],{"class":93},":train_acc_all,\n",[76,33518,33520,33523],{"class":78,"line":33519},177,[76,33521,33522],{"class":305},"        \"val_acc_all\"",[76,33524,33525],{"class":93},":val_acc_all\n",[76,33527,33529],{"class":78,"line":33528},178,[76,33530,33531],{"class":93},"    })\n",[76,33533,33535],{"class":78,"line":33534},179,[76,33536,33537],{"class":82},"    # 返回训练保存的过程\n",[76,33539,33541,33543],{"class":78,"line":33540},180,[76,33542,4162],{"class":89},[76,33544,33545],{"class":93}," train_process\n",[76,33547,33549],{"class":78,"line":33548},181,[76,33550,2472],{"emptyLinePlaceholder":125},[76,33552,33554],{"class":78,"line":33553},182,[76,33555,33556],{"class":82},"# 将loss值和精度按照图片的形式展示出来\n",[76,33558,33560,33562,33565],{"class":78,"line":33559},183,[76,33561,32017],{"class":89},[76,33563,33564],{"class":2035}," matplot_acc_loss",[76,33566,33567],{"class":93},"(train_process):\n",[76,33569,33571],{"class":78,"line":33570},184,[76,33572,33573],{"class":82},"    # 设置图的大小\n",[76,33575,33577,33580,33582,33584,33586,33588,33590,33592],{"class":78,"line":33576},185,[76,33578,33579],{"class":93},"    plt.figure(",[76,33581,31763],{"class":5288},[76,33583,247],{"class":89},[76,33585,202],{"class":93},[76,33587,698],{"class":250},[76,33589,578],{"class":93},[76,33591,494],{"class":250},[76,33593,30567],{"class":93},[76,33595,33597],{"class":78,"line":33596},186,[76,33598,33599],{"class":82},"    # 设置图中有几张图\n",[76,33601,33603],{"class":78,"line":33602},187,[76,33604,33605],{"class":82},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[76,33607,33609],{"class":78,"line":33608},188,[76,33610,33611],{"class":82},"    # ①loss图\n",[76,33613,33615,33617,33619,33621,33623,33625,33627],{"class":78,"line":33614},189,[76,33616,31797],{"class":93},[76,33618,418],{"class":250},[76,33620,578],{"class":93},[76,33622,278],{"class":250},[76,33624,578],{"class":93},[76,33626,418],{"class":250},[76,33628,208],{"class":93},[76,33630,33632],{"class":78,"line":33631},190,[76,33633,33634],{"class":82},"    # 补充:\n",[76,33636,33638],{"class":78,"line":33637},191,[76,33639,33640],{"class":82},"    # plt.subplot(nrows, ncols, index)\n",[76,33642,33644],{"class":78,"line":33643},192,[76,33645,33646],{"class":82},"    # nrows：行数\n",[76,33648,33650],{"class":78,"line":33649},193,[76,33651,33652],{"class":82},"    # ncols：列数\n",[76,33654,33656],{"class":78,"line":33655},194,[76,33657,33658],{"class":82},"    # index：目前选中第几个子图（从1开始）\n",[76,33660,33662,33665,33668,33671,33674,33676,33679,33681,33684],{"class":78,"line":33661},195,[76,33663,33664],{"class":93},"    plt.plot(train_process[",[76,33666,33667],{"class":305},"\"epoch\"",[76,33669,33670],{"class":93},"],train_process.train_loss_all,",[76,33672,33673],{"class":305},"'ro-'",[76,33675,578],{"class":93},[76,33677,33678],{"class":5288},"label",[76,33680,247],{"class":89},[76,33682,33683],{"class":305},"'train loss'",[76,33685,208],{"class":93},[76,33687,33689,33691,33693,33696,33699,33701,33703,33705,33708],{"class":78,"line":33688},196,[76,33690,33664],{"class":93},[76,33692,33667],{"class":305},[76,33694,33695],{"class":93},"],train_process.val_loss_all,",[76,33697,33698],{"class":305},"'bs--'",[76,33700,578],{"class":93},[76,33702,33678],{"class":5288},[76,33704,247],{"class":89},[76,33706,33707],{"class":305},"'val loss'",[76,33709,208],{"class":93},[76,33711,33713],{"class":78,"line":33712},197,[76,33714,33715],{"class":82},"    # 添加一个图例\n",[76,33717,33719],{"class":78,"line":33718},198,[76,33720,33721],{"class":93},"    plt.legend()\n",[76,33723,33725],{"class":78,"line":33724},199,[76,33726,33727],{"class":82},"    # 给轴添加标签\n",[76,33729,33731,33734,33737],{"class":78,"line":33730},200,[76,33732,33733],{"class":93},"    plt.xlabel(",[76,33735,33736],{"class":305},"'epoch'",[76,33738,208],{"class":93},[76,33740,33742,33745,33748],{"class":78,"line":33741},201,[76,33743,33744],{"class":93},"    plt.ylabel(",[76,33746,33747],{"class":305},"'loss'",[76,33749,208],{"class":93},[76,33751,33753],{"class":78,"line":33752},202,[76,33754,33755],{"class":82},"    # ②准确度图\n",[76,33757,33759,33761,33763,33765,33767,33769,33771],{"class":78,"line":33758},203,[76,33760,31797],{"class":93},[76,33762,418],{"class":250},[76,33764,578],{"class":93},[76,33766,278],{"class":250},[76,33768,578],{"class":93},[76,33770,278],{"class":250},[76,33772,208],{"class":93},[76,33774,33776,33778,33780,33783,33785,33787,33789,33791,33794],{"class":78,"line":33775},204,[76,33777,33664],{"class":93},[76,33779,33667],{"class":305},[76,33781,33782],{"class":93},"],train_process.train_acc_all,",[76,33784,33673],{"class":305},[76,33786,578],{"class":93},[76,33788,33678],{"class":5288},[76,33790,247],{"class":89},[76,33792,33793],{"class":305},"'train acc'",[76,33795,208],{"class":93},[76,33797,33799,33801,33803,33806,33808,33810,33812,33814,33817],{"class":78,"line":33798},205,[76,33800,33664],{"class":93},[76,33802,33667],{"class":305},[76,33804,33805],{"class":93},"],train_process.val_acc_all,",[76,33807,33698],{"class":305},[76,33809,578],{"class":93},[76,33811,33678],{"class":5288},[76,33813,247],{"class":89},[76,33815,33816],{"class":305},"'val acc'",[76,33818,208],{"class":93},[76,33820,33822],{"class":78,"line":33821},206,[76,33823,33824],{"class":82},"    # 添加图例\n",[76,33826,33828],{"class":78,"line":33827},207,[76,33829,33721],{"class":93},[76,33831,33833,33835,33837],{"class":78,"line":33832},208,[76,33834,33733],{"class":93},[76,33836,33667],{"class":305},[76,33838,208],{"class":93},[76,33840,33842,33844,33847],{"class":78,"line":33841},209,[76,33843,33744],{"class":93},[76,33845,33846],{"class":305},"\"acc\"",[76,33848,208],{"class":93},[76,33850,33852],{"class":78,"line":33851},210,[76,33853,33854],{"class":93},"    plt.show()\n",[76,33856,33858],{"class":78,"line":33857},211,[76,33859,2472],{"emptyLinePlaceholder":125},[76,33861,33863],{"class":78,"line":33862},212,[76,33864,33865],{"class":82},"# 正式开始训练:\n",[76,33867,33869,33871,33873,33875,33877],{"class":78,"line":33868},213,[76,33870,1603],{"class":89},[76,33872,31290],{"class":250},[76,33874,3021],{"class":89},[76,33876,31295],{"class":305},[76,33878,3811],{"class":93},[76,33880,33882],{"class":78,"line":33881},214,[76,33883,33884],{"class":82},"    # 将模型实例化\n",[76,33886,33888,33891,33893],{"class":78,"line":33887},215,[76,33889,33890],{"class":93},"    LeNet",[76,33892,247],{"class":89},[76,33894,33895],{"class":93},"LeNet()\n",[76,33897,33899,33902,33904],{"class":78,"line":33898},216,[76,33900,33901],{"class":93},"    train_dataloader,val_dataloader",[76,33903,247],{"class":89},[76,33905,33906],{"class":93},"train_val_data_process()\n",[76,33908,33910,33912,33914,33917,33920,33922,33924],{"class":78,"line":33909},217,[76,33911,33463],{"class":93},[76,33913,247],{"class":89},[76,33915,33916],{"class":93},"train_model_process(LeNet,train_dataloader,val_dataloader,",[76,33918,33919],{"class":5288},"num_epochs",[76,33921,247],{"class":89},[76,33923,899],{"class":250},[76,33925,208],{"class":93},[76,33927,33929],{"class":78,"line":33928},218,[76,33930,33931],{"class":93},"    matplot_acc_loss(train_process)\n",[14,33933,33934],{},"画图的补充点学习：",[14,33936,33937],{},[56,33938],{"alt":58,"src":33939},"\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",[152,33941,33942],{"start":97},[155,33943,33944],{},"测试",[67,33946,33948],{"className":69,"code":33947,"language":71,"meta":58,"style":58},"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",[73,33949,33950,33956,33966,33978,33988,33993,34003,34013,34017,34022,34031,34048,34060,34077,34088,34104,34109,34120,34131,34142,34149,34153,34158,34168,34173,34190,34198,34202,34207,34216,34225,34229,34234,34239,34244,34251,34256,34268,34278,34288,34293,34297,34302,34311,34316,34332,34337,34342,34347,34361,34366,34380,34384,34389,34404,34409,34421,34425,34430,34442,34447,34455,34460,34465,34475,34480,34489,34494,34499,34503,34508,34513,34529,34537,34542,34547,34606,34612,34617,34628,34636,34644,34648,34653,34657,34662,34670,34675,34691,34696,34706,34716],{"__ignoreMap":58},[76,33951,33952,33954],{"class":78,"line":79},[76,33953,90],{"class":89},[76,33955,30465],{"class":93},[76,33957,33958,33960,33962,33964],{"class":78,"line":86},[76,33959,90],{"class":89},[76,33961,31485],{"class":93},[76,33963,31453],{"class":89},[76,33965,31490],{"class":93},[76,33967,33968,33970,33973,33975],{"class":78,"line":97},[76,33969,30807],{"class":89},[76,33971,33972],{"class":93}," jupyter_client.consoleapp ",[76,33974,90],{"class":89},[76,33976,33977],{"class":93}," classes\n",[76,33979,33980,33982,33984,33986],{"class":78,"line":103},[76,33981,30807],{"class":89},[76,33983,31468],{"class":93},[76,33985,90],{"class":89},[76,33987,31473],{"class":93},[76,33989,33990],{"class":78,"line":1273},[76,33991,33992],{"class":82},"# 导入数据集\n",[76,33994,33995,33997,33999,34001],{"class":78,"line":1287},[76,33996,30807],{"class":89},[76,33998,31438],{"class":93},[76,34000,90],{"class":89},[76,34002,31443],{"class":93},[76,34004,34005,34007,34009,34011],{"class":78,"line":1293},[76,34006,30807],{"class":89},[76,34008,31984],{"class":93},[76,34010,90],{"class":89},[76,34012,31989],{"class":93},[76,34014,34015],{"class":78,"line":1384},[76,34016,2472],{"emptyLinePlaceholder":125},[76,34018,34019],{"class":78,"line":1390},[76,34020,34021],{"class":82},"# 测试数据处理\n",[76,34023,34024,34026,34029],{"class":78,"line":1402},[76,34025,32017],{"class":89},[76,34027,34028],{"class":2035}," test_data_process",[76,34030,32023],{"class":93},[76,34032,34033,34036,34038,34040,34042,34044,34046],{"class":78,"line":1684},[76,34034,34035],{"class":93},"    test_data",[76,34037,247],{"class":89},[76,34039,31525],{"class":93},[76,34041,31528],{"class":5288},[76,34043,247],{"class":89},[76,34045,31533],{"class":305},[76,34047,31536],{"class":93},[76,34049,34050,34053,34055,34058],{"class":78,"line":1689},[76,34051,34052],{"class":5288},"                           train",[76,34054,247],{"class":89},[76,34056,34057],{"class":250},"False",[76,34059,31536],{"class":93},[76,34061,34062,34065,34067,34069,34071,34073,34075],{"class":78,"line":1695},[76,34063,34064],{"class":5288},"                           transform",[76,34066,247],{"class":89},[76,34068,31563],{"class":93},[76,34070,31566],{"class":5288},[76,34072,247],{"class":89},[76,34074,1100],{"class":250},[76,34076,31574],{"class":93},[76,34078,34079,34082,34084,34086],{"class":78,"line":1700},[76,34080,34081],{"class":5288},"                           download",[76,34083,247],{"class":89},[76,34085,31546],{"class":250},[76,34087,208],{"class":93},[76,34089,34090,34093,34095,34097,34099,34101],{"class":78,"line":1714},[76,34091,34092],{"class":93},"    test_dataloader",[76,34094,247],{"class":89},[76,34096,31604],{"class":93},[76,34098,31607],{"class":5288},[76,34100,247],{"class":89},[76,34102,34103],{"class":93},"test_data,\n",[76,34105,34106],{"class":78,"line":1719},[76,34107,34108],{"class":82},"                                    # 这里是一张一张进行测试\n",[76,34110,34111,34114,34116,34118],{"class":78,"line":1725},[76,34112,34113],{"class":5288},"                                    batch_size",[76,34115,247],{"class":89},[76,34117,418],{"class":250},[76,34119,31536],{"class":93},[76,34121,34122,34125,34127,34129],{"class":78,"line":1746},[76,34123,34124],{"class":5288},"                                    shuffle",[76,34126,247],{"class":89},[76,34128,31546],{"class":250},[76,34130,31536],{"class":93},[76,34132,34133,34136,34138,34140],{"class":78,"line":1751},[76,34134,34135],{"class":5288},"                                    num_workers",[76,34137,247],{"class":89},[76,34139,392],{"class":250},[76,34141,208],{"class":93},[76,34143,34144,34146],{"class":78,"line":1765},[76,34145,4162],{"class":89},[76,34147,34148],{"class":93}," test_dataloader\n",[76,34150,34151],{"class":78,"line":1770},[76,34152,2472],{"emptyLinePlaceholder":125},[76,34154,34155],{"class":78,"line":1799},[76,34156,34157],{"class":82},"# 定义模型测试函数\n",[76,34159,34160,34162,34165],{"class":78,"line":1804},[76,34161,32017],{"class":89},[76,34163,34164],{"class":2035}," test_model_process",[76,34166,34167],{"class":93},"(model,test_dataloader):\n",[76,34169,34170],{"class":78,"line":1821},[76,34171,34172],{"class":82},"    # 将模型放到设备当中，先进行判断\n",[76,34174,34175,34177,34179,34181,34183,34185,34187],{"class":78,"line":1826},[76,34176,31307],{"class":93},[76,34178,247],{"class":89},[76,34180,31314],{"class":305},[76,34182,1776],{"class":89},[76,34184,31319],{"class":93},[76,34186,1773],{"class":89},[76,34188,34189],{"class":305}," \"cpu\"\n",[76,34191,34192,34194,34196],{"class":78,"line":1831},[76,34193,31359],{"class":93},[76,34195,247],{"class":89},[76,34197,32359],{"class":93},[76,34199,34200],{"class":78,"line":1836},[76,34201,2472],{"emptyLinePlaceholder":125},[76,34203,34204],{"class":78,"line":1850},[76,34205,34206],{"class":82},"    # 设置初始化参数\n",[76,34208,34209,34212,34214],{"class":78,"line":1855},[76,34210,34211],{"class":93},"    test_corrects",[76,34213,247],{"class":89},[76,34215,32412],{"class":250},[76,34217,34218,34221,34223],{"class":78,"line":2649},[76,34219,34220],{"class":93},"    test_num",[76,34222,247],{"class":89},[76,34224,3157],{"class":250},[76,34226,34227],{"class":78,"line":2663},[76,34228,2472],{"emptyLinePlaceholder":125},[76,34230,34231],{"class":78,"line":2671},[76,34232,34233],{"class":82},"    # 进行模型测试\n",[76,34235,34236],{"class":78,"line":2676},[76,34237,34238],{"class":82},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[76,34240,34241],{"class":78,"line":2682},[76,34242,34243],{"class":82},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[76,34245,34246,34249],{"class":78,"line":2688},[76,34247,34248],{"class":89},"    with",[76,34250,32954],{"class":93},[76,34252,34253],{"class":78,"line":2693},[76,34254,34255],{"class":82},"        # 从数据中进行\n",[76,34257,34258,34260,34263,34265],{"class":78,"line":8020},[76,34259,3475],{"class":89},[76,34261,34262],{"class":93}," test_data_x,test_data_y ",[76,34264,26116],{"class":89},[76,34266,34267],{"class":93}," test_dataloader:\n",[76,34269,34270,34273,34275],{"class":78,"line":8044},[76,34271,34272],{"class":93},"            test_data_x",[76,34274,247],{"class":89},[76,34276,34277],{"class":93},"test_data_x.to(device)\n",[76,34279,34280,34283,34285],{"class":78,"line":8049},[76,34281,34282],{"class":93},"            test_data_y",[76,34284,247],{"class":89},[76,34286,34287],{"class":93},"test_data_y.to(device)\n",[76,34289,34290],{"class":78,"line":8055},[76,34291,34292],{"class":82},"            # 设置为验证模式\n",[76,34294,34295],{"class":78,"line":8082},[76,34296,32945],{"class":93},[76,34298,34299],{"class":78,"line":8087},[76,34300,34301],{"class":82},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[76,34303,34304,34306,34308],{"class":78,"line":8093},[76,34305,32730],{"class":93},[76,34307,247],{"class":89},[76,34309,34310],{"class":93},"model(test_data_x)\n",[76,34312,34313],{"class":78,"line":8105},[76,34314,34315],{"class":82},"            # 查找每一行中最大值对应的下标\n",[76,34317,34318,34320,34322,34324,34326,34328,34330],{"class":78,"line":8117},[76,34319,32747],{"class":93},[76,34321,247],{"class":89},[76,34323,32752],{"class":93},[76,34325,32755],{"class":5288},[76,34327,247],{"class":89},[76,34329,418],{"class":250},[76,34331,208],{"class":93},[76,34333,34334],{"class":78,"line":8129},[76,34335,34336],{"class":82},"            # 计算正确率\n",[76,34338,34339],{"class":78,"line":9788},[76,34340,34341],{"class":82},"            # .data表示是一个不带梯度信息的tensor\n",[76,34343,34344],{"class":78,"line":9813},[76,34345,34346],{"class":82},"            # 如果预测正确，则准确度test_corrects加1\n",[76,34348,34349,34352,34354,34356,34358],{"class":78,"line":9836},[76,34350,34351],{"class":93},"            test_corrects",[76,34353,9549],{"class":89},[76,34355,32857],{"class":93},[76,34357,3021],{"class":89},[76,34359,34360],{"class":93},"test_data_y.data)\n",[76,34362,34363],{"class":78,"line":9860},[76,34364,34365],{"class":82},"            # 将所有的测试样本进行累计\n",[76,34367,34368,34371,34373,34376,34378],{"class":78,"line":9865},[76,34369,34370],{"class":93},"            test_num",[76,34372,9549],{"class":89},[76,34374,34375],{"class":93},"test_data_x.size(",[76,34377,392],{"class":250},[76,34379,208],{"class":93},[76,34381,34382],{"class":78,"line":9870},[76,34383,2472],{"emptyLinePlaceholder":125},[76,34385,34386],{"class":78,"line":9875},[76,34387,34388],{"class":82},"        # 计算准确度\n",[76,34390,34391,34394,34396,34399,34401],{"class":78,"line":9884},[76,34392,34393],{"class":93},"        test_acc",[76,34395,247],{"class":89},[76,34397,34398],{"class":93},"test_corrects.double().item()",[76,34400,783],{"class":89},[76,34402,34403],{"class":93},"test_num\n",[76,34405,34406],{"class":78,"line":9889},[76,34407,34408],{"class":82},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[76,34410,34411,34413,34415,34418],{"class":78,"line":9895},[76,34412,32521],{"class":250},[76,34414,202],{"class":93},[76,34416,34417],{"class":305},"\"测试的准确率：\"",[76,34419,34420],{"class":93},",test_acc)\n",[76,34422,34423],{"class":78,"line":9916},[76,34424,2472],{"emptyLinePlaceholder":125},[76,34426,34427],{"class":78,"line":9922},[76,34428,34429],{"class":82},"# 实现模型的测试功能\n",[76,34431,34432,34434,34436,34438,34440],{"class":78,"line":9936},[76,34433,1603],{"class":89},[76,34435,31290],{"class":250},[76,34437,3021],{"class":89},[76,34439,31295],{"class":305},[76,34441,3811],{"class":93},[76,34443,34444],{"class":78,"line":9942},[76,34445,34446],{"class":82},"    # 加载模型\n",[76,34448,34449,34451,34453],{"class":78,"line":9969},[76,34450,31359],{"class":93},[76,34452,247],{"class":89},[76,34454,33895],{"class":93},[76,34456,34457],{"class":78,"line":9978},[76,34458,34459],{"class":82},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[76,34461,34462],{"class":78,"line":9984},[76,34463,34464],{"class":82},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[76,34466,34467,34470,34473],{"class":78,"line":9992},[76,34468,34469],{"class":93},"    model.load_state_dict(torch.load(",[76,34471,34472],{"class":305},"'best_model.pth'",[76,34474,30567],{"class":93},[76,34476,34477],{"class":78,"line":9997},[76,34478,34479],{"class":82},"    # 数据加载\n",[76,34481,34482,34484,34486],{"class":78,"line":16676},[76,34483,34092],{"class":93},[76,34485,247],{"class":89},[76,34487,34488],{"class":93},"test_data_process()\n",[76,34490,34491],{"class":78,"line":16682},[76,34492,34493],{"class":82},"    # 加载模型测试的函数\n",[76,34495,34496],{"class":78,"line":16705},[76,34497,34498],{"class":93},"    test_model_process(model,test_dataloader)\n",[76,34500,34501],{"class":78,"line":16711},[76,34502,2472],{"emptyLinePlaceholder":125},[76,34504,34505],{"class":78,"line":16734},[76,34506,34507],{"class":82},"    # 验证集推理实现：\n",[76,34509,34510],{"class":78,"line":16748},[76,34511,34512],{"class":82},"    # 加载数据加载的更详细一些\n",[76,34514,34515,34517,34519,34521,34523,34525,34527],{"class":78,"line":16768},[76,34516,31307],{"class":93},[76,34518,247],{"class":89},[76,34520,31314],{"class":305},[76,34522,1776],{"class":89},[76,34524,31319],{"class":93},[76,34526,1773],{"class":89},[76,34528,34189],{"class":305},[76,34530,34531,34533,34535],{"class":78,"line":16774},[76,34532,31359],{"class":93},[76,34534,247],{"class":89},[76,34536,32359],{"class":93},[76,34538,34539],{"class":78,"line":16785},[76,34540,34541],{"class":82},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[76,34543,34544],{"class":78,"line":16808},[76,34545,34546],{"class":82},"    # 顺序不可改变\n",[76,34548,34549,34552,34554,34556,34559,34561,34564,34566,34569,34571,34574,34576,34579,34581,34584,34586,34589,34591,34594,34596,34599,34601,34604],{"class":78,"line":16830},[76,34550,34551],{"class":93},"    classes",[76,34553,247],{"class":89},[76,34555,1089],{"class":93},[76,34557,34558],{"class":305},"'T-shirt\u002Ftop'",[76,34560,578],{"class":93},[76,34562,34563],{"class":305},"'Trouser'",[76,34565,578],{"class":93},[76,34567,34568],{"class":305},"'Pullover'",[76,34570,578],{"class":93},[76,34572,34573],{"class":305},"'Dress'",[76,34575,578],{"class":93},[76,34577,34578],{"class":305},"'Coat'",[76,34580,578],{"class":93},[76,34582,34583],{"class":305},"'Sandal'",[76,34585,578],{"class":93},[76,34587,34588],{"class":305},"'Shirt'",[76,34590,578],{"class":93},[76,34592,34593],{"class":305},"'Sneaker'",[76,34595,578],{"class":93},[76,34597,34598],{"class":305},"'Bag'",[76,34600,578],{"class":93},[76,34602,34603],{"class":305},"'Ankle boot'",[76,34605,33316],{"class":93},[76,34607,34608,34610],{"class":78,"line":16835},[76,34609,34248],{"class":89},[76,34611,32954],{"class":93},[76,34613,34614],{"class":78,"line":16841},[76,34615,34616],{"class":82},"        # 将数据和标签都放到设备当中\n",[76,34618,34619,34621,34624,34626],{"class":78,"line":16855},[76,34620,3475],{"class":89},[76,34622,34623],{"class":93}," b_x,b_y ",[76,34625,26116],{"class":89},[76,34627,34267],{"class":93},[76,34629,34630,34632,34634],{"class":78,"line":16868},[76,34631,32680],{"class":93},[76,34633,247],{"class":89},[76,34635,32685],{"class":93},[76,34637,34638,34640,34642],{"class":78,"line":16873},[76,34639,32695],{"class":93},[76,34641,247],{"class":89},[76,34643,32700],{"class":93},[76,34645,34646],{"class":78,"line":16887},[76,34647,2472],{"emptyLinePlaceholder":125},[76,34649,34650],{"class":78,"line":16892},[76,34651,34652],{"class":82},"            # 设置模型为验证模式\n",[76,34654,34655],{"class":78,"line":16898},[76,34656,32945],{"class":93},[76,34658,34659],{"class":78,"line":16903},[76,34660,34661],{"class":82},"            # 模型推理结果\n",[76,34663,34664,34666,34668],{"class":78,"line":16917},[76,34665,32730],{"class":93},[76,34667,247],{"class":89},[76,34669,32735],{"class":93},[76,34671,34672],{"class":78,"line":16922},[76,34673,34674],{"class":82},"            # 获取最大下标，最大下标就是类别号\n",[76,34676,34677,34679,34681,34683,34685,34687,34689],{"class":78,"line":16927},[76,34678,32747],{"class":93},[76,34680,247],{"class":89},[76,34682,32752],{"class":93},[76,34684,32755],{"class":5288},[76,34686,247],{"class":89},[76,34688,418],{"class":250},[76,34690,208],{"class":93},[76,34692,34693],{"class":78,"line":16941},[76,34694,34695],{"class":82},"            # 取出张量中的数值\n",[76,34697,34698,34701,34703],{"class":78,"line":16953},[76,34699,34700],{"class":93},"            result",[76,34702,247],{"class":89},[76,34704,34705],{"class":93},"pre_lab.item()\n",[76,34707,34708,34711,34713],{"class":78,"line":16958},[76,34709,34710],{"class":93},"            label",[76,34712,247],{"class":89},[76,34714,34715],{"class":93},"b_y.item()\n",[76,34717,34718,34721,34723,34726,34729,34732,34734,34737],{"class":78,"line":16971},[76,34719,34720],{"class":250},"            print",[76,34722,202],{"class":93},[76,34724,34725],{"class":305},"\"预测值：\"",[76,34727,34728],{"class":93},",classes[result],",[76,34730,34731],{"class":305},"\"------\"",[76,34733,578],{"class":93},[76,34735,34736],{"class":305},"\"真实值：\"",[76,34738,34739],{"class":93},",classes[label])\n",[14,34741,34742],{},"（2）AlexNet",[152,34744,34745],{},[155,34746,34747],{},"神经网络构建",[67,34749,34751],{"className":69,"code":34750,"language":71,"meta":58,"style":58},"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",[73,34752,34753,34759,34769,34779,34791,34795,34812,34820,34835,34847,34889,34916,34959,34985,35029,35072,35115,35142,35146,35156,35161,35189,35208,35227,35231,35236,35244,35259,35269,35283,35293,35308,35323,35338,35349,35353,35358,35368,35383,35388,35402,35417,35429,35434,35445,35450,35456,35461,35473,35493,35498,35507],{"__ignoreMap":58},[76,34754,34755,34757],{"class":78,"line":79},[76,34756,90],{"class":89},[76,34758,30465],{"class":93},[76,34760,34761,34763,34765,34767],{"class":78,"line":86},[76,34762,30807],{"class":89},[76,34764,30810],{"class":93},[76,34766,90],{"class":89},[76,34768,30815],{"class":93},[76,34770,34771,34773,34775,34777],{"class":78,"line":97},[76,34772,30807],{"class":89},[76,34774,30827],{"class":93},[76,34776,90],{"class":89},[76,34778,30832],{"class":93},[76,34780,34781,34783,34786,34788],{"class":78,"line":103},[76,34782,90],{"class":89},[76,34784,34785],{"class":93}," torch.nn.functional ",[76,34787,31453],{"class":89},[76,34789,34790],{"class":93}," F\n",[76,34792,34793],{"class":78,"line":1273},[76,34794,2472],{"emptyLinePlaceholder":125},[76,34796,34797,34799,34802,34804,34806,34808,34810],{"class":78,"line":1287},[76,34798,14766],{"class":89},[76,34800,34801],{"class":2035}," AlexNet",[76,34803,202],{"class":93},[76,34805,30848],{"class":2035},[76,34807,757],{"class":93},[76,34809,30853],{"class":2035},[76,34811,30856],{"class":93},[76,34813,34814,34816,34818],{"class":78,"line":1293},[76,34815,30871],{"class":89},[76,34817,30874],{"class":250},[76,34819,30877],{"class":93},[76,34821,34822,34824,34827,34829,34831,34833],{"class":78,"line":1384},[76,34823,30887],{"class":250},[76,34825,34826],{"class":93},"(AlexNet,",[76,34828,30893],{"class":250},[76,34830,30896],{"class":93},[76,34832,30899],{"class":250},[76,34834,2048],{"class":93},[76,34836,34837,34839,34842,34844],{"class":78,"line":1390},[76,34838,30915],{"class":250},[76,34840,34841],{"class":93},".ReLu",[76,34843,247],{"class":89},[76,34845,34846],{"class":93},"nn.ReLU()\n",[76,34848,34849,34851,34853,34855,34857,34859,34861,34863,34865,34867,34869,34871,34873,34875,34877,34879,34881,34883,34885,34887],{"class":78,"line":1402},[76,34850,30915],{"class":250},[76,34852,30918],{"class":93},[76,34854,247],{"class":89},[76,34856,30923],{"class":93},[76,34858,30926],{"class":5288},[76,34860,247],{"class":89},[76,34862,418],{"class":250},[76,34864,578],{"class":93},[76,34866,30935],{"class":5288},[76,34868,247],{"class":89},[76,34870,410],{"class":250},[76,34872,578],{"class":93},[76,34874,30944],{"class":5288},[76,34876,247],{"class":89},[76,34878,672],{"class":250},[76,34880,578],{"class":93},[76,34882,30999],{"class":5288},[76,34884,247],{"class":89},[76,34886,494],{"class":250},[76,34888,208],{"class":93},[76,34890,34891,34893,34895,34897,34900,34902,34904,34906,34908,34910,34912,34914],{"class":78,"line":1684},[76,34892,30915],{"class":250},[76,34894,30983],{"class":93},[76,34896,247],{"class":89},[76,34898,34899],{"class":93},"nn.MaxPool2d(",[76,34901,30944],{"class":5288},[76,34903,247],{"class":89},[76,34905,272],{"class":250},[76,34907,578],{"class":93},[76,34909,30999],{"class":5288},[76,34911,247],{"class":89},[76,34913,278],{"class":250},[76,34915,208],{"class":93},[76,34917,34918,34920,34922,34924,34926,34928,34930,34932,34934,34936,34938,34941,34943,34945,34947,34949,34951,34953,34955,34957],{"class":78,"line":1689},[76,34919,30915],{"class":250},[76,34921,31012],{"class":93},[76,34923,247],{"class":89},[76,34925,30923],{"class":93},[76,34927,30926],{"class":5288},[76,34929,247],{"class":89},[76,34931,410],{"class":250},[76,34933,578],{"class":93},[76,34935,30935],{"class":5288},[76,34937,247],{"class":89},[76,34939,34940],{"class":250},"256",[76,34942,578],{"class":93},[76,34944,30944],{"class":5288},[76,34946,247],{"class":89},[76,34948,520],{"class":250},[76,34950,578],{"class":93},[76,34952,30953],{"class":5288},[76,34954,247],{"class":89},[76,34956,278],{"class":250},[76,34958,208],{"class":93},[76,34960,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981,34983],{"class":78,"line":1695},[76,34962,30915],{"class":250},[76,34964,31047],{"class":93},[76,34966,247],{"class":89},[76,34968,34899],{"class":93},[76,34970,30944],{"class":5288},[76,34972,247],{"class":89},[76,34974,272],{"class":250},[76,34976,578],{"class":93},[76,34978,30999],{"class":5288},[76,34980,247],{"class":89},[76,34982,278],{"class":250},[76,34984,208],{"class":93},[76,34986,34987,34989,34992,34994,34996,34998,35000,35002,35004,35006,35008,35011,35013,35015,35017,35019,35021,35023,35025,35027],{"class":78,"line":1700},[76,34988,30915],{"class":250},[76,34990,34991],{"class":93},".c5",[76,34993,247],{"class":89},[76,34995,30923],{"class":93},[76,34997,30926],{"class":5288},[76,34999,247],{"class":89},[76,35001,34940],{"class":250},[76,35003,578],{"class":93},[76,35005,30935],{"class":5288},[76,35007,247],{"class":89},[76,35009,35010],{"class":250},"384",[76,35012,578],{"class":93},[76,35014,30944],{"class":5288},[76,35016,247],{"class":89},[76,35018,272],{"class":250},[76,35020,578],{"class":93},[76,35022,30953],{"class":5288},[76,35024,247],{"class":89},[76,35026,418],{"class":250},[76,35028,208],{"class":93},[76,35030,35031,35033,35036,35038,35040,35042,35044,35046,35048,35050,35052,35054,35056,35058,35060,35062,35064,35066,35068,35070],{"class":78,"line":1714},[76,35032,30915],{"class":250},[76,35034,35035],{"class":93},".c6",[76,35037,247],{"class":89},[76,35039,30923],{"class":93},[76,35041,30926],{"class":5288},[76,35043,247],{"class":89},[76,35045,35010],{"class":250},[76,35047,578],{"class":93},[76,35049,30935],{"class":5288},[76,35051,247],{"class":89},[76,35053,35010],{"class":250},[76,35055,578],{"class":93},[76,35057,30944],{"class":5288},[76,35059,247],{"class":89},[76,35061,272],{"class":250},[76,35063,578],{"class":93},[76,35065,30953],{"class":5288},[76,35067,247],{"class":89},[76,35069,418],{"class":250},[76,35071,208],{"class":93},[76,35073,35074,35076,35079,35081,35083,35085,35087,35089,35091,35093,35095,35097,35099,35101,35103,35105,35107,35109,35111,35113],{"class":78,"line":1719},[76,35075,30915],{"class":250},[76,35077,35078],{"class":93},".c7",[76,35080,247],{"class":89},[76,35082,30923],{"class":93},[76,35084,30926],{"class":5288},[76,35086,247],{"class":89},[76,35088,35010],{"class":250},[76,35090,578],{"class":93},[76,35092,30935],{"class":5288},[76,35094,247],{"class":89},[76,35096,34940],{"class":250},[76,35098,578],{"class":93},[76,35100,30944],{"class":5288},[76,35102,247],{"class":89},[76,35104,272],{"class":250},[76,35106,578],{"class":93},[76,35108,30953],{"class":5288},[76,35110,247],{"class":89},[76,35112,418],{"class":250},[76,35114,208],{"class":93},[76,35116,35117,35119,35122,35124,35126,35128,35130,35132,35134,35136,35138,35140],{"class":78,"line":1725},[76,35118,30915],{"class":250},[76,35120,35121],{"class":93},".s8",[76,35123,247],{"class":89},[76,35125,34899],{"class":93},[76,35127,30944],{"class":5288},[76,35129,247],{"class":89},[76,35131,272],{"class":250},[76,35133,578],{"class":93},[76,35135,30999],{"class":5288},[76,35137,247],{"class":89},[76,35139,278],{"class":250},[76,35141,208],{"class":93},[76,35143,35144],{"class":78,"line":1746},[76,35145,31072],{"class":82},[76,35147,35148,35150,35152,35154],{"class":78,"line":1751},[76,35149,30915],{"class":250},[76,35151,31079],{"class":93},[76,35153,247],{"class":89},[76,35155,31084],{"class":93},[76,35157,35158],{"class":78,"line":1765},[76,35159,35160],{"class":82},"       # 定义全连接层\n",[76,35162,35163,35165,35168,35170,35172,35174,35176,35178,35180,35182,35184,35187],{"class":78,"line":1770},[76,35164,30915],{"class":250},[76,35166,35167],{"class":93},".f1",[76,35169,247],{"class":89},[76,35171,31101],{"class":93},[76,35173,544],{"class":250},[76,35175,655],{"class":89},[76,35177,544],{"class":250},[76,35179,655],{"class":89},[76,35181,34940],{"class":250},[76,35183,578],{"class":93},[76,35185,35186],{"class":250},"4096",[76,35188,208],{"class":93},[76,35190,35191,35193,35196,35198,35200,35202,35204,35206],{"class":78,"line":1799},[76,35192,30915],{"class":250},[76,35194,35195],{"class":93},".f2",[76,35197,247],{"class":89},[76,35199,31101],{"class":93},[76,35201,35186],{"class":250},[76,35203,578],{"class":93},[76,35205,35186],{"class":250},[76,35207,208],{"class":93},[76,35209,35210,35212,35215,35217,35219,35221,35223,35225],{"class":78,"line":1804},[76,35211,30915],{"class":250},[76,35213,35214],{"class":93},".f3",[76,35216,247],{"class":89},[76,35218,31101],{"class":93},[76,35220,35186],{"class":250},[76,35222,578],{"class":93},[76,35224,646],{"class":250},[76,35226,208],{"class":93},[76,35228,35229],{"class":78,"line":1821},[76,35230,2472],{"emptyLinePlaceholder":125},[76,35232,35233],{"class":78,"line":1826},[76,35234,35235],{"class":82},"    # 定义前向传播\n",[76,35237,35238,35240,35242],{"class":78,"line":1831},[76,35239,30871],{"class":89},[76,35241,31163],{"class":2035},[76,35243,31166],{"class":93},[76,35245,35246,35248,35250,35252,35255,35257],{"class":78,"line":1836},[76,35247,31171],{"class":93},[76,35249,247],{"class":89},[76,35251,30893],{"class":250},[76,35253,35254],{"class":93},".ReLu(",[76,35256,30893],{"class":250},[76,35258,31183],{"class":93},[76,35260,35261,35263,35265,35267],{"class":78,"line":1850},[76,35262,31171],{"class":93},[76,35264,247],{"class":89},[76,35266,30893],{"class":250},[76,35268,31194],{"class":93},[76,35270,35271,35273,35275,35277,35279,35281],{"class":78,"line":1855},[76,35272,31171],{"class":93},[76,35274,247],{"class":89},[76,35276,30893],{"class":250},[76,35278,35254],{"class":93},[76,35280,30893],{"class":250},[76,35282,31209],{"class":93},[76,35284,35285,35287,35289,35291],{"class":78,"line":2649},[76,35286,31171],{"class":93},[76,35288,247],{"class":89},[76,35290,30893],{"class":250},[76,35292,31220],{"class":93},[76,35294,35295,35297,35299,35301,35303,35305],{"class":78,"line":2663},[76,35296,31171],{"class":93},[76,35298,247],{"class":89},[76,35300,30893],{"class":250},[76,35302,35254],{"class":93},[76,35304,30893],{"class":250},[76,35306,35307],{"class":93},".c5(x))\n",[76,35309,35310,35312,35314,35316,35318,35320],{"class":78,"line":2671},[76,35311,31171],{"class":93},[76,35313,247],{"class":89},[76,35315,30893],{"class":250},[76,35317,35254],{"class":93},[76,35319,30893],{"class":250},[76,35321,35322],{"class":93},".c6(x))\n",[76,35324,35325,35327,35329,35331,35333,35335],{"class":78,"line":2676},[76,35326,31171],{"class":93},[76,35328,247],{"class":89},[76,35330,30893],{"class":250},[76,35332,35254],{"class":93},[76,35334,30893],{"class":250},[76,35336,35337],{"class":93},".c7(x))\n",[76,35339,35340,35342,35344,35346],{"class":78,"line":2682},[76,35341,31171],{"class":93},[76,35343,247],{"class":89},[76,35345,30893],{"class":250},[76,35347,35348],{"class":93},".s8(x)\n",[76,35350,35351],{"class":78,"line":2688},[76,35352,2472],{"emptyLinePlaceholder":125},[76,35354,35355],{"class":78,"line":2693},[76,35356,35357],{"class":82},"        # 展平加线性全连接层\n",[76,35359,35360,35362,35364,35366],{"class":78,"line":8020},[76,35361,31171],{"class":93},[76,35363,247],{"class":89},[76,35365,30893],{"class":250},[76,35367,31231],{"class":93},[76,35369,35370,35372,35374,35376,35378,35380],{"class":78,"line":8044},[76,35371,31171],{"class":93},[76,35373,247],{"class":89},[76,35375,30893],{"class":250},[76,35377,35254],{"class":93},[76,35379,30893],{"class":250},[76,35381,35382],{"class":93},".f1(x))\n",[76,35384,35385],{"class":78,"line":8049},[76,35386,35387],{"class":82},"        # 还需要dropout对神经元随机进行失活\n",[76,35389,35390,35392,35394,35397,35400],{"class":78,"line":8055},[76,35391,31171],{"class":93},[76,35393,247],{"class":89},[76,35395,35396],{"class":93},"F.dropout(x,",[76,35398,35399],{"class":250},"0.5",[76,35401,208],{"class":93},[76,35403,35404,35406,35408,35410,35412,35414],{"class":78,"line":8082},[76,35405,31171],{"class":93},[76,35407,247],{"class":89},[76,35409,30893],{"class":250},[76,35411,35254],{"class":93},[76,35413,30893],{"class":250},[76,35415,35416],{"class":93},".f2(x))\n",[76,35418,35419,35421,35423,35425,35427],{"class":78,"line":8087},[76,35420,31171],{"class":93},[76,35422,247],{"class":89},[76,35424,35396],{"class":93},[76,35426,35399],{"class":250},[76,35428,208],{"class":93},[76,35430,35431],{"class":78,"line":8093},[76,35432,35433],{"class":82},"        # 直接输出\n",[76,35435,35436,35438,35440,35442],{"class":78,"line":8105},[76,35437,31171],{"class":93},[76,35439,247],{"class":89},[76,35441,30893],{"class":250},[76,35443,35444],{"class":93},".f3(x)\n",[76,35446,35447],{"class":78,"line":8117},[76,35448,35449],{"class":82},"        # 前向传播输出\n",[76,35451,35452,35454],{"class":78,"line":8129},[76,35453,14824],{"class":89},[76,35455,31279],{"class":93},[76,35457,35458],{"class":78,"line":9788},[76,35459,35460],{"class":82},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[76,35462,35463,35465,35467,35469,35471],{"class":78,"line":9813},[76,35464,1603],{"class":89},[76,35466,31290],{"class":250},[76,35468,3021],{"class":89},[76,35470,31295],{"class":305},[76,35472,3811],{"class":93},[76,35474,35475,35477,35479,35481,35483,35485,35487,35489,35491],{"class":78,"line":9836},[76,35476,31307],{"class":93},[76,35478,247],{"class":89},[76,35480,30521],{"class":93},[76,35482,31314],{"class":305},[76,35484,1776],{"class":89},[76,35486,31319],{"class":93},[76,35488,1773],{"class":89},[76,35490,30546],{"class":305},[76,35492,208],{"class":93},[76,35494,35495],{"class":78,"line":9860},[76,35496,35497],{"class":82},"    # 模型实例化，然后将实例化的模型放到设备中\n",[76,35499,35500,35502,35504],{"class":78,"line":9865},[76,35501,31359],{"class":93},[76,35503,247],{"class":89},[76,35505,35506],{"class":93},"AlexNet().to(device)\n",[76,35508,35509,35511,35513,35515,35517,35520,35522,35524],{"class":78,"line":9870},[76,35510,31369],{"class":250},[76,35512,31372],{"class":93},[76,35514,418],{"class":250},[76,35516,578],{"class":93},[76,35518,35519],{"class":250},"227",[76,35521,578],{"class":93},[76,35523,35519],{"class":250},[76,35525,31385],{"class":93},[152,35527,35528],{"start":86},[155,35529,31398],{},[67,35531,35533],{"className":69,"code":35532,"language":71,"meta":58,"style":58},"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",[73,35534,35535,35541,35547,35557,35563,35573,35583,35593,35603,35613,35617,35628,35638,35642,35646,35650,35658,35670,35680,35696,35706,35738,35752,35762,35772,35776,35786,35800,35810,35820,35830,35836,35840,35844,35848,35852,35856,35864,35884,35888,35892,35896,35900,35904,35920,35924,35928,35936,35940,35944,35952,35956,35960,35964,35972,35976,35980,35984,35988,35996,36000,36008,36012,36020,36024,36032,36036,36044,36048,36052,36060,36064,36068,36072,36084,36108,36122,36126,36130,36134,36142,36146,36154,36158,36166,36170,36178,36182,36190,36194,36202,36206,36218,36222,36230,36234,36242,36246,36250,36254,36258,36266,36270,36286,36290,36298,36302,36306,36310,36314,36318,36322,36326,36342,36346,36358,36362,36374,36378,36390,36394,36402,36406,36414,36418,36422,36427,36433,36437,36446,36450,36467,36471,36480,36484,36502,36515,36520,36533,36537,36541,36549,36553,36557,36565,36569,36577,36581,36589,36593,36597,36639,36681,36685,36689,36705,36709,36725,36729,36733,36741,36745,36749,36761,36799,36804,36809,36818,36822,36836,36846,36852,36858,36864,36870,36874,36878,36884,36888,36892,36900,36904,36922,36926,36930,36934,36950,36954,36958,36962,36966,36970,36990,37010,37014,37018,37022,37030,37038,37042,37058,37078,37098,37102,37106,37114,37122,37126,37130,37134,37146,37150,37160,37168,37185],{"__ignoreMap":58},[76,35536,35537,35539],{"class":78,"line":79},[76,35538,90],{"class":89},[76,35540,31892],{"class":93},[76,35542,35543,35545],{"class":78,"line":86},[76,35544,90],{"class":89},[76,35546,31899],{"class":93},[76,35548,35549,35551,35553,35555],{"class":78,"line":97},[76,35550,90],{"class":89},[76,35552,31910],{"class":93},[76,35554,31453],{"class":89},[76,35556,31915],{"class":93},[76,35558,35559,35561],{"class":78,"line":103},[76,35560,90],{"class":89},[76,35562,30465],{"class":93},[76,35564,35565,35567,35569,35571],{"class":78,"line":1273},[76,35566,30807],{"class":89},[76,35568,31485],{"class":93},[76,35570,90],{"class":89},[76,35572,31932],{"class":93},[76,35574,35575,35577,35579,35581],{"class":78,"line":1287},[76,35576,30807],{"class":89},[76,35578,31438],{"class":93},[76,35580,90],{"class":89},[76,35582,31443],{"class":93},[76,35584,35585,35587,35589,35591],{"class":78,"line":1293},[76,35586,30807],{"class":89},[76,35588,31468],{"class":93},[76,35590,90],{"class":89},[76,35592,31473],{"class":93},[76,35594,35595,35597,35599,35601],{"class":78,"line":1384},[76,35596,90],{"class":89},[76,35598,31485],{"class":93},[76,35600,31453],{"class":89},[76,35602,31490],{"class":93},[76,35604,35605,35607,35609,35611],{"class":78,"line":1390},[76,35606,90],{"class":89},[76,35608,31502],{"class":93},[76,35610,31453],{"class":89},[76,35612,31507],{"class":93},[76,35614,35615],{"class":78,"line":1402},[76,35616,31977],{"class":82},[76,35618,35619,35621,35623,35625],{"class":78,"line":1684},[76,35620,30807],{"class":89},[76,35622,31984],{"class":93},[76,35624,90],{"class":89},[76,35626,35627],{"class":93}," AlexNet\n",[76,35629,35630,35632,35634,35636],{"class":78,"line":1689},[76,35631,30807],{"class":89},[76,35633,30810],{"class":93},[76,35635,90],{"class":89},[76,35637,30815],{"class":93},[76,35639,35640],{"class":78,"line":1695},[76,35641,2472],{"emptyLinePlaceholder":125},[76,35643,35644],{"class":78,"line":1700},[76,35645,2472],{"emptyLinePlaceholder":125},[76,35647,35648],{"class":78,"line":1714},[76,35649,32012],{"class":82},[76,35651,35652,35654,35656],{"class":78,"line":1719},[76,35653,32017],{"class":89},[76,35655,32020],{"class":2035},[76,35657,32023],{"class":93},[76,35659,35660,35662,35664,35666,35668],{"class":78,"line":1725},[76,35661,32028],{"class":93},[76,35663,247],{"class":89},[76,35665,31525],{"class":93},[76,35667,31533],{"class":305},[76,35669,31536],{"class":93},[76,35671,35672,35674,35676,35678],{"class":78,"line":1746},[76,35673,32041],{"class":5288},[76,35675,247],{"class":89},[76,35677,31546],{"class":250},[76,35679,31536],{"class":93},[76,35681,35682,35684,35686,35688,35690,35692,35694],{"class":78,"line":1751},[76,35683,32052],{"class":5288},[76,35685,247],{"class":89},[76,35687,31563],{"class":93},[76,35689,31566],{"class":5288},[76,35691,247],{"class":89},[76,35693,35519],{"class":250},[76,35695,31574],{"class":93},[76,35697,35698,35700,35702,35704],{"class":78,"line":1765},[76,35699,32069],{"class":5288},[76,35701,247],{"class":89},[76,35703,31546],{"class":250},[76,35705,208],{"class":93},[76,35707,35708,35710,35712,35714,35716,35718,35720,35722,35724,35726,35728,35730,35732,35734,35736],{"class":78,"line":1770},[76,35709,32080],{"class":93},[76,35711,247],{"class":89},[76,35713,32085],{"class":93},[76,35715,32088],{"class":250},[76,35717,202],{"class":93},[76,35719,32093],{"class":250},[76,35721,655],{"class":89},[76,35723,7430],{"class":250},[76,35725,32100],{"class":93},[76,35727,32088],{"class":250},[76,35729,202],{"class":93},[76,35731,32107],{"class":250},[76,35733,655],{"class":89},[76,35735,7430],{"class":250},[76,35737,32114],{"class":93},[76,35739,35740,35742,35744,35746,35748,35750],{"class":78,"line":1799},[76,35741,32119],{"class":93},[76,35743,247],{"class":89},[76,35745,32124],{"class":93},[76,35747,31607],{"class":5288},[76,35749,247],{"class":89},[76,35751,31612],{"class":93},[76,35753,35754,35756,35758,35760],{"class":78,"line":1804},[76,35755,32135],{"class":5288},[76,35757,247],{"class":89},[76,35759,32140],{"class":250},[76,35761,31536],{"class":93},[76,35763,35764,35766,35768,35770],{"class":78,"line":1821},[76,35765,32147],{"class":5288},[76,35767,247],{"class":89},[76,35769,31546],{"class":250},[76,35771,31536],{"class":93},[76,35773,35774],{"class":78,"line":1826},[76,35775,32158],{"class":82},[76,35777,35778,35780,35782,35784],{"class":78,"line":1831},[76,35779,32163],{"class":5288},[76,35781,247],{"class":89},[76,35783,595],{"class":250},[76,35785,208],{"class":93},[76,35787,35788,35790,35792,35794,35796,35798],{"class":78,"line":1836},[76,35789,32174],{"class":93},[76,35791,247],{"class":89},[76,35793,31604],{"class":93},[76,35795,31607],{"class":5288},[76,35797,247],{"class":89},[76,35799,32185],{"class":93},[76,35801,35802,35804,35806,35808],{"class":78,"line":1850},[76,35803,32190],{"class":5288},[76,35805,247],{"class":89},[76,35807,32140],{"class":250},[76,35809,31536],{"class":93},[76,35811,35812,35814,35816,35818],{"class":78,"line":1855},[76,35813,32201],{"class":5288},[76,35815,247],{"class":89},[76,35817,31546],{"class":250},[76,35819,31536],{"class":93},[76,35821,35822,35824,35826,35828],{"class":78,"line":2649},[76,35823,32212],{"class":5288},[76,35825,247],{"class":89},[76,35827,595],{"class":250},[76,35829,208],{"class":93},[76,35831,35832,35834],{"class":78,"line":2663},[76,35833,4162],{"class":89},[76,35835,32225],{"class":93},[76,35837,35838],{"class":78,"line":2671},[76,35839,2472],{"emptyLinePlaceholder":125},[76,35841,35842],{"class":78,"line":2676},[76,35843,32234],{"class":82},[76,35845,35846],{"class":78,"line":2682},[76,35847,32239],{"class":82},[76,35849,35850],{"class":78,"line":2688},[76,35851,2472],{"emptyLinePlaceholder":125},[76,35853,35854],{"class":78,"line":2693},[76,35855,32248],{"class":82},[76,35857,35858,35860,35862],{"class":78,"line":8020},[76,35859,32017],{"class":89},[76,35861,32255],{"class":2035},[76,35863,32258],{"class":93},[76,35865,35866,35868,35870,35872,35874,35876,35878,35880,35882],{"class":78,"line":8044},[76,35867,31307],{"class":93},[76,35869,247],{"class":89},[76,35871,30521],{"class":93},[76,35873,31314],{"class":305},[76,35875,1776],{"class":89},[76,35877,31319],{"class":93},[76,35879,1773],{"class":89},[76,35881,32277],{"class":305},[76,35883,208],{"class":93},[76,35885,35886],{"class":78,"line":8049},[76,35887,2472],{"emptyLinePlaceholder":125},[76,35889,35890],{"class":78,"line":8055},[76,35891,2472],{"emptyLinePlaceholder":125},[76,35893,35894],{"class":78,"line":8082},[76,35895,32292],{"class":82},[76,35897,35898],{"class":78,"line":8087},[76,35899,32297],{"class":82},[76,35901,35902],{"class":78,"line":8093},[76,35903,32302],{"class":82},[76,35905,35906,35908,35910,35912,35914,35916,35918],{"class":78,"line":8105},[76,35907,32307],{"class":93},[76,35909,247],{"class":89},[76,35911,32312],{"class":93},[76,35913,32315],{"class":5288},[76,35915,247],{"class":89},[76,35917,32320],{"class":250},[76,35919,208],{"class":93},[76,35921,35922],{"class":78,"line":8117},[76,35923,2472],{"emptyLinePlaceholder":125},[76,35925,35926],{"class":78,"line":8129},[76,35927,32331],{"class":82},[76,35929,35930,35932,35934],{"class":78,"line":9788},[76,35931,32336],{"class":93},[76,35933,247],{"class":89},[76,35935,32341],{"class":93},[76,35937,35938],{"class":78,"line":9813},[76,35939,2472],{"emptyLinePlaceholder":125},[76,35941,35942],{"class":78,"line":9836},[76,35943,32350],{"class":82},[76,35945,35946,35948,35950],{"class":78,"line":9860},[76,35947,31359],{"class":93},[76,35949,247],{"class":89},[76,35951,32359],{"class":93},[76,35953,35954],{"class":78,"line":9865},[76,35955,32364],{"class":82},[76,35957,35958],{"class":78,"line":9870},[76,35959,32369],{"class":82},[76,35961,35962],{"class":78,"line":9875},[76,35963,32374],{"class":82},[76,35965,35966,35968,35970],{"class":78,"line":9884},[76,35967,32379],{"class":93},[76,35969,247],{"class":89},[76,35971,32384],{"class":93},[76,35973,35974],{"class":78,"line":9889},[76,35975,2472],{"emptyLinePlaceholder":125},[76,35977,35978],{"class":78,"line":9895},[76,35979,2472],{"emptyLinePlaceholder":125},[76,35981,35982],{"class":78,"line":9916},[76,35983,32397],{"class":82},[76,35985,35986],{"class":78,"line":9922},[76,35987,32402],{"class":82},[76,35989,35990,35992,35994],{"class":78,"line":9936},[76,35991,32407],{"class":93},[76,35993,247],{"class":89},[76,35995,32412],{"class":250},[76,35997,35998],{"class":78,"line":9942},[76,35999,32417],{"class":82},[76,36001,36002,36004,36006],{"class":78,"line":9969},[76,36003,32422],{"class":93},[76,36005,247],{"class":89},[76,36007,32427],{"class":93},[76,36009,36010],{"class":78,"line":9978},[76,36011,32432],{"class":82},[76,36013,36014,36016,36018],{"class":78,"line":9984},[76,36015,32437],{"class":93},[76,36017,247],{"class":89},[76,36019,32427],{"class":93},[76,36021,36022],{"class":78,"line":9992},[76,36023,32446],{"class":82},[76,36025,36026,36028,36030],{"class":78,"line":9997},[76,36027,32451],{"class":93},[76,36029,247],{"class":89},[76,36031,32427],{"class":93},[76,36033,36034],{"class":78,"line":16676},[76,36035,32460],{"class":82},[76,36037,36038,36040,36042],{"class":78,"line":16682},[76,36039,32465],{"class":93},[76,36041,247],{"class":89},[76,36043,32427],{"class":93},[76,36045,36046],{"class":78,"line":16705},[76,36047,2472],{"emptyLinePlaceholder":125},[76,36049,36050],{"class":78,"line":16711},[76,36051,32478],{"class":82},[76,36053,36054,36056,36058],{"class":78,"line":16734},[76,36055,32483],{"class":93},[76,36057,247],{"class":89},[76,36059,32488],{"class":93},[76,36061,36062],{"class":78,"line":16748},[76,36063,2472],{"emptyLinePlaceholder":125},[76,36065,36066],{"class":78,"line":16768},[76,36067,2472],{"emptyLinePlaceholder":125},[76,36069,36070],{"class":78,"line":16774},[76,36071,32501],{"class":82},[76,36073,36074,36076,36078,36080,36082],{"class":78,"line":16785},[76,36075,3273],{"class":89},[76,36077,32508],{"class":93},[76,36079,26116],{"class":89},[76,36081,32513],{"class":250},[76,36083,32516],{"class":93},[76,36085,36086,36088,36090,36092,36094,36096,36098,36100,36102,36104,36106],{"class":78,"line":16808},[76,36087,32521],{"class":250},[76,36089,202],{"class":93},[76,36091,32526],{"class":305},[76,36093,32529],{"class":250},[76,36095,783],{"class":305},[76,36097,32529],{"class":250},[76,36099,452],{"class":305},[76,36101,32538],{"class":93},[76,36103,112],{"class":89},[76,36105,418],{"class":250},[76,36107,30567],{"class":93},[76,36109,36110,36112,36114,36116,36118,36120],{"class":78,"line":16830},[76,36111,32521],{"class":250},[76,36113,202],{"class":93},[76,36115,32553],{"class":305},[76,36117,655],{"class":89},[76,36119,646],{"class":250},[76,36121,208],{"class":93},[76,36123,36124],{"class":78,"line":16835},[76,36125,2472],{"emptyLinePlaceholder":125},[76,36127,36128],{"class":78,"line":16841},[76,36129,32568],{"class":82},[76,36131,36132],{"class":78,"line":16855},[76,36133,32573],{"class":82},[76,36135,36136,36138,36140],{"class":78,"line":16868},[76,36137,32578],{"class":93},[76,36139,247],{"class":89},[76,36141,32412],{"class":250},[76,36143,36144],{"class":78,"line":16873},[76,36145,32587],{"class":82},[76,36147,36148,36150,36152],{"class":78,"line":16887},[76,36149,32592],{"class":93},[76,36151,247],{"class":89},[76,36153,3157],{"class":250},[76,36155,36156],{"class":78,"line":16892},[76,36157,32601],{"class":82},[76,36159,36160,36162,36164],{"class":78,"line":16898},[76,36161,32606],{"class":93},[76,36163,247],{"class":89},[76,36165,32412],{"class":250},[76,36167,36168],{"class":78,"line":16903},[76,36169,32615],{"class":82},[76,36171,36172,36174,36176],{"class":78,"line":16917},[76,36173,32620],{"class":93},[76,36175,247],{"class":89},[76,36177,3157],{"class":250},[76,36179,36180],{"class":78,"line":16922},[76,36181,32629],{"class":82},[76,36183,36184,36186,36188],{"class":78,"line":16927},[76,36185,32634],{"class":93},[76,36187,247],{"class":89},[76,36189,3157],{"class":250},[76,36191,36192],{"class":78,"line":16941},[76,36193,32643],{"class":82},[76,36195,36196,36198,36200],{"class":78,"line":16953},[76,36197,32648],{"class":93},[76,36199,247],{"class":89},[76,36201,3157],{"class":250},[76,36203,36204],{"class":78,"line":16958},[76,36205,32657],{"class":82},[76,36207,36208,36210,36212,36214,36216],{"class":78,"line":16971},[76,36209,3475],{"class":89},[76,36211,31671],{"class":93},[76,36213,26116],{"class":89},[76,36215,31676],{"class":250},[76,36217,32670],{"class":93},[76,36219,36220],{"class":78,"line":16976},[76,36221,32675],{"class":82},[76,36223,36224,36226,36228],{"class":78,"line":16981},[76,36225,32680],{"class":93},[76,36227,247],{"class":89},[76,36229,32685],{"class":93},[76,36231,36232],{"class":78,"line":16986},[76,36233,32690],{"class":82},[76,36235,36236,36238,36240],{"class":78,"line":16999},[76,36237,32695],{"class":93},[76,36239,247],{"class":89},[76,36241,32700],{"class":93},[76,36243,36244],{"class":78,"line":17004},[76,36245,32706],{"class":82},[76,36247,36248],{"class":78,"line":32703},[76,36249,32712],{"class":93},[76,36251,36252],{"class":78,"line":32709},[76,36253,32718],{"class":82},[76,36255,36256],{"class":78,"line":32715},[76,36257,32724],{"class":82},[76,36259,36260,36262,36264],{"class":78,"line":32721},[76,36261,32730],{"class":93},[76,36263,247],{"class":89},[76,36265,32735],{"class":93},[76,36267,36268],{"class":78,"line":32727},[76,36269,32741],{"class":82},[76,36271,36272,36274,36276,36278,36280,36282,36284],{"class":78,"line":32738},[76,36273,32747],{"class":93},[76,36275,247],{"class":89},[76,36277,32752],{"class":93},[76,36279,32755],{"class":5288},[76,36281,247],{"class":89},[76,36283,418],{"class":250},[76,36285,208],{"class":93},[76,36287,36288],{"class":78,"line":32744},[76,36289,32767],{"class":82},[76,36291,36292,36294,36296],{"class":78,"line":32764},[76,36293,32773],{"class":93},[76,36295,247],{"class":89},[76,36297,32778],{"class":93},[76,36299,36300],{"class":78,"line":32770},[76,36301,32784],{"class":82},[76,36303,36304],{"class":78,"line":32781},[76,36305,32790],{"class":93},[76,36307,36308],{"class":78,"line":32787},[76,36309,32796],{"class":82},[76,36311,36312],{"class":78,"line":32793},[76,36313,32802],{"class":93},[76,36315,36316],{"class":78,"line":32799},[76,36317,32808],{"class":82},[76,36319,36320],{"class":78,"line":32805},[76,36321,32814],{"class":93},[76,36323,36324],{"class":78,"line":32811},[76,36325,32820],{"class":82},[76,36327,36328,36330,36332,36334,36336,36338,36340],{"class":78,"line":32817},[76,36329,32826],{"class":93},[76,36331,9549],{"class":89},[76,36333,32831],{"class":93},[76,36335,655],{"class":89},[76,36337,32836],{"class":93},[76,36339,392],{"class":250},[76,36341,208],{"class":93},[76,36343,36344],{"class":78,"line":32823},[76,36345,32846],{"class":82},[76,36347,36348,36350,36352,36354,36356],{"class":78,"line":32843},[76,36349,32852],{"class":93},[76,36351,9549],{"class":89},[76,36353,32857],{"class":93},[76,36355,3021],{"class":89},[76,36357,32862],{"class":93},[76,36359,36360],{"class":78,"line":32849},[76,36361,32868],{"class":82},[76,36363,36364,36366,36368,36370,36372],{"class":78,"line":32865},[76,36365,32874],{"class":93},[76,36367,9549],{"class":89},[76,36369,32836],{"class":93},[76,36371,392],{"class":250},[76,36373,208],{"class":93},[76,36375,36376],{"class":78,"line":32871},[76,36377,32888],{"class":82},[76,36379,36380,36382,36384,36386,36388],{"class":78,"line":32885},[76,36381,3475],{"class":89},[76,36383,32896],{"class":93},[76,36385,26116],{"class":89},[76,36387,31676],{"class":250},[76,36389,32903],{"class":93},[76,36391,36392],{"class":78,"line":32891},[76,36393,32909],{"class":82},[76,36395,36396,36398,36400],{"class":78,"line":32906},[76,36397,32680],{"class":93},[76,36399,247],{"class":89},[76,36401,32685],{"class":93},[76,36403,36404],{"class":78,"line":32912},[76,36405,32924],{"class":82},[76,36407,36408,36410,36412],{"class":78,"line":32921},[76,36409,32695],{"class":93},[76,36411,247],{"class":89},[76,36413,32700],{"class":93},[76,36415,36416],{"class":78,"line":32927},[76,36417,32939],{"class":82},[76,36419,36420],{"class":78,"line":32936},[76,36421,32945],{"class":93},[76,36423,36424],{"class":78,"line":32942},[76,36425,36426],{"class":82},"            # 验证时不计算梯度以节省内存\u002F计算\n",[76,36428,36429,36431],{"class":78,"line":32948},[76,36430,32951],{"class":89},[76,36432,32954],{"class":93},[76,36434,36435],{"class":78,"line":32957},[76,36436,32960],{"class":82},[76,36438,36439,36442,36444],{"class":78,"line":32963},[76,36440,36441],{"class":93},"                output",[76,36443,247],{"class":89},[76,36445,32735],{"class":93},[76,36447,36448],{"class":78,"line":32974},[76,36449,32977],{"class":82},[76,36451,36452,36455,36457,36459,36461,36463,36465],{"class":78,"line":32980},[76,36453,36454],{"class":93},"                pre_lab",[76,36456,247],{"class":89},[76,36458,32752],{"class":93},[76,36460,32755],{"class":5288},[76,36462,247],{"class":89},[76,36464,418],{"class":250},[76,36466,208],{"class":93},[76,36468,36469],{"class":78,"line":32999},[76,36470,33002],{"class":82},[76,36472,36473,36476,36478],{"class":78,"line":33005},[76,36474,36475],{"class":93},"                val_batch_loss",[76,36477,247],{"class":89},[76,36479,32778],{"class":93},[76,36481,36482],{"class":78,"line":33016},[76,36483,33019],{"class":82},[76,36485,36486,36489,36491,36494,36496,36498,36500],{"class":78,"line":33022},[76,36487,36488],{"class":93},"                val_loss",[76,36490,9549],{"class":89},[76,36492,36493],{"class":93},"val_batch_loss.item()",[76,36495,655],{"class":89},[76,36497,32836],{"class":93},[76,36499,392],{"class":250},[76,36501,208],{"class":93},[76,36503,36504,36507,36509,36511,36513],{"class":78,"line":33042},[76,36505,36506],{"class":93},"                val_corrects",[76,36508,9549],{"class":89},[76,36510,32857],{"class":93},[76,36512,3021],{"class":89},[76,36514,32862],{"class":93},[76,36516,36517],{"class":78,"line":33058},[76,36518,36519],{"class":82},"            # 当前用于验证的样本数量\n",[76,36521,36522,36525,36527,36529,36531],{"class":78,"line":33064},[76,36523,36524],{"class":93},"            val_num",[76,36526,9549],{"class":89},[76,36528,32836],{"class":93},[76,36530,392],{"class":250},[76,36532,208],{"class":93},[76,36534,36535],{"class":78,"line":33078},[76,36536,33081],{"class":82},[76,36538,36539],{"class":78,"line":33084},[76,36540,33087],{"class":82},[76,36542,36543,36545,36547],{"class":78,"line":33090},[76,36544,33093],{"class":93},[76,36546,783],{"class":89},[76,36548,33098],{"class":93},[76,36550,36551],{"class":78,"line":33101},[76,36552,33104],{"class":82},[76,36554,36555],{"class":78,"line":33107},[76,36556,33110],{"class":82},[76,36558,36559,36561,36563],{"class":78,"line":33113},[76,36560,33116],{"class":93},[76,36562,783],{"class":89},[76,36564,33098],{"class":93},[76,36566,36567],{"class":78,"line":33123},[76,36568,33126],{"class":82},[76,36570,36571,36573,36575],{"class":78,"line":33129},[76,36572,33132],{"class":93},[76,36574,783],{"class":89},[76,36576,33137],{"class":93},[76,36578,36579],{"class":78,"line":33140},[76,36580,33143],{"class":82},[76,36582,36583,36585,36587],{"class":78,"line":33146},[76,36584,33149],{"class":93},[76,36586,783],{"class":89},[76,36588,33137],{"class":93},[76,36590,36591],{"class":78,"line":33156},[76,36592,2472],{"emptyLinePlaceholder":125},[76,36594,36595],{"class":78,"line":33161},[76,36596,33164],{"class":82},[76,36598,36599,36601,36603,36605,36607,36609,36611,36613,36615,36617,36619,36621,36623,36625,36627,36629,36631,36633,36635,36637],{"class":78,"line":33167},[76,36600,32521],{"class":250},[76,36602,202],{"class":93},[76,36604,3664],{"class":305},[76,36606,32529],{"class":250},[76,36608,33178],{"class":305},[76,36610,1095],{"class":250},[76,36612,33183],{"class":89},[76,36614,1145],{"class":250},[76,36616,33188],{"class":305},[76,36618,1095],{"class":250},[76,36620,33183],{"class":89},[76,36622,1145],{"class":250},[76,36624,3664],{"class":305},[76,36626,33199],{"class":93},[76,36628,112],{"class":89},[76,36630,418],{"class":250},[76,36632,33206],{"class":93},[76,36634,112],{"class":89},[76,36636,418],{"class":250},[76,36638,33213],{"class":93},[76,36640,36641,36643,36645,36647,36649,36651,36653,36655,36657,36659,36661,36663,36665,36667,36669,36671,36673,36675,36677,36679],{"class":78,"line":33216},[76,36642,32521],{"class":250},[76,36644,202],{"class":93},[76,36646,3664],{"class":305},[76,36648,32529],{"class":250},[76,36650,33227],{"class":305},[76,36652,1095],{"class":250},[76,36654,33183],{"class":89},[76,36656,1145],{"class":250},[76,36658,33236],{"class":305},[76,36660,1095],{"class":250},[76,36662,33183],{"class":89},[76,36664,1145],{"class":250},[76,36666,3664],{"class":305},[76,36668,33247],{"class":93},[76,36670,112],{"class":89},[76,36672,418],{"class":250},[76,36674,33254],{"class":93},[76,36676,112],{"class":89},[76,36678,418],{"class":250},[76,36680,33213],{"class":93},[76,36682,36683],{"class":78,"line":33263},[76,36684,2472],{"emptyLinePlaceholder":125},[76,36686,36687],{"class":78,"line":33268},[76,36688,33271],{"class":82},[76,36690,36691,36693,36695,36697,36699,36701,36703],{"class":78,"line":33274},[76,36692,2569],{"class":89},[76,36694,33279],{"class":93},[76,36696,112],{"class":89},[76,36698,418],{"class":250},[76,36700,1139],{"class":93},[76,36702,1159],{"class":89},[76,36704,33290],{"class":93},[76,36706,36707],{"class":78,"line":33293},[76,36708,33296],{"class":82},[76,36710,36711,36713,36715,36717,36719,36721,36723],{"class":78,"line":33299},[76,36712,33302],{"class":93},[76,36714,241],{"class":250},[76,36716,247],{"class":89},[76,36718,33309],{"class":93},[76,36720,112],{"class":89},[76,36722,418],{"class":250},[76,36724,33316],{"class":93},[76,36726,36727],{"class":78,"line":33319},[76,36728,33322],{"class":82},[76,36730,36731],{"class":78,"line":33325},[76,36732,33328],{"class":82},[76,36734,36735,36737,36739],{"class":78,"line":33331},[76,36736,33334],{"class":93},[76,36738,247],{"class":89},[76,36740,32384],{"class":93},[76,36742,36743],{"class":78,"line":33341},[76,36744,2472],{"emptyLinePlaceholder":125},[76,36746,36747],{"class":78,"line":33346},[76,36748,33349],{"class":82},[76,36750,36751,36753,36755,36757,36759],{"class":78,"line":33352},[76,36752,33355],{"class":93},[76,36754,247],{"class":89},[76,36756,33360],{"class":93},[76,36758,112],{"class":89},[76,36760,33365],{"class":93},[76,36762,36763,36765,36767,36769,36771,36773,36775,36777,36779,36781,36783,36785,36787,36789,36791,36793,36795,36797],{"class":78,"line":33368},[76,36764,32521],{"class":250},[76,36766,202],{"class":93},[76,36768,33375],{"class":305},[76,36770,1095],{"class":250},[76,36772,33380],{"class":89},[76,36774,1145],{"class":250},[76,36776,743],{"class":305},[76,36778,1095],{"class":250},[76,36780,33380],{"class":89},[76,36782,1145],{"class":250},[76,36784,33393],{"class":305},[76,36786,33396],{"class":93},[76,36788,33399],{"class":89},[76,36790,1106],{"class":250},[76,36792,33404],{"class":93},[76,36794,106],{"class":89},[76,36796,1106],{"class":250},[76,36798,30567],{"class":93},[76,36800,36801],{"class":78,"line":33413},[76,36802,36803],{"class":82},"    # 选择最优参数并保存\n",[76,36805,36806],{"class":78,"line":33419},[76,36807,36808],{"class":82},"    # 保存最佳模型权重字典\n",[76,36810,36811,36814,36816],{"class":78,"line":33425},[76,36812,36813],{"class":93},"    torch.save(best_model_wts,",[76,36815,33437],{"class":305},[76,36817,208],{"class":93},[76,36819,36820],{"class":78,"line":33431},[76,36821,33457],{"class":82},[76,36823,36824,36826,36828,36830,36832,36834],{"class":78,"line":33442},[76,36825,33463],{"class":93},[76,36827,247],{"class":89},[76,36829,33468],{"class":93},[76,36831,33471],{"class":5288},[76,36833,247],{"class":89},[76,36835,1618],{"class":93},[76,36837,36838,36840,36842,36844],{"class":78,"line":33448},[76,36839,33481],{"class":305},[76,36841,1058],{"class":93},[76,36843,33486],{"class":250},[76,36845,33489],{"class":93},[76,36847,36848,36850],{"class":78,"line":33454},[76,36849,33495],{"class":305},[76,36851,33498],{"class":93},[76,36853,36854,36856],{"class":78,"line":33460},[76,36855,33504],{"class":305},[76,36857,33507],{"class":93},[76,36859,36860,36862],{"class":78,"line":33478},[76,36861,33513],{"class":305},[76,36863,33516],{"class":93},[76,36865,36866,36868],{"class":78,"line":33492},[76,36867,33522],{"class":305},[76,36869,33525],{"class":93},[76,36871,36872],{"class":78,"line":33501},[76,36873,33531],{"class":93},[76,36875,36876],{"class":78,"line":33510},[76,36877,33537],{"class":82},[76,36879,36880,36882],{"class":78,"line":33519},[76,36881,4162],{"class":89},[76,36883,33545],{"class":93},[76,36885,36886],{"class":78,"line":33528},[76,36887,2472],{"emptyLinePlaceholder":125},[76,36889,36890],{"class":78,"line":33534},[76,36891,33556],{"class":82},[76,36893,36894,36896,36898],{"class":78,"line":33540},[76,36895,32017],{"class":89},[76,36897,33564],{"class":2035},[76,36899,33567],{"class":93},[76,36901,36902],{"class":78,"line":33548},[76,36903,33573],{"class":82},[76,36905,36906,36908,36910,36912,36914,36916,36918,36920],{"class":78,"line":33553},[76,36907,33579],{"class":93},[76,36909,31763],{"class":5288},[76,36911,247],{"class":89},[76,36913,202],{"class":93},[76,36915,698],{"class":250},[76,36917,578],{"class":93},[76,36919,494],{"class":250},[76,36921,30567],{"class":93},[76,36923,36924],{"class":78,"line":33559},[76,36925,33599],{"class":82},[76,36927,36928],{"class":78,"line":33570},[76,36929,33605],{"class":82},[76,36931,36932],{"class":78,"line":33576},[76,36933,33611],{"class":82},[76,36935,36936,36938,36940,36942,36944,36946,36948],{"class":78,"line":33596},[76,36937,31797],{"class":93},[76,36939,418],{"class":250},[76,36941,578],{"class":93},[76,36943,278],{"class":250},[76,36945,578],{"class":93},[76,36947,418],{"class":250},[76,36949,208],{"class":93},[76,36951,36952],{"class":78,"line":33602},[76,36953,33634],{"class":82},[76,36955,36956],{"class":78,"line":33608},[76,36957,33640],{"class":82},[76,36959,36960],{"class":78,"line":33614},[76,36961,33646],{"class":82},[76,36963,36964],{"class":78,"line":33631},[76,36965,33652],{"class":82},[76,36967,36968],{"class":78,"line":33637},[76,36969,33658],{"class":82},[76,36971,36972,36974,36976,36978,36980,36982,36984,36986,36988],{"class":78,"line":33643},[76,36973,33664],{"class":93},[76,36975,33667],{"class":305},[76,36977,33670],{"class":93},[76,36979,33673],{"class":305},[76,36981,578],{"class":93},[76,36983,33678],{"class":5288},[76,36985,247],{"class":89},[76,36987,33683],{"class":305},[76,36989,208],{"class":93},[76,36991,36992,36994,36996,36998,37000,37002,37004,37006,37008],{"class":78,"line":33649},[76,36993,33664],{"class":93},[76,36995,33667],{"class":305},[76,36997,33695],{"class":93},[76,36999,33698],{"class":305},[76,37001,578],{"class":93},[76,37003,33678],{"class":5288},[76,37005,247],{"class":89},[76,37007,33707],{"class":305},[76,37009,208],{"class":93},[76,37011,37012],{"class":78,"line":33655},[76,37013,33715],{"class":82},[76,37015,37016],{"class":78,"line":33661},[76,37017,33721],{"class":93},[76,37019,37020],{"class":78,"line":33688},[76,37021,33727],{"class":82},[76,37023,37024,37026,37028],{"class":78,"line":33712},[76,37025,33733],{"class":93},[76,37027,33736],{"class":305},[76,37029,208],{"class":93},[76,37031,37032,37034,37036],{"class":78,"line":33718},[76,37033,33744],{"class":93},[76,37035,33747],{"class":305},[76,37037,208],{"class":93},[76,37039,37040],{"class":78,"line":33724},[76,37041,33755],{"class":82},[76,37043,37044,37046,37048,37050,37052,37054,37056],{"class":78,"line":33730},[76,37045,31797],{"class":93},[76,37047,418],{"class":250},[76,37049,578],{"class":93},[76,37051,278],{"class":250},[76,37053,578],{"class":93},[76,37055,278],{"class":250},[76,37057,208],{"class":93},[76,37059,37060,37062,37064,37066,37068,37070,37072,37074,37076],{"class":78,"line":33741},[76,37061,33664],{"class":93},[76,37063,33667],{"class":305},[76,37065,33782],{"class":93},[76,37067,33673],{"class":305},[76,37069,578],{"class":93},[76,37071,33678],{"class":5288},[76,37073,247],{"class":89},[76,37075,33793],{"class":305},[76,37077,208],{"class":93},[76,37079,37080,37082,37084,37086,37088,37090,37092,37094,37096],{"class":78,"line":33752},[76,37081,33664],{"class":93},[76,37083,33667],{"class":305},[76,37085,33805],{"class":93},[76,37087,33698],{"class":305},[76,37089,578],{"class":93},[76,37091,33678],{"class":5288},[76,37093,247],{"class":89},[76,37095,33816],{"class":305},[76,37097,208],{"class":93},[76,37099,37100],{"class":78,"line":33758},[76,37101,33824],{"class":82},[76,37103,37104],{"class":78,"line":33775},[76,37105,33721],{"class":93},[76,37107,37108,37110,37112],{"class":78,"line":33798},[76,37109,33733],{"class":93},[76,37111,33667],{"class":305},[76,37113,208],{"class":93},[76,37115,37116,37118,37120],{"class":78,"line":33821},[76,37117,33744],{"class":93},[76,37119,33846],{"class":305},[76,37121,208],{"class":93},[76,37123,37124],{"class":78,"line":33827},[76,37125,33854],{"class":93},[76,37127,37128],{"class":78,"line":33832},[76,37129,2472],{"emptyLinePlaceholder":125},[76,37131,37132],{"class":78,"line":33841},[76,37133,33865],{"class":82},[76,37135,37136,37138,37140,37142,37144],{"class":78,"line":33851},[76,37137,1603],{"class":89},[76,37139,31290],{"class":250},[76,37141,3021],{"class":89},[76,37143,31295],{"class":305},[76,37145,3811],{"class":93},[76,37147,37148],{"class":78,"line":33857},[76,37149,33884],{"class":82},[76,37151,37152,37155,37157],{"class":78,"line":33862},[76,37153,37154],{"class":93},"    AlexNet",[76,37156,247],{"class":89},[76,37158,37159],{"class":93},"AlexNet()\n",[76,37161,37162,37164,37166],{"class":78,"line":33868},[76,37163,33901],{"class":93},[76,37165,247],{"class":89},[76,37167,33906],{"class":93},[76,37169,37170,37172,37174,37177,37179,37181,37183],{"class":78,"line":33881},[76,37171,33463],{"class":93},[76,37173,247],{"class":89},[76,37175,37176],{"class":93},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[76,37178,33919],{"class":5288},[76,37180,247],{"class":89},[76,37182,899],{"class":250},[76,37184,208],{"class":93},[76,37186,37187],{"class":78,"line":33887},[76,37188,33931],{"class":93},[152,37190,37191],{"start":97},[155,37192,33944],{},[67,37194,37196],{"className":69,"code":37195,"language":71,"meta":58,"style":58},"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",[73,37197,37198,37204,37214,37224,37234,37238,37248,37258,37269,37273,37277,37281,37289,37305,37315,37331,37341,37355,37359,37369,37379,37389,37395,37399,37403,37411,37415,37431,37439,37443,37447,37455,37463,37467,37471,37475,37479,37485,37489,37499,37507,37515,37519,37523,37527,37535,37539,37555,37559,37563,37567,37579,37583,37595,37599,37603,37615,37619,37629,37633,37637,37649,37653,37661,37665,37669,37677,37681,37689,37693,37697,37701,37705,37709,37725,37733,37737,37741,37789,37795,37799,37809,37817,37825,37829,37833,37837,37841,37849,37853,37869,37873,37881,37889],{"__ignoreMap":58},[76,37199,37200,37202],{"class":78,"line":79},[76,37201,90],{"class":89},[76,37203,30465],{"class":93},[76,37205,37206,37208,37210,37212],{"class":78,"line":86},[76,37207,90],{"class":89},[76,37209,31485],{"class":93},[76,37211,31453],{"class":89},[76,37213,31490],{"class":93},[76,37215,37216,37218,37220,37222],{"class":78,"line":97},[76,37217,30807],{"class":89},[76,37219,33972],{"class":93},[76,37221,90],{"class":89},[76,37223,33977],{"class":93},[76,37225,37226,37228,37230,37232],{"class":78,"line":103},[76,37227,30807],{"class":89},[76,37229,31468],{"class":93},[76,37231,90],{"class":89},[76,37233,31473],{"class":93},[76,37235,37236],{"class":78,"line":1273},[76,37237,33992],{"class":82},[76,37239,37240,37242,37244,37246],{"class":78,"line":1287},[76,37241,30807],{"class":89},[76,37243,31438],{"class":93},[76,37245,90],{"class":89},[76,37247,31443],{"class":93},[76,37249,37250,37252,37254,37256],{"class":78,"line":1293},[76,37251,30807],{"class":89},[76,37253,31984],{"class":93},[76,37255,90],{"class":89},[76,37257,35627],{"class":93},[76,37259,37260,37262,37265,37267],{"class":78,"line":1384},[76,37261,30807],{"class":89},[76,37263,37264],{"class":93}," 练习.AlexNet.model ",[76,37266,90],{"class":89},[76,37268,35627],{"class":93},[76,37270,37271],{"class":78,"line":1390},[76,37272,2472],{"emptyLinePlaceholder":125},[76,37274,37275],{"class":78,"line":1402},[76,37276,2472],{"emptyLinePlaceholder":125},[76,37278,37279],{"class":78,"line":1684},[76,37280,34021],{"class":82},[76,37282,37283,37285,37287],{"class":78,"line":1689},[76,37284,32017],{"class":89},[76,37286,34028],{"class":2035},[76,37288,32023],{"class":93},[76,37290,37291,37293,37295,37297,37299,37301,37303],{"class":78,"line":1695},[76,37292,34035],{"class":93},[76,37294,247],{"class":89},[76,37296,31525],{"class":93},[76,37298,31528],{"class":5288},[76,37300,247],{"class":89},[76,37302,31533],{"class":305},[76,37304,31536],{"class":93},[76,37306,37307,37309,37311,37313],{"class":78,"line":1700},[76,37308,34052],{"class":5288},[76,37310,247],{"class":89},[76,37312,34057],{"class":250},[76,37314,31536],{"class":93},[76,37316,37317,37319,37321,37323,37325,37327,37329],{"class":78,"line":1714},[76,37318,34064],{"class":5288},[76,37320,247],{"class":89},[76,37322,31563],{"class":93},[76,37324,31566],{"class":5288},[76,37326,247],{"class":89},[76,37328,35519],{"class":250},[76,37330,31574],{"class":93},[76,37332,37333,37335,37337,37339],{"class":78,"line":1719},[76,37334,34081],{"class":5288},[76,37336,247],{"class":89},[76,37338,31546],{"class":250},[76,37340,208],{"class":93},[76,37342,37343,37345,37347,37349,37351,37353],{"class":78,"line":1725},[76,37344,34092],{"class":93},[76,37346,247],{"class":89},[76,37348,31604],{"class":93},[76,37350,31607],{"class":5288},[76,37352,247],{"class":89},[76,37354,34103],{"class":93},[76,37356,37357],{"class":78,"line":1746},[76,37358,34108],{"class":82},[76,37360,37361,37363,37365,37367],{"class":78,"line":1751},[76,37362,34113],{"class":5288},[76,37364,247],{"class":89},[76,37366,418],{"class":250},[76,37368,31536],{"class":93},[76,37370,37371,37373,37375,37377],{"class":78,"line":1765},[76,37372,34124],{"class":5288},[76,37374,247],{"class":89},[76,37376,31546],{"class":250},[76,37378,31536],{"class":93},[76,37380,37381,37383,37385,37387],{"class":78,"line":1770},[76,37382,34135],{"class":5288},[76,37384,247],{"class":89},[76,37386,392],{"class":250},[76,37388,208],{"class":93},[76,37390,37391,37393],{"class":78,"line":1799},[76,37392,4162],{"class":89},[76,37394,34148],{"class":93},[76,37396,37397],{"class":78,"line":1804},[76,37398,2472],{"emptyLinePlaceholder":125},[76,37400,37401],{"class":78,"line":1821},[76,37402,34157],{"class":82},[76,37404,37405,37407,37409],{"class":78,"line":1826},[76,37406,32017],{"class":89},[76,37408,34164],{"class":2035},[76,37410,34167],{"class":93},[76,37412,37413],{"class":78,"line":1831},[76,37414,34172],{"class":82},[76,37416,37417,37419,37421,37423,37425,37427,37429],{"class":78,"line":1836},[76,37418,31307],{"class":93},[76,37420,247],{"class":89},[76,37422,31314],{"class":305},[76,37424,1776],{"class":89},[76,37426,31319],{"class":93},[76,37428,1773],{"class":89},[76,37430,34189],{"class":305},[76,37432,37433,37435,37437],{"class":78,"line":1850},[76,37434,31359],{"class":93},[76,37436,247],{"class":89},[76,37438,32359],{"class":93},[76,37440,37441],{"class":78,"line":1855},[76,37442,2472],{"emptyLinePlaceholder":125},[76,37444,37445],{"class":78,"line":2649},[76,37446,34206],{"class":82},[76,37448,37449,37451,37453],{"class":78,"line":2663},[76,37450,34211],{"class":93},[76,37452,247],{"class":89},[76,37454,32412],{"class":250},[76,37456,37457,37459,37461],{"class":78,"line":2671},[76,37458,34220],{"class":93},[76,37460,247],{"class":89},[76,37462,3157],{"class":250},[76,37464,37465],{"class":78,"line":2676},[76,37466,2472],{"emptyLinePlaceholder":125},[76,37468,37469],{"class":78,"line":2682},[76,37470,34233],{"class":82},[76,37472,37473],{"class":78,"line":2688},[76,37474,34238],{"class":82},[76,37476,37477],{"class":78,"line":2693},[76,37478,34243],{"class":82},[76,37480,37481,37483],{"class":78,"line":8020},[76,37482,34248],{"class":89},[76,37484,32954],{"class":93},[76,37486,37487],{"class":78,"line":8044},[76,37488,34255],{"class":82},[76,37490,37491,37493,37495,37497],{"class":78,"line":8049},[76,37492,3475],{"class":89},[76,37494,34262],{"class":93},[76,37496,26116],{"class":89},[76,37498,34267],{"class":93},[76,37500,37501,37503,37505],{"class":78,"line":8055},[76,37502,34272],{"class":93},[76,37504,247],{"class":89},[76,37506,34277],{"class":93},[76,37508,37509,37511,37513],{"class":78,"line":8082},[76,37510,34282],{"class":93},[76,37512,247],{"class":89},[76,37514,34287],{"class":93},[76,37516,37517],{"class":78,"line":8087},[76,37518,34292],{"class":82},[76,37520,37521],{"class":78,"line":8093},[76,37522,32945],{"class":93},[76,37524,37525],{"class":78,"line":8105},[76,37526,34301],{"class":82},[76,37528,37529,37531,37533],{"class":78,"line":8117},[76,37530,32730],{"class":93},[76,37532,247],{"class":89},[76,37534,34310],{"class":93},[76,37536,37537],{"class":78,"line":8129},[76,37538,34315],{"class":82},[76,37540,37541,37543,37545,37547,37549,37551,37553],{"class":78,"line":9788},[76,37542,32747],{"class":93},[76,37544,247],{"class":89},[76,37546,32752],{"class":93},[76,37548,32755],{"class":5288},[76,37550,247],{"class":89},[76,37552,418],{"class":250},[76,37554,208],{"class":93},[76,37556,37557],{"class":78,"line":9813},[76,37558,34336],{"class":82},[76,37560,37561],{"class":78,"line":9836},[76,37562,34341],{"class":82},[76,37564,37565],{"class":78,"line":9860},[76,37566,34346],{"class":82},[76,37568,37569,37571,37573,37575,37577],{"class":78,"line":9865},[76,37570,34351],{"class":93},[76,37572,9549],{"class":89},[76,37574,32857],{"class":93},[76,37576,3021],{"class":89},[76,37578,34360],{"class":93},[76,37580,37581],{"class":78,"line":9870},[76,37582,34365],{"class":82},[76,37584,37585,37587,37589,37591,37593],{"class":78,"line":9875},[76,37586,34370],{"class":93},[76,37588,9549],{"class":89},[76,37590,34375],{"class":93},[76,37592,392],{"class":250},[76,37594,208],{"class":93},[76,37596,37597],{"class":78,"line":9884},[76,37598,2472],{"emptyLinePlaceholder":125},[76,37600,37601],{"class":78,"line":9889},[76,37602,34388],{"class":82},[76,37604,37605,37607,37609,37611,37613],{"class":78,"line":9895},[76,37606,34393],{"class":93},[76,37608,247],{"class":89},[76,37610,34398],{"class":93},[76,37612,783],{"class":89},[76,37614,34403],{"class":93},[76,37616,37617],{"class":78,"line":9916},[76,37618,34408],{"class":82},[76,37620,37621,37623,37625,37627],{"class":78,"line":9922},[76,37622,32521],{"class":250},[76,37624,202],{"class":93},[76,37626,34417],{"class":305},[76,37628,34420],{"class":93},[76,37630,37631],{"class":78,"line":9936},[76,37632,2472],{"emptyLinePlaceholder":125},[76,37634,37635],{"class":78,"line":9942},[76,37636,34429],{"class":82},[76,37638,37639,37641,37643,37645,37647],{"class":78,"line":9969},[76,37640,1603],{"class":89},[76,37642,31290],{"class":250},[76,37644,3021],{"class":89},[76,37646,31295],{"class":305},[76,37648,3811],{"class":93},[76,37650,37651],{"class":78,"line":9978},[76,37652,34446],{"class":82},[76,37654,37655,37657,37659],{"class":78,"line":9984},[76,37656,31359],{"class":93},[76,37658,247],{"class":89},[76,37660,37159],{"class":93},[76,37662,37663],{"class":78,"line":9992},[76,37664,34459],{"class":82},[76,37666,37667],{"class":78,"line":9997},[76,37668,34464],{"class":82},[76,37670,37671,37673,37675],{"class":78,"line":16676},[76,37672,34469],{"class":93},[76,37674,34472],{"class":305},[76,37676,30567],{"class":93},[76,37678,37679],{"class":78,"line":16682},[76,37680,34479],{"class":82},[76,37682,37683,37685,37687],{"class":78,"line":16705},[76,37684,34092],{"class":93},[76,37686,247],{"class":89},[76,37688,34488],{"class":93},[76,37690,37691],{"class":78,"line":16711},[76,37692,34493],{"class":82},[76,37694,37695],{"class":78,"line":16734},[76,37696,34498],{"class":93},[76,37698,37699],{"class":78,"line":16748},[76,37700,2472],{"emptyLinePlaceholder":125},[76,37702,37703],{"class":78,"line":16768},[76,37704,34507],{"class":82},[76,37706,37707],{"class":78,"line":16774},[76,37708,34512],{"class":82},[76,37710,37711,37713,37715,37717,37719,37721,37723],{"class":78,"line":16785},[76,37712,31307],{"class":93},[76,37714,247],{"class":89},[76,37716,31314],{"class":305},[76,37718,1776],{"class":89},[76,37720,31319],{"class":93},[76,37722,1773],{"class":89},[76,37724,34189],{"class":305},[76,37726,37727,37729,37731],{"class":78,"line":16808},[76,37728,31359],{"class":93},[76,37730,247],{"class":89},[76,37732,32359],{"class":93},[76,37734,37735],{"class":78,"line":16830},[76,37736,34541],{"class":82},[76,37738,37739],{"class":78,"line":16835},[76,37740,34546],{"class":82},[76,37742,37743,37745,37747,37749,37751,37753,37755,37757,37759,37761,37763,37765,37767,37769,37771,37773,37775,37777,37779,37781,37783,37785,37787],{"class":78,"line":16841},[76,37744,34551],{"class":93},[76,37746,247],{"class":89},[76,37748,1089],{"class":93},[76,37750,34558],{"class":305},[76,37752,578],{"class":93},[76,37754,34563],{"class":305},[76,37756,578],{"class":93},[76,37758,34568],{"class":305},[76,37760,578],{"class":93},[76,37762,34573],{"class":305},[76,37764,578],{"class":93},[76,37766,34578],{"class":305},[76,37768,578],{"class":93},[76,37770,34583],{"class":305},[76,37772,578],{"class":93},[76,37774,34588],{"class":305},[76,37776,578],{"class":93},[76,37778,34593],{"class":305},[76,37780,578],{"class":93},[76,37782,34598],{"class":305},[76,37784,578],{"class":93},[76,37786,34603],{"class":305},[76,37788,33316],{"class":93},[76,37790,37791,37793],{"class":78,"line":16855},[76,37792,34248],{"class":89},[76,37794,32954],{"class":93},[76,37796,37797],{"class":78,"line":16868},[76,37798,34616],{"class":82},[76,37800,37801,37803,37805,37807],{"class":78,"line":16873},[76,37802,3475],{"class":89},[76,37804,34623],{"class":93},[76,37806,26116],{"class":89},[76,37808,34267],{"class":93},[76,37810,37811,37813,37815],{"class":78,"line":16887},[76,37812,32680],{"class":93},[76,37814,247],{"class":89},[76,37816,32685],{"class":93},[76,37818,37819,37821,37823],{"class":78,"line":16892},[76,37820,32695],{"class":93},[76,37822,247],{"class":89},[76,37824,32700],{"class":93},[76,37826,37827],{"class":78,"line":16898},[76,37828,2472],{"emptyLinePlaceholder":125},[76,37830,37831],{"class":78,"line":16903},[76,37832,34652],{"class":82},[76,37834,37835],{"class":78,"line":16917},[76,37836,32945],{"class":93},[76,37838,37839],{"class":78,"line":16922},[76,37840,34661],{"class":82},[76,37842,37843,37845,37847],{"class":78,"line":16927},[76,37844,32730],{"class":93},[76,37846,247],{"class":89},[76,37848,32735],{"class":93},[76,37850,37851],{"class":78,"line":16941},[76,37852,34674],{"class":82},[76,37854,37855,37857,37859,37861,37863,37865,37867],{"class":78,"line":16953},[76,37856,32747],{"class":93},[76,37858,247],{"class":89},[76,37860,32752],{"class":93},[76,37862,32755],{"class":5288},[76,37864,247],{"class":89},[76,37866,418],{"class":250},[76,37868,208],{"class":93},[76,37870,37871],{"class":78,"line":16958},[76,37872,34695],{"class":82},[76,37874,37875,37877,37879],{"class":78,"line":16971},[76,37876,34700],{"class":93},[76,37878,247],{"class":89},[76,37880,34705],{"class":93},[76,37882,37883,37885,37887],{"class":78,"line":16976},[76,37884,34710],{"class":93},[76,37886,247],{"class":89},[76,37888,34715],{"class":93},[76,37890,37891,37893,37895,37897,37899,37901,37903,37905],{"class":78,"line":16981},[76,37892,34720],{"class":250},[76,37894,202],{"class":93},[76,37896,34725],{"class":305},[76,37898,34728],{"class":93},[76,37900,34731],{"class":305},[76,37902,578],{"class":93},[76,37904,34736],{"class":305},[76,37906,34739],{"class":93},[169,37908,37910],{"id":37909},"_22vgg","2.2.VGG",[22070,37912,37914],{"id":37913},"_221原理","2.2.1.原理",[14,37916,37917],{},[56,37918],{"alt":58,"src":37919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,37921,37922],{},[56,37923],{"alt":58,"src":37924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,37926,37927],{},[56,37928],{"alt":58,"src":37929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,37931,37932],{},"参数详细描述：",[14,37934,37935],{},[56,37936],{"alt":58,"src":37937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,37939,37940],{},[56,37941],{"alt":58,"src":37942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,37944,37945],{},[56,37946],{"alt":58,"src":37947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,37949,37950],{},[56,37951],{"alt":58,"src":37952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,37954,37955],{},[56,37956],{"alt":58,"src":37957},"\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",[22070,37959,37961],{"id":37960},"_222代码实现","2.2.2.代码实现",[152,37963,37964],{},[155,37965,37966],{},"网络搭建",[67,37968,37970],{"className":69,"code":37969,"language":71,"meta":58,"style":58},"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",[73,37971,37972,37978,37990,38000,38010,38014,38031,38039,38058,38063,38068,38080,38118,38123,38159,38163,38192,38197,38202,38213,38249,38253,38289,38293,38321,38325,38330,38341,38377,38381,38417,38421,38457,38461,38489,38493,38498,38509,38546,38550,38586,38590,38626,38630,38658,38662,38667,38678,38714,38718,38754,38758,38794,38798,38826,38830,38835,38846,38851,38856,38861,38882,38886,38898,38902,38914,38918,38922,38927,38932,38947,38952,38962,38967,38982,38987,39006,39011,39020,39025,39035,39040,39045,39059,39064,39078,39086,39090,39094,39102,39113,39124,39135,39146,39157,39168,39174,39178,39183,39196,39216,39222,39231],{"__ignoreMap":58},[76,37973,37974,37976],{"class":78,"line":79},[76,37975,90],{"class":89},[76,37977,30465],{"class":93},[76,37979,37980,37982,37985,37987],{"class":78,"line":86},[76,37981,30807],{"class":89},[76,37983,37984],{"class":93}," sympy.core.sympify ",[76,37986,90],{"class":89},[76,37988,37989],{"class":93}," kernS\n",[76,37991,37992,37994,37996,37998],{"class":78,"line":97},[76,37993,30807],{"class":89},[76,37995,30810],{"class":93},[76,37997,90],{"class":89},[76,37999,30815],{"class":93},[76,38001,38002,38004,38006,38008],{"class":78,"line":103},[76,38003,30807],{"class":89},[76,38005,30827],{"class":93},[76,38007,90],{"class":89},[76,38009,30832],{"class":93},[76,38011,38012],{"class":78,"line":1273},[76,38013,2472],{"emptyLinePlaceholder":125},[76,38015,38016,38018,38021,38023,38025,38027,38029],{"class":78,"line":1287},[76,38017,14766],{"class":89},[76,38019,38020],{"class":2035}," VGG16",[76,38022,202],{"class":93},[76,38024,30848],{"class":2035},[76,38026,757],{"class":93},[76,38028,30853],{"class":2035},[76,38030,30856],{"class":93},[76,38032,38033,38035,38037],{"class":78,"line":1293},[76,38034,30871],{"class":89},[76,38036,30874],{"class":250},[76,38038,30877],{"class":93},[76,38040,38041,38043,38045,38048,38050,38052,38054,38056],{"class":78,"line":1384},[76,38042,30887],{"class":250},[76,38044,202],{"class":93},[76,38046,38047],{"class":250},"VGG16",[76,38049,12507],{"class":93},[76,38051,30893],{"class":250},[76,38053,30896],{"class":93},[76,38055,30899],{"class":250},[76,38057,2048],{"class":93},[76,38059,38060],{"class":78,"line":1390},[76,38061,38062],{"class":82},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[76,38064,38065],{"class":78,"line":1402},[76,38066,38067],{"class":82},"        # 这里用的是灰度图\n",[76,38069,38070,38072,38075,38077],{"class":78,"line":1684},[76,38071,30915],{"class":250},[76,38073,38074],{"class":93},".block1",[76,38076,247],{"class":89},[76,38078,38079],{"class":93},"nn.Sequential(\n",[76,38081,38082,38085,38087,38089,38091,38093,38095,38097,38099,38101,38103,38105,38107,38109,38111,38113,38115],{"class":78,"line":1689},[76,38083,38084],{"class":93},"            nn.Conv2d(",[76,38086,30926],{"class":5288},[76,38088,247],{"class":89},[76,38090,418],{"class":250},[76,38092,578],{"class":93},[76,38094,30935],{"class":5288},[76,38096,247],{"class":89},[76,38098,404],{"class":250},[76,38100,578],{"class":93},[76,38102,30944],{"class":5288},[76,38104,247],{"class":89},[76,38106,272],{"class":250},[76,38108,578],{"class":93},[76,38110,30953],{"class":5288},[76,38112,247],{"class":89},[76,38114,418],{"class":250},[76,38116,38117],{"class":93},"),\n",[76,38119,38120],{"class":78,"line":1695},[76,38121,38122],{"class":93},"            nn.ReLU(),\n",[76,38124,38125,38127,38129,38131,38133,38135,38137,38139,38141,38143,38145,38147,38149,38151,38153,38155,38157],{"class":78,"line":1700},[76,38126,38084],{"class":93},[76,38128,30926],{"class":5288},[76,38130,247],{"class":89},[76,38132,404],{"class":250},[76,38134,578],{"class":93},[76,38136,30935],{"class":5288},[76,38138,247],{"class":89},[76,38140,404],{"class":250},[76,38142,578],{"class":93},[76,38144,30944],{"class":5288},[76,38146,247],{"class":89},[76,38148,272],{"class":250},[76,38150,578],{"class":93},[76,38152,30953],{"class":5288},[76,38154,247],{"class":89},[76,38156,418],{"class":250},[76,38158,38117],{"class":93},[76,38160,38161],{"class":78,"line":1714},[76,38162,38122],{"class":93},[76,38164,38165,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190],{"class":78,"line":1719},[76,38166,38167],{"class":93},"            nn.MaxPool2d(",[76,38169,30944],{"class":5288},[76,38171,247],{"class":89},[76,38173,278],{"class":250},[76,38175,578],{"class":93},[76,38177,30999],{"class":5288},[76,38179,247],{"class":89},[76,38181,278],{"class":250},[76,38183,578],{"class":93},[76,38185,30953],{"class":5288},[76,38187,247],{"class":89},[76,38189,392],{"class":250},[76,38191,208],{"class":93},[76,38193,38194],{"class":78,"line":1725},[76,38195,38196],{"class":93},"        )\n",[76,38198,38199],{"class":78,"line":1746},[76,38200,38201],{"class":82},"        # 第二层\n",[76,38203,38204,38206,38209,38211],{"class":78,"line":1751},[76,38205,30915],{"class":250},[76,38207,38208],{"class":93},".block2",[76,38210,247],{"class":89},[76,38212,38079],{"class":93},[76,38214,38215,38217,38219,38221,38223,38225,38227,38229,38231,38233,38235,38237,38239,38241,38243,38245,38247],{"class":78,"line":1765},[76,38216,38084],{"class":93},[76,38218,30926],{"class":5288},[76,38220,247],{"class":89},[76,38222,404],{"class":250},[76,38224,578],{"class":93},[76,38226,30935],{"class":5288},[76,38228,247],{"class":89},[76,38230,32140],{"class":250},[76,38232,578],{"class":93},[76,38234,30944],{"class":5288},[76,38236,247],{"class":89},[76,38238,272],{"class":250},[76,38240,578],{"class":93},[76,38242,30953],{"class":5288},[76,38244,247],{"class":89},[76,38246,418],{"class":250},[76,38248,38117],{"class":93},[76,38250,38251],{"class":78,"line":1770},[76,38252,38122],{"class":93},[76,38254,38255,38257,38259,38261,38263,38265,38267,38269,38271,38273,38275,38277,38279,38281,38283,38285,38287],{"class":78,"line":1799},[76,38256,38084],{"class":93},[76,38258,30926],{"class":5288},[76,38260,247],{"class":89},[76,38262,32140],{"class":250},[76,38264,578],{"class":93},[76,38266,30935],{"class":5288},[76,38268,247],{"class":89},[76,38270,32140],{"class":250},[76,38272,578],{"class":93},[76,38274,30944],{"class":5288},[76,38276,247],{"class":89},[76,38278,272],{"class":250},[76,38280,578],{"class":93},[76,38282,30953],{"class":5288},[76,38284,247],{"class":89},[76,38286,418],{"class":250},[76,38288,38117],{"class":93},[76,38290,38291],{"class":78,"line":1804},[76,38292,38122],{"class":93},[76,38294,38295,38297,38299,38301,38303,38305,38307,38309,38311,38313,38315,38317,38319],{"class":78,"line":1821},[76,38296,38167],{"class":93},[76,38298,30944],{"class":5288},[76,38300,247],{"class":89},[76,38302,278],{"class":250},[76,38304,578],{"class":93},[76,38306,30999],{"class":5288},[76,38308,247],{"class":89},[76,38310,278],{"class":250},[76,38312,578],{"class":93},[76,38314,30953],{"class":5288},[76,38316,247],{"class":89},[76,38318,392],{"class":250},[76,38320,208],{"class":93},[76,38322,38323],{"class":78,"line":1826},[76,38324,38196],{"class":93},[76,38326,38327],{"class":78,"line":1831},[76,38328,38329],{"class":82},"        # 第三层\n",[76,38331,38332,38334,38337,38339],{"class":78,"line":1836},[76,38333,30915],{"class":250},[76,38335,38336],{"class":93},".block3",[76,38338,247],{"class":89},[76,38340,38079],{"class":93},[76,38342,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361,38363,38365,38367,38369,38371,38373,38375],{"class":78,"line":1850},[76,38344,38084],{"class":93},[76,38346,30926],{"class":5288},[76,38348,247],{"class":89},[76,38350,32140],{"class":250},[76,38352,578],{"class":93},[76,38354,30935],{"class":5288},[76,38356,247],{"class":89},[76,38358,34940],{"class":250},[76,38360,578],{"class":93},[76,38362,30944],{"class":5288},[76,38364,247],{"class":89},[76,38366,272],{"class":250},[76,38368,578],{"class":93},[76,38370,30953],{"class":5288},[76,38372,247],{"class":89},[76,38374,418],{"class":250},[76,38376,38117],{"class":93},[76,38378,38379],{"class":78,"line":1855},[76,38380,38122],{"class":93},[76,38382,38383,38385,38387,38389,38391,38393,38395,38397,38399,38401,38403,38405,38407,38409,38411,38413,38415],{"class":78,"line":2649},[76,38384,38084],{"class":93},[76,38386,30926],{"class":5288},[76,38388,247],{"class":89},[76,38390,34940],{"class":250},[76,38392,578],{"class":93},[76,38394,30935],{"class":5288},[76,38396,247],{"class":89},[76,38398,34940],{"class":250},[76,38400,578],{"class":93},[76,38402,30944],{"class":5288},[76,38404,247],{"class":89},[76,38406,272],{"class":250},[76,38408,578],{"class":93},[76,38410,30953],{"class":5288},[76,38412,247],{"class":89},[76,38414,418],{"class":250},[76,38416,38117],{"class":93},[76,38418,38419],{"class":78,"line":2663},[76,38420,38122],{"class":93},[76,38422,38423,38425,38427,38429,38431,38433,38435,38437,38439,38441,38443,38445,38447,38449,38451,38453,38455],{"class":78,"line":2671},[76,38424,38084],{"class":93},[76,38426,30926],{"class":5288},[76,38428,247],{"class":89},[76,38430,34940],{"class":250},[76,38432,578],{"class":93},[76,38434,30935],{"class":5288},[76,38436,247],{"class":89},[76,38438,34940],{"class":250},[76,38440,578],{"class":93},[76,38442,30944],{"class":5288},[76,38444,247],{"class":89},[76,38446,272],{"class":250},[76,38448,578],{"class":93},[76,38450,30953],{"class":5288},[76,38452,247],{"class":89},[76,38454,418],{"class":250},[76,38456,38117],{"class":93},[76,38458,38459],{"class":78,"line":2676},[76,38460,38122],{"class":93},[76,38462,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487],{"class":78,"line":2682},[76,38464,38167],{"class":93},[76,38466,30944],{"class":5288},[76,38468,247],{"class":89},[76,38470,278],{"class":250},[76,38472,578],{"class":93},[76,38474,30999],{"class":5288},[76,38476,247],{"class":89},[76,38478,278],{"class":250},[76,38480,578],{"class":93},[76,38482,30953],{"class":5288},[76,38484,247],{"class":89},[76,38486,392],{"class":250},[76,38488,208],{"class":93},[76,38490,38491],{"class":78,"line":2688},[76,38492,38196],{"class":93},[76,38494,38495],{"class":78,"line":2693},[76,38496,38497],{"class":82},"        # 第四层\n",[76,38499,38500,38502,38505,38507],{"class":78,"line":8020},[76,38501,30915],{"class":250},[76,38503,38504],{"class":93},".block4",[76,38506,247],{"class":89},[76,38508,38079],{"class":93},[76,38510,38511,38513,38515,38517,38519,38521,38523,38525,38528,38530,38532,38534,38536,38538,38540,38542,38544],{"class":78,"line":8044},[76,38512,38084],{"class":93},[76,38514,30926],{"class":5288},[76,38516,247],{"class":89},[76,38518,34940],{"class":250},[76,38520,578],{"class":93},[76,38522,30935],{"class":5288},[76,38524,247],{"class":89},[76,38526,38527],{"class":250},"512",[76,38529,578],{"class":93},[76,38531,30944],{"class":5288},[76,38533,247],{"class":89},[76,38535,272],{"class":250},[76,38537,578],{"class":93},[76,38539,30953],{"class":5288},[76,38541,247],{"class":89},[76,38543,418],{"class":250},[76,38545,38117],{"class":93},[76,38547,38548],{"class":78,"line":8049},[76,38549,38122],{"class":93},[76,38551,38552,38554,38556,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576,38578,38580,38582,38584],{"class":78,"line":8055},[76,38553,38084],{"class":93},[76,38555,30926],{"class":5288},[76,38557,247],{"class":89},[76,38559,38527],{"class":250},[76,38561,578],{"class":93},[76,38563,30935],{"class":5288},[76,38565,247],{"class":89},[76,38567,38527],{"class":250},[76,38569,578],{"class":93},[76,38571,30944],{"class":5288},[76,38573,247],{"class":89},[76,38575,272],{"class":250},[76,38577,578],{"class":93},[76,38579,30953],{"class":5288},[76,38581,247],{"class":89},[76,38583,418],{"class":250},[76,38585,38117],{"class":93},[76,38587,38588],{"class":78,"line":8082},[76,38589,38122],{"class":93},[76,38591,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610,38612,38614,38616,38618,38620,38622,38624],{"class":78,"line":8087},[76,38593,38084],{"class":93},[76,38595,30926],{"class":5288},[76,38597,247],{"class":89},[76,38599,38527],{"class":250},[76,38601,578],{"class":93},[76,38603,30935],{"class":5288},[76,38605,247],{"class":89},[76,38607,38527],{"class":250},[76,38609,578],{"class":93},[76,38611,30944],{"class":5288},[76,38613,247],{"class":89},[76,38615,272],{"class":250},[76,38617,578],{"class":93},[76,38619,30953],{"class":5288},[76,38621,247],{"class":89},[76,38623,418],{"class":250},[76,38625,38117],{"class":93},[76,38627,38628],{"class":78,"line":8093},[76,38629,38122],{"class":93},[76,38631,38632,38634,38636,38638,38640,38642,38644,38646,38648,38650,38652,38654,38656],{"class":78,"line":8105},[76,38633,38167],{"class":93},[76,38635,30944],{"class":5288},[76,38637,247],{"class":89},[76,38639,278],{"class":250},[76,38641,578],{"class":93},[76,38643,30999],{"class":5288},[76,38645,247],{"class":89},[76,38647,278],{"class":250},[76,38649,578],{"class":93},[76,38651,30953],{"class":5288},[76,38653,247],{"class":89},[76,38655,392],{"class":250},[76,38657,208],{"class":93},[76,38659,38660],{"class":78,"line":8117},[76,38661,38196],{"class":93},[76,38663,38664],{"class":78,"line":8129},[76,38665,38666],{"class":82},"        # 第五层\n",[76,38668,38669,38671,38674,38676],{"class":78,"line":9788},[76,38670,30915],{"class":250},[76,38672,38673],{"class":93},".block5",[76,38675,247],{"class":89},[76,38677,38079],{"class":93},[76,38679,38680,38682,38684,38686,38688,38690,38692,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712],{"class":78,"line":9813},[76,38681,38084],{"class":93},[76,38683,30926],{"class":5288},[76,38685,247],{"class":89},[76,38687,38527],{"class":250},[76,38689,578],{"class":93},[76,38691,30935],{"class":5288},[76,38693,247],{"class":89},[76,38695,38527],{"class":250},[76,38697,578],{"class":93},[76,38699,30944],{"class":5288},[76,38701,247],{"class":89},[76,38703,272],{"class":250},[76,38705,578],{"class":93},[76,38707,30953],{"class":5288},[76,38709,247],{"class":89},[76,38711,418],{"class":250},[76,38713,38117],{"class":93},[76,38715,38716],{"class":78,"line":9836},[76,38717,38122],{"class":93},[76,38719,38720,38722,38724,38726,38728,38730,38732,38734,38736,38738,38740,38742,38744,38746,38748,38750,38752],{"class":78,"line":9860},[76,38721,38084],{"class":93},[76,38723,30926],{"class":5288},[76,38725,247],{"class":89},[76,38727,38527],{"class":250},[76,38729,578],{"class":93},[76,38731,30935],{"class":5288},[76,38733,247],{"class":89},[76,38735,38527],{"class":250},[76,38737,578],{"class":93},[76,38739,30944],{"class":5288},[76,38741,247],{"class":89},[76,38743,272],{"class":250},[76,38745,578],{"class":93},[76,38747,30953],{"class":5288},[76,38749,247],{"class":89},[76,38751,418],{"class":250},[76,38753,38117],{"class":93},[76,38755,38756],{"class":78,"line":9865},[76,38757,38122],{"class":93},[76,38759,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780,38782,38784,38786,38788,38790,38792],{"class":78,"line":9870},[76,38761,38084],{"class":93},[76,38763,30926],{"class":5288},[76,38765,247],{"class":89},[76,38767,38527],{"class":250},[76,38769,578],{"class":93},[76,38771,30935],{"class":5288},[76,38773,247],{"class":89},[76,38775,38527],{"class":250},[76,38777,578],{"class":93},[76,38779,30944],{"class":5288},[76,38781,247],{"class":89},[76,38783,272],{"class":250},[76,38785,578],{"class":93},[76,38787,30953],{"class":5288},[76,38789,247],{"class":89},[76,38791,418],{"class":250},[76,38793,38117],{"class":93},[76,38795,38796],{"class":78,"line":9875},[76,38797,38122],{"class":93},[76,38799,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822,38824],{"class":78,"line":9884},[76,38801,38167],{"class":93},[76,38803,30944],{"class":5288},[76,38805,247],{"class":89},[76,38807,278],{"class":250},[76,38809,578],{"class":93},[76,38811,30999],{"class":5288},[76,38813,247],{"class":89},[76,38815,278],{"class":250},[76,38817,578],{"class":93},[76,38819,30953],{"class":5288},[76,38821,247],{"class":89},[76,38823,392],{"class":250},[76,38825,208],{"class":93},[76,38827,38828],{"class":78,"line":9889},[76,38829,38196],{"class":93},[76,38831,38832],{"class":78,"line":9895},[76,38833,38834],{"class":82},"        # 全连接层\n",[76,38836,38837,38839,38842,38844],{"class":78,"line":9916},[76,38838,30915],{"class":250},[76,38840,38841],{"class":93},".block6",[76,38843,247],{"class":89},[76,38845,38079],{"class":93},[76,38847,38848],{"class":78,"line":9922},[76,38849,38850],{"class":82},"            # 平展操作\n",[76,38852,38853],{"class":78,"line":9936},[76,38854,38855],{"class":82},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[76,38857,38858],{"class":78,"line":9942},[76,38859,38860],{"class":93},"            nn.Flatten(),\n",[76,38862,38863,38866,38868,38870,38872,38874,38876,38878,38880],{"class":78,"line":9969},[76,38864,38865],{"class":93},"            nn.Linear(",[76,38867,569],{"class":250},[76,38869,655],{"class":89},[76,38871,569],{"class":250},[76,38873,655],{"class":89},[76,38875,38527],{"class":250},[76,38877,578],{"class":93},[76,38879,34940],{"class":250},[76,38881,38117],{"class":93},[76,38883,38884],{"class":78,"line":9978},[76,38885,38122],{"class":93},[76,38887,38888,38890,38892,38894,38896],{"class":78,"line":9984},[76,38889,38865],{"class":93},[76,38891,34940],{"class":250},[76,38893,578],{"class":93},[76,38895,32140],{"class":250},[76,38897,38117],{"class":93},[76,38899,38900],{"class":78,"line":9992},[76,38901,38122],{"class":93},[76,38903,38904,38906,38908,38910,38912],{"class":78,"line":9997},[76,38905,38865],{"class":93},[76,38907,32140],{"class":250},[76,38909,578],{"class":93},[76,38911,646],{"class":250},[76,38913,208],{"class":93},[76,38915,38916],{"class":78,"line":16676},[76,38917,38196],{"class":93},[76,38919,38920],{"class":78,"line":16682},[76,38921,2472],{"emptyLinePlaceholder":125},[76,38923,38924],{"class":78,"line":16705},[76,38925,38926],{"class":82},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[76,38928,38929],{"class":78,"line":16711},[76,38930,38931],{"class":82},"        # 循环遍历模型\n",[76,38933,38934,38936,38939,38941,38944],{"class":78,"line":16734},[76,38935,3475],{"class":89},[76,38937,38938],{"class":93}," m ",[76,38940,26116],{"class":89},[76,38942,38943],{"class":250}," self",[76,38945,38946],{"class":93},".modules():\n",[76,38948,38949],{"class":78,"line":16748},[76,38950,38951],{"class":82},"            # print(m)\n",[76,38953,38954,38956,38959],{"class":78,"line":16768},[76,38955,4714],{"class":89},[76,38957,38958],{"class":250}," isinstance",[76,38960,38961],{"class":93},"(m,nn.Conv2d):\n",[76,38963,38964],{"class":78,"line":16774},[76,38965,38966],{"class":82},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[76,38968,38969,38972,38975,38977,38980],{"class":78,"line":16785},[76,38970,38971],{"class":93},"                nn.init.kaiming_normal_(m.weight,",[76,38973,38974],{"class":5288},"nonlinearity",[76,38976,247],{"class":89},[76,38978,38979],{"class":305},"'relu'",[76,38981,208],{"class":93},[76,38983,38984],{"class":78,"line":16808},[76,38985,38986],{"class":82},"                # 判断b参数是否存在\n",[76,38988,38989,38992,38995,38998,39001,39004],{"class":78,"line":16830},[76,38990,38991],{"class":89},"                if",[76,38993,38994],{"class":93}," m.bias ",[76,38996,38997],{"class":89},"is",[76,38999,39000],{"class":89}," not",[76,39002,39003],{"class":250}," None",[76,39005,3811],{"class":93},[76,39007,39008],{"class":78,"line":16835},[76,39009,39010],{"class":82},"                    # 如果参数不存在的化初始化b=0\n",[76,39012,39013,39016,39018],{"class":78,"line":16841},[76,39014,39015],{"class":93},"                    nn.init.constant_(m.bias,",[76,39017,392],{"class":250},[76,39019,208],{"class":93},[76,39021,39022],{"class":78,"line":16855},[76,39023,39024],{"class":82},"            # 全连接层初始化\n",[76,39026,39027,39030,39032],{"class":78,"line":16868},[76,39028,39029],{"class":89},"            elif",[76,39031,38958],{"class":250},[76,39033,39034],{"class":93},"(m,nn.Linear):\n",[76,39036,39037],{"class":78,"line":16873},[76,39038,39039],{"class":82},"                # 这个初始化方法是利用的是正太分布的方式\n",[76,39041,39042],{"class":78,"line":16887},[76,39043,39044],{"class":82},"                # 均值为0，方差为0.01\n",[76,39046,39047,39050,39052,39054,39057],{"class":78,"line":16892},[76,39048,39049],{"class":93},"                nn.init.normal_(m.weight,",[76,39051,392],{"class":250},[76,39053,578],{"class":93},[76,39055,39056],{"class":250},"0.01",[76,39058,208],{"class":93},[76,39060,39061],{"class":78,"line":16898},[76,39062,39063],{"class":82},"                # 初始化b参数\n",[76,39065,39066,39068,39070,39072,39074,39076],{"class":78,"line":16903},[76,39067,38991],{"class":89},[76,39069,38994],{"class":93},[76,39071,38997],{"class":89},[76,39073,39000],{"class":89},[76,39075,39003],{"class":250},[76,39077,3811],{"class":93},[76,39079,39080,39082,39084],{"class":78,"line":16917},[76,39081,39015],{"class":93},[76,39083,392],{"class":250},[76,39085,208],{"class":93},[76,39087,39088],{"class":78,"line":16922},[76,39089,2472],{"emptyLinePlaceholder":125},[76,39091,39092],{"class":78,"line":16927},[76,39093,35235],{"class":82},[76,39095,39096,39098,39100],{"class":78,"line":16941},[76,39097,30871],{"class":89},[76,39099,31163],{"class":2035},[76,39101,31166],{"class":93},[76,39103,39104,39106,39108,39110],{"class":78,"line":16953},[76,39105,31171],{"class":93},[76,39107,247],{"class":89},[76,39109,30893],{"class":250},[76,39111,39112],{"class":93},".block1(x)\n",[76,39114,39115,39117,39119,39121],{"class":78,"line":16958},[76,39116,31171],{"class":93},[76,39118,247],{"class":89},[76,39120,30893],{"class":250},[76,39122,39123],{"class":93},".block2(x)\n",[76,39125,39126,39128,39130,39132],{"class":78,"line":16971},[76,39127,31171],{"class":93},[76,39129,247],{"class":89},[76,39131,30893],{"class":250},[76,39133,39134],{"class":93},".block3(x)\n",[76,39136,39137,39139,39141,39143],{"class":78,"line":16976},[76,39138,31171],{"class":93},[76,39140,247],{"class":89},[76,39142,30893],{"class":250},[76,39144,39145],{"class":93},".block4(x)\n",[76,39147,39148,39150,39152,39154],{"class":78,"line":16981},[76,39149,31171],{"class":93},[76,39151,247],{"class":89},[76,39153,30893],{"class":250},[76,39155,39156],{"class":93},".block5(x)\n",[76,39158,39159,39161,39163,39165],{"class":78,"line":16986},[76,39160,31171],{"class":93},[76,39162,247],{"class":89},[76,39164,30893],{"class":250},[76,39166,39167],{"class":93},".block6(x)\n",[76,39169,39170,39172],{"class":78,"line":16999},[76,39171,14824],{"class":89},[76,39173,31279],{"class":93},[76,39175,39176],{"class":78,"line":17004},[76,39177,2472],{"emptyLinePlaceholder":125},[76,39179,39180],{"class":78,"line":32703},[76,39181,39182],{"class":82},"# 验证模型\n",[76,39184,39185,39187,39189,39191,39194],{"class":78,"line":32709},[76,39186,1603],{"class":89},[76,39188,31290],{"class":250},[76,39190,3021],{"class":89},[76,39192,39193],{"class":305},"'__main__'",[76,39195,3811],{"class":93},[76,39197,39198,39200,39202,39204,39206,39208,39210,39212,39214],{"class":78,"line":32715},[76,39199,31307],{"class":93},[76,39201,247],{"class":89},[76,39203,30521],{"class":93},[76,39205,31314],{"class":305},[76,39207,1776],{"class":89},[76,39209,31319],{"class":93},[76,39211,1773],{"class":89},[76,39213,30546],{"class":305},[76,39215,208],{"class":93},[76,39217,39218,39220],{"class":78,"line":32721},[76,39219,31369],{"class":250},[76,39221,30555],{"class":93},[76,39223,39224,39226,39228],{"class":78,"line":32727},[76,39225,31359],{"class":93},[76,39227,247],{"class":89},[76,39229,39230],{"class":93},"VGG16().to(device)\n",[76,39232,39233,39235,39237,39239,39241,39243,39245,39247],{"class":78,"line":32738},[76,39234,31369],{"class":250},[76,39236,31372],{"class":93},[76,39238,418],{"class":250},[76,39240,578],{"class":93},[76,39242,31571],{"class":250},[76,39244,578],{"class":93},[76,39246,31571],{"class":250},[76,39248,31385],{"class":93},[152,39250,39251],{"start":86},[155,39252,39253],{},"训练代码",[14,39255,39256],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39258,39259],{},"解决方式:",[14,39261,39262],{},"①权重初始化",[67,39264,39266],{"className":69,"code":39265,"language":71,"meta":58,"style":58},"# 权重初始化,保证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",[73,39267,39268,39273,39278,39290,39295,39303,39308,39321,39326,39340,39345,39354,39359,39368,39373,39378,39391,39396,39410],{"__ignoreMap":58},[76,39269,39270],{"class":78,"line":79},[76,39271,39272],{"class":82},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[76,39274,39275],{"class":78,"line":86},[76,39276,39277],{"class":82},"# 循环遍历模型\n",[76,39279,39280,39282,39284,39286,39288],{"class":78,"line":97},[76,39281,3097],{"class":89},[76,39283,38938],{"class":93},[76,39285,26116],{"class":89},[76,39287,38943],{"class":250},[76,39289,38946],{"class":93},[76,39291,39292],{"class":78,"line":103},[76,39293,39294],{"class":82},"    # print(m)\n",[76,39296,39297,39299,39301],{"class":78,"line":1273},[76,39298,3173],{"class":89},[76,39300,38958],{"class":250},[76,39302,38961],{"class":93},[76,39304,39305],{"class":78,"line":1287},[76,39306,39307],{"class":82},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[76,39309,39310,39313,39315,39317,39319],{"class":78,"line":1293},[76,39311,39312],{"class":93},"        nn.init.kaiming_normal_(m.weight,",[76,39314,38974],{"class":5288},[76,39316,247],{"class":89},[76,39318,38979],{"class":305},[76,39320,208],{"class":93},[76,39322,39323],{"class":78,"line":1384},[76,39324,39325],{"class":82},"        # 判断b参数是否存在\n",[76,39327,39328,39330,39332,39334,39336,39338],{"class":78,"line":1390},[76,39329,2569],{"class":89},[76,39331,38994],{"class":93},[76,39333,38997],{"class":89},[76,39335,39000],{"class":89},[76,39337,39003],{"class":250},[76,39339,3811],{"class":93},[76,39341,39342],{"class":78,"line":1402},[76,39343,39344],{"class":82},"            # 如果参数不存在的化初始化b=0\n",[76,39346,39347,39350,39352],{"class":78,"line":1684},[76,39348,39349],{"class":93},"            nn.init.constant_(m.bias,",[76,39351,392],{"class":250},[76,39353,208],{"class":93},[76,39355,39356],{"class":78,"line":1689},[76,39357,39358],{"class":82},"    # 全连接层初始化\n",[76,39360,39361,39364,39366],{"class":78,"line":1695},[76,39362,39363],{"class":89},"    elif",[76,39365,38958],{"class":250},[76,39367,39034],{"class":93},[76,39369,39370],{"class":78,"line":1700},[76,39371,39372],{"class":82},"        # 这个初始化方法是利用的是正太分布的方式\n",[76,39374,39375],{"class":78,"line":1714},[76,39376,39377],{"class":82},"        # 均值为0，方差为0.01\n",[76,39379,39380,39383,39385,39387,39389],{"class":78,"line":1719},[76,39381,39382],{"class":93},"        nn.init.normal_(m.weight,",[76,39384,392],{"class":250},[76,39386,578],{"class":93},[76,39388,39056],{"class":250},[76,39390,208],{"class":93},[76,39392,39393],{"class":78,"line":1725},[76,39394,39395],{"class":82},"        # 初始化b参数\n",[76,39397,39398,39400,39402,39404,39406,39408],{"class":78,"line":1746},[76,39399,2569],{"class":89},[76,39401,38994],{"class":93},[76,39403,38997],{"class":89},[76,39405,39000],{"class":89},[76,39407,39003],{"class":250},[76,39409,3811],{"class":93},[76,39411,39412,39414,39416],{"class":78,"line":1751},[76,39413,39349],{"class":93},[76,39415,392],{"class":250},[76,39417,208],{"class":93},[14,39419,39420],{},"②尽可能地增加批次",[14,39422,39423],{},"训练完整代码：",[67,39425,39426],{"className":69,"code":37969,"language":71,"meta":58,"style":58},[73,39427,39428,39434,39444,39454,39464,39468,39484,39492,39510,39514,39518,39528,39564,39568,39604,39608,39636,39640,39644,39654,39690,39694,39730,39734,39762,39766,39770,39780,39816,39820,39856,39860,39896,39900,39928,39932,39936,39946,39982,39986,40022,40026,40062,40066,40094,40098,40102,40112,40148,40152,40188,40192,40228,40232,40260,40264,40268,40278,40282,40286,40290,40310,40314,40326,40330,40342,40346,40350,40354,40358,40370,40374,40382,40386,40398,40402,40416,40420,40428,40432,40440,40444,40448,40460,40464,40478,40486,40490,40494,40502,40512,40522,40532,40542,40552,40562,40568,40572,40576,40588,40608,40614,40622],{"__ignoreMap":58},[76,39429,39430,39432],{"class":78,"line":79},[76,39431,90],{"class":89},[76,39433,30465],{"class":93},[76,39435,39436,39438,39440,39442],{"class":78,"line":86},[76,39437,30807],{"class":89},[76,39439,37984],{"class":93},[76,39441,90],{"class":89},[76,39443,37989],{"class":93},[76,39445,39446,39448,39450,39452],{"class":78,"line":97},[76,39447,30807],{"class":89},[76,39449,30810],{"class":93},[76,39451,90],{"class":89},[76,39453,30815],{"class":93},[76,39455,39456,39458,39460,39462],{"class":78,"line":103},[76,39457,30807],{"class":89},[76,39459,30827],{"class":93},[76,39461,90],{"class":89},[76,39463,30832],{"class":93},[76,39465,39466],{"class":78,"line":1273},[76,39467,2472],{"emptyLinePlaceholder":125},[76,39469,39470,39472,39474,39476,39478,39480,39482],{"class":78,"line":1287},[76,39471,14766],{"class":89},[76,39473,38020],{"class":2035},[76,39475,202],{"class":93},[76,39477,30848],{"class":2035},[76,39479,757],{"class":93},[76,39481,30853],{"class":2035},[76,39483,30856],{"class":93},[76,39485,39486,39488,39490],{"class":78,"line":1293},[76,39487,30871],{"class":89},[76,39489,30874],{"class":250},[76,39491,30877],{"class":93},[76,39493,39494,39496,39498,39500,39502,39504,39506,39508],{"class":78,"line":1384},[76,39495,30887],{"class":250},[76,39497,202],{"class":93},[76,39499,38047],{"class":250},[76,39501,12507],{"class":93},[76,39503,30893],{"class":250},[76,39505,30896],{"class":93},[76,39507,30899],{"class":250},[76,39509,2048],{"class":93},[76,39511,39512],{"class":78,"line":1390},[76,39513,38062],{"class":82},[76,39515,39516],{"class":78,"line":1402},[76,39517,38067],{"class":82},[76,39519,39520,39522,39524,39526],{"class":78,"line":1684},[76,39521,30915],{"class":250},[76,39523,38074],{"class":93},[76,39525,247],{"class":89},[76,39527,38079],{"class":93},[76,39529,39530,39532,39534,39536,39538,39540,39542,39544,39546,39548,39550,39552,39554,39556,39558,39560,39562],{"class":78,"line":1689},[76,39531,38084],{"class":93},[76,39533,30926],{"class":5288},[76,39535,247],{"class":89},[76,39537,418],{"class":250},[76,39539,578],{"class":93},[76,39541,30935],{"class":5288},[76,39543,247],{"class":89},[76,39545,404],{"class":250},[76,39547,578],{"class":93},[76,39549,30944],{"class":5288},[76,39551,247],{"class":89},[76,39553,272],{"class":250},[76,39555,578],{"class":93},[76,39557,30953],{"class":5288},[76,39559,247],{"class":89},[76,39561,418],{"class":250},[76,39563,38117],{"class":93},[76,39565,39566],{"class":78,"line":1695},[76,39567,38122],{"class":93},[76,39569,39570,39572,39574,39576,39578,39580,39582,39584,39586,39588,39590,39592,39594,39596,39598,39600,39602],{"class":78,"line":1700},[76,39571,38084],{"class":93},[76,39573,30926],{"class":5288},[76,39575,247],{"class":89},[76,39577,404],{"class":250},[76,39579,578],{"class":93},[76,39581,30935],{"class":5288},[76,39583,247],{"class":89},[76,39585,404],{"class":250},[76,39587,578],{"class":93},[76,39589,30944],{"class":5288},[76,39591,247],{"class":89},[76,39593,272],{"class":250},[76,39595,578],{"class":93},[76,39597,30953],{"class":5288},[76,39599,247],{"class":89},[76,39601,418],{"class":250},[76,39603,38117],{"class":93},[76,39605,39606],{"class":78,"line":1714},[76,39607,38122],{"class":93},[76,39609,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634],{"class":78,"line":1719},[76,39611,38167],{"class":93},[76,39613,30944],{"class":5288},[76,39615,247],{"class":89},[76,39617,278],{"class":250},[76,39619,578],{"class":93},[76,39621,30999],{"class":5288},[76,39623,247],{"class":89},[76,39625,278],{"class":250},[76,39627,578],{"class":93},[76,39629,30953],{"class":5288},[76,39631,247],{"class":89},[76,39633,392],{"class":250},[76,39635,208],{"class":93},[76,39637,39638],{"class":78,"line":1725},[76,39639,38196],{"class":93},[76,39641,39642],{"class":78,"line":1746},[76,39643,38201],{"class":82},[76,39645,39646,39648,39650,39652],{"class":78,"line":1751},[76,39647,30915],{"class":250},[76,39649,38208],{"class":93},[76,39651,247],{"class":89},[76,39653,38079],{"class":93},[76,39655,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680,39682,39684,39686,39688],{"class":78,"line":1765},[76,39657,38084],{"class":93},[76,39659,30926],{"class":5288},[76,39661,247],{"class":89},[76,39663,404],{"class":250},[76,39665,578],{"class":93},[76,39667,30935],{"class":5288},[76,39669,247],{"class":89},[76,39671,32140],{"class":250},[76,39673,578],{"class":93},[76,39675,30944],{"class":5288},[76,39677,247],{"class":89},[76,39679,272],{"class":250},[76,39681,578],{"class":93},[76,39683,30953],{"class":5288},[76,39685,247],{"class":89},[76,39687,418],{"class":250},[76,39689,38117],{"class":93},[76,39691,39692],{"class":78,"line":1770},[76,39693,38122],{"class":93},[76,39695,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716,39718,39720,39722,39724,39726,39728],{"class":78,"line":1799},[76,39697,38084],{"class":93},[76,39699,30926],{"class":5288},[76,39701,247],{"class":89},[76,39703,32140],{"class":250},[76,39705,578],{"class":93},[76,39707,30935],{"class":5288},[76,39709,247],{"class":89},[76,39711,32140],{"class":250},[76,39713,578],{"class":93},[76,39715,30944],{"class":5288},[76,39717,247],{"class":89},[76,39719,272],{"class":250},[76,39721,578],{"class":93},[76,39723,30953],{"class":5288},[76,39725,247],{"class":89},[76,39727,418],{"class":250},[76,39729,38117],{"class":93},[76,39731,39732],{"class":78,"line":1804},[76,39733,38122],{"class":93},[76,39735,39736,39738,39740,39742,39744,39746,39748,39750,39752,39754,39756,39758,39760],{"class":78,"line":1821},[76,39737,38167],{"class":93},[76,39739,30944],{"class":5288},[76,39741,247],{"class":89},[76,39743,278],{"class":250},[76,39745,578],{"class":93},[76,39747,30999],{"class":5288},[76,39749,247],{"class":89},[76,39751,278],{"class":250},[76,39753,578],{"class":93},[76,39755,30953],{"class":5288},[76,39757,247],{"class":89},[76,39759,392],{"class":250},[76,39761,208],{"class":93},[76,39763,39764],{"class":78,"line":1826},[76,39765,38196],{"class":93},[76,39767,39768],{"class":78,"line":1831},[76,39769,38329],{"class":82},[76,39771,39772,39774,39776,39778],{"class":78,"line":1836},[76,39773,30915],{"class":250},[76,39775,38336],{"class":93},[76,39777,247],{"class":89},[76,39779,38079],{"class":93},[76,39781,39782,39784,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806,39808,39810,39812,39814],{"class":78,"line":1850},[76,39783,38084],{"class":93},[76,39785,30926],{"class":5288},[76,39787,247],{"class":89},[76,39789,32140],{"class":250},[76,39791,578],{"class":93},[76,39793,30935],{"class":5288},[76,39795,247],{"class":89},[76,39797,34940],{"class":250},[76,39799,578],{"class":93},[76,39801,30944],{"class":5288},[76,39803,247],{"class":89},[76,39805,272],{"class":250},[76,39807,578],{"class":93},[76,39809,30953],{"class":5288},[76,39811,247],{"class":89},[76,39813,418],{"class":250},[76,39815,38117],{"class":93},[76,39817,39818],{"class":78,"line":1855},[76,39819,38122],{"class":93},[76,39821,39822,39824,39826,39828,39830,39832,39834,39836,39838,39840,39842,39844,39846,39848,39850,39852,39854],{"class":78,"line":2649},[76,39823,38084],{"class":93},[76,39825,30926],{"class":5288},[76,39827,247],{"class":89},[76,39829,34940],{"class":250},[76,39831,578],{"class":93},[76,39833,30935],{"class":5288},[76,39835,247],{"class":89},[76,39837,34940],{"class":250},[76,39839,578],{"class":93},[76,39841,30944],{"class":5288},[76,39843,247],{"class":89},[76,39845,272],{"class":250},[76,39847,578],{"class":93},[76,39849,30953],{"class":5288},[76,39851,247],{"class":89},[76,39853,418],{"class":250},[76,39855,38117],{"class":93},[76,39857,39858],{"class":78,"line":2663},[76,39859,38122],{"class":93},[76,39861,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890,39892,39894],{"class":78,"line":2671},[76,39863,38084],{"class":93},[76,39865,30926],{"class":5288},[76,39867,247],{"class":89},[76,39869,34940],{"class":250},[76,39871,578],{"class":93},[76,39873,30935],{"class":5288},[76,39875,247],{"class":89},[76,39877,34940],{"class":250},[76,39879,578],{"class":93},[76,39881,30944],{"class":5288},[76,39883,247],{"class":89},[76,39885,272],{"class":250},[76,39887,578],{"class":93},[76,39889,30953],{"class":5288},[76,39891,247],{"class":89},[76,39893,418],{"class":250},[76,39895,38117],{"class":93},[76,39897,39898],{"class":78,"line":2676},[76,39899,38122],{"class":93},[76,39901,39902,39904,39906,39908,39910,39912,39914,39916,39918,39920,39922,39924,39926],{"class":78,"line":2682},[76,39903,38167],{"class":93},[76,39905,30944],{"class":5288},[76,39907,247],{"class":89},[76,39909,278],{"class":250},[76,39911,578],{"class":93},[76,39913,30999],{"class":5288},[76,39915,247],{"class":89},[76,39917,278],{"class":250},[76,39919,578],{"class":93},[76,39921,30953],{"class":5288},[76,39923,247],{"class":89},[76,39925,392],{"class":250},[76,39927,208],{"class":93},[76,39929,39930],{"class":78,"line":2688},[76,39931,38196],{"class":93},[76,39933,39934],{"class":78,"line":2693},[76,39935,38497],{"class":82},[76,39937,39938,39940,39942,39944],{"class":78,"line":8020},[76,39939,30915],{"class":250},[76,39941,38504],{"class":93},[76,39943,247],{"class":89},[76,39945,38079],{"class":93},[76,39947,39948,39950,39952,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980],{"class":78,"line":8044},[76,39949,38084],{"class":93},[76,39951,30926],{"class":5288},[76,39953,247],{"class":89},[76,39955,34940],{"class":250},[76,39957,578],{"class":93},[76,39959,30935],{"class":5288},[76,39961,247],{"class":89},[76,39963,38527],{"class":250},[76,39965,578],{"class":93},[76,39967,30944],{"class":5288},[76,39969,247],{"class":89},[76,39971,272],{"class":250},[76,39973,578],{"class":93},[76,39975,30953],{"class":5288},[76,39977,247],{"class":89},[76,39979,418],{"class":250},[76,39981,38117],{"class":93},[76,39983,39984],{"class":78,"line":8049},[76,39985,38122],{"class":93},[76,39987,39988,39990,39992,39994,39996,39998,40000,40002,40004,40006,40008,40010,40012,40014,40016,40018,40020],{"class":78,"line":8055},[76,39989,38084],{"class":93},[76,39991,30926],{"class":5288},[76,39993,247],{"class":89},[76,39995,38527],{"class":250},[76,39997,578],{"class":93},[76,39999,30935],{"class":5288},[76,40001,247],{"class":89},[76,40003,38527],{"class":250},[76,40005,578],{"class":93},[76,40007,30944],{"class":5288},[76,40009,247],{"class":89},[76,40011,272],{"class":250},[76,40013,578],{"class":93},[76,40015,30953],{"class":5288},[76,40017,247],{"class":89},[76,40019,418],{"class":250},[76,40021,38117],{"class":93},[76,40023,40024],{"class":78,"line":8082},[76,40025,38122],{"class":93},[76,40027,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060],{"class":78,"line":8087},[76,40029,38084],{"class":93},[76,40031,30926],{"class":5288},[76,40033,247],{"class":89},[76,40035,38527],{"class":250},[76,40037,578],{"class":93},[76,40039,30935],{"class":5288},[76,40041,247],{"class":89},[76,40043,38527],{"class":250},[76,40045,578],{"class":93},[76,40047,30944],{"class":5288},[76,40049,247],{"class":89},[76,40051,272],{"class":250},[76,40053,578],{"class":93},[76,40055,30953],{"class":5288},[76,40057,247],{"class":89},[76,40059,418],{"class":250},[76,40061,38117],{"class":93},[76,40063,40064],{"class":78,"line":8093},[76,40065,38122],{"class":93},[76,40067,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088,40090,40092],{"class":78,"line":8105},[76,40069,38167],{"class":93},[76,40071,30944],{"class":5288},[76,40073,247],{"class":89},[76,40075,278],{"class":250},[76,40077,578],{"class":93},[76,40079,30999],{"class":5288},[76,40081,247],{"class":89},[76,40083,278],{"class":250},[76,40085,578],{"class":93},[76,40087,30953],{"class":5288},[76,40089,247],{"class":89},[76,40091,392],{"class":250},[76,40093,208],{"class":93},[76,40095,40096],{"class":78,"line":8117},[76,40097,38196],{"class":93},[76,40099,40100],{"class":78,"line":8129},[76,40101,38666],{"class":82},[76,40103,40104,40106,40108,40110],{"class":78,"line":9788},[76,40105,30915],{"class":250},[76,40107,38673],{"class":93},[76,40109,247],{"class":89},[76,40111,38079],{"class":93},[76,40113,40114,40116,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136,40138,40140,40142,40144,40146],{"class":78,"line":9813},[76,40115,38084],{"class":93},[76,40117,30926],{"class":5288},[76,40119,247],{"class":89},[76,40121,38527],{"class":250},[76,40123,578],{"class":93},[76,40125,30935],{"class":5288},[76,40127,247],{"class":89},[76,40129,38527],{"class":250},[76,40131,578],{"class":93},[76,40133,30944],{"class":5288},[76,40135,247],{"class":89},[76,40137,272],{"class":250},[76,40139,578],{"class":93},[76,40141,30953],{"class":5288},[76,40143,247],{"class":89},[76,40145,418],{"class":250},[76,40147,38117],{"class":93},[76,40149,40150],{"class":78,"line":9836},[76,40151,38122],{"class":93},[76,40153,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176,40178,40180,40182,40184,40186],{"class":78,"line":9860},[76,40155,38084],{"class":93},[76,40157,30926],{"class":5288},[76,40159,247],{"class":89},[76,40161,38527],{"class":250},[76,40163,578],{"class":93},[76,40165,30935],{"class":5288},[76,40167,247],{"class":89},[76,40169,38527],{"class":250},[76,40171,578],{"class":93},[76,40173,30944],{"class":5288},[76,40175,247],{"class":89},[76,40177,272],{"class":250},[76,40179,578],{"class":93},[76,40181,30953],{"class":5288},[76,40183,247],{"class":89},[76,40185,418],{"class":250},[76,40187,38117],{"class":93},[76,40189,40190],{"class":78,"line":9865},[76,40191,38122],{"class":93},[76,40193,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212,40214,40216,40218,40220,40222,40224,40226],{"class":78,"line":9870},[76,40195,38084],{"class":93},[76,40197,30926],{"class":5288},[76,40199,247],{"class":89},[76,40201,38527],{"class":250},[76,40203,578],{"class":93},[76,40205,30935],{"class":5288},[76,40207,247],{"class":89},[76,40209,38527],{"class":250},[76,40211,578],{"class":93},[76,40213,30944],{"class":5288},[76,40215,247],{"class":89},[76,40217,272],{"class":250},[76,40219,578],{"class":93},[76,40221,30953],{"class":5288},[76,40223,247],{"class":89},[76,40225,418],{"class":250},[76,40227,38117],{"class":93},[76,40229,40230],{"class":78,"line":9875},[76,40231,38122],{"class":93},[76,40233,40234,40236,40238,40240,40242,40244,40246,40248,40250,40252,40254,40256,40258],{"class":78,"line":9884},[76,40235,38167],{"class":93},[76,40237,30944],{"class":5288},[76,40239,247],{"class":89},[76,40241,278],{"class":250},[76,40243,578],{"class":93},[76,40245,30999],{"class":5288},[76,40247,247],{"class":89},[76,40249,278],{"class":250},[76,40251,578],{"class":93},[76,40253,30953],{"class":5288},[76,40255,247],{"class":89},[76,40257,392],{"class":250},[76,40259,208],{"class":93},[76,40261,40262],{"class":78,"line":9889},[76,40263,38196],{"class":93},[76,40265,40266],{"class":78,"line":9895},[76,40267,38834],{"class":82},[76,40269,40270,40272,40274,40276],{"class":78,"line":9916},[76,40271,30915],{"class":250},[76,40273,38841],{"class":93},[76,40275,247],{"class":89},[76,40277,38079],{"class":93},[76,40279,40280],{"class":78,"line":9922},[76,40281,38850],{"class":82},[76,40283,40284],{"class":78,"line":9936},[76,40285,38855],{"class":82},[76,40287,40288],{"class":78,"line":9942},[76,40289,38860],{"class":93},[76,40291,40292,40294,40296,40298,40300,40302,40304,40306,40308],{"class":78,"line":9969},[76,40293,38865],{"class":93},[76,40295,569],{"class":250},[76,40297,655],{"class":89},[76,40299,569],{"class":250},[76,40301,655],{"class":89},[76,40303,38527],{"class":250},[76,40305,578],{"class":93},[76,40307,34940],{"class":250},[76,40309,38117],{"class":93},[76,40311,40312],{"class":78,"line":9978},[76,40313,38122],{"class":93},[76,40315,40316,40318,40320,40322,40324],{"class":78,"line":9984},[76,40317,38865],{"class":93},[76,40319,34940],{"class":250},[76,40321,578],{"class":93},[76,40323,32140],{"class":250},[76,40325,38117],{"class":93},[76,40327,40328],{"class":78,"line":9992},[76,40329,38122],{"class":93},[76,40331,40332,40334,40336,40338,40340],{"class":78,"line":9997},[76,40333,38865],{"class":93},[76,40335,32140],{"class":250},[76,40337,578],{"class":93},[76,40339,646],{"class":250},[76,40341,208],{"class":93},[76,40343,40344],{"class":78,"line":16676},[76,40345,38196],{"class":93},[76,40347,40348],{"class":78,"line":16682},[76,40349,2472],{"emptyLinePlaceholder":125},[76,40351,40352],{"class":78,"line":16705},[76,40353,38926],{"class":82},[76,40355,40356],{"class":78,"line":16711},[76,40357,38931],{"class":82},[76,40359,40360,40362,40364,40366,40368],{"class":78,"line":16734},[76,40361,3475],{"class":89},[76,40363,38938],{"class":93},[76,40365,26116],{"class":89},[76,40367,38943],{"class":250},[76,40369,38946],{"class":93},[76,40371,40372],{"class":78,"line":16748},[76,40373,38951],{"class":82},[76,40375,40376,40378,40380],{"class":78,"line":16768},[76,40377,4714],{"class":89},[76,40379,38958],{"class":250},[76,40381,38961],{"class":93},[76,40383,40384],{"class":78,"line":16774},[76,40385,38966],{"class":82},[76,40387,40388,40390,40392,40394,40396],{"class":78,"line":16785},[76,40389,38971],{"class":93},[76,40391,38974],{"class":5288},[76,40393,247],{"class":89},[76,40395,38979],{"class":305},[76,40397,208],{"class":93},[76,40399,40400],{"class":78,"line":16808},[76,40401,38986],{"class":82},[76,40403,40404,40406,40408,40410,40412,40414],{"class":78,"line":16830},[76,40405,38991],{"class":89},[76,40407,38994],{"class":93},[76,40409,38997],{"class":89},[76,40411,39000],{"class":89},[76,40413,39003],{"class":250},[76,40415,3811],{"class":93},[76,40417,40418],{"class":78,"line":16835},[76,40419,39010],{"class":82},[76,40421,40422,40424,40426],{"class":78,"line":16841},[76,40423,39015],{"class":93},[76,40425,392],{"class":250},[76,40427,208],{"class":93},[76,40429,40430],{"class":78,"line":16855},[76,40431,39024],{"class":82},[76,40433,40434,40436,40438],{"class":78,"line":16868},[76,40435,39029],{"class":89},[76,40437,38958],{"class":250},[76,40439,39034],{"class":93},[76,40441,40442],{"class":78,"line":16873},[76,40443,39039],{"class":82},[76,40445,40446],{"class":78,"line":16887},[76,40447,39044],{"class":82},[76,40449,40450,40452,40454,40456,40458],{"class":78,"line":16892},[76,40451,39049],{"class":93},[76,40453,392],{"class":250},[76,40455,578],{"class":93},[76,40457,39056],{"class":250},[76,40459,208],{"class":93},[76,40461,40462],{"class":78,"line":16898},[76,40463,39063],{"class":82},[76,40465,40466,40468,40470,40472,40474,40476],{"class":78,"line":16903},[76,40467,38991],{"class":89},[76,40469,38994],{"class":93},[76,40471,38997],{"class":89},[76,40473,39000],{"class":89},[76,40475,39003],{"class":250},[76,40477,3811],{"class":93},[76,40479,40480,40482,40484],{"class":78,"line":16917},[76,40481,39015],{"class":93},[76,40483,392],{"class":250},[76,40485,208],{"class":93},[76,40487,40488],{"class":78,"line":16922},[76,40489,2472],{"emptyLinePlaceholder":125},[76,40491,40492],{"class":78,"line":16927},[76,40493,35235],{"class":82},[76,40495,40496,40498,40500],{"class":78,"line":16941},[76,40497,30871],{"class":89},[76,40499,31163],{"class":2035},[76,40501,31166],{"class":93},[76,40503,40504,40506,40508,40510],{"class":78,"line":16953},[76,40505,31171],{"class":93},[76,40507,247],{"class":89},[76,40509,30893],{"class":250},[76,40511,39112],{"class":93},[76,40513,40514,40516,40518,40520],{"class":78,"line":16958},[76,40515,31171],{"class":93},[76,40517,247],{"class":89},[76,40519,30893],{"class":250},[76,40521,39123],{"class":93},[76,40523,40524,40526,40528,40530],{"class":78,"line":16971},[76,40525,31171],{"class":93},[76,40527,247],{"class":89},[76,40529,30893],{"class":250},[76,40531,39134],{"class":93},[76,40533,40534,40536,40538,40540],{"class":78,"line":16976},[76,40535,31171],{"class":93},[76,40537,247],{"class":89},[76,40539,30893],{"class":250},[76,40541,39145],{"class":93},[76,40543,40544,40546,40548,40550],{"class":78,"line":16981},[76,40545,31171],{"class":93},[76,40547,247],{"class":89},[76,40549,30893],{"class":250},[76,40551,39156],{"class":93},[76,40553,40554,40556,40558,40560],{"class":78,"line":16986},[76,40555,31171],{"class":93},[76,40557,247],{"class":89},[76,40559,30893],{"class":250},[76,40561,39167],{"class":93},[76,40563,40564,40566],{"class":78,"line":16999},[76,40565,14824],{"class":89},[76,40567,31279],{"class":93},[76,40569,40570],{"class":78,"line":17004},[76,40571,2472],{"emptyLinePlaceholder":125},[76,40573,40574],{"class":78,"line":32703},[76,40575,39182],{"class":82},[76,40577,40578,40580,40582,40584,40586],{"class":78,"line":32709},[76,40579,1603],{"class":89},[76,40581,31290],{"class":250},[76,40583,3021],{"class":89},[76,40585,39193],{"class":305},[76,40587,3811],{"class":93},[76,40589,40590,40592,40594,40596,40598,40600,40602,40604,40606],{"class":78,"line":32715},[76,40591,31307],{"class":93},[76,40593,247],{"class":89},[76,40595,30521],{"class":93},[76,40597,31314],{"class":305},[76,40599,1776],{"class":89},[76,40601,31319],{"class":93},[76,40603,1773],{"class":89},[76,40605,30546],{"class":305},[76,40607,208],{"class":93},[76,40609,40610,40612],{"class":78,"line":32721},[76,40611,31369],{"class":250},[76,40613,30555],{"class":93},[76,40615,40616,40618,40620],{"class":78,"line":32727},[76,40617,31359],{"class":93},[76,40619,247],{"class":89},[76,40621,39230],{"class":93},[76,40623,40624,40626,40628,40630,40632,40634,40636,40638],{"class":78,"line":32738},[76,40625,31369],{"class":250},[76,40627,31372],{"class":93},[76,40629,418],{"class":250},[76,40631,578],{"class":93},[76,40633,31571],{"class":250},[76,40635,578],{"class":93},[76,40637,31571],{"class":250},[76,40639,31385],{"class":93},[152,40641,40642],{"start":97},[155,40643,40644],{},"测试代码",[67,40646,40648],{"className":69,"code":40647,"language":71,"meta":58,"style":58},"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",[73,40649,40650,40656,40666,40676,40680,40690,40701,40705,40709,40713,40721,40737,40747,40763,40773,40787,40791,40801,40811,40821,40827,40831,40835,40843,40847,40863,40871,40875,40879,40887,40895,40899,40903,40907,40911,40917,40921,40931,40939,40947,40951,40955,40959,40967,40971,40987,40991,40995,40999,41011,41015,41027,41031,41035,41047,41051,41061,41065,41069,41081,41085,41094,41098,41102,41110,41114,41122,41126,41130,41134,41138,41142,41158,41166,41170,41174,41222,41228,41232,41242,41250,41258,41262,41266,41270,41274,41282,41286,41302,41306,41314,41322],{"__ignoreMap":58},[76,40651,40652,40654],{"class":78,"line":79},[76,40653,90],{"class":89},[76,40655,30465],{"class":93},[76,40657,40658,40660,40662,40664],{"class":78,"line":86},[76,40659,90],{"class":89},[76,40661,31485],{"class":93},[76,40663,31453],{"class":89},[76,40665,31490],{"class":93},[76,40667,40668,40670,40672,40674],{"class":78,"line":97},[76,40669,30807],{"class":89},[76,40671,31468],{"class":93},[76,40673,90],{"class":89},[76,40675,31473],{"class":93},[76,40677,40678],{"class":78,"line":103},[76,40679,33992],{"class":82},[76,40681,40682,40684,40686,40688],{"class":78,"line":1273},[76,40683,30807],{"class":89},[76,40685,31438],{"class":93},[76,40687,90],{"class":89},[76,40689,31443],{"class":93},[76,40691,40692,40694,40696,40698],{"class":78,"line":1287},[76,40693,30807],{"class":89},[76,40695,31984],{"class":93},[76,40697,90],{"class":89},[76,40699,40700],{"class":250}," VGG16\n",[76,40702,40703],{"class":78,"line":1293},[76,40704,2472],{"emptyLinePlaceholder":125},[76,40706,40707],{"class":78,"line":1384},[76,40708,2472],{"emptyLinePlaceholder":125},[76,40710,40711],{"class":78,"line":1390},[76,40712,34021],{"class":82},[76,40714,40715,40717,40719],{"class":78,"line":1402},[76,40716,32017],{"class":89},[76,40718,34028],{"class":2035},[76,40720,32023],{"class":93},[76,40722,40723,40725,40727,40729,40731,40733,40735],{"class":78,"line":1684},[76,40724,34035],{"class":93},[76,40726,247],{"class":89},[76,40728,31525],{"class":93},[76,40730,31528],{"class":5288},[76,40732,247],{"class":89},[76,40734,31533],{"class":305},[76,40736,31536],{"class":93},[76,40738,40739,40741,40743,40745],{"class":78,"line":1689},[76,40740,34052],{"class":5288},[76,40742,247],{"class":89},[76,40744,34057],{"class":250},[76,40746,31536],{"class":93},[76,40748,40749,40751,40753,40755,40757,40759,40761],{"class":78,"line":1695},[76,40750,34064],{"class":5288},[76,40752,247],{"class":89},[76,40754,31563],{"class":93},[76,40756,31566],{"class":5288},[76,40758,247],{"class":89},[76,40760,31571],{"class":250},[76,40762,31574],{"class":93},[76,40764,40765,40767,40769,40771],{"class":78,"line":1700},[76,40766,34081],{"class":5288},[76,40768,247],{"class":89},[76,40770,31546],{"class":250},[76,40772,208],{"class":93},[76,40774,40775,40777,40779,40781,40783,40785],{"class":78,"line":1714},[76,40776,34092],{"class":93},[76,40778,247],{"class":89},[76,40780,31604],{"class":93},[76,40782,31607],{"class":5288},[76,40784,247],{"class":89},[76,40786,34103],{"class":93},[76,40788,40789],{"class":78,"line":1719},[76,40790,34108],{"class":82},[76,40792,40793,40795,40797,40799],{"class":78,"line":1725},[76,40794,34113],{"class":5288},[76,40796,247],{"class":89},[76,40798,418],{"class":250},[76,40800,31536],{"class":93},[76,40802,40803,40805,40807,40809],{"class":78,"line":1746},[76,40804,34124],{"class":5288},[76,40806,247],{"class":89},[76,40808,31546],{"class":250},[76,40810,31536],{"class":93},[76,40812,40813,40815,40817,40819],{"class":78,"line":1751},[76,40814,34135],{"class":5288},[76,40816,247],{"class":89},[76,40818,392],{"class":250},[76,40820,208],{"class":93},[76,40822,40823,40825],{"class":78,"line":1765},[76,40824,4162],{"class":89},[76,40826,34148],{"class":93},[76,40828,40829],{"class":78,"line":1770},[76,40830,2472],{"emptyLinePlaceholder":125},[76,40832,40833],{"class":78,"line":1799},[76,40834,34157],{"class":82},[76,40836,40837,40839,40841],{"class":78,"line":1804},[76,40838,32017],{"class":89},[76,40840,34164],{"class":2035},[76,40842,34167],{"class":93},[76,40844,40845],{"class":78,"line":1821},[76,40846,34172],{"class":82},[76,40848,40849,40851,40853,40855,40857,40859,40861],{"class":78,"line":1826},[76,40850,31307],{"class":93},[76,40852,247],{"class":89},[76,40854,31314],{"class":305},[76,40856,1776],{"class":89},[76,40858,31319],{"class":93},[76,40860,1773],{"class":89},[76,40862,34189],{"class":305},[76,40864,40865,40867,40869],{"class":78,"line":1831},[76,40866,31359],{"class":93},[76,40868,247],{"class":89},[76,40870,32359],{"class":93},[76,40872,40873],{"class":78,"line":1836},[76,40874,2472],{"emptyLinePlaceholder":125},[76,40876,40877],{"class":78,"line":1850},[76,40878,34206],{"class":82},[76,40880,40881,40883,40885],{"class":78,"line":1855},[76,40882,34211],{"class":93},[76,40884,247],{"class":89},[76,40886,32412],{"class":250},[76,40888,40889,40891,40893],{"class":78,"line":2649},[76,40890,34220],{"class":93},[76,40892,247],{"class":89},[76,40894,3157],{"class":250},[76,40896,40897],{"class":78,"line":2663},[76,40898,2472],{"emptyLinePlaceholder":125},[76,40900,40901],{"class":78,"line":2671},[76,40902,34233],{"class":82},[76,40904,40905],{"class":78,"line":2676},[76,40906,34238],{"class":82},[76,40908,40909],{"class":78,"line":2682},[76,40910,34243],{"class":82},[76,40912,40913,40915],{"class":78,"line":2688},[76,40914,34248],{"class":89},[76,40916,32954],{"class":93},[76,40918,40919],{"class":78,"line":2693},[76,40920,34255],{"class":82},[76,40922,40923,40925,40927,40929],{"class":78,"line":8020},[76,40924,3475],{"class":89},[76,40926,34262],{"class":93},[76,40928,26116],{"class":89},[76,40930,34267],{"class":93},[76,40932,40933,40935,40937],{"class":78,"line":8044},[76,40934,34272],{"class":93},[76,40936,247],{"class":89},[76,40938,34277],{"class":93},[76,40940,40941,40943,40945],{"class":78,"line":8049},[76,40942,34282],{"class":93},[76,40944,247],{"class":89},[76,40946,34287],{"class":93},[76,40948,40949],{"class":78,"line":8055},[76,40950,34292],{"class":82},[76,40952,40953],{"class":78,"line":8082},[76,40954,32945],{"class":93},[76,40956,40957],{"class":78,"line":8087},[76,40958,34301],{"class":82},[76,40960,40961,40963,40965],{"class":78,"line":8093},[76,40962,32730],{"class":93},[76,40964,247],{"class":89},[76,40966,34310],{"class":93},[76,40968,40969],{"class":78,"line":8105},[76,40970,34315],{"class":82},[76,40972,40973,40975,40977,40979,40981,40983,40985],{"class":78,"line":8117},[76,40974,32747],{"class":93},[76,40976,247],{"class":89},[76,40978,32752],{"class":93},[76,40980,32755],{"class":5288},[76,40982,247],{"class":89},[76,40984,418],{"class":250},[76,40986,208],{"class":93},[76,40988,40989],{"class":78,"line":8129},[76,40990,34336],{"class":82},[76,40992,40993],{"class":78,"line":9788},[76,40994,34341],{"class":82},[76,40996,40997],{"class":78,"line":9813},[76,40998,34346],{"class":82},[76,41000,41001,41003,41005,41007,41009],{"class":78,"line":9836},[76,41002,34351],{"class":93},[76,41004,9549],{"class":89},[76,41006,32857],{"class":93},[76,41008,3021],{"class":89},[76,41010,34360],{"class":93},[76,41012,41013],{"class":78,"line":9860},[76,41014,34365],{"class":82},[76,41016,41017,41019,41021,41023,41025],{"class":78,"line":9865},[76,41018,34370],{"class":93},[76,41020,9549],{"class":89},[76,41022,34375],{"class":93},[76,41024,392],{"class":250},[76,41026,208],{"class":93},[76,41028,41029],{"class":78,"line":9870},[76,41030,2472],{"emptyLinePlaceholder":125},[76,41032,41033],{"class":78,"line":9875},[76,41034,34388],{"class":82},[76,41036,41037,41039,41041,41043,41045],{"class":78,"line":9884},[76,41038,34393],{"class":93},[76,41040,247],{"class":89},[76,41042,34398],{"class":93},[76,41044,783],{"class":89},[76,41046,34403],{"class":93},[76,41048,41049],{"class":78,"line":9889},[76,41050,34408],{"class":82},[76,41052,41053,41055,41057,41059],{"class":78,"line":9895},[76,41054,32521],{"class":250},[76,41056,202],{"class":93},[76,41058,34417],{"class":305},[76,41060,34420],{"class":93},[76,41062,41063],{"class":78,"line":9916},[76,41064,2472],{"emptyLinePlaceholder":125},[76,41066,41067],{"class":78,"line":9922},[76,41068,34429],{"class":82},[76,41070,41071,41073,41075,41077,41079],{"class":78,"line":9936},[76,41072,1603],{"class":89},[76,41074,31290],{"class":250},[76,41076,3021],{"class":89},[76,41078,31295],{"class":305},[76,41080,3811],{"class":93},[76,41082,41083],{"class":78,"line":9942},[76,41084,34446],{"class":82},[76,41086,41087,41089,41091],{"class":78,"line":9969},[76,41088,31359],{"class":93},[76,41090,247],{"class":89},[76,41092,41093],{"class":93},"VGG16()\n",[76,41095,41096],{"class":78,"line":9978},[76,41097,34459],{"class":82},[76,41099,41100],{"class":78,"line":9984},[76,41101,34464],{"class":82},[76,41103,41104,41106,41108],{"class":78,"line":9992},[76,41105,34469],{"class":93},[76,41107,34472],{"class":305},[76,41109,30567],{"class":93},[76,41111,41112],{"class":78,"line":9997},[76,41113,34479],{"class":82},[76,41115,41116,41118,41120],{"class":78,"line":16676},[76,41117,34092],{"class":93},[76,41119,247],{"class":89},[76,41121,34488],{"class":93},[76,41123,41124],{"class":78,"line":16682},[76,41125,34493],{"class":82},[76,41127,41128],{"class":78,"line":16705},[76,41129,34498],{"class":93},[76,41131,41132],{"class":78,"line":16711},[76,41133,2472],{"emptyLinePlaceholder":125},[76,41135,41136],{"class":78,"line":16734},[76,41137,34507],{"class":82},[76,41139,41140],{"class":78,"line":16748},[76,41141,34512],{"class":82},[76,41143,41144,41146,41148,41150,41152,41154,41156],{"class":78,"line":16768},[76,41145,31307],{"class":93},[76,41147,247],{"class":89},[76,41149,31314],{"class":305},[76,41151,1776],{"class":89},[76,41153,31319],{"class":93},[76,41155,1773],{"class":89},[76,41157,34189],{"class":305},[76,41159,41160,41162,41164],{"class":78,"line":16774},[76,41161,31359],{"class":93},[76,41163,247],{"class":89},[76,41165,32359],{"class":93},[76,41167,41168],{"class":78,"line":16785},[76,41169,34541],{"class":82},[76,41171,41172],{"class":78,"line":16808},[76,41173,34546],{"class":82},[76,41175,41176,41178,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220],{"class":78,"line":16830},[76,41177,34551],{"class":93},[76,41179,247],{"class":89},[76,41181,1089],{"class":93},[76,41183,34558],{"class":305},[76,41185,578],{"class":93},[76,41187,34563],{"class":305},[76,41189,578],{"class":93},[76,41191,34568],{"class":305},[76,41193,578],{"class":93},[76,41195,34573],{"class":305},[76,41197,578],{"class":93},[76,41199,34578],{"class":305},[76,41201,578],{"class":93},[76,41203,34583],{"class":305},[76,41205,578],{"class":93},[76,41207,34588],{"class":305},[76,41209,578],{"class":93},[76,41211,34593],{"class":305},[76,41213,578],{"class":93},[76,41215,34598],{"class":305},[76,41217,578],{"class":93},[76,41219,34603],{"class":305},[76,41221,33316],{"class":93},[76,41223,41224,41226],{"class":78,"line":16835},[76,41225,34248],{"class":89},[76,41227,32954],{"class":93},[76,41229,41230],{"class":78,"line":16841},[76,41231,34616],{"class":82},[76,41233,41234,41236,41238,41240],{"class":78,"line":16855},[76,41235,3475],{"class":89},[76,41237,34623],{"class":93},[76,41239,26116],{"class":89},[76,41241,34267],{"class":93},[76,41243,41244,41246,41248],{"class":78,"line":16868},[76,41245,32680],{"class":93},[76,41247,247],{"class":89},[76,41249,32685],{"class":93},[76,41251,41252,41254,41256],{"class":78,"line":16873},[76,41253,32695],{"class":93},[76,41255,247],{"class":89},[76,41257,32700],{"class":93},[76,41259,41260],{"class":78,"line":16887},[76,41261,2472],{"emptyLinePlaceholder":125},[76,41263,41264],{"class":78,"line":16892},[76,41265,34652],{"class":82},[76,41267,41268],{"class":78,"line":16898},[76,41269,32945],{"class":93},[76,41271,41272],{"class":78,"line":16903},[76,41273,34661],{"class":82},[76,41275,41276,41278,41280],{"class":78,"line":16917},[76,41277,32730],{"class":93},[76,41279,247],{"class":89},[76,41281,32735],{"class":93},[76,41283,41284],{"class":78,"line":16922},[76,41285,34674],{"class":82},[76,41287,41288,41290,41292,41294,41296,41298,41300],{"class":78,"line":16927},[76,41289,32747],{"class":93},[76,41291,247],{"class":89},[76,41293,32752],{"class":93},[76,41295,32755],{"class":5288},[76,41297,247],{"class":89},[76,41299,418],{"class":250},[76,41301,208],{"class":93},[76,41303,41304],{"class":78,"line":16941},[76,41305,34695],{"class":82},[76,41307,41308,41310,41312],{"class":78,"line":16953},[76,41309,34700],{"class":93},[76,41311,247],{"class":89},[76,41313,34705],{"class":93},[76,41315,41316,41318,41320],{"class":78,"line":16958},[76,41317,34710],{"class":93},[76,41319,247],{"class":89},[76,41321,34715],{"class":93},[76,41323,41324,41326,41328,41330,41332,41334,41336,41338],{"class":78,"line":16971},[76,41325,34720],{"class":250},[76,41327,202],{"class":93},[76,41329,34725],{"class":305},[76,41331,34728],{"class":93},[76,41333,34731],{"class":305},[76,41335,578],{"class":93},[76,41337,34736],{"class":305},[76,41339,34739],{"class":93},[169,41341,41343],{"id":41342},"_23googlenet","2.3.GoogLeNet",[22070,41345,41347],{"id":41346},"_231原理","2.3.1.原理",[152,41349,41350],{},[155,41351,41352],{},"网络结构",[14,41354,41355],{},[56,41356],{"alt":58,"src":41357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,41359,41360],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41362,41363],{},[56,41364],{"alt":58,"src":41365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41367,41368],{},[56,41369],{"alt":58,"src":41370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41372,41373],{},[56,41374],{"alt":58,"src":41375},"\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",[152,41377,41378],{"start":86},[155,41379,41380],{},"1x1卷积的优点",[14,41382,41383],{},[56,41384],{"alt":58,"src":41385},"\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",[152,41387,41388],{"start":97},[155,41389,41390],{},"全局平均池化层优点",[14,41392,41393],{},[56,41394],{"alt":58,"src":41395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41397,41398],{},[56,41399],{"alt":58,"src":41400},"\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",[152,41402,41403],{"start":103},[155,41404,41405],{},"参数详细描述",[14,41407,41408],{},[56,41409],{"alt":58,"src":41410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41412,41413],{},[56,41414],{"alt":58,"src":41415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41417,41418],{},[56,41419],{"alt":58,"src":41420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41422,41423],{},[56,41424],{"alt":58,"src":41425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41427,41428],{},[56,41429],{"alt":58,"src":41430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41432,41433],{},[56,41434],{"alt":58,"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-035.png",[14,41437,41438],{},[56,41439],{"alt":58,"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-036.png",[14,41442,41443],{},[56,41444],{"alt":58,"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-037.png",[14,41447,41448],{},[56,41449],{"alt":58,"src":41450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41452,41453],{},[56,41454],{"alt":58,"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-039.png",[14,41457,41458],{},[56,41459],{"alt":58,"src":41460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41462,41463],{},[56,41464],{"alt":58,"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-041.png",[14,41467,41468],{},[56,41469],{"alt":58,"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-042.png",[14,41472,41473],{},[56,41474],{"alt":58,"src":41475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41477,41478],{},[56,41479],{"alt":58,"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-044.png",[14,41482,41483],{},[56,41484],{"alt":58,"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-045.png",[14,41487,41488],{},[56,41489],{"alt":58,"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-046.png",[14,41492,41493],{},[56,41494],{"alt":58,"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-047.png",[14,41497,41498],{},[56,41499],{"alt":58,"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-048.png",[14,41502,41503],{},[56,41504],{"alt":58,"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-049.png",[14,41507,41508],{},[56,41509],{"alt":58,"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-050.png",[22070,41512,41514],{"id":41513},"_232代码实现","2.3.2.代码实现",[152,41516,41517],{},[155,41518,30781],{},[14,41520,41521],{},"根据原理一步一步搭建即可",[67,41523,41525],{"className":69,"code":41524,"language":71,"meta":58,"style":58},"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",[73,41526,41527,41533,41543,41553,41557,41574,41583,41598,41608,41613,41646,41651,41688,41735,41740,41776,41823,41828,41833,41868,41900,41904,41912,41928,41952,41977,41998,42003,42018,42022,42026,42031,42048,42053,42062,42077,42088,42132,42136,42164,42168,42179,42207,42211,42248,42252,42280,42284,42295,42331,42363,42391,42395,42406,42440,42472,42504,42537,42571,42599,42603,42614,42647,42679,42693,42697,42710,42714,42719,42731,42739,42761,42766,42771,42776,42781,42786,42791,42805,42813,42822,42835,42850,42859,42863,42871,42882,42893,42904,42915,42926,42932,42936,42941,42953,42973,42982],{"__ignoreMap":58},[76,41528,41529,41531],{"class":78,"line":79},[76,41530,90],{"class":89},[76,41532,30465],{"class":93},[76,41534,41535,41537,41539,41541],{"class":78,"line":86},[76,41536,30807],{"class":89},[76,41538,30810],{"class":93},[76,41540,90],{"class":89},[76,41542,30815],{"class":93},[76,41544,41545,41547,41549,41551],{"class":78,"line":97},[76,41546,30807],{"class":89},[76,41548,30827],{"class":93},[76,41550,90],{"class":89},[76,41552,30832],{"class":93},[76,41554,41555],{"class":78,"line":103},[76,41556,2472],{"emptyLinePlaceholder":125},[76,41558,41559,41561,41564,41566,41568,41570,41572],{"class":78,"line":1273},[76,41560,14766],{"class":89},[76,41562,41563],{"class":2035}," Inception",[76,41565,202],{"class":93},[76,41567,30848],{"class":2035},[76,41569,757],{"class":93},[76,41571,30853],{"class":2035},[76,41573,30856],{"class":93},[76,41575,41576,41578,41580],{"class":78,"line":1287},[76,41577,30871],{"class":89},[76,41579,30874],{"class":250},[76,41581,41582],{"class":93},"(self,in_channels,c1,c2,c3,c4):\n",[76,41584,41585,41587,41590,41592,41594,41596],{"class":78,"line":1293},[76,41586,30887],{"class":250},[76,41588,41589],{"class":93},"(Inception,",[76,41591,30893],{"class":250},[76,41593,30896],{"class":93},[76,41595,30899],{"class":250},[76,41597,2048],{"class":93},[76,41599,41600,41602,41604,41606],{"class":78,"line":1384},[76,41601,30915],{"class":250},[76,41603,34841],{"class":93},[76,41605,247],{"class":89},[76,41607,34846],{"class":93},[76,41609,41610],{"class":78,"line":1390},[76,41611,41612],{"class":82},"        # 路线1：定义1*1卷积\n",[76,41614,41615,41617,41620,41622,41624,41626,41628,41631,41633,41635,41638,41640,41642,41644],{"class":78,"line":1402},[76,41616,30915],{"class":250},[76,41618,41619],{"class":93},".p1_1",[76,41621,247],{"class":89},[76,41623,30923],{"class":93},[76,41625,30926],{"class":5288},[76,41627,247],{"class":89},[76,41629,41630],{"class":93},"in_channels,",[76,41632,30935],{"class":5288},[76,41634,247],{"class":89},[76,41636,41637],{"class":93},"c1,",[76,41639,30944],{"class":5288},[76,41641,247],{"class":89},[76,41643,418],{"class":250},[76,41645,208],{"class":93},[76,41647,41648],{"class":78,"line":1684},[76,41649,41650],{"class":82},"        # 路线2：定义1*1卷积和3*3\n",[76,41652,41653,41655,41658,41660,41662,41664,41666,41668,41670,41672,41675,41677,41680,41682,41684,41686],{"class":78,"line":1689},[76,41654,30915],{"class":250},[76,41656,41657],{"class":93},".p2_1",[76,41659,247],{"class":89},[76,41661,30923],{"class":93},[76,41663,30926],{"class":5288},[76,41665,247],{"class":89},[76,41667,41630],{"class":93},[76,41669,30935],{"class":5288},[76,41671,247],{"class":89},[76,41673,41674],{"class":93},"c2[",[76,41676,392],{"class":250},[76,41678,41679],{"class":93},"],",[76,41681,30944],{"class":5288},[76,41683,247],{"class":89},[76,41685,418],{"class":250},[76,41687,208],{"class":93},[76,41689,41690,41692,41695,41697,41699,41701,41703,41705,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733],{"class":78,"line":1695},[76,41691,30915],{"class":250},[76,41693,41694],{"class":93},".p2_2",[76,41696,247],{"class":89},[76,41698,30923],{"class":93},[76,41700,30926],{"class":5288},[76,41702,247],{"class":89},[76,41704,41674],{"class":93},[76,41706,392],{"class":250},[76,41708,41679],{"class":93},[76,41710,30935],{"class":5288},[76,41712,247],{"class":89},[76,41714,41674],{"class":93},[76,41716,418],{"class":250},[76,41718,41679],{"class":93},[76,41720,30944],{"class":5288},[76,41722,247],{"class":89},[76,41724,272],{"class":250},[76,41726,578],{"class":93},[76,41728,30953],{"class":5288},[76,41730,247],{"class":89},[76,41732,418],{"class":250},[76,41734,208],{"class":93},[76,41736,41737],{"class":78,"line":1700},[76,41738,41739],{"class":82},"        # 路线3：定义1*1卷积和5*5\n",[76,41741,41742,41744,41747,41749,41751,41753,41755,41757,41759,41761,41764,41766,41768,41770,41772,41774],{"class":78,"line":1714},[76,41743,30915],{"class":250},[76,41745,41746],{"class":93},".p3_1",[76,41748,247],{"class":89},[76,41750,30923],{"class":93},[76,41752,30926],{"class":5288},[76,41754,247],{"class":89},[76,41756,41630],{"class":93},[76,41758,30935],{"class":5288},[76,41760,247],{"class":89},[76,41762,41763],{"class":93},"c3[",[76,41765,392],{"class":250},[76,41767,41679],{"class":93},[76,41769,30944],{"class":5288},[76,41771,247],{"class":89},[76,41773,418],{"class":250},[76,41775,208],{"class":93},[76,41777,41778,41780,41783,41785,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807,41809,41811,41813,41815,41817,41819,41821],{"class":78,"line":1719},[76,41779,30915],{"class":250},[76,41781,41782],{"class":93},".p3_2",[76,41784,247],{"class":89},[76,41786,30923],{"class":93},[76,41788,30926],{"class":5288},[76,41790,247],{"class":89},[76,41792,41763],{"class":93},[76,41794,392],{"class":250},[76,41796,41679],{"class":93},[76,41798,30935],{"class":5288},[76,41800,247],{"class":89},[76,41802,41763],{"class":93},[76,41804,418],{"class":250},[76,41806,41679],{"class":93},[76,41808,30944],{"class":5288},[76,41810,247],{"class":89},[76,41812,520],{"class":250},[76,41814,578],{"class":93},[76,41816,30953],{"class":5288},[76,41818,247],{"class":89},[76,41820,278],{"class":250},[76,41822,208],{"class":93},[76,41824,41825],{"class":78,"line":1725},[76,41826,41827],{"class":82},"        # 路线4：定义3*3最大池化和1*1卷积\n",[76,41829,41830],{"class":78,"line":1746},[76,41831,41832],{"class":82},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[76,41834,41835,41837,41840,41842,41844,41846,41848,41850,41852,41854,41856,41858,41860,41862,41864,41866],{"class":78,"line":1751},[76,41836,30915],{"class":250},[76,41838,41839],{"class":93},".p4_1",[76,41841,247],{"class":89},[76,41843,34899],{"class":93},[76,41845,30944],{"class":5288},[76,41847,247],{"class":89},[76,41849,272],{"class":250},[76,41851,578],{"class":93},[76,41853,30999],{"class":5288},[76,41855,247],{"class":89},[76,41857,418],{"class":250},[76,41859,578],{"class":93},[76,41861,30953],{"class":5288},[76,41863,247],{"class":89},[76,41865,418],{"class":250},[76,41867,208],{"class":93},[76,41869,41870,41872,41875,41877,41879,41881,41883,41885,41887,41889,41892,41894,41896,41898],{"class":78,"line":1765},[76,41871,30915],{"class":250},[76,41873,41874],{"class":93},".p4_2",[76,41876,247],{"class":89},[76,41878,30923],{"class":93},[76,41880,30926],{"class":5288},[76,41882,247],{"class":89},[76,41884,41630],{"class":93},[76,41886,30935],{"class":5288},[76,41888,247],{"class":89},[76,41890,41891],{"class":93},"c4,",[76,41893,30944],{"class":5288},[76,41895,247],{"class":89},[76,41897,418],{"class":250},[76,41899,208],{"class":93},[76,41901,41902],{"class":78,"line":1770},[76,41903,2472],{"emptyLinePlaceholder":125},[76,41905,41906,41908,41910],{"class":78,"line":1799},[76,41907,30871],{"class":89},[76,41909,31163],{"class":2035},[76,41911,31166],{"class":93},[76,41913,41914,41917,41919,41921,41923,41925],{"class":78,"line":1804},[76,41915,41916],{"class":93},"        p1",[76,41918,247],{"class":89},[76,41920,30893],{"class":250},[76,41922,35254],{"class":93},[76,41924,30893],{"class":250},[76,41926,41927],{"class":93},".p1_1(x))\n",[76,41929,41930,41932,41934,41936,41938,41940,41943,41945,41947,41949],{"class":78,"line":1821},[76,41931,7157],{"class":93},[76,41933,247],{"class":89},[76,41935,30893],{"class":250},[76,41937,35254],{"class":93},[76,41939,30893],{"class":250},[76,41941,41942],{"class":93},".p2_2(",[76,41944,30893],{"class":250},[76,41946,35254],{"class":93},[76,41948,30893],{"class":250},[76,41950,41951],{"class":93},".p2_1(x))))\n",[76,41953,41954,41957,41959,41961,41963,41965,41968,41970,41972,41974],{"class":78,"line":1826},[76,41955,41956],{"class":93},"        p3",[76,41958,247],{"class":89},[76,41960,30893],{"class":250},[76,41962,35254],{"class":93},[76,41964,30893],{"class":250},[76,41966,41967],{"class":93},".p3_2(",[76,41969,30893],{"class":250},[76,41971,35254],{"class":93},[76,41973,30893],{"class":250},[76,41975,41976],{"class":93},".p3_1(x))))\n",[76,41978,41979,41982,41984,41986,41988,41990,41993,41995],{"class":78,"line":1831},[76,41980,41981],{"class":93},"        p4",[76,41983,247],{"class":89},[76,41985,30893],{"class":250},[76,41987,35254],{"class":93},[76,41989,30893],{"class":250},[76,41991,41992],{"class":93},".p4_2(",[76,41994,30893],{"class":250},[76,41996,41997],{"class":93},".p4_1(x)))\n",[76,41999,42000],{"class":78,"line":1836},[76,42001,42002],{"class":82},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[76,42004,42005,42007,42010,42012,42014,42016],{"class":78,"line":1850},[76,42006,14824],{"class":89},[76,42008,42009],{"class":93}," torch.cat((p1,p2,p3,p4),",[76,42011,32755],{"class":5288},[76,42013,247],{"class":89},[76,42015,418],{"class":250},[76,42017,208],{"class":93},[76,42019,42020],{"class":78,"line":1855},[76,42021,2472],{"emptyLinePlaceholder":125},[76,42023,42024],{"class":78,"line":2649},[76,42025,2472],{"emptyLinePlaceholder":125},[76,42027,42028],{"class":78,"line":2663},[76,42029,42030],{"class":82},"# 搭建GoogLeNet网络\n",[76,42032,42033,42035,42038,42040,42042,42044,42046],{"class":78,"line":2671},[76,42034,14766],{"class":89},[76,42036,42037],{"class":2035}," GoogLeNet",[76,42039,202],{"class":93},[76,42041,30848],{"class":2035},[76,42043,757],{"class":93},[76,42045,30853],{"class":2035},[76,42047,30856],{"class":93},[76,42049,42050],{"class":78,"line":2676},[76,42051,42052],{"class":82},"    # 必须把Inception导入到里边\n",[76,42054,42055,42057,42059],{"class":78,"line":2682},[76,42056,30871],{"class":89},[76,42058,30874],{"class":250},[76,42060,42061],{"class":93},"(self,Inception):\n",[76,42063,42064,42066,42069,42071,42073,42075],{"class":78,"line":2688},[76,42065,30887],{"class":250},[76,42067,42068],{"class":93},"(GoogLeNet,",[76,42070,30893],{"class":250},[76,42072,30896],{"class":93},[76,42074,30899],{"class":250},[76,42076,2048],{"class":93},[76,42078,42079,42081,42084,42086],{"class":78,"line":2693},[76,42080,30915],{"class":250},[76,42082,42083],{"class":93},".b1",[76,42085,247],{"class":89},[76,42087,38079],{"class":93},[76,42089,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130],{"class":78,"line":8020},[76,42091,38084],{"class":93},[76,42093,30926],{"class":5288},[76,42095,247],{"class":89},[76,42097,418],{"class":250},[76,42099,578],{"class":93},[76,42101,30935],{"class":5288},[76,42103,247],{"class":89},[76,42105,404],{"class":250},[76,42107,578],{"class":93},[76,42109,30944],{"class":5288},[76,42111,247],{"class":89},[76,42113,569],{"class":250},[76,42115,578],{"class":93},[76,42117,30999],{"class":5288},[76,42119,247],{"class":89},[76,42121,278],{"class":250},[76,42123,578],{"class":93},[76,42125,30953],{"class":5288},[76,42127,247],{"class":89},[76,42129,272],{"class":250},[76,42131,38117],{"class":93},[76,42133,42134],{"class":78,"line":8044},[76,42135,38122],{"class":93},[76,42137,42138,42140,42142,42144,42146,42148,42150,42152,42154,42156,42158,42160,42162],{"class":78,"line":8049},[76,42139,38167],{"class":93},[76,42141,30944],{"class":5288},[76,42143,247],{"class":89},[76,42145,272],{"class":250},[76,42147,578],{"class":93},[76,42149,30999],{"class":5288},[76,42151,247],{"class":89},[76,42153,278],{"class":250},[76,42155,578],{"class":93},[76,42157,30953],{"class":5288},[76,42159,247],{"class":89},[76,42161,418],{"class":250},[76,42163,208],{"class":93},[76,42165,42166],{"class":78,"line":8055},[76,42167,38196],{"class":93},[76,42169,42170,42172,42175,42177],{"class":78,"line":8082},[76,42171,30915],{"class":250},[76,42173,42174],{"class":93},".b2",[76,42176,247],{"class":89},[76,42178,38079],{"class":93},[76,42180,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205],{"class":78,"line":8087},[76,42182,38084],{"class":93},[76,42184,30926],{"class":5288},[76,42186,247],{"class":89},[76,42188,404],{"class":250},[76,42190,578],{"class":93},[76,42192,30935],{"class":5288},[76,42194,247],{"class":89},[76,42196,404],{"class":250},[76,42198,578],{"class":93},[76,42200,30944],{"class":5288},[76,42202,247],{"class":89},[76,42204,418],{"class":250},[76,42206,38117],{"class":93},[76,42208,42209],{"class":78,"line":8093},[76,42210,38122],{"class":93},[76,42212,42213,42215,42217,42219,42221,42223,42225,42227,42230,42232,42234,42236,42238,42240,42242,42244,42246],{"class":78,"line":8105},[76,42214,38084],{"class":93},[76,42216,30926],{"class":5288},[76,42218,247],{"class":89},[76,42220,404],{"class":250},[76,42222,578],{"class":93},[76,42224,30935],{"class":5288},[76,42226,247],{"class":89},[76,42228,42229],{"class":250},"192",[76,42231,578],{"class":93},[76,42233,30944],{"class":5288},[76,42235,247],{"class":89},[76,42237,272],{"class":250},[76,42239,578],{"class":93},[76,42241,30953],{"class":5288},[76,42243,247],{"class":89},[76,42245,418],{"class":250},[76,42247,38117],{"class":93},[76,42249,42250],{"class":78,"line":8117},[76,42251,38122],{"class":93},[76,42253,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278],{"class":78,"line":8129},[76,42255,38167],{"class":93},[76,42257,30944],{"class":5288},[76,42259,247],{"class":89},[76,42261,272],{"class":250},[76,42263,578],{"class":93},[76,42265,30999],{"class":5288},[76,42267,247],{"class":89},[76,42269,278],{"class":250},[76,42271,578],{"class":93},[76,42273,30953],{"class":5288},[76,42275,247],{"class":89},[76,42277,418],{"class":250},[76,42279,208],{"class":93},[76,42281,42282],{"class":78,"line":9788},[76,42283,38196],{"class":93},[76,42285,42286,42288,42291,42293],{"class":78,"line":9813},[76,42287,30915],{"class":250},[76,42289,42290],{"class":93},".b3",[76,42292,247],{"class":89},[76,42294,38079],{"class":93},[76,42296,42297,42300,42302,42304,42306,42309,42311,42313,42315,42318,42320,42322,42324,42327,42329],{"class":78,"line":9836},[76,42298,42299],{"class":93},"            Inception(",[76,42301,42229],{"class":250},[76,42303,578],{"class":93},[76,42305,404],{"class":250},[76,42307,42308],{"class":93},",(",[76,42310,410],{"class":250},[76,42312,578],{"class":93},[76,42314,32140],{"class":250},[76,42316,42317],{"class":93},"),(",[76,42319,800],{"class":250},[76,42321,578],{"class":93},[76,42323,398],{"class":250},[76,42325,42326],{"class":93},"),",[76,42328,398],{"class":250},[76,42330,38117],{"class":93},[76,42332,42333,42335,42337,42339,42341,42343,42345,42347,42349,42351,42353,42355,42357,42359,42361],{"class":78,"line":9860},[76,42334,42299],{"class":93},[76,42336,34940],{"class":250},[76,42338,578],{"class":93},[76,42340,32140],{"class":250},[76,42342,42308],{"class":93},[76,42344,32140],{"class":250},[76,42346,578],{"class":93},[76,42348,42229],{"class":250},[76,42350,42317],{"class":93},[76,42352,398],{"class":250},[76,42354,578],{"class":93},[76,42356,410],{"class":250},[76,42358,42326],{"class":93},[76,42360,404],{"class":250},[76,42362,38117],{"class":93},[76,42364,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389],{"class":78,"line":9865},[76,42366,38167],{"class":93},[76,42368,30944],{"class":5288},[76,42370,247],{"class":89},[76,42372,272],{"class":250},[76,42374,578],{"class":93},[76,42376,30999],{"class":5288},[76,42378,247],{"class":89},[76,42380,278],{"class":250},[76,42382,578],{"class":93},[76,42384,30953],{"class":5288},[76,42386,247],{"class":89},[76,42388,418],{"class":250},[76,42390,208],{"class":93},[76,42392,42393],{"class":78,"line":9870},[76,42394,38196],{"class":93},[76,42396,42397,42399,42402,42404],{"class":78,"line":9875},[76,42398,30915],{"class":250},[76,42400,42401],{"class":93},".b4",[76,42403,247],{"class":89},[76,42405,38079],{"class":93},[76,42407,42408,42410,42413,42415,42417,42419,42421,42423,42426,42428,42430,42432,42434,42436,42438],{"class":78,"line":9884},[76,42409,42299],{"class":93},[76,42411,42412],{"class":250},"480",[76,42414,578],{"class":93},[76,42416,42229],{"class":250},[76,42418,42308],{"class":93},[76,42420,410],{"class":250},[76,42422,578],{"class":93},[76,42424,42425],{"class":250},"208",[76,42427,42317],{"class":93},[76,42429,800],{"class":250},[76,42431,578],{"class":93},[76,42433,806],{"class":250},[76,42435,42326],{"class":93},[76,42437,404],{"class":250},[76,42439,38117],{"class":93},[76,42441,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462,42464,42466,42468,42470],{"class":78,"line":9889},[76,42443,42299],{"class":93},[76,42445,38527],{"class":250},[76,42447,578],{"class":93},[76,42449,21120],{"class":250},[76,42451,42308],{"class":93},[76,42453,817],{"class":250},[76,42455,578],{"class":93},[76,42457,31571],{"class":250},[76,42459,42317],{"class":93},[76,42461,999],{"class":250},[76,42463,578],{"class":93},[76,42465,404],{"class":250},[76,42467,42326],{"class":93},[76,42469,404],{"class":250},[76,42471,38117],{"class":93},[76,42473,42474,42476,42478,42480,42482,42484,42486,42488,42490,42492,42494,42496,42498,42500,42502],{"class":78,"line":9895},[76,42475,42299],{"class":93},[76,42477,38527],{"class":250},[76,42479,578],{"class":93},[76,42481,32140],{"class":250},[76,42483,42308],{"class":93},[76,42485,32140],{"class":250},[76,42487,578],{"class":93},[76,42489,34940],{"class":250},[76,42491,42317],{"class":93},[76,42493,999],{"class":250},[76,42495,578],{"class":93},[76,42497,404],{"class":250},[76,42499,42326],{"class":93},[76,42501,404],{"class":250},[76,42503,38117],{"class":93},[76,42505,42506,42508,42510,42512,42514,42516,42518,42520,42523,42525,42527,42529,42531,42533,42535],{"class":78,"line":9916},[76,42507,42299],{"class":93},[76,42509,38527],{"class":250},[76,42511,578],{"class":93},[76,42513,817],{"class":250},[76,42515,42308],{"class":93},[76,42517,32140],{"class":250},[76,42519,578],{"class":93},[76,42521,42522],{"class":250},"288",[76,42524,42317],{"class":93},[76,42526,398],{"class":250},[76,42528,578],{"class":93},[76,42530,404],{"class":250},[76,42532,42326],{"class":93},[76,42534,404],{"class":250},[76,42536,38117],{"class":93},[76,42538,42539,42541,42544,42546,42548,42550,42552,42554,42557,42559,42561,42563,42565,42567,42569],{"class":78,"line":9922},[76,42540,42299],{"class":93},[76,42542,42543],{"class":250},"528",[76,42545,578],{"class":93},[76,42547,34940],{"class":250},[76,42549,42308],{"class":93},[76,42551,21120],{"class":250},[76,42553,578],{"class":93},[76,42555,42556],{"class":250},"320",[76,42558,42317],{"class":93},[76,42560,398],{"class":250},[76,42562,578],{"class":93},[76,42564,32140],{"class":250},[76,42566,42326],{"class":93},[76,42568,32140],{"class":250},[76,42570,38117],{"class":93},[76,42572,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597],{"class":78,"line":9936},[76,42574,38167],{"class":93},[76,42576,30944],{"class":5288},[76,42578,247],{"class":89},[76,42580,272],{"class":250},[76,42582,578],{"class":93},[76,42584,30999],{"class":5288},[76,42586,247],{"class":89},[76,42588,278],{"class":250},[76,42590,578],{"class":93},[76,42592,30953],{"class":5288},[76,42594,247],{"class":89},[76,42596,418],{"class":250},[76,42598,208],{"class":93},[76,42600,42601],{"class":78,"line":9942},[76,42602,38196],{"class":93},[76,42604,42605,42607,42610,42612],{"class":78,"line":9969},[76,42606,30915],{"class":250},[76,42608,42609],{"class":93},".b5",[76,42611,247],{"class":89},[76,42613,38079],{"class":93},[76,42615,42616,42618,42621,42623,42625,42627,42629,42631,42633,42635,42637,42639,42641,42643,42645],{"class":78,"line":9978},[76,42617,42299],{"class":93},[76,42619,42620],{"class":250},"832",[76,42622,578],{"class":93},[76,42624,34940],{"class":250},[76,42626,42308],{"class":93},[76,42628,21120],{"class":250},[76,42630,578],{"class":93},[76,42632,42556],{"class":250},[76,42634,42317],{"class":93},[76,42636,398],{"class":250},[76,42638,578],{"class":93},[76,42640,32140],{"class":250},[76,42642,42326],{"class":93},[76,42644,32140],{"class":250},[76,42646,38117],{"class":93},[76,42648,42649,42651,42653,42655,42657,42659,42661,42663,42665,42667,42669,42671,42673,42675,42677],{"class":78,"line":9984},[76,42650,42299],{"class":93},[76,42652,42620],{"class":250},[76,42654,578],{"class":93},[76,42656,35010],{"class":250},[76,42658,42308],{"class":93},[76,42660,42229],{"class":250},[76,42662,578],{"class":93},[76,42664,35010],{"class":250},[76,42666,42317],{"class":93},[76,42668,806],{"class":250},[76,42670,578],{"class":93},[76,42672,32140],{"class":250},[76,42674,42326],{"class":93},[76,42676,32140],{"class":250},[76,42678,38117],{"class":93},[76,42680,42681,42684,42686,42688,42690],{"class":78,"line":9992},[76,42682,42683],{"class":93},"            nn.AdaptiveAvgPool2d((",[76,42685,418],{"class":250},[76,42687,578],{"class":93},[76,42689,418],{"class":250},[76,42691,42692],{"class":93},")),\n",[76,42694,42695],{"class":78,"line":9997},[76,42696,38860],{"class":93},[76,42698,42699,42701,42704,42706,42708],{"class":78,"line":16676},[76,42700,38865],{"class":93},[76,42702,42703],{"class":250},"1024",[76,42705,578],{"class":93},[76,42707,646],{"class":250},[76,42709,208],{"class":93},[76,42711,42712],{"class":78,"line":16682},[76,42713,38196],{"class":93},[76,42715,42716],{"class":78,"line":16705},[76,42717,42718],{"class":82},"        # 对模型参数初始化\n",[76,42720,42721,42723,42725,42727,42729],{"class":78,"line":16711},[76,42722,3475],{"class":89},[76,42724,38938],{"class":93},[76,42726,26116],{"class":89},[76,42728,38943],{"class":250},[76,42730,38946],{"class":93},[76,42732,42733,42735,42737],{"class":78,"line":16734},[76,42734,4714],{"class":89},[76,42736,38958],{"class":250},[76,42738,38961],{"class":93},[76,42740,42741,42743,42746,42748,42751,42753,42755,42757,42759],{"class":78,"line":16748},[76,42742,38971],{"class":93},[76,42744,42745],{"class":5288},"mode",[76,42747,247],{"class":89},[76,42749,42750],{"class":305},"'fan_out'",[76,42752,578],{"class":93},[76,42754,38974],{"class":5288},[76,42756,247],{"class":89},[76,42758,38979],{"class":305},[76,42760,208],{"class":93},[76,42762,42763],{"class":78,"line":16768},[76,42764,42765],{"class":82},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[76,42767,42768],{"class":78,"line":16774},[76,42769,42770],{"class":82},"                # ② mode = 'fan_out'决定使用的fan值：\n",[76,42772,42773],{"class":78,"line":16785},[76,42774,42775],{"class":82},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[76,42777,42778],{"class":78,"line":16808},[76,42779,42780],{"class":82},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[76,42782,42783],{"class":78,"line":16830},[76,42784,42785],{"class":82},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[76,42787,42788],{"class":78,"line":16835},[76,42789,42790],{"class":82},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[76,42792,42793,42795,42797,42799,42801,42803],{"class":78,"line":16841},[76,42794,38991],{"class":89},[76,42796,38994],{"class":93},[76,42798,38997],{"class":89},[76,42800,39000],{"class":89},[76,42802,39003],{"class":250},[76,42804,3811],{"class":93},[76,42806,42807,42809,42811],{"class":78,"line":16855},[76,42808,39015],{"class":93},[76,42810,392],{"class":250},[76,42812,208],{"class":93},[76,42814,42815,42818,42820],{"class":78,"line":16868},[76,42816,42817],{"class":89},"                elif",[76,42819,38958],{"class":250},[76,42821,39034],{"class":93},[76,42823,42824,42827,42829,42831,42833],{"class":78,"line":16873},[76,42825,42826],{"class":93},"                    nn.init.normal_(m.weight,",[76,42828,392],{"class":250},[76,42830,578],{"class":93},[76,42832,39056],{"class":250},[76,42834,208],{"class":93},[76,42836,42837,42840,42842,42844,42846,42848],{"class":78,"line":16887},[76,42838,42839],{"class":89},"                    if",[76,42841,38994],{"class":93},[76,42843,38997],{"class":89},[76,42845,39000],{"class":89},[76,42847,39003],{"class":250},[76,42849,3811],{"class":93},[76,42851,42852,42855,42857],{"class":78,"line":16892},[76,42853,42854],{"class":93},"                        nn.init.constant_(m.bias,",[76,42856,392],{"class":250},[76,42858,208],{"class":93},[76,42860,42861],{"class":78,"line":16898},[76,42862,35235],{"class":82},[76,42864,42865,42867,42869],{"class":78,"line":16903},[76,42866,30871],{"class":89},[76,42868,31163],{"class":2035},[76,42870,31166],{"class":93},[76,42872,42873,42875,42877,42879],{"class":78,"line":16917},[76,42874,31171],{"class":93},[76,42876,247],{"class":89},[76,42878,30893],{"class":250},[76,42880,42881],{"class":93},".b1(x)\n",[76,42883,42884,42886,42888,42890],{"class":78,"line":16922},[76,42885,31171],{"class":93},[76,42887,247],{"class":89},[76,42889,30893],{"class":250},[76,42891,42892],{"class":93},".b2(x)\n",[76,42894,42895,42897,42899,42901],{"class":78,"line":16927},[76,42896,31171],{"class":93},[76,42898,247],{"class":89},[76,42900,30893],{"class":250},[76,42902,42903],{"class":93},".b3(x)\n",[76,42905,42906,42908,42910,42912],{"class":78,"line":16941},[76,42907,31171],{"class":93},[76,42909,247],{"class":89},[76,42911,30893],{"class":250},[76,42913,42914],{"class":93},".b4(x)\n",[76,42916,42917,42919,42921,42923],{"class":78,"line":16953},[76,42918,31171],{"class":93},[76,42920,247],{"class":89},[76,42922,30893],{"class":250},[76,42924,42925],{"class":93},".b5(x)\n",[76,42927,42928,42930],{"class":78,"line":16958},[76,42929,14824],{"class":89},[76,42931,31279],{"class":93},[76,42933,42934],{"class":78,"line":16971},[76,42935,2472],{"emptyLinePlaceholder":125},[76,42937,42938],{"class":78,"line":16976},[76,42939,42940],{"class":82},"# 模型展示\n",[76,42942,42943,42945,42947,42949,42951],{"class":78,"line":16981},[76,42944,1603],{"class":89},[76,42946,31290],{"class":250},[76,42948,3021],{"class":89},[76,42950,31295],{"class":305},[76,42952,3811],{"class":93},[76,42954,42955,42957,42959,42961,42963,42965,42967,42969,42971],{"class":78,"line":16986},[76,42956,31307],{"class":93},[76,42958,247],{"class":89},[76,42960,30521],{"class":93},[76,42962,31314],{"class":305},[76,42964,1776],{"class":89},[76,42966,31319],{"class":93},[76,42968,1773],{"class":89},[76,42970,30546],{"class":305},[76,42972,208],{"class":93},[76,42974,42975,42977,42979],{"class":78,"line":16999},[76,42976,31359],{"class":93},[76,42978,247],{"class":89},[76,42980,42981],{"class":93},"GoogLeNet(Inception).to(device)\n",[76,42983,42984,42986,42988,42990,42992,42994,42996,42998],{"class":78,"line":17004},[76,42985,31369],{"class":250},[76,42987,31372],{"class":93},[76,42989,418],{"class":250},[76,42991,578],{"class":93},[76,42993,31571],{"class":250},[76,42995,578],{"class":93},[76,42997,31571],{"class":250},[76,42999,31385],{"class":93},[152,43001,43002],{"start":86},[155,43003,39253],{},[67,43005,43007],{"className":69,"code":43006,"language":71,"meta":58,"style":58},"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",[73,43008,43009,43015,43021,43031,43037,43047,43057,43067,43077,43087,43091,43102,43112,43116,43120,43124,43132,43144,43154,43170,43180,43212,43226,43236,43246,43250,43260,43274,43284,43294,43304,43310,43314,43318,43322,43326,43330,43338,43358,43362,43366,43370,43374,43378,43394,43398,43402,43410,43414,43418,43426,43430,43434,43438,43446,43450,43454,43458,43462,43470,43474,43482,43486,43494,43498,43506,43510,43518,43522,43526,43534,43538,43542,43546,43558,43582,43596,43600,43604,43608,43616,43620,43628,43632,43640,43644,43652,43656,43664,43668,43676,43680,43692,43696,43704,43708,43716,43720,43724,43728,43732,43740,43744,43760,43764,43772,43776,43780,43784,43788,43792,43796,43800,43816,43820,43832,43836,43848,43852,43864,43868,43876,43880,43888,43892,43896,43900,43906,43910,43918,43922,43938,43942,43950,43954,43970,43982,43986,43998,44002,44006,44014,44018,44022,44030,44034,44042,44046,44054,44058,44062,44104,44146,44150,44154,44170,44174,44190,44194,44198,44206,44210,44214,44226,44264,44268,44272,44280,44284,44298,44308,44314,44320,44326,44332,44336,44340,44346,44350,44354,44362,44366,44384,44388,44392,44396,44412,44416,44420,44424,44428,44432,44452,44472,44476,44480,44484,44492,44500,44504,44520,44540,44560,44564,44568,44576,44584,44588,44592,44596,44608,44612,44622,44630,44647],{"__ignoreMap":58},[76,43010,43011,43013],{"class":78,"line":79},[76,43012,90],{"class":89},[76,43014,31892],{"class":93},[76,43016,43017,43019],{"class":78,"line":86},[76,43018,90],{"class":89},[76,43020,31899],{"class":93},[76,43022,43023,43025,43027,43029],{"class":78,"line":97},[76,43024,90],{"class":89},[76,43026,31910],{"class":93},[76,43028,31453],{"class":89},[76,43030,31915],{"class":93},[76,43032,43033,43035],{"class":78,"line":103},[76,43034,90],{"class":89},[76,43036,30465],{"class":93},[76,43038,43039,43041,43043,43045],{"class":78,"line":1273},[76,43040,30807],{"class":89},[76,43042,31485],{"class":93},[76,43044,90],{"class":89},[76,43046,31932],{"class":93},[76,43048,43049,43051,43053,43055],{"class":78,"line":1287},[76,43050,30807],{"class":89},[76,43052,31438],{"class":93},[76,43054,90],{"class":89},[76,43056,31443],{"class":93},[76,43058,43059,43061,43063,43065],{"class":78,"line":1293},[76,43060,30807],{"class":89},[76,43062,31468],{"class":93},[76,43064,90],{"class":89},[76,43066,31473],{"class":93},[76,43068,43069,43071,43073,43075],{"class":78,"line":1384},[76,43070,90],{"class":89},[76,43072,31485],{"class":93},[76,43074,31453],{"class":89},[76,43076,31490],{"class":93},[76,43078,43079,43081,43083,43085],{"class":78,"line":1390},[76,43080,90],{"class":89},[76,43082,31502],{"class":93},[76,43084,31453],{"class":89},[76,43086,31507],{"class":93},[76,43088,43089],{"class":78,"line":1402},[76,43090,31977],{"class":82},[76,43092,43093,43095,43097,43099],{"class":78,"line":1684},[76,43094,30807],{"class":89},[76,43096,31984],{"class":93},[76,43098,90],{"class":89},[76,43100,43101],{"class":93}," GoogLeNet, Inception\n",[76,43103,43104,43106,43108,43110],{"class":78,"line":1689},[76,43105,30807],{"class":89},[76,43107,30810],{"class":93},[76,43109,90],{"class":89},[76,43111,30815],{"class":93},[76,43113,43114],{"class":78,"line":1695},[76,43115,2472],{"emptyLinePlaceholder":125},[76,43117,43118],{"class":78,"line":1700},[76,43119,2472],{"emptyLinePlaceholder":125},[76,43121,43122],{"class":78,"line":1714},[76,43123,32012],{"class":82},[76,43125,43126,43128,43130],{"class":78,"line":1719},[76,43127,32017],{"class":89},[76,43129,32020],{"class":2035},[76,43131,32023],{"class":93},[76,43133,43134,43136,43138,43140,43142],{"class":78,"line":1725},[76,43135,32028],{"class":93},[76,43137,247],{"class":89},[76,43139,31525],{"class":93},[76,43141,31533],{"class":305},[76,43143,31536],{"class":93},[76,43145,43146,43148,43150,43152],{"class":78,"line":1746},[76,43147,32041],{"class":5288},[76,43149,247],{"class":89},[76,43151,31546],{"class":250},[76,43153,31536],{"class":93},[76,43155,43156,43158,43160,43162,43164,43166,43168],{"class":78,"line":1751},[76,43157,32052],{"class":5288},[76,43159,247],{"class":89},[76,43161,31563],{"class":93},[76,43163,31566],{"class":5288},[76,43165,247],{"class":89},[76,43167,35519],{"class":250},[76,43169,31574],{"class":93},[76,43171,43172,43174,43176,43178],{"class":78,"line":1765},[76,43173,32069],{"class":5288},[76,43175,247],{"class":89},[76,43177,31546],{"class":250},[76,43179,208],{"class":93},[76,43181,43182,43184,43186,43188,43190,43192,43194,43196,43198,43200,43202,43204,43206,43208,43210],{"class":78,"line":1770},[76,43183,32080],{"class":93},[76,43185,247],{"class":89},[76,43187,32085],{"class":93},[76,43189,32088],{"class":250},[76,43191,202],{"class":93},[76,43193,32093],{"class":250},[76,43195,655],{"class":89},[76,43197,7430],{"class":250},[76,43199,32100],{"class":93},[76,43201,32088],{"class":250},[76,43203,202],{"class":93},[76,43205,32107],{"class":250},[76,43207,655],{"class":89},[76,43209,7430],{"class":250},[76,43211,32114],{"class":93},[76,43213,43214,43216,43218,43220,43222,43224],{"class":78,"line":1799},[76,43215,32119],{"class":93},[76,43217,247],{"class":89},[76,43219,32124],{"class":93},[76,43221,31607],{"class":5288},[76,43223,247],{"class":89},[76,43225,31612],{"class":93},[76,43227,43228,43230,43232,43234],{"class":78,"line":1804},[76,43229,32135],{"class":5288},[76,43231,247],{"class":89},[76,43233,398],{"class":250},[76,43235,31536],{"class":93},[76,43237,43238,43240,43242,43244],{"class":78,"line":1821},[76,43239,32147],{"class":5288},[76,43241,247],{"class":89},[76,43243,31546],{"class":250},[76,43245,31536],{"class":93},[76,43247,43248],{"class":78,"line":1826},[76,43249,32158],{"class":82},[76,43251,43252,43254,43256,43258],{"class":78,"line":1831},[76,43253,32163],{"class":5288},[76,43255,247],{"class":89},[76,43257,595],{"class":250},[76,43259,208],{"class":93},[76,43261,43262,43264,43266,43268,43270,43272],{"class":78,"line":1836},[76,43263,32174],{"class":93},[76,43265,247],{"class":89},[76,43267,31604],{"class":93},[76,43269,31607],{"class":5288},[76,43271,247],{"class":89},[76,43273,32185],{"class":93},[76,43275,43276,43278,43280,43282],{"class":78,"line":1850},[76,43277,32190],{"class":5288},[76,43279,247],{"class":89},[76,43281,398],{"class":250},[76,43283,31536],{"class":93},[76,43285,43286,43288,43290,43292],{"class":78,"line":1855},[76,43287,32201],{"class":5288},[76,43289,247],{"class":89},[76,43291,31546],{"class":250},[76,43293,31536],{"class":93},[76,43295,43296,43298,43300,43302],{"class":78,"line":2649},[76,43297,32212],{"class":5288},[76,43299,247],{"class":89},[76,43301,595],{"class":250},[76,43303,208],{"class":93},[76,43305,43306,43308],{"class":78,"line":2663},[76,43307,4162],{"class":89},[76,43309,32225],{"class":93},[76,43311,43312],{"class":78,"line":2671},[76,43313,2472],{"emptyLinePlaceholder":125},[76,43315,43316],{"class":78,"line":2676},[76,43317,32234],{"class":82},[76,43319,43320],{"class":78,"line":2682},[76,43321,32239],{"class":82},[76,43323,43324],{"class":78,"line":2688},[76,43325,2472],{"emptyLinePlaceholder":125},[76,43327,43328],{"class":78,"line":2693},[76,43329,32248],{"class":82},[76,43331,43332,43334,43336],{"class":78,"line":8020},[76,43333,32017],{"class":89},[76,43335,32255],{"class":2035},[76,43337,32258],{"class":93},[76,43339,43340,43342,43344,43346,43348,43350,43352,43354,43356],{"class":78,"line":8044},[76,43341,31307],{"class":93},[76,43343,247],{"class":89},[76,43345,30521],{"class":93},[76,43347,31314],{"class":305},[76,43349,1776],{"class":89},[76,43351,31319],{"class":93},[76,43353,1773],{"class":89},[76,43355,32277],{"class":305},[76,43357,208],{"class":93},[76,43359,43360],{"class":78,"line":8049},[76,43361,2472],{"emptyLinePlaceholder":125},[76,43363,43364],{"class":78,"line":8055},[76,43365,2472],{"emptyLinePlaceholder":125},[76,43367,43368],{"class":78,"line":8082},[76,43369,32292],{"class":82},[76,43371,43372],{"class":78,"line":8087},[76,43373,32297],{"class":82},[76,43375,43376],{"class":78,"line":8093},[76,43377,32302],{"class":82},[76,43379,43380,43382,43384,43386,43388,43390,43392],{"class":78,"line":8105},[76,43381,32307],{"class":93},[76,43383,247],{"class":89},[76,43385,32312],{"class":93},[76,43387,32315],{"class":5288},[76,43389,247],{"class":89},[76,43391,32320],{"class":250},[76,43393,208],{"class":93},[76,43395,43396],{"class":78,"line":8117},[76,43397,2472],{"emptyLinePlaceholder":125},[76,43399,43400],{"class":78,"line":8129},[76,43401,32331],{"class":82},[76,43403,43404,43406,43408],{"class":78,"line":9788},[76,43405,32336],{"class":93},[76,43407,247],{"class":89},[76,43409,32341],{"class":93},[76,43411,43412],{"class":78,"line":9813},[76,43413,2472],{"emptyLinePlaceholder":125},[76,43415,43416],{"class":78,"line":9836},[76,43417,32350],{"class":82},[76,43419,43420,43422,43424],{"class":78,"line":9860},[76,43421,31359],{"class":93},[76,43423,247],{"class":89},[76,43425,32359],{"class":93},[76,43427,43428],{"class":78,"line":9865},[76,43429,32364],{"class":82},[76,43431,43432],{"class":78,"line":9870},[76,43433,32369],{"class":82},[76,43435,43436],{"class":78,"line":9875},[76,43437,32374],{"class":82},[76,43439,43440,43442,43444],{"class":78,"line":9884},[76,43441,32379],{"class":93},[76,43443,247],{"class":89},[76,43445,32384],{"class":93},[76,43447,43448],{"class":78,"line":9889},[76,43449,2472],{"emptyLinePlaceholder":125},[76,43451,43452],{"class":78,"line":9895},[76,43453,2472],{"emptyLinePlaceholder":125},[76,43455,43456],{"class":78,"line":9916},[76,43457,32397],{"class":82},[76,43459,43460],{"class":78,"line":9922},[76,43461,32402],{"class":82},[76,43463,43464,43466,43468],{"class":78,"line":9936},[76,43465,32407],{"class":93},[76,43467,247],{"class":89},[76,43469,32412],{"class":250},[76,43471,43472],{"class":78,"line":9942},[76,43473,32417],{"class":82},[76,43475,43476,43478,43480],{"class":78,"line":9969},[76,43477,32422],{"class":93},[76,43479,247],{"class":89},[76,43481,32427],{"class":93},[76,43483,43484],{"class":78,"line":9978},[76,43485,32432],{"class":82},[76,43487,43488,43490,43492],{"class":78,"line":9984},[76,43489,32437],{"class":93},[76,43491,247],{"class":89},[76,43493,32427],{"class":93},[76,43495,43496],{"class":78,"line":9992},[76,43497,32446],{"class":82},[76,43499,43500,43502,43504],{"class":78,"line":9997},[76,43501,32451],{"class":93},[76,43503,247],{"class":89},[76,43505,32427],{"class":93},[76,43507,43508],{"class":78,"line":16676},[76,43509,32460],{"class":82},[76,43511,43512,43514,43516],{"class":78,"line":16682},[76,43513,32465],{"class":93},[76,43515,247],{"class":89},[76,43517,32427],{"class":93},[76,43519,43520],{"class":78,"line":16705},[76,43521,2472],{"emptyLinePlaceholder":125},[76,43523,43524],{"class":78,"line":16711},[76,43525,32478],{"class":82},[76,43527,43528,43530,43532],{"class":78,"line":16734},[76,43529,32483],{"class":93},[76,43531,247],{"class":89},[76,43533,32488],{"class":93},[76,43535,43536],{"class":78,"line":16748},[76,43537,2472],{"emptyLinePlaceholder":125},[76,43539,43540],{"class":78,"line":16768},[76,43541,2472],{"emptyLinePlaceholder":125},[76,43543,43544],{"class":78,"line":16774},[76,43545,32501],{"class":82},[76,43547,43548,43550,43552,43554,43556],{"class":78,"line":16785},[76,43549,3273],{"class":89},[76,43551,32508],{"class":93},[76,43553,26116],{"class":89},[76,43555,32513],{"class":250},[76,43557,32516],{"class":93},[76,43559,43560,43562,43564,43566,43568,43570,43572,43574,43576,43578,43580],{"class":78,"line":16808},[76,43561,32521],{"class":250},[76,43563,202],{"class":93},[76,43565,32526],{"class":305},[76,43567,32529],{"class":250},[76,43569,783],{"class":305},[76,43571,32529],{"class":250},[76,43573,452],{"class":305},[76,43575,32538],{"class":93},[76,43577,112],{"class":89},[76,43579,418],{"class":250},[76,43581,30567],{"class":93},[76,43583,43584,43586,43588,43590,43592,43594],{"class":78,"line":16830},[76,43585,32521],{"class":250},[76,43587,202],{"class":93},[76,43589,32553],{"class":305},[76,43591,655],{"class":89},[76,43593,646],{"class":250},[76,43595,208],{"class":93},[76,43597,43598],{"class":78,"line":16835},[76,43599,2472],{"emptyLinePlaceholder":125},[76,43601,43602],{"class":78,"line":16841},[76,43603,32568],{"class":82},[76,43605,43606],{"class":78,"line":16855},[76,43607,32573],{"class":82},[76,43609,43610,43612,43614],{"class":78,"line":16868},[76,43611,32578],{"class":93},[76,43613,247],{"class":89},[76,43615,32412],{"class":250},[76,43617,43618],{"class":78,"line":16873},[76,43619,32587],{"class":82},[76,43621,43622,43624,43626],{"class":78,"line":16887},[76,43623,32592],{"class":93},[76,43625,247],{"class":89},[76,43627,3157],{"class":250},[76,43629,43630],{"class":78,"line":16892},[76,43631,32601],{"class":82},[76,43633,43634,43636,43638],{"class":78,"line":16898},[76,43635,32606],{"class":93},[76,43637,247],{"class":89},[76,43639,32412],{"class":250},[76,43641,43642],{"class":78,"line":16903},[76,43643,32615],{"class":82},[76,43645,43646,43648,43650],{"class":78,"line":16917},[76,43647,32620],{"class":93},[76,43649,247],{"class":89},[76,43651,3157],{"class":250},[76,43653,43654],{"class":78,"line":16922},[76,43655,32629],{"class":82},[76,43657,43658,43660,43662],{"class":78,"line":16927},[76,43659,32634],{"class":93},[76,43661,247],{"class":89},[76,43663,3157],{"class":250},[76,43665,43666],{"class":78,"line":16941},[76,43667,32643],{"class":82},[76,43669,43670,43672,43674],{"class":78,"line":16953},[76,43671,32648],{"class":93},[76,43673,247],{"class":89},[76,43675,3157],{"class":250},[76,43677,43678],{"class":78,"line":16958},[76,43679,32657],{"class":82},[76,43681,43682,43684,43686,43688,43690],{"class":78,"line":16971},[76,43683,3475],{"class":89},[76,43685,31671],{"class":93},[76,43687,26116],{"class":89},[76,43689,31676],{"class":250},[76,43691,32670],{"class":93},[76,43693,43694],{"class":78,"line":16976},[76,43695,32675],{"class":82},[76,43697,43698,43700,43702],{"class":78,"line":16981},[76,43699,32680],{"class":93},[76,43701,247],{"class":89},[76,43703,32685],{"class":93},[76,43705,43706],{"class":78,"line":16986},[76,43707,32690],{"class":82},[76,43709,43710,43712,43714],{"class":78,"line":16999},[76,43711,32695],{"class":93},[76,43713,247],{"class":89},[76,43715,32700],{"class":93},[76,43717,43718],{"class":78,"line":17004},[76,43719,32706],{"class":82},[76,43721,43722],{"class":78,"line":32703},[76,43723,32712],{"class":93},[76,43725,43726],{"class":78,"line":32709},[76,43727,32718],{"class":82},[76,43729,43730],{"class":78,"line":32715},[76,43731,32724],{"class":82},[76,43733,43734,43736,43738],{"class":78,"line":32721},[76,43735,32730],{"class":93},[76,43737,247],{"class":89},[76,43739,32735],{"class":93},[76,43741,43742],{"class":78,"line":32727},[76,43743,32741],{"class":82},[76,43745,43746,43748,43750,43752,43754,43756,43758],{"class":78,"line":32738},[76,43747,32747],{"class":93},[76,43749,247],{"class":89},[76,43751,32752],{"class":93},[76,43753,32755],{"class":5288},[76,43755,247],{"class":89},[76,43757,418],{"class":250},[76,43759,208],{"class":93},[76,43761,43762],{"class":78,"line":32744},[76,43763,32767],{"class":82},[76,43765,43766,43768,43770],{"class":78,"line":32764},[76,43767,32773],{"class":93},[76,43769,247],{"class":89},[76,43771,32778],{"class":93},[76,43773,43774],{"class":78,"line":32770},[76,43775,32784],{"class":82},[76,43777,43778],{"class":78,"line":32781},[76,43779,32790],{"class":93},[76,43781,43782],{"class":78,"line":32787},[76,43783,32796],{"class":82},[76,43785,43786],{"class":78,"line":32793},[76,43787,32802],{"class":93},[76,43789,43790],{"class":78,"line":32799},[76,43791,32808],{"class":82},[76,43793,43794],{"class":78,"line":32805},[76,43795,32814],{"class":93},[76,43797,43798],{"class":78,"line":32811},[76,43799,32820],{"class":82},[76,43801,43802,43804,43806,43808,43810,43812,43814],{"class":78,"line":32817},[76,43803,32826],{"class":93},[76,43805,9549],{"class":89},[76,43807,32831],{"class":93},[76,43809,655],{"class":89},[76,43811,32836],{"class":93},[76,43813,392],{"class":250},[76,43815,208],{"class":93},[76,43817,43818],{"class":78,"line":32823},[76,43819,32846],{"class":82},[76,43821,43822,43824,43826,43828,43830],{"class":78,"line":32843},[76,43823,32852],{"class":93},[76,43825,9549],{"class":89},[76,43827,32857],{"class":93},[76,43829,3021],{"class":89},[76,43831,32862],{"class":93},[76,43833,43834],{"class":78,"line":32849},[76,43835,32868],{"class":82},[76,43837,43838,43840,43842,43844,43846],{"class":78,"line":32865},[76,43839,32874],{"class":93},[76,43841,9549],{"class":89},[76,43843,32836],{"class":93},[76,43845,392],{"class":250},[76,43847,208],{"class":93},[76,43849,43850],{"class":78,"line":32871},[76,43851,32888],{"class":82},[76,43853,43854,43856,43858,43860,43862],{"class":78,"line":32885},[76,43855,3475],{"class":89},[76,43857,32896],{"class":93},[76,43859,26116],{"class":89},[76,43861,31676],{"class":250},[76,43863,32903],{"class":93},[76,43865,43866],{"class":78,"line":32891},[76,43867,32909],{"class":82},[76,43869,43870,43872,43874],{"class":78,"line":32906},[76,43871,32680],{"class":93},[76,43873,247],{"class":89},[76,43875,32685],{"class":93},[76,43877,43878],{"class":78,"line":32912},[76,43879,32924],{"class":82},[76,43881,43882,43884,43886],{"class":78,"line":32921},[76,43883,32695],{"class":93},[76,43885,247],{"class":89},[76,43887,32700],{"class":93},[76,43889,43890],{"class":78,"line":32927},[76,43891,32939],{"class":82},[76,43893,43894],{"class":78,"line":32936},[76,43895,32945],{"class":93},[76,43897,43898],{"class":78,"line":32942},[76,43899,36426],{"class":82},[76,43901,43902,43904],{"class":78,"line":32948},[76,43903,32951],{"class":89},[76,43905,32954],{"class":93},[76,43907,43908],{"class":78,"line":32957},[76,43909,32960],{"class":82},[76,43911,43912,43914,43916],{"class":78,"line":32963},[76,43913,36441],{"class":93},[76,43915,247],{"class":89},[76,43917,32735],{"class":93},[76,43919,43920],{"class":78,"line":32974},[76,43921,32977],{"class":82},[76,43923,43924,43926,43928,43930,43932,43934,43936],{"class":78,"line":32980},[76,43925,36454],{"class":93},[76,43927,247],{"class":89},[76,43929,32752],{"class":93},[76,43931,32755],{"class":5288},[76,43933,247],{"class":89},[76,43935,418],{"class":250},[76,43937,208],{"class":93},[76,43939,43940],{"class":78,"line":32999},[76,43941,33002],{"class":82},[76,43943,43944,43946,43948],{"class":78,"line":33005},[76,43945,36475],{"class":93},[76,43947,247],{"class":89},[76,43949,32778],{"class":93},[76,43951,43952],{"class":78,"line":33016},[76,43953,33019],{"class":82},[76,43955,43956,43958,43960,43962,43964,43966,43968],{"class":78,"line":33022},[76,43957,36488],{"class":93},[76,43959,9549],{"class":89},[76,43961,36493],{"class":93},[76,43963,655],{"class":89},[76,43965,32836],{"class":93},[76,43967,392],{"class":250},[76,43969,208],{"class":93},[76,43971,43972,43974,43976,43978,43980],{"class":78,"line":33042},[76,43973,36506],{"class":93},[76,43975,9549],{"class":89},[76,43977,32857],{"class":93},[76,43979,3021],{"class":89},[76,43981,32862],{"class":93},[76,43983,43984],{"class":78,"line":33058},[76,43985,36519],{"class":82},[76,43987,43988,43990,43992,43994,43996],{"class":78,"line":33064},[76,43989,36524],{"class":93},[76,43991,9549],{"class":89},[76,43993,32836],{"class":93},[76,43995,392],{"class":250},[76,43997,208],{"class":93},[76,43999,44000],{"class":78,"line":33078},[76,44001,33081],{"class":82},[76,44003,44004],{"class":78,"line":33084},[76,44005,33087],{"class":82},[76,44007,44008,44010,44012],{"class":78,"line":33090},[76,44009,33093],{"class":93},[76,44011,783],{"class":89},[76,44013,33098],{"class":93},[76,44015,44016],{"class":78,"line":33101},[76,44017,33104],{"class":82},[76,44019,44020],{"class":78,"line":33107},[76,44021,33110],{"class":82},[76,44023,44024,44026,44028],{"class":78,"line":33113},[76,44025,33116],{"class":93},[76,44027,783],{"class":89},[76,44029,33098],{"class":93},[76,44031,44032],{"class":78,"line":33123},[76,44033,33126],{"class":82},[76,44035,44036,44038,44040],{"class":78,"line":33129},[76,44037,33132],{"class":93},[76,44039,783],{"class":89},[76,44041,33137],{"class":93},[76,44043,44044],{"class":78,"line":33140},[76,44045,33143],{"class":82},[76,44047,44048,44050,44052],{"class":78,"line":33146},[76,44049,33149],{"class":93},[76,44051,783],{"class":89},[76,44053,33137],{"class":93},[76,44055,44056],{"class":78,"line":33156},[76,44057,2472],{"emptyLinePlaceholder":125},[76,44059,44060],{"class":78,"line":33161},[76,44061,33164],{"class":82},[76,44063,44064,44066,44068,44070,44072,44074,44076,44078,44080,44082,44084,44086,44088,44090,44092,44094,44096,44098,44100,44102],{"class":78,"line":33167},[76,44065,32521],{"class":250},[76,44067,202],{"class":93},[76,44069,3664],{"class":305},[76,44071,32529],{"class":250},[76,44073,33178],{"class":305},[76,44075,1095],{"class":250},[76,44077,33183],{"class":89},[76,44079,1145],{"class":250},[76,44081,33188],{"class":305},[76,44083,1095],{"class":250},[76,44085,33183],{"class":89},[76,44087,1145],{"class":250},[76,44089,3664],{"class":305},[76,44091,33199],{"class":93},[76,44093,112],{"class":89},[76,44095,418],{"class":250},[76,44097,33206],{"class":93},[76,44099,112],{"class":89},[76,44101,418],{"class":250},[76,44103,33213],{"class":93},[76,44105,44106,44108,44110,44112,44114,44116,44118,44120,44122,44124,44126,44128,44130,44132,44134,44136,44138,44140,44142,44144],{"class":78,"line":33216},[76,44107,32521],{"class":250},[76,44109,202],{"class":93},[76,44111,3664],{"class":305},[76,44113,32529],{"class":250},[76,44115,33227],{"class":305},[76,44117,1095],{"class":250},[76,44119,33183],{"class":89},[76,44121,1145],{"class":250},[76,44123,33236],{"class":305},[76,44125,1095],{"class":250},[76,44127,33183],{"class":89},[76,44129,1145],{"class":250},[76,44131,3664],{"class":305},[76,44133,33247],{"class":93},[76,44135,112],{"class":89},[76,44137,418],{"class":250},[76,44139,33254],{"class":93},[76,44141,112],{"class":89},[76,44143,418],{"class":250},[76,44145,33213],{"class":93},[76,44147,44148],{"class":78,"line":33263},[76,44149,2472],{"emptyLinePlaceholder":125},[76,44151,44152],{"class":78,"line":33268},[76,44153,33271],{"class":82},[76,44155,44156,44158,44160,44162,44164,44166,44168],{"class":78,"line":33274},[76,44157,2569],{"class":89},[76,44159,33279],{"class":93},[76,44161,112],{"class":89},[76,44163,418],{"class":250},[76,44165,1139],{"class":93},[76,44167,1159],{"class":89},[76,44169,33290],{"class":93},[76,44171,44172],{"class":78,"line":33293},[76,44173,33296],{"class":82},[76,44175,44176,44178,44180,44182,44184,44186,44188],{"class":78,"line":33299},[76,44177,33302],{"class":93},[76,44179,241],{"class":250},[76,44181,247],{"class":89},[76,44183,33309],{"class":93},[76,44185,112],{"class":89},[76,44187,418],{"class":250},[76,44189,33316],{"class":93},[76,44191,44192],{"class":78,"line":33319},[76,44193,33322],{"class":82},[76,44195,44196],{"class":78,"line":33325},[76,44197,33328],{"class":82},[76,44199,44200,44202,44204],{"class":78,"line":33331},[76,44201,33334],{"class":93},[76,44203,247],{"class":89},[76,44205,32384],{"class":93},[76,44207,44208],{"class":78,"line":33341},[76,44209,2472],{"emptyLinePlaceholder":125},[76,44211,44212],{"class":78,"line":33346},[76,44213,33349],{"class":82},[76,44215,44216,44218,44220,44222,44224],{"class":78,"line":33352},[76,44217,33355],{"class":93},[76,44219,247],{"class":89},[76,44221,33360],{"class":93},[76,44223,112],{"class":89},[76,44225,33365],{"class":93},[76,44227,44228,44230,44232,44234,44236,44238,44240,44242,44244,44246,44248,44250,44252,44254,44256,44258,44260,44262],{"class":78,"line":33368},[76,44229,32521],{"class":250},[76,44231,202],{"class":93},[76,44233,33375],{"class":305},[76,44235,1095],{"class":250},[76,44237,33380],{"class":89},[76,44239,1145],{"class":250},[76,44241,743],{"class":305},[76,44243,1095],{"class":250},[76,44245,33380],{"class":89},[76,44247,1145],{"class":250},[76,44249,33393],{"class":305},[76,44251,33396],{"class":93},[76,44253,33399],{"class":89},[76,44255,1106],{"class":250},[76,44257,33404],{"class":93},[76,44259,106],{"class":89},[76,44261,1106],{"class":250},[76,44263,30567],{"class":93},[76,44265,44266],{"class":78,"line":33413},[76,44267,36803],{"class":82},[76,44269,44270],{"class":78,"line":33419},[76,44271,36808],{"class":82},[76,44273,44274,44276,44278],{"class":78,"line":33425},[76,44275,36813],{"class":93},[76,44277,33437],{"class":305},[76,44279,208],{"class":93},[76,44281,44282],{"class":78,"line":33431},[76,44283,33457],{"class":82},[76,44285,44286,44288,44290,44292,44294,44296],{"class":78,"line":33442},[76,44287,33463],{"class":93},[76,44289,247],{"class":89},[76,44291,33468],{"class":93},[76,44293,33471],{"class":5288},[76,44295,247],{"class":89},[76,44297,1618],{"class":93},[76,44299,44300,44302,44304,44306],{"class":78,"line":33448},[76,44301,33481],{"class":305},[76,44303,1058],{"class":93},[76,44305,33486],{"class":250},[76,44307,33489],{"class":93},[76,44309,44310,44312],{"class":78,"line":33454},[76,44311,33495],{"class":305},[76,44313,33498],{"class":93},[76,44315,44316,44318],{"class":78,"line":33460},[76,44317,33504],{"class":305},[76,44319,33507],{"class":93},[76,44321,44322,44324],{"class":78,"line":33478},[76,44323,33513],{"class":305},[76,44325,33516],{"class":93},[76,44327,44328,44330],{"class":78,"line":33492},[76,44329,33522],{"class":305},[76,44331,33525],{"class":93},[76,44333,44334],{"class":78,"line":33501},[76,44335,33531],{"class":93},[76,44337,44338],{"class":78,"line":33510},[76,44339,33537],{"class":82},[76,44341,44342,44344],{"class":78,"line":33519},[76,44343,4162],{"class":89},[76,44345,33545],{"class":93},[76,44347,44348],{"class":78,"line":33528},[76,44349,2472],{"emptyLinePlaceholder":125},[76,44351,44352],{"class":78,"line":33534},[76,44353,33556],{"class":82},[76,44355,44356,44358,44360],{"class":78,"line":33540},[76,44357,32017],{"class":89},[76,44359,33564],{"class":2035},[76,44361,33567],{"class":93},[76,44363,44364],{"class":78,"line":33548},[76,44365,33573],{"class":82},[76,44367,44368,44370,44372,44374,44376,44378,44380,44382],{"class":78,"line":33553},[76,44369,33579],{"class":93},[76,44371,31763],{"class":5288},[76,44373,247],{"class":89},[76,44375,202],{"class":93},[76,44377,698],{"class":250},[76,44379,578],{"class":93},[76,44381,494],{"class":250},[76,44383,30567],{"class":93},[76,44385,44386],{"class":78,"line":33559},[76,44387,33599],{"class":82},[76,44389,44390],{"class":78,"line":33570},[76,44391,33605],{"class":82},[76,44393,44394],{"class":78,"line":33576},[76,44395,33611],{"class":82},[76,44397,44398,44400,44402,44404,44406,44408,44410],{"class":78,"line":33596},[76,44399,31797],{"class":93},[76,44401,418],{"class":250},[76,44403,578],{"class":93},[76,44405,278],{"class":250},[76,44407,578],{"class":93},[76,44409,418],{"class":250},[76,44411,208],{"class":93},[76,44413,44414],{"class":78,"line":33602},[76,44415,33634],{"class":82},[76,44417,44418],{"class":78,"line":33608},[76,44419,33640],{"class":82},[76,44421,44422],{"class":78,"line":33614},[76,44423,33646],{"class":82},[76,44425,44426],{"class":78,"line":33631},[76,44427,33652],{"class":82},[76,44429,44430],{"class":78,"line":33637},[76,44431,33658],{"class":82},[76,44433,44434,44436,44438,44440,44442,44444,44446,44448,44450],{"class":78,"line":33643},[76,44435,33664],{"class":93},[76,44437,33667],{"class":305},[76,44439,33670],{"class":93},[76,44441,33673],{"class":305},[76,44443,578],{"class":93},[76,44445,33678],{"class":5288},[76,44447,247],{"class":89},[76,44449,33683],{"class":305},[76,44451,208],{"class":93},[76,44453,44454,44456,44458,44460,44462,44464,44466,44468,44470],{"class":78,"line":33649},[76,44455,33664],{"class":93},[76,44457,33667],{"class":305},[76,44459,33695],{"class":93},[76,44461,33698],{"class":305},[76,44463,578],{"class":93},[76,44465,33678],{"class":5288},[76,44467,247],{"class":89},[76,44469,33707],{"class":305},[76,44471,208],{"class":93},[76,44473,44474],{"class":78,"line":33655},[76,44475,33715],{"class":82},[76,44477,44478],{"class":78,"line":33661},[76,44479,33721],{"class":93},[76,44481,44482],{"class":78,"line":33688},[76,44483,33727],{"class":82},[76,44485,44486,44488,44490],{"class":78,"line":33712},[76,44487,33733],{"class":93},[76,44489,33736],{"class":305},[76,44491,208],{"class":93},[76,44493,44494,44496,44498],{"class":78,"line":33718},[76,44495,33744],{"class":93},[76,44497,33747],{"class":305},[76,44499,208],{"class":93},[76,44501,44502],{"class":78,"line":33724},[76,44503,33755],{"class":82},[76,44505,44506,44508,44510,44512,44514,44516,44518],{"class":78,"line":33730},[76,44507,31797],{"class":93},[76,44509,418],{"class":250},[76,44511,578],{"class":93},[76,44513,278],{"class":250},[76,44515,578],{"class":93},[76,44517,278],{"class":250},[76,44519,208],{"class":93},[76,44521,44522,44524,44526,44528,44530,44532,44534,44536,44538],{"class":78,"line":33741},[76,44523,33664],{"class":93},[76,44525,33667],{"class":305},[76,44527,33782],{"class":93},[76,44529,33673],{"class":305},[76,44531,578],{"class":93},[76,44533,33678],{"class":5288},[76,44535,247],{"class":89},[76,44537,33793],{"class":305},[76,44539,208],{"class":93},[76,44541,44542,44544,44546,44548,44550,44552,44554,44556,44558],{"class":78,"line":33752},[76,44543,33664],{"class":93},[76,44545,33667],{"class":305},[76,44547,33805],{"class":93},[76,44549,33698],{"class":305},[76,44551,578],{"class":93},[76,44553,33678],{"class":5288},[76,44555,247],{"class":89},[76,44557,33816],{"class":305},[76,44559,208],{"class":93},[76,44561,44562],{"class":78,"line":33758},[76,44563,33824],{"class":82},[76,44565,44566],{"class":78,"line":33775},[76,44567,33721],{"class":93},[76,44569,44570,44572,44574],{"class":78,"line":33798},[76,44571,33733],{"class":93},[76,44573,33667],{"class":305},[76,44575,208],{"class":93},[76,44577,44578,44580,44582],{"class":78,"line":33821},[76,44579,33744],{"class":93},[76,44581,33846],{"class":305},[76,44583,208],{"class":93},[76,44585,44586],{"class":78,"line":33827},[76,44587,33854],{"class":93},[76,44589,44590],{"class":78,"line":33832},[76,44591,2472],{"emptyLinePlaceholder":125},[76,44593,44594],{"class":78,"line":33841},[76,44595,33865],{"class":82},[76,44597,44598,44600,44602,44604,44606],{"class":78,"line":33851},[76,44599,1603],{"class":89},[76,44601,31290],{"class":250},[76,44603,3021],{"class":89},[76,44605,31295],{"class":305},[76,44607,3811],{"class":93},[76,44609,44610],{"class":78,"line":33857},[76,44611,33884],{"class":82},[76,44613,44614,44617,44619],{"class":78,"line":33862},[76,44615,44616],{"class":93},"    GoogLeNet",[76,44618,247],{"class":89},[76,44620,44621],{"class":93},"GoogLeNet(Inception)\n",[76,44623,44624,44626,44628],{"class":78,"line":33868},[76,44625,33901],{"class":93},[76,44627,247],{"class":89},[76,44629,33906],{"class":93},[76,44631,44632,44634,44636,44639,44641,44643,44645],{"class":78,"line":33881},[76,44633,33463],{"class":93},[76,44635,247],{"class":89},[76,44637,44638],{"class":93},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[76,44640,33919],{"class":5288},[76,44642,247],{"class":89},[76,44644,1150],{"class":250},[76,44646,208],{"class":93},[76,44648,44649],{"class":78,"line":33887},[76,44650,33931],{"class":93},[152,44652,44653],{"start":97},[155,44654,40644],{},[67,44656,44658],{"className":69,"code":44657,"language":71,"meta":58,"style":58},"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",[73,44659,44660,44666,44676,44686,44690,44700,44711,44715,44719,44723,44731,44747,44757,44773,44783,44797,44801,44811,44821,44831,44837,44841,44845,44853,44857,44873,44881,44885,44889,44897,44905,44909,44913,44917,44921,44927,44931,44941,44949,44957,44961,44965,44969,44977,44981,44997,45001,45005,45009,45021,45025,45037,45041,45045,45057,45061,45071,45075,45079,45091,45095,45103,45107,45111,45119,45123,45131,45135,45139,45143,45147,45151,45167,45175,45179,45183,45231,45237,45241,45251,45259,45267,45271,45275,45279,45283,45291,45295,45311,45315,45323,45331],{"__ignoreMap":58},[76,44661,44662,44664],{"class":78,"line":79},[76,44663,90],{"class":89},[76,44665,30465],{"class":93},[76,44667,44668,44670,44672,44674],{"class":78,"line":86},[76,44669,90],{"class":89},[76,44671,31485],{"class":93},[76,44673,31453],{"class":89},[76,44675,31490],{"class":93},[76,44677,44678,44680,44682,44684],{"class":78,"line":97},[76,44679,30807],{"class":89},[76,44681,31468],{"class":93},[76,44683,90],{"class":89},[76,44685,31473],{"class":93},[76,44687,44688],{"class":78,"line":103},[76,44689,33992],{"class":82},[76,44691,44692,44694,44696,44698],{"class":78,"line":1273},[76,44693,30807],{"class":89},[76,44695,31438],{"class":93},[76,44697,90],{"class":89},[76,44699,31443],{"class":93},[76,44701,44702,44704,44706,44708],{"class":78,"line":1287},[76,44703,30807],{"class":89},[76,44705,31984],{"class":93},[76,44707,90],{"class":89},[76,44709,44710],{"class":93}," GoogLeNet,Inception\n",[76,44712,44713],{"class":78,"line":1293},[76,44714,2472],{"emptyLinePlaceholder":125},[76,44716,44717],{"class":78,"line":1384},[76,44718,2472],{"emptyLinePlaceholder":125},[76,44720,44721],{"class":78,"line":1390},[76,44722,34021],{"class":82},[76,44724,44725,44727,44729],{"class":78,"line":1402},[76,44726,32017],{"class":89},[76,44728,34028],{"class":2035},[76,44730,32023],{"class":93},[76,44732,44733,44735,44737,44739,44741,44743,44745],{"class":78,"line":1684},[76,44734,34035],{"class":93},[76,44736,247],{"class":89},[76,44738,31525],{"class":93},[76,44740,31528],{"class":5288},[76,44742,247],{"class":89},[76,44744,31533],{"class":305},[76,44746,31536],{"class":93},[76,44748,44749,44751,44753,44755],{"class":78,"line":1689},[76,44750,34052],{"class":5288},[76,44752,247],{"class":89},[76,44754,34057],{"class":250},[76,44756,31536],{"class":93},[76,44758,44759,44761,44763,44765,44767,44769,44771],{"class":78,"line":1695},[76,44760,34064],{"class":5288},[76,44762,247],{"class":89},[76,44764,31563],{"class":93},[76,44766,31566],{"class":5288},[76,44768,247],{"class":89},[76,44770,35519],{"class":250},[76,44772,31574],{"class":93},[76,44774,44775,44777,44779,44781],{"class":78,"line":1700},[76,44776,34081],{"class":5288},[76,44778,247],{"class":89},[76,44780,31546],{"class":250},[76,44782,208],{"class":93},[76,44784,44785,44787,44789,44791,44793,44795],{"class":78,"line":1714},[76,44786,34092],{"class":93},[76,44788,247],{"class":89},[76,44790,31604],{"class":93},[76,44792,31607],{"class":5288},[76,44794,247],{"class":89},[76,44796,34103],{"class":93},[76,44798,44799],{"class":78,"line":1719},[76,44800,34108],{"class":82},[76,44802,44803,44805,44807,44809],{"class":78,"line":1725},[76,44804,34113],{"class":5288},[76,44806,247],{"class":89},[76,44808,418],{"class":250},[76,44810,31536],{"class":93},[76,44812,44813,44815,44817,44819],{"class":78,"line":1746},[76,44814,34124],{"class":5288},[76,44816,247],{"class":89},[76,44818,31546],{"class":250},[76,44820,31536],{"class":93},[76,44822,44823,44825,44827,44829],{"class":78,"line":1751},[76,44824,34135],{"class":5288},[76,44826,247],{"class":89},[76,44828,392],{"class":250},[76,44830,208],{"class":93},[76,44832,44833,44835],{"class":78,"line":1765},[76,44834,4162],{"class":89},[76,44836,34148],{"class":93},[76,44838,44839],{"class":78,"line":1770},[76,44840,2472],{"emptyLinePlaceholder":125},[76,44842,44843],{"class":78,"line":1799},[76,44844,34157],{"class":82},[76,44846,44847,44849,44851],{"class":78,"line":1804},[76,44848,32017],{"class":89},[76,44850,34164],{"class":2035},[76,44852,34167],{"class":93},[76,44854,44855],{"class":78,"line":1821},[76,44856,34172],{"class":82},[76,44858,44859,44861,44863,44865,44867,44869,44871],{"class":78,"line":1826},[76,44860,31307],{"class":93},[76,44862,247],{"class":89},[76,44864,31314],{"class":305},[76,44866,1776],{"class":89},[76,44868,31319],{"class":93},[76,44870,1773],{"class":89},[76,44872,34189],{"class":305},[76,44874,44875,44877,44879],{"class":78,"line":1831},[76,44876,31359],{"class":93},[76,44878,247],{"class":89},[76,44880,32359],{"class":93},[76,44882,44883],{"class":78,"line":1836},[76,44884,2472],{"emptyLinePlaceholder":125},[76,44886,44887],{"class":78,"line":1850},[76,44888,34206],{"class":82},[76,44890,44891,44893,44895],{"class":78,"line":1855},[76,44892,34211],{"class":93},[76,44894,247],{"class":89},[76,44896,32412],{"class":250},[76,44898,44899,44901,44903],{"class":78,"line":2649},[76,44900,34220],{"class":93},[76,44902,247],{"class":89},[76,44904,3157],{"class":250},[76,44906,44907],{"class":78,"line":2663},[76,44908,2472],{"emptyLinePlaceholder":125},[76,44910,44911],{"class":78,"line":2671},[76,44912,34233],{"class":82},[76,44914,44915],{"class":78,"line":2676},[76,44916,34238],{"class":82},[76,44918,44919],{"class":78,"line":2682},[76,44920,34243],{"class":82},[76,44922,44923,44925],{"class":78,"line":2688},[76,44924,34248],{"class":89},[76,44926,32954],{"class":93},[76,44928,44929],{"class":78,"line":2693},[76,44930,34255],{"class":82},[76,44932,44933,44935,44937,44939],{"class":78,"line":8020},[76,44934,3475],{"class":89},[76,44936,34262],{"class":93},[76,44938,26116],{"class":89},[76,44940,34267],{"class":93},[76,44942,44943,44945,44947],{"class":78,"line":8044},[76,44944,34272],{"class":93},[76,44946,247],{"class":89},[76,44948,34277],{"class":93},[76,44950,44951,44953,44955],{"class":78,"line":8049},[76,44952,34282],{"class":93},[76,44954,247],{"class":89},[76,44956,34287],{"class":93},[76,44958,44959],{"class":78,"line":8055},[76,44960,34292],{"class":82},[76,44962,44963],{"class":78,"line":8082},[76,44964,32945],{"class":93},[76,44966,44967],{"class":78,"line":8087},[76,44968,34301],{"class":82},[76,44970,44971,44973,44975],{"class":78,"line":8093},[76,44972,32730],{"class":93},[76,44974,247],{"class":89},[76,44976,34310],{"class":93},[76,44978,44979],{"class":78,"line":8105},[76,44980,34315],{"class":82},[76,44982,44983,44985,44987,44989,44991,44993,44995],{"class":78,"line":8117},[76,44984,32747],{"class":93},[76,44986,247],{"class":89},[76,44988,32752],{"class":93},[76,44990,32755],{"class":5288},[76,44992,247],{"class":89},[76,44994,418],{"class":250},[76,44996,208],{"class":93},[76,44998,44999],{"class":78,"line":8129},[76,45000,34336],{"class":82},[76,45002,45003],{"class":78,"line":9788},[76,45004,34341],{"class":82},[76,45006,45007],{"class":78,"line":9813},[76,45008,34346],{"class":82},[76,45010,45011,45013,45015,45017,45019],{"class":78,"line":9836},[76,45012,34351],{"class":93},[76,45014,9549],{"class":89},[76,45016,32857],{"class":93},[76,45018,3021],{"class":89},[76,45020,34360],{"class":93},[76,45022,45023],{"class":78,"line":9860},[76,45024,34365],{"class":82},[76,45026,45027,45029,45031,45033,45035],{"class":78,"line":9865},[76,45028,34370],{"class":93},[76,45030,9549],{"class":89},[76,45032,34375],{"class":93},[76,45034,392],{"class":250},[76,45036,208],{"class":93},[76,45038,45039],{"class":78,"line":9870},[76,45040,2472],{"emptyLinePlaceholder":125},[76,45042,45043],{"class":78,"line":9875},[76,45044,34388],{"class":82},[76,45046,45047,45049,45051,45053,45055],{"class":78,"line":9884},[76,45048,34393],{"class":93},[76,45050,247],{"class":89},[76,45052,34398],{"class":93},[76,45054,783],{"class":89},[76,45056,34403],{"class":93},[76,45058,45059],{"class":78,"line":9889},[76,45060,34408],{"class":82},[76,45062,45063,45065,45067,45069],{"class":78,"line":9895},[76,45064,32521],{"class":250},[76,45066,202],{"class":93},[76,45068,34417],{"class":305},[76,45070,34420],{"class":93},[76,45072,45073],{"class":78,"line":9916},[76,45074,2472],{"emptyLinePlaceholder":125},[76,45076,45077],{"class":78,"line":9922},[76,45078,34429],{"class":82},[76,45080,45081,45083,45085,45087,45089],{"class":78,"line":9936},[76,45082,1603],{"class":89},[76,45084,31290],{"class":250},[76,45086,3021],{"class":89},[76,45088,31295],{"class":305},[76,45090,3811],{"class":93},[76,45092,45093],{"class":78,"line":9942},[76,45094,34446],{"class":82},[76,45096,45097,45099,45101],{"class":78,"line":9969},[76,45098,31359],{"class":93},[76,45100,247],{"class":89},[76,45102,44621],{"class":93},[76,45104,45105],{"class":78,"line":9978},[76,45106,34459],{"class":82},[76,45108,45109],{"class":78,"line":9984},[76,45110,34464],{"class":82},[76,45112,45113,45115,45117],{"class":78,"line":9992},[76,45114,34469],{"class":93},[76,45116,34472],{"class":305},[76,45118,30567],{"class":93},[76,45120,45121],{"class":78,"line":9997},[76,45122,34479],{"class":82},[76,45124,45125,45127,45129],{"class":78,"line":16676},[76,45126,34092],{"class":93},[76,45128,247],{"class":89},[76,45130,34488],{"class":93},[76,45132,45133],{"class":78,"line":16682},[76,45134,34493],{"class":82},[76,45136,45137],{"class":78,"line":16705},[76,45138,34498],{"class":93},[76,45140,45141],{"class":78,"line":16711},[76,45142,2472],{"emptyLinePlaceholder":125},[76,45144,45145],{"class":78,"line":16734},[76,45146,34507],{"class":82},[76,45148,45149],{"class":78,"line":16748},[76,45150,34512],{"class":82},[76,45152,45153,45155,45157,45159,45161,45163,45165],{"class":78,"line":16768},[76,45154,31307],{"class":93},[76,45156,247],{"class":89},[76,45158,31314],{"class":305},[76,45160,1776],{"class":89},[76,45162,31319],{"class":93},[76,45164,1773],{"class":89},[76,45166,34189],{"class":305},[76,45168,45169,45171,45173],{"class":78,"line":16774},[76,45170,31359],{"class":93},[76,45172,247],{"class":89},[76,45174,32359],{"class":93},[76,45176,45177],{"class":78,"line":16785},[76,45178,34541],{"class":82},[76,45180,45181],{"class":78,"line":16808},[76,45182,34546],{"class":82},[76,45184,45185,45187,45189,45191,45193,45195,45197,45199,45201,45203,45205,45207,45209,45211,45213,45215,45217,45219,45221,45223,45225,45227,45229],{"class":78,"line":16830},[76,45186,34551],{"class":93},[76,45188,247],{"class":89},[76,45190,1089],{"class":93},[76,45192,34558],{"class":305},[76,45194,578],{"class":93},[76,45196,34563],{"class":305},[76,45198,578],{"class":93},[76,45200,34568],{"class":305},[76,45202,578],{"class":93},[76,45204,34573],{"class":305},[76,45206,578],{"class":93},[76,45208,34578],{"class":305},[76,45210,578],{"class":93},[76,45212,34583],{"class":305},[76,45214,578],{"class":93},[76,45216,34588],{"class":305},[76,45218,578],{"class":93},[76,45220,34593],{"class":305},[76,45222,578],{"class":93},[76,45224,34598],{"class":305},[76,45226,578],{"class":93},[76,45228,34603],{"class":305},[76,45230,33316],{"class":93},[76,45232,45233,45235],{"class":78,"line":16835},[76,45234,34248],{"class":89},[76,45236,32954],{"class":93},[76,45238,45239],{"class":78,"line":16841},[76,45240,34616],{"class":82},[76,45242,45243,45245,45247,45249],{"class":78,"line":16855},[76,45244,3475],{"class":89},[76,45246,34623],{"class":93},[76,45248,26116],{"class":89},[76,45250,34267],{"class":93},[76,45252,45253,45255,45257],{"class":78,"line":16868},[76,45254,32680],{"class":93},[76,45256,247],{"class":89},[76,45258,32685],{"class":93},[76,45260,45261,45263,45265],{"class":78,"line":16873},[76,45262,32695],{"class":93},[76,45264,247],{"class":89},[76,45266,32700],{"class":93},[76,45268,45269],{"class":78,"line":16887},[76,45270,2472],{"emptyLinePlaceholder":125},[76,45272,45273],{"class":78,"line":16892},[76,45274,34652],{"class":82},[76,45276,45277],{"class":78,"line":16898},[76,45278,32945],{"class":93},[76,45280,45281],{"class":78,"line":16903},[76,45282,34661],{"class":82},[76,45284,45285,45287,45289],{"class":78,"line":16917},[76,45286,32730],{"class":93},[76,45288,247],{"class":89},[76,45290,32735],{"class":93},[76,45292,45293],{"class":78,"line":16922},[76,45294,34674],{"class":82},[76,45296,45297,45299,45301,45303,45305,45307,45309],{"class":78,"line":16927},[76,45298,32747],{"class":93},[76,45300,247],{"class":89},[76,45302,32752],{"class":93},[76,45304,32755],{"class":5288},[76,45306,247],{"class":89},[76,45308,418],{"class":250},[76,45310,208],{"class":93},[76,45312,45313],{"class":78,"line":16941},[76,45314,34695],{"class":82},[76,45316,45317,45319,45321],{"class":78,"line":16953},[76,45318,34700],{"class":93},[76,45320,247],{"class":89},[76,45322,34705],{"class":93},[76,45324,45325,45327,45329],{"class":78,"line":16958},[76,45326,34710],{"class":93},[76,45328,247],{"class":89},[76,45330,34715],{"class":93},[76,45332,45333,45335,45337,45339,45341,45343,45345,45347],{"class":78,"line":16971},[76,45334,34720],{"class":250},[76,45336,202],{"class":93},[76,45338,34725],{"class":305},[76,45340,34728],{"class":93},[76,45342,34731],{"class":305},[76,45344,578],{"class":93},[76,45346,34736],{"class":305},[76,45348,34739],{"class":93},[169,45350,45352],{"id":45351},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45354,45355],{},"猫狗分类任务",[14,45357,45358],{},"划分数据集和验证集",[67,45360,45362],{"className":69,"code":45361,"language":71,"meta":58,"style":58},"# 创建脚本，用于划分数据集和验证集\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",[73,45363,45364,45369,45376,45381,45392,45399,45403,45413,45427,45436,45440,45445,45455,45475,45479,45484,45494,45505,45518,45522,45527,45536,45546,45557,45561,45566,45576,45580,45585,45590,45595,45600,45605,45609,45619,45646,45659,45671,45698,45703,45708,45722,45727,45739,45754,45769,45777,45781,45786,45792,45804,45817,45822,45827,45832,45882,45888,45892],{"__ignoreMap":58},[76,45365,45366],{"class":78,"line":79},[76,45367,45368],{"class":82},"# 创建脚本，用于划分数据集和验证集\n",[76,45370,45371,45373],{"class":78,"line":86},[76,45372,90],{"class":89},[76,45374,45375],{"class":93}," os\n",[76,45377,45378],{"class":78,"line":97},[76,45379,45380],{"class":82},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[76,45382,45383,45385,45388,45390],{"class":78,"line":103},[76,45384,30807],{"class":89},[76,45386,45387],{"class":93}," shutil ",[76,45389,90],{"class":89},[76,45391,31892],{"class":93},[76,45393,45394,45396],{"class":78,"line":1273},[76,45395,90],{"class":89},[76,45397,45398],{"class":93}," random\n",[76,45400,45401],{"class":78,"line":1287},[76,45402,2472],{"emptyLinePlaceholder":125},[76,45404,45405,45407,45410],{"class":78,"line":1293},[76,45406,32017],{"class":89},[76,45408,45409],{"class":2035}," mkfile",[76,45411,45412],{"class":93},"(file):\n",[76,45414,45415,45417,45419,45422,45425],{"class":78,"line":1384},[76,45416,3173],{"class":89},[76,45418,39000],{"class":89},[76,45420,45421],{"class":93}," os.path.exists(",[76,45423,45424],{"class":5288},"file",[76,45426,30856],{"class":93},[76,45428,45429,45432,45434],{"class":78,"line":1390},[76,45430,45431],{"class":93},"        os.makedirs(",[76,45433,45424],{"class":5288},[76,45435,208],{"class":93},[76,45437,45438],{"class":78,"line":1402},[76,45439,2472],{"emptyLinePlaceholder":125},[76,45441,45442],{"class":78,"line":1684},[76,45443,45444],{"class":82},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[76,45446,45447,45450,45452],{"class":78,"line":1689},[76,45448,45449],{"class":93},"file_path",[76,45451,247],{"class":89},[76,45453,45454],{"class":305},"'data_cat_dog'\n",[76,45456,45457,45460,45462,45465,45467,45470,45472],{"class":78,"line":1695},[76,45458,45459],{"class":93},"flower_class",[76,45461,247],{"class":89},[76,45463,45464],{"class":93},"[cla ",[76,45466,3097],{"class":89},[76,45468,45469],{"class":93}," cla ",[76,45471,26116],{"class":89},[76,45473,45474],{"class":93}," os.listdir(file_path)]\n",[76,45476,45477],{"class":78,"line":1700},[76,45478,2472],{"emptyLinePlaceholder":125},[76,45480,45481],{"class":78,"line":1714},[76,45482,45483],{"class":82},"# 创建训练集train文件夹\n",[76,45485,45486,45489,45492],{"class":78,"line":1719},[76,45487,45488],{"class":93},"mkfile(",[76,45490,45491],{"class":305},"'data\u002Ftrain'",[76,45493,208],{"class":93},[76,45495,45496,45498,45500,45502],{"class":78,"line":1725},[76,45497,3097],{"class":89},[76,45499,45469],{"class":93},[76,45501,26116],{"class":89},[76,45503,45504],{"class":93}," flower_class:\n",[76,45506,45507,45510,45513,45515],{"class":78,"line":1746},[76,45508,45509],{"class":93},"    mkfile(",[76,45511,45512],{"class":305},"'data\u002Ftrain\u002F'",[76,45514,681],{"class":89},[76,45516,45517],{"class":93},"cla)\n",[76,45519,45520],{"class":78,"line":1751},[76,45521,2472],{"emptyLinePlaceholder":125},[76,45523,45524],{"class":78,"line":1765},[76,45525,45526],{"class":82},"# 创建验证集val文件夹\n",[76,45528,45529,45531,45534],{"class":78,"line":1770},[76,45530,45488],{"class":93},[76,45532,45533],{"class":305},"'data\u002Ftest'",[76,45535,208],{"class":93},[76,45537,45538,45540,45542,45544],{"class":78,"line":1799},[76,45539,3097],{"class":89},[76,45541,45469],{"class":93},[76,45543,26116],{"class":89},[76,45545,45504],{"class":93},[76,45547,45548,45550,45553,45555],{"class":78,"line":1804},[76,45549,45509],{"class":93},[76,45551,45552],{"class":305},"'data\u002Ftest\u002F'",[76,45554,681],{"class":89},[76,45556,45517],{"class":93},[76,45558,45559],{"class":78,"line":1821},[76,45560,2472],{"emptyLinePlaceholder":125},[76,45562,45563],{"class":78,"line":1826},[76,45564,45565],{"class":82},"# 划分比例，训练集：测试集=9：1\n",[76,45567,45568,45571,45573],{"class":78,"line":1831},[76,45569,45570],{"class":93},"split_rate",[76,45572,247],{"class":89},[76,45574,45575],{"class":250},"0.1\n",[76,45577,45578],{"class":78,"line":1836},[76,45579,2472],{"emptyLinePlaceholder":125},[76,45581,45582],{"class":78,"line":1850},[76,45583,45584],{"class":82},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[76,45586,45587],{"class":78,"line":1855},[76,45588,45589],{"class":82},"# cla_path：当前类别的原始图片路径\n",[76,45591,45592],{"class":78,"line":2649},[76,45593,45594],{"class":82},"# images：当前类别下所有图片的文件名列表\n",[76,45596,45597],{"class":78,"line":2663},[76,45598,45599],{"class":82},"# num：该类别图片总数\n",[76,45601,45602],{"class":78,"line":2671},[76,45603,45604],{"class":82},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[76,45606,45607],{"class":78,"line":2676},[76,45608,2472],{"emptyLinePlaceholder":125},[76,45610,45611,45613,45615,45617],{"class":78,"line":2682},[76,45612,3097],{"class":89},[76,45614,45469],{"class":93},[76,45616,26116],{"class":89},[76,45618,45504],{"class":93},[76,45620,45621,45624,45626,45629,45631,45634,45637,45639,45641,45643],{"class":78,"line":2688},[76,45622,45623],{"class":93},"    cla_path ",[76,45625,247],{"class":89},[76,45627,45628],{"class":93}," file_path ",[76,45630,681],{"class":89},[76,45632,45633],{"class":305}," '\u002F'",[76,45635,45636],{"class":89}," +",[76,45638,45469],{"class":93},[76,45640,681],{"class":89},[76,45642,45633],{"class":305},[76,45644,45645],{"class":82},"  # 某一类别的子目录\n",[76,45647,45648,45651,45653,45656],{"class":78,"line":2693},[76,45649,45650],{"class":93},"    images ",[76,45652,247],{"class":89},[76,45654,45655],{"class":93}," os.listdir(cla_path)  ",[76,45657,45658],{"class":82},"# iamges 列表存储了该目录下所有图像的名称\n",[76,45660,45661,45664,45666,45668],{"class":78,"line":8020},[76,45662,45663],{"class":93},"    num ",[76,45665,247],{"class":89},[76,45667,7403],{"class":250},[76,45669,45670],{"class":93},"(images)\n",[76,45672,45673,45676,45678,45681,45683,45685,45687,45690,45692,45695],{"class":78,"line":8044},[76,45674,45675],{"class":93},"    eval_index ",[76,45677,247],{"class":89},[76,45679,45680],{"class":93}," random.sample(images, ",[76,45682,693],{"class":5288},[76,45684,247],{"class":89},[76,45686,205],{"class":250},[76,45688,45689],{"class":93},"(num ",[76,45691,655],{"class":89},[76,45693,45694],{"class":93}," split_rate))  ",[76,45696,45697],{"class":82},"# 从images列表中随机抽取 k 个图像名称\n",[76,45699,45700],{"class":78,"line":8049},[76,45701,45702],{"class":82},"    # 遍历该类别下的所有图片\n",[76,45704,45705],{"class":78,"line":8055},[76,45706,45707],{"class":82},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[76,45709,45710,45712,45715,45717,45719],{"class":78,"line":8082},[76,45711,3273],{"class":89},[76,45713,45714],{"class":93}," index, image ",[76,45716,26116],{"class":89},[76,45718,31676],{"class":250},[76,45720,45721],{"class":93},"(images):\n",[76,45723,45724],{"class":78,"line":8087},[76,45725,45726],{"class":82},"        # eval_index 中保存验证集val的图像名称\n",[76,45728,45729,45731,45734,45736],{"class":78,"line":8093},[76,45730,2569],{"class":89},[76,45732,45733],{"class":93}," image ",[76,45735,26116],{"class":89},[76,45737,45738],{"class":93}," eval_index:\n",[76,45740,45741,45744,45746,45749,45751],{"class":78,"line":8105},[76,45742,45743],{"class":93},"            image_path ",[76,45745,247],{"class":89},[76,45747,45748],{"class":93}," cla_path ",[76,45750,681],{"class":89},[76,45752,45753],{"class":93}," image\n",[76,45755,45756,45759,45761,45764,45766],{"class":78,"line":8117},[76,45757,45758],{"class":93},"            new_path ",[76,45760,247],{"class":89},[76,45762,45763],{"class":305}," 'data\u002Ftest\u002F'",[76,45765,45636],{"class":89},[76,45767,45768],{"class":93}," cla\n",[76,45770,45771,45774],{"class":78,"line":8129},[76,45772,45773],{"class":93},"            copy(image_path, new_path)  ",[76,45775,45776],{"class":82},"# 将选中的图像复制到新路径\n",[76,45778,45779],{"class":78,"line":9788},[76,45780,2472],{"emptyLinePlaceholder":125},[76,45782,45783],{"class":78,"line":9813},[76,45784,45785],{"class":82},"        # 其余的图像保存在训练集train中\n",[76,45787,45788,45790],{"class":78,"line":9836},[76,45789,2606],{"class":89},[76,45791,3811],{"class":93},[76,45793,45794,45796,45798,45800,45802],{"class":78,"line":9860},[76,45795,45743],{"class":93},[76,45797,247],{"class":89},[76,45799,45748],{"class":93},[76,45801,681],{"class":89},[76,45803,45753],{"class":93},[76,45805,45806,45808,45810,45813,45815],{"class":78,"line":9865},[76,45807,45758],{"class":93},[76,45809,247],{"class":89},[76,45811,45812],{"class":305}," 'data\u002Ftrain\u002F'",[76,45814,45636],{"class":89},[76,45816,45768],{"class":93},[76,45818,45819],{"class":78,"line":9870},[76,45820,45821],{"class":93},"            copy(image_path, new_path)\n",[76,45823,45824],{"class":78,"line":9875},[76,45825,45826],{"class":82},"            # 打印进度条信息\n",[76,45828,45829],{"class":78,"line":9884},[76,45830,45831],{"class":82},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[76,45833,45834,45836,45838,45840,45843,45845,45847,45850,45852,45854,45856,45859,45862,45864,45866,45869,45872,45874,45876,45879],{"class":78,"line":9889},[76,45835,32521],{"class":250},[76,45837,202],{"class":93},[76,45839,452],{"class":305},[76,45841,45842],{"class":250},"\\r",[76,45844,1089],{"class":305},[76,45846,32529],{"class":250},[76,45848,45849],{"class":305},"] processing [",[76,45851,32529],{"class":250},[76,45853,783],{"class":305},[76,45855,32529],{"class":250},[76,45857,45858],{"class":305},"]\"",[76,45860,45861],{"class":93},".format(cla, index ",[76,45863,681],{"class":89},[76,45865,25191],{"class":250},[76,45867,45868],{"class":93},", num), ",[76,45870,45871],{"class":5288},"end",[76,45873,247],{"class":89},[76,45875,7724],{"class":305},[76,45877,45878],{"class":93},")  ",[76,45880,45881],{"class":82},"# processing bar\n",[76,45883,45884,45886],{"class":78,"line":9895},[76,45885,31369],{"class":250},[76,45887,2048],{"class":93},[76,45889,45890],{"class":78,"line":9916},[76,45891,2472],{"emptyLinePlaceholder":125},[76,45893,45894,45896,45898,45901],{"class":78,"line":9922},[76,45895,30485],{"class":250},[76,45897,202],{"class":93},[76,45899,45900],{"class":305},"\"processing done!\"",[76,45902,208],{"class":93},[14,45904,45905],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22070,45907,45909],{"id":45908},"_242模型代码","2.4.2.模型代码",[14,45911,45912],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[67,45914,45916],{"className":69,"code":45915,"language":71,"meta":58,"style":58},"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",[73,45917,45918,45924,45934,45944,45948,45964,45972,45986,45996,46000,46030,46034,46068,46114,46118,46152,46198,46202,46206,46240,46270,46274,46282,46296,46318,46340,46358,46362,46376,46380,46384,46400,46404,46412,46426,46436,46480,46484,46512,46516,46526,46554,46558,46594,46598,46626,46630,46640,46672,46704,46732,46736,46746,46778,46810,46842,46874,46906,46934,46938,46948,46980,47012,47024,47028,47040,47044,47048,47060,47068,47088,47092,47096,47100,47104,47108,47112,47126,47134,47142,47154,47168,47176,47180,47188,47198,47208,47218,47228,47238,47244,47248,47252,47264,47284,47292],{"__ignoreMap":58},[76,45919,45920,45922],{"class":78,"line":79},[76,45921,90],{"class":89},[76,45923,30465],{"class":93},[76,45925,45926,45928,45930,45932],{"class":78,"line":86},[76,45927,30807],{"class":89},[76,45929,30810],{"class":93},[76,45931,90],{"class":89},[76,45933,30815],{"class":93},[76,45935,45936,45938,45940,45942],{"class":78,"line":97},[76,45937,30807],{"class":89},[76,45939,30827],{"class":93},[76,45941,90],{"class":89},[76,45943,30832],{"class":93},[76,45945,45946],{"class":78,"line":103},[76,45947,2472],{"emptyLinePlaceholder":125},[76,45949,45950,45952,45954,45956,45958,45960,45962],{"class":78,"line":1273},[76,45951,14766],{"class":89},[76,45953,41563],{"class":2035},[76,45955,202],{"class":93},[76,45957,30848],{"class":2035},[76,45959,757],{"class":93},[76,45961,30853],{"class":2035},[76,45963,30856],{"class":93},[76,45965,45966,45968,45970],{"class":78,"line":1287},[76,45967,30871],{"class":89},[76,45969,30874],{"class":250},[76,45971,41582],{"class":93},[76,45973,45974,45976,45978,45980,45982,45984],{"class":78,"line":1293},[76,45975,30887],{"class":250},[76,45977,41589],{"class":93},[76,45979,30893],{"class":250},[76,45981,30896],{"class":93},[76,45983,30899],{"class":250},[76,45985,2048],{"class":93},[76,45987,45988,45990,45992,45994],{"class":78,"line":1384},[76,45989,30915],{"class":250},[76,45991,34841],{"class":93},[76,45993,247],{"class":89},[76,45995,34846],{"class":93},[76,45997,45998],{"class":78,"line":1390},[76,45999,41612],{"class":82},[76,46001,46002,46004,46006,46008,46010,46012,46014,46016,46018,46020,46022,46024,46026,46028],{"class":78,"line":1402},[76,46003,30915],{"class":250},[76,46005,41619],{"class":93},[76,46007,247],{"class":89},[76,46009,30923],{"class":93},[76,46011,30926],{"class":5288},[76,46013,247],{"class":89},[76,46015,41630],{"class":93},[76,46017,30935],{"class":5288},[76,46019,247],{"class":89},[76,46021,41637],{"class":93},[76,46023,30944],{"class":5288},[76,46025,247],{"class":89},[76,46027,418],{"class":250},[76,46029,208],{"class":93},[76,46031,46032],{"class":78,"line":1684},[76,46033,41650],{"class":82},[76,46035,46036,46038,46040,46042,46044,46046,46048,46050,46052,46054,46056,46058,46060,46062,46064,46066],{"class":78,"line":1689},[76,46037,30915],{"class":250},[76,46039,41657],{"class":93},[76,46041,247],{"class":89},[76,46043,30923],{"class":93},[76,46045,30926],{"class":5288},[76,46047,247],{"class":89},[76,46049,41630],{"class":93},[76,46051,30935],{"class":5288},[76,46053,247],{"class":89},[76,46055,41674],{"class":93},[76,46057,392],{"class":250},[76,46059,41679],{"class":93},[76,46061,30944],{"class":5288},[76,46063,247],{"class":89},[76,46065,418],{"class":250},[76,46067,208],{"class":93},[76,46069,46070,46072,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096,46098,46100,46102,46104,46106,46108,46110,46112],{"class":78,"line":1695},[76,46071,30915],{"class":250},[76,46073,41694],{"class":93},[76,46075,247],{"class":89},[76,46077,30923],{"class":93},[76,46079,30926],{"class":5288},[76,46081,247],{"class":89},[76,46083,41674],{"class":93},[76,46085,392],{"class":250},[76,46087,41679],{"class":93},[76,46089,30935],{"class":5288},[76,46091,247],{"class":89},[76,46093,41674],{"class":93},[76,46095,418],{"class":250},[76,46097,41679],{"class":93},[76,46099,30944],{"class":5288},[76,46101,247],{"class":89},[76,46103,272],{"class":250},[76,46105,578],{"class":93},[76,46107,30953],{"class":5288},[76,46109,247],{"class":89},[76,46111,418],{"class":250},[76,46113,208],{"class":93},[76,46115,46116],{"class":78,"line":1700},[76,46117,41739],{"class":82},[76,46119,46120,46122,46124,46126,46128,46130,46132,46134,46136,46138,46140,46142,46144,46146,46148,46150],{"class":78,"line":1714},[76,46121,30915],{"class":250},[76,46123,41746],{"class":93},[76,46125,247],{"class":89},[76,46127,30923],{"class":93},[76,46129,30926],{"class":5288},[76,46131,247],{"class":89},[76,46133,41630],{"class":93},[76,46135,30935],{"class":5288},[76,46137,247],{"class":89},[76,46139,41763],{"class":93},[76,46141,392],{"class":250},[76,46143,41679],{"class":93},[76,46145,30944],{"class":5288},[76,46147,247],{"class":89},[76,46149,418],{"class":250},[76,46151,208],{"class":93},[76,46153,46154,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180,46182,46184,46186,46188,46190,46192,46194,46196],{"class":78,"line":1719},[76,46155,30915],{"class":250},[76,46157,41782],{"class":93},[76,46159,247],{"class":89},[76,46161,30923],{"class":93},[76,46163,30926],{"class":5288},[76,46165,247],{"class":89},[76,46167,41763],{"class":93},[76,46169,392],{"class":250},[76,46171,41679],{"class":93},[76,46173,30935],{"class":5288},[76,46175,247],{"class":89},[76,46177,41763],{"class":93},[76,46179,418],{"class":250},[76,46181,41679],{"class":93},[76,46183,30944],{"class":5288},[76,46185,247],{"class":89},[76,46187,520],{"class":250},[76,46189,578],{"class":93},[76,46191,30953],{"class":5288},[76,46193,247],{"class":89},[76,46195,278],{"class":250},[76,46197,208],{"class":93},[76,46199,46200],{"class":78,"line":1725},[76,46201,41827],{"class":82},[76,46203,46204],{"class":78,"line":1746},[76,46205,41832],{"class":82},[76,46207,46208,46210,46212,46214,46216,46218,46220,46222,46224,46226,46228,46230,46232,46234,46236,46238],{"class":78,"line":1751},[76,46209,30915],{"class":250},[76,46211,41839],{"class":93},[76,46213,247],{"class":89},[76,46215,34899],{"class":93},[76,46217,30944],{"class":5288},[76,46219,247],{"class":89},[76,46221,272],{"class":250},[76,46223,578],{"class":93},[76,46225,30999],{"class":5288},[76,46227,247],{"class":89},[76,46229,418],{"class":250},[76,46231,578],{"class":93},[76,46233,30953],{"class":5288},[76,46235,247],{"class":89},[76,46237,418],{"class":250},[76,46239,208],{"class":93},[76,46241,46242,46244,46246,46248,46250,46252,46254,46256,46258,46260,46262,46264,46266,46268],{"class":78,"line":1765},[76,46243,30915],{"class":250},[76,46245,41874],{"class":93},[76,46247,247],{"class":89},[76,46249,30923],{"class":93},[76,46251,30926],{"class":5288},[76,46253,247],{"class":89},[76,46255,41630],{"class":93},[76,46257,30935],{"class":5288},[76,46259,247],{"class":89},[76,46261,41891],{"class":93},[76,46263,30944],{"class":5288},[76,46265,247],{"class":89},[76,46267,418],{"class":250},[76,46269,208],{"class":93},[76,46271,46272],{"class":78,"line":1770},[76,46273,2472],{"emptyLinePlaceholder":125},[76,46275,46276,46278,46280],{"class":78,"line":1799},[76,46277,30871],{"class":89},[76,46279,31163],{"class":2035},[76,46281,31166],{"class":93},[76,46283,46284,46286,46288,46290,46292,46294],{"class":78,"line":1804},[76,46285,41916],{"class":93},[76,46287,247],{"class":89},[76,46289,30893],{"class":250},[76,46291,35254],{"class":93},[76,46293,30893],{"class":250},[76,46295,41927],{"class":93},[76,46297,46298,46300,46302,46304,46306,46308,46310,46312,46314,46316],{"class":78,"line":1821},[76,46299,7157],{"class":93},[76,46301,247],{"class":89},[76,46303,30893],{"class":250},[76,46305,35254],{"class":93},[76,46307,30893],{"class":250},[76,46309,41942],{"class":93},[76,46311,30893],{"class":250},[76,46313,35254],{"class":93},[76,46315,30893],{"class":250},[76,46317,41951],{"class":93},[76,46319,46320,46322,46324,46326,46328,46330,46332,46334,46336,46338],{"class":78,"line":1826},[76,46321,41956],{"class":93},[76,46323,247],{"class":89},[76,46325,30893],{"class":250},[76,46327,35254],{"class":93},[76,46329,30893],{"class":250},[76,46331,41967],{"class":93},[76,46333,30893],{"class":250},[76,46335,35254],{"class":93},[76,46337,30893],{"class":250},[76,46339,41976],{"class":93},[76,46341,46342,46344,46346,46348,46350,46352,46354,46356],{"class":78,"line":1831},[76,46343,41981],{"class":93},[76,46345,247],{"class":89},[76,46347,30893],{"class":250},[76,46349,35254],{"class":93},[76,46351,30893],{"class":250},[76,46353,41992],{"class":93},[76,46355,30893],{"class":250},[76,46357,41997],{"class":93},[76,46359,46360],{"class":78,"line":1836},[76,46361,42002],{"class":82},[76,46363,46364,46366,46368,46370,46372,46374],{"class":78,"line":1850},[76,46365,14824],{"class":89},[76,46367,42009],{"class":93},[76,46369,32755],{"class":5288},[76,46371,247],{"class":89},[76,46373,418],{"class":250},[76,46375,208],{"class":93},[76,46377,46378],{"class":78,"line":1855},[76,46379,2472],{"emptyLinePlaceholder":125},[76,46381,46382],{"class":78,"line":2649},[76,46383,42030],{"class":82},[76,46385,46386,46388,46390,46392,46394,46396,46398],{"class":78,"line":2663},[76,46387,14766],{"class":89},[76,46389,42037],{"class":2035},[76,46391,202],{"class":93},[76,46393,30848],{"class":2035},[76,46395,757],{"class":93},[76,46397,30853],{"class":2035},[76,46399,30856],{"class":93},[76,46401,46402],{"class":78,"line":2671},[76,46403,42052],{"class":82},[76,46405,46406,46408,46410],{"class":78,"line":2676},[76,46407,30871],{"class":89},[76,46409,30874],{"class":250},[76,46411,42061],{"class":93},[76,46413,46414,46416,46418,46420,46422,46424],{"class":78,"line":2682},[76,46415,30887],{"class":250},[76,46417,42068],{"class":93},[76,46419,30893],{"class":250},[76,46421,30896],{"class":93},[76,46423,30899],{"class":250},[76,46425,2048],{"class":93},[76,46427,46428,46430,46432,46434],{"class":78,"line":2688},[76,46429,30915],{"class":250},[76,46431,42083],{"class":93},[76,46433,247],{"class":89},[76,46435,38079],{"class":93},[76,46437,46438,46440,46442,46444,46446,46448,46450,46452,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472,46474,46476,46478],{"class":78,"line":2693},[76,46439,38084],{"class":93},[76,46441,30926],{"class":5288},[76,46443,247],{"class":89},[76,46445,272],{"class":250},[76,46447,578],{"class":93},[76,46449,30935],{"class":5288},[76,46451,247],{"class":89},[76,46453,404],{"class":250},[76,46455,578],{"class":93},[76,46457,30944],{"class":5288},[76,46459,247],{"class":89},[76,46461,569],{"class":250},[76,46463,578],{"class":93},[76,46465,30999],{"class":5288},[76,46467,247],{"class":89},[76,46469,278],{"class":250},[76,46471,578],{"class":93},[76,46473,30953],{"class":5288},[76,46475,247],{"class":89},[76,46477,272],{"class":250},[76,46479,38117],{"class":93},[76,46481,46482],{"class":78,"line":8020},[76,46483,38122],{"class":93},[76,46485,46486,46488,46490,46492,46494,46496,46498,46500,46502,46504,46506,46508,46510],{"class":78,"line":8044},[76,46487,38167],{"class":93},[76,46489,30944],{"class":5288},[76,46491,247],{"class":89},[76,46493,272],{"class":250},[76,46495,578],{"class":93},[76,46497,30999],{"class":5288},[76,46499,247],{"class":89},[76,46501,278],{"class":250},[76,46503,578],{"class":93},[76,46505,30953],{"class":5288},[76,46507,247],{"class":89},[76,46509,418],{"class":250},[76,46511,208],{"class":93},[76,46513,46514],{"class":78,"line":8049},[76,46515,38196],{"class":93},[76,46517,46518,46520,46522,46524],{"class":78,"line":8055},[76,46519,30915],{"class":250},[76,46521,42174],{"class":93},[76,46523,247],{"class":89},[76,46525,38079],{"class":93},[76,46527,46528,46530,46532,46534,46536,46538,46540,46542,46544,46546,46548,46550,46552],{"class":78,"line":8082},[76,46529,38084],{"class":93},[76,46531,30926],{"class":5288},[76,46533,247],{"class":89},[76,46535,404],{"class":250},[76,46537,578],{"class":93},[76,46539,30935],{"class":5288},[76,46541,247],{"class":89},[76,46543,404],{"class":250},[76,46545,578],{"class":93},[76,46547,30944],{"class":5288},[76,46549,247],{"class":89},[76,46551,418],{"class":250},[76,46553,38117],{"class":93},[76,46555,46556],{"class":78,"line":8087},[76,46557,38122],{"class":93},[76,46559,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580,46582,46584,46586,46588,46590,46592],{"class":78,"line":8093},[76,46561,38084],{"class":93},[76,46563,30926],{"class":5288},[76,46565,247],{"class":89},[76,46567,404],{"class":250},[76,46569,578],{"class":93},[76,46571,30935],{"class":5288},[76,46573,247],{"class":89},[76,46575,42229],{"class":250},[76,46577,578],{"class":93},[76,46579,30944],{"class":5288},[76,46581,247],{"class":89},[76,46583,272],{"class":250},[76,46585,578],{"class":93},[76,46587,30953],{"class":5288},[76,46589,247],{"class":89},[76,46591,418],{"class":250},[76,46593,38117],{"class":93},[76,46595,46596],{"class":78,"line":8105},[76,46597,38122],{"class":93},[76,46599,46600,46602,46604,46606,46608,46610,46612,46614,46616,46618,46620,46622,46624],{"class":78,"line":8117},[76,46601,38167],{"class":93},[76,46603,30944],{"class":5288},[76,46605,247],{"class":89},[76,46607,272],{"class":250},[76,46609,578],{"class":93},[76,46611,30999],{"class":5288},[76,46613,247],{"class":89},[76,46615,278],{"class":250},[76,46617,578],{"class":93},[76,46619,30953],{"class":5288},[76,46621,247],{"class":89},[76,46623,418],{"class":250},[76,46625,208],{"class":93},[76,46627,46628],{"class":78,"line":8129},[76,46629,38196],{"class":93},[76,46631,46632,46634,46636,46638],{"class":78,"line":9788},[76,46633,30915],{"class":250},[76,46635,42290],{"class":93},[76,46637,247],{"class":89},[76,46639,38079],{"class":93},[76,46641,46642,46644,46646,46648,46650,46652,46654,46656,46658,46660,46662,46664,46666,46668,46670],{"class":78,"line":9813},[76,46643,42299],{"class":93},[76,46645,42229],{"class":250},[76,46647,578],{"class":93},[76,46649,404],{"class":250},[76,46651,42308],{"class":93},[76,46653,410],{"class":250},[76,46655,578],{"class":93},[76,46657,32140],{"class":250},[76,46659,42317],{"class":93},[76,46661,800],{"class":250},[76,46663,578],{"class":93},[76,46665,398],{"class":250},[76,46667,42326],{"class":93},[76,46669,398],{"class":250},[76,46671,38117],{"class":93},[76,46673,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692,46694,46696,46698,46700,46702],{"class":78,"line":9836},[76,46675,42299],{"class":93},[76,46677,34940],{"class":250},[76,46679,578],{"class":93},[76,46681,32140],{"class":250},[76,46683,42308],{"class":93},[76,46685,32140],{"class":250},[76,46687,578],{"class":93},[76,46689,42229],{"class":250},[76,46691,42317],{"class":93},[76,46693,398],{"class":250},[76,46695,578],{"class":93},[76,46697,410],{"class":250},[76,46699,42326],{"class":93},[76,46701,404],{"class":250},[76,46703,38117],{"class":93},[76,46705,46706,46708,46710,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730],{"class":78,"line":9860},[76,46707,38167],{"class":93},[76,46709,30944],{"class":5288},[76,46711,247],{"class":89},[76,46713,272],{"class":250},[76,46715,578],{"class":93},[76,46717,30999],{"class":5288},[76,46719,247],{"class":89},[76,46721,278],{"class":250},[76,46723,578],{"class":93},[76,46725,30953],{"class":5288},[76,46727,247],{"class":89},[76,46729,418],{"class":250},[76,46731,208],{"class":93},[76,46733,46734],{"class":78,"line":9865},[76,46735,38196],{"class":93},[76,46737,46738,46740,46742,46744],{"class":78,"line":9870},[76,46739,30915],{"class":250},[76,46741,42401],{"class":93},[76,46743,247],{"class":89},[76,46745,38079],{"class":93},[76,46747,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766,46768,46770,46772,46774,46776],{"class":78,"line":9875},[76,46749,42299],{"class":93},[76,46751,42412],{"class":250},[76,46753,578],{"class":93},[76,46755,42229],{"class":250},[76,46757,42308],{"class":93},[76,46759,410],{"class":250},[76,46761,578],{"class":93},[76,46763,42425],{"class":250},[76,46765,42317],{"class":93},[76,46767,800],{"class":250},[76,46769,578],{"class":93},[76,46771,806],{"class":250},[76,46773,42326],{"class":93},[76,46775,404],{"class":250},[76,46777,38117],{"class":93},[76,46779,46780,46782,46784,46786,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808],{"class":78,"line":9884},[76,46781,42299],{"class":93},[76,46783,38527],{"class":250},[76,46785,578],{"class":93},[76,46787,21120],{"class":250},[76,46789,42308],{"class":93},[76,46791,817],{"class":250},[76,46793,578],{"class":93},[76,46795,31571],{"class":250},[76,46797,42317],{"class":93},[76,46799,999],{"class":250},[76,46801,578],{"class":93},[76,46803,404],{"class":250},[76,46805,42326],{"class":93},[76,46807,404],{"class":250},[76,46809,38117],{"class":93},[76,46811,46812,46814,46816,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838,46840],{"class":78,"line":9889},[76,46813,42299],{"class":93},[76,46815,38527],{"class":250},[76,46817,578],{"class":93},[76,46819,32140],{"class":250},[76,46821,42308],{"class":93},[76,46823,32140],{"class":250},[76,46825,578],{"class":93},[76,46827,34940],{"class":250},[76,46829,42317],{"class":93},[76,46831,999],{"class":250},[76,46833,578],{"class":93},[76,46835,404],{"class":250},[76,46837,42326],{"class":93},[76,46839,404],{"class":250},[76,46841,38117],{"class":93},[76,46843,46844,46846,46848,46850,46852,46854,46856,46858,46860,46862,46864,46866,46868,46870,46872],{"class":78,"line":9895},[76,46845,42299],{"class":93},[76,46847,38527],{"class":250},[76,46849,578],{"class":93},[76,46851,817],{"class":250},[76,46853,42308],{"class":93},[76,46855,32140],{"class":250},[76,46857,578],{"class":93},[76,46859,42522],{"class":250},[76,46861,42317],{"class":93},[76,46863,398],{"class":250},[76,46865,578],{"class":93},[76,46867,404],{"class":250},[76,46869,42326],{"class":93},[76,46871,404],{"class":250},[76,46873,38117],{"class":93},[76,46875,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902,46904],{"class":78,"line":9916},[76,46877,42299],{"class":93},[76,46879,42543],{"class":250},[76,46881,578],{"class":93},[76,46883,34940],{"class":250},[76,46885,42308],{"class":93},[76,46887,21120],{"class":250},[76,46889,578],{"class":93},[76,46891,42556],{"class":250},[76,46893,42317],{"class":93},[76,46895,398],{"class":250},[76,46897,578],{"class":93},[76,46899,32140],{"class":250},[76,46901,42326],{"class":93},[76,46903,32140],{"class":250},[76,46905,38117],{"class":93},[76,46907,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932],{"class":78,"line":9922},[76,46909,38167],{"class":93},[76,46911,30944],{"class":5288},[76,46913,247],{"class":89},[76,46915,272],{"class":250},[76,46917,578],{"class":93},[76,46919,30999],{"class":5288},[76,46921,247],{"class":89},[76,46923,278],{"class":250},[76,46925,578],{"class":93},[76,46927,30953],{"class":5288},[76,46929,247],{"class":89},[76,46931,418],{"class":250},[76,46933,208],{"class":93},[76,46935,46936],{"class":78,"line":9936},[76,46937,38196],{"class":93},[76,46939,46940,46942,46944,46946],{"class":78,"line":9942},[76,46941,30915],{"class":250},[76,46943,42609],{"class":93},[76,46945,247],{"class":89},[76,46947,38079],{"class":93},[76,46949,46950,46952,46954,46956,46958,46960,46962,46964,46966,46968,46970,46972,46974,46976,46978],{"class":78,"line":9969},[76,46951,42299],{"class":93},[76,46953,42620],{"class":250},[76,46955,578],{"class":93},[76,46957,34940],{"class":250},[76,46959,42308],{"class":93},[76,46961,21120],{"class":250},[76,46963,578],{"class":93},[76,46965,42556],{"class":250},[76,46967,42317],{"class":93},[76,46969,398],{"class":250},[76,46971,578],{"class":93},[76,46973,32140],{"class":250},[76,46975,42326],{"class":93},[76,46977,32140],{"class":250},[76,46979,38117],{"class":93},[76,46981,46982,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002,47004,47006,47008,47010],{"class":78,"line":9978},[76,46983,42299],{"class":93},[76,46985,42620],{"class":250},[76,46987,578],{"class":93},[76,46989,35010],{"class":250},[76,46991,42308],{"class":93},[76,46993,42229],{"class":250},[76,46995,578],{"class":93},[76,46997,35010],{"class":250},[76,46999,42317],{"class":93},[76,47001,806],{"class":250},[76,47003,578],{"class":93},[76,47005,32140],{"class":250},[76,47007,42326],{"class":93},[76,47009,32140],{"class":250},[76,47011,38117],{"class":93},[76,47013,47014,47016,47018,47020,47022],{"class":78,"line":9984},[76,47015,42683],{"class":93},[76,47017,418],{"class":250},[76,47019,578],{"class":93},[76,47021,418],{"class":250},[76,47023,42692],{"class":93},[76,47025,47026],{"class":78,"line":9992},[76,47027,38860],{"class":93},[76,47029,47030,47032,47034,47036,47038],{"class":78,"line":9997},[76,47031,38865],{"class":93},[76,47033,42703],{"class":250},[76,47035,578],{"class":93},[76,47037,278],{"class":250},[76,47039,208],{"class":93},[76,47041,47042],{"class":78,"line":16676},[76,47043,38196],{"class":93},[76,47045,47046],{"class":78,"line":16682},[76,47047,42718],{"class":82},[76,47049,47050,47052,47054,47056,47058],{"class":78,"line":16705},[76,47051,3475],{"class":89},[76,47053,38938],{"class":93},[76,47055,26116],{"class":89},[76,47057,38943],{"class":250},[76,47059,38946],{"class":93},[76,47061,47062,47064,47066],{"class":78,"line":16711},[76,47063,4714],{"class":89},[76,47065,38958],{"class":250},[76,47067,38961],{"class":93},[76,47069,47070,47072,47074,47076,47078,47080,47082,47084,47086],{"class":78,"line":16734},[76,47071,38971],{"class":93},[76,47073,42745],{"class":5288},[76,47075,247],{"class":89},[76,47077,42750],{"class":305},[76,47079,578],{"class":93},[76,47081,38974],{"class":5288},[76,47083,247],{"class":89},[76,47085,38979],{"class":305},[76,47087,208],{"class":93},[76,47089,47090],{"class":78,"line":16748},[76,47091,42765],{"class":82},[76,47093,47094],{"class":78,"line":16768},[76,47095,42770],{"class":82},[76,47097,47098],{"class":78,"line":16774},[76,47099,42775],{"class":82},[76,47101,47102],{"class":78,"line":16785},[76,47103,42780],{"class":82},[76,47105,47106],{"class":78,"line":16808},[76,47107,42785],{"class":82},[76,47109,47110],{"class":78,"line":16830},[76,47111,42790],{"class":82},[76,47113,47114,47116,47118,47120,47122,47124],{"class":78,"line":16835},[76,47115,38991],{"class":89},[76,47117,38994],{"class":93},[76,47119,38997],{"class":89},[76,47121,39000],{"class":89},[76,47123,39003],{"class":250},[76,47125,3811],{"class":93},[76,47127,47128,47130,47132],{"class":78,"line":16841},[76,47129,39015],{"class":93},[76,47131,392],{"class":250},[76,47133,208],{"class":93},[76,47135,47136,47138,47140],{"class":78,"line":16855},[76,47137,42817],{"class":89},[76,47139,38958],{"class":250},[76,47141,39034],{"class":93},[76,47143,47144,47146,47148,47150,47152],{"class":78,"line":16868},[76,47145,42826],{"class":93},[76,47147,392],{"class":250},[76,47149,578],{"class":93},[76,47151,39056],{"class":250},[76,47153,208],{"class":93},[76,47155,47156,47158,47160,47162,47164,47166],{"class":78,"line":16873},[76,47157,42839],{"class":89},[76,47159,38994],{"class":93},[76,47161,38997],{"class":89},[76,47163,39000],{"class":89},[76,47165,39003],{"class":250},[76,47167,3811],{"class":93},[76,47169,47170,47172,47174],{"class":78,"line":16887},[76,47171,42854],{"class":93},[76,47173,392],{"class":250},[76,47175,208],{"class":93},[76,47177,47178],{"class":78,"line":16892},[76,47179,35235],{"class":82},[76,47181,47182,47184,47186],{"class":78,"line":16898},[76,47183,30871],{"class":89},[76,47185,31163],{"class":2035},[76,47187,31166],{"class":93},[76,47189,47190,47192,47194,47196],{"class":78,"line":16903},[76,47191,31171],{"class":93},[76,47193,247],{"class":89},[76,47195,30893],{"class":250},[76,47197,42881],{"class":93},[76,47199,47200,47202,47204,47206],{"class":78,"line":16917},[76,47201,31171],{"class":93},[76,47203,247],{"class":89},[76,47205,30893],{"class":250},[76,47207,42892],{"class":93},[76,47209,47210,47212,47214,47216],{"class":78,"line":16922},[76,47211,31171],{"class":93},[76,47213,247],{"class":89},[76,47215,30893],{"class":250},[76,47217,42903],{"class":93},[76,47219,47220,47222,47224,47226],{"class":78,"line":16927},[76,47221,31171],{"class":93},[76,47223,247],{"class":89},[76,47225,30893],{"class":250},[76,47227,42914],{"class":93},[76,47229,47230,47232,47234,47236],{"class":78,"line":16941},[76,47231,31171],{"class":93},[76,47233,247],{"class":89},[76,47235,30893],{"class":250},[76,47237,42925],{"class":93},[76,47239,47240,47242],{"class":78,"line":16953},[76,47241,14824],{"class":89},[76,47243,31279],{"class":93},[76,47245,47246],{"class":78,"line":16958},[76,47247,2472],{"emptyLinePlaceholder":125},[76,47249,47250],{"class":78,"line":16971},[76,47251,42940],{"class":82},[76,47253,47254,47256,47258,47260,47262],{"class":78,"line":16976},[76,47255,1603],{"class":89},[76,47257,31290],{"class":250},[76,47259,3021],{"class":89},[76,47261,31295],{"class":305},[76,47263,3811],{"class":93},[76,47265,47266,47268,47270,47272,47274,47276,47278,47280,47282],{"class":78,"line":16981},[76,47267,31307],{"class":93},[76,47269,247],{"class":89},[76,47271,30521],{"class":93},[76,47273,31314],{"class":305},[76,47275,1776],{"class":89},[76,47277,31319],{"class":93},[76,47279,1773],{"class":89},[76,47281,30546],{"class":305},[76,47283,208],{"class":93},[76,47285,47286,47288,47290],{"class":78,"line":16986},[76,47287,31359],{"class":93},[76,47289,247],{"class":89},[76,47291,42981],{"class":93},[76,47293,47294,47296,47298,47300,47302,47304,47306,47308],{"class":78,"line":16999},[76,47295,31369],{"class":250},[76,47297,31372],{"class":93},[76,47299,418],{"class":250},[76,47301,578],{"class":93},[76,47303,31571],{"class":250},[76,47305,578],{"class":93},[76,47307,31571],{"class":250},[76,47309,31385],{"class":93},[22070,47311,47313],{"id":47312},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47315,47316],{},"计算图片的均值与方差，用于训练中归一化处理操作",[67,47318,47320],{"className":69,"code":47319,"language":71,"meta":58,"style":58},"# 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",[73,47321,47322,47327,47340,47345,47351,47356,47366,47370,47375,47385,47389,47394,47404,47421,47425,47430,47442,47454,47485,47494,47504,47514,47518,47523,47538,47542,47547,47552,47557,47567,47572,47597,47601,47606,47621,47625,47638,47642,47647,47652,47657,47662,47667,47677,47687,47710,47718,47726,47734,47738,47750,47754,47759,47763,47767,47774,47794,47818,47825,47839,47844,47849,47853,47867,47871,47883],{"__ignoreMap":58},[76,47323,47324],{"class":78,"line":79},[76,47325,47326],{"class":82},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[76,47328,47329,47331,47334,47337],{"class":78,"line":86},[76,47330,30807],{"class":89},[76,47332,47333],{"class":250}," PIL",[76,47335,47336],{"class":89}," import",[76,47338,47339],{"class":93}," Image\n",[76,47341,47342],{"class":78,"line":97},[76,47343,47344],{"class":82},"# os 用来处理文件夹和文件路径\n",[76,47346,47347,47349],{"class":78,"line":103},[76,47348,90],{"class":89},[76,47350,45375],{"class":93},[76,47352,47353],{"class":78,"line":1273},[76,47354,47355],{"class":82},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[76,47357,47358,47360,47362,47364],{"class":78,"line":1287},[76,47359,90],{"class":89},[76,47361,31450],{"class":93},[76,47363,31453],{"class":89},[76,47365,31456],{"class":93},[76,47367,47368],{"class":78,"line":1293},[76,47369,2472],{"emptyLinePlaceholder":125},[76,47371,47372],{"class":78,"line":1384},[76,47373,47374],{"class":82},"# 文件夹路径，包含所有图片文件\n",[76,47376,47377,47380,47382],{"class":78,"line":1390},[76,47378,47379],{"class":93},"folder_path ",[76,47381,247],{"class":89},[76,47383,47384],{"class":305}," 'data_cat_dog'\n",[76,47386,47387],{"class":78,"line":1402},[76,47388,2472],{"emptyLinePlaceholder":125},[76,47390,47391],{"class":78,"line":1684},[76,47392,47393],{"class":82},"# 初始化累积变量\n",[76,47395,47396,47399,47401],{"class":78,"line":1689},[76,47397,47398],{"class":93},"total_pixels ",[76,47400,247],{"class":89},[76,47402,47403],{"class":250}," 0\n",[76,47405,47406,47409,47411,47414,47416,47418],{"class":78,"line":1695},[76,47407,47408],{"class":93},"sum_normalized_pixel_values ",[76,47410,247],{"class":89},[76,47412,47413],{"class":93}," np.zeros(",[76,47415,272],{"class":250},[76,47417,45878],{"class":93},[76,47419,47420],{"class":82},"# 如果是RGB图像，需要三个通道的均值和方差\n",[76,47422,47423],{"class":78,"line":1700},[76,47424,2472],{"emptyLinePlaceholder":125},[76,47426,47427],{"class":78,"line":1714},[76,47428,47429],{"class":82},"# 遍历文件夹中的图片文件\n",[76,47431,47432,47434,47437,47439],{"class":78,"line":1719},[76,47433,3097],{"class":89},[76,47435,47436],{"class":93}," root, dirs, files ",[76,47438,26116],{"class":89},[76,47440,47441],{"class":93}," os.walk(folder_path):\n",[76,47443,47444,47446,47449,47451],{"class":78,"line":1725},[76,47445,3273],{"class":89},[76,47447,47448],{"class":93}," filename ",[76,47450,26116],{"class":89},[76,47452,47453],{"class":93}," files:\n",[76,47455,47456,47458,47461,47464,47466,47469,47471,47474,47476,47479,47482],{"class":78,"line":1746},[76,47457,2569],{"class":89},[76,47459,47460],{"class":93}," filename.endswith((",[76,47462,47463],{"class":305},"'.jpg'",[76,47465,12507],{"class":93},[76,47467,47468],{"class":305},"'.jpeg'",[76,47470,12507],{"class":93},[76,47472,47473],{"class":305},"'.png'",[76,47475,12507],{"class":93},[76,47477,47478],{"class":305},"'.bmp'",[76,47480,47481],{"class":93},")):  ",[76,47483,47484],{"class":82},"# 可根据实际情况添加其他格式\n",[76,47486,47487,47489,47491],{"class":78,"line":1751},[76,47488,45743],{"class":93},[76,47490,247],{"class":89},[76,47492,47493],{"class":93}," os.path.join(root, filename)\n",[76,47495,47496,47499,47501],{"class":78,"line":1765},[76,47497,47498],{"class":93},"            image ",[76,47500,247],{"class":89},[76,47502,47503],{"class":93}," Image.open(image_path)\n",[76,47505,47506,47509,47511],{"class":78,"line":1770},[76,47507,47508],{"class":93},"            image_array ",[76,47510,247],{"class":89},[76,47512,47513],{"class":93}," np.array(image)\n",[76,47515,47516],{"class":78,"line":1799},[76,47517,2472],{"emptyLinePlaceholder":125},[76,47519,47520],{"class":78,"line":1804},[76,47521,47522],{"class":82},"            # 归一化像素值到0-1之间\n",[76,47524,47525,47528,47530,47533,47535],{"class":78,"line":1821},[76,47526,47527],{"class":93},"            normalized_image_array ",[76,47529,247],{"class":89},[76,47531,47532],{"class":93}," image_array ",[76,47534,783],{"class":89},[76,47536,47537],{"class":250}," 255.0\n",[76,47539,47540],{"class":78,"line":1826},[76,47541,2472],{"emptyLinePlaceholder":125},[76,47543,47544],{"class":78,"line":1831},[76,47545,47546],{"class":82},"            # print(image_path)\n",[76,47548,47549],{"class":78,"line":1836},[76,47550,47551],{"class":82},"            # print(normalized_image_array.shape)\n",[76,47553,47554],{"class":78,"line":1850},[76,47555,47556],{"class":82},"            # 累积归一化后的像素值和像素数量\n",[76,47558,47559,47562,47564],{"class":78,"line":1855},[76,47560,47561],{"class":93},"            total_pixels ",[76,47563,9549],{"class":89},[76,47565,47566],{"class":93}," normalized_image_array.size\n",[76,47568,47569],{"class":78,"line":2649},[76,47570,47571],{"class":82},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[76,47573,47574,47577,47579,47582,47585,47587,47589,47591,47593,47595],{"class":78,"line":2663},[76,47575,47576],{"class":93},"            sum_normalized_pixel_values ",[76,47578,9549],{"class":89},[76,47580,47581],{"class":93}," np.sum(normalized_image_array, ",[76,47583,47584],{"class":5288},"axis",[76,47586,247],{"class":89},[76,47588,202],{"class":93},[76,47590,392],{"class":250},[76,47592,12507],{"class":93},[76,47594,418],{"class":250},[76,47596,30567],{"class":93},[76,47598,47599],{"class":78,"line":2671},[76,47600,2472],{"emptyLinePlaceholder":125},[76,47602,47603],{"class":78,"line":2676},[76,47604,47605],{"class":82},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[76,47607,47608,47611,47613,47616,47618],{"class":78,"line":2682},[76,47609,47610],{"class":93},"mean ",[76,47612,247],{"class":89},[76,47614,47615],{"class":93}," sum_normalized_pixel_values ",[76,47617,783],{"class":89},[76,47619,47620],{"class":93}," total_pixels\n",[76,47622,47623],{"class":78,"line":2688},[76,47624,2472],{"emptyLinePlaceholder":125},[76,47626,47627,47630,47632,47634,47636],{"class":78,"line":2693},[76,47628,47629],{"class":93},"sum_squared_diff ",[76,47631,247],{"class":89},[76,47633,47413],{"class":93},[76,47635,272],{"class":250},[76,47637,208],{"class":93},[76,47639,47640],{"class":78,"line":8020},[76,47641,2472],{"emptyLinePlaceholder":125},[76,47643,47644],{"class":78,"line":8044},[76,47645,47646],{"class":82},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[76,47648,47649],{"class":78,"line":8049},[76,47650,47651],{"class":82},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[76,47653,47654],{"class":78,"line":8055},[76,47655,47656],{"class":82},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[76,47658,47659],{"class":78,"line":8082},[76,47660,47661],{"class":82},"# Image.open(image_path)：打开图片\n",[76,47663,47664],{"class":78,"line":8087},[76,47665,47666],{"class":82},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[76,47668,47669,47671,47673,47675],{"class":78,"line":8093},[76,47670,3097],{"class":89},[76,47672,47436],{"class":93},[76,47674,26116],{"class":89},[76,47676,47441],{"class":93},[76,47678,47679,47681,47683,47685],{"class":78,"line":8105},[76,47680,3273],{"class":89},[76,47682,47448],{"class":93},[76,47684,26116],{"class":89},[76,47686,47453],{"class":93},[76,47688,47689,47691,47693,47695,47697,47699,47701,47703,47705,47707],{"class":78,"line":8117},[76,47690,2569],{"class":89},[76,47692,47460],{"class":93},[76,47694,47463],{"class":305},[76,47696,12507],{"class":93},[76,47698,47468],{"class":305},[76,47700,12507],{"class":93},[76,47702,47473],{"class":305},[76,47704,12507],{"class":93},[76,47706,47478],{"class":305},[76,47708,47709],{"class":93},")):\n",[76,47711,47712,47714,47716],{"class":78,"line":8129},[76,47713,45743],{"class":93},[76,47715,247],{"class":89},[76,47717,47493],{"class":93},[76,47719,47720,47722,47724],{"class":78,"line":9788},[76,47721,47498],{"class":93},[76,47723,247],{"class":89},[76,47725,47503],{"class":93},[76,47727,47728,47730,47732],{"class":78,"line":9813},[76,47729,47508],{"class":93},[76,47731,247],{"class":89},[76,47733,47513],{"class":93},[76,47735,47736],{"class":78,"line":9836},[76,47737,47522],{"class":82},[76,47739,47740,47742,47744,47746,47748],{"class":78,"line":9860},[76,47741,47527],{"class":93},[76,47743,247],{"class":89},[76,47745,47532],{"class":93},[76,47747,783],{"class":89},[76,47749,47537],{"class":250},[76,47751,47752],{"class":78,"line":9865},[76,47753,47551],{"class":82},[76,47755,47756],{"class":78,"line":9870},[76,47757,47758],{"class":82},"            # print(mean.shape)\n",[76,47760,47761],{"class":78,"line":9875},[76,47762,47546],{"class":82},[76,47764,47765],{"class":78,"line":9884},[76,47766,2472],{"emptyLinePlaceholder":125},[76,47768,47769,47772],{"class":78,"line":9889},[76,47770,47771],{"class":89},"            try",[76,47773,3811],{"class":93},[76,47775,47776,47779,47781,47784,47786,47789,47791],{"class":78,"line":9895},[76,47777,47778],{"class":93},"                diff ",[76,47780,247],{"class":89},[76,47782,47783],{"class":93}," (normalized_image_array ",[76,47785,112],{"class":89},[76,47787,47788],{"class":93}," mean) ",[76,47790,10733],{"class":89},[76,47792,47793],{"class":250}," 2\n",[76,47795,47796,47799,47801,47804,47806,47808,47810,47812,47814,47816],{"class":78,"line":9916},[76,47797,47798],{"class":93},"                sum_squared_diff ",[76,47800,9549],{"class":89},[76,47802,47803],{"class":93}," np.sum(diff, ",[76,47805,47584],{"class":5288},[76,47807,247],{"class":89},[76,47809,202],{"class":93},[76,47811,392],{"class":250},[76,47813,12507],{"class":93},[76,47815,418],{"class":250},[76,47817,30567],{"class":93},[76,47819,47820,47823],{"class":78,"line":9922},[76,47821,47822],{"class":89},"            except",[76,47824,3811],{"class":93},[76,47826,47827,47830,47832,47834,47837],{"class":78,"line":9936},[76,47828,47829],{"class":250},"                print",[76,47831,202],{"class":93},[76,47833,254],{"class":89},[76,47835,47836],{"class":305},"\"捕获到自定义异常\"",[76,47838,208],{"class":93},[76,47840,47841],{"class":78,"line":9942},[76,47842,47843],{"class":82},"            # diff = (normalized_image_array - mean) ** 2\n",[76,47845,47846],{"class":78,"line":9969},[76,47847,47848],{"class":82},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[76,47850,47851],{"class":78,"line":9978},[76,47852,2472],{"emptyLinePlaceholder":125},[76,47854,47855,47858,47860,47863,47865],{"class":78,"line":9984},[76,47856,47857],{"class":93},"variance ",[76,47859,247],{"class":89},[76,47861,47862],{"class":93}," sum_squared_diff ",[76,47864,783],{"class":89},[76,47866,47620],{"class":93},[76,47868,47869],{"class":78,"line":9992},[76,47870,2472],{"emptyLinePlaceholder":125},[76,47872,47873,47875,47877,47880],{"class":78,"line":9997},[76,47874,30485],{"class":250},[76,47876,202],{"class":93},[76,47878,47879],{"class":305},"\"Mean:\"",[76,47881,47882],{"class":93},", mean)\n",[76,47884,47885,47887,47889,47892],{"class":78,"line":16676},[76,47886,30485],{"class":250},[76,47888,202],{"class":93},[76,47890,47891],{"class":305},"\"Variance:\"",[76,47893,47894],{"class":93},", variance)\n",[67,47896,47898],{"className":69,"code":47897,"language":71,"meta":58,"style":58},"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",[73,47899,47900,47906,47912,47922,47928,47938,47952,47962,47972,47982,47986,47996,48006,48010,48014,48022,48027,48032,48051,48055,48060,48065,48070,48075,48116,48121,48131,48136,48149,48154,48159,48164,48169,48174,48178,48183,48188,48210,48214,48246,48260,48270,48280,48284,48294,48308,48318,48328,48338,48344,48348,48352,48356,48360,48364,48372,48392,48396,48400,48404,48408,48424,48428,48432,48440,48444,48448,48456,48460,48464,48468,48476,48480,48484,48488,48496,48500,48508,48512,48520,48524,48532,48536,48544,48548,48552,48560,48564,48568,48580,48604,48618,48622,48626,48630,48638,48642,48650,48654,48662,48666,48674,48678,48686,48690,48698,48702,48714,48718,48726,48730,48738,48742,48746,48750,48754,48762,48766,48782,48786,48794,48798,48802,48806,48810,48814,48818,48822,48838,48842,48854,48858,48870,48874,48886,48890,48898,48902,48910,48914,48918,48922,48928,48932,48940,48944,48960,48964,48972,48976,48992,49004,49008,49020,49024,49028,49036,49040,49044,49052,49056,49064,49068,49076,49080,49084,49126,49168,49172,49176,49192,49196,49212,49216,49220,49228,49232,49236,49248,49286,49290,49294,49302,49306,49320,49330,49336,49342,49348,49354,49358,49362,49368,49372,49376,49384,49388,49406,49410,49414,49418,49434,49438,49442,49446,49450,49454,49474,49494,49498,49502,49506,49514,49522,49526,49542,49562,49582,49586,49591,49600,49609,49614,49619,49624,49637,49642,49651,49660,49677],{"__ignoreMap":58},[76,47901,47902,47904],{"class":78,"line":79},[76,47903,90],{"class":89},[76,47905,31892],{"class":93},[76,47907,47908,47910],{"class":78,"line":86},[76,47909,90],{"class":89},[76,47911,31899],{"class":93},[76,47913,47914,47916,47918,47920],{"class":78,"line":97},[76,47915,90],{"class":89},[76,47917,31910],{"class":93},[76,47919,31453],{"class":89},[76,47921,31915],{"class":93},[76,47923,47924,47926],{"class":78,"line":103},[76,47925,90],{"class":89},[76,47927,30465],{"class":93},[76,47929,47930,47932,47934,47936],{"class":78,"line":1273},[76,47931,30807],{"class":89},[76,47933,31485],{"class":93},[76,47935,90],{"class":89},[76,47937,31932],{"class":93},[76,47939,47940,47942,47944,47946,47949],{"class":78,"line":1287},[76,47941,30807],{"class":89},[76,47943,31438],{"class":93},[76,47945,90],{"class":89},[76,47947,47948],{"class":93}," ImageFolder ",[76,47950,47951],{"class":82},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[76,47953,47954,47956,47958,47960],{"class":78,"line":1293},[76,47955,30807],{"class":89},[76,47957,31468],{"class":93},[76,47959,90],{"class":89},[76,47961,31473],{"class":93},[76,47963,47964,47966,47968,47970],{"class":78,"line":1384},[76,47965,90],{"class":89},[76,47967,31485],{"class":93},[76,47969,31453],{"class":89},[76,47971,31490],{"class":93},[76,47973,47974,47976,47978,47980],{"class":78,"line":1390},[76,47975,90],{"class":89},[76,47977,31502],{"class":93},[76,47979,31453],{"class":89},[76,47981,31507],{"class":93},[76,47983,47984],{"class":78,"line":1402},[76,47985,31977],{"class":82},[76,47987,47988,47990,47992,47994],{"class":78,"line":1684},[76,47989,30807],{"class":89},[76,47991,31984],{"class":93},[76,47993,90],{"class":89},[76,47995,43101],{"class":93},[76,47997,47998,48000,48002,48004],{"class":78,"line":1689},[76,47999,30807],{"class":89},[76,48001,30810],{"class":93},[76,48003,90],{"class":89},[76,48005,30815],{"class":93},[76,48007,48008],{"class":78,"line":1695},[76,48009,2472],{"emptyLinePlaceholder":125},[76,48011,48012],{"class":78,"line":1700},[76,48013,32012],{"class":82},[76,48015,48016,48018,48020],{"class":78,"line":1714},[76,48017,32017],{"class":89},[76,48019,32020],{"class":2035},[76,48021,32023],{"class":93},[76,48023,48024],{"class":78,"line":1719},[76,48025,48026],{"class":82},"    # 导入自己的数据集，并进行数据处理\n",[76,48028,48029],{"class":78,"line":1725},[76,48030,48031],{"class":82},"    # 定义数据集的路径\n",[76,48033,48034,48037,48039,48041,48043,48045,48049],{"class":78,"line":1746},[76,48035,48036],{"class":250},"    ROOT_PATH",[76,48038,247],{"class":89},[76,48040,869],{"class":89},[76,48042,452],{"class":305},[76,48044,757],{"class":250},[76,48046,48048],{"class":48047},"sA_wV","\u002Fdata\u002Ftrain",[76,48050,25206],{"class":305},[76,48052,48053],{"class":78,"line":1751},[76,48054,2472],{"emptyLinePlaceholder":125},[76,48056,48057],{"class":78,"line":1765},[76,48058,48059],{"class":82},"    # 定义归一化方法\n",[76,48061,48062],{"class":78,"line":1770},[76,48063,48064],{"class":82},"    # 这里需要先计算一下数据集的均值和方差\n",[76,48066,48067],{"class":78,"line":1799},[76,48068,48069],{"class":82},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[76,48071,48072],{"class":78,"line":1804},[76,48073,48074],{"class":82},"    # 第一个参数是均值，第二个参数是方差\n",[76,48076,48077,48080,48082,48085,48088,48090,48093,48095,48098,48101,48104,48106,48109,48111,48114],{"class":78,"line":1821},[76,48078,48079],{"class":93},"    normalize",[76,48081,247],{"class":89},[76,48083,48084],{"class":93},"transforms.Normalize([",[76,48086,48087],{"class":250},"0.162",[76,48089,578],{"class":93},[76,48091,48092],{"class":250},"0.151",[76,48094,578],{"class":93},[76,48096,48097],{"class":250},"0.138",[76,48099,48100],{"class":93},"],[",[76,48102,48103],{"class":250},"0.058",[76,48105,578],{"class":93},[76,48107,48108],{"class":250},"0.052",[76,48110,578],{"class":93},[76,48112,48113],{"class":250},"0.048",[76,48115,4729],{"class":93},[76,48117,48118],{"class":78,"line":1826},[76,48119,48120],{"class":82},"    # 定义数据集处理方法变量\n",[76,48122,48123,48126,48128],{"class":78,"line":1831},[76,48124,48125],{"class":93},"    train_transform",[76,48127,247],{"class":89},[76,48129,48130],{"class":93},"transforms.Compose([\n",[76,48132,48133],{"class":78,"line":1836},[76,48134,48135],{"class":82},"        # 调整图像大小为224*224\n",[76,48137,48138,48141,48143,48145,48147],{"class":78,"line":1850},[76,48139,48140],{"class":93},"        transforms.Resize((",[76,48142,31571],{"class":250},[76,48144,578],{"class":93},[76,48146,31571],{"class":250},[76,48148,42692],{"class":93},[76,48150,48151],{"class":78,"line":1855},[76,48152,48153],{"class":82},"        # 将图像转换为张量\n",[76,48155,48156],{"class":78,"line":2649},[76,48157,48158],{"class":93},"        transforms.ToTensor(),\n",[76,48160,48161],{"class":78,"line":2663},[76,48162,48163],{"class":93},"        normalize])\n",[76,48165,48166],{"class":78,"line":2671},[76,48167,48168],{"class":82},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[76,48170,48171],{"class":78,"line":2676},[76,48172,48173],{"class":82},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[76,48175,48176],{"class":78,"line":2682},[76,48177,2472],{"emptyLinePlaceholder":125},[76,48179,48180],{"class":78,"line":2688},[76,48181,48182],{"class":82},"    # 加载数据集\n",[76,48184,48185],{"class":78,"line":2693},[76,48186,48187],{"class":82},"    # 传入数据集路径与处理方法\n",[76,48189,48190,48192,48194,48197,48200,48202,48205,48207],{"class":78,"line":8020},[76,48191,32028],{"class":93},[76,48193,247],{"class":89},[76,48195,48196],{"class":93},"ImageFolder(",[76,48198,48199],{"class":250},"ROOT_PATH",[76,48201,578],{"class":93},[76,48203,48204],{"class":5288},"transform",[76,48206,247],{"class":89},[76,48208,48209],{"class":93},"train_transform)\n",[76,48211,48212],{"class":78,"line":8044},[76,48213,2472],{"emptyLinePlaceholder":125},[76,48215,48216,48218,48220,48222,48224,48226,48228,48230,48232,48234,48236,48238,48240,48242,48244],{"class":78,"line":8049},[76,48217,32080],{"class":93},[76,48219,247],{"class":89},[76,48221,32085],{"class":93},[76,48223,32088],{"class":250},[76,48225,202],{"class":93},[76,48227,32093],{"class":250},[76,48229,655],{"class":89},[76,48231,7430],{"class":250},[76,48233,32100],{"class":93},[76,48235,32088],{"class":250},[76,48237,202],{"class":93},[76,48239,32107],{"class":250},[76,48241,655],{"class":89},[76,48243,7430],{"class":250},[76,48245,32114],{"class":93},[76,48247,48248,48250,48252,48254,48256,48258],{"class":78,"line":8055},[76,48249,32119],{"class":93},[76,48251,247],{"class":89},[76,48253,32124],{"class":93},[76,48255,31607],{"class":5288},[76,48257,247],{"class":89},[76,48259,31612],{"class":93},[76,48261,48262,48264,48266,48268],{"class":78,"line":8082},[76,48263,32135],{"class":5288},[76,48265,247],{"class":89},[76,48267,398],{"class":250},[76,48269,31536],{"class":93},[76,48271,48272,48274,48276,48278],{"class":78,"line":8087},[76,48273,32147],{"class":5288},[76,48275,247],{"class":89},[76,48277,31546],{"class":250},[76,48279,31536],{"class":93},[76,48281,48282],{"class":78,"line":8093},[76,48283,32158],{"class":82},[76,48285,48286,48288,48290,48292],{"class":78,"line":8105},[76,48287,32163],{"class":5288},[76,48289,247],{"class":89},[76,48291,595],{"class":250},[76,48293,208],{"class":93},[76,48295,48296,48298,48300,48302,48304,48306],{"class":78,"line":8117},[76,48297,32174],{"class":93},[76,48299,247],{"class":89},[76,48301,31604],{"class":93},[76,48303,31607],{"class":5288},[76,48305,247],{"class":89},[76,48307,32185],{"class":93},[76,48309,48310,48312,48314,48316],{"class":78,"line":8129},[76,48311,32190],{"class":5288},[76,48313,247],{"class":89},[76,48315,398],{"class":250},[76,48317,31536],{"class":93},[76,48319,48320,48322,48324,48326],{"class":78,"line":9788},[76,48321,32201],{"class":5288},[76,48323,247],{"class":89},[76,48325,31546],{"class":250},[76,48327,31536],{"class":93},[76,48329,48330,48332,48334,48336],{"class":78,"line":9813},[76,48331,32212],{"class":5288},[76,48333,247],{"class":89},[76,48335,595],{"class":250},[76,48337,208],{"class":93},[76,48339,48340,48342],{"class":78,"line":9836},[76,48341,4162],{"class":89},[76,48343,32225],{"class":93},[76,48345,48346],{"class":78,"line":9860},[76,48347,2472],{"emptyLinePlaceholder":125},[76,48349,48350],{"class":78,"line":9865},[76,48351,32234],{"class":82},[76,48353,48354],{"class":78,"line":9870},[76,48355,32239],{"class":82},[76,48357,48358],{"class":78,"line":9875},[76,48359,2472],{"emptyLinePlaceholder":125},[76,48361,48362],{"class":78,"line":9884},[76,48363,32248],{"class":82},[76,48365,48366,48368,48370],{"class":78,"line":9889},[76,48367,32017],{"class":89},[76,48369,32255],{"class":2035},[76,48371,32258],{"class":93},[76,48373,48374,48376,48378,48380,48382,48384,48386,48388,48390],{"class":78,"line":9895},[76,48375,31307],{"class":93},[76,48377,247],{"class":89},[76,48379,30521],{"class":93},[76,48381,31314],{"class":305},[76,48383,1776],{"class":89},[76,48385,31319],{"class":93},[76,48387,1773],{"class":89},[76,48389,32277],{"class":305},[76,48391,208],{"class":93},[76,48393,48394],{"class":78,"line":9916},[76,48395,2472],{"emptyLinePlaceholder":125},[76,48397,48398],{"class":78,"line":9922},[76,48399,32292],{"class":82},[76,48401,48402],{"class":78,"line":9936},[76,48403,32297],{"class":82},[76,48405,48406],{"class":78,"line":9942},[76,48407,32302],{"class":82},[76,48409,48410,48412,48414,48416,48418,48420,48422],{"class":78,"line":9969},[76,48411,32307],{"class":93},[76,48413,247],{"class":89},[76,48415,32312],{"class":93},[76,48417,32315],{"class":5288},[76,48419,247],{"class":89},[76,48421,32320],{"class":250},[76,48423,208],{"class":93},[76,48425,48426],{"class":78,"line":9978},[76,48427,2472],{"emptyLinePlaceholder":125},[76,48429,48430],{"class":78,"line":9984},[76,48431,32331],{"class":82},[76,48433,48434,48436,48438],{"class":78,"line":9992},[76,48435,32336],{"class":93},[76,48437,247],{"class":89},[76,48439,32341],{"class":93},[76,48441,48442],{"class":78,"line":9997},[76,48443,2472],{"emptyLinePlaceholder":125},[76,48445,48446],{"class":78,"line":16676},[76,48447,32350],{"class":82},[76,48449,48450,48452,48454],{"class":78,"line":16682},[76,48451,31359],{"class":93},[76,48453,247],{"class":89},[76,48455,32359],{"class":93},[76,48457,48458],{"class":78,"line":16705},[76,48459,32364],{"class":82},[76,48461,48462],{"class":78,"line":16711},[76,48463,32369],{"class":82},[76,48465,48466],{"class":78,"line":16734},[76,48467,32374],{"class":82},[76,48469,48470,48472,48474],{"class":78,"line":16748},[76,48471,32379],{"class":93},[76,48473,247],{"class":89},[76,48475,32384],{"class":93},[76,48477,48478],{"class":78,"line":16768},[76,48479,2472],{"emptyLinePlaceholder":125},[76,48481,48482],{"class":78,"line":16774},[76,48483,32397],{"class":82},[76,48485,48486],{"class":78,"line":16785},[76,48487,32402],{"class":82},[76,48489,48490,48492,48494],{"class":78,"line":16808},[76,48491,32407],{"class":93},[76,48493,247],{"class":89},[76,48495,32412],{"class":250},[76,48497,48498],{"class":78,"line":16830},[76,48499,32417],{"class":82},[76,48501,48502,48504,48506],{"class":78,"line":16835},[76,48503,32422],{"class":93},[76,48505,247],{"class":89},[76,48507,32427],{"class":93},[76,48509,48510],{"class":78,"line":16841},[76,48511,32432],{"class":82},[76,48513,48514,48516,48518],{"class":78,"line":16855},[76,48515,32437],{"class":93},[76,48517,247],{"class":89},[76,48519,32427],{"class":93},[76,48521,48522],{"class":78,"line":16868},[76,48523,32446],{"class":82},[76,48525,48526,48528,48530],{"class":78,"line":16873},[76,48527,32451],{"class":93},[76,48529,247],{"class":89},[76,48531,32427],{"class":93},[76,48533,48534],{"class":78,"line":16887},[76,48535,32460],{"class":82},[76,48537,48538,48540,48542],{"class":78,"line":16892},[76,48539,32465],{"class":93},[76,48541,247],{"class":89},[76,48543,32427],{"class":93},[76,48545,48546],{"class":78,"line":16898},[76,48547,2472],{"emptyLinePlaceholder":125},[76,48549,48550],{"class":78,"line":16903},[76,48551,32478],{"class":82},[76,48553,48554,48556,48558],{"class":78,"line":16917},[76,48555,32483],{"class":93},[76,48557,247],{"class":89},[76,48559,32488],{"class":93},[76,48561,48562],{"class":78,"line":16922},[76,48563,2472],{"emptyLinePlaceholder":125},[76,48565,48566],{"class":78,"line":16927},[76,48567,32501],{"class":82},[76,48569,48570,48572,48574,48576,48578],{"class":78,"line":16941},[76,48571,3273],{"class":89},[76,48573,32508],{"class":93},[76,48575,26116],{"class":89},[76,48577,32513],{"class":250},[76,48579,32516],{"class":93},[76,48581,48582,48584,48586,48588,48590,48592,48594,48596,48598,48600,48602],{"class":78,"line":16953},[76,48583,32521],{"class":250},[76,48585,202],{"class":93},[76,48587,32526],{"class":305},[76,48589,32529],{"class":250},[76,48591,783],{"class":305},[76,48593,32529],{"class":250},[76,48595,452],{"class":305},[76,48597,32538],{"class":93},[76,48599,112],{"class":89},[76,48601,418],{"class":250},[76,48603,30567],{"class":93},[76,48605,48606,48608,48610,48612,48614,48616],{"class":78,"line":16958},[76,48607,32521],{"class":250},[76,48609,202],{"class":93},[76,48611,32553],{"class":305},[76,48613,655],{"class":89},[76,48615,646],{"class":250},[76,48617,208],{"class":93},[76,48619,48620],{"class":78,"line":16971},[76,48621,2472],{"emptyLinePlaceholder":125},[76,48623,48624],{"class":78,"line":16976},[76,48625,32568],{"class":82},[76,48627,48628],{"class":78,"line":16981},[76,48629,32573],{"class":82},[76,48631,48632,48634,48636],{"class":78,"line":16986},[76,48633,32578],{"class":93},[76,48635,247],{"class":89},[76,48637,32412],{"class":250},[76,48639,48640],{"class":78,"line":16999},[76,48641,32587],{"class":82},[76,48643,48644,48646,48648],{"class":78,"line":17004},[76,48645,32592],{"class":93},[76,48647,247],{"class":89},[76,48649,3157],{"class":250},[76,48651,48652],{"class":78,"line":32703},[76,48653,32601],{"class":82},[76,48655,48656,48658,48660],{"class":78,"line":32709},[76,48657,32606],{"class":93},[76,48659,247],{"class":89},[76,48661,32412],{"class":250},[76,48663,48664],{"class":78,"line":32715},[76,48665,32615],{"class":82},[76,48667,48668,48670,48672],{"class":78,"line":32721},[76,48669,32620],{"class":93},[76,48671,247],{"class":89},[76,48673,3157],{"class":250},[76,48675,48676],{"class":78,"line":32727},[76,48677,32629],{"class":82},[76,48679,48680,48682,48684],{"class":78,"line":32738},[76,48681,32634],{"class":93},[76,48683,247],{"class":89},[76,48685,3157],{"class":250},[76,48687,48688],{"class":78,"line":32744},[76,48689,32643],{"class":82},[76,48691,48692,48694,48696],{"class":78,"line":32764},[76,48693,32648],{"class":93},[76,48695,247],{"class":89},[76,48697,3157],{"class":250},[76,48699,48700],{"class":78,"line":32770},[76,48701,32657],{"class":82},[76,48703,48704,48706,48708,48710,48712],{"class":78,"line":32781},[76,48705,3475],{"class":89},[76,48707,31671],{"class":93},[76,48709,26116],{"class":89},[76,48711,31676],{"class":250},[76,48713,32670],{"class":93},[76,48715,48716],{"class":78,"line":32787},[76,48717,32675],{"class":82},[76,48719,48720,48722,48724],{"class":78,"line":32793},[76,48721,32680],{"class":93},[76,48723,247],{"class":89},[76,48725,32685],{"class":93},[76,48727,48728],{"class":78,"line":32799},[76,48729,32690],{"class":82},[76,48731,48732,48734,48736],{"class":78,"line":32805},[76,48733,32695],{"class":93},[76,48735,247],{"class":89},[76,48737,32700],{"class":93},[76,48739,48740],{"class":78,"line":32811},[76,48741,32706],{"class":82},[76,48743,48744],{"class":78,"line":32817},[76,48745,32712],{"class":93},[76,48747,48748],{"class":78,"line":32823},[76,48749,32718],{"class":82},[76,48751,48752],{"class":78,"line":32843},[76,48753,32724],{"class":82},[76,48755,48756,48758,48760],{"class":78,"line":32849},[76,48757,32730],{"class":93},[76,48759,247],{"class":89},[76,48761,32735],{"class":93},[76,48763,48764],{"class":78,"line":32865},[76,48765,32741],{"class":82},[76,48767,48768,48770,48772,48774,48776,48778,48780],{"class":78,"line":32871},[76,48769,32747],{"class":93},[76,48771,247],{"class":89},[76,48773,32752],{"class":93},[76,48775,32755],{"class":5288},[76,48777,247],{"class":89},[76,48779,418],{"class":250},[76,48781,208],{"class":93},[76,48783,48784],{"class":78,"line":32885},[76,48785,32767],{"class":82},[76,48787,48788,48790,48792],{"class":78,"line":32891},[76,48789,32773],{"class":93},[76,48791,247],{"class":89},[76,48793,32778],{"class":93},[76,48795,48796],{"class":78,"line":32906},[76,48797,32784],{"class":82},[76,48799,48800],{"class":78,"line":32912},[76,48801,32790],{"class":93},[76,48803,48804],{"class":78,"line":32921},[76,48805,32796],{"class":82},[76,48807,48808],{"class":78,"line":32927},[76,48809,32802],{"class":93},[76,48811,48812],{"class":78,"line":32936},[76,48813,32808],{"class":82},[76,48815,48816],{"class":78,"line":32942},[76,48817,32814],{"class":93},[76,48819,48820],{"class":78,"line":32948},[76,48821,32820],{"class":82},[76,48823,48824,48826,48828,48830,48832,48834,48836],{"class":78,"line":32957},[76,48825,32826],{"class":93},[76,48827,9549],{"class":89},[76,48829,32831],{"class":93},[76,48831,655],{"class":89},[76,48833,32836],{"class":93},[76,48835,392],{"class":250},[76,48837,208],{"class":93},[76,48839,48840],{"class":78,"line":32963},[76,48841,32846],{"class":82},[76,48843,48844,48846,48848,48850,48852],{"class":78,"line":32974},[76,48845,32852],{"class":93},[76,48847,9549],{"class":89},[76,48849,32857],{"class":93},[76,48851,3021],{"class":89},[76,48853,32862],{"class":93},[76,48855,48856],{"class":78,"line":32980},[76,48857,32868],{"class":82},[76,48859,48860,48862,48864,48866,48868],{"class":78,"line":32999},[76,48861,32874],{"class":93},[76,48863,9549],{"class":89},[76,48865,32836],{"class":93},[76,48867,392],{"class":250},[76,48869,208],{"class":93},[76,48871,48872],{"class":78,"line":33005},[76,48873,32888],{"class":82},[76,48875,48876,48878,48880,48882,48884],{"class":78,"line":33016},[76,48877,3475],{"class":89},[76,48879,32896],{"class":93},[76,48881,26116],{"class":89},[76,48883,31676],{"class":250},[76,48885,32903],{"class":93},[76,48887,48888],{"class":78,"line":33022},[76,48889,32909],{"class":82},[76,48891,48892,48894,48896],{"class":78,"line":33042},[76,48893,32680],{"class":93},[76,48895,247],{"class":89},[76,48897,32685],{"class":93},[76,48899,48900],{"class":78,"line":33058},[76,48901,32924],{"class":82},[76,48903,48904,48906,48908],{"class":78,"line":33064},[76,48905,32695],{"class":93},[76,48907,247],{"class":89},[76,48909,32700],{"class":93},[76,48911,48912],{"class":78,"line":33078},[76,48913,32939],{"class":82},[76,48915,48916],{"class":78,"line":33084},[76,48917,32945],{"class":93},[76,48919,48920],{"class":78,"line":33090},[76,48921,36426],{"class":82},[76,48923,48924,48926],{"class":78,"line":33101},[76,48925,32951],{"class":89},[76,48927,32954],{"class":93},[76,48929,48930],{"class":78,"line":33107},[76,48931,32960],{"class":82},[76,48933,48934,48936,48938],{"class":78,"line":33113},[76,48935,36441],{"class":93},[76,48937,247],{"class":89},[76,48939,32735],{"class":93},[76,48941,48942],{"class":78,"line":33123},[76,48943,32977],{"class":82},[76,48945,48946,48948,48950,48952,48954,48956,48958],{"class":78,"line":33129},[76,48947,36454],{"class":93},[76,48949,247],{"class":89},[76,48951,32752],{"class":93},[76,48953,32755],{"class":5288},[76,48955,247],{"class":89},[76,48957,418],{"class":250},[76,48959,208],{"class":93},[76,48961,48962],{"class":78,"line":33140},[76,48963,33002],{"class":82},[76,48965,48966,48968,48970],{"class":78,"line":33146},[76,48967,36475],{"class":93},[76,48969,247],{"class":89},[76,48971,32778],{"class":93},[76,48973,48974],{"class":78,"line":33156},[76,48975,33019],{"class":82},[76,48977,48978,48980,48982,48984,48986,48988,48990],{"class":78,"line":33161},[76,48979,36488],{"class":93},[76,48981,9549],{"class":89},[76,48983,36493],{"class":93},[76,48985,655],{"class":89},[76,48987,32836],{"class":93},[76,48989,392],{"class":250},[76,48991,208],{"class":93},[76,48993,48994,48996,48998,49000,49002],{"class":78,"line":33167},[76,48995,36506],{"class":93},[76,48997,9549],{"class":89},[76,48999,32857],{"class":93},[76,49001,3021],{"class":89},[76,49003,32862],{"class":93},[76,49005,49006],{"class":78,"line":33216},[76,49007,36519],{"class":82},[76,49009,49010,49012,49014,49016,49018],{"class":78,"line":33263},[76,49011,36524],{"class":93},[76,49013,9549],{"class":89},[76,49015,32836],{"class":93},[76,49017,392],{"class":250},[76,49019,208],{"class":93},[76,49021,49022],{"class":78,"line":33268},[76,49023,33081],{"class":82},[76,49025,49026],{"class":78,"line":33274},[76,49027,33087],{"class":82},[76,49029,49030,49032,49034],{"class":78,"line":33293},[76,49031,33093],{"class":93},[76,49033,783],{"class":89},[76,49035,33098],{"class":93},[76,49037,49038],{"class":78,"line":33299},[76,49039,33104],{"class":82},[76,49041,49042],{"class":78,"line":33319},[76,49043,33110],{"class":82},[76,49045,49046,49048,49050],{"class":78,"line":33325},[76,49047,33116],{"class":93},[76,49049,783],{"class":89},[76,49051,33098],{"class":93},[76,49053,49054],{"class":78,"line":33331},[76,49055,33126],{"class":82},[76,49057,49058,49060,49062],{"class":78,"line":33341},[76,49059,33132],{"class":93},[76,49061,783],{"class":89},[76,49063,33137],{"class":93},[76,49065,49066],{"class":78,"line":33346},[76,49067,33143],{"class":82},[76,49069,49070,49072,49074],{"class":78,"line":33352},[76,49071,33149],{"class":93},[76,49073,783],{"class":89},[76,49075,33137],{"class":93},[76,49077,49078],{"class":78,"line":33368},[76,49079,2472],{"emptyLinePlaceholder":125},[76,49081,49082],{"class":78,"line":33413},[76,49083,33164],{"class":82},[76,49085,49086,49088,49090,49092,49094,49096,49098,49100,49102,49104,49106,49108,49110,49112,49114,49116,49118,49120,49122,49124],{"class":78,"line":33419},[76,49087,32521],{"class":250},[76,49089,202],{"class":93},[76,49091,3664],{"class":305},[76,49093,32529],{"class":250},[76,49095,33178],{"class":305},[76,49097,1095],{"class":250},[76,49099,33183],{"class":89},[76,49101,1145],{"class":250},[76,49103,33188],{"class":305},[76,49105,1095],{"class":250},[76,49107,33183],{"class":89},[76,49109,1145],{"class":250},[76,49111,3664],{"class":305},[76,49113,33199],{"class":93},[76,49115,112],{"class":89},[76,49117,418],{"class":250},[76,49119,33206],{"class":93},[76,49121,112],{"class":89},[76,49123,418],{"class":250},[76,49125,33213],{"class":93},[76,49127,49128,49130,49132,49134,49136,49138,49140,49142,49144,49146,49148,49150,49152,49154,49156,49158,49160,49162,49164,49166],{"class":78,"line":33425},[76,49129,32521],{"class":250},[76,49131,202],{"class":93},[76,49133,3664],{"class":305},[76,49135,32529],{"class":250},[76,49137,33227],{"class":305},[76,49139,1095],{"class":250},[76,49141,33183],{"class":89},[76,49143,1145],{"class":250},[76,49145,33236],{"class":305},[76,49147,1095],{"class":250},[76,49149,33183],{"class":89},[76,49151,1145],{"class":250},[76,49153,3664],{"class":305},[76,49155,33247],{"class":93},[76,49157,112],{"class":89},[76,49159,418],{"class":250},[76,49161,33254],{"class":93},[76,49163,112],{"class":89},[76,49165,418],{"class":250},[76,49167,33213],{"class":93},[76,49169,49170],{"class":78,"line":33431},[76,49171,2472],{"emptyLinePlaceholder":125},[76,49173,49174],{"class":78,"line":33442},[76,49175,33271],{"class":82},[76,49177,49178,49180,49182,49184,49186,49188,49190],{"class":78,"line":33448},[76,49179,2569],{"class":89},[76,49181,33279],{"class":93},[76,49183,112],{"class":89},[76,49185,418],{"class":250},[76,49187,1139],{"class":93},[76,49189,1159],{"class":89},[76,49191,33290],{"class":93},[76,49193,49194],{"class":78,"line":33454},[76,49195,33296],{"class":82},[76,49197,49198,49200,49202,49204,49206,49208,49210],{"class":78,"line":33460},[76,49199,33302],{"class":93},[76,49201,241],{"class":250},[76,49203,247],{"class":89},[76,49205,33309],{"class":93},[76,49207,112],{"class":89},[76,49209,418],{"class":250},[76,49211,33316],{"class":93},[76,49213,49214],{"class":78,"line":33478},[76,49215,33322],{"class":82},[76,49217,49218],{"class":78,"line":33492},[76,49219,33328],{"class":82},[76,49221,49222,49224,49226],{"class":78,"line":33501},[76,49223,33334],{"class":93},[76,49225,247],{"class":89},[76,49227,32384],{"class":93},[76,49229,49230],{"class":78,"line":33510},[76,49231,2472],{"emptyLinePlaceholder":125},[76,49233,49234],{"class":78,"line":33519},[76,49235,33349],{"class":82},[76,49237,49238,49240,49242,49244,49246],{"class":78,"line":33528},[76,49239,33355],{"class":93},[76,49241,247],{"class":89},[76,49243,33360],{"class":93},[76,49245,112],{"class":89},[76,49247,33365],{"class":93},[76,49249,49250,49252,49254,49256,49258,49260,49262,49264,49266,49268,49270,49272,49274,49276,49278,49280,49282,49284],{"class":78,"line":33534},[76,49251,32521],{"class":250},[76,49253,202],{"class":93},[76,49255,33375],{"class":305},[76,49257,1095],{"class":250},[76,49259,33380],{"class":89},[76,49261,1145],{"class":250},[76,49263,743],{"class":305},[76,49265,1095],{"class":250},[76,49267,33380],{"class":89},[76,49269,1145],{"class":250},[76,49271,33393],{"class":305},[76,49273,33396],{"class":93},[76,49275,33399],{"class":89},[76,49277,1106],{"class":250},[76,49279,33404],{"class":93},[76,49281,106],{"class":89},[76,49283,1106],{"class":250},[76,49285,30567],{"class":93},[76,49287,49288],{"class":78,"line":33540},[76,49289,36803],{"class":82},[76,49291,49292],{"class":78,"line":33548},[76,49293,36808],{"class":82},[76,49295,49296,49298,49300],{"class":78,"line":33553},[76,49297,36813],{"class":93},[76,49299,33437],{"class":305},[76,49301,208],{"class":93},[76,49303,49304],{"class":78,"line":33559},[76,49305,33457],{"class":82},[76,49307,49308,49310,49312,49314,49316,49318],{"class":78,"line":33570},[76,49309,33463],{"class":93},[76,49311,247],{"class":89},[76,49313,33468],{"class":93},[76,49315,33471],{"class":5288},[76,49317,247],{"class":89},[76,49319,1618],{"class":93},[76,49321,49322,49324,49326,49328],{"class":78,"line":33576},[76,49323,33481],{"class":305},[76,49325,1058],{"class":93},[76,49327,33486],{"class":250},[76,49329,33489],{"class":93},[76,49331,49332,49334],{"class":78,"line":33596},[76,49333,33495],{"class":305},[76,49335,33498],{"class":93},[76,49337,49338,49340],{"class":78,"line":33602},[76,49339,33504],{"class":305},[76,49341,33507],{"class":93},[76,49343,49344,49346],{"class":78,"line":33608},[76,49345,33513],{"class":305},[76,49347,33516],{"class":93},[76,49349,49350,49352],{"class":78,"line":33614},[76,49351,33522],{"class":305},[76,49353,33525],{"class":93},[76,49355,49356],{"class":78,"line":33631},[76,49357,33531],{"class":93},[76,49359,49360],{"class":78,"line":33637},[76,49361,33537],{"class":82},[76,49363,49364,49366],{"class":78,"line":33643},[76,49365,4162],{"class":89},[76,49367,33545],{"class":93},[76,49369,49370],{"class":78,"line":33649},[76,49371,2472],{"emptyLinePlaceholder":125},[76,49373,49374],{"class":78,"line":33655},[76,49375,33556],{"class":82},[76,49377,49378,49380,49382],{"class":78,"line":33661},[76,49379,32017],{"class":89},[76,49381,33564],{"class":2035},[76,49383,33567],{"class":93},[76,49385,49386],{"class":78,"line":33688},[76,49387,33573],{"class":82},[76,49389,49390,49392,49394,49396,49398,49400,49402,49404],{"class":78,"line":33712},[76,49391,33579],{"class":93},[76,49393,31763],{"class":5288},[76,49395,247],{"class":89},[76,49397,202],{"class":93},[76,49399,698],{"class":250},[76,49401,578],{"class":93},[76,49403,494],{"class":250},[76,49405,30567],{"class":93},[76,49407,49408],{"class":78,"line":33718},[76,49409,33599],{"class":82},[76,49411,49412],{"class":78,"line":33724},[76,49413,33605],{"class":82},[76,49415,49416],{"class":78,"line":33730},[76,49417,33611],{"class":82},[76,49419,49420,49422,49424,49426,49428,49430,49432],{"class":78,"line":33741},[76,49421,31797],{"class":93},[76,49423,418],{"class":250},[76,49425,578],{"class":93},[76,49427,278],{"class":250},[76,49429,578],{"class":93},[76,49431,418],{"class":250},[76,49433,208],{"class":93},[76,49435,49436],{"class":78,"line":33752},[76,49437,33634],{"class":82},[76,49439,49440],{"class":78,"line":33758},[76,49441,33640],{"class":82},[76,49443,49444],{"class":78,"line":33775},[76,49445,33646],{"class":82},[76,49447,49448],{"class":78,"line":33798},[76,49449,33652],{"class":82},[76,49451,49452],{"class":78,"line":33821},[76,49453,33658],{"class":82},[76,49455,49456,49458,49460,49462,49464,49466,49468,49470,49472],{"class":78,"line":33827},[76,49457,33664],{"class":93},[76,49459,33667],{"class":305},[76,49461,33670],{"class":93},[76,49463,33673],{"class":305},[76,49465,578],{"class":93},[76,49467,33678],{"class":5288},[76,49469,247],{"class":89},[76,49471,33683],{"class":305},[76,49473,208],{"class":93},[76,49475,49476,49478,49480,49482,49484,49486,49488,49490,49492],{"class":78,"line":33832},[76,49477,33664],{"class":93},[76,49479,33667],{"class":305},[76,49481,33695],{"class":93},[76,49483,33698],{"class":305},[76,49485,578],{"class":93},[76,49487,33678],{"class":5288},[76,49489,247],{"class":89},[76,49491,33707],{"class":305},[76,49493,208],{"class":93},[76,49495,49496],{"class":78,"line":33841},[76,49497,33715],{"class":82},[76,49499,49500],{"class":78,"line":33851},[76,49501,33721],{"class":93},[76,49503,49504],{"class":78,"line":33857},[76,49505,33727],{"class":82},[76,49507,49508,49510,49512],{"class":78,"line":33862},[76,49509,33733],{"class":93},[76,49511,33736],{"class":305},[76,49513,208],{"class":93},[76,49515,49516,49518,49520],{"class":78,"line":33868},[76,49517,33744],{"class":93},[76,49519,33747],{"class":305},[76,49521,208],{"class":93},[76,49523,49524],{"class":78,"line":33881},[76,49525,33755],{"class":82},[76,49527,49528,49530,49532,49534,49536,49538,49540],{"class":78,"line":33887},[76,49529,31797],{"class":93},[76,49531,418],{"class":250},[76,49533,578],{"class":93},[76,49535,278],{"class":250},[76,49537,578],{"class":93},[76,49539,278],{"class":250},[76,49541,208],{"class":93},[76,49543,49544,49546,49548,49550,49552,49554,49556,49558,49560],{"class":78,"line":33898},[76,49545,33664],{"class":93},[76,49547,33667],{"class":305},[76,49549,33782],{"class":93},[76,49551,33673],{"class":305},[76,49553,578],{"class":93},[76,49555,33678],{"class":5288},[76,49557,247],{"class":89},[76,49559,33793],{"class":305},[76,49561,208],{"class":93},[76,49563,49564,49566,49568,49570,49572,49574,49576,49578,49580],{"class":78,"line":33909},[76,49565,33664],{"class":93},[76,49567,33667],{"class":305},[76,49569,33805],{"class":93},[76,49571,33698],{"class":305},[76,49573,578],{"class":93},[76,49575,33678],{"class":5288},[76,49577,247],{"class":89},[76,49579,33816],{"class":305},[76,49581,208],{"class":93},[76,49583,49584],{"class":78,"line":33928},[76,49585,33824],{"class":82},[76,49587,49589],{"class":78,"line":49588},219,[76,49590,33721],{"class":93},[76,49592,49594,49596,49598],{"class":78,"line":49593},220,[76,49595,33733],{"class":93},[76,49597,33667],{"class":305},[76,49599,208],{"class":93},[76,49601,49603,49605,49607],{"class":78,"line":49602},221,[76,49604,33744],{"class":93},[76,49606,33846],{"class":305},[76,49608,208],{"class":93},[76,49610,49612],{"class":78,"line":49611},222,[76,49613,33854],{"class":93},[76,49615,49617],{"class":78,"line":49616},223,[76,49618,2472],{"emptyLinePlaceholder":125},[76,49620,49622],{"class":78,"line":49621},224,[76,49623,33865],{"class":82},[76,49625,49627,49629,49631,49633,49635],{"class":78,"line":49626},225,[76,49628,1603],{"class":89},[76,49630,31290],{"class":250},[76,49632,3021],{"class":89},[76,49634,31295],{"class":305},[76,49636,3811],{"class":93},[76,49638,49640],{"class":78,"line":49639},226,[76,49641,33884],{"class":82},[76,49643,49645,49647,49649],{"class":78,"line":49644},227,[76,49646,44616],{"class":93},[76,49648,247],{"class":89},[76,49650,44621],{"class":93},[76,49652,49654,49656,49658],{"class":78,"line":49653},228,[76,49655,33901],{"class":93},[76,49657,247],{"class":89},[76,49659,33906],{"class":93},[76,49661,49663,49665,49667,49669,49671,49673,49675],{"class":78,"line":49662},229,[76,49664,33463],{"class":93},[76,49666,247],{"class":89},[76,49668,44638],{"class":93},[76,49670,33919],{"class":5288},[76,49672,247],{"class":89},[76,49674,1106],{"class":250},[76,49676,208],{"class":93},[76,49678,49680],{"class":78,"line":49679},230,[76,49681,33931],{"class":93},[22070,49683,49685],{"id":49684},"_242测试代码","2.4.2.测试代码",[14,49687,49688],{},"使用测试集进行测试与推理",[67,49690,49692],{"className":69,"code":49691,"language":71,"meta":58,"style":58},"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",[73,49693,49694,49700,49710,49720,49731,49741,49745,49749,49757,49762,49766,49783,49787,49791,49795,49799,49803,49835,49839,49847,49851,49863,49867,49871,49875,49879,49883,49887,49891,49895,49913,49927,49931,49941,49951,49961,49967,49971,49975,49983,49987,50003,50011,50015,50019,50027,50035,50039,50043,50047,50051,50057,50061,50071,50079,50087,50091,50095,50099,50107,50111,50127,50131,50135,50139,50151,50155,50167,50171,50175,50187,50191,50201,50205,50209,50221,50225,50233,50237,50241,50249,50253,50261,50265,50269,50273,50277,50281,50297,50305,50309,50313,50331,50337,50341,50351,50359,50367,50371,50375,50379,50383,50391,50395,50411,50415,50423,50431],{"__ignoreMap":58},[76,49695,49696,49698],{"class":78,"line":79},[76,49697,90],{"class":89},[76,49699,30465],{"class":93},[76,49701,49702,49704,49706,49708],{"class":78,"line":86},[76,49703,90],{"class":89},[76,49705,31485],{"class":93},[76,49707,31453],{"class":89},[76,49709,31490],{"class":93},[76,49711,49712,49714,49716,49718],{"class":78,"line":97},[76,49713,30807],{"class":89},[76,49715,31468],{"class":93},[76,49717,90],{"class":89},[76,49719,31473],{"class":93},[76,49721,49722,49724,49726,49728],{"class":78,"line":103},[76,49723,30807],{"class":89},[76,49725,31438],{"class":93},[76,49727,90],{"class":89},[76,49729,49730],{"class":93}," ImageFolder\n",[76,49732,49733,49735,49737,49739],{"class":78,"line":1273},[76,49734,30807],{"class":89},[76,49736,31984],{"class":93},[76,49738,90],{"class":89},[76,49740,44710],{"class":93},[76,49742,49743],{"class":78,"line":1287},[76,49744,2472],{"emptyLinePlaceholder":125},[76,49746,49747],{"class":78,"line":1293},[76,49748,34021],{"class":82},[76,49750,49751,49753,49755],{"class":78,"line":1384},[76,49752,32017],{"class":89},[76,49754,34028],{"class":2035},[76,49756,32023],{"class":93},[76,49758,49759],{"class":78,"line":1390},[76,49760,49761],{"class":82},"   # 导入自己的数据集，并进行数据处理\n",[76,49763,49764],{"class":78,"line":1402},[76,49765,48031],{"class":82},[76,49767,49768,49770,49772,49774,49776,49778,49781],{"class":78,"line":1684},[76,49769,48036],{"class":250},[76,49771,247],{"class":89},[76,49773,869],{"class":89},[76,49775,452],{"class":305},[76,49777,757],{"class":250},[76,49779,49780],{"class":48047},"\u002Fdata\u002Ftest",[76,49782,25206],{"class":305},[76,49784,49785],{"class":78,"line":1689},[76,49786,2472],{"emptyLinePlaceholder":125},[76,49788,49789],{"class":78,"line":1695},[76,49790,48059],{"class":82},[76,49792,49793],{"class":78,"line":1700},[76,49794,48064],{"class":82},[76,49796,49797],{"class":78,"line":1714},[76,49798,48069],{"class":82},[76,49800,49801],{"class":78,"line":1719},[76,49802,48074],{"class":82},[76,49804,49805,49807,49809,49811,49813,49815,49817,49819,49821,49823,49825,49827,49829,49831,49833],{"class":78,"line":1725},[76,49806,48079],{"class":93},[76,49808,247],{"class":89},[76,49810,48084],{"class":93},[76,49812,48087],{"class":250},[76,49814,578],{"class":93},[76,49816,48092],{"class":250},[76,49818,578],{"class":93},[76,49820,48097],{"class":250},[76,49822,48100],{"class":93},[76,49824,48103],{"class":250},[76,49826,578],{"class":93},[76,49828,48108],{"class":250},[76,49830,578],{"class":93},[76,49832,48113],{"class":250},[76,49834,4729],{"class":93},[76,49836,49837],{"class":78,"line":1746},[76,49838,48120],{"class":82},[76,49840,49841,49843,49845],{"class":78,"line":1751},[76,49842,48125],{"class":93},[76,49844,247],{"class":89},[76,49846,48130],{"class":93},[76,49848,49849],{"class":78,"line":1765},[76,49850,48135],{"class":82},[76,49852,49853,49855,49857,49859,49861],{"class":78,"line":1770},[76,49854,48140],{"class":93},[76,49856,31571],{"class":250},[76,49858,578],{"class":93},[76,49860,31571],{"class":250},[76,49862,42692],{"class":93},[76,49864,49865],{"class":78,"line":1799},[76,49866,48153],{"class":82},[76,49868,49869],{"class":78,"line":1804},[76,49870,48158],{"class":93},[76,49872,49873],{"class":78,"line":1821},[76,49874,48163],{"class":93},[76,49876,49877],{"class":78,"line":1826},[76,49878,48168],{"class":82},[76,49880,49881],{"class":78,"line":1831},[76,49882,48173],{"class":82},[76,49884,49885],{"class":78,"line":1836},[76,49886,2472],{"emptyLinePlaceholder":125},[76,49888,49889],{"class":78,"line":1850},[76,49890,48182],{"class":82},[76,49892,49893],{"class":78,"line":1855},[76,49894,48187],{"class":82},[76,49896,49897,49899,49901,49903,49905,49907,49909,49911],{"class":78,"line":2649},[76,49898,34035],{"class":93},[76,49900,247],{"class":89},[76,49902,48196],{"class":93},[76,49904,48199],{"class":250},[76,49906,578],{"class":93},[76,49908,48204],{"class":5288},[76,49910,247],{"class":89},[76,49912,48209],{"class":93},[76,49914,49915,49917,49919,49921,49923,49925],{"class":78,"line":2663},[76,49916,34092],{"class":93},[76,49918,247],{"class":89},[76,49920,31604],{"class":93},[76,49922,31607],{"class":5288},[76,49924,247],{"class":89},[76,49926,34103],{"class":93},[76,49928,49929],{"class":78,"line":2671},[76,49930,34108],{"class":82},[76,49932,49933,49935,49937,49939],{"class":78,"line":2676},[76,49934,34113],{"class":5288},[76,49936,247],{"class":89},[76,49938,418],{"class":250},[76,49940,31536],{"class":93},[76,49942,49943,49945,49947,49949],{"class":78,"line":2682},[76,49944,34124],{"class":5288},[76,49946,247],{"class":89},[76,49948,31546],{"class":250},[76,49950,31536],{"class":93},[76,49952,49953,49955,49957,49959],{"class":78,"line":2688},[76,49954,34135],{"class":5288},[76,49956,247],{"class":89},[76,49958,392],{"class":250},[76,49960,208],{"class":93},[76,49962,49963,49965],{"class":78,"line":2693},[76,49964,4162],{"class":89},[76,49966,34148],{"class":93},[76,49968,49969],{"class":78,"line":8020},[76,49970,2472],{"emptyLinePlaceholder":125},[76,49972,49973],{"class":78,"line":8044},[76,49974,34157],{"class":82},[76,49976,49977,49979,49981],{"class":78,"line":8049},[76,49978,32017],{"class":89},[76,49980,34164],{"class":2035},[76,49982,34167],{"class":93},[76,49984,49985],{"class":78,"line":8055},[76,49986,34172],{"class":82},[76,49988,49989,49991,49993,49995,49997,49999,50001],{"class":78,"line":8082},[76,49990,31307],{"class":93},[76,49992,247],{"class":89},[76,49994,31314],{"class":305},[76,49996,1776],{"class":89},[76,49998,31319],{"class":93},[76,50000,1773],{"class":89},[76,50002,34189],{"class":305},[76,50004,50005,50007,50009],{"class":78,"line":8087},[76,50006,31359],{"class":93},[76,50008,247],{"class":89},[76,50010,32359],{"class":93},[76,50012,50013],{"class":78,"line":8093},[76,50014,2472],{"emptyLinePlaceholder":125},[76,50016,50017],{"class":78,"line":8105},[76,50018,34206],{"class":82},[76,50020,50021,50023,50025],{"class":78,"line":8117},[76,50022,34211],{"class":93},[76,50024,247],{"class":89},[76,50026,32412],{"class":250},[76,50028,50029,50031,50033],{"class":78,"line":8129},[76,50030,34220],{"class":93},[76,50032,247],{"class":89},[76,50034,3157],{"class":250},[76,50036,50037],{"class":78,"line":9788},[76,50038,2472],{"emptyLinePlaceholder":125},[76,50040,50041],{"class":78,"line":9813},[76,50042,34233],{"class":82},[76,50044,50045],{"class":78,"line":9836},[76,50046,34238],{"class":82},[76,50048,50049],{"class":78,"line":9860},[76,50050,34243],{"class":82},[76,50052,50053,50055],{"class":78,"line":9865},[76,50054,34248],{"class":89},[76,50056,32954],{"class":93},[76,50058,50059],{"class":78,"line":9870},[76,50060,34255],{"class":82},[76,50062,50063,50065,50067,50069],{"class":78,"line":9875},[76,50064,3475],{"class":89},[76,50066,34262],{"class":93},[76,50068,26116],{"class":89},[76,50070,34267],{"class":93},[76,50072,50073,50075,50077],{"class":78,"line":9884},[76,50074,34272],{"class":93},[76,50076,247],{"class":89},[76,50078,34277],{"class":93},[76,50080,50081,50083,50085],{"class":78,"line":9889},[76,50082,34282],{"class":93},[76,50084,247],{"class":89},[76,50086,34287],{"class":93},[76,50088,50089],{"class":78,"line":9895},[76,50090,34292],{"class":82},[76,50092,50093],{"class":78,"line":9916},[76,50094,32945],{"class":93},[76,50096,50097],{"class":78,"line":9922},[76,50098,34301],{"class":82},[76,50100,50101,50103,50105],{"class":78,"line":9936},[76,50102,32730],{"class":93},[76,50104,247],{"class":89},[76,50106,34310],{"class":93},[76,50108,50109],{"class":78,"line":9942},[76,50110,34315],{"class":82},[76,50112,50113,50115,50117,50119,50121,50123,50125],{"class":78,"line":9969},[76,50114,32747],{"class":93},[76,50116,247],{"class":89},[76,50118,32752],{"class":93},[76,50120,32755],{"class":5288},[76,50122,247],{"class":89},[76,50124,418],{"class":250},[76,50126,208],{"class":93},[76,50128,50129],{"class":78,"line":9978},[76,50130,34336],{"class":82},[76,50132,50133],{"class":78,"line":9984},[76,50134,34341],{"class":82},[76,50136,50137],{"class":78,"line":9992},[76,50138,34346],{"class":82},[76,50140,50141,50143,50145,50147,50149],{"class":78,"line":9997},[76,50142,34351],{"class":93},[76,50144,9549],{"class":89},[76,50146,32857],{"class":93},[76,50148,3021],{"class":89},[76,50150,34360],{"class":93},[76,50152,50153],{"class":78,"line":16676},[76,50154,34365],{"class":82},[76,50156,50157,50159,50161,50163,50165],{"class":78,"line":16682},[76,50158,34370],{"class":93},[76,50160,9549],{"class":89},[76,50162,34375],{"class":93},[76,50164,392],{"class":250},[76,50166,208],{"class":93},[76,50168,50169],{"class":78,"line":16705},[76,50170,2472],{"emptyLinePlaceholder":125},[76,50172,50173],{"class":78,"line":16711},[76,50174,34388],{"class":82},[76,50176,50177,50179,50181,50183,50185],{"class":78,"line":16734},[76,50178,34393],{"class":93},[76,50180,247],{"class":89},[76,50182,34398],{"class":93},[76,50184,783],{"class":89},[76,50186,34403],{"class":93},[76,50188,50189],{"class":78,"line":16748},[76,50190,34408],{"class":82},[76,50192,50193,50195,50197,50199],{"class":78,"line":16768},[76,50194,32521],{"class":250},[76,50196,202],{"class":93},[76,50198,34417],{"class":305},[76,50200,34420],{"class":93},[76,50202,50203],{"class":78,"line":16774},[76,50204,2472],{"emptyLinePlaceholder":125},[76,50206,50207],{"class":78,"line":16785},[76,50208,34429],{"class":82},[76,50210,50211,50213,50215,50217,50219],{"class":78,"line":16808},[76,50212,1603],{"class":89},[76,50214,31290],{"class":250},[76,50216,3021],{"class":89},[76,50218,31295],{"class":305},[76,50220,3811],{"class":93},[76,50222,50223],{"class":78,"line":16830},[76,50224,34446],{"class":82},[76,50226,50227,50229,50231],{"class":78,"line":16835},[76,50228,31359],{"class":93},[76,50230,247],{"class":89},[76,50232,44621],{"class":93},[76,50234,50235],{"class":78,"line":16841},[76,50236,34459],{"class":82},[76,50238,50239],{"class":78,"line":16855},[76,50240,34464],{"class":82},[76,50242,50243,50245,50247],{"class":78,"line":16868},[76,50244,34469],{"class":93},[76,50246,34472],{"class":305},[76,50248,30567],{"class":93},[76,50250,50251],{"class":78,"line":16873},[76,50252,34479],{"class":82},[76,50254,50255,50257,50259],{"class":78,"line":16887},[76,50256,34092],{"class":93},[76,50258,247],{"class":89},[76,50260,34488],{"class":93},[76,50262,50263],{"class":78,"line":16892},[76,50264,34493],{"class":82},[76,50266,50267],{"class":78,"line":16898},[76,50268,34498],{"class":93},[76,50270,50271],{"class":78,"line":16903},[76,50272,2472],{"emptyLinePlaceholder":125},[76,50274,50275],{"class":78,"line":16917},[76,50276,34507],{"class":82},[76,50278,50279],{"class":78,"line":16922},[76,50280,34512],{"class":82},[76,50282,50283,50285,50287,50289,50291,50293,50295],{"class":78,"line":16927},[76,50284,31307],{"class":93},[76,50286,247],{"class":89},[76,50288,31314],{"class":305},[76,50290,1776],{"class":89},[76,50292,31319],{"class":93},[76,50294,1773],{"class":89},[76,50296,34189],{"class":305},[76,50298,50299,50301,50303],{"class":78,"line":16941},[76,50300,31359],{"class":93},[76,50302,247],{"class":89},[76,50304,32359],{"class":93},[76,50306,50307],{"class":78,"line":16953},[76,50308,34541],{"class":82},[76,50310,50311],{"class":78,"line":16958},[76,50312,34546],{"class":82},[76,50314,50315,50317,50319,50321,50324,50326,50329],{"class":78,"line":16971},[76,50316,34551],{"class":93},[76,50318,247],{"class":89},[76,50320,1089],{"class":93},[76,50322,50323],{"class":305},"'猫'",[76,50325,578],{"class":93},[76,50327,50328],{"class":305},"'狗'",[76,50330,33316],{"class":93},[76,50332,50333,50335],{"class":78,"line":16976},[76,50334,34248],{"class":89},[76,50336,32954],{"class":93},[76,50338,50339],{"class":78,"line":16981},[76,50340,34616],{"class":82},[76,50342,50343,50345,50347,50349],{"class":78,"line":16986},[76,50344,3475],{"class":89},[76,50346,34623],{"class":93},[76,50348,26116],{"class":89},[76,50350,34267],{"class":93},[76,50352,50353,50355,50357],{"class":78,"line":16999},[76,50354,32680],{"class":93},[76,50356,247],{"class":89},[76,50358,32685],{"class":93},[76,50360,50361,50363,50365],{"class":78,"line":17004},[76,50362,32695],{"class":93},[76,50364,247],{"class":89},[76,50366,32700],{"class":93},[76,50368,50369],{"class":78,"line":32703},[76,50370,2472],{"emptyLinePlaceholder":125},[76,50372,50373],{"class":78,"line":32709},[76,50374,34652],{"class":82},[76,50376,50377],{"class":78,"line":32715},[76,50378,32945],{"class":93},[76,50380,50381],{"class":78,"line":32721},[76,50382,34661],{"class":82},[76,50384,50385,50387,50389],{"class":78,"line":32727},[76,50386,32730],{"class":93},[76,50388,247],{"class":89},[76,50390,32735],{"class":93},[76,50392,50393],{"class":78,"line":32738},[76,50394,34674],{"class":82},[76,50396,50397,50399,50401,50403,50405,50407,50409],{"class":78,"line":32744},[76,50398,32747],{"class":93},[76,50400,247],{"class":89},[76,50402,32752],{"class":93},[76,50404,32755],{"class":5288},[76,50406,247],{"class":89},[76,50408,418],{"class":250},[76,50410,208],{"class":93},[76,50412,50413],{"class":78,"line":32764},[76,50414,34695],{"class":82},[76,50416,50417,50419,50421],{"class":78,"line":32770},[76,50418,34700],{"class":93},[76,50420,247],{"class":89},[76,50422,34705],{"class":93},[76,50424,50425,50427,50429],{"class":78,"line":32781},[76,50426,34710],{"class":93},[76,50428,247],{"class":89},[76,50430,34715],{"class":93},[76,50432,50433,50435,50437,50439,50441,50443,50445,50447],{"class":78,"line":32787},[76,50434,34720],{"class":250},[76,50436,202],{"class":93},[76,50438,34725],{"class":305},[76,50440,34728],{"class":93},[76,50442,34731],{"class":305},[76,50444,578],{"class":93},[76,50446,34736],{"class":305},[76,50448,34739],{"class":93},[117,50450,50451],{},"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":58,"searchDepth":86,"depth":86,"links":50453},[50454,50455,50456,50457],{"id":30661,"depth":97,"text":30662},{"id":37909,"depth":97,"text":37910},{"id":41342,"depth":97,"text":41343},{"id":45351,"depth":97,"text":45352},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30653,"description":122},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50464,"title":50465,"body":50466,"description":122,"extension":123,"meta":50473,"navigation":125,"path":50474,"seo":50475,"stem":50476,"__hash__":50477},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50467,"toc":50471},[50468],[10,50469,50465],{"id":50470},"_3yolo模型学习",{"title":58,"searchDepth":86,"depth":86,"links":50472},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50465,"description":122},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50479,"title":50480,"body":50481,"description":50488,"extension":123,"meta":50489,"navigation":125,"path":50491,"seo":50492,"stem":50493,"__hash__":50494},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50482,"toc":50486},[50483],[14,50484,50485],{},"yolo模型还未补充",{"title":58,"searchDepth":86,"depth":86,"links":50487},[],"深度学习学习",{"category":50490},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50480,"description":50488},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50496,"title":50497,"body":50498,"description":122,"extension":123,"meta":50523,"navigation":125,"path":50524,"seo":50525,"stem":50526,"__hash__":50527},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50499,"toc":50521},[50500,50503,50506,50511,50518],[10,50501,50497],{"id":50502},"_1工具",[14,50504,50505],{},"提示错误插件：有问题会提前报错",[14,50507,50508],{},[56,50509],{"alt":58,"src":50510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50512,50513],{},[439,50514,50517],{"href":50515,"rel":50516},"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",[23937],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50519,50520],{},"alt键加上下箭头可以实现语句的移动",{"title":58,"searchDepth":86,"depth":86,"links":50522},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50497,"description":122},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50529,"title":50530,"body":50531,"description":122,"extension":123,"meta":53395,"navigation":125,"path":53396,"seo":53397,"stem":53398,"__hash__":53399},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50532,"toc":53346},[50533,50536,50540,50544,50549,50552,50557,50561,50568,50573,50580,50585,50592,50597,50601,50606,50609,50613,50618,50622,50627,50630,50633,50636,50639,50642,50645,50648,50651,50656,50661,50666,50670,50673,50676,50680,50685,50688,50696,50701,50718,50726,50731,50736,50741,50746,50751,50754,50759,50764,50768,50777,50782,50787,50791,50796,50799,50803,50808,50816,50821,50826,50829,50834,50839,50844,50847,50850,50853,50858,50863,50866,50871,50874,50879,50882,50885,50888,50893,50896,50899,50914,50919,50924,50929,50932,50935,50938,50952,50955,50960,50965,50968,50971,50974,50977,50980,50983,50986,50990,50994,50999,51003,51006,51011,51016,51019,51024,51027,51031,51036,51039,51042,51045,51048,51051,51054,51057,51060,51063,51067,51072,51077,51082,51085,51088,51092,51097,51100,51104,51107,51110,51115,51118,51121,51125,51129,51132,51137,51142,51145,51174,51179,51184,51189,51194,51198,51203,51207,51212,51215,51219,51223,51228,51232,51237,51242,51246,51251,51254,51256,51259,51264,51268,51273,51277,51281,51286,51291,51296,51301,51305,51310,51315,51320,51323,51326,51331,51334,51339,51344,51349,51354,51358,52165,52169,52512,52517,52520,52523,52526,52529,52532,52535,52538,52541,52543,52546,52548,52551,52555,52560,52563,52566,52569,52573,52578,52583,52603,52606,52610,52615,52620,52637,52641,52670,52674,52696,52698,52737,52745,52751,52755,52758,52761,52766,52771,52774,52777,52780,52785,52790,52793,52796,52799,52802,52805,52808,52811,52814,52817,52820,52823,52825,52828,52831,52834,52837,52840,52843,52846,52849,52853,52858,52861,52866,52869,52872,52875,52878,52881,52884,52887,52889,52892,52895,52898,52901,52904,52907,52911,52914,52923,52926,52931,52934,52939,52942,52945,52948,52951,52954,52957,52960,52964,52968,52971,52974,52979,52984,52989,52993,52998,53003,53006,53009,53012,53015,53018,53023,53026,53031,53033,53038,53041,53045,53050,53053,53056,53061,53065,53068,53073,53076,53079,53108,53113,53116,53119,53122,53125,53128,53132,53135,53221,53225,53228,53233,53238,53245,53248,53251,53254,53257,53260,53265,53270,53273,53276,53279,53282,53285,53288,53291,53294,53297,53299,53302,53306,53311,53316,53321,53324,53329,53334,53337,53340,53343],[10,50534,50530],{"id":50535},"_2基础语法",[140,50537,50539],{"id":50538},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[169,50541,50543],{"id":50542},"_211-js组成","2.1.1 js组成",[152,50545,50546],{},[155,50547,50548],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50550,50551],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[152,50553,50554],{"start":86},[155,50555,50556],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[169,50558,50560],{"id":50559},"_212-js书写位置","2.1.2 js书写位置",[152,50562,50563],{},[155,50564,50565],{},[350,50566,50567],{},"内部 JavaScript",[14,50569,50570],{},[56,50571],{"alt":58,"src":50572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[152,50574,50575],{"start":86},[155,50576,50577],{},[350,50578,50579],{},"外部 JavaScript",[14,50581,50582],{},[56,50583],{"alt":58,"src":50584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[152,50586,50587],{"start":97},[155,50588,50589],{},[350,50590,50591],{},"内联 JavaScript",[14,50593,50594],{},[56,50595],{"alt":58,"src":50596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[169,50598,50600],{"id":50599},"_213-javascript注释","2.1.3 JavaScript注释",[14,50602,50603],{},[56,50604],{"alt":58,"src":50605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50607,50608],{},"alt+shift+a一定要记住！",[169,50610,50612],{"id":50611},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50614,50615],{},[56,50616],{"alt":58,"src":50617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[169,50619,50621],{"id":50620},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[152,50623,50624],{},[155,50625,50626],{},"输出语法：",[14,50628,50629],{},"①document.write('要出的内容')",[14,50631,50632],{},"向body内输出内容；",[14,50634,50635],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50637,50638],{},"②alert('要出的内容')",[14,50640,50641],{},"页面弹出警告对话框",[14,50643,50644],{},"③console.log('控制台打印')",[14,50646,50647],{},"控制台输出语法，程序员调试使用",[14,50649,50650],{},"输入log就行，自动生成：",[14,50652,50653],{},[56,50654],{"alt":58,"src":50655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[152,50657,50658],{"start":86},[155,50659,50660],{},"输入语法：",[14,50662,50663],{},[56,50664],{"alt":58,"src":50665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[169,50667,50669],{"id":50668},"_2116-字面量","21.1.6 字面量",[14,50671,50672],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50674,50675],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[140,50677,50679],{"id":50678},"_22-变量","2.2 变量",[152,50681,50682],{},[155,50683,50684],{},"变量声明",[14,50686,50687],{},"let 变量名",[1206,50689,50690,50693],{},[155,50691,50692],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[155,50694,50695],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[152,50697,50698],{"start":86},[155,50699,50700],{},"变量赋值",[67,50702,50706],{"className":50703,"code":50704,"language":50705,"meta":58,"style":58},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[73,50707,50708,50713],{"__ignoreMap":58},[76,50709,50710],{"class":78,"line":79},[76,50711,50712],{"class":93},"let age\n",[76,50714,50715],{"class":78,"line":86},[76,50716,50717],{"class":93},"age=18\n",[152,50719,50720,50723],{"start":97},[155,50721,50722],{},"连这些（变量的初始化）：let age=18",[155,50724,50725],{},"更新变量",[14,50727,50728],{},[56,50729],{"alt":58,"src":50730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[152,50732,50733],{"start":1273},[155,50734,50735],{},"声明多个变量",[14,50737,50738],{},[56,50739],{"alt":58,"src":50740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[152,50742,50743],{"start":1287},[155,50744,50745],{},"变量命名规则与规范",[14,50747,50748],{},[56,50749],{"alt":58,"src":50750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50752,50753],{},"遵守小驼峰！",[152,50755,50756],{"start":1293},[155,50757,50758],{},"变量拓展-let和var的区别",[14,50760,50761],{},[56,50762],{"alt":58,"src":50763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[140,50765,50767],{"id":50766},"_23-数组","2.3 数组",[67,50769,50771],{"className":50703,"code":50770,"language":50705,"meta":58,"style":58},"let arr = []\n",[73,50772,50773],{"__ignoreMap":58},[76,50774,50775],{"class":78,"line":79},[76,50776,50770],{"class":93},[14,50778,50779],{},[56,50780],{"alt":58,"src":50781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50783,50784],{},[56,50785],{"alt":58,"src":50786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[140,50788,50790],{"id":50789},"_24-常量","2.4 常量",[14,50792,50793],{},[56,50794],{"alt":58,"src":50795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50797,50798],{},"const — 类似于 let ，但是变量的值无法被修改",[140,50800,50802],{"id":50801},"_25-数据类型","2.5 数据类型",[14,50804,50805],{},[56,50806],{"alt":58,"src":50807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[152,50809,50810,50813],{},[155,50811,50812],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[155,50814,50815],{},"算数运算符：",[14,50817,50818],{},[56,50819],{"alt":58,"src":50820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[152,50822,50823],{"start":97},[155,50824,50825],{},"数字类型（Number）",[14,50827,50828],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50830,50831],{},[56,50832],{"alt":58,"src":50833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[152,50835,50836],{"start":103},[155,50837,50838],{},"字符串类型（string）",[14,50840,50841],{},[56,50842],{"alt":58,"src":50843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50845,50846],{},"反引号也是可以使用的",[14,50848,50849],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50851,50852],{},"例如：document.write(\"我今年\"+age+\"岁\")",[152,50854,50855],{"start":1273},[155,50856,50857],{},"模板字符串",[14,50859,50860],{},[56,50861],{"alt":58,"src":50862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50864,50865],{},"类似于python的字符串格式化",[152,50867,50868],{"start":1287},[155,50869,50870],{},"布尔类型",[14,50872,50873],{},"true 和 false",[152,50875,50876],{"start":1293},[155,50877,50878],{},"未定义类型（underfined）",[14,50880,50881],{},"表示没有赋值",[14,50883,50884],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50886,50887],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[152,50889,50890],{"start":1384},[155,50891,50892],{},"null（空类型）",[14,50894,50895],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50897,50898],{},"赋值了，但是内容为空",[67,50900,50902],{"className":50703,"code":50901,"language":50705,"meta":58,"style":58},"typeof null\n输出的是'object'，是一个对象数据类型\n",[73,50903,50904,50909],{"__ignoreMap":58},[76,50905,50906],{"class":78,"line":79},[76,50907,50908],{"class":93},"typeof null\n",[76,50910,50911],{"class":78,"line":86},[76,50912,50913],{"class":93},"输出的是'object'，是一个对象数据类型\n",[152,50915,50916],{"start":1390},[155,50917,50918],{},"控制台检测数据类型",[14,50920,50921],{},[56,50922],{"alt":58,"src":50923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[152,50925,50926],{"start":1402},[155,50927,50928],{},"类型转换",[14,50930,50931],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50933,50934],{},"转换方式：隐式转换和显示转换",[14,50936,50937],{},"①隐式转换",[1206,50939,50940,50943,50946,50949],{},[155,50941,50942],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[155,50944,50945],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[155,50947,50948],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[155,50950,50951],{},"任何数据和字符串相加结果都是字符串",[14,50953,50954],{},"②显示转换",[14,50956,50957],{},[56,50958],{"alt":58,"src":50959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50961,50962],{},[56,50963],{"alt":58,"src":50964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50966,50967],{},"在输入的时候要用好隐式转换，简单写起来",[14,50969,50970],{},"let num = +prompt(’请输入数字：‘)",[14,50972,50973],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50975,50976],{},"console.log(parseInt('12.333px'))",[14,50978,50979],{},"输出为：12",[14,50981,50982],{},"console.log(parseInt('a'a'a12.333px'))",[14,50984,50985],{},"输出：NaN",[140,50987,50989],{"id":50988},"_26-运算符","2.6 运算符",[169,50991,50993],{"id":50992},"_261-赋值运算符","2.6.1 赋值运算符",[14,50995,50996],{},[56,50997],{"alt":58,"src":50998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[169,51000,51002],{"id":51001},"_262-一元运算符","2.6.2 一元运算符",[14,51004,51005],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51007,51008],{},[56,51009],{"alt":58,"src":51010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51012,51013],{},[56,51014],{"alt":58,"src":51015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51017,51018],{},"两者的区别：",[14,51020,51021],{},[56,51022],{"alt":58,"src":51023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51025,51026],{},"前置先自加；后置后加，代码执行完之后再加",[169,51028,51030],{"id":51029},"_263-比较运算符","2.6.3 比较运算符",[14,51032,51033],{},[56,51034],{"alt":58,"src":51035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51037,51038],{},"比较运算符也有隐式转换",[14,51040,51041],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51043,51044],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51046,51047],{},"要使用三等，开发的时候",[14,51049,51050],{},"NaN不等于任何人，包括它自己",[14,51052,51053],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51055,51056],{},"7\u002F10=0.7",[14,51058,51059],{},"最后：0.5+0.2=0.7",[14,51061,51062],{},"字符串比较，比较的是字符对应的ASCII码",[169,51064,51066],{"id":51065},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51068,51069],{},[56,51070],{"alt":58,"src":51071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51073,51074],{},[56,51075],{"alt":58,"src":51076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51078,51079],{},[56,51080],{"alt":58,"src":51081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51083,51084],{},"上述题目选D",[14,51086,51087],{},"与真2假1；或真1假2",[169,51089,51091],{"id":51090},"_265-运算符优先级","2.6.5 运算符优先级",[14,51093,51094],{},[56,51095],{"alt":58,"src":51096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51098,51099],{},"先算逻辑与，后算逻辑或",[140,51101,51103],{"id":51102},"_27-语句","2.7 语句",[14,51105,51106],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51108,51109],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51111,51112],{},[56,51113],{"alt":58,"src":51114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51116,51117],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51119,51120],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[169,51122,51124],{"id":51123},"_271-分支语句","2.7.1 分支语句",[22070,51126,51128],{"id":51127},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51130,51131],{},"if语句单行简单的话，可以不写{}，写在一行就行",[152,51133,51134],{},[155,51135,51136],{},"单分支语句",[14,51138,51139],{},[56,51140],{"alt":58,"src":51141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51143,51144],{},"除了0，所有数字都为真",[67,51146,51148],{"className":50703,"code":51147,"language":50705,"meta":58,"style":58},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[73,51149,51150,51155,51160,51165,51169],{"__ignoreMap":58},[76,51151,51152],{"class":78,"line":79},[76,51153,51154],{"class":93},"if（0) {\n",[76,51156,51157],{"class":78,"line":86},[76,51158,51159],{"class":93},"    let a=1\n",[76,51161,51162],{"class":78,"line":97},[76,51163,51164],{"class":93},"    alert(typeof a)\n",[76,51166,51167],{"class":78,"line":103},[76,51168,1637],{"class":93},[76,51170,51171],{"class":78,"line":1273},[76,51172,51173],{"class":93},"不输出，括号为假\n",[152,51175,51176],{"start":86},[155,51177,51178],{},"双分支语句",[14,51180,51181],{},[56,51182],{"alt":58,"src":51183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[152,51185,51186],{"start":97},[155,51187,51188],{},"多分支语句",[14,51190,51191],{},[56,51192],{"alt":58,"src":51193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22070,51195,51197],{"id":51196},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51199,51200],{},[56,51201],{"alt":58,"src":51202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22070,51204,51206],{"id":51205},"_2713-switch语句","2.7.1.3 switch语句",[14,51208,51209],{},[56,51210],{"alt":58,"src":51211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51213,51214],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[169,51216,51218],{"id":51217},"_272-循环语句","2.7.2 循环语句",[22070,51220,51222],{"id":51221},"_2721-断点演示","2.7.2.1 断点演示",[14,51224,51225],{},[56,51226],{"alt":58,"src":51227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22070,51229,51231],{"id":51230},"_2722-while循环","2.7.2.2 while循环",[14,51233,51234],{},[56,51235],{"alt":58,"src":51236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51238,51239],{},[56,51240],{"alt":58,"src":51241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22070,51243,51245],{"id":51244},"_2723-for循环","2.7.2.3 for循环",[14,51247,51248],{},[56,51249],{"alt":58,"src":51250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51252,51253],{},"for(;;) {",[14,51255,1145],{},[14,51257,51258],{},"表示无限循环",[14,51260,51261],{},[56,51262],{"alt":58,"src":51263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22070,51265,51267],{"id":51266},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51269,51270],{},[56,51271],{"alt":58,"src":51272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[140,51274,51276],{"id":51275},"_28-数组","2.8 数组",[169,51278,51280],{"id":51279},"_281-基础认识","2.8.1 基础认识",[14,51282,51283],{},[56,51284],{"alt":58,"src":51285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51287,51288],{},[56,51289],{"alt":58,"src":51290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51292,51293],{},[56,51294],{"alt":58,"src":51295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51297,51298],{},[56,51299],{"alt":58,"src":51300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[169,51302,51304],{"id":51303},"_282-操作数组","2.8.2 操作数组",[14,51306,51307],{},[56,51308],{"alt":58,"src":51309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[152,51311,51312],{},[155,51313,51314],{},"添加元素",[14,51316,51317],{},[56,51318],{"alt":58,"src":51319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51321,51322],{},"console.log(arr.push('green'))",[14,51324,51325],{},"输出结果：为新数组的长度",[14,51327,51328],{},[56,51329],{"alt":58,"src":51330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51332,51333],{},"push用的非常多，一定要记住",[152,51335,51336],{},[155,51337,51338],{},"删除元素",[14,51340,51341],{},[56,51342],{"alt":58,"src":51343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51345,51346],{},[56,51347],{"alt":58,"src":51348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51350,51351],{},[56,51352],{"alt":58,"src":51353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[169,51355,51357],{"id":51356},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[67,51359,51361],{"className":50703,"code":51360,"language":50705,"meta":58,"style":58},"\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",[73,51362,51363,51378,51394,51398,51407,51425,51449,51471,51485,51493,51500,51512,51523,51527,51531,51538,51550,51565,51578,51597,51614,51629,51641,51653,51665,51669,51673,51684,51694,51706,51718,51730,51741,51745,51749,51761,51765,51779,51783,51787,51798,51812,51824,51838,51842,51851,51860,51864,51873,51877,51886,51891,51896,51909,51937,51942,51947,51972,51977,51981,51986,51991,52006,52010,52015,52045,52057,52073,52089,52103,52108,52115,52119,52124,52137,52145,52153,52157],{"__ignoreMap":58},[76,51364,51365,51368,51372,51375],{"class":78,"line":79},[76,51366,51367],{"class":93},"\u003C!",[76,51369,51371],{"class":51370},"s9eBZ","DOCTYPE",[76,51373,51374],{"class":2035}," html",[76,51376,51377],{"class":93},">\n",[76,51379,51380,51382,51384,51387,51389,51392],{"class":78,"line":86},[76,51381,1109],{"class":93},[76,51383,50705],{"class":51370},[76,51385,51386],{"class":2035}," lang",[76,51388,247],{"class":93},[76,51390,51391],{"class":305},"\"en\"",[76,51393,51377],{"class":93},[76,51395,51396],{"class":78,"line":97},[76,51397,2472],{"emptyLinePlaceholder":125},[76,51399,51400,51402,51405],{"class":78,"line":103},[76,51401,1109],{"class":93},[76,51403,51404],{"class":51370},"head",[76,51406,51377],{"class":93},[76,51408,51409,51412,51415,51418,51420,51423],{"class":78,"line":1273},[76,51410,51411],{"class":93},"    \u003C",[76,51413,51414],{"class":51370},"meta",[76,51416,51417],{"class":2035}," charset",[76,51419,247],{"class":93},[76,51421,51422],{"class":305},"\"UTF-8\"",[76,51424,51377],{"class":93},[76,51426,51427,51429,51431,51434,51436,51439,51442,51444,51447],{"class":78,"line":1287},[76,51428,51411],{"class":93},[76,51430,51414],{"class":51370},[76,51432,51433],{"class":2035}," http-equiv",[76,51435,247],{"class":93},[76,51437,51438],{"class":305},"\"X-UA-Compatible\"",[76,51440,51441],{"class":2035}," content",[76,51443,247],{"class":93},[76,51445,51446],{"class":305},"\"IE=edge\"",[76,51448,51377],{"class":93},[76,51450,51451,51453,51455,51457,51459,51462,51464,51466,51469],{"class":78,"line":1293},[76,51452,51411],{"class":93},[76,51454,51414],{"class":51370},[76,51456,14992],{"class":2035},[76,51458,247],{"class":93},[76,51460,51461],{"class":305},"\"viewport\"",[76,51463,51441],{"class":2035},[76,51465,247],{"class":93},[76,51467,51468],{"class":305},"\"width=device-width, initial-scale=1.0\"",[76,51470,51377],{"class":93},[76,51472,51473,51475,51478,51481,51483],{"class":78,"line":1384},[76,51474,51411],{"class":93},[76,51476,51477],{"class":51370},"title",[76,51479,51480],{"class":93},">Document\u003C\u002F",[76,51482,51477],{"class":51370},[76,51484,51377],{"class":93},[76,51486,51487,51489,51491],{"class":78,"line":1390},[76,51488,51411],{"class":93},[76,51490,117],{"class":51370},[76,51492,51377],{"class":93},[76,51494,51495,51498],{"class":78,"line":1402},[76,51496,51497],{"class":51370},"        *",[76,51499,15644],{"class":93},[76,51501,51502,51505,51508,51510],{"class":78,"line":1684},[76,51503,51504],{"class":250},"            margin",[76,51506,51507],{"class":93},": ",[76,51509,392],{"class":250},[76,51511,1363],{"class":93},[76,51513,51514,51517,51519,51521],{"class":78,"line":1689},[76,51515,51516],{"class":250},"            padding",[76,51518,51507],{"class":93},[76,51520,392],{"class":250},[76,51522,1363],{"class":93},[76,51524,51525],{"class":78,"line":1695},[76,51526,2601],{"class":93},[76,51528,51529],{"class":78,"line":1700},[76,51530,2472],{"emptyLinePlaceholder":125},[76,51532,51533,51536],{"class":78,"line":1714},[76,51534,51535],{"class":2035},"        .box",[76,51537,15644],{"class":93},[76,51539,51540,51543,51545,51548],{"class":78,"line":1719},[76,51541,51542],{"class":250},"            display",[76,51544,51507],{"class":93},[76,51546,51547],{"class":250},"flex",[76,51549,1363],{"class":93},[76,51551,51552,51555,51557,51560,51563],{"class":78,"line":1725},[76,51553,51554],{"class":250},"            width",[76,51556,51507],{"class":93},[76,51558,51559],{"class":250},"700",[76,51561,51562],{"class":89},"px",[76,51564,1363],{"class":93},[76,51566,51567,51570,51572,51574,51576],{"class":78,"line":1746},[76,51568,51569],{"class":250},"            height",[76,51571,51507],{"class":93},[76,51573,4045],{"class":250},[76,51575,51562],{"class":89},[76,51577,1363],{"class":93},[76,51579,51580,51583,51585,51587,51589,51592,51595],{"class":78,"line":1751},[76,51581,51582],{"class":250},"            border-left",[76,51584,51507],{"class":93},[76,51586,418],{"class":250},[76,51588,51562],{"class":89},[76,51590,51591],{"class":250}," solid",[76,51593,51594],{"class":250}," pink",[76,51596,1363],{"class":93},[76,51598,51599,51602,51604,51606,51608,51610,51612],{"class":78,"line":1765},[76,51600,51601],{"class":250},"            border-bottom",[76,51603,51507],{"class":93},[76,51605,418],{"class":250},[76,51607,51562],{"class":89},[76,51609,51591],{"class":250},[76,51611,51594],{"class":250},[76,51613,1363],{"class":93},[76,51615,51616,51618,51620,51622,51624,51627],{"class":78,"line":1770},[76,51617,51504],{"class":250},[76,51619,51507],{"class":93},[76,51621,855],{"class":250},[76,51623,51562],{"class":89},[76,51625,51626],{"class":250}," auto",[76,51628,1363],{"class":93},[76,51630,51631,51634,51636,51639],{"class":78,"line":1799},[76,51632,51633],{"class":250},"            justify-content",[76,51635,51507],{"class":93},[76,51637,51638],{"class":250},"space-around",[76,51640,1363],{"class":93},[76,51642,51643,51646,51648,51651],{"class":78,"line":1804},[76,51644,51645],{"class":250},"            align-items",[76,51647,51507],{"class":93},[76,51649,51650],{"class":250},"flex-end",[76,51652,1363],{"class":93},[76,51654,51655,51658,51660,51663],{"class":78,"line":1821},[76,51656,51657],{"class":250},"            text-align",[76,51659,51507],{"class":93},[76,51661,51662],{"class":250},"center",[76,51664,1363],{"class":93},[76,51666,51667],{"class":78,"line":1826},[76,51668,2601],{"class":93},[76,51670,51671],{"class":78,"line":1831},[76,51672,2472],{"emptyLinePlaceholder":125},[76,51674,51675,51677,51679,51682],{"class":78,"line":1836},[76,51676,51535],{"class":2035},[76,51678,1159],{"class":89},[76,51680,51681],{"class":51370},"div",[76,51683,15644],{"class":93},[76,51685,51686,51688,51690,51692],{"class":78,"line":1850},[76,51687,51542],{"class":250},[76,51689,51507],{"class":93},[76,51691,51547],{"class":250},[76,51693,1363],{"class":93},[76,51695,51696,51698,51700,51702,51704],{"class":78,"line":1855},[76,51697,51554],{"class":250},[76,51699,51507],{"class":93},[76,51701,855],{"class":250},[76,51703,51562],{"class":89},[76,51705,1363],{"class":93},[76,51707,51708,51711,51713,51716],{"class":78,"line":2649},[76,51709,51710],{"class":250},"            background-color",[76,51712,51507],{"class":93},[76,51714,51715],{"class":250},"pink",[76,51717,1363],{"class":93},[76,51719,51720,51723,51725,51728],{"class":78,"line":2663},[76,51721,51722],{"class":250},"            flex-direction",[76,51724,51507],{"class":93},[76,51726,51727],{"class":250},"column",[76,51729,1363],{"class":93},[76,51731,51732,51734,51736,51739],{"class":78,"line":2671},[76,51733,51633],{"class":250},[76,51735,51507],{"class":93},[76,51737,51738],{"class":250},"space-between",[76,51740,1363],{"class":93},[76,51742,51743],{"class":78,"line":2676},[76,51744,2601],{"class":93},[76,51746,51747],{"class":78,"line":2682},[76,51748,2472],{"emptyLinePlaceholder":125},[76,51750,51751,51753,51756,51759],{"class":78,"line":2688},[76,51752,51535],{"class":2035},[76,51754,51755],{"class":51370}," div",[76,51757,51758],{"class":51370}," span",[76,51760,15644],{"class":93},[76,51762,51763],{"class":78,"line":2693},[76,51764,2472],{"emptyLinePlaceholder":125},[76,51766,51767,51770,51772,51775,51777],{"class":78,"line":8020},[76,51768,51769],{"class":250},"            margin-top",[76,51771,51507],{"class":93},[76,51773,51774],{"class":250},"-20",[76,51776,51562],{"class":89},[76,51778,1363],{"class":93},[76,51780,51781],{"class":78,"line":8044},[76,51782,2601],{"class":93},[76,51784,51785],{"class":78,"line":8049},[76,51786,2472],{"emptyLinePlaceholder":125},[76,51788,51789,51791,51793,51796],{"class":78,"line":8055},[76,51790,51535],{"class":2035},[76,51792,51755],{"class":51370},[76,51794,51795],{"class":51370}," h4",[76,51797,15644],{"class":93},[76,51799,51800,51803,51805,51808,51810],{"class":78,"line":8082},[76,51801,51802],{"class":250},"            margin-bottom",[76,51804,51507],{"class":93},[76,51806,51807],{"class":250},"-35",[76,51809,51562],{"class":89},[76,51811,1363],{"class":93},[76,51813,51814,51816,51818,51820,51822],{"class":78,"line":8087},[76,51815,51554],{"class":250},[76,51817,51507],{"class":93},[76,51819,556],{"class":250},[76,51821,51562],{"class":89},[76,51823,1363],{"class":93},[76,51825,51826,51829,51831,51834,51836],{"class":78,"line":8093},[76,51827,51828],{"class":250},"            margin-left",[76,51830,51507],{"class":93},[76,51832,51833],{"class":250},"-10",[76,51835,51562],{"class":89},[76,51837,1363],{"class":93},[76,51839,51840],{"class":78,"line":8105},[76,51841,2601],{"class":93},[76,51843,51844,51847,51849],{"class":78,"line":8117},[76,51845,51846],{"class":93},"    \u003C\u002F",[76,51848,117],{"class":51370},[76,51850,51377],{"class":93},[76,51852,51853,51856,51858],{"class":78,"line":8129},[76,51854,51855],{"class":93},"\u003C\u002F",[76,51857,51404],{"class":51370},[76,51859,51377],{"class":93},[76,51861,51862],{"class":78,"line":9788},[76,51863,2472],{"emptyLinePlaceholder":125},[76,51865,51866,51868,51871],{"class":78,"line":9813},[76,51867,1109],{"class":93},[76,51869,51870],{"class":51370},"body",[76,51872,51377],{"class":93},[76,51874,51875],{"class":78,"line":9836},[76,51876,2472],{"emptyLinePlaceholder":125},[76,51878,51879,51881,51884],{"class":78,"line":9860},[76,51880,51411],{"class":93},[76,51882,51883],{"class":51370},"script",[76,51885,51377],{"class":93},[76,51887,51888],{"class":78,"line":9865},[76,51889,51890],{"class":82},"        \u002F\u002F 1. 四次弹框效果\n",[76,51892,51893],{"class":78,"line":9870},[76,51894,51895],{"class":82},"        \u002F\u002F 声明一个新的数组\n",[76,51897,51898,51901,51904,51906],{"class":78,"line":9875},[76,51899,51900],{"class":89},"        let",[76,51902,51903],{"class":93}," arr ",[76,51905,247],{"class":89},[76,51907,51908],{"class":93}," []\n",[76,51910,51911,51913,51915,51918,51920,51922,51924,51926,51928,51931,51933,51935],{"class":78,"line":9884},[76,51912,3475],{"class":89},[76,51914,1730],{"class":93},[76,51916,51917],{"class":89},"let",[76,51919,9510],{"class":93},[76,51921,247],{"class":89},[76,51923,25191],{"class":250},[76,51925,9517],{"class":93},[76,51927,1660],{"class":89},[76,51929,51930],{"class":250}," 4",[76,51932,3286],{"class":93},[76,51934,2364],{"class":89},[76,51936,12514],{"class":93},[76,51938,51939],{"class":78,"line":9889},[76,51940,51941],{"class":82},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[76,51943,51944],{"class":78,"line":9895},[76,51945,51946],{"class":82},"            \u002F\u002F arr.push(num)\n",[76,51948,51949,51952,51955,51957,51960,51962,51965,51967,51970],{"class":78,"line":9916},[76,51950,51951],{"class":93},"            arr.",[76,51953,51954],{"class":2035},"push",[76,51956,202],{"class":93},[76,51958,51959],{"class":2035},"prompt",[76,51961,202],{"class":93},[76,51963,51964],{"class":305},"`请输入第${",[76,51966,641],{"class":93},[76,51968,51969],{"class":305},"}季度的数据:`",[76,51971,30567],{"class":93},[76,51973,51974],{"class":78,"line":9922},[76,51975,51976],{"class":82},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[76,51978,51979],{"class":78,"line":9936},[76,51980,2601],{"class":93},[76,51982,51983],{"class":78,"line":9942},[76,51984,51985],{"class":82},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[76,51987,51988],{"class":78,"line":9969},[76,51989,51990],{"class":82},"        \u002F\u002F 盒子开头\n",[76,51992,51993,51996,51999,52001,52004],{"class":78,"line":9978},[76,51994,51995],{"class":93},"        document.",[76,51997,51998],{"class":2035},"write",[76,52000,202],{"class":93},[76,52002,52003],{"class":305},"` \u003Cdiv class=\"box\">`",[76,52005,208],{"class":93},[76,52007,52008],{"class":78,"line":9984},[76,52009,2472],{"emptyLinePlaceholder":125},[76,52011,52012],{"class":78,"line":9992},[76,52013,52014],{"class":82},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[76,52016,52017,52019,52021,52023,52025,52027,52029,52031,52033,52036,52039,52041,52043],{"class":78,"line":9997},[76,52018,3475],{"class":89},[76,52020,1730],{"class":93},[76,52022,51917],{"class":89},[76,52024,9510],{"class":93},[76,52026,247],{"class":89},[76,52028,4165],{"class":250},[76,52030,9517],{"class":93},[76,52032,1109],{"class":89},[76,52034,52035],{"class":93}," arr.",[76,52037,52038],{"class":250},"length",[76,52040,3286],{"class":93},[76,52042,2364],{"class":89},[76,52044,12514],{"class":93},[76,52046,52047,52050,52052,52054],{"class":78,"line":16676},[76,52048,52049],{"class":93},"            document.",[76,52051,51998],{"class":2035},[76,52053,202],{"class":93},[76,52055,52056],{"class":305},"`\n",[76,52058,52059,52062,52064,52066,52068,52070],{"class":78,"line":16682},[76,52060,52061],{"class":305},"              \u003Cdiv style=\"height: ${",[76,52063,3952],{"class":93},[76,52065,1089],{"class":305},[76,52067,641],{"class":93},[76,52069,1139],{"class":305},[76,52071,52072],{"class":305},"}px;\">\n",[76,52074,52075,52078,52080,52082,52084,52086],{"class":78,"line":16705},[76,52076,52077],{"class":305},"                \u003Cspan>${",[76,52079,3952],{"class":93},[76,52081,1089],{"class":305},[76,52083,641],{"class":93},[76,52085,1139],{"class":305},[76,52087,52088],{"class":305},"}\u003C\u002Fspan>\n",[76,52090,52091,52094,52096,52098,52100],{"class":78,"line":16711},[76,52092,52093],{"class":305},"                \u003Ch4>第${",[76,52095,641],{"class":93},[76,52097,45636],{"class":89},[76,52099,25191],{"class":250},[76,52101,52102],{"class":305},"}季度\u003C\u002Fh4>\n",[76,52104,52105],{"class":78,"line":16734},[76,52106,52107],{"class":305},"              \u003C\u002Fdiv>          \n",[76,52109,52110,52113],{"class":78,"line":16748},[76,52111,52112],{"class":305},"            `",[76,52114,208],{"class":93},[76,52116,52117],{"class":78,"line":16768},[76,52118,2601],{"class":93},[76,52120,52121],{"class":78,"line":16774},[76,52122,52123],{"class":82},"        \u002F\u002F 盒子结尾\n",[76,52125,52126,52128,52130,52132,52135],{"class":78,"line":16785},[76,52127,51995],{"class":93},[76,52129,51998],{"class":2035},[76,52131,202],{"class":93},[76,52133,52134],{"class":305},"` \u003C\u002Fdiv>`",[76,52136,208],{"class":93},[76,52138,52139,52141,52143],{"class":78,"line":16808},[76,52140,51846],{"class":93},[76,52142,51883],{"class":51370},[76,52144,51377],{"class":93},[76,52146,52147,52149,52151],{"class":78,"line":16830},[76,52148,51855],{"class":93},[76,52150,51870],{"class":51370},[76,52152,51377],{"class":93},[76,52154,52155],{"class":78,"line":16835},[76,52156,2472],{"emptyLinePlaceholder":125},[76,52158,52159,52161,52163],{"class":78,"line":16841},[76,52160,51855],{"class":93},[76,52162,50705],{"class":51370},[76,52164,51377],{"class":93},[169,52166,52168],{"id":52167},"_284-冒泡排序","2.8.4 冒泡排序",[67,52170,52172],{"className":50703,"code":52171,"language":50705,"meta":58,"style":58},"\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",[73,52173,52174,52184,52198,52202,52210,52225,52245,52257,52265,52269,52277,52285,52317,52350,52387,52392,52411,52416,52429,52444,52460,52464,52469,52473,52483,52492,52500,52504],{"__ignoreMap":58},[76,52175,52176,52178,52180,52182],{"class":78,"line":79},[76,52177,51367],{"class":93},[76,52179,51371],{"class":51370},[76,52181,51374],{"class":2035},[76,52183,51377],{"class":93},[76,52185,52186,52188,52190,52192,52194,52196],{"class":78,"line":86},[76,52187,1109],{"class":93},[76,52189,50705],{"class":51370},[76,52191,51386],{"class":2035},[76,52193,247],{"class":93},[76,52195,51391],{"class":305},[76,52197,51377],{"class":93},[76,52199,52200],{"class":78,"line":97},[76,52201,2472],{"emptyLinePlaceholder":125},[76,52203,52204,52206,52208],{"class":78,"line":103},[76,52205,1109],{"class":93},[76,52207,51404],{"class":51370},[76,52209,51377],{"class":93},[76,52211,52212,52215,52217,52219,52221,52223],{"class":78,"line":1273},[76,52213,52214],{"class":93},"  \u003C",[76,52216,51414],{"class":51370},[76,52218,51417],{"class":2035},[76,52220,247],{"class":93},[76,52222,51422],{"class":305},[76,52224,51377],{"class":93},[76,52226,52227,52229,52231,52233,52235,52237,52239,52241,52243],{"class":78,"line":1287},[76,52228,52214],{"class":93},[76,52230,51414],{"class":51370},[76,52232,14992],{"class":2035},[76,52234,247],{"class":93},[76,52236,51461],{"class":305},[76,52238,51441],{"class":2035},[76,52240,247],{"class":93},[76,52242,51468],{"class":305},[76,52244,51377],{"class":93},[76,52246,52247,52249,52251,52253,52255],{"class":78,"line":1293},[76,52248,52214],{"class":93},[76,52250,51477],{"class":51370},[76,52252,51480],{"class":93},[76,52254,51477],{"class":51370},[76,52256,51377],{"class":93},[76,52258,52259,52261,52263],{"class":78,"line":1384},[76,52260,51855],{"class":93},[76,52262,51404],{"class":51370},[76,52264,51377],{"class":93},[76,52266,52267],{"class":78,"line":1390},[76,52268,2472],{"emptyLinePlaceholder":125},[76,52270,52271,52273,52275],{"class":78,"line":1402},[76,52272,1109],{"class":93},[76,52274,51870],{"class":51370},[76,52276,51377],{"class":93},[76,52278,52279,52281,52283],{"class":78,"line":1684},[76,52280,52214],{"class":93},[76,52282,51883],{"class":51370},[76,52284,51377],{"class":93},[76,52286,52287,52290,52292,52294,52297,52299,52301,52303,52305,52307,52309,52311,52313,52315],{"class":78,"line":1689},[76,52288,52289],{"class":89},"    let",[76,52291,51903],{"class":93},[76,52293,247],{"class":89},[76,52295,52296],{"class":93}," [",[76,52298,520],{"class":250},[76,52300,12507],{"class":93},[76,52302,494],{"class":250},[76,52304,12507],{"class":93},[76,52306,272],{"class":250},[76,52308,12507],{"class":93},[76,52310,278],{"class":250},[76,52312,12507],{"class":93},[76,52314,418],{"class":250},[76,52316,33316],{"class":93},[76,52318,52319,52321,52323,52325,52327,52329,52331,52333,52335,52337,52339,52342,52344,52346,52348],{"class":78,"line":1695},[76,52320,3273],{"class":89},[76,52322,1730],{"class":93},[76,52324,51917],{"class":89},[76,52326,9510],{"class":93},[76,52328,247],{"class":89},[76,52330,4165],{"class":250},[76,52332,9517],{"class":93},[76,52334,1109],{"class":89},[76,52336,52035],{"class":93},[76,52338,52038],{"class":250},[76,52340,52341],{"class":89}," -",[76,52343,25191],{"class":250},[76,52345,3286],{"class":93},[76,52347,2364],{"class":89},[76,52349,12514],{"class":93},[76,52351,52352,52355,52357,52359,52361,52363,52365,52367,52369,52371,52373,52375,52377,52379,52381,52383,52385],{"class":78,"line":1700},[76,52353,52354],{"class":89},"      for",[76,52356,1730],{"class":93},[76,52358,51917],{"class":89},[76,52360,9572],{"class":93},[76,52362,247],{"class":89},[76,52364,4165],{"class":250},[76,52366,9579],{"class":93},[76,52368,1109],{"class":89},[76,52370,52035],{"class":93},[76,52372,52038],{"class":250},[76,52374,52341],{"class":89},[76,52376,9510],{"class":93},[76,52378,112],{"class":89},[76,52380,25191],{"class":250},[76,52382,9586],{"class":93},[76,52384,2364],{"class":89},[76,52386,12514],{"class":93},[76,52388,52389],{"class":78,"line":1714},[76,52390,52391],{"class":82},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[76,52393,52394,52396,52399,52401,52404,52406,52408],{"class":78,"line":1719},[76,52395,2569],{"class":89},[76,52397,52398],{"class":93}," (arr[j] ",[76,52400,1159],{"class":89},[76,52402,52403],{"class":93}," arr[j ",[76,52405,681],{"class":89},[76,52407,25191],{"class":250},[76,52409,52410],{"class":93},"]) {\n",[76,52412,52413],{"class":78,"line":1725},[76,52414,52415],{"class":82},"          \u002F\u002F 交换两个变量\n",[76,52417,52418,52421,52424,52426],{"class":78,"line":1746},[76,52419,52420],{"class":89},"          let",[76,52422,52423],{"class":93}," tmp ",[76,52425,247],{"class":89},[76,52427,52428],{"class":93}," arr[j]\n",[76,52430,52431,52434,52436,52438,52440,52442],{"class":78,"line":1751},[76,52432,52433],{"class":93},"          arr[j] ",[76,52435,247],{"class":89},[76,52437,52403],{"class":93},[76,52439,681],{"class":89},[76,52441,25191],{"class":250},[76,52443,33316],{"class":93},[76,52445,52446,52449,52451,52453,52455,52457],{"class":78,"line":1765},[76,52447,52448],{"class":93},"          arr[j ",[76,52450,681],{"class":89},[76,52452,25191],{"class":250},[76,52454,4515],{"class":93},[76,52456,247],{"class":89},[76,52458,52459],{"class":93}," tmp\n",[76,52461,52462],{"class":78,"line":1770},[76,52463,2601],{"class":93},[76,52465,52466],{"class":78,"line":1799},[76,52467,52468],{"class":93},"      }\n",[76,52470,52471],{"class":78,"line":1804},[76,52472,2259],{"class":93},[76,52474,52475,52478,52480],{"class":78,"line":1821},[76,52476,52477],{"class":93},"    document.",[76,52479,51998],{"class":2035},[76,52481,52482],{"class":93},"(arr)\n",[76,52484,52485,52488,52490],{"class":78,"line":1826},[76,52486,52487],{"class":93},"  \u003C\u002F",[76,52489,51883],{"class":51370},[76,52491,51377],{"class":93},[76,52493,52494,52496,52498],{"class":78,"line":1831},[76,52495,51855],{"class":93},[76,52497,51870],{"class":51370},[76,52499,51377],{"class":93},[76,52501,52502],{"class":78,"line":1836},[76,52503,2472],{"emptyLinePlaceholder":125},[76,52505,52506,52508,52510],{"class":78,"line":1850},[76,52507,51855],{"class":93},[76,52509,50705],{"class":51370},[76,52511,51377],{"class":93},[14,52513,52514],{},[56,52515],{"alt":58,"src":52516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52518,52519],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52521,52522],{},"let arr = [4, 2, 5, 1, 3]",[14,52524,52525],{},"\u002F\u002F 1.升序排列写法",[14,52527,52528],{},"arr.sort(function (a, b) {",[14,52530,52531],{},"return a - b",[14,52533,52534],{},"})",[14,52536,52537],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52539,52540],{},"\u002F\u002F 降序排列写法",[14,52542,52528],{},[14,52544,52545],{},"return b - a",[14,52547,52534],{},[14,52549,52550],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[140,52552,52554],{"id":52553},"_29-函数","2.9 函数",[14,52556,52557],{},[56,52558],{"alt":58,"src":52559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52561,52562],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52564,52565],{},"函数的声明用function",[14,52567,52568],{},"函数里边可以嵌套函数",[169,52570,52572],{"id":52571},"_291-函数传参","2.9.1 函数传参",[14,52574,52575],{},[56,52576],{"alt":58,"src":52577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52579,52580],{},[56,52581],{"alt":58,"src":52582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1206,52584,52585,52588,52591,52594,52597,52600],{},[155,52586,52587],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[155,52589,52590],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[155,52592,52593],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[155,52595,52596],{},"开发中尽量保持形参和实参个数一致",[155,52598,52599],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[155,52601,52602],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52604,52605],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[169,52607,52609],{"id":52608},"_292-函数的返回值","2.9.2 函数的返回值",[14,52611,52612],{},[56,52613],{"alt":58,"src":52614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52616,52617],{},[56,52618],{"alt":58,"src":52619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1206,52621,52622,52625,52628,52631,52634],{},[155,52623,52624],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[155,52626,52627],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[155,52629,52630],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[155,52632,52633],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[155,52635,52636],{},"断点调试:进入函数内部看执行过程F11",[169,52638,52640],{"id":52639},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[67,52642,52644],{"className":50703,"code":52643,"language":50705,"meta":58,"style":58},"    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",[73,52645,52646,52651,52656,52660,52665],{"__ignoreMap":58},[76,52647,52648],{"class":78,"line":79},[76,52649,52650],{"class":93},"    function fn(a, b) {\n",[76,52652,52653],{"class":78,"line":86},[76,52654,52655],{"class":93},"      console.log(a + b);\n",[76,52657,52658],{"class":78,"line":97},[76,52659,2259],{"class":93},[76,52661,52662],{"class":78,"line":103},[76,52663,52664],{"class":93},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[76,52666,52667],{"class":78,"line":1273},[76,52668,52669],{"class":93},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[169,52671,52673],{"id":52672},"_294-作用域","2.9.4 作用域",[1206,52675,52676,52682,52687,52690,52693],{},[155,52677,52678,52679],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[350,52680,52681],{},"作用域",[155,52683,52684],{},[350,52685,52686],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[155,52688,52689],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[155,52691,52692],{},"函数内部可以直接所使用全局变量",[155,52694,52695],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52697,14705],{},[67,52699,52701],{"className":50703,"code":52700,"language":50705,"meta":58,"style":58},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[73,52702,52703,52708,52713,52717,52722,52727,52732],{"__ignoreMap":58},[76,52704,52705],{"class":78,"line":79},[76,52706,52707],{"class":93},"    function fun() {\n",[76,52709,52710],{"class":78,"line":86},[76,52711,52712],{"class":93},"      num = 10\n",[76,52714,52715],{"class":78,"line":97},[76,52716,2259],{"class":93},[76,52718,52719],{"class":78,"line":103},[76,52720,52721],{"class":93},"    fun()\n",[76,52723,52724],{"class":78,"line":1273},[76,52725,52726],{"class":93},"    console.log(num)\n",[76,52728,52729],{"class":78,"line":1287},[76,52730,52731],{"class":93},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[76,52733,52734],{"class":78,"line":1293},[76,52735,52736],{"class":93},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1206,52738,52739,52742],{},[155,52740,52741],{},"函数内部的形参可以看做是局部变量",[155,52743,52744],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52746,52747,52748],{},"变量访问原则： ",[350,52749,52750],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[169,52752,52754],{"id":52753},"_295-匿名函数","2.9.5 匿名函数",[14,52756,52757],{},"函数可以分为具名函数和匿名函数",[14,52759,52760],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[152,52762,52763],{},[155,52764,52765],{},"函数表达式",[14,52767,52768],{},[56,52769],{"alt":58,"src":52770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52772,52773],{},"里边也可以写参数",[14,52775,52776],{},"具名函数调用位置可以随意调整；",[14,52778,52779],{},"匿名函数函数表达式形式只能在声明后才可以使用",[152,52781,52782],{"start":86},[155,52783,52784],{},"立即执行函数",[14,52786,52787],{},[56,52788],{"alt":58,"src":52789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52791,52792],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52794,52795],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52797,52798],{},"(function () {})();",[14,52800,52801],{},"不要落下最后的;",[14,52803,52804],{},"立即执行函数必须要加;",[14,52806,52807],{},"分号写前写后都没问题",[14,52809,52810],{},"写前：",[14,52812,52813],{},"(function() {})()",[14,52815,52816],{},";(function () {})();",[14,52818,52819],{},"写后:",[14,52821,52822],{},"(function() {})();",[14,52824,52798],{},[14,52826,52827],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52829,52830],{},"还有一种写法：",[14,52832,52833],{},"(function(){}());",[14,52835,52836],{},"或者:",[14,52838,52839],{},"!function(){}();",[14,52841,52842],{},"立即执行函数有时候也是可以加名字的：",[14,52844,52845],{},"(function flexible(window,document) {}(window,document));",[14,52847,52848],{},"省一些调用方法",[169,52850,52852],{"id":52851},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52854,52855],{},[56,52856],{"alt":58,"src":52857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52859,52860],{},"这样就不用非得给x,y初始化了",[14,52862,52863],{},[56,52864],{"alt":58,"src":52865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52867,52868],{},"代码执行时先看左边",[14,52870,52871],{},"例如：console.log(false && 3+5)",[14,52873,52874],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52876,52877],{},"&&都是真时，就返回最后一个真值",[14,52879,52880],{},"console.log(11 && 22)",[14,52882,52883],{},"输出22",[14,52885,52886],{},"逻辑与：遇真则真",[14,52888,14705],{},[14,52890,52891],{},"let age=1",[14,52893,52894],{},"console.log(11 || age++)",[14,52896,52897],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52899,52900],{},"console.log(11 || 22)",[14,52902,52903],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52905,52906],{},"||如果都是假的话，就取最后一个假的值了",[169,52908,52910],{"id":52909},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52912,52913],{},"显示转换：",[14,52915,52916,52919,52920],{},[350,52917,52918],{},"记忆","： ",[350,52921,52922],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52924,52925],{},"空字符串为假，其他字符串全为真",[14,52927,52928],{},[56,52929],{"alt":58,"src":52930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52932,52933],{},"隐式转换：",[14,52935,52936],{},[56,52937],{"alt":58,"src":52938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52940,52941],{},"隐式转换:",[14,52943,52944],{},"null+3=3",[14,52946,52947],{},"undefined+3=NaN",[14,52949,52950],{},"null==undefined 输出true,他两个都当0看",[14,52952,52953],{},"null===undefined 输出false",[14,52955,52956],{},"undefined做任何操作都是NaN",[14,52958,52959],{},"NaN不等于NaN，NaN表示计算错误",[140,52961,52963],{"id":52962},"_210-对象","2.10 对象",[169,52965,52967],{"id":52966},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52969,52970],{},"对象也是一种数据类型，里边的数据是无序的",[14,52972,52973],{},"对象由属性和方法组成",[14,52975,52976],{},[56,52977],{"alt":58,"src":52978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52980,52981],{},[56,52982],{"alt":58,"src":52983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52985,52986],{},[56,52987],{"alt":58,"src":52988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[169,52990,52992],{"id":52991},"_2102-对象属性","2.10.2 对象属性",[14,52994,52995],{},[56,52996],{"alt":58,"src":52997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[152,52999,53000],{},[155,53001,53002],{},"查询对象",[14,53004,53005],{},"对象名.属性 goods.uname",[14,53007,53008],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53010,53011],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53013,53014],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53016,53017],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[152,53019,53020],{"start":86},[155,53021,53022],{},"重新赋值",[14,53024,53025],{},"对象名.属性=新值",[152,53027,53028],{"start":97},[155,53029,53030],{},"增加新数据",[14,53032,53025],{},[152,53034,53035],{"start":103},[155,53036,53037],{},"删除对象中的属性",[14,53039,53040],{},"delete 对象名.属性",[169,53042,53044],{"id":53043},"_2103-对象方法","2.10.3 对象方法",[14,53046,53047],{},[56,53048],{"alt":58,"src":53049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53051,53052],{},"后边跟的是匿名函数",[14,53054,53055],{},"对象外面的叫函数；对象内部的叫方法",[14,53057,53058],{},[56,53059],{"alt":58,"src":53060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[169,53062,53064],{"id":53063},"_2104-遍历对象","2.10.4 遍历对象",[14,53066,53067],{},"理解为加括号的python字典遍历",[14,53069,53070],{},[56,53071],{"alt":58,"src":53072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53074,53075],{},"k是字符串类型",[14,53077,53078],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[67,53080,53082],{"className":50703,"code":53081,"language":50705,"meta":58,"style":58},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[73,53083,53084,53089,53094,53099,53104],{"__ignoreMap":58},[76,53085,53086],{"class":78,"line":79},[76,53087,53088],{"class":93},"   let arr = [1, 2, 3]\n",[76,53090,53091],{"class":78,"line":86},[76,53092,53093],{"class":93},"    for (let k in arr) {\n",[76,53095,53096],{"class":78,"line":97},[76,53097,53098],{"class":93},"      console.log(k)\n",[76,53100,53101],{"class":78,"line":103},[76,53102,53103],{"class":93},"      console.log(arr[k])\n",[76,53105,53106],{"class":78,"line":1273},[76,53107,2259],{"class":93},[14,53109,53110],{},[56,53111],{"alt":58,"src":53112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53114,53115],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53117,53118],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53120,53121],{},"for in 得到的k是属性名",[51883,53123,53124],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53126,53127],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[169,53129,53131],{"id":53130},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53133,53134],{},"数组中放对象信息",[67,53136,53140],{"className":53137,"code":53138,"language":53139,"meta":58,"style":58},"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",[73,53141,53142,53150,53155,53160,53165,53170,53175,53180,53185,53190,53195,53200,53205,53209,53213],{"__ignoreMap":58},[76,53143,53144,53146,53148],{"class":78,"line":79},[76,53145,1109],{"class":93},[76,53147,51883],{"class":51370},[76,53149,51377],{"class":93},[76,53151,53152],{"class":78,"line":86},[76,53153,53154],{"class":93},"    let students = [\n",[76,53156,53157],{"class":78,"line":97},[76,53158,53159],{"class":93},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[76,53161,53162],{"class":78,"line":103},[76,53163,53164],{"class":93},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[76,53166,53167],{"class":78,"line":1273},[76,53168,53169],{"class":93},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[76,53171,53172],{"class":78,"line":1287},[76,53173,53174],{"class":93},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[76,53176,53177],{"class":78,"line":1293},[76,53178,53179],{"class":93},"    ]\n",[76,53181,53182],{"class":78,"line":1384},[76,53183,53184],{"class":93},"    for (let i = 0; i \u003C students.length; i++) {\n",[76,53186,53187],{"class":78,"line":1390},[76,53188,53189],{"class":93},"      for (let k in students[i]) {\n",[76,53191,53192],{"class":78,"line":1402},[76,53193,53194],{"class":93},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[76,53196,53197],{"class":78,"line":1684},[76,53198,53199],{"class":93},"        \u002F\u002F输出每个人的名字：\n",[76,53201,53202],{"class":78,"line":1689},[76,53203,53204],{"class":93},"        \u002F\u002Fconsole.log(students[i].name)\n",[76,53206,53207],{"class":78,"line":1695},[76,53208,52468],{"class":93},[76,53210,53211],{"class":78,"line":1700},[76,53212,2259],{"class":93},[76,53214,53215,53217,53219],{"class":78,"line":1714},[76,53216,52487],{"class":93},[76,53218,51883],{"class":51370},[76,53220,51377],{"class":93},[169,53222,53224],{"id":53223},"_2106-内置对象","2.10.6 内置对象",[14,53226,53227],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[152,53229,53230],{},[155,53231,53232],{},"数学对象Math",[14,53234,53235],{},[56,53236],{"alt":58,"src":53237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53239,53240],{},[439,53241,53244],{"href":53242,"rel":53243},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23937],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53246,53247],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53249,53250],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53252,53253],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53255,53256],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53258,53259],{},"null属于对象数据类型",[152,53261,53262],{"start":86},[155,53263,53264],{},"生成任意范围随机数",[14,53266,53267],{},[56,53268],{"alt":58,"src":53269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53271,53272],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53274,53275],{},"乘以几就取不到几",[14,53277,53278],{},"取数组中的随机元素：",[14,53280,53281],{},"let arr = ['red', 'green', 'blue']",[14,53283,53284],{},"let random = Math.floor(Math.random() * arr.length)",[14,53286,53287],{},"console.log(arr[random])",[14,53289,53290],{},"这个函数得到的是全闭区间",[14,53292,53293],{},"function getRandom(N, M) {",[14,53295,53296],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53298,1145],{},[14,53300,53301],{},"console.log(getRandom(4, 8))",[169,53303,53305],{"id":53304},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53307,53308],{},[56,53309],{"alt":58,"src":53310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53312,53313],{},[56,53314],{"alt":58,"src":53315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53317,53318],{},[56,53319],{"alt":58,"src":53320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53322,53323],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53325,53326],{},[56,53327],{"alt":58,"src":53328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53330,53331],{},[56,53332],{"alt":58,"src":53333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53335,53336],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53338,53339],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53341,53342],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[117,53344,53345],{},"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":58,"searchDepth":86,"depth":86,"links":53347},[53348,53356,53357,53358,53359,53360,53367,53371,53377,53386],{"id":50538,"depth":86,"text":50539,"children":53349},[53350,53351,53352,53353,53354,53355],{"id":50542,"depth":97,"text":50543},{"id":50559,"depth":97,"text":50560},{"id":50599,"depth":97,"text":50600},{"id":50611,"depth":97,"text":50612},{"id":50620,"depth":97,"text":50621},{"id":50668,"depth":97,"text":50669},{"id":50678,"depth":86,"text":50679},{"id":50766,"depth":86,"text":50767},{"id":50789,"depth":86,"text":50790},{"id":50801,"depth":86,"text":50802},{"id":50988,"depth":86,"text":50989,"children":53361},[53362,53363,53364,53365,53366],{"id":50992,"depth":97,"text":50993},{"id":51001,"depth":97,"text":51002},{"id":51029,"depth":97,"text":51030},{"id":51065,"depth":97,"text":51066},{"id":51090,"depth":97,"text":51091},{"id":51102,"depth":86,"text":51103,"children":53368},[53369,53370],{"id":51123,"depth":97,"text":51124},{"id":51217,"depth":97,"text":51218},{"id":51275,"depth":86,"text":51276,"children":53372},[53373,53374,53375,53376],{"id":51279,"depth":97,"text":51280},{"id":51303,"depth":97,"text":51304},{"id":51356,"depth":97,"text":51357},{"id":52167,"depth":97,"text":52168},{"id":52553,"depth":86,"text":52554,"children":53378},[53379,53380,53381,53382,53383,53384,53385],{"id":52571,"depth":97,"text":52572},{"id":52608,"depth":97,"text":52609},{"id":52639,"depth":97,"text":52640},{"id":52672,"depth":97,"text":52673},{"id":52753,"depth":97,"text":52754},{"id":52851,"depth":97,"text":52852},{"id":52909,"depth":97,"text":52910},{"id":52962,"depth":86,"text":52963,"children":53387},[53388,53389,53390,53391,53392,53393,53394],{"id":52966,"depth":97,"text":52967},{"id":52991,"depth":97,"text":52992},{"id":53043,"depth":97,"text":53044},{"id":53063,"depth":97,"text":53064},{"id":53130,"depth":97,"text":53131},{"id":53223,"depth":97,"text":53224},{"id":53304,"depth":97,"text":53305},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50530,"description":122},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53401,"title":53402,"body":53403,"description":122,"extension":123,"meta":76743,"navigation":125,"path":76744,"seo":76745,"stem":76746,"__hash__":76747},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53404,"toc":76683},[53405,53408,53411,53414,53419,53422,53425,53428,53432,53436,53442,53447,53455,53462,53465,53469,53474,53479,53484,53487,53490,53501,53504,53508,53511,53514,53519,53524,53529,53532,53535,53627,53630,53635,53638,53643,53646,53649,53654,53657,53662,53666,53669,53683,53687,53692,53695,53698,53702,53707,53710,53714,53718,53723,53727,53732,53735,53738,53741,53744,53747,53750,53755,53760,53788,53791,53794,53797,53802,53805,53808,53811,53814,53818,53847,53851,53856,53861,53864,53867,53870,53875,53990,53995,54000,54161,54166,54169,54173,54178,54183,54186,54189,54192,54195,54198,54201,54204,54207,54210,54213,54216,54219,54222,54225,54227,54230,54233,54236,54241,54245,54642,54645,54651,54655,54660,55942,55947,55950,55953,55956,55961,57157,57161,57167,57172,57175,57180,57185,57189,57193,57198,57201,57206,57209,57212,57216,58124,58127,58131,58352,58355,58358,58361,58587,58590,58814,58817,58821,58826,58829,58832,59060,59063,59096,59099,59103,59108,59112,59115,59118,59121,59124,59127,59130,59133,59138,60418,60422,60425,61518,61522,61525,61528,61531,61534,61538,61541,61544,61546,61554,63035,63039,63042,63045,63048,63257,63260,63264,63268,63273,63278,63281,63284,63289,63293,63298,63301,63410,63414,63419,63424,63427,63430,63434,63439,63444,63449,63452,63455,63466,63469,63474,63479,63482,63485,63558,63562,63567,63570,63572,63583,63587,63592,64918,64921,64924,64927,64929,64932,64935,64938,64941,64944,64947,64950,64953,64956,64959,64962,64965,64967,64969,64972,64976,66070,66073,66076,66092,66106,66109,66114,66120,66125,66129,66133,66138,66142,66147,66589,66594,66597,66601,66606,66609,66612,66616,66621,66625,66630,66635,66639,66644,66649,66652,66657,66662,66666,66671,66676,66780,66783,66787,66792,67158,67161,67164,67167,67170,67173,67176,67179,67182,68478,68482,68487,68492,68495,68498,68501,68504,68506,68511,68516,68519,68523,68528,68533,68538,68541,68544,68547,68550,68553,68558,68561,68565,68570,68575,68579,68584,68587,68592,68595,68598,68601,68604,68607,68612,68615,68618,68621,68624,68628,68633,68636,68640,68645,68648,68651,68655,68684,68687,68691,68695,68700,68704,68709,68712,68715,68718,68721,68724,68727,68730,68733,68736,68739,68742,68745,68748,68751,68755,68760,68765,68768,68772,68776,68781,68784,68788,68791,68794,68799,68804,68809,68814,68819,68822,68825,68830,68835,68839,68844,68847,68852,68855,68858,68861,68864,68869,68872,68881,68885,68890,68893,68896,68900,68903,68908,68912,68915,68921,68927,68931,68957,68960,70521,70524,71020,71023,71028,71033,71038,71042,71047,71052,71057,71061,71066,71069,71072,71075,71078,71082,71085,71090,71093,71098,71102,71107,71110,71115,71120,71125,71128,71131,71136,71141,71144,71147,71151,71154,71159,71162,71167,71170,71175,71180,71185,71188,71193,71258,71261,71272,71276,71281,71453,71457,71462,71465,71468,71471,71475,71486,71490,71493,71498,71503,71506,71509,71512,71515,71518,71520,71523,71526,71529,71534,71537,71542,71545,71549,71552,71555,71569,71573,71576,71631,71636,71639,71642,71647,71650,71654,71659,71789,71793,71798,71803,71884,71889,71893,71896,71901,71906,71912,71915,71918,71921,71925,71930,71933,71944,71948,71965,75012,75016,75019,75022,75025,75046,75050,75053,75061,75064,75069,75072,75075,75080,75085,75089,75110,75114,75119,75122,75125,75128,75131,75135,75140,75143,75147,75152,75155,75160,75163,75168,75171,75176,76379,76383,76388,76391,76396,76680],[10,53406,53402],{"id":53407},"_3web-apis",[14,53409,53410],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53412,53413],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53415,53416],{},[56,53417],{"alt":58,"src":53418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53420,53421],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53423,53424],{},"建议数组和对象使用 const 来声明",[14,53426,53427],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[140,53429,53431],{"id":53430},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[169,53433,53435],{"id":53434},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53437,53438,53441],{},[73,53439,53440],{},"document"," = HTML 文件解析后的对象化表示；",[14,53443,53444,53446],{},[73,53445,53440],{}," ≠ HTML 文件本身",[14,53448,53449,53454],{},[350,53450,53451],{},[73,53452,53453],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53456,53457,53461],{},[350,53458,53459],{},[73,53460,53440],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53463,53464],{},"document实际上为window.document的简写",[169,53466,53468],{"id":53467},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53470,53471],{},[56,53472],{"alt":58,"src":53473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53475,53476],{},[56,53477],{"alt":58,"src":53478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53480,53481],{},[56,53482],{"alt":58,"src":53483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53485,53486],{},"console.dir()",[14,53488,53489],{},"dir用来打印对象",[1206,53491,53492,53495,53498],{},[155,53493,53494],{},"任何一个标签，都是一个对象",[155,53496,53497],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[155,53499,53500],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53502,53503],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[169,53505,53507],{"id":53506},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53509,53510],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53512,53513],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53515,53516],{},[350,53517,53518],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[152,53520,53521],{},[155,53522,53523],{},"利用CSS选择器来获取标签元素",[14,53525,53526],{},[56,53527],{"alt":58,"src":53528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53530,53531],{},"里边的选择器必须必须加引号！！！",[14,53533,53534],{},"只选择第一个元素",[67,53536,53538],{"className":53137,"code":53537,"language":53139,"meta":58,"style":58},"\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",[73,53539,53540,53548,53569,53588,53596,53601,53606,53611,53619],{"__ignoreMap":58},[76,53541,53542,53544,53546],{"class":78,"line":79},[76,53543,1109],{"class":93},[76,53545,51870],{"class":51370},[76,53547,51377],{"class":93},[76,53549,53550,53552,53554,53557,53559,53562,53565,53567],{"class":78,"line":86},[76,53551,52214],{"class":93},[76,53553,51681],{"class":51370},[76,53555,53556],{"class":2035}," class",[76,53558,247],{"class":93},[76,53560,53561],{"class":305},"\"box\"",[76,53563,53564],{"class":93},">123\u003C\u002F",[76,53566,51681],{"class":51370},[76,53568,51377],{"class":93},[76,53570,53571,53573,53575,53577,53579,53581,53584,53586],{"class":78,"line":97},[76,53572,52214],{"class":93},[76,53574,51681],{"class":51370},[76,53576,53556],{"class":2035},[76,53578,247],{"class":93},[76,53580,53561],{"class":305},[76,53582,53583],{"class":93},">456\u003C\u002F",[76,53585,51681],{"class":51370},[76,53587,51377],{"class":93},[76,53589,53590,53592,53594],{"class":78,"line":103},[76,53591,52214],{"class":93},[76,53593,51883],{"class":51370},[76,53595,51377],{"class":93},[76,53597,53598],{"class":78,"line":1273},[76,53599,53600],{"class":93},"    \u002F\u002F 1.获取匹配的第一个元素\n",[76,53602,53603],{"class":78,"line":1287},[76,53604,53605],{"class":93},"    const box = document.querySelector('div')\n",[76,53607,53608],{"class":78,"line":1293},[76,53609,53610],{"class":93},"    console.dir(box)\n",[76,53612,53613,53615,53617],{"class":78,"line":1384},[76,53614,52487],{"class":93},[76,53616,51883],{"class":51370},[76,53618,51377],{"class":93},[76,53620,53621,53623,53625],{"class":78,"line":1390},[76,53622,51855],{"class":93},[76,53624,51870],{"class":51370},[76,53626,51377],{"class":93},[14,53628,53629],{},"只选123，不选456",[14,53631,53632],{},[56,53633],{"alt":58,"src":53634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53636,53637],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53639,53640],{},[56,53641],{"alt":58,"src":53642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53644,53645],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53647,53648],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[152,53650,53651],{"start":86},[155,53652,53653],{},"其他方法来获取标签元素",[14,53655,53656],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53658,53659],{},[56,53660],{"alt":58,"src":53661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[169,53663,53665],{"id":53664},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53667,53668],{},"设置修改DOM元素内容有两种方式：",[1206,53670,53671,53674,53677,53680],{},[155,53672,53673],{},"元素.innerText=''",[155,53675,53676],{},"元素.innerHTML=''",[155,53678,53679],{},"不写字符串输出数字也是可以的",[155,53681,53682],{},"元素.innerHtml=1",[22070,53684,53686],{"id":53685},"_3131-innertext","3.1.3.1 innerText",[14,53688,53689],{},[56,53690],{"alt":58,"src":53691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53693,53694],{},"思路：实现了修改盒子中的内容！",[14,53696,53697],{},"它只显示纯文本，不解析标签",[22070,53699,53701],{"id":53700},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53703,53704],{},[56,53705],{"alt":58,"src":53706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53708,53709],{},"相比于innerText，他的强大之处在于可以解析标签",[169,53711,53713],{"id":53712},"_314-操作元素属性","3.1.4 操作元素属性",[22070,53715,53717],{"id":53716},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53719,53720],{},[56,53721],{"alt":58,"src":53722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22070,53724,53726],{"id":53725},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53728,53729],{},[56,53730],{"alt":58,"src":53731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53733,53734],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53736,53737],{},"div.style.backgroundColor = 'hotpink'",[14,53739,53740],{},"如果按照css的写法，-表示减，就会出错",[14,53742,53743],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53745,53746],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53748,53749],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53751,53752],{},[56,53753],{"alt":58,"src":53754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53756,53757],{},[56,53758],{"alt":58,"src":53759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[152,53761,53762,53765,53768,53771,53774,53777],{},[155,53763,53764],{},"className这个方式就是修改很多样式的时候来使用的！",[155,53766,53767],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[155,53769,53770],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[155,53772,53773],{},"className为属性名，如果还用class的话就导致与关键字冲突",[155,53775,53776],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[155,53778,53779,53780,53785],{},"解析标签的时候就变为了",[51681,53781],{"className":53782},[53783,53784],"nav","box",[53786,53787],"br",{},[14,53789,53790],{},"例子：",[51681,53792],{"className":53793},[53783],[51883,53795,53796],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53798,53799],{},[56,53800],{"alt":58,"src":53801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53803,53804],{},"追加和删除类名用classList",[14,53806,53807],{},"常用于类似于开关的操作",[14,53809,53810],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53812,53813],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22070,53815,53817],{"id":53816},"_3143-牢记点","3.1.4.3 牢记点",[152,53819,53820,53823,53826,53829,53832,53835,53838,53841,53844],{},[155,53821,53822],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[155,53824,53825],{},"使用style属性操作css时不要忘记引号",[155,53827,53828],{},"使用className或者classList时也不要忘记引号",[155,53830,53831],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[155,53833,53834],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[155,53836,53837],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[155,53839,53840],{},"若： let arr=['1','2',3] arr[0]=1",[155,53842,53843],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[155,53845,53846],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[169,53848,53850],{"id":53849},"_315-操作表单元素","3.1.5 操作表单元素",[152,53852,53853],{},[155,53854,53855],{},"天生的属性",[14,53857,53858],{},[56,53859],{"alt":58,"src":53860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53862,53863],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53865,53866],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53868,53869],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53871,53872],{},[56,53873],{"alt":58,"src":53874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[67,53876,53878],{"className":50703,"code":53877,"language":50705,"meta":58,"style":58},"在复选框中如果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",[73,53879,53880,53885,53917,53922,53927,53932,53937,53941,53946,53951,53968,53980,53985],{"__ignoreMap":58},[76,53881,53882],{"class":78,"line":79},[76,53883,53884],{"class":93},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[76,53886,53887,53889,53892,53895,53897,53900,53902,53904,53906,53908,53910,53912,53915],{"class":78,"line":86},[76,53888,1109],{"class":93},[76,53890,53891],{"class":51370},"input",[76,53893,53894],{"class":2035}," type",[76,53896,247],{"class":93},[76,53898,53899],{"class":305},"\"checkbox\"",[76,53901,14992],{"class":2035},[76,53903,247],{"class":93},[76,53905,7724],{"class":305},[76,53907,15031],{"class":2035},[76,53909,247],{"class":93},[76,53911,7724],{"class":305},[76,53913,53914],{"class":2035}," checked",[76,53916,51377],{"class":93},[76,53918,53919],{"class":78,"line":97},[76,53920,53921],{"class":93},"不选的话：\n",[76,53923,53924],{"class":78,"line":103},[76,53925,53926],{"class":93},"const input = document.querySelector('input')\n",[76,53928,53929],{"class":78,"line":1273},[76,53930,53931],{"class":93},"input.checked=false\n",[76,53933,53934],{"class":78,"line":1287},[76,53935,53936],{"class":93},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[76,53938,53939],{"class":78,"line":1293},[76,53940,2472],{"emptyLinePlaceholder":125},[76,53942,53943],{"class":78,"line":1384},[76,53944,53945],{"class":93},"禁用按钮：\n",[76,53947,53948],{"class":78,"line":1390},[76,53949,53950],{"class":93},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[76,53952,53953,53955,53958,53961,53964,53966],{"class":78,"line":1402},[76,53954,1109],{"class":93},[76,53956,53957],{"class":51370},"button",[76,53959,53960],{"class":2035}," disabled",[76,53962,53963],{"class":93},">点击\u003C\u002F",[76,53965,53957],{"class":51370},[76,53967,51377],{"class":93},[76,53969,53970,53972,53974,53976,53978],{"class":78,"line":1684},[76,53971,1109],{"class":93},[76,53973,53957],{"class":51370},[76,53975,53963],{"class":93},[76,53977,53957],{"class":51370},[76,53979,51377],{"class":93},[76,53981,53982],{"class":78,"line":1689},[76,53983,53984],{"class":93},"const bt = document.querySelector('button')\n",[76,53986,53987],{"class":78,"line":1695},[76,53988,53989],{"class":93},"bt.disabled = false\n",[152,53991,53992],{"start":86},[155,53993,53994],{},"自定义属性",[14,53996,53997],{},[56,53998],{"alt":58,"src":53999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[67,54001,54003],{"className":53137,"code":54002,"language":53139,"meta":58,"style":58},"\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",[73,54004,54005,54013,54041,54060,54079,54098,54117,54125,54130,54135,54140,54145,54153],{"__ignoreMap":58},[76,54006,54007,54009,54011],{"class":78,"line":79},[76,54008,1109],{"class":93},[76,54010,51870],{"class":51370},[76,54012,51377],{"class":93},[76,54014,54015,54017,54019,54022,54024,54026,54029,54031,54034,54037,54039],{"class":78,"line":86},[76,54016,52214],{"class":93},[76,54018,51681],{"class":51370},[76,54020,54021],{"class":2035}," data-id",[76,54023,247],{"class":93},[76,54025,3750],{"class":305},[76,54027,54028],{"class":2035}," data-spm",[76,54030,247],{"class":93},[76,54032,54033],{"class":305},"\"我不知道\"",[76,54035,54036],{"class":93},">1\u003C\u002F",[76,54038,51681],{"class":51370},[76,54040,51377],{"class":93},[76,54042,54043,54045,54047,54049,54051,54053,54056,54058],{"class":78,"line":97},[76,54044,52214],{"class":93},[76,54046,51681],{"class":51370},[76,54048,54021],{"class":2035},[76,54050,247],{"class":93},[76,54052,3773],{"class":305},[76,54054,54055],{"class":93},">2\u003C\u002F",[76,54057,51681],{"class":51370},[76,54059,51377],{"class":93},[76,54061,54062,54064,54066,54068,54070,54072,54075,54077],{"class":78,"line":103},[76,54063,52214],{"class":93},[76,54065,51681],{"class":51370},[76,54067,54021],{"class":2035},[76,54069,247],{"class":93},[76,54071,3786],{"class":305},[76,54073,54074],{"class":93},">3\u003C\u002F",[76,54076,51681],{"class":51370},[76,54078,51377],{"class":93},[76,54080,54081,54083,54085,54087,54089,54091,54094,54096],{"class":78,"line":1273},[76,54082,52214],{"class":93},[76,54084,51681],{"class":51370},[76,54086,54021],{"class":2035},[76,54088,247],{"class":93},[76,54090,3799],{"class":305},[76,54092,54093],{"class":93},">4\u003C\u002F",[76,54095,51681],{"class":51370},[76,54097,51377],{"class":93},[76,54099,54100,54102,54104,54106,54108,54110,54113,54115],{"class":78,"line":1287},[76,54101,52214],{"class":93},[76,54103,51681],{"class":51370},[76,54105,54021],{"class":2035},[76,54107,247],{"class":93},[76,54109,3820],{"class":305},[76,54111,54112],{"class":93},">5\u003C\u002F",[76,54114,51681],{"class":51370},[76,54116,51377],{"class":93},[76,54118,54119,54121,54123],{"class":78,"line":1293},[76,54120,52214],{"class":93},[76,54122,51883],{"class":51370},[76,54124,51377],{"class":93},[76,54126,54127],{"class":78,"line":1384},[76,54128,54129],{"class":93},"    const one = document.querySelector('div')\n",[76,54131,54132],{"class":78,"line":1390},[76,54133,54134],{"class":93},"    console.log(one.dataset)\n",[76,54136,54137],{"class":78,"line":1402},[76,54138,54139],{"class":93},"    console.log(one.dataset.id)\n",[76,54141,54142],{"class":78,"line":1684},[76,54143,54144],{"class":93},"    console.log(one.dataset.spm)\n",[76,54146,54147,54149,54151],{"class":78,"line":1689},[76,54148,52487],{"class":93},[76,54150,51883],{"class":51370},[76,54152,51377],{"class":93},[76,54154,54155,54157,54159],{"class":78,"line":1695},[76,54156,51855],{"class":93},[76,54158,51870],{"class":51370},[76,54160,51377],{"class":93},[14,54162,54163],{},[56,54164],{"alt":58,"src":54165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54167,54168],{},"document.querySelector选择的是第一个对象（元素）",[169,54170,54172],{"id":54171},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54174,54175],{},[56,54176],{"alt":58,"src":54177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54179,54180],{},[56,54181],{"alt":58,"src":54182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54184,54185],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51883,54187,54188],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54190,54191],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51883,54193,54194],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54196,54197],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54199,54200],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54202,54203],{},"单位为毫秒！！！",[14,54205,54206],{},"可以搭配匿名函数来用！！！",[14,54208,54209],{},"setInterval(function () {",[14,54211,54212],{},"alert('两秒执行一次')",[14,54214,54215],{},"}, 2000)",[14,54217,54218],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54220,54221],{},"function fn() {",[14,54223,54224],{},"document.write(1)",[14,54226,1145],{},[14,54228,54229],{},"setInterval(fn, 1000)",[14,54231,54232],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54234,54235],{},"setInterval('fn()', 1000)",[14,54237,54238],{},[56,54239],{"alt":58,"src":54240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22070,54242,54244],{"id":54243},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[67,54246,54248],{"className":50703,"code":54247,"language":50705,"meta":58,"style":58},"\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",[73,54249,54250,54260,54274,54278,54286,54300,54320,54332,54340,54344,54352,54389,54394,54399,54404,54412,54420,54442,54450,54455,54477,54482,54487,54498,54503,54523,54531,54546,54561,54572,54577,54587,54597,54601,54610,54614,54622,54630,54634],{"__ignoreMap":58},[76,54251,54252,54254,54256,54258],{"class":78,"line":79},[76,54253,51367],{"class":93},[76,54255,51371],{"class":51370},[76,54257,51374],{"class":2035},[76,54259,51377],{"class":93},[76,54261,54262,54264,54266,54268,54270,54272],{"class":78,"line":86},[76,54263,1109],{"class":93},[76,54265,50705],{"class":51370},[76,54267,51386],{"class":2035},[76,54269,247],{"class":93},[76,54271,51391],{"class":305},[76,54273,51377],{"class":93},[76,54275,54276],{"class":78,"line":97},[76,54277,2472],{"emptyLinePlaceholder":125},[76,54279,54280,54282,54284],{"class":78,"line":103},[76,54281,1109],{"class":93},[76,54283,51404],{"class":51370},[76,54285,51377],{"class":93},[76,54287,54288,54290,54292,54294,54296,54298],{"class":78,"line":1273},[76,54289,52214],{"class":93},[76,54291,51414],{"class":51370},[76,54293,51417],{"class":2035},[76,54295,247],{"class":93},[76,54297,51422],{"class":305},[76,54299,51377],{"class":93},[76,54301,54302,54304,54306,54308,54310,54312,54314,54316,54318],{"class":78,"line":1287},[76,54303,52214],{"class":93},[76,54305,51414],{"class":51370},[76,54307,14992],{"class":2035},[76,54309,247],{"class":93},[76,54311,51461],{"class":305},[76,54313,51441],{"class":2035},[76,54315,247],{"class":93},[76,54317,51468],{"class":305},[76,54319,51377],{"class":93},[76,54321,54322,54324,54326,54328,54330],{"class":78,"line":1293},[76,54323,52214],{"class":93},[76,54325,51477],{"class":51370},[76,54327,51480],{"class":93},[76,54329,51477],{"class":51370},[76,54331,51377],{"class":93},[76,54333,54334,54336,54338],{"class":78,"line":1384},[76,54335,51855],{"class":93},[76,54337,51404],{"class":51370},[76,54339,51377],{"class":93},[76,54341,54342],{"class":78,"line":1390},[76,54343,2472],{"emptyLinePlaceholder":125},[76,54345,54346,54348,54350],{"class":78,"line":1402},[76,54347,1109],{"class":93},[76,54349,51870],{"class":51370},[76,54351,51377],{"class":93},[76,54353,54354,54356,54359,54361,54363,54365,54367,54369,54371,54374,54376,54379,54382,54384,54387],{"class":78,"line":1684},[76,54355,52214],{"class":93},[76,54357,54358],{"class":51370},"textarea",[76,54360,14992],{"class":2035},[76,54362,247],{"class":93},[76,54364,7724],{"class":305},[76,54366,15031],{"class":2035},[76,54368,247],{"class":93},[76,54370,7724],{"class":305},[76,54372,54373],{"class":2035}," cols",[76,54375,247],{"class":93},[76,54377,54378],{"class":305},"\"30\"",[76,54380,54381],{"class":2035}," rows",[76,54383,247],{"class":93},[76,54385,54386],{"class":305},"\"10\"",[76,54388,51377],{"class":93},[76,54390,54391],{"class":78,"line":1689},[76,54392,54393],{"class":93},"        用户注册协议\n",[76,54395,54396],{"class":78,"line":1695},[76,54397,54398],{"class":93},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[76,54400,54401],{"class":78,"line":1700},[76,54402,54403],{"class":93},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[76,54405,54406,54408,54410],{"class":78,"line":1714},[76,54407,51846],{"class":93},[76,54409,54358],{"class":51370},[76,54411,51377],{"class":93},[76,54413,54414,54416,54418],{"class":78,"line":1719},[76,54415,52214],{"class":93},[76,54417,53786],{"class":51370},[76,54419,51377],{"class":93},[76,54421,54422,54424,54426,54428,54430,54433,54435,54438,54440],{"class":78,"line":1725},[76,54423,52214],{"class":93},[76,54425,53957],{"class":51370},[76,54427,53556],{"class":2035},[76,54429,247],{"class":93},[76,54431,54432],{"class":305},"\"btn\"",[76,54434,53960],{"class":2035},[76,54436,54437],{"class":93},">我已经阅读用户协议(5)\u003C\u002F",[76,54439,53957],{"class":51370},[76,54441,51377],{"class":93},[76,54443,54444,54446,54448],{"class":78,"line":1746},[76,54445,52214],{"class":93},[76,54447,51883],{"class":51370},[76,54449,51377],{"class":93},[76,54451,54452],{"class":78,"line":1751},[76,54453,54454],{"class":82},"    \u002F\u002F 1. 获取元素\n",[76,54456,54457,54459,54462,54464,54467,54470,54472,54475],{"class":78,"line":1765},[76,54458,11293],{"class":89},[76,54460,54461],{"class":250}," btn",[76,54463,13636],{"class":89},[76,54465,54466],{"class":93}," document.",[76,54468,54469],{"class":2035},"querySelector",[76,54471,202],{"class":93},[76,54473,54474],{"class":305},"'.btn'",[76,54476,208],{"class":93},[76,54478,54479],{"class":78,"line":1770},[76,54480,54481],{"class":82},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[76,54483,54484],{"class":78,"line":1799},[76,54485,54486],{"class":82},"    \u002F\u002F 2. 倒计时\n",[76,54488,54489,54491,54493,54495],{"class":78,"line":1804},[76,54490,52289],{"class":89},[76,54492,9510],{"class":93},[76,54494,247],{"class":89},[76,54496,54497],{"class":250}," 5\n",[76,54499,54500],{"class":78,"line":1821},[76,54501,54502],{"class":82},"    \u002F\u002F 2.1 开启定时器\n",[76,54504,54505,54507,54510,54512,54515,54517,54520],{"class":78,"line":1826},[76,54506,52289],{"class":89},[76,54508,54509],{"class":93}," n ",[76,54511,247],{"class":89},[76,54513,54514],{"class":2035}," setInterval",[76,54516,202],{"class":93},[76,54518,54519],{"class":89},"function",[76,54521,54522],{"class":93}," () {\n",[76,54524,54525,54528],{"class":78,"line":1831},[76,54526,54527],{"class":93},"      i",[76,54529,54530],{"class":89},"--\n",[76,54532,54533,54536,54538,54541,54543],{"class":78,"line":1836},[76,54534,54535],{"class":93},"      btn.innerHTML ",[76,54537,247],{"class":89},[76,54539,54540],{"class":305}," `我已经阅读用户协议(${",[76,54542,641],{"class":93},[76,54544,54545],{"class":305},"})`\n",[76,54547,54548,54551,54554,54557,54559],{"class":78,"line":1850},[76,54549,54550],{"class":89},"      if",[76,54552,54553],{"class":93}," (i ",[76,54555,54556],{"class":89},"===",[76,54558,4165],{"class":250},[76,54560,12514],{"class":93},[76,54562,54563,54566,54569],{"class":78,"line":1855},[76,54564,54565],{"class":2035},"        clearInterval",[76,54567,54568],{"class":93},"(n)  ",[76,54570,54571],{"class":82},"\u002F\u002F 关闭定时器\n",[76,54573,54574],{"class":78,"line":2649},[76,54575,54576],{"class":82},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[76,54578,54579,54582,54584],{"class":78,"line":2663},[76,54580,54581],{"class":93},"        btn.disabled ",[76,54583,247],{"class":89},[76,54585,54586],{"class":250}," false\n",[76,54588,54589,54592,54594],{"class":78,"line":2671},[76,54590,54591],{"class":93},"        btn.innerHTML ",[76,54593,247],{"class":89},[76,54595,54596],{"class":305}," '同意'\n",[76,54598,54599],{"class":78,"line":2676},[76,54600,52468],{"class":93},[76,54602,54603,54606,54608],{"class":78,"line":2682},[76,54604,54605],{"class":93},"    }, ",[76,54607,6482],{"class":250},[76,54609,208],{"class":93},[76,54611,54612],{"class":78,"line":2688},[76,54613,2472],{"emptyLinePlaceholder":125},[76,54615,54616,54618,54620],{"class":78,"line":2693},[76,54617,52487],{"class":93},[76,54619,51883],{"class":51370},[76,54621,51377],{"class":93},[76,54623,54624,54626,54628],{"class":78,"line":8020},[76,54625,51855],{"class":93},[76,54627,51870],{"class":51370},[76,54629,51377],{"class":93},[76,54631,54632],{"class":78,"line":8044},[76,54633,2472],{"emptyLinePlaceholder":125},[76,54635,54636,54638,54640],{"class":78,"line":8049},[76,54637,51855],{"class":93},[76,54639,50705],{"class":51370},[76,54641,51377],{"class":93},[14,54643,54644],{},"不要一直想着用死循环,避免死循环",[14,54646,54647,54650],{},[73,54648,54649],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22070,54652,54654],{"id":54653},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[152,54656,54657],{},[155,54658,54659],{},"法1",[67,54661,54663],{"className":50703,"code":54662,"language":50705,"meta":58,"style":58},"\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",[73,54664,54665,54675,54689,54693,54701,54715,54735,54747,54755,54761,54772,54783,54787,54791,54798,54810,54814,54818,54825,54837,54851,54864,54878,54882,54886,54893,54904,54915,54926,54938,54950,54962,54966,54970,54978,54988,55001,55013,55026,55030,55034,55041,55051,55063,55075,55086,55097,55107,55119,55131,55135,55139,55148,55160,55172,55200,55213,55217,55221,55228,55239,55243,55251,55259,55263,55271,55285,55300,55324,55332,55347,55360,55368,55389,55401,55413,55425,55437,55449,55461,55473,55482,55490,55498,55506,55518,55541,55560,55579,55598,55617,55636,55655,55675,55679,55699,55718,55738,55759,55770,55787,55797,55807,55817,55822,55827,55832,55837,55862,55875,55879,55902,55906,55914,55922,55930,55934],{"__ignoreMap":58},[76,54666,54667,54669,54671,54673],{"class":78,"line":79},[76,54668,51367],{"class":93},[76,54670,51371],{"class":51370},[76,54672,51374],{"class":2035},[76,54674,51377],{"class":93},[76,54676,54677,54679,54681,54683,54685,54687],{"class":78,"line":86},[76,54678,1109],{"class":93},[76,54680,50705],{"class":51370},[76,54682,51386],{"class":2035},[76,54684,247],{"class":93},[76,54686,51391],{"class":305},[76,54688,51377],{"class":93},[76,54690,54691],{"class":78,"line":97},[76,54692,2472],{"emptyLinePlaceholder":125},[76,54694,54695,54697,54699],{"class":78,"line":103},[76,54696,1109],{"class":93},[76,54698,51404],{"class":51370},[76,54700,51377],{"class":93},[76,54702,54703,54705,54707,54709,54711,54713],{"class":78,"line":1273},[76,54704,52214],{"class":93},[76,54706,51414],{"class":51370},[76,54708,51417],{"class":2035},[76,54710,247],{"class":93},[76,54712,51422],{"class":305},[76,54714,51377],{"class":93},[76,54716,54717,54719,54721,54723,54725,54727,54729,54731,54733],{"class":78,"line":1287},[76,54718,52214],{"class":93},[76,54720,51414],{"class":51370},[76,54722,14992],{"class":2035},[76,54724,247],{"class":93},[76,54726,51461],{"class":305},[76,54728,51441],{"class":2035},[76,54730,247],{"class":93},[76,54732,51468],{"class":305},[76,54734,51377],{"class":93},[76,54736,54737,54739,54741,54743,54745],{"class":78,"line":1293},[76,54738,52214],{"class":93},[76,54740,51477],{"class":51370},[76,54742,51480],{"class":93},[76,54744,51477],{"class":51370},[76,54746,51377],{"class":93},[76,54748,54749,54751,54753],{"class":78,"line":1384},[76,54750,52214],{"class":93},[76,54752,117],{"class":51370},[76,54754,51377],{"class":93},[76,54756,54757,54759],{"class":78,"line":1390},[76,54758,6475],{"class":51370},[76,54760,15644],{"class":93},[76,54762,54763,54766,54768,54770],{"class":78,"line":1402},[76,54764,54765],{"class":250},"      padding",[76,54767,51507],{"class":93},[76,54769,392],{"class":250},[76,54771,1363],{"class":93},[76,54773,54774,54777,54779,54781],{"class":78,"line":1684},[76,54775,54776],{"class":250},"      margin",[76,54778,51507],{"class":93},[76,54780,392],{"class":250},[76,54782,1363],{"class":93},[76,54784,54785],{"class":78,"line":1689},[76,54786,2259],{"class":93},[76,54788,54789],{"class":78,"line":1695},[76,54790,2472],{"emptyLinePlaceholder":125},[76,54792,54793,54796],{"class":78,"line":1700},[76,54794,54795],{"class":51370},"    li",[76,54797,15644],{"class":93},[76,54799,54800,54803,54805,54808],{"class":78,"line":1714},[76,54801,54802],{"class":250},"      list-style",[76,54804,51507],{"class":93},[76,54806,54807],{"class":250},"none",[76,54809,1363],{"class":93},[76,54811,54812],{"class":78,"line":1719},[76,54813,2259],{"class":93},[76,54815,54816],{"class":78,"line":1725},[76,54817,2472],{"emptyLinePlaceholder":125},[76,54819,54820,54823],{"class":78,"line":1746},[76,54821,54822],{"class":2035},"    .box",[76,54824,15644],{"class":93},[76,54826,54827,54830,54832,54835],{"class":78,"line":1751},[76,54828,54829],{"class":250},"      position",[76,54831,51507],{"class":93},[76,54833,54834],{"class":250},"relative",[76,54836,1363],{"class":93},[76,54838,54839,54842,54844,54847,54849],{"class":78,"line":1765},[76,54840,54841],{"class":250},"      width",[76,54843,51507],{"class":93},[76,54845,54846],{"class":250},"976",[76,54848,51562],{"class":89},[76,54850,1363],{"class":93},[76,54852,54853,54856,54858,54860,54862],{"class":78,"line":1770},[76,54854,54855],{"class":250},"      height",[76,54857,51507],{"class":93},[76,54859,1611],{"class":250},[76,54861,51562],{"class":89},[76,54863,1363],{"class":93},[76,54865,54866,54868,54870,54872,54874,54876],{"class":78,"line":1799},[76,54867,54776],{"class":250},[76,54869,51507],{"class":93},[76,54871,512],{"class":250},[76,54873,51562],{"class":89},[76,54875,51626],{"class":250},[76,54877,1363],{"class":93},[76,54879,54880],{"class":78,"line":1804},[76,54881,2259],{"class":93},[76,54883,54884],{"class":78,"line":1821},[76,54885,2472],{"emptyLinePlaceholder":125},[76,54887,54888,54891],{"class":78,"line":1826},[76,54889,54890],{"class":2035},"    .slider-footer",[76,54892,15644],{"class":93},[76,54894,54895,54897,54899,54902],{"class":78,"line":1831},[76,54896,54829],{"class":250},[76,54898,51507],{"class":93},[76,54900,54901],{"class":250},"absolute",[76,54903,1363],{"class":93},[76,54905,54906,54909,54911,54913],{"class":78,"line":1836},[76,54907,54908],{"class":250},"      left",[76,54910,51507],{"class":93},[76,54912,392],{"class":250},[76,54914,1363],{"class":93},[76,54916,54917,54920,54922,54924],{"class":78,"line":1850},[76,54918,54919],{"class":250},"      bottom",[76,54921,51507],{"class":93},[76,54923,392],{"class":250},[76,54925,1363],{"class":93},[76,54927,54928,54930,54932,54934,54936],{"class":78,"line":1855},[76,54929,54841],{"class":250},[76,54931,51507],{"class":93},[76,54933,512],{"class":250},[76,54935,106],{"class":89},[76,54937,1363],{"class":93},[76,54939,54940,54942,54944,54946,54948],{"class":78,"line":2649},[76,54941,54855],{"class":250},[76,54943,51507],{"class":93},[76,54945,774],{"class":250},[76,54947,106],{"class":89},[76,54949,1363],{"class":93},[76,54951,54952,54955,54957,54960],{"class":78,"line":2663},[76,54953,54954],{"class":250},"      background-color",[76,54956,51507],{"class":93},[76,54958,54959],{"class":250},"skyblue",[76,54961,1363],{"class":93},[76,54963,54964],{"class":78,"line":2671},[76,54965,2259],{"class":93},[76,54967,54968],{"class":78,"line":2676},[76,54969,2472],{"emptyLinePlaceholder":125},[76,54971,54972,54974,54976],{"class":78,"line":2682},[76,54973,54890],{"class":2035},[76,54975,6897],{"class":51370},[76,54977,15644],{"class":93},[76,54979,54980,54982,54984,54986],{"class":78,"line":2688},[76,54981,54829],{"class":250},[76,54983,51507],{"class":93},[76,54985,54901],{"class":250},[76,54987,1363],{"class":93},[76,54989,54990,54993,54995,54997,54999],{"class":78,"line":2693},[76,54991,54992],{"class":250},"      font-size",[76,54994,51507],{"class":93},[76,54996,1100],{"class":250},[76,54998,51562],{"class":89},[76,55000,1363],{"class":93},[76,55002,55003,55005,55007,55009,55011],{"class":78,"line":8020},[76,55004,54908],{"class":250},[76,55006,51507],{"class":93},[76,55008,899],{"class":250},[76,55010,51562],{"class":89},[76,55012,1363],{"class":93},[76,55014,55015,55018,55020,55022,55024],{"class":78,"line":8044},[76,55016,55017],{"class":250},"      top",[76,55019,51507],{"class":93},[76,55021,520],{"class":250},[76,55023,51562],{"class":89},[76,55025,1363],{"class":93},[76,55027,55028],{"class":78,"line":8049},[76,55029,2259],{"class":93},[76,55031,55032],{"class":78,"line":8055},[76,55033,2472],{"emptyLinePlaceholder":125},[76,55035,55036,55039],{"class":78,"line":8082},[76,55037,55038],{"class":51370},"    ul",[76,55040,15644],{"class":93},[76,55042,55043,55045,55047,55049],{"class":78,"line":8087},[76,55044,54829],{"class":250},[76,55046,51507],{"class":93},[76,55048,54901],{"class":250},[76,55050,1363],{"class":93},[76,55052,55053,55055,55057,55059,55061],{"class":78,"line":8093},[76,55054,55017],{"class":250},[76,55056,51507],{"class":93},[76,55058,980],{"class":250},[76,55060,51562],{"class":89},[76,55062,1363],{"class":93},[76,55064,55065,55067,55069,55071,55073],{"class":78,"line":8105},[76,55066,54908],{"class":250},[76,55068,51507],{"class":93},[76,55070,899],{"class":250},[76,55072,51562],{"class":89},[76,55074,1363],{"class":93},[76,55076,55077,55080,55082,55084],{"class":78,"line":8117},[76,55078,55079],{"class":250},"      display",[76,55081,51507],{"class":93},[76,55083,51547],{"class":250},[76,55085,1363],{"class":93},[76,55087,55088,55091,55093,55095],{"class":78,"line":8129},[76,55089,55090],{"class":250},"      justify-content",[76,55092,51507],{"class":93},[76,55094,51738],{"class":250},[76,55096,1363],{"class":93},[76,55098,55099,55101,55103,55105],{"class":78,"line":9788},[76,55100,54829],{"class":250},[76,55102,51507],{"class":93},[76,55104,54901],{"class":250},[76,55106,1363],{"class":93},[76,55108,55109,55111,55113,55115,55117],{"class":78,"line":9813},[76,55110,54841],{"class":250},[76,55112,51507],{"class":93},[76,55114,4064],{"class":250},[76,55116,51562],{"class":89},[76,55118,1363],{"class":93},[76,55120,55121,55123,55125,55127,55129],{"class":78,"line":9836},[76,55122,54855],{"class":250},[76,55124,51507],{"class":93},[76,55126,899],{"class":250},[76,55128,51562],{"class":89},[76,55130,1363],{"class":93},[76,55132,55133],{"class":78,"line":9860},[76,55134,2259],{"class":93},[76,55136,55137],{"class":78,"line":9865},[76,55138,2472],{"emptyLinePlaceholder":125},[76,55140,55141,55143,55146],{"class":78,"line":9870},[76,55142,55038],{"class":51370},[76,55144,55145],{"class":51370}," li",[76,55147,15644],{"class":93},[76,55149,55150,55152,55154,55156,55158],{"class":78,"line":9875},[76,55151,54841],{"class":250},[76,55153,51507],{"class":93},[76,55155,899],{"class":250},[76,55157,51562],{"class":89},[76,55159,1363],{"class":93},[76,55161,55162,55164,55166,55168,55170],{"class":78,"line":9884},[76,55163,54855],{"class":250},[76,55165,51507],{"class":93},[76,55167,899],{"class":250},[76,55169,51562],{"class":89},[76,55171,1363],{"class":93},[76,55173,55174,55176,55178,55181,55183,55185,55187,55189,55191,55193,55195,55198],{"class":78,"line":9889},[76,55175,54954],{"class":250},[76,55177,51507],{"class":93},[76,55179,55180],{"class":250},"rgba",[76,55182,202],{"class":93},[76,55184,392],{"class":250},[76,55186,12507],{"class":93},[76,55188,392],{"class":250},[76,55190,12507],{"class":93},[76,55192,392],{"class":250},[76,55194,12507],{"class":93},[76,55196,55197],{"class":250},".4",[76,55199,2791],{"class":93},[76,55201,55202,55205,55207,55209,55211],{"class":78,"line":9895},[76,55203,55204],{"class":250},"      border-radius",[76,55206,51507],{"class":93},[76,55208,646],{"class":250},[76,55210,51562],{"class":89},[76,55212,1363],{"class":93},[76,55214,55215],{"class":78,"line":9916},[76,55216,2259],{"class":93},[76,55218,55219],{"class":78,"line":9922},[76,55220,2472],{"emptyLinePlaceholder":125},[76,55222,55223,55226],{"class":78,"line":9936},[76,55224,55225],{"class":2035},"    .activate",[76,55227,15644],{"class":93},[76,55229,55230,55232,55234,55237],{"class":78,"line":9942},[76,55231,54954],{"class":250},[76,55233,51507],{"class":93},[76,55235,55236],{"class":250},"#f7f7f7",[76,55238,1363],{"class":93},[76,55240,55241],{"class":78,"line":9969},[76,55242,2259],{"class":93},[76,55244,55245,55247,55249],{"class":78,"line":9978},[76,55246,52487],{"class":93},[76,55248,117],{"class":51370},[76,55250,51377],{"class":93},[76,55252,55253,55255,55257],{"class":78,"line":9984},[76,55254,51855],{"class":93},[76,55256,51404],{"class":51370},[76,55258,51377],{"class":93},[76,55260,55261],{"class":78,"line":9992},[76,55262,2472],{"emptyLinePlaceholder":125},[76,55264,55265,55267,55269],{"class":78,"line":9997},[76,55266,1109],{"class":93},[76,55268,51870],{"class":51370},[76,55270,51377],{"class":93},[76,55272,55273,55275,55277,55279,55281,55283],{"class":78,"line":16676},[76,55274,52214],{"class":93},[76,55276,51681],{"class":51370},[76,55278,53556],{"class":2035},[76,55280,247],{"class":93},[76,55282,53561],{"class":305},[76,55284,51377],{"class":93},[76,55286,55287,55289,55291,55293,55295,55298],{"class":78,"line":16682},[76,55288,51411],{"class":93},[76,55290,51681],{"class":51370},[76,55292,53556],{"class":2035},[76,55294,247],{"class":93},[76,55296,55297],{"class":305},"\"slider-wrapper\"",[76,55299,51377],{"class":93},[76,55301,55302,55305,55307,55310,55312,55315,55318,55320,55322],{"class":78,"line":16705},[76,55303,55304],{"class":93},"      \u003C",[76,55306,56],{"class":51370},[76,55308,55309],{"class":2035}," src",[76,55311,247],{"class":93},[76,55313,55314],{"class":305},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[76,55316,55317],{"class":2035}," alt",[76,55319,247],{"class":93},[76,55321,7724],{"class":305},[76,55323,51377],{"class":93},[76,55325,55326,55328,55330],{"class":78,"line":16711},[76,55327,51846],{"class":93},[76,55329,51681],{"class":51370},[76,55331,51377],{"class":93},[76,55333,55334,55336,55338,55340,55342,55345],{"class":78,"line":16734},[76,55335,51411],{"class":93},[76,55337,51681],{"class":51370},[76,55339,53556],{"class":2035},[76,55341,247],{"class":93},[76,55343,55344],{"class":305},"\"slider-footer\"",[76,55346,51377],{"class":93},[76,55348,55349,55351,55353,55356,55358],{"class":78,"line":16748},[76,55350,55304],{"class":93},[76,55352,14],{"class":51370},[76,55354,55355],{"class":93},">对人类来说会不会太超前了?\u003C\u002F",[76,55357,14],{"class":51370},[76,55359,51377],{"class":93},[76,55361,55362,55364,55366],{"class":78,"line":16768},[76,55363,55304],{"class":93},[76,55365,1206],{"class":51370},[76,55367,51377],{"class":93},[76,55369,55370,55373,55375,55377,55379,55382,55385,55387],{"class":78,"line":16774},[76,55371,55372],{"class":93},"        \u003C",[76,55374,155],{"class":51370},[76,55376,53556],{"class":2035},[76,55378,247],{"class":93},[76,55380,55381],{"class":305},"\"activate\"",[76,55383,55384],{"class":93},">\u003C\u002F",[76,55386,155],{"class":51370},[76,55388,51377],{"class":93},[76,55390,55391,55393,55395,55397,55399],{"class":78,"line":16785},[76,55392,55372],{"class":93},[76,55394,155],{"class":51370},[76,55396,55384],{"class":93},[76,55398,155],{"class":51370},[76,55400,51377],{"class":93},[76,55402,55403,55405,55407,55409,55411],{"class":78,"line":16808},[76,55404,55372],{"class":93},[76,55406,155],{"class":51370},[76,55408,55384],{"class":93},[76,55410,155],{"class":51370},[76,55412,51377],{"class":93},[76,55414,55415,55417,55419,55421,55423],{"class":78,"line":16830},[76,55416,55372],{"class":93},[76,55418,155],{"class":51370},[76,55420,55384],{"class":93},[76,55422,155],{"class":51370},[76,55424,51377],{"class":93},[76,55426,55427,55429,55431,55433,55435],{"class":78,"line":16835},[76,55428,55372],{"class":93},[76,55430,155],{"class":51370},[76,55432,55384],{"class":93},[76,55434,155],{"class":51370},[76,55436,51377],{"class":93},[76,55438,55439,55441,55443,55445,55447],{"class":78,"line":16841},[76,55440,55372],{"class":93},[76,55442,155],{"class":51370},[76,55444,55384],{"class":93},[76,55446,155],{"class":51370},[76,55448,51377],{"class":93},[76,55450,55451,55453,55455,55457,55459],{"class":78,"line":16855},[76,55452,55372],{"class":93},[76,55454,155],{"class":51370},[76,55456,55384],{"class":93},[76,55458,155],{"class":51370},[76,55460,51377],{"class":93},[76,55462,55463,55465,55467,55469,55471],{"class":78,"line":16868},[76,55464,55372],{"class":93},[76,55466,155],{"class":51370},[76,55468,55384],{"class":93},[76,55470,155],{"class":51370},[76,55472,51377],{"class":93},[76,55474,55475,55478,55480],{"class":78,"line":16873},[76,55476,55477],{"class":93},"      \u003C\u002F",[76,55479,1206],{"class":51370},[76,55481,51377],{"class":93},[76,55483,55484,55486,55488],{"class":78,"line":16887},[76,55485,51846],{"class":93},[76,55487,51681],{"class":51370},[76,55489,51377],{"class":93},[76,55491,55492,55494,55496],{"class":78,"line":16892},[76,55493,52487],{"class":93},[76,55495,51681],{"class":51370},[76,55497,51377],{"class":93},[76,55499,55500,55502,55504],{"class":78,"line":16898},[76,55501,52214],{"class":93},[76,55503,51883],{"class":51370},[76,55505,51377],{"class":93},[76,55507,55508,55510,55513,55515],{"class":78,"line":16903},[76,55509,11293],{"class":89},[76,55511,55512],{"class":250}," arrImage",[76,55514,13636],{"class":89},[76,55516,55517],{"class":93}," [\n",[76,55519,55520,55523,55526,55529,55532,55535,55538],{"class":78,"line":16917},[76,55521,55522],{"class":93},"      { url: ",[76,55524,55525],{"class":305},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[76,55527,55528],{"class":93},", title: ",[76,55530,55531],{"class":305},"'对人类来说会不会太超前了?'",[76,55533,55534],{"class":93},", color: ",[76,55536,55537],{"class":305},"'rgba(100,67,68)'",[76,55539,55540],{"class":93}," },\n",[76,55542,55543,55545,55548,55550,55553,55555,55558],{"class":78,"line":16922},[76,55544,55522],{"class":93},[76,55546,55547],{"class":305},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[76,55549,55528],{"class":93},[76,55551,55552],{"class":305},"'开启剑与雪的黑暗传说!'",[76,55554,55534],{"class":93},[76,55556,55557],{"class":305},"'rgba(43,35,26)'",[76,55559,55540],{"class":93},[76,55561,55562,55564,55567,55569,55572,55574,55577],{"class":78,"line":16927},[76,55563,55522],{"class":93},[76,55565,55566],{"class":305},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[76,55568,55528],{"class":93},[76,55570,55571],{"class":305},"'真正的jo厨出现了!'",[76,55573,55534],{"class":93},[76,55575,55576],{"class":305},"'rgba(36,31,33)'",[76,55578,55540],{"class":93},[76,55580,55581,55583,55586,55588,55591,55593,55596],{"class":78,"line":16941},[76,55582,55522],{"class":93},[76,55584,55585],{"class":305},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[76,55587,55528],{"class":93},[76,55589,55590],{"class":305},"'李玉刚:让世界通过b站看到东方大国文化'",[76,55592,55534],{"class":93},[76,55594,55595],{"class":305},"'rgba(139,98,66)'",[76,55597,55540],{"class":93},[76,55599,55600,55602,55605,55607,55610,55612,55615],{"class":78,"line":16953},[76,55601,55522],{"class":93},[76,55603,55604],{"class":305},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[76,55606,55528],{"class":93},[76,55608,55609],{"class":305},"'快来分享你的寒假日常吧'",[76,55611,55534],{"class":93},[76,55613,55614],{"class":305},"'rgba(67,90,92)'",[76,55616,55540],{"class":93},[76,55618,55619,55621,55624,55626,55629,55631,55634],{"class":78,"line":16958},[76,55620,55522],{"class":93},[76,55622,55623],{"class":305},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[76,55625,55528],{"class":93},[76,55627,55628],{"class":305},"'哔哩哔哩小年YEAR'",[76,55630,55534],{"class":93},[76,55632,55633],{"class":305},"'rgba(166,131,143)'",[76,55635,55540],{"class":93},[76,55637,55638,55640,55643,55645,55648,55650,55653],{"class":78,"line":16971},[76,55639,55522],{"class":93},[76,55641,55642],{"class":305},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[76,55644,55528],{"class":93},[76,55646,55647],{"class":305},"'一站式解决你的电脑配置问题'",[76,55649,55534],{"class":93},[76,55651,55652],{"class":305},"'rgba(53,29,25)'",[76,55654,55540],{"class":93},[76,55656,55657,55659,55662,55664,55667,55669,55672],{"class":78,"line":16976},[76,55658,55522],{"class":93},[76,55660,55661],{"class":305},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[76,55663,55528],{"class":93},[76,55665,55666],{"class":305},"'谁不想和小猫咪贴贴呢?'",[76,55668,55534],{"class":93},[76,55670,55671],{"class":305},"'rgba(99,72,114)'",[76,55673,55674],{"class":93}," }\n",[76,55676,55677],{"class":78,"line":16981},[76,55678,53179],{"class":93},[76,55680,55681,55683,55686,55688,55690,55692,55694,55697],{"class":78,"line":16986},[76,55682,11293],{"class":89},[76,55684,55685],{"class":250}," img",[76,55687,13636],{"class":89},[76,55689,54466],{"class":93},[76,55691,54469],{"class":2035},[76,55693,202],{"class":93},[76,55695,55696],{"class":305},"'.slider-wrapper img'",[76,55698,208],{"class":93},[76,55700,55701,55703,55705,55707,55709,55711,55713,55716],{"class":78,"line":16999},[76,55702,11293],{"class":89},[76,55704,6897],{"class":250},[76,55706,13636],{"class":89},[76,55708,54466],{"class":93},[76,55710,54469],{"class":2035},[76,55712,202],{"class":93},[76,55714,55715],{"class":305},"'.slider-footer p'",[76,55717,208],{"class":93},[76,55719,55720,55722,55725,55727,55729,55731,55733,55736],{"class":78,"line":17004},[76,55721,11293],{"class":89},[76,55723,55724],{"class":250}," color",[76,55726,13636],{"class":89},[76,55728,54466],{"class":93},[76,55730,54469],{"class":2035},[76,55732,202],{"class":93},[76,55734,55735],{"class":305},"'.slider-footer'",[76,55737,208],{"class":93},[76,55739,55740,55742,55745,55747,55749,55752,55754,55757],{"class":78,"line":32703},[76,55741,11293],{"class":89},[76,55743,55744],{"class":250}," lis",[76,55746,13636],{"class":89},[76,55748,54466],{"class":93},[76,55750,55751],{"class":2035},"querySelectorAll",[76,55753,202],{"class":93},[76,55755,55756],{"class":305},"'.slider-footer ul li'",[76,55758,208],{"class":93},[76,55760,55761,55763,55765,55767],{"class":78,"line":32709},[76,55762,52289],{"class":89},[76,55764,9510],{"class":93},[76,55766,247],{"class":89},[76,55768,55769],{"class":250}," 1\n",[76,55771,55772,55774,55777,55779,55781,55783,55785],{"class":78,"line":32715},[76,55773,52289],{"class":89},[76,55775,55776],{"class":93}," timer ",[76,55778,247],{"class":89},[76,55780,54514],{"class":2035},[76,55782,202],{"class":93},[76,55784,54519],{"class":89},[76,55786,54522],{"class":93},[76,55788,55789,55792,55794],{"class":78,"line":32721},[76,55790,55791],{"class":93},"      img.src ",[76,55793,247],{"class":89},[76,55795,55796],{"class":93}," arrImage[i].url\n",[76,55798,55799,55802,55804],{"class":78,"line":32727},[76,55800,55801],{"class":93},"      p.innerHTML ",[76,55803,247],{"class":89},[76,55805,55806],{"class":93}," arrImage[i].title\n",[76,55808,55809,55812,55814],{"class":78,"line":32738},[76,55810,55811],{"class":93},"      color.style.backgroundColor ",[76,55813,247],{"class":89},[76,55815,55816],{"class":93}," arrImage[i].color\n",[76,55818,55819],{"class":78,"line":32744},[76,55820,55821],{"class":82},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[76,55823,55824],{"class":78,"line":32764},[76,55825,55826],{"class":82},"      \u002F\u002F li.classList.add('activate')\n",[76,55828,55829],{"class":78,"line":32770},[76,55830,55831],{"class":82},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[76,55833,55834],{"class":78,"line":32781},[76,55835,55836],{"class":82},"      \u002F\u002F lis[i].classList.remove('activate')\n",[76,55838,55839,55842,55844,55846,55849,55852,55855,55857,55860],{"class":78,"line":32787},[76,55840,55841],{"class":93},"      document.",[76,55843,54469],{"class":2035},[76,55845,202],{"class":93},[76,55847,55848],{"class":305},"'.activate'",[76,55850,55851],{"class":93},")?.classList.",[76,55853,55854],{"class":2035},"toggle",[76,55856,202],{"class":93},[76,55858,55859],{"class":305},"'activate'",[76,55861,208],{"class":93},[76,55863,55864,55867,55869,55871,55873],{"class":78,"line":32793},[76,55865,55866],{"class":93},"      lis[i].classList.",[76,55868,5406],{"class":2035},[76,55870,202],{"class":93},[76,55872,55859],{"class":305},[76,55874,208],{"class":93},[76,55876,55877],{"class":78,"line":32799},[76,55878,2472],{"emptyLinePlaceholder":125},[76,55880,55881,55884,55886,55888,55890,55892,55894,55896,55899],{"class":78,"line":32805},[76,55882,55883],{"class":93},"      i ",[76,55885,247],{"class":89},[76,55887,54553],{"class":93},[76,55889,681],{"class":89},[76,55891,25191],{"class":250},[76,55893,13786],{"class":93},[76,55895,106],{"class":89},[76,55897,55898],{"class":93}," arrImage.",[76,55900,55901],{"class":250},"length\n",[76,55903,55904],{"class":78,"line":32811},[76,55905,2472],{"emptyLinePlaceholder":125},[76,55907,55908,55910,55912],{"class":78,"line":32817},[76,55909,54605],{"class":93},[76,55911,6482],{"class":250},[76,55913,208],{"class":93},[76,55915,55916,55918,55920],{"class":78,"line":32823},[76,55917,52487],{"class":93},[76,55919,51883],{"class":51370},[76,55921,51377],{"class":93},[76,55923,55924,55926,55928],{"class":78,"line":32843},[76,55925,51855],{"class":93},[76,55927,51870],{"class":51370},[76,55929,51377],{"class":93},[76,55931,55932],{"class":78,"line":32849},[76,55933,2472],{"emptyLinePlaceholder":125},[76,55935,55936,55938,55940],{"class":78,"line":32865},[76,55937,51855],{"class":93},[76,55939,50705],{"class":51370},[76,55941,51377],{"class":93},[14,55943,55944],{},[56,55945],{"alt":58,"src":55946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55948,55949],{},"?.就是短路保护,确保输出正常进行",[14,55951,55952],{},"不要忘记取余%,有时候可以用",[14,55954,55955],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[152,55957,55958],{"start":86},[155,55959,55960],{},"法2",[67,55962,55964],{"className":50703,"code":55963,"language":50705,"meta":58,"style":58},"\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",[73,55965,55966,55976,55990,55994,56002,56016,56036,56048,56056,56062,56072,56082,56086,56090,56096,56106,56110,56114,56120,56130,56142,56154,56168,56172,56176,56182,56192,56202,56212,56224,56236,56246,56250,56254,56262,56272,56284,56296,56308,56312,56316,56322,56332,56344,56356,56366,56376,56386,56398,56410,56414,56418,56426,56438,56450,56476,56488,56492,56496,56502,56512,56516,56524,56532,56536,56544,56558,56572,56592,56600,56614,56626,56634,56652,56664,56676,56688,56700,56712,56724,56736,56744,56752,56760,56768,56779,56795,56811,56827,56843,56859,56875,56891,56907,56911,56916,56934,56952,56962,56967,56972,56983,56989,57004,57013,57017,57022,57031,57036,57045,57050,57055,57060,57083,57113,57117,57125,57129,57137,57145,57149],{"__ignoreMap":58},[76,55967,55968,55970,55972,55974],{"class":78,"line":79},[76,55969,51367],{"class":93},[76,55971,51371],{"class":51370},[76,55973,51374],{"class":2035},[76,55975,51377],{"class":93},[76,55977,55978,55980,55982,55984,55986,55988],{"class":78,"line":86},[76,55979,1109],{"class":93},[76,55981,50705],{"class":51370},[76,55983,51386],{"class":2035},[76,55985,247],{"class":93},[76,55987,51391],{"class":305},[76,55989,51377],{"class":93},[76,55991,55992],{"class":78,"line":97},[76,55993,2472],{"emptyLinePlaceholder":125},[76,55995,55996,55998,56000],{"class":78,"line":103},[76,55997,1109],{"class":93},[76,55999,51404],{"class":51370},[76,56001,51377],{"class":93},[76,56003,56004,56006,56008,56010,56012,56014],{"class":78,"line":1273},[76,56005,52214],{"class":93},[76,56007,51414],{"class":51370},[76,56009,51417],{"class":2035},[76,56011,247],{"class":93},[76,56013,51422],{"class":305},[76,56015,51377],{"class":93},[76,56017,56018,56020,56022,56024,56026,56028,56030,56032,56034],{"class":78,"line":1287},[76,56019,52214],{"class":93},[76,56021,51414],{"class":51370},[76,56023,14992],{"class":2035},[76,56025,247],{"class":93},[76,56027,51461],{"class":305},[76,56029,51441],{"class":2035},[76,56031,247],{"class":93},[76,56033,51468],{"class":305},[76,56035,51377],{"class":93},[76,56037,56038,56040,56042,56044,56046],{"class":78,"line":1293},[76,56039,52214],{"class":93},[76,56041,51477],{"class":51370},[76,56043,51480],{"class":93},[76,56045,51477],{"class":51370},[76,56047,51377],{"class":93},[76,56049,56050,56052,56054],{"class":78,"line":1384},[76,56051,52214],{"class":93},[76,56053,117],{"class":51370},[76,56055,51377],{"class":93},[76,56057,56058,56060],{"class":78,"line":1390},[76,56059,6475],{"class":51370},[76,56061,15644],{"class":93},[76,56063,56064,56066,56068,56070],{"class":78,"line":1402},[76,56065,54765],{"class":250},[76,56067,51507],{"class":93},[76,56069,392],{"class":250},[76,56071,1363],{"class":93},[76,56073,56074,56076,56078,56080],{"class":78,"line":1684},[76,56075,54776],{"class":250},[76,56077,51507],{"class":93},[76,56079,392],{"class":250},[76,56081,1363],{"class":93},[76,56083,56084],{"class":78,"line":1689},[76,56085,2259],{"class":93},[76,56087,56088],{"class":78,"line":1695},[76,56089,2472],{"emptyLinePlaceholder":125},[76,56091,56092,56094],{"class":78,"line":1700},[76,56093,54795],{"class":51370},[76,56095,15644],{"class":93},[76,56097,56098,56100,56102,56104],{"class":78,"line":1714},[76,56099,54802],{"class":250},[76,56101,51507],{"class":93},[76,56103,54807],{"class":250},[76,56105,1363],{"class":93},[76,56107,56108],{"class":78,"line":1719},[76,56109,2259],{"class":93},[76,56111,56112],{"class":78,"line":1725},[76,56113,2472],{"emptyLinePlaceholder":125},[76,56115,56116,56118],{"class":78,"line":1746},[76,56117,54822],{"class":2035},[76,56119,15644],{"class":93},[76,56121,56122,56124,56126,56128],{"class":78,"line":1751},[76,56123,54829],{"class":250},[76,56125,51507],{"class":93},[76,56127,54834],{"class":250},[76,56129,1363],{"class":93},[76,56131,56132,56134,56136,56138,56140],{"class":78,"line":1765},[76,56133,54841],{"class":250},[76,56135,51507],{"class":93},[76,56137,54846],{"class":250},[76,56139,51562],{"class":89},[76,56141,1363],{"class":93},[76,56143,56144,56146,56148,56150,56152],{"class":78,"line":1770},[76,56145,54855],{"class":250},[76,56147,51507],{"class":93},[76,56149,1611],{"class":250},[76,56151,51562],{"class":89},[76,56153,1363],{"class":93},[76,56155,56156,56158,56160,56162,56164,56166],{"class":78,"line":1799},[76,56157,54776],{"class":250},[76,56159,51507],{"class":93},[76,56161,512],{"class":250},[76,56163,51562],{"class":89},[76,56165,51626],{"class":250},[76,56167,1363],{"class":93},[76,56169,56170],{"class":78,"line":1804},[76,56171,2259],{"class":93},[76,56173,56174],{"class":78,"line":1821},[76,56175,2472],{"emptyLinePlaceholder":125},[76,56177,56178,56180],{"class":78,"line":1826},[76,56179,54890],{"class":2035},[76,56181,15644],{"class":93},[76,56183,56184,56186,56188,56190],{"class":78,"line":1831},[76,56185,54829],{"class":250},[76,56187,51507],{"class":93},[76,56189,54901],{"class":250},[76,56191,1363],{"class":93},[76,56193,56194,56196,56198,56200],{"class":78,"line":1836},[76,56195,54908],{"class":250},[76,56197,51507],{"class":93},[76,56199,392],{"class":250},[76,56201,1363],{"class":93},[76,56203,56204,56206,56208,56210],{"class":78,"line":1850},[76,56205,54919],{"class":250},[76,56207,51507],{"class":93},[76,56209,392],{"class":250},[76,56211,1363],{"class":93},[76,56213,56214,56216,56218,56220,56222],{"class":78,"line":1855},[76,56215,54841],{"class":250},[76,56217,51507],{"class":93},[76,56219,512],{"class":250},[76,56221,106],{"class":89},[76,56223,1363],{"class":93},[76,56225,56226,56228,56230,56232,56234],{"class":78,"line":2649},[76,56227,54855],{"class":250},[76,56229,51507],{"class":93},[76,56231,774],{"class":250},[76,56233,106],{"class":89},[76,56235,1363],{"class":93},[76,56237,56238,56240,56242,56244],{"class":78,"line":2663},[76,56239,54954],{"class":250},[76,56241,51507],{"class":93},[76,56243,54959],{"class":250},[76,56245,1363],{"class":93},[76,56247,56248],{"class":78,"line":2671},[76,56249,2259],{"class":93},[76,56251,56252],{"class":78,"line":2676},[76,56253,2472],{"emptyLinePlaceholder":125},[76,56255,56256,56258,56260],{"class":78,"line":2682},[76,56257,54890],{"class":2035},[76,56259,6897],{"class":51370},[76,56261,15644],{"class":93},[76,56263,56264,56266,56268,56270],{"class":78,"line":2688},[76,56265,54829],{"class":250},[76,56267,51507],{"class":93},[76,56269,54901],{"class":250},[76,56271,1363],{"class":93},[76,56273,56274,56276,56278,56280,56282],{"class":78,"line":2693},[76,56275,54992],{"class":250},[76,56277,51507],{"class":93},[76,56279,1100],{"class":250},[76,56281,51562],{"class":89},[76,56283,1363],{"class":93},[76,56285,56286,56288,56290,56292,56294],{"class":78,"line":8020},[76,56287,54908],{"class":250},[76,56289,51507],{"class":93},[76,56291,899],{"class":250},[76,56293,51562],{"class":89},[76,56295,1363],{"class":93},[76,56297,56298,56300,56302,56304,56306],{"class":78,"line":8044},[76,56299,55017],{"class":250},[76,56301,51507],{"class":93},[76,56303,520],{"class":250},[76,56305,51562],{"class":89},[76,56307,1363],{"class":93},[76,56309,56310],{"class":78,"line":8049},[76,56311,2259],{"class":93},[76,56313,56314],{"class":78,"line":8055},[76,56315,2472],{"emptyLinePlaceholder":125},[76,56317,56318,56320],{"class":78,"line":8082},[76,56319,55038],{"class":51370},[76,56321,15644],{"class":93},[76,56323,56324,56326,56328,56330],{"class":78,"line":8087},[76,56325,54829],{"class":250},[76,56327,51507],{"class":93},[76,56329,54901],{"class":250},[76,56331,1363],{"class":93},[76,56333,56334,56336,56338,56340,56342],{"class":78,"line":8093},[76,56335,55017],{"class":250},[76,56337,51507],{"class":93},[76,56339,980],{"class":250},[76,56341,51562],{"class":89},[76,56343,1363],{"class":93},[76,56345,56346,56348,56350,56352,56354],{"class":78,"line":8105},[76,56347,54908],{"class":250},[76,56349,51507],{"class":93},[76,56351,899],{"class":250},[76,56353,51562],{"class":89},[76,56355,1363],{"class":93},[76,56357,56358,56360,56362,56364],{"class":78,"line":8117},[76,56359,55079],{"class":250},[76,56361,51507],{"class":93},[76,56363,51547],{"class":250},[76,56365,1363],{"class":93},[76,56367,56368,56370,56372,56374],{"class":78,"line":8129},[76,56369,55090],{"class":250},[76,56371,51507],{"class":93},[76,56373,51738],{"class":250},[76,56375,1363],{"class":93},[76,56377,56378,56380,56382,56384],{"class":78,"line":9788},[76,56379,54829],{"class":250},[76,56381,51507],{"class":93},[76,56383,54901],{"class":250},[76,56385,1363],{"class":93},[76,56387,56388,56390,56392,56394,56396],{"class":78,"line":9813},[76,56389,54841],{"class":250},[76,56391,51507],{"class":93},[76,56393,4064],{"class":250},[76,56395,51562],{"class":89},[76,56397,1363],{"class":93},[76,56399,56400,56402,56404,56406,56408],{"class":78,"line":9836},[76,56401,54855],{"class":250},[76,56403,51507],{"class":93},[76,56405,899],{"class":250},[76,56407,51562],{"class":89},[76,56409,1363],{"class":93},[76,56411,56412],{"class":78,"line":9860},[76,56413,2259],{"class":93},[76,56415,56416],{"class":78,"line":9865},[76,56417,2472],{"emptyLinePlaceholder":125},[76,56419,56420,56422,56424],{"class":78,"line":9870},[76,56421,55038],{"class":51370},[76,56423,55145],{"class":51370},[76,56425,15644],{"class":93},[76,56427,56428,56430,56432,56434,56436],{"class":78,"line":9875},[76,56429,54841],{"class":250},[76,56431,51507],{"class":93},[76,56433,899],{"class":250},[76,56435,51562],{"class":89},[76,56437,1363],{"class":93},[76,56439,56440,56442,56444,56446,56448],{"class":78,"line":9884},[76,56441,54855],{"class":250},[76,56443,51507],{"class":93},[76,56445,899],{"class":250},[76,56447,51562],{"class":89},[76,56449,1363],{"class":93},[76,56451,56452,56454,56456,56458,56460,56462,56464,56466,56468,56470,56472,56474],{"class":78,"line":9889},[76,56453,54954],{"class":250},[76,56455,51507],{"class":93},[76,56457,55180],{"class":250},[76,56459,202],{"class":93},[76,56461,392],{"class":250},[76,56463,12507],{"class":93},[76,56465,392],{"class":250},[76,56467,12507],{"class":93},[76,56469,392],{"class":250},[76,56471,12507],{"class":93},[76,56473,55197],{"class":250},[76,56475,2791],{"class":93},[76,56477,56478,56480,56482,56484,56486],{"class":78,"line":9895},[76,56479,55204],{"class":250},[76,56481,51507],{"class":93},[76,56483,646],{"class":250},[76,56485,51562],{"class":89},[76,56487,1363],{"class":93},[76,56489,56490],{"class":78,"line":9916},[76,56491,2259],{"class":93},[76,56493,56494],{"class":78,"line":9922},[76,56495,2472],{"emptyLinePlaceholder":125},[76,56497,56498,56500],{"class":78,"line":9936},[76,56499,55225],{"class":2035},[76,56501,15644],{"class":93},[76,56503,56504,56506,56508,56510],{"class":78,"line":9942},[76,56505,54954],{"class":250},[76,56507,51507],{"class":93},[76,56509,55236],{"class":250},[76,56511,1363],{"class":93},[76,56513,56514],{"class":78,"line":9969},[76,56515,2259],{"class":93},[76,56517,56518,56520,56522],{"class":78,"line":9978},[76,56519,52487],{"class":93},[76,56521,117],{"class":51370},[76,56523,51377],{"class":93},[76,56525,56526,56528,56530],{"class":78,"line":9984},[76,56527,51855],{"class":93},[76,56529,51404],{"class":51370},[76,56531,51377],{"class":93},[76,56533,56534],{"class":78,"line":9992},[76,56535,2472],{"emptyLinePlaceholder":125},[76,56537,56538,56540,56542],{"class":78,"line":9997},[76,56539,1109],{"class":93},[76,56541,51870],{"class":51370},[76,56543,51377],{"class":93},[76,56545,56546,56548,56550,56552,56554,56556],{"class":78,"line":16676},[76,56547,52214],{"class":93},[76,56549,51681],{"class":51370},[76,56551,53556],{"class":2035},[76,56553,247],{"class":93},[76,56555,53561],{"class":305},[76,56557,51377],{"class":93},[76,56559,56560,56562,56564,56566,56568,56570],{"class":78,"line":16682},[76,56561,51411],{"class":93},[76,56563,51681],{"class":51370},[76,56565,53556],{"class":2035},[76,56567,247],{"class":93},[76,56569,55297],{"class":305},[76,56571,51377],{"class":93},[76,56573,56574,56576,56578,56580,56582,56584,56586,56588,56590],{"class":78,"line":16705},[76,56575,55304],{"class":93},[76,56577,56],{"class":51370},[76,56579,55309],{"class":2035},[76,56581,247],{"class":93},[76,56583,55314],{"class":305},[76,56585,55317],{"class":2035},[76,56587,247],{"class":93},[76,56589,7724],{"class":305},[76,56591,51377],{"class":93},[76,56593,56594,56596,56598],{"class":78,"line":16711},[76,56595,51846],{"class":93},[76,56597,51681],{"class":51370},[76,56599,51377],{"class":93},[76,56601,56602,56604,56606,56608,56610,56612],{"class":78,"line":16734},[76,56603,51411],{"class":93},[76,56605,51681],{"class":51370},[76,56607,53556],{"class":2035},[76,56609,247],{"class":93},[76,56611,55344],{"class":305},[76,56613,51377],{"class":93},[76,56615,56616,56618,56620,56622,56624],{"class":78,"line":16748},[76,56617,55304],{"class":93},[76,56619,14],{"class":51370},[76,56621,55355],{"class":93},[76,56623,14],{"class":51370},[76,56625,51377],{"class":93},[76,56627,56628,56630,56632],{"class":78,"line":16768},[76,56629,55304],{"class":93},[76,56631,1206],{"class":51370},[76,56633,51377],{"class":93},[76,56635,56636,56638,56640,56642,56644,56646,56648,56650],{"class":78,"line":16774},[76,56637,55372],{"class":93},[76,56639,155],{"class":51370},[76,56641,53556],{"class":2035},[76,56643,247],{"class":93},[76,56645,55381],{"class":305},[76,56647,55384],{"class":93},[76,56649,155],{"class":51370},[76,56651,51377],{"class":93},[76,56653,56654,56656,56658,56660,56662],{"class":78,"line":16785},[76,56655,55372],{"class":93},[76,56657,155],{"class":51370},[76,56659,55384],{"class":93},[76,56661,155],{"class":51370},[76,56663,51377],{"class":93},[76,56665,56666,56668,56670,56672,56674],{"class":78,"line":16808},[76,56667,55372],{"class":93},[76,56669,155],{"class":51370},[76,56671,55384],{"class":93},[76,56673,155],{"class":51370},[76,56675,51377],{"class":93},[76,56677,56678,56680,56682,56684,56686],{"class":78,"line":16830},[76,56679,55372],{"class":93},[76,56681,155],{"class":51370},[76,56683,55384],{"class":93},[76,56685,155],{"class":51370},[76,56687,51377],{"class":93},[76,56689,56690,56692,56694,56696,56698],{"class":78,"line":16835},[76,56691,55372],{"class":93},[76,56693,155],{"class":51370},[76,56695,55384],{"class":93},[76,56697,155],{"class":51370},[76,56699,51377],{"class":93},[76,56701,56702,56704,56706,56708,56710],{"class":78,"line":16841},[76,56703,55372],{"class":93},[76,56705,155],{"class":51370},[76,56707,55384],{"class":93},[76,56709,155],{"class":51370},[76,56711,51377],{"class":93},[76,56713,56714,56716,56718,56720,56722],{"class":78,"line":16855},[76,56715,55372],{"class":93},[76,56717,155],{"class":51370},[76,56719,55384],{"class":93},[76,56721,155],{"class":51370},[76,56723,51377],{"class":93},[76,56725,56726,56728,56730,56732,56734],{"class":78,"line":16868},[76,56727,55372],{"class":93},[76,56729,155],{"class":51370},[76,56731,55384],{"class":93},[76,56733,155],{"class":51370},[76,56735,51377],{"class":93},[76,56737,56738,56740,56742],{"class":78,"line":16873},[76,56739,55477],{"class":93},[76,56741,1206],{"class":51370},[76,56743,51377],{"class":93},[76,56745,56746,56748,56750],{"class":78,"line":16887},[76,56747,51846],{"class":93},[76,56749,51681],{"class":51370},[76,56751,51377],{"class":93},[76,56753,56754,56756,56758],{"class":78,"line":16892},[76,56755,52487],{"class":93},[76,56757,51681],{"class":51370},[76,56759,51377],{"class":93},[76,56761,56762,56764,56766],{"class":78,"line":16898},[76,56763,52214],{"class":93},[76,56765,51883],{"class":51370},[76,56767,51377],{"class":93},[76,56769,56770,56772,56775,56777],{"class":78,"line":16903},[76,56771,11293],{"class":89},[76,56773,56774],{"class":250}," sliderData",[76,56776,13636],{"class":89},[76,56778,55517],{"class":93},[76,56780,56781,56783,56785,56787,56789,56791,56793],{"class":78,"line":16917},[76,56782,55522],{"class":93},[76,56784,55525],{"class":305},[76,56786,55528],{"class":93},[76,56788,55531],{"class":305},[76,56790,55534],{"class":93},[76,56792,55537],{"class":305},[76,56794,55540],{"class":93},[76,56796,56797,56799,56801,56803,56805,56807,56809],{"class":78,"line":16922},[76,56798,55522],{"class":93},[76,56800,55547],{"class":305},[76,56802,55528],{"class":93},[76,56804,55552],{"class":305},[76,56806,55534],{"class":93},[76,56808,55557],{"class":305},[76,56810,55540],{"class":93},[76,56812,56813,56815,56817,56819,56821,56823,56825],{"class":78,"line":16927},[76,56814,55522],{"class":93},[76,56816,55566],{"class":305},[76,56818,55528],{"class":93},[76,56820,55571],{"class":305},[76,56822,55534],{"class":93},[76,56824,55576],{"class":305},[76,56826,55540],{"class":93},[76,56828,56829,56831,56833,56835,56837,56839,56841],{"class":78,"line":16941},[76,56830,55522],{"class":93},[76,56832,55585],{"class":305},[76,56834,55528],{"class":93},[76,56836,55590],{"class":305},[76,56838,55534],{"class":93},[76,56840,55595],{"class":305},[76,56842,55540],{"class":93},[76,56844,56845,56847,56849,56851,56853,56855,56857],{"class":78,"line":16953},[76,56846,55522],{"class":93},[76,56848,55604],{"class":305},[76,56850,55528],{"class":93},[76,56852,55609],{"class":305},[76,56854,55534],{"class":93},[76,56856,55614],{"class":305},[76,56858,55540],{"class":93},[76,56860,56861,56863,56865,56867,56869,56871,56873],{"class":78,"line":16958},[76,56862,55522],{"class":93},[76,56864,55623],{"class":305},[76,56866,55528],{"class":93},[76,56868,55628],{"class":305},[76,56870,55534],{"class":93},[76,56872,55633],{"class":305},[76,56874,55540],{"class":93},[76,56876,56877,56879,56881,56883,56885,56887,56889],{"class":78,"line":16971},[76,56878,55522],{"class":93},[76,56880,55642],{"class":305},[76,56882,55528],{"class":93},[76,56884,55647],{"class":305},[76,56886,55534],{"class":93},[76,56888,55652],{"class":305},[76,56890,55540],{"class":93},[76,56892,56893,56895,56897,56899,56901,56903,56905],{"class":78,"line":16976},[76,56894,55522],{"class":93},[76,56896,55661],{"class":305},[76,56898,55528],{"class":93},[76,56900,55666],{"class":305},[76,56902,55534],{"class":93},[76,56904,55671],{"class":305},[76,56906,55674],{"class":93},[76,56908,56909],{"class":78,"line":16981},[76,56910,53179],{"class":93},[76,56912,56913],{"class":78,"line":16986},[76,56914,56915],{"class":82},"    \u002F\u002F 1.获取元素\n",[76,56917,56918,56920,56922,56924,56926,56928,56930,56932],{"class":78,"line":16999},[76,56919,11293],{"class":89},[76,56921,55685],{"class":250},[76,56923,13636],{"class":89},[76,56925,54466],{"class":93},[76,56927,54469],{"class":2035},[76,56929,202],{"class":93},[76,56931,55696],{"class":305},[76,56933,208],{"class":93},[76,56935,56936,56938,56940,56942,56944,56946,56948,56950],{"class":78,"line":17004},[76,56937,11293],{"class":89},[76,56939,6897],{"class":250},[76,56941,13636],{"class":89},[76,56943,54466],{"class":93},[76,56945,54469],{"class":2035},[76,56947,202],{"class":93},[76,56949,55715],{"class":305},[76,56951,208],{"class":93},[76,56953,56954,56956,56958,56960],{"class":78,"line":32703},[76,56955,52289],{"class":89},[76,56957,9510],{"class":93},[76,56959,247],{"class":89},[76,56961,47403],{"class":250},[76,56963,56964],{"class":78,"line":32709},[76,56965,56966],{"class":82},"    \u002F\u002F 2.开启定时器\n",[76,56968,56969],{"class":78,"line":32715},[76,56970,56971],{"class":82},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[76,56973,56974,56977,56979,56981],{"class":78,"line":32721},[76,56975,56976],{"class":2035},"    setInterval",[76,56978,202],{"class":93},[76,56980,54519],{"class":89},[76,56982,54522],{"class":93},[76,56984,56985,56987],{"class":78,"line":32727},[76,56986,54527],{"class":93},[76,56988,2774],{"class":89},[76,56990,56991,56993,56995,56997,57000,57002],{"class":78,"line":32738},[76,56992,54550],{"class":89},[76,56994,54553],{"class":93},[76,56996,1782],{"class":89},[76,56998,56999],{"class":93}," sliderData.",[76,57001,52038],{"class":250},[76,57003,12514],{"class":93},[76,57005,57006,57009,57011],{"class":78,"line":32744},[76,57007,57008],{"class":93},"        i ",[76,57010,247],{"class":89},[76,57012,47403],{"class":250},[76,57014,57015],{"class":78,"line":32764},[76,57016,52468],{"class":93},[76,57018,57019],{"class":78,"line":32770},[76,57020,57021],{"class":82},"      \u002F\u002F 更换图片路径\n",[76,57023,57024,57026,57028],{"class":78,"line":32781},[76,57025,55791],{"class":93},[76,57027,247],{"class":89},[76,57029,57030],{"class":93}," sliderData[i].url\n",[76,57032,57033],{"class":78,"line":32787},[76,57034,57035],{"class":82},"      \u002F\u002F 把文字写到p里面\n",[76,57037,57038,57040,57042],{"class":78,"line":32793},[76,57039,55801],{"class":93},[76,57041,247],{"class":89},[76,57043,57044],{"class":93}," sliderData[i].title\n",[76,57046,57047],{"class":78,"line":32799},[76,57048,57049],{"class":82},"      \u002F\u002F 小圆点\n",[76,57051,57052],{"class":78,"line":32805},[76,57053,57054],{"class":82},"      \u002F\u002F 先删除以前的active\n",[76,57056,57057],{"class":78,"line":32811},[76,57058,57059],{"class":82},"      \u002F\u002F 只让当前li添加active\n",[76,57061,57062,57064,57066,57068,57071,57074,57077,57079,57081],{"class":78,"line":32817},[76,57063,55841],{"class":93},[76,57065,54469],{"class":2035},[76,57067,202],{"class":93},[76,57069,57070],{"class":305},"'.slider-footer .activate'",[76,57072,57073],{"class":93},").classList.",[76,57075,57076],{"class":2035},"remove",[76,57078,202],{"class":93},[76,57080,55859],{"class":305},[76,57082,208],{"class":93},[76,57084,57085,57087,57089,57091,57094,57096,57098,57100,57103,57105,57107,57109,57111],{"class":78,"line":32823},[76,57086,55841],{"class":93},[76,57088,54469],{"class":2035},[76,57090,202],{"class":93},[76,57092,57093],{"class":305},"`.slider-footer ul li:nth-child(${",[76,57095,641],{"class":93},[76,57097,45636],{"class":89},[76,57099,25191],{"class":250},[76,57101,57102],{"class":305},"})`",[76,57104,57073],{"class":93},[76,57106,5406],{"class":2035},[76,57108,202],{"class":93},[76,57110,55859],{"class":305},[76,57112,208],{"class":93},[76,57114,57115],{"class":78,"line":32843},[76,57116,2472],{"emptyLinePlaceholder":125},[76,57118,57119,57121,57123],{"class":78,"line":32849},[76,57120,54605],{"class":93},[76,57122,6482],{"class":250},[76,57124,208],{"class":93},[76,57126,57127],{"class":78,"line":32865},[76,57128,2472],{"emptyLinePlaceholder":125},[76,57130,57131,57133,57135],{"class":78,"line":32871},[76,57132,52487],{"class":93},[76,57134,51883],{"class":51370},[76,57136,51377],{"class":93},[76,57138,57139,57141,57143],{"class":78,"line":32885},[76,57140,51855],{"class":93},[76,57142,51870],{"class":51370},[76,57144,51377],{"class":93},[76,57146,57147],{"class":78,"line":32891},[76,57148,2472],{"emptyLinePlaceholder":125},[76,57150,57151,57153,57155],{"class":78,"line":32906},[76,57152,51855],{"class":93},[76,57154,50705],{"class":51370},[76,57156,51377],{"class":93},[169,57158,57160],{"id":57159},"_317-重要知识点","3.1.7 重要知识点",[14,57162,57163,57164],{},"浏览器在渲染文本时， ",[350,57165,57166],{},"没有空格或换行符就没有“断行点”",[14,57168,57169],{},[56,57170],{"alt":58,"src":57171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57173,57174],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57176,57177],{},[56,57178],{"alt":58,"src":57179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57181,57182],{},[56,57183],{"alt":58,"src":57184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[140,57186,57188],{"id":57187},"_32-dom事件基础","3.2 DOM事件基础",[169,57190,57192],{"id":57191},"_321-事件监听","3.2.1 事件监听",[14,57194,57195],{},[56,57196],{"alt":58,"src":57197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57199,57200],{},"事件监听有响应的发生",[14,57202,57203],{},[56,57204],{"alt":58,"src":57205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57207,57208],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57210,57211],{},"对于有名函数,要执行的函数名后边不要加()",[169,57213,57215],{"id":57214},"_322-随机点名案例","3.2.2 随机点名案例",[67,57217,57219],{"className":50703,"code":57218,"language":50705,"meta":58,"style":58},"\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",[73,57220,57221,57231,57245,57249,57257,57271,57291,57303,57311,57317,57327,57337,57341,57345,57352,57363,57367,57371,57377,57389,57403,57413,57425,57438,57442,57446,57453,57457,57470,57482,57494,57498,57502,57506,57513,57523,57527,57531,57540,57552,57564,57579,57583,57591,57599,57603,57611,57624,57638,57651,57671,57679,57694,57714,57734,57742,57746,57754,57759,57795,57815,57820,57839,57844,57855,57860,57871,57876,57895,57910,57915,57941,57951,57960,57965,57981,57986,57991,57996,58011,58015,58019,58024,58043,58060,58068,58073,58088,58092,58096,58104,58112,58116],{"__ignoreMap":58},[76,57222,57223,57225,57227,57229],{"class":78,"line":79},[76,57224,51367],{"class":93},[76,57226,51371],{"class":51370},[76,57228,51374],{"class":2035},[76,57230,51377],{"class":93},[76,57232,57233,57235,57237,57239,57241,57243],{"class":78,"line":86},[76,57234,1109],{"class":93},[76,57236,50705],{"class":51370},[76,57238,51386],{"class":2035},[76,57240,247],{"class":93},[76,57242,51391],{"class":305},[76,57244,51377],{"class":93},[76,57246,57247],{"class":78,"line":97},[76,57248,2472],{"emptyLinePlaceholder":125},[76,57250,57251,57253,57255],{"class":78,"line":103},[76,57252,1109],{"class":93},[76,57254,51404],{"class":51370},[76,57256,51377],{"class":93},[76,57258,57259,57261,57263,57265,57267,57269],{"class":78,"line":1273},[76,57260,52214],{"class":93},[76,57262,51414],{"class":51370},[76,57264,51417],{"class":2035},[76,57266,247],{"class":93},[76,57268,51422],{"class":305},[76,57270,51377],{"class":93},[76,57272,57273,57275,57277,57279,57281,57283,57285,57287,57289],{"class":78,"line":1287},[76,57274,52214],{"class":93},[76,57276,51414],{"class":51370},[76,57278,14992],{"class":2035},[76,57280,247],{"class":93},[76,57282,51461],{"class":305},[76,57284,51441],{"class":2035},[76,57286,247],{"class":93},[76,57288,51468],{"class":305},[76,57290,51377],{"class":93},[76,57292,57293,57295,57297,57299,57301],{"class":78,"line":1293},[76,57294,52214],{"class":93},[76,57296,51477],{"class":51370},[76,57298,51480],{"class":93},[76,57300,51477],{"class":51370},[76,57302,51377],{"class":93},[76,57304,57305,57307,57309],{"class":78,"line":1384},[76,57306,52214],{"class":93},[76,57308,117],{"class":51370},[76,57310,51377],{"class":93},[76,57312,57313,57315],{"class":78,"line":1390},[76,57314,6475],{"class":51370},[76,57316,15644],{"class":93},[76,57318,57319,57321,57323,57325],{"class":78,"line":1402},[76,57320,54776],{"class":250},[76,57322,51507],{"class":93},[76,57324,392],{"class":250},[76,57326,1363],{"class":93},[76,57328,57329,57331,57333,57335],{"class":78,"line":1684},[76,57330,54765],{"class":250},[76,57332,51507],{"class":93},[76,57334,392],{"class":250},[76,57336,1363],{"class":93},[76,57338,57339],{"class":78,"line":1689},[76,57340,2259],{"class":93},[76,57342,57343],{"class":78,"line":1695},[76,57344,2472],{"emptyLinePlaceholder":125},[76,57346,57347,57350],{"class":78,"line":1700},[76,57348,57349],{"class":51370},"    h2",[76,57351,15644],{"class":93},[76,57353,57354,57357,57359,57361],{"class":78,"line":1714},[76,57355,57356],{"class":250},"      text-align",[76,57358,51507],{"class":93},[76,57360,51662],{"class":250},[76,57362,1363],{"class":93},[76,57364,57365],{"class":78,"line":1719},[76,57366,2259],{"class":93},[76,57368,57369],{"class":78,"line":1725},[76,57370,2472],{"emptyLinePlaceholder":125},[76,57372,57373,57375],{"class":78,"line":1746},[76,57374,54822],{"class":2035},[76,57376,15644],{"class":93},[76,57378,57379,57381,57383,57385,57387],{"class":78,"line":1751},[76,57380,54841],{"class":250},[76,57382,51507],{"class":93},[76,57384,1611],{"class":250},[76,57386,51562],{"class":89},[76,57388,1363],{"class":93},[76,57390,57391,57393,57395,57397,57399,57401],{"class":78,"line":1765},[76,57392,54776],{"class":250},[76,57394,51507],{"class":93},[76,57396,855],{"class":250},[76,57398,51562],{"class":89},[76,57400,51626],{"class":250},[76,57402,1363],{"class":93},[76,57404,57405,57407,57409,57411],{"class":78,"line":1770},[76,57406,55079],{"class":250},[76,57408,51507],{"class":93},[76,57410,51547],{"class":250},[76,57412,1363],{"class":93},[76,57414,57415,57417,57419,57421,57423],{"class":78,"line":1799},[76,57416,54992],{"class":250},[76,57418,51507],{"class":93},[76,57420,1024],{"class":250},[76,57422,51562],{"class":89},[76,57424,1363],{"class":93},[76,57426,57427,57430,57432,57434,57436],{"class":78,"line":1804},[76,57428,57429],{"class":250},"      line-height",[76,57431,51507],{"class":93},[76,57433,601],{"class":250},[76,57435,51562],{"class":89},[76,57437,1363],{"class":93},[76,57439,57440],{"class":78,"line":1821},[76,57441,2259],{"class":93},[76,57443,57444],{"class":78,"line":1826},[76,57445,2472],{"emptyLinePlaceholder":125},[76,57447,57448,57451],{"class":78,"line":1831},[76,57449,57450],{"class":2035},"    .qs",[76,57452,15644],{"class":93},[76,57454,57455],{"class":78,"line":1836},[76,57456,2472],{"emptyLinePlaceholder":125},[76,57458,57459,57461,57463,57466,57468],{"class":78,"line":1850},[76,57460,54841],{"class":250},[76,57462,51507],{"class":93},[76,57464,57465],{"class":250},"450",[76,57467,51562],{"class":89},[76,57469,1363],{"class":93},[76,57471,57472,57474,57476,57478,57480],{"class":78,"line":1855},[76,57473,54855],{"class":250},[76,57475,51507],{"class":93},[76,57477,601],{"class":250},[76,57479,51562],{"class":89},[76,57481,1363],{"class":93},[76,57483,57484,57487,57489,57492],{"class":78,"line":2649},[76,57485,57486],{"class":250},"      color",[76,57488,51507],{"class":93},[76,57490,57491],{"class":250},"red",[76,57493,1363],{"class":93},[76,57495,57496],{"class":78,"line":2663},[76,57497,2472],{"emptyLinePlaceholder":125},[76,57499,57500],{"class":78,"line":2671},[76,57501,2259],{"class":93},[76,57503,57504],{"class":78,"line":2676},[76,57505,2472],{"emptyLinePlaceholder":125},[76,57507,57508,57511],{"class":78,"line":2682},[76,57509,57510],{"class":2035},"    .btns",[76,57512,15644],{"class":93},[76,57514,57515,57517,57519,57521],{"class":78,"line":2688},[76,57516,57356],{"class":250},[76,57518,51507],{"class":93},[76,57520,51662],{"class":250},[76,57522,1363],{"class":93},[76,57524,57525],{"class":78,"line":2693},[76,57526,2259],{"class":93},[76,57528,57529],{"class":78,"line":8020},[76,57530,2472],{"emptyLinePlaceholder":125},[76,57532,57533,57535,57538],{"class":78,"line":8044},[76,57534,57510],{"class":2035},[76,57536,57537],{"class":51370}," button",[76,57539,15644],{"class":93},[76,57541,57542,57544,57546,57548,57550],{"class":78,"line":8049},[76,57543,54841],{"class":250},[76,57545,51507],{"class":93},[76,57547,1016],{"class":250},[76,57549,51562],{"class":89},[76,57551,1363],{"class":93},[76,57553,57554,57556,57558,57560,57562],{"class":78,"line":8055},[76,57555,54855],{"class":250},[76,57557,51507],{"class":93},[76,57559,474],{"class":250},[76,57561,51562],{"class":89},[76,57563,1363],{"class":93},[76,57565,57566,57568,57570,57572,57575,57577],{"class":78,"line":8082},[76,57567,54776],{"class":250},[76,57569,51507],{"class":93},[76,57571,392],{"class":250},[76,57573,57574],{"class":250}," 50",[76,57576,51562],{"class":89},[76,57578,1363],{"class":93},[76,57580,57581],{"class":78,"line":8087},[76,57582,2259],{"class":93},[76,57584,57585,57587,57589],{"class":78,"line":8093},[76,57586,52487],{"class":93},[76,57588,117],{"class":51370},[76,57590,51377],{"class":93},[76,57592,57593,57595,57597],{"class":78,"line":8105},[76,57594,51855],{"class":93},[76,57596,51404],{"class":51370},[76,57598,51377],{"class":93},[76,57600,57601],{"class":78,"line":8117},[76,57602,2472],{"emptyLinePlaceholder":125},[76,57604,57605,57607,57609],{"class":78,"line":8129},[76,57606,1109],{"class":93},[76,57608,51870],{"class":51370},[76,57610,51377],{"class":93},[76,57612,57613,57615,57617,57620,57622],{"class":78,"line":9788},[76,57614,52214],{"class":93},[76,57616,140],{"class":51370},[76,57618,57619],{"class":93},">随机点名\u003C\u002F",[76,57621,140],{"class":51370},[76,57623,51377],{"class":93},[76,57625,57626,57628,57630,57632,57634,57636],{"class":78,"line":9813},[76,57627,52214],{"class":93},[76,57629,51681],{"class":51370},[76,57631,53556],{"class":2035},[76,57633,247],{"class":93},[76,57635,53561],{"class":305},[76,57637,51377],{"class":93},[76,57639,57640,57642,57644,57647,57649],{"class":78,"line":9836},[76,57641,51411],{"class":93},[76,57643,76],{"class":51370},[76,57645,57646],{"class":93},">名字是：\u003C\u002F",[76,57648,76],{"class":51370},[76,57650,51377],{"class":93},[76,57652,57653,57655,57657,57659,57661,57664,57667,57669],{"class":78,"line":9860},[76,57654,51411],{"class":93},[76,57656,51681],{"class":51370},[76,57658,53556],{"class":2035},[76,57660,247],{"class":93},[76,57662,57663],{"class":305},"\"qs\"",[76,57665,57666],{"class":93},">这里显示姓名\u003C\u002F",[76,57668,51681],{"class":51370},[76,57670,51377],{"class":93},[76,57672,57673,57675,57677],{"class":78,"line":9865},[76,57674,52487],{"class":93},[76,57676,51681],{"class":51370},[76,57678,51377],{"class":93},[76,57680,57681,57683,57685,57687,57689,57692],{"class":78,"line":9870},[76,57682,52214],{"class":93},[76,57684,51681],{"class":51370},[76,57686,53556],{"class":2035},[76,57688,247],{"class":93},[76,57690,57691],{"class":305},"\"btns\"",[76,57693,51377],{"class":93},[76,57695,57696,57698,57700,57702,57704,57707,57710,57712],{"class":78,"line":9875},[76,57697,51411],{"class":93},[76,57699,53957],{"class":51370},[76,57701,53556],{"class":2035},[76,57703,247],{"class":93},[76,57705,57706],{"class":305},"\"start\"",[76,57708,57709],{"class":93},">开始\u003C\u002F",[76,57711,53957],{"class":51370},[76,57713,51377],{"class":93},[76,57715,57716,57718,57720,57722,57724,57727,57730,57732],{"class":78,"line":9884},[76,57717,51411],{"class":93},[76,57719,53957],{"class":51370},[76,57721,53556],{"class":2035},[76,57723,247],{"class":93},[76,57725,57726],{"class":305},"\"end\"",[76,57728,57729],{"class":93},">结束\u003C\u002F",[76,57731,53957],{"class":51370},[76,57733,51377],{"class":93},[76,57735,57736,57738,57740],{"class":78,"line":9889},[76,57737,52487],{"class":93},[76,57739,51681],{"class":51370},[76,57741,51377],{"class":93},[76,57743,57744],{"class":78,"line":9895},[76,57745,2472],{"emptyLinePlaceholder":125},[76,57747,57748,57750,57752],{"class":78,"line":9916},[76,57749,52214],{"class":93},[76,57751,51883],{"class":51370},[76,57753,51377],{"class":93},[76,57755,57756],{"class":78,"line":9922},[76,57757,57758],{"class":82},"    \u002F\u002F 数据数组\n",[76,57760,57761,57763,57766,57768,57770,57773,57775,57778,57780,57783,57785,57788,57790,57793],{"class":78,"line":9936},[76,57762,11293],{"class":89},[76,57764,57765],{"class":250}," arr",[76,57767,13636],{"class":89},[76,57769,52296],{"class":93},[76,57771,57772],{"class":305},"'马超'",[76,57774,12507],{"class":93},[76,57776,57777],{"class":305},"'黄忠'",[76,57779,12507],{"class":93},[76,57781,57782],{"class":305},"'赵云'",[76,57784,12507],{"class":93},[76,57786,57787],{"class":305},"'关羽'",[76,57789,12507],{"class":93},[76,57791,57792],{"class":305},"'张飞'",[76,57794,33316],{"class":93},[76,57796,57797,57799,57802,57804,57806,57808,57810,57813],{"class":78,"line":9942},[76,57798,11293],{"class":89},[76,57800,57801],{"class":250}," qs",[76,57803,13636],{"class":89},[76,57805,54466],{"class":93},[76,57807,54469],{"class":2035},[76,57809,202],{"class":93},[76,57811,57812],{"class":305},"'.qs'",[76,57814,208],{"class":93},[76,57816,57817],{"class":78,"line":9969},[76,57818,57819],{"class":82},"    \u002F\u002F 1.业务1.开始按钮模块\n",[76,57821,57822,57824,57826,57828,57830,57832,57834,57837],{"class":78,"line":9978},[76,57823,11293],{"class":89},[76,57825,4256],{"class":250},[76,57827,13636],{"class":89},[76,57829,54466],{"class":93},[76,57831,54469],{"class":2035},[76,57833,202],{"class":93},[76,57835,57836],{"class":305},"'.start'",[76,57838,208],{"class":93},[76,57840,57841],{"class":78,"line":9984},[76,57842,57843],{"class":82},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[76,57845,57846,57848,57851,57853],{"class":78,"line":9992},[76,57847,52289],{"class":89},[76,57849,57850],{"class":93}," timerId ",[76,57852,247],{"class":89},[76,57854,47403],{"class":250},[76,57856,57857],{"class":78,"line":9997},[76,57858,57859],{"class":82},"    \u002F\u002F 随机号要全局变量\n",[76,57861,57862,57864,57867,57869],{"class":78,"line":16676},[76,57863,52289],{"class":89},[76,57865,57866],{"class":93}," random ",[76,57868,247],{"class":89},[76,57870,47403],{"class":250},[76,57872,57873],{"class":78,"line":16682},[76,57874,57875],{"class":82},"    \u002F\u002F 1.1 添加点击事件\n",[76,57877,57878,57881,57884,57886,57889,57891,57893],{"class":78,"line":16705},[76,57879,57880],{"class":93},"    start.",[76,57882,57883],{"class":2035},"addEventListener",[76,57885,202],{"class":93},[76,57887,57888],{"class":305},"'click'",[76,57890,12507],{"class":93},[76,57892,54519],{"class":89},[76,57894,54522],{"class":93},[76,57896,57897,57900,57902,57904,57906,57908],{"class":78,"line":16711},[76,57898,57899],{"class":93},"      timerId ",[76,57901,247],{"class":89},[76,57903,54514],{"class":2035},[76,57905,202],{"class":93},[76,57907,54519],{"class":89},[76,57909,54522],{"class":93},[76,57911,57912],{"class":78,"line":16734},[76,57913,57914],{"class":82},"        \u002F\u002F 随机数\n",[76,57916,57917,57920,57922,57925,57928,57931,57933,57935,57937,57939],{"class":78,"line":16748},[76,57918,57919],{"class":93},"        random ",[76,57921,247],{"class":89},[76,57923,57924],{"class":2035}," parseInt",[76,57926,57927],{"class":93},"(Math.",[76,57929,57930],{"class":2035},"random",[76,57932,13122],{"class":93},[76,57934,655],{"class":89},[76,57936,52035],{"class":93},[76,57938,52038],{"class":250},[76,57940,208],{"class":93},[76,57942,57943,57946,57948],{"class":78,"line":16768},[76,57944,57945],{"class":93},"        qs.innerHTML ",[76,57947,247],{"class":89},[76,57949,57950],{"class":93}," arr[random]\n",[76,57952,57953,57956,57958],{"class":78,"line":16774},[76,57954,57955],{"class":93},"      }, ",[76,57957,474],{"class":250},[76,57959,208],{"class":93},[76,57961,57962],{"class":78,"line":16785},[76,57963,57964],{"class":82},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[76,57966,57967,57969,57972,57974,57977,57979],{"class":78,"line":16808},[76,57968,54550],{"class":89},[76,57970,57971],{"class":93}," (arr.",[76,57973,52038],{"class":250},[76,57975,57976],{"class":89}," ===",[76,57978,25191],{"class":250},[76,57980,12514],{"class":93},[76,57982,57983],{"class":78,"line":16830},[76,57984,57985],{"class":82},"        \u002F\u002F start.disabled = true\n",[76,57987,57988],{"class":78,"line":16835},[76,57989,57990],{"class":82},"        \u002F\u002F end.disabled = true\n",[76,57992,57993],{"class":78,"line":16841},[76,57994,57995],{"class":82},"        \u002F\u002F 可以合起来写\n",[76,57997,57998,58001,58003,58006,58008],{"class":78,"line":16855},[76,57999,58000],{"class":93},"        start.disabled ",[76,58002,247],{"class":89},[76,58004,58005],{"class":93}," end.disabled ",[76,58007,247],{"class":89},[76,58009,58010],{"class":250}," true\n",[76,58012,58013],{"class":78,"line":16868},[76,58014,52468],{"class":93},[76,58016,58017],{"class":78,"line":16873},[76,58018,33531],{"class":93},[76,58020,58021],{"class":78,"line":16887},[76,58022,58023],{"class":82},"    \u002F\u002F 1.2 关闭按钮模块\n",[76,58025,58026,58028,58030,58032,58034,58036,58038,58041],{"class":78,"line":16892},[76,58027,11293],{"class":89},[76,58029,4272],{"class":250},[76,58031,13636],{"class":89},[76,58033,54466],{"class":93},[76,58035,54469],{"class":2035},[76,58037,202],{"class":93},[76,58039,58040],{"class":305},"'.end'",[76,58042,208],{"class":93},[76,58044,58045,58048,58050,58052,58054,58056,58058],{"class":78,"line":16898},[76,58046,58047],{"class":93},"    end.",[76,58049,57883],{"class":2035},[76,58051,202],{"class":93},[76,58053,57888],{"class":305},[76,58055,12507],{"class":93},[76,58057,54519],{"class":89},[76,58059,54522],{"class":93},[76,58061,58062,58065],{"class":78,"line":16903},[76,58063,58064],{"class":2035},"      clearInterval",[76,58066,58067],{"class":93},"(timerId)\n",[76,58069,58070],{"class":78,"line":16917},[76,58071,58072],{"class":82},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[76,58074,58075,58078,58081,58084,58086],{"class":78,"line":16922},[76,58076,58077],{"class":93},"      arr.",[76,58079,58080],{"class":2035},"splice",[76,58082,58083],{"class":93},"(random, ",[76,58085,418],{"class":250},[76,58087,208],{"class":93},[76,58089,58090],{"class":78,"line":16927},[76,58091,33531],{"class":93},[76,58093,58094],{"class":78,"line":16941},[76,58095,2472],{"emptyLinePlaceholder":125},[76,58097,58098,58100,58102],{"class":78,"line":16953},[76,58099,52487],{"class":93},[76,58101,51883],{"class":51370},[76,58103,51377],{"class":93},[76,58105,58106,58108,58110],{"class":78,"line":16958},[76,58107,51855],{"class":93},[76,58109,51870],{"class":51370},[76,58111,51377],{"class":93},[76,58113,58114],{"class":78,"line":16971},[76,58115,2472],{"emptyLinePlaceholder":125},[76,58117,58118,58120,58122],{"class":78,"line":16976},[76,58119,51855],{"class":93},[76,58121,50705],{"class":51370},[76,58123,51377],{"class":93},[14,58125,58126],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[169,58128,58130],{"id":58129},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[67,58132,58134],{"className":50703,"code":58133,"language":50705,"meta":58,"style":58},"\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",[73,58135,58136,58146,58160,58164,58172,58186,58206,58218,58226,58230,58238,58250,58258,58277,58294,58310,58320,58324,58332,58340,58344],{"__ignoreMap":58},[76,58137,58138,58140,58142,58144],{"class":78,"line":79},[76,58139,51367],{"class":93},[76,58141,51371],{"class":51370},[76,58143,51374],{"class":2035},[76,58145,51377],{"class":93},[76,58147,58148,58150,58152,58154,58156,58158],{"class":78,"line":86},[76,58149,1109],{"class":93},[76,58151,50705],{"class":51370},[76,58153,51386],{"class":2035},[76,58155,247],{"class":93},[76,58157,51391],{"class":305},[76,58159,51377],{"class":93},[76,58161,58162],{"class":78,"line":97},[76,58163,2472],{"emptyLinePlaceholder":125},[76,58165,58166,58168,58170],{"class":78,"line":103},[76,58167,1109],{"class":93},[76,58169,51404],{"class":51370},[76,58171,51377],{"class":93},[76,58173,58174,58176,58178,58180,58182,58184],{"class":78,"line":1273},[76,58175,52214],{"class":93},[76,58177,51414],{"class":51370},[76,58179,51417],{"class":2035},[76,58181,247],{"class":93},[76,58183,51422],{"class":305},[76,58185,51377],{"class":93},[76,58187,58188,58190,58192,58194,58196,58198,58200,58202,58204],{"class":78,"line":1287},[76,58189,52214],{"class":93},[76,58191,51414],{"class":51370},[76,58193,14992],{"class":2035},[76,58195,247],{"class":93},[76,58197,51461],{"class":305},[76,58199,51441],{"class":2035},[76,58201,247],{"class":93},[76,58203,51468],{"class":305},[76,58205,51377],{"class":93},[76,58207,58208,58210,58212,58214,58216],{"class":78,"line":1293},[76,58209,52214],{"class":93},[76,58211,51477],{"class":51370},[76,58213,51480],{"class":93},[76,58215,51477],{"class":51370},[76,58217,51377],{"class":93},[76,58219,58220,58222,58224],{"class":78,"line":1384},[76,58221,51855],{"class":93},[76,58223,51404],{"class":51370},[76,58225,51377],{"class":93},[76,58227,58228],{"class":78,"line":1390},[76,58229,2472],{"emptyLinePlaceholder":125},[76,58231,58232,58234,58236],{"class":78,"line":1402},[76,58233,1109],{"class":93},[76,58235,51870],{"class":51370},[76,58237,51377],{"class":93},[76,58239,58240,58242,58244,58246,58248],{"class":78,"line":1684},[76,58241,52214],{"class":93},[76,58243,53957],{"class":51370},[76,58245,53963],{"class":93},[76,58247,53957],{"class":51370},[76,58249,51377],{"class":93},[76,58251,58252,58254,58256],{"class":78,"line":1689},[76,58253,52214],{"class":93},[76,58255,51883],{"class":51370},[76,58257,51377],{"class":93},[76,58259,58260,58262,58264,58266,58268,58270,58272,58275],{"class":78,"line":1695},[76,58261,11293],{"class":89},[76,58263,54461],{"class":250},[76,58265,13636],{"class":89},[76,58267,54466],{"class":93},[76,58269,54469],{"class":2035},[76,58271,202],{"class":93},[76,58273,58274],{"class":305},"'button'",[76,58276,208],{"class":93},[76,58278,58279,58282,58284,58286,58288,58290,58292],{"class":78,"line":1700},[76,58280,58281],{"class":93},"    btn.",[76,58283,57883],{"class":2035},[76,58285,202],{"class":93},[76,58287,57888],{"class":305},[76,58289,12507],{"class":93},[76,58291,54519],{"class":89},[76,58293,54522],{"class":93},[76,58295,58296,58299,58301,58303,58306,58308],{"class":78,"line":1714},[76,58297,58298],{"class":89},"      const",[76,58300,2312],{"class":250},[76,58302,13636],{"class":89},[76,58304,58305],{"class":93}," Math.",[76,58307,57930],{"class":2035},[76,58309,2048],{"class":93},[76,58311,58312,58315,58318],{"class":78,"line":1719},[76,58313,58314],{"class":93},"      console.",[76,58316,58317],{"class":2035},"log",[76,58319,215],{"class":93},[76,58321,58322],{"class":78,"line":1725},[76,58323,33531],{"class":93},[76,58325,58326,58328,58330],{"class":78,"line":1746},[76,58327,52487],{"class":93},[76,58329,51883],{"class":51370},[76,58331,51377],{"class":93},[76,58333,58334,58336,58338],{"class":78,"line":1751},[76,58335,51855],{"class":93},[76,58337,51870],{"class":51370},[76,58339,51377],{"class":93},[76,58341,58342],{"class":78,"line":1765},[76,58343,2472],{"emptyLinePlaceholder":125},[76,58345,58346,58348,58350],{"class":78,"line":1770},[76,58347,51855],{"class":93},[76,58349,50705],{"class":51370},[76,58351,51377],{"class":93},[14,58353,58354],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58356,58357],{},"常量不可以重新赋值",[14,58359,58360],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[67,58362,58364],{"className":50703,"code":58363,"language":50705,"meta":58,"style":58},"\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",[73,58365,58366,58376,58390,58394,58402,58416,58436,58448,58456,58460,58468,58480,58488,58499,58517,58533,58547,58555,58559,58567,58575,58579],{"__ignoreMap":58},[76,58367,58368,58370,58372,58374],{"class":78,"line":79},[76,58369,51367],{"class":93},[76,58371,51371],{"class":51370},[76,58373,51374],{"class":2035},[76,58375,51377],{"class":93},[76,58377,58378,58380,58382,58384,58386,58388],{"class":78,"line":86},[76,58379,1109],{"class":93},[76,58381,50705],{"class":51370},[76,58383,51386],{"class":2035},[76,58385,247],{"class":93},[76,58387,51391],{"class":305},[76,58389,51377],{"class":93},[76,58391,58392],{"class":78,"line":97},[76,58393,2472],{"emptyLinePlaceholder":125},[76,58395,58396,58398,58400],{"class":78,"line":103},[76,58397,1109],{"class":93},[76,58399,51404],{"class":51370},[76,58401,51377],{"class":93},[76,58403,58404,58406,58408,58410,58412,58414],{"class":78,"line":1273},[76,58405,52214],{"class":93},[76,58407,51414],{"class":51370},[76,58409,51417],{"class":2035},[76,58411,247],{"class":93},[76,58413,51422],{"class":305},[76,58415,51377],{"class":93},[76,58417,58418,58420,58422,58424,58426,58428,58430,58432,58434],{"class":78,"line":1287},[76,58419,52214],{"class":93},[76,58421,51414],{"class":51370},[76,58423,14992],{"class":2035},[76,58425,247],{"class":93},[76,58427,51461],{"class":305},[76,58429,51441],{"class":2035},[76,58431,247],{"class":93},[76,58433,51468],{"class":305},[76,58435,51377],{"class":93},[76,58437,58438,58440,58442,58444,58446],{"class":78,"line":1293},[76,58439,52214],{"class":93},[76,58441,51477],{"class":51370},[76,58443,51480],{"class":93},[76,58445,51477],{"class":51370},[76,58447,51377],{"class":93},[76,58449,58450,58452,58454],{"class":78,"line":1384},[76,58451,51855],{"class":93},[76,58453,51404],{"class":51370},[76,58455,51377],{"class":93},[76,58457,58458],{"class":78,"line":1390},[76,58459,2472],{"emptyLinePlaceholder":125},[76,58461,58462,58464,58466],{"class":78,"line":1402},[76,58463,1109],{"class":93},[76,58465,51870],{"class":51370},[76,58467,51377],{"class":93},[76,58469,58470,58472,58474,58476,58478],{"class":78,"line":1684},[76,58471,52214],{"class":93},[76,58473,53957],{"class":51370},[76,58475,53963],{"class":93},[76,58477,53957],{"class":51370},[76,58479,51377],{"class":93},[76,58481,58482,58484,58486],{"class":78,"line":1689},[76,58483,52214],{"class":93},[76,58485,51883],{"class":51370},[76,58487,51377],{"class":93},[76,58489,58490,58492,58494,58496],{"class":78,"line":1695},[76,58491,11293],{"class":89},[76,58493,2312],{"class":250},[76,58495,13636],{"class":89},[76,58497,58498],{"class":250}," 10\n",[76,58500,58501,58503,58505,58507,58509,58511,58513,58515],{"class":78,"line":1700},[76,58502,11293],{"class":89},[76,58504,54461],{"class":250},[76,58506,13636],{"class":89},[76,58508,54466],{"class":93},[76,58510,54469],{"class":2035},[76,58512,202],{"class":93},[76,58514,58274],{"class":305},[76,58516,208],{"class":93},[76,58518,58519,58521,58523,58525,58527,58529,58531],{"class":78,"line":1714},[76,58520,58281],{"class":93},[76,58522,57883],{"class":2035},[76,58524,202],{"class":93},[76,58526,57888],{"class":305},[76,58528,12507],{"class":93},[76,58530,54519],{"class":89},[76,58532,54522],{"class":93},[76,58534,58535,58537,58539,58541,58543,58545],{"class":78,"line":1719},[76,58536,58298],{"class":89},[76,58538,2312],{"class":250},[76,58540,13636],{"class":89},[76,58542,58305],{"class":93},[76,58544,57930],{"class":2035},[76,58546,2048],{"class":93},[76,58548,58549,58551,58553],{"class":78,"line":1725},[76,58550,58314],{"class":93},[76,58552,58317],{"class":2035},[76,58554,215],{"class":93},[76,58556,58557],{"class":78,"line":1746},[76,58558,33531],{"class":93},[76,58560,58561,58563,58565],{"class":78,"line":1751},[76,58562,52487],{"class":93},[76,58564,51883],{"class":51370},[76,58566,51377],{"class":93},[76,58568,58569,58571,58573],{"class":78,"line":1765},[76,58570,51855],{"class":93},[76,58572,51870],{"class":51370},[76,58574,51377],{"class":93},[76,58576,58577],{"class":78,"line":1770},[76,58578,2472],{"emptyLinePlaceholder":125},[76,58580,58581,58583,58585],{"class":78,"line":1799},[76,58582,51855],{"class":93},[76,58584,50705],{"class":51370},[76,58586,51377],{"class":93},[14,58588,58589],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[67,58591,58593],{"className":50703,"code":58592,"language":50705,"meta":58,"style":58},"\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",[73,58594,58595,58605,58619,58623,58631,58645,58665,58677,58685,58689,58697,58709,58717,58727,58745,58761,58774,58782,58786,58794,58802,58806],{"__ignoreMap":58},[76,58596,58597,58599,58601,58603],{"class":78,"line":79},[76,58598,51367],{"class":93},[76,58600,51371],{"class":51370},[76,58602,51374],{"class":2035},[76,58604,51377],{"class":93},[76,58606,58607,58609,58611,58613,58615,58617],{"class":78,"line":86},[76,58608,1109],{"class":93},[76,58610,50705],{"class":51370},[76,58612,51386],{"class":2035},[76,58614,247],{"class":93},[76,58616,51391],{"class":305},[76,58618,51377],{"class":93},[76,58620,58621],{"class":78,"line":97},[76,58622,2472],{"emptyLinePlaceholder":125},[76,58624,58625,58627,58629],{"class":78,"line":103},[76,58626,1109],{"class":93},[76,58628,51404],{"class":51370},[76,58630,51377],{"class":93},[76,58632,58633,58635,58637,58639,58641,58643],{"class":78,"line":1273},[76,58634,52214],{"class":93},[76,58636,51414],{"class":51370},[76,58638,51417],{"class":2035},[76,58640,247],{"class":93},[76,58642,51422],{"class":305},[76,58644,51377],{"class":93},[76,58646,58647,58649,58651,58653,58655,58657,58659,58661,58663],{"class":78,"line":1287},[76,58648,52214],{"class":93},[76,58650,51414],{"class":51370},[76,58652,14992],{"class":2035},[76,58654,247],{"class":93},[76,58656,51461],{"class":305},[76,58658,51441],{"class":2035},[76,58660,247],{"class":93},[76,58662,51468],{"class":305},[76,58664,51377],{"class":93},[76,58666,58667,58669,58671,58673,58675],{"class":78,"line":1293},[76,58668,52214],{"class":93},[76,58670,51477],{"class":51370},[76,58672,51480],{"class":93},[76,58674,51477],{"class":51370},[76,58676,51377],{"class":93},[76,58678,58679,58681,58683],{"class":78,"line":1384},[76,58680,51855],{"class":93},[76,58682,51404],{"class":51370},[76,58684,51377],{"class":93},[76,58686,58687],{"class":78,"line":1390},[76,58688,2472],{"emptyLinePlaceholder":125},[76,58690,58691,58693,58695],{"class":78,"line":1402},[76,58692,1109],{"class":93},[76,58694,51870],{"class":51370},[76,58696,51377],{"class":93},[76,58698,58699,58701,58703,58705,58707],{"class":78,"line":1684},[76,58700,52214],{"class":93},[76,58702,53957],{"class":51370},[76,58704,53963],{"class":93},[76,58706,53957],{"class":51370},[76,58708,51377],{"class":93},[76,58710,58711,58713,58715],{"class":78,"line":1689},[76,58712,52214],{"class":93},[76,58714,51883],{"class":51370},[76,58716,51377],{"class":93},[76,58718,58719,58721,58723,58725],{"class":78,"line":1695},[76,58720,11293],{"class":89},[76,58722,2312],{"class":250},[76,58724,13636],{"class":89},[76,58726,58498],{"class":250},[76,58728,58729,58731,58733,58735,58737,58739,58741,58743],{"class":78,"line":1700},[76,58730,11293],{"class":89},[76,58732,54461],{"class":250},[76,58734,13636],{"class":89},[76,58736,54466],{"class":93},[76,58738,54469],{"class":2035},[76,58740,202],{"class":93},[76,58742,58274],{"class":305},[76,58744,208],{"class":93},[76,58746,58747,58749,58751,58753,58755,58757,58759],{"class":78,"line":1714},[76,58748,58281],{"class":93},[76,58750,57883],{"class":2035},[76,58752,202],{"class":93},[76,58754,57888],{"class":305},[76,58756,12507],{"class":93},[76,58758,54519],{"class":89},[76,58760,54522],{"class":93},[76,58762,58763,58766,58768,58770,58772],{"class":78,"line":1719},[76,58764,58765],{"class":93},"      num ",[76,58767,247],{"class":89},[76,58769,58305],{"class":93},[76,58771,57930],{"class":2035},[76,58773,2048],{"class":93},[76,58775,58776,58778,58780],{"class":78,"line":1725},[76,58777,58314],{"class":93},[76,58779,58317],{"class":2035},[76,58781,215],{"class":93},[76,58783,58784],{"class":78,"line":1746},[76,58785,33531],{"class":93},[76,58787,58788,58790,58792],{"class":78,"line":1751},[76,58789,52487],{"class":93},[76,58791,51883],{"class":51370},[76,58793,51377],{"class":93},[76,58795,58796,58798,58800],{"class":78,"line":1765},[76,58797,51855],{"class":93},[76,58799,51870],{"class":51370},[76,58801,51377],{"class":93},[76,58803,58804],{"class":78,"line":1770},[76,58805,2472],{"emptyLinePlaceholder":125},[76,58807,58808,58810,58812],{"class":78,"line":1799},[76,58809,51855],{"class":93},[76,58811,50705],{"class":51370},[76,58813,51377],{"class":93},[14,58815,58816],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[169,58818,58820],{"id":58819},"_324-事件监听版本","3.2.4 事件监听版本",[14,58822,58823],{},[56,58824],{"alt":58,"src":58825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58827,58828],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58830,58831],{},"这种方式会覆盖前边的事件监听:",[67,58833,58835],{"className":50703,"code":58834,"language":50705,"meta":58,"style":58},"\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",[73,58836,58837,58847,58861,58865,58873,58887,58907,58919,58927,58931,58939,58951,58959,58977,58991,59002,59006,59018,59028,59032,59040,59048,59052],{"__ignoreMap":58},[76,58838,58839,58841,58843,58845],{"class":78,"line":79},[76,58840,51367],{"class":93},[76,58842,51371],{"class":51370},[76,58844,51374],{"class":2035},[76,58846,51377],{"class":93},[76,58848,58849,58851,58853,58855,58857,58859],{"class":78,"line":86},[76,58850,1109],{"class":93},[76,58852,50705],{"class":51370},[76,58854,51386],{"class":2035},[76,58856,247],{"class":93},[76,58858,51391],{"class":305},[76,58860,51377],{"class":93},[76,58862,58863],{"class":78,"line":97},[76,58864,2472],{"emptyLinePlaceholder":125},[76,58866,58867,58869,58871],{"class":78,"line":103},[76,58868,1109],{"class":93},[76,58870,51404],{"class":51370},[76,58872,51377],{"class":93},[76,58874,58875,58877,58879,58881,58883,58885],{"class":78,"line":1273},[76,58876,52214],{"class":93},[76,58878,51414],{"class":51370},[76,58880,51417],{"class":2035},[76,58882,247],{"class":93},[76,58884,51422],{"class":305},[76,58886,51377],{"class":93},[76,58888,58889,58891,58893,58895,58897,58899,58901,58903,58905],{"class":78,"line":1287},[76,58890,52214],{"class":93},[76,58892,51414],{"class":51370},[76,58894,14992],{"class":2035},[76,58896,247],{"class":93},[76,58898,51461],{"class":305},[76,58900,51441],{"class":2035},[76,58902,247],{"class":93},[76,58904,51468],{"class":305},[76,58906,51377],{"class":93},[76,58908,58909,58911,58913,58915,58917],{"class":78,"line":1293},[76,58910,52214],{"class":93},[76,58912,51477],{"class":51370},[76,58914,51480],{"class":93},[76,58916,51477],{"class":51370},[76,58918,51377],{"class":93},[76,58920,58921,58923,58925],{"class":78,"line":1384},[76,58922,51855],{"class":93},[76,58924,51404],{"class":51370},[76,58926,51377],{"class":93},[76,58928,58929],{"class":78,"line":1390},[76,58930,2472],{"emptyLinePlaceholder":125},[76,58932,58933,58935,58937],{"class":78,"line":1402},[76,58934,1109],{"class":93},[76,58936,51870],{"class":51370},[76,58938,51377],{"class":93},[76,58940,58941,58943,58945,58947,58949],{"class":78,"line":1684},[76,58942,52214],{"class":93},[76,58944,53957],{"class":51370},[76,58946,53963],{"class":93},[76,58948,53957],{"class":51370},[76,58950,51377],{"class":93},[76,58952,58953,58955,58957],{"class":78,"line":1689},[76,58954,52214],{"class":93},[76,58956,51883],{"class":51370},[76,58958,51377],{"class":93},[76,58960,58961,58963,58965,58967,58969,58971,58973,58975],{"class":78,"line":1695},[76,58962,11293],{"class":89},[76,58964,54461],{"class":250},[76,58966,13636],{"class":89},[76,58968,54466],{"class":93},[76,58970,54469],{"class":2035},[76,58972,202],{"class":93},[76,58974,58274],{"class":305},[76,58976,208],{"class":93},[76,58978,58979,58981,58984,58986,58989],{"class":78,"line":1700},[76,58980,58281],{"class":93},[76,58982,58983],{"class":2035},"onclick",[76,58985,13636],{"class":89},[76,58987,58988],{"class":89}," function",[76,58990,54522],{"class":93},[76,58992,58993,58996,58998,59000],{"class":78,"line":1714},[76,58994,58995],{"class":2035},"      alert",[76,58997,202],{"class":93},[76,58999,672],{"class":250},[76,59001,208],{"class":93},[76,59003,59004],{"class":78,"line":1719},[76,59005,2259],{"class":93},[76,59007,59008,59010,59012,59014,59016],{"class":78,"line":1725},[76,59009,58281],{"class":93},[76,59011,58983],{"class":2035},[76,59013,13636],{"class":89},[76,59015,58988],{"class":89},[76,59017,54522],{"class":93},[76,59019,59020,59022,59024,59026],{"class":78,"line":1746},[76,59021,58995],{"class":2035},[76,59023,202],{"class":93},[76,59025,949],{"class":250},[76,59027,208],{"class":93},[76,59029,59030],{"class":78,"line":1751},[76,59031,2259],{"class":93},[76,59033,59034,59036,59038],{"class":78,"line":1765},[76,59035,52487],{"class":93},[76,59037,51883],{"class":51370},[76,59039,51377],{"class":93},[76,59041,59042,59044,59046],{"class":78,"line":1770},[76,59043,51855],{"class":93},[76,59045,51870],{"class":51370},[76,59047,51377],{"class":93},[76,59049,59050],{"class":78,"line":1799},[76,59051,2472],{"emptyLinePlaceholder":125},[76,59053,59054,59056,59058],{"class":78,"line":1804},[76,59055,51855],{"class":93},[76,59057,50705],{"class":51370},[76,59059,51377],{"class":93},[14,59061,59062],{},"只要点击就输出结果为22,前边11被覆盖了",[67,59064,59066],{"className":50703,"code":59065,"language":50705,"meta":58,"style":58},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[73,59067,59068,59073,59078,59082,59087,59092],{"__ignoreMap":58},[76,59069,59070],{"class":78,"line":79},[76,59071,59072],{"class":93},"  btn.addEventListener('click', function () {\n",[76,59074,59075],{"class":78,"line":86},[76,59076,59077],{"class":93},"      alert(11)\n",[76,59079,59080],{"class":78,"line":97},[76,59081,33531],{"class":93},[76,59083,59084],{"class":78,"line":103},[76,59085,59086],{"class":93},"    btn.addEventListener('click', function () {\n",[76,59088,59089],{"class":78,"line":1273},[76,59090,59091],{"class":93},"      alert(22)\n",[76,59093,59094],{"class":78,"line":1287},[76,59095,33531],{"class":93},[14,59097,59098],{},"点击第一次输出11,第二次点击为22",[169,59100,59102],{"id":59101},"_325-事件类型","3.2.5 事件类型",[14,59104,59105],{},[56,59106],{"alt":58,"src":59107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22070,59109,59111],{"id":59110},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59113,59114],{},"补充知识:",[14,59116,59117],{},"轮播图自动播放模块,可以使用",[14,59119,59120],{},"let timerId = setInterval(function () {",[14,59122,59123],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59125,59126],{},"用js方法模拟进行点击事件,click必须加()",[14,59128,59129],{},"next.click()",[14,59131,59132],{},"}, 1000)",[14,59134,59135],{},[56,59136],{"alt":58,"src":59137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[67,59139,59141],{"className":53137,"code":59140,"language":53139,"meta":58,"style":58},"\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",[73,59142,59143,59147,59157,59171,59175,59183,59198,59218,59238,59251,59259,59264,59269,59273,59277,59282,59287,59292,59297,59301,59305,59310,59315,59320,59324,59328,59333,59337,59342,59347,59351,59355,59360,59365,59370,59375,59380,59384,59388,59393,59398,59403,59408,59413,59417,59421,59426,59431,59436,59441,59446,59451,59456,59461,59466,59471,59475,59479,59484,59489,59493,59497,59502,59507,59511,59516,59521,59525,59529,59534,59538,59543,59548,59552,59557,59561,59565,59570,59575,59580,59585,59590,59595,59600,59604,59608,59612,59617,59622,59627,59632,59636,59644,59652,59656,59664,59679,59693,59714,59722,59736,59749,59764,59783,59795,59807,59819,59831,59843,59855,59867,59875,59890,59914,59938,59946,59954,59962,59970,59975,59980,59985,59990,59995,60000,60005,60010,60015,60020,60024,60029,60034,60039,60044,60049,60054,60059,60064,60069,60073,60078,60083,60088,60093,60098,60103,60108,60113,60118,60123,60128,60133,60137,60141,60146,60151,60156,60160,60165,60170,60175,60180,60185,60189,60194,60198,60202,60206,60210,60214,60218,60223,60228,60233,60238,60243,60248,60253,60258,60263,60267,60271,60276,60281,60286,60291,60296,60300,60305,60310,60315,60320,60325,60330,60334,60338,60343,60347,60352,60356,60361,60366,60371,60376,60381,60386,60390,60398,60406,60410],{"__ignoreMap":58},[76,59144,59145],{"class":78,"line":79},[76,59146,2472],{"emptyLinePlaceholder":125},[76,59148,59149,59151,59153,59155],{"class":78,"line":86},[76,59150,51367],{"class":93},[76,59152,51371],{"class":89},[76,59154,51374],{"class":250},[76,59156,51377],{"class":93},[76,59158,59159,59161,59163,59165,59167,59169],{"class":78,"line":97},[76,59160,1109],{"class":93},[76,59162,50705],{"class":51370},[76,59164,51386],{"class":2035},[76,59166,247],{"class":93},[76,59168,51391],{"class":305},[76,59170,51377],{"class":93},[76,59172,59173],{"class":78,"line":103},[76,59174,2472],{"emptyLinePlaceholder":125},[76,59176,59177,59179,59181],{"class":78,"line":1273},[76,59178,1109],{"class":93},[76,59180,51404],{"class":51370},[76,59182,51377],{"class":93},[76,59184,59185,59187,59189,59191,59193,59195],{"class":78,"line":1287},[76,59186,52214],{"class":93},[76,59188,51414],{"class":51370},[76,59190,51417],{"class":2035},[76,59192,247],{"class":93},[76,59194,51422],{"class":305},[76,59196,59197],{"class":93}," \u002F>\n",[76,59199,59200,59202,59204,59206,59208,59210,59212,59214,59216],{"class":78,"line":1293},[76,59201,52214],{"class":93},[76,59203,51414],{"class":51370},[76,59205,51433],{"class":2035},[76,59207,247],{"class":93},[76,59209,51438],{"class":305},[76,59211,51441],{"class":2035},[76,59213,247],{"class":93},[76,59215,51446],{"class":305},[76,59217,59197],{"class":93},[76,59219,59220,59222,59224,59226,59228,59230,59232,59234,59236],{"class":78,"line":1384},[76,59221,52214],{"class":93},[76,59223,51414],{"class":51370},[76,59225,14992],{"class":2035},[76,59227,247],{"class":93},[76,59229,51461],{"class":305},[76,59231,51441],{"class":2035},[76,59233,247],{"class":93},[76,59235,51468],{"class":305},[76,59237,59197],{"class":93},[76,59239,59240,59242,59244,59247,59249],{"class":78,"line":1390},[76,59241,52214],{"class":93},[76,59243,51477],{"class":51370},[76,59245,59246],{"class":93},">轮播图点击切换\u003C\u002F",[76,59248,51477],{"class":51370},[76,59250,51377],{"class":93},[76,59252,59253,59255,59257],{"class":78,"line":1402},[76,59254,52214],{"class":93},[76,59256,117],{"class":51370},[76,59258,51377],{"class":93},[76,59260,59261],{"class":78,"line":1684},[76,59262,59263],{"class":93},"    * {\n",[76,59265,59266],{"class":78,"line":1689},[76,59267,59268],{"class":93},"      box-sizing: border-box;\n",[76,59270,59271],{"class":78,"line":1695},[76,59272,2259],{"class":93},[76,59274,59275],{"class":78,"line":1700},[76,59276,2472],{"emptyLinePlaceholder":125},[76,59278,59279],{"class":78,"line":1714},[76,59280,59281],{"class":93},"    .slider {\n",[76,59283,59284],{"class":78,"line":1719},[76,59285,59286],{"class":93},"      width: 560px;\n",[76,59288,59289],{"class":78,"line":1725},[76,59290,59291],{"class":93},"      height: 400px;\n",[76,59293,59294],{"class":78,"line":1746},[76,59295,59296],{"class":93},"      overflow: hidden;\n",[76,59298,59299],{"class":78,"line":1751},[76,59300,2259],{"class":93},[76,59302,59303],{"class":78,"line":1765},[76,59304,2472],{"emptyLinePlaceholder":125},[76,59306,59307],{"class":78,"line":1770},[76,59308,59309],{"class":93},"    .slider-wrapper {\n",[76,59311,59312],{"class":78,"line":1799},[76,59313,59314],{"class":93},"      width: 100%;\n",[76,59316,59317],{"class":78,"line":1804},[76,59318,59319],{"class":93},"      height: 320px;\n",[76,59321,59322],{"class":78,"line":1821},[76,59323,2259],{"class":93},[76,59325,59326],{"class":78,"line":1826},[76,59327,2472],{"emptyLinePlaceholder":125},[76,59329,59330],{"class":78,"line":1831},[76,59331,59332],{"class":93},"    .slider-wrapper img {\n",[76,59334,59335],{"class":78,"line":1836},[76,59336,59314],{"class":93},[76,59338,59339],{"class":78,"line":1850},[76,59340,59341],{"class":93},"      height: 100%;\n",[76,59343,59344],{"class":78,"line":1855},[76,59345,59346],{"class":93},"      display: block;\n",[76,59348,59349],{"class":78,"line":2649},[76,59350,2259],{"class":93},[76,59352,59353],{"class":78,"line":2663},[76,59354,2472],{"emptyLinePlaceholder":125},[76,59356,59357],{"class":78,"line":2671},[76,59358,59359],{"class":93},"    .slider-footer {\n",[76,59361,59362],{"class":78,"line":2676},[76,59363,59364],{"class":93},"      height: 80px;\n",[76,59366,59367],{"class":78,"line":2682},[76,59368,59369],{"class":93},"      background-color: rgb(100, 67, 68);\n",[76,59371,59372],{"class":78,"line":2688},[76,59373,59374],{"class":93},"      padding: 12px 12px 0 12px;\n",[76,59376,59377],{"class":78,"line":2693},[76,59378,59379],{"class":93},"      position: relative;\n",[76,59381,59382],{"class":78,"line":8020},[76,59383,2259],{"class":93},[76,59385,59386],{"class":78,"line":8044},[76,59387,2472],{"emptyLinePlaceholder":125},[76,59389,59390],{"class":78,"line":8049},[76,59391,59392],{"class":93},"    .slider-footer .toggle {\n",[76,59394,59395],{"class":78,"line":8055},[76,59396,59397],{"class":93},"      position: absolute;\n",[76,59399,59400],{"class":78,"line":8082},[76,59401,59402],{"class":93},"      right: 0;\n",[76,59404,59405],{"class":78,"line":8087},[76,59406,59407],{"class":93},"      top: 12px;\n",[76,59409,59410],{"class":78,"line":8093},[76,59411,59412],{"class":93},"      display: flex;\n",[76,59414,59415],{"class":78,"line":8105},[76,59416,2259],{"class":93},[76,59418,59419],{"class":78,"line":8117},[76,59420,2472],{"emptyLinePlaceholder":125},[76,59422,59423],{"class":78,"line":8129},[76,59424,59425],{"class":93},"    .slider-footer .toggle button {\n",[76,59427,59428],{"class":78,"line":9788},[76,59429,59430],{"class":93},"      margin-right: 12px;\n",[76,59432,59433],{"class":78,"line":9813},[76,59434,59435],{"class":93},"      width: 28px;\n",[76,59437,59438],{"class":78,"line":9836},[76,59439,59440],{"class":93},"      height: 28px;\n",[76,59442,59443],{"class":78,"line":9860},[76,59444,59445],{"class":93},"      appearance: none;\n",[76,59447,59448],{"class":78,"line":9865},[76,59449,59450],{"class":93},"      border: none;\n",[76,59452,59453],{"class":78,"line":9870},[76,59454,59455],{"class":93},"      background: rgba(255, 255, 255, 0.1);\n",[76,59457,59458],{"class":78,"line":9875},[76,59459,59460],{"class":93},"      color: #fff;\n",[76,59462,59463],{"class":78,"line":9884},[76,59464,59465],{"class":93},"      border-radius: 4px;\n",[76,59467,59468],{"class":78,"line":9889},[76,59469,59470],{"class":93},"      cursor: pointer;\n",[76,59472,59473],{"class":78,"line":9895},[76,59474,2259],{"class":93},[76,59476,59477],{"class":78,"line":9916},[76,59478,2472],{"emptyLinePlaceholder":125},[76,59480,59481],{"class":78,"line":9922},[76,59482,59483],{"class":93},"    .slider-footer .toggle button:hover {\n",[76,59485,59486],{"class":78,"line":9936},[76,59487,59488],{"class":93},"      background: rgba(255, 255, 255, 0.2);\n",[76,59490,59491],{"class":78,"line":9942},[76,59492,2259],{"class":93},[76,59494,59495],{"class":78,"line":9969},[76,59496,2472],{"emptyLinePlaceholder":125},[76,59498,59499],{"class":78,"line":9978},[76,59500,59501],{"class":93},"    .slider-footer p {\n",[76,59503,59504],{"class":78,"line":9984},[76,59505,59506],{"class":93},"      margin: 0;\n",[76,59508,59509],{"class":78,"line":9992},[76,59510,59460],{"class":93},[76,59512,59513],{"class":78,"line":9997},[76,59514,59515],{"class":93},"      font-size: 18px;\n",[76,59517,59518],{"class":78,"line":16676},[76,59519,59520],{"class":93},"      margin-bottom: 10px;\n",[76,59522,59523],{"class":78,"line":16682},[76,59524,2259],{"class":93},[76,59526,59527],{"class":78,"line":16705},[76,59528,2472],{"emptyLinePlaceholder":125},[76,59530,59531],{"class":78,"line":16711},[76,59532,59533],{"class":93},"    .slider-indicator {\n",[76,59535,59536],{"class":78,"line":16734},[76,59537,59506],{"class":93},[76,59539,59540],{"class":78,"line":16748},[76,59541,59542],{"class":93},"      padding: 0;\n",[76,59544,59545],{"class":78,"line":16768},[76,59546,59547],{"class":93},"      list-style: none;\n",[76,59549,59550],{"class":78,"line":16774},[76,59551,59412],{"class":93},[76,59553,59554],{"class":78,"line":16785},[76,59555,59556],{"class":93},"      align-items: center;\n",[76,59558,59559],{"class":78,"line":16808},[76,59560,2259],{"class":93},[76,59562,59563],{"class":78,"line":16830},[76,59564,2472],{"emptyLinePlaceholder":125},[76,59566,59567],{"class":78,"line":16835},[76,59568,59569],{"class":93},"    .slider-indicator li {\n",[76,59571,59572],{"class":78,"line":16841},[76,59573,59574],{"class":93},"      width: 8px;\n",[76,59576,59577],{"class":78,"line":16855},[76,59578,59579],{"class":93},"      height: 8px;\n",[76,59581,59582],{"class":78,"line":16868},[76,59583,59584],{"class":93},"      margin: 4px;\n",[76,59586,59587],{"class":78,"line":16873},[76,59588,59589],{"class":93},"      border-radius: 50%;\n",[76,59591,59592],{"class":78,"line":16887},[76,59593,59594],{"class":93},"      background: #fff;\n",[76,59596,59597],{"class":78,"line":16892},[76,59598,59599],{"class":93},"      opacity: 0.4;\n",[76,59601,59602],{"class":78,"line":16898},[76,59603,59470],{"class":93},[76,59605,59606],{"class":78,"line":16903},[76,59607,2259],{"class":93},[76,59609,59610],{"class":78,"line":16917},[76,59611,2472],{"emptyLinePlaceholder":125},[76,59613,59614],{"class":78,"line":16922},[76,59615,59616],{"class":93},"    .slider-indicator li.active {\n",[76,59618,59619],{"class":78,"line":16927},[76,59620,59621],{"class":93},"      width: 12px;\n",[76,59623,59624],{"class":78,"line":16941},[76,59625,59626],{"class":93},"      height: 12px;\n",[76,59628,59629],{"class":78,"line":16953},[76,59630,59631],{"class":93},"      opacity: 1;\n",[76,59633,59634],{"class":78,"line":16958},[76,59635,2259],{"class":93},[76,59637,59638,59640,59642],{"class":78,"line":16971},[76,59639,52487],{"class":93},[76,59641,117],{"class":51370},[76,59643,51377],{"class":93},[76,59645,59646,59648,59650],{"class":78,"line":16976},[76,59647,51855],{"class":93},[76,59649,51404],{"class":51370},[76,59651,51377],{"class":93},[76,59653,59654],{"class":78,"line":16981},[76,59655,2472],{"emptyLinePlaceholder":125},[76,59657,59658,59660,59662],{"class":78,"line":16986},[76,59659,1109],{"class":93},[76,59661,51870],{"class":51370},[76,59663,51377],{"class":93},[76,59665,59666,59668,59670,59672,59674,59677],{"class":78,"line":16999},[76,59667,52214],{"class":93},[76,59669,51681],{"class":51370},[76,59671,53556],{"class":2035},[76,59673,247],{"class":93},[76,59675,59676],{"class":305},"\"slider\"",[76,59678,51377],{"class":93},[76,59680,59681,59683,59685,59687,59689,59691],{"class":78,"line":17004},[76,59682,51411],{"class":93},[76,59684,51681],{"class":51370},[76,59686,53556],{"class":2035},[76,59688,247],{"class":93},[76,59690,55297],{"class":305},[76,59692,51377],{"class":93},[76,59694,59695,59697,59699,59701,59703,59706,59708,59710,59712],{"class":78,"line":32703},[76,59696,55304],{"class":93},[76,59698,56],{"class":51370},[76,59700,55309],{"class":2035},[76,59702,247],{"class":93},[76,59704,59705],{"class":305},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[76,59707,55317],{"class":2035},[76,59709,247],{"class":93},[76,59711,7724],{"class":305},[76,59713,59197],{"class":93},[76,59715,59716,59718,59720],{"class":78,"line":32709},[76,59717,51846],{"class":93},[76,59719,51681],{"class":51370},[76,59721,51377],{"class":93},[76,59723,59724,59726,59728,59730,59732,59734],{"class":78,"line":32715},[76,59725,51411],{"class":93},[76,59727,51681],{"class":51370},[76,59729,53556],{"class":2035},[76,59731,247],{"class":93},[76,59733,55344],{"class":305},[76,59735,51377],{"class":93},[76,59737,59738,59740,59742,59745,59747],{"class":78,"line":32721},[76,59739,55304],{"class":93},[76,59741,14],{"class":51370},[76,59743,59744],{"class":93},">对人类来说会不会太超前了？\u003C\u002F",[76,59746,14],{"class":51370},[76,59748,51377],{"class":93},[76,59750,59751,59753,59755,59757,59759,59762],{"class":78,"line":32727},[76,59752,55304],{"class":93},[76,59754,1206],{"class":51370},[76,59756,53556],{"class":2035},[76,59758,247],{"class":93},[76,59760,59761],{"class":305},"\"slider-indicator\"",[76,59763,51377],{"class":93},[76,59765,59766,59768,59770,59772,59774,59777,59779,59781],{"class":78,"line":32738},[76,59767,55372],{"class":93},[76,59769,155],{"class":51370},[76,59771,53556],{"class":2035},[76,59773,247],{"class":93},[76,59775,59776],{"class":305},"\"active\"",[76,59778,55384],{"class":93},[76,59780,155],{"class":51370},[76,59782,51377],{"class":93},[76,59784,59785,59787,59789,59791,59793],{"class":78,"line":32744},[76,59786,55372],{"class":93},[76,59788,155],{"class":51370},[76,59790,55384],{"class":93},[76,59792,155],{"class":51370},[76,59794,51377],{"class":93},[76,59796,59797,59799,59801,59803,59805],{"class":78,"line":32764},[76,59798,55372],{"class":93},[76,59800,155],{"class":51370},[76,59802,55384],{"class":93},[76,59804,155],{"class":51370},[76,59806,51377],{"class":93},[76,59808,59809,59811,59813,59815,59817],{"class":78,"line":32770},[76,59810,55372],{"class":93},[76,59812,155],{"class":51370},[76,59814,55384],{"class":93},[76,59816,155],{"class":51370},[76,59818,51377],{"class":93},[76,59820,59821,59823,59825,59827,59829],{"class":78,"line":32781},[76,59822,55372],{"class":93},[76,59824,155],{"class":51370},[76,59826,55384],{"class":93},[76,59828,155],{"class":51370},[76,59830,51377],{"class":93},[76,59832,59833,59835,59837,59839,59841],{"class":78,"line":32787},[76,59834,55372],{"class":93},[76,59836,155],{"class":51370},[76,59838,55384],{"class":93},[76,59840,155],{"class":51370},[76,59842,51377],{"class":93},[76,59844,59845,59847,59849,59851,59853],{"class":78,"line":32793},[76,59846,55372],{"class":93},[76,59848,155],{"class":51370},[76,59850,55384],{"class":93},[76,59852,155],{"class":51370},[76,59854,51377],{"class":93},[76,59856,59857,59859,59861,59863,59865],{"class":78,"line":32799},[76,59858,55372],{"class":93},[76,59860,155],{"class":51370},[76,59862,55384],{"class":93},[76,59864,155],{"class":51370},[76,59866,51377],{"class":93},[76,59868,59869,59871,59873],{"class":78,"line":32805},[76,59870,55477],{"class":93},[76,59872,1206],{"class":51370},[76,59874,51377],{"class":93},[76,59876,59877,59879,59881,59883,59885,59888],{"class":78,"line":32811},[76,59878,55304],{"class":93},[76,59880,51681],{"class":51370},[76,59882,53556],{"class":2035},[76,59884,247],{"class":93},[76,59886,59887],{"class":305},"\"toggle\"",[76,59889,51377],{"class":93},[76,59891,59892,59894,59896,59898,59900,59903,59905,59908,59910,59912],{"class":78,"line":32817},[76,59893,55372],{"class":93},[76,59895,53957],{"class":51370},[76,59897,53556],{"class":2035},[76,59899,247],{"class":93},[76,59901,59902],{"class":305},"\"prev\"",[76,59904,1159],{"class":93},[76,59906,59907],{"class":250},"&lt;",[76,59909,51855],{"class":93},[76,59911,53957],{"class":51370},[76,59913,51377],{"class":93},[76,59915,59916,59918,59920,59922,59924,59927,59929,59932,59934,59936],{"class":78,"line":32823},[76,59917,55372],{"class":93},[76,59919,53957],{"class":51370},[76,59921,53556],{"class":2035},[76,59923,247],{"class":93},[76,59925,59926],{"class":305},"\"next\"",[76,59928,1159],{"class":93},[76,59930,59931],{"class":250},"&gt;",[76,59933,51855],{"class":93},[76,59935,53957],{"class":51370},[76,59937,51377],{"class":93},[76,59939,59940,59942,59944],{"class":78,"line":32843},[76,59941,55477],{"class":93},[76,59943,51681],{"class":51370},[76,59945,51377],{"class":93},[76,59947,59948,59950,59952],{"class":78,"line":32849},[76,59949,51846],{"class":93},[76,59951,51681],{"class":51370},[76,59953,51377],{"class":93},[76,59955,59956,59958,59960],{"class":78,"line":32865},[76,59957,52487],{"class":93},[76,59959,51681],{"class":51370},[76,59961,51377],{"class":93},[76,59963,59964,59966,59968],{"class":78,"line":32871},[76,59965,52214],{"class":93},[76,59967,51883],{"class":51370},[76,59969,51377],{"class":93},[76,59971,59972],{"class":78,"line":32885},[76,59973,59974],{"class":93},"    \u002F\u002F 1. 初始数据\n",[76,59976,59977],{"class":78,"line":32891},[76,59978,59979],{"class":93},"    const data = [\n",[76,59981,59982],{"class":78,"line":32906},[76,59983,59984],{"class":93},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[76,59986,59987],{"class":78,"line":32912},[76,59988,59989],{"class":93},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[76,59991,59992],{"class":78,"line":32921},[76,59993,59994],{"class":93},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[76,59996,59997],{"class":78,"line":32927},[76,59998,59999],{"class":93},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[76,60001,60002],{"class":78,"line":32936},[76,60003,60004],{"class":93},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[76,60006,60007],{"class":78,"line":32942},[76,60008,60009],{"class":93},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[76,60011,60012],{"class":78,"line":32948},[76,60013,60014],{"class":93},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[76,60016,60017],{"class":78,"line":32957},[76,60018,60019],{"class":93},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[76,60021,60022],{"class":78,"line":32963},[76,60023,53179],{"class":93},[76,60025,60026],{"class":78,"line":32974},[76,60027,60028],{"class":93},"    \u002F\u002F 获取元素\n",[76,60030,60031],{"class":78,"line":32980},[76,60032,60033],{"class":93},"    const img = document.querySelector('.slider-wrapper img')\n",[76,60035,60036],{"class":78,"line":32999},[76,60037,60038],{"class":93},"    const p = document.querySelector('.slider-footer p')\n",[76,60040,60041],{"class":78,"line":33005},[76,60042,60043],{"class":93},"    const footer = document.querySelector('.slider-footer')\n",[76,60045,60046],{"class":78,"line":33016},[76,60047,60048],{"class":93},"    \u002F\u002F 1. 右按钮业务\n",[76,60050,60051],{"class":78,"line":33022},[76,60052,60053],{"class":93},"    \u002F\u002F 1.1 获取右侧按钮 \n",[76,60055,60056],{"class":78,"line":33042},[76,60057,60058],{"class":93},"    const next = document.querySelector('.next')\n",[76,60060,60061],{"class":78,"line":33058},[76,60062,60063],{"class":93},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[76,60065,60066],{"class":78,"line":33064},[76,60067,60068],{"class":93},"    \u002F\u002F 1.2 注册点击事件\n",[76,60070,60071],{"class":78,"line":33078},[76,60072,2472],{"emptyLinePlaceholder":125},[76,60074,60075],{"class":78,"line":33084},[76,60076,60077],{"class":93},"    next.addEventListener('click', function () {\n",[76,60079,60080],{"class":78,"line":33090},[76,60081,60082],{"class":93},"      \u002F\u002F console.log(11)\n",[76,60084,60085],{"class":78,"line":33101},[76,60086,60087],{"class":93},"      i++\n",[76,60089,60090],{"class":78,"line":33107},[76,60091,60092],{"class":93},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[76,60094,60095],{"class":78,"line":33113},[76,60096,60097],{"class":93},"      \u002F\u002F if (i >= 8) {\n",[76,60099,60100],{"class":78,"line":33123},[76,60101,60102],{"class":93},"      \u002F\u002F   i = 0\n",[76,60104,60105],{"class":78,"line":33129},[76,60106,60107],{"class":93},"      \u002F\u002F }\n",[76,60109,60110],{"class":78,"line":33140},[76,60111,60112],{"class":93},"      i = i >= data.length ? 0 : i\n",[76,60114,60115],{"class":78,"line":33146},[76,60116,60117],{"class":93},"      \u002F\u002F 1.3 得到对应的对象\n",[76,60119,60120],{"class":78,"line":33156},[76,60121,60122],{"class":93},"      \u002F\u002F console.log(data[i])\n",[76,60124,60125],{"class":78,"line":33161},[76,60126,60127],{"class":93},"      \u002F\u002F 调用函数\n",[76,60129,60130],{"class":78,"line":33167},[76,60131,60132],{"class":93},"      toggle()\n",[76,60134,60135],{"class":78,"line":33216},[76,60136,33531],{"class":93},[76,60138,60139],{"class":78,"line":33263},[76,60140,2472],{"emptyLinePlaceholder":125},[76,60142,60143],{"class":78,"line":33268},[76,60144,60145],{"class":93},"    \u002F\u002F 2. 左侧按钮业务\n",[76,60147,60148],{"class":78,"line":33274},[76,60149,60150],{"class":93},"    \u002F\u002F 2.1 获取左侧按钮 \n",[76,60152,60153],{"class":78,"line":33293},[76,60154,60155],{"class":93},"    const prev = document.querySelector('.prev')\n",[76,60157,60158],{"class":78,"line":33299},[76,60159,60068],{"class":93},[76,60161,60162],{"class":78,"line":33319},[76,60163,60164],{"class":93},"    prev.addEventListener('click', function () {\n",[76,60166,60167],{"class":78,"line":33325},[76,60168,60169],{"class":93},"      i--\n",[76,60171,60172],{"class":78,"line":33331},[76,60173,60174],{"class":93},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[76,60176,60177],{"class":78,"line":33341},[76,60178,60179],{"class":93},"      \u002F\u002F if (i \u003C 0) {\n",[76,60181,60182],{"class":78,"line":33346},[76,60183,60184],{"class":93},"      \u002F\u002F   i = 7\n",[76,60186,60187],{"class":78,"line":33352},[76,60188,60107],{"class":93},[76,60190,60191],{"class":78,"line":33368},[76,60192,60193],{"class":93},"      i = i \u003C 0 ? data.length - 1 : i\n",[76,60195,60196],{"class":78,"line":33413},[76,60197,60117],{"class":93},[76,60199,60200],{"class":78,"line":33419},[76,60201,60122],{"class":93},[76,60203,60204],{"class":78,"line":33425},[76,60205,60127],{"class":93},[76,60207,60208],{"class":78,"line":33431},[76,60209,60132],{"class":93},[76,60211,60212],{"class":78,"line":33442},[76,60213,33531],{"class":93},[76,60215,60216],{"class":78,"line":33448},[76,60217,2472],{"emptyLinePlaceholder":125},[76,60219,60220],{"class":78,"line":33454},[76,60221,60222],{"class":93},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[76,60224,60225],{"class":78,"line":33460},[76,60226,60227],{"class":93},"    function toggle() {\n",[76,60229,60230],{"class":78,"line":33478},[76,60231,60232],{"class":93},"      \u002F\u002F 1.4 渲染对应的数据\n",[76,60234,60235],{"class":78,"line":33492},[76,60236,60237],{"class":93},"      img.src = data[i].url\n",[76,60239,60240],{"class":78,"line":33501},[76,60241,60242],{"class":93},"      p.innerHTML = data[i].title\n",[76,60244,60245],{"class":78,"line":33510},[76,60246,60247],{"class":93},"      footer.style.backgroundColor = data[i].color\n",[76,60249,60250],{"class":78,"line":33519},[76,60251,60252],{"class":93},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[76,60254,60255],{"class":78,"line":33528},[76,60256,60257],{"class":93},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[76,60259,60260],{"class":78,"line":33534},[76,60261,60262],{"class":93},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[76,60264,60265],{"class":78,"line":33540},[76,60266,2259],{"class":93},[76,60268,60269],{"class":78,"line":33548},[76,60270,2472],{"emptyLinePlaceholder":125},[76,60272,60273],{"class":78,"line":33553},[76,60274,60275],{"class":93},"    \u002F\u002F 3. 自动播放模块\n",[76,60277,60278],{"class":78,"line":33559},[76,60279,60280],{"class":93},"    let timerId = setInterval(function () {\n",[76,60282,60283],{"class":78,"line":33570},[76,60284,60285],{"class":93},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[76,60287,60288],{"class":78,"line":33576},[76,60289,60290],{"class":93},"      next.click()\n",[76,60292,60293],{"class":78,"line":33596},[76,60294,60295],{"class":93},"    }, 1000)\n",[76,60297,60298],{"class":78,"line":33602},[76,60299,2472],{"emptyLinePlaceholder":125},[76,60301,60302],{"class":78,"line":33608},[76,60303,60304],{"class":93},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[76,60306,60307],{"class":78,"line":33614},[76,60308,60309],{"class":93},"    const slider = document.querySelector('.slider')\n",[76,60311,60312],{"class":78,"line":33631},[76,60313,60314],{"class":93},"    \u002F\u002F 注册事件\n",[76,60316,60317],{"class":78,"line":33637},[76,60318,60319],{"class":93},"    slider.addEventListener('mouseenter', function () {\n",[76,60321,60322],{"class":78,"line":33643},[76,60323,60324],{"class":93},"      \u002F\u002F 停止定时器\n",[76,60326,60327],{"class":78,"line":33649},[76,60328,60329],{"class":93},"      clearInterval(timerId)\n",[76,60331,60332],{"class":78,"line":33655},[76,60333,33531],{"class":93},[76,60335,60336],{"class":78,"line":33661},[76,60337,2472],{"emptyLinePlaceholder":125},[76,60339,60340],{"class":78,"line":33688},[76,60341,60342],{"class":93},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[76,60344,60345],{"class":78,"line":33712},[76,60346,60314],{"class":93},[76,60348,60349],{"class":78,"line":33718},[76,60350,60351],{"class":93},"    slider.addEventListener('mouseleave', function () {\n",[76,60353,60354],{"class":78,"line":33724},[76,60355,60324],{"class":93},[76,60357,60358],{"class":78,"line":33730},[76,60359,60360],{"class":93},"      if (timerId) clearInterval(timerId)\n",[76,60362,60363],{"class":78,"line":33741},[76,60364,60365],{"class":93},"      \u002F\u002F 开启定时器\n",[76,60367,60368],{"class":78,"line":33752},[76,60369,60370],{"class":93},"      timerId = setInterval(function () {\n",[76,60372,60373],{"class":78,"line":33758},[76,60374,60375],{"class":93},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[76,60377,60378],{"class":78,"line":33775},[76,60379,60380],{"class":93},"        next.click()\n",[76,60382,60383],{"class":78,"line":33798},[76,60384,60385],{"class":93},"      }, 1000)\n",[76,60387,60388],{"class":78,"line":33821},[76,60389,33531],{"class":93},[76,60391,60392,60394,60396],{"class":78,"line":33827},[76,60393,52487],{"class":93},[76,60395,51883],{"class":51370},[76,60397,51377],{"class":93},[76,60399,60400,60402,60404],{"class":78,"line":33832},[76,60401,51855],{"class":93},[76,60403,51870],{"class":51370},[76,60405,51377],{"class":93},[76,60407,60408],{"class":78,"line":33841},[76,60409,2472],{"emptyLinePlaceholder":125},[76,60411,60412,60414,60416],{"class":78,"line":33851},[76,60413,51855],{"class":93},[76,60415,50705],{"class":51370},[76,60417,51377],{"class":93},[22070,60419,60421],{"id":60420},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60423,60424],{},"小米搜索框案例：",[67,60426,60428],{"className":50703,"code":60427,"language":50705,"meta":58,"style":58},"\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",[73,60429,60430,60440,60454,60458,60466,60480,60500,60520,60532,60540,60546,60556,60566,60578,60582,60586,60593,60597,60608,60612,60616,60623,60634,60647,60661,60665,60669,60678,60690,60702,60716,60729,60742,60760,60771,60775,60779,60788,60805,60809,60813,60820,60830,60840,60851,60864,60876,60892,60903,60915,60919,60923,60931,60942,60959,60971,60983,60994,60998,61002,61013,61024,61028,61036,61040,61048,61052,61060,61075,61098,61113,61144,61171,61198,61225,61252,61279,61306,61315,61323,61331,61336,61356,61376,61381,61386,61404,61409,61419,61424,61438,61443,61448,61465,61474,61486,61490,61498,61506,61510],{"__ignoreMap":58},[76,60431,60432,60434,60436,60438],{"class":78,"line":79},[76,60433,51367],{"class":93},[76,60435,51371],{"class":51370},[76,60437,51374],{"class":2035},[76,60439,51377],{"class":93},[76,60441,60442,60444,60446,60448,60450,60452],{"class":78,"line":86},[76,60443,1109],{"class":93},[76,60445,50705],{"class":51370},[76,60447,51386],{"class":2035},[76,60449,247],{"class":93},[76,60451,51391],{"class":305},[76,60453,51377],{"class":93},[76,60455,60456],{"class":78,"line":97},[76,60457,2472],{"emptyLinePlaceholder":125},[76,60459,60460,60462,60464],{"class":78,"line":103},[76,60461,1109],{"class":93},[76,60463,51404],{"class":51370},[76,60465,51377],{"class":93},[76,60467,60468,60470,60472,60474,60476,60478],{"class":78,"line":1273},[76,60469,51411],{"class":93},[76,60471,51414],{"class":51370},[76,60473,51417],{"class":2035},[76,60475,247],{"class":93},[76,60477,51422],{"class":305},[76,60479,51377],{"class":93},[76,60481,60482,60484,60486,60488,60490,60492,60494,60496,60498],{"class":78,"line":1287},[76,60483,51411],{"class":93},[76,60485,51414],{"class":51370},[76,60487,51433],{"class":2035},[76,60489,247],{"class":93},[76,60491,51438],{"class":305},[76,60493,51441],{"class":2035},[76,60495,247],{"class":93},[76,60497,51446],{"class":305},[76,60499,51377],{"class":93},[76,60501,60502,60504,60506,60508,60510,60512,60514,60516,60518],{"class":78,"line":1293},[76,60503,51411],{"class":93},[76,60505,51414],{"class":51370},[76,60507,14992],{"class":2035},[76,60509,247],{"class":93},[76,60511,51461],{"class":305},[76,60513,51441],{"class":2035},[76,60515,247],{"class":93},[76,60517,51468],{"class":305},[76,60519,51377],{"class":93},[76,60521,60522,60524,60526,60528,60530],{"class":78,"line":1384},[76,60523,51411],{"class":93},[76,60525,51477],{"class":51370},[76,60527,51480],{"class":93},[76,60529,51477],{"class":51370},[76,60531,51377],{"class":93},[76,60533,60534,60536,60538],{"class":78,"line":1390},[76,60535,51411],{"class":93},[76,60537,117],{"class":51370},[76,60539,51377],{"class":93},[76,60541,60542,60544],{"class":78,"line":1402},[76,60543,51497],{"class":51370},[76,60545,15644],{"class":93},[76,60547,60548,60550,60552,60554],{"class":78,"line":1684},[76,60549,51504],{"class":250},[76,60551,51507],{"class":93},[76,60553,392],{"class":250},[76,60555,1363],{"class":93},[76,60557,60558,60560,60562,60564],{"class":78,"line":1689},[76,60559,51516],{"class":250},[76,60561,51507],{"class":93},[76,60563,392],{"class":250},[76,60565,1363],{"class":93},[76,60567,60568,60571,60573,60576],{"class":78,"line":1695},[76,60569,60570],{"class":250},"            box-sizing",[76,60572,51507],{"class":93},[76,60574,60575],{"class":250},"border-box",[76,60577,1363],{"class":93},[76,60579,60580],{"class":78,"line":1700},[76,60581,2601],{"class":93},[76,60583,60584],{"class":78,"line":1714},[76,60585,2472],{"emptyLinePlaceholder":125},[76,60587,60588,60591],{"class":78,"line":1719},[76,60589,60590],{"class":51370},"        ul",[76,60592,15644],{"class":93},[76,60594,60595],{"class":78,"line":1725},[76,60596,2472],{"emptyLinePlaceholder":125},[76,60598,60599,60602,60604,60606],{"class":78,"line":1746},[76,60600,60601],{"class":250},"            list-style",[76,60603,51507],{"class":93},[76,60605,54807],{"class":250},[76,60607,1363],{"class":93},[76,60609,60610],{"class":78,"line":1751},[76,60611,2601],{"class":93},[76,60613,60614],{"class":78,"line":1765},[76,60615,2472],{"emptyLinePlaceholder":125},[76,60617,60618,60621],{"class":78,"line":1770},[76,60619,60620],{"class":2035},"        .mi",[76,60622,15644],{"class":93},[76,60624,60625,60628,60630,60632],{"class":78,"line":1799},[76,60626,60627],{"class":250},"            position",[76,60629,51507],{"class":93},[76,60631,54834],{"class":250},[76,60633,1363],{"class":93},[76,60635,60636,60638,60640,60643,60645],{"class":78,"line":1804},[76,60637,51554],{"class":250},[76,60639,51507],{"class":93},[76,60641,60642],{"class":250},"223",[76,60644,51562],{"class":89},[76,60646,1363],{"class":93},[76,60648,60649,60651,60653,60655,60657,60659],{"class":78,"line":1821},[76,60650,51504],{"class":250},[76,60652,51507],{"class":93},[76,60654,512],{"class":250},[76,60656,51562],{"class":89},[76,60658,51626],{"class":250},[76,60660,1363],{"class":93},[76,60662,60663],{"class":78,"line":1826},[76,60664,2601],{"class":93},[76,60666,60667],{"class":78,"line":1831},[76,60668,2472],{"emptyLinePlaceholder":125},[76,60670,60671,60673,60676],{"class":78,"line":1836},[76,60672,60620],{"class":2035},[76,60674,60675],{"class":51370}," input",[76,60677,15644],{"class":93},[76,60679,60680,60682,60684,60686,60688],{"class":78,"line":1850},[76,60681,51554],{"class":250},[76,60683,51507],{"class":93},[76,60685,60642],{"class":250},[76,60687,51562],{"class":89},[76,60689,1363],{"class":93},[76,60691,60692,60694,60696,60698,60700],{"class":78,"line":1855},[76,60693,51569],{"class":250},[76,60695,51507],{"class":93},[76,60697,806],{"class":250},[76,60699,51562],{"class":89},[76,60701,1363],{"class":93},[76,60703,60704,60706,60708,60710,60712,60714],{"class":78,"line":2649},[76,60705,51516],{"class":250},[76,60707,51507],{"class":93},[76,60709,392],{"class":250},[76,60711,2110],{"class":250},[76,60713,51562],{"class":89},[76,60715,1363],{"class":93},[76,60717,60718,60721,60723,60725,60727],{"class":78,"line":2663},[76,60719,60720],{"class":250},"            font-size",[76,60722,51507],{"class":93},[76,60724,748],{"class":250},[76,60726,51562],{"class":89},[76,60728,1363],{"class":93},[76,60730,60731,60734,60736,60738,60740],{"class":78,"line":2671},[76,60732,60733],{"class":250},"            line-height",[76,60735,51507],{"class":93},[76,60737,806],{"class":250},[76,60739,51562],{"class":89},[76,60741,1363],{"class":93},[76,60743,60744,60747,60749,60751,60753,60755,60758],{"class":78,"line":2676},[76,60745,60746],{"class":250},"            border",[76,60748,51507],{"class":93},[76,60750,418],{"class":250},[76,60752,51562],{"class":89},[76,60754,51591],{"class":250},[76,60756,60757],{"class":250}," #e0e0e0",[76,60759,1363],{"class":93},[76,60761,60762,60765,60767,60769],{"class":78,"line":2682},[76,60763,60764],{"class":250},"            outline",[76,60766,51507],{"class":93},[76,60768,54807],{"class":250},[76,60770,1363],{"class":93},[76,60772,60773],{"class":78,"line":2688},[76,60774,2601],{"class":93},[76,60776,60777],{"class":78,"line":2693},[76,60778,2472],{"emptyLinePlaceholder":125},[76,60780,60781,60783,60786],{"class":78,"line":8020},[76,60782,60620],{"class":2035},[76,60784,60785],{"class":2035}," .search",[76,60787,15644],{"class":93},[76,60789,60790,60792,60794,60796,60798,60800,60803],{"class":78,"line":8044},[76,60791,60746],{"class":250},[76,60793,51507],{"class":93},[76,60795,418],{"class":250},[76,60797,51562],{"class":89},[76,60799,51591],{"class":250},[76,60801,60802],{"class":250}," #ff6700",[76,60804,1363],{"class":93},[76,60806,60807],{"class":78,"line":8049},[76,60808,2601],{"class":93},[76,60810,60811],{"class":78,"line":8055},[76,60812,2472],{"emptyLinePlaceholder":125},[76,60814,60815,60818],{"class":78,"line":8082},[76,60816,60817],{"class":2035},"        .result-list",[76,60819,15644],{"class":93},[76,60821,60822,60824,60826,60828],{"class":78,"line":8087},[76,60823,51542],{"class":250},[76,60825,51507],{"class":93},[76,60827,54807],{"class":250},[76,60829,1363],{"class":93},[76,60831,60832,60834,60836,60838],{"class":78,"line":8093},[76,60833,60627],{"class":250},[76,60835,51507],{"class":93},[76,60837,54901],{"class":250},[76,60839,1363],{"class":93},[76,60841,60842,60845,60847,60849],{"class":78,"line":8105},[76,60843,60844],{"class":250},"            left",[76,60846,51507],{"class":93},[76,60848,392],{"class":250},[76,60850,1363],{"class":93},[76,60852,60853,60856,60858,60860,60862],{"class":78,"line":8117},[76,60854,60855],{"class":250},"            top",[76,60857,51507],{"class":93},[76,60859,806],{"class":250},[76,60861,51562],{"class":89},[76,60863,1363],{"class":93},[76,60865,60866,60868,60870,60872,60874],{"class":78,"line":8129},[76,60867,51554],{"class":250},[76,60869,51507],{"class":93},[76,60871,60642],{"class":250},[76,60873,51562],{"class":89},[76,60875,1363],{"class":93},[76,60877,60878,60880,60882,60884,60886,60888,60890],{"class":78,"line":9788},[76,60879,60746],{"class":250},[76,60881,51507],{"class":93},[76,60883,418],{"class":250},[76,60885,51562],{"class":89},[76,60887,51591],{"class":250},[76,60889,60802],{"class":250},[76,60891,1363],{"class":93},[76,60893,60894,60897,60899,60901],{"class":78,"line":9813},[76,60895,60896],{"class":250},"            border-top",[76,60898,51507],{"class":93},[76,60900,392],{"class":250},[76,60902,1363],{"class":93},[76,60904,60905,60908,60910,60913],{"class":78,"line":9836},[76,60906,60907],{"class":250},"            background",[76,60909,51507],{"class":93},[76,60911,60912],{"class":250},"#fff",[76,60914,1363],{"class":93},[76,60916,60917],{"class":78,"line":9860},[76,60918,2601],{"class":93},[76,60920,60921],{"class":78,"line":9865},[76,60922,2472],{"emptyLinePlaceholder":125},[76,60924,60925,60927,60929],{"class":78,"line":9870},[76,60926,60817],{"class":2035},[76,60928,1471],{"class":51370},[76,60930,15644],{"class":93},[76,60932,60933,60935,60937,60940],{"class":78,"line":9875},[76,60934,51542],{"class":250},[76,60936,51507],{"class":93},[76,60938,60939],{"class":250},"block",[76,60941,1363],{"class":93},[76,60943,60944,60946,60948,60950,60952,60955,60957],{"class":78,"line":9884},[76,60945,51516],{"class":250},[76,60947,51507],{"class":93},[76,60949,544],{"class":250},[76,60951,51562],{"class":89},[76,60953,60954],{"class":250}," 15",[76,60956,51562],{"class":89},[76,60958,1363],{"class":93},[76,60960,60961,60963,60965,60967,60969],{"class":78,"line":9889},[76,60962,60720],{"class":250},[76,60964,51507],{"class":93},[76,60966,698],{"class":250},[76,60968,51562],{"class":89},[76,60970,1363],{"class":93},[76,60972,60973,60976,60978,60981],{"class":78,"line":9895},[76,60974,60975],{"class":250},"            color",[76,60977,51507],{"class":93},[76,60979,60980],{"class":250},"#424242",[76,60982,1363],{"class":93},[76,60984,60985,60988,60990,60992],{"class":78,"line":9916},[76,60986,60987],{"class":250},"            text-decoration",[76,60989,51507],{"class":93},[76,60991,54807],{"class":250},[76,60993,1363],{"class":93},[76,60995,60996],{"class":78,"line":9922},[76,60997,2601],{"class":93},[76,60999,61000],{"class":78,"line":9936},[76,61001,2472],{"emptyLinePlaceholder":125},[76,61003,61004,61006,61008,61011],{"class":78,"line":9942},[76,61005,60817],{"class":2035},[76,61007,1471],{"class":51370},[76,61009,61010],{"class":2035},":hover",[76,61012,15644],{"class":93},[76,61014,61015,61017,61019,61022],{"class":78,"line":9969},[76,61016,51710],{"class":250},[76,61018,51507],{"class":93},[76,61020,61021],{"class":250},"#eee",[76,61023,1363],{"class":93},[76,61025,61026],{"class":78,"line":9978},[76,61027,2601],{"class":93},[76,61029,61030,61032,61034],{"class":78,"line":9984},[76,61031,51846],{"class":93},[76,61033,117],{"class":51370},[76,61035,51377],{"class":93},[76,61037,61038],{"class":78,"line":9992},[76,61039,2472],{"emptyLinePlaceholder":125},[76,61041,61042,61044,61046],{"class":78,"line":9997},[76,61043,51855],{"class":93},[76,61045,51404],{"class":51370},[76,61047,51377],{"class":93},[76,61049,61050],{"class":78,"line":16676},[76,61051,2472],{"emptyLinePlaceholder":125},[76,61053,61054,61056,61058],{"class":78,"line":16682},[76,61055,1109],{"class":93},[76,61057,51870],{"class":51370},[76,61059,51377],{"class":93},[76,61061,61062,61064,61066,61068,61070,61073],{"class":78,"line":16705},[76,61063,51411],{"class":93},[76,61065,51681],{"class":51370},[76,61067,53556],{"class":2035},[76,61069,247],{"class":93},[76,61071,61072],{"class":305},"\"mi\"",[76,61074,51377],{"class":93},[76,61076,61077,61079,61081,61083,61085,61088,61091,61093,61096],{"class":78,"line":16711},[76,61078,55372],{"class":93},[76,61080,53891],{"class":51370},[76,61082,53894],{"class":2035},[76,61084,247],{"class":93},[76,61086,61087],{"class":305},"\"search\"",[76,61089,61090],{"class":2035}," placeholder",[76,61092,247],{"class":93},[76,61094,61095],{"class":305},"\"小米笔记本\"",[76,61097,51377],{"class":93},[76,61099,61100,61102,61104,61106,61108,61111],{"class":78,"line":16734},[76,61101,55372],{"class":93},[76,61103,1206],{"class":51370},[76,61105,53556],{"class":2035},[76,61107,247],{"class":93},[76,61109,61110],{"class":305},"\"result-list\"",[76,61112,51377],{"class":93},[76,61114,61115,61118,61120,61123,61125,61128,61130,61133,61136,61138,61140,61142],{"class":78,"line":16748},[76,61116,61117],{"class":93},"            \u003C",[76,61119,155],{"class":51370},[76,61121,61122],{"class":93},">\u003C",[76,61124,439],{"class":51370},[76,61126,61127],{"class":2035}," href",[76,61129,247],{"class":93},[76,61131,61132],{"class":305},"\"#\"",[76,61134,61135],{"class":93},">全部商品\u003C\u002F",[76,61137,439],{"class":51370},[76,61139,55384],{"class":93},[76,61141,155],{"class":51370},[76,61143,51377],{"class":93},[76,61145,61146,61148,61150,61152,61154,61156,61158,61160,61163,61165,61167,61169],{"class":78,"line":16768},[76,61147,61117],{"class":93},[76,61149,155],{"class":51370},[76,61151,61122],{"class":93},[76,61153,439],{"class":51370},[76,61155,61127],{"class":2035},[76,61157,247],{"class":93},[76,61159,61132],{"class":305},[76,61161,61162],{"class":93},">小米11\u003C\u002F",[76,61164,439],{"class":51370},[76,61166,55384],{"class":93},[76,61168,155],{"class":51370},[76,61170,51377],{"class":93},[76,61172,61173,61175,61177,61179,61181,61183,61185,61187,61190,61192,61194,61196],{"class":78,"line":16774},[76,61174,61117],{"class":93},[76,61176,155],{"class":51370},[76,61178,61122],{"class":93},[76,61180,439],{"class":51370},[76,61182,61127],{"class":2035},[76,61184,247],{"class":93},[76,61186,61132],{"class":305},[76,61188,61189],{"class":93},">小米10S\u003C\u002F",[76,61191,439],{"class":51370},[76,61193,55384],{"class":93},[76,61195,155],{"class":51370},[76,61197,51377],{"class":93},[76,61199,61200,61202,61204,61206,61208,61210,61212,61214,61217,61219,61221,61223],{"class":78,"line":16785},[76,61201,61117],{"class":93},[76,61203,155],{"class":51370},[76,61205,61122],{"class":93},[76,61207,439],{"class":51370},[76,61209,61127],{"class":2035},[76,61211,247],{"class":93},[76,61213,61132],{"class":305},[76,61215,61216],{"class":93},">小米笔记本\u003C\u002F",[76,61218,439],{"class":51370},[76,61220,55384],{"class":93},[76,61222,155],{"class":51370},[76,61224,51377],{"class":93},[76,61226,61227,61229,61231,61233,61235,61237,61239,61241,61244,61246,61248,61250],{"class":78,"line":16808},[76,61228,61117],{"class":93},[76,61230,155],{"class":51370},[76,61232,61122],{"class":93},[76,61234,439],{"class":51370},[76,61236,61127],{"class":2035},[76,61238,247],{"class":93},[76,61240,61132],{"class":305},[76,61242,61243],{"class":93},">小米手机\u003C\u002F",[76,61245,439],{"class":51370},[76,61247,55384],{"class":93},[76,61249,155],{"class":51370},[76,61251,51377],{"class":93},[76,61253,61254,61256,61258,61260,61262,61264,61266,61268,61271,61273,61275,61277],{"class":78,"line":16830},[76,61255,61117],{"class":93},[76,61257,155],{"class":51370},[76,61259,61122],{"class":93},[76,61261,439],{"class":51370},[76,61263,61127],{"class":2035},[76,61265,247],{"class":93},[76,61267,61132],{"class":305},[76,61269,61270],{"class":93},">黑鲨4\u003C\u002F",[76,61272,439],{"class":51370},[76,61274,55384],{"class":93},[76,61276,155],{"class":51370},[76,61278,51377],{"class":93},[76,61280,61281,61283,61285,61287,61289,61291,61293,61295,61298,61300,61302,61304],{"class":78,"line":16835},[76,61282,61117],{"class":93},[76,61284,155],{"class":51370},[76,61286,61122],{"class":93},[76,61288,439],{"class":51370},[76,61290,61127],{"class":2035},[76,61292,247],{"class":93},[76,61294,61132],{"class":305},[76,61296,61297],{"class":93},">空调\u003C\u002F",[76,61299,439],{"class":51370},[76,61301,55384],{"class":93},[76,61303,155],{"class":51370},[76,61305,51377],{"class":93},[76,61307,61308,61311,61313],{"class":78,"line":16841},[76,61309,61310],{"class":93},"        \u003C\u002F",[76,61312,1206],{"class":51370},[76,61314,51377],{"class":93},[76,61316,61317,61319,61321],{"class":78,"line":16855},[76,61318,51846],{"class":93},[76,61320,51681],{"class":51370},[76,61322,51377],{"class":93},[76,61324,61325,61327,61329],{"class":78,"line":16868},[76,61326,51411],{"class":93},[76,61328,51883],{"class":51370},[76,61330,51377],{"class":93},[76,61332,61333],{"class":78,"line":16873},[76,61334,61335],{"class":82},"        \u002F\u002F 1. 获取元素\n",[76,61337,61338,61341,61343,61345,61347,61349,61351,61354],{"class":78,"line":16887},[76,61339,61340],{"class":89},"        const",[76,61342,60675],{"class":250},[76,61344,13636],{"class":89},[76,61346,54466],{"class":93},[76,61348,54469],{"class":2035},[76,61350,202],{"class":93},[76,61352,61353],{"class":305},"'[type=search]'",[76,61355,208],{"class":93},[76,61357,61358,61360,61363,61365,61367,61369,61371,61374],{"class":78,"line":16892},[76,61359,61340],{"class":89},[76,61361,61362],{"class":250}," ul",[76,61364,13636],{"class":89},[76,61366,54466],{"class":93},[76,61368,54469],{"class":2035},[76,61370,202],{"class":93},[76,61372,61373],{"class":305},"'.result-list'",[76,61375,208],{"class":93},[76,61377,61378],{"class":78,"line":16898},[76,61379,61380],{"class":82},"        \u002F\u002F console.log(input)\n",[76,61382,61383],{"class":78,"line":16903},[76,61384,61385],{"class":82},"        \u002F\u002F 2. 监听事件 获得焦点\n",[76,61387,61388,61391,61393,61395,61398,61400,61402],{"class":78,"line":16917},[76,61389,61390],{"class":93},"        input.",[76,61392,57883],{"class":2035},[76,61394,202],{"class":93},[76,61396,61397],{"class":305},"'focus'",[76,61399,12507],{"class":93},[76,61401,54519],{"class":89},[76,61403,54522],{"class":93},[76,61405,61406],{"class":78,"line":16922},[76,61407,61408],{"class":82},"            \u002F\u002F ul显示\n",[76,61410,61411,61414,61416],{"class":78,"line":16927},[76,61412,61413],{"class":93},"            ul.style.display ",[76,61415,247],{"class":89},[76,61417,61418],{"class":305}," 'block'\n",[76,61420,61421],{"class":78,"line":16941},[76,61422,61423],{"class":82},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[76,61425,61426,61429,61431,61433,61436],{"class":78,"line":16953},[76,61427,61428],{"class":93},"            input.classList.",[76,61430,5406],{"class":2035},[76,61432,202],{"class":93},[76,61434,61435],{"class":305},"'search'",[76,61437,208],{"class":93},[76,61439,61440],{"class":78,"line":16958},[76,61441,61442],{"class":93},"        })\n",[76,61444,61445],{"class":78,"line":16971},[76,61446,61447],{"class":82},"        \u002F\u002F 3. 监听事件 失去焦点\n",[76,61449,61450,61452,61454,61456,61459,61461,61463],{"class":78,"line":16976},[76,61451,61390],{"class":93},[76,61453,57883],{"class":2035},[76,61455,202],{"class":93},[76,61457,61458],{"class":305},"'blur'",[76,61460,12507],{"class":93},[76,61462,54519],{"class":89},[76,61464,54522],{"class":93},[76,61466,61467,61469,61471],{"class":78,"line":16981},[76,61468,61413],{"class":93},[76,61470,247],{"class":89},[76,61472,61473],{"class":305}," 'none'\n",[76,61475,61476,61478,61480,61482,61484],{"class":78,"line":16986},[76,61477,61428],{"class":93},[76,61479,57076],{"class":2035},[76,61481,202],{"class":93},[76,61483,61435],{"class":305},[76,61485,208],{"class":93},[76,61487,61488],{"class":78,"line":16999},[76,61489,61442],{"class":93},[76,61491,61492,61494,61496],{"class":78,"line":17004},[76,61493,51846],{"class":93},[76,61495,51883],{"class":51370},[76,61497,51377],{"class":93},[76,61499,61500,61502,61504],{"class":78,"line":32703},[76,61501,51855],{"class":93},[76,61503,51870],{"class":51370},[76,61505,51377],{"class":93},[76,61507,61508],{"class":78,"line":32709},[76,61509,2472],{"emptyLinePlaceholder":125},[76,61511,61512,61514,61516],{"class":78,"line":32715},[76,61513,51855],{"class":93},[76,61515,50705],{"class":51370},[76,61517,51377],{"class":93},[22070,61519,61521],{"id":61520},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61523,61524],{},"评论字数统计案例",[14,61526,61527],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61529,61530],{},"牢记focus伪类选择器",[51414,61532],{"charSet":61533},"UTF-8",[51414,61535],{"name":61536,"content":61537},"viewport","width=device-width, initial-scale=1.0",[51477,61539,61540],{},"Document",[117,61542,61543],{},"\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",[53891,61545],{"type":5259},[1206,61547,61548,61551],{},[155,61549,61550],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[155,61552,61553],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[67,61555,61557],{"className":50703,"code":61556,"language":50705,"meta":58,"style":58},"\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",[73,61558,61559,61569,61583,61587,61595,61609,61629,61649,61662,61670,61677,61690,61704,61714,61724,61728,61732,61739,61751,61763,61775,61787,61816,61829,61833,61837,61846,61857,61869,61880,61891,61903,61914,61926,61942,61954,61958,61962,61973,61984,61994,62006,62010,62014,62022,62033,62043,62054,62066,62079,62091,62103,62107,62111,62120,62132,62143,62156,62167,62181,62185,62189,62196,62208,62220,62230,62234,62238,62247,62259,62269,62273,62277,62288,62298,62317,62330,62334,62338,62348,62358,62362,62366,62377,62388,62400,62412,62416,62420,62431,62442,62456,62460,62464,62475,62485,62497,62501,62509,62517,62521,62529,62544,62563,62603,62616,62624,62638,62658,62666,62681,62704,62722,62737,62757,62777,62797,62805,62813,62821,62829,62849,62869,62874,62891,62900,62904,62909,62925,62933,62937,62942,62959,62964,62989,62993,62997,63002,63007,63015,63023,63027],{"__ignoreMap":58},[76,61560,61561,61563,61565,61567],{"class":78,"line":79},[76,61562,51367],{"class":93},[76,61564,51371],{"class":51370},[76,61566,51374],{"class":2035},[76,61568,51377],{"class":93},[76,61570,61571,61573,61575,61577,61579,61581],{"class":78,"line":86},[76,61572,1109],{"class":93},[76,61574,50705],{"class":51370},[76,61576,51386],{"class":2035},[76,61578,247],{"class":93},[76,61580,51391],{"class":305},[76,61582,51377],{"class":93},[76,61584,61585],{"class":78,"line":97},[76,61586,2472],{"emptyLinePlaceholder":125},[76,61588,61589,61591,61593],{"class":78,"line":103},[76,61590,1109],{"class":93},[76,61592,51404],{"class":51370},[76,61594,51377],{"class":93},[76,61596,61597,61599,61601,61603,61605,61607],{"class":78,"line":1273},[76,61598,52214],{"class":93},[76,61600,51414],{"class":51370},[76,61602,51417],{"class":2035},[76,61604,247],{"class":93},[76,61606,51422],{"class":305},[76,61608,51377],{"class":93},[76,61610,61611,61613,61615,61617,61619,61621,61623,61625,61627],{"class":78,"line":1287},[76,61612,52214],{"class":93},[76,61614,51414],{"class":51370},[76,61616,51433],{"class":2035},[76,61618,247],{"class":93},[76,61620,51438],{"class":305},[76,61622,51441],{"class":2035},[76,61624,247],{"class":93},[76,61626,51446],{"class":305},[76,61628,51377],{"class":93},[76,61630,61631,61633,61635,61637,61639,61641,61643,61645,61647],{"class":78,"line":1293},[76,61632,52214],{"class":93},[76,61634,51414],{"class":51370},[76,61636,14992],{"class":2035},[76,61638,247],{"class":93},[76,61640,51461],{"class":305},[76,61642,51441],{"class":2035},[76,61644,247],{"class":93},[76,61646,51468],{"class":305},[76,61648,51377],{"class":93},[76,61650,61651,61653,61655,61658,61660],{"class":78,"line":1384},[76,61652,52214],{"class":93},[76,61654,51477],{"class":51370},[76,61656,61657],{"class":93},">评论回车发布\u003C\u002F",[76,61659,51477],{"class":51370},[76,61661,51377],{"class":93},[76,61663,61664,61666,61668],{"class":78,"line":1390},[76,61665,52214],{"class":93},[76,61667,117],{"class":51370},[76,61669,51377],{"class":93},[76,61671,61672,61675],{"class":78,"line":1402},[76,61673,61674],{"class":2035},"    .wrapper",[76,61676,15644],{"class":93},[76,61678,61679,61682,61684,61686,61688],{"class":78,"line":1684},[76,61680,61681],{"class":250},"      min-width",[76,61683,51507],{"class":93},[76,61685,4059],{"class":250},[76,61687,51562],{"class":89},[76,61689,1363],{"class":93},[76,61691,61692,61695,61697,61700,61702],{"class":78,"line":1689},[76,61693,61694],{"class":250},"      max-width",[76,61696,51507],{"class":93},[76,61698,61699],{"class":250},"800",[76,61701,51562],{"class":89},[76,61703,1363],{"class":93},[76,61705,61706,61708,61710,61712],{"class":78,"line":1695},[76,61707,55079],{"class":250},[76,61709,51507],{"class":93},[76,61711,51547],{"class":250},[76,61713,1363],{"class":93},[76,61715,61716,61718,61720,61722],{"class":78,"line":1700},[76,61717,55090],{"class":250},[76,61719,51507],{"class":93},[76,61721,51650],{"class":250},[76,61723,1363],{"class":93},[76,61725,61726],{"class":78,"line":1714},[76,61727,2259],{"class":93},[76,61729,61730],{"class":78,"line":1719},[76,61731,2472],{"emptyLinePlaceholder":125},[76,61733,61734,61737],{"class":78,"line":1725},[76,61735,61736],{"class":2035},"    .avatar",[76,61738,15644],{"class":93},[76,61740,61741,61743,61745,61747,61749],{"class":78,"line":1746},[76,61742,54841],{"class":250},[76,61744,51507],{"class":93},[76,61746,806],{"class":250},[76,61748,51562],{"class":89},[76,61750,1363],{"class":93},[76,61752,61753,61755,61757,61759,61761],{"class":78,"line":1751},[76,61754,54855],{"class":250},[76,61756,51507],{"class":93},[76,61758,806],{"class":250},[76,61760,51562],{"class":89},[76,61762,1363],{"class":93},[76,61764,61765,61767,61769,61771,61773],{"class":78,"line":1765},[76,61766,55204],{"class":250},[76,61768,51507],{"class":93},[76,61770,855],{"class":250},[76,61772,106],{"class":89},[76,61774,1363],{"class":93},[76,61776,61777,61780,61782,61785],{"class":78,"line":1770},[76,61778,61779],{"class":250},"      overflow",[76,61781,51507],{"class":93},[76,61783,61784],{"class":250},"hidden",[76,61786,1363],{"class":93},[76,61788,61789,61792,61794,61797,61799,61802,61804,61807,61809,61811,61814],{"class":78,"line":1799},[76,61790,61791],{"class":250},"      background",[76,61793,51507],{"class":93},[76,61795,61796],{"class":250},"url",[76,61798,202],{"class":93},[76,61800,61801],{"class":5288},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[76,61803,13786],{"class":93},[76,61805,61806],{"class":250},"no-repeat",[76,61808,17216],{"class":250},[76,61810,25051],{"class":93},[76,61812,61813],{"class":250},"cover",[76,61815,1363],{"class":93},[76,61817,61818,61821,61823,61825,61827],{"class":78,"line":1804},[76,61819,61820],{"class":250},"      margin-right",[76,61822,51507],{"class":93},[76,61824,899],{"class":250},[76,61826,51562],{"class":89},[76,61828,1363],{"class":93},[76,61830,61831],{"class":78,"line":1821},[76,61832,2259],{"class":93},[76,61834,61835],{"class":78,"line":1826},[76,61836,2472],{"emptyLinePlaceholder":125},[76,61838,61839,61841,61844],{"class":78,"line":1831},[76,61840,61674],{"class":2035},[76,61842,61843],{"class":51370}," textarea",[76,61845,15644],{"class":93},[76,61847,61848,61851,61853,61855],{"class":78,"line":1836},[76,61849,61850],{"class":250},"      outline",[76,61852,51507],{"class":93},[76,61854,54807],{"class":250},[76,61856,1363],{"class":93},[76,61858,61859,61862,61864,61867],{"class":78,"line":1850},[76,61860,61861],{"class":250},"      border-color",[76,61863,51507],{"class":93},[76,61865,61866],{"class":250},"transparent",[76,61868,1363],{"class":93},[76,61870,61871,61874,61876,61878],{"class":78,"line":1855},[76,61872,61873],{"class":250},"      resize",[76,61875,51507],{"class":93},[76,61877,54807],{"class":250},[76,61879,1363],{"class":93},[76,61881,61882,61884,61886,61889],{"class":78,"line":2649},[76,61883,61791],{"class":250},[76,61885,51507],{"class":93},[76,61887,61888],{"class":250},"#f5f5f5",[76,61890,1363],{"class":93},[76,61892,61893,61895,61897,61899,61901],{"class":78,"line":2663},[76,61894,55204],{"class":250},[76,61896,51507],{"class":93},[76,61898,494],{"class":250},[76,61900,51562],{"class":89},[76,61902,1363],{"class":93},[76,61904,61905,61908,61910,61912],{"class":78,"line":2671},[76,61906,61907],{"class":250},"      flex",[76,61909,51507],{"class":93},[76,61911,418],{"class":250},[76,61913,1363],{"class":93},[76,61915,61916,61918,61920,61922,61924],{"class":78,"line":2676},[76,61917,54765],{"class":250},[76,61919,51507],{"class":93},[76,61921,646],{"class":250},[76,61923,51562],{"class":89},[76,61925,1363],{"class":93},[76,61927,61928,61931,61933,61935,61938,61940],{"class":78,"line":2682},[76,61929,61930],{"class":250},"      transition",[76,61932,51507],{"class":93},[76,61934,28194],{"class":250},[76,61936,61937],{"class":250}," 0.5",[76,61939,894],{"class":89},[76,61941,1363],{"class":93},[76,61943,61944,61946,61948,61950,61952],{"class":78,"line":2688},[76,61945,54855],{"class":250},[76,61947,51507],{"class":93},[76,61949,1150],{"class":250},[76,61951,51562],{"class":89},[76,61953,1363],{"class":93},[76,61955,61956],{"class":78,"line":2693},[76,61957,2259],{"class":93},[76,61959,61960],{"class":78,"line":8020},[76,61961,2472],{"emptyLinePlaceholder":125},[76,61963,61964,61966,61968,61971],{"class":78,"line":8044},[76,61965,61674],{"class":2035},[76,61967,61843],{"class":51370},[76,61969,61970],{"class":2035},":focus",[76,61972,15644],{"class":93},[76,61974,61975,61977,61979,61982],{"class":78,"line":8049},[76,61976,61861],{"class":250},[76,61978,51507],{"class":93},[76,61980,61981],{"class":250},"#e4e4e4",[76,61983,1363],{"class":93},[76,61985,61986,61988,61990,61992],{"class":78,"line":8055},[76,61987,61791],{"class":250},[76,61989,51507],{"class":93},[76,61991,60912],{"class":250},[76,61993,1363],{"class":93},[76,61995,61996,61998,62000,62002,62004],{"class":78,"line":8082},[76,61997,54855],{"class":250},[76,61999,51507],{"class":93},[76,62001,855],{"class":250},[76,62003,51562],{"class":89},[76,62005,1363],{"class":93},[76,62007,62008],{"class":78,"line":8087},[76,62009,2259],{"class":93},[76,62011,62012],{"class":78,"line":8093},[76,62013,2472],{"emptyLinePlaceholder":125},[76,62015,62016,62018,62020],{"class":78,"line":8105},[76,62017,61674],{"class":2035},[76,62019,57537],{"class":51370},[76,62021,15644],{"class":93},[76,62023,62024,62026,62028,62031],{"class":78,"line":8117},[76,62025,61791],{"class":250},[76,62027,51507],{"class":93},[76,62029,62030],{"class":250},"#00aeec",[76,62032,1363],{"class":93},[76,62034,62035,62037,62039,62041],{"class":78,"line":8129},[76,62036,57486],{"class":250},[76,62038,51507],{"class":93},[76,62040,60912],{"class":250},[76,62042,1363],{"class":93},[76,62044,62045,62048,62050,62052],{"class":78,"line":9788},[76,62046,62047],{"class":250},"      border",[76,62049,51507],{"class":93},[76,62051,54807],{"class":250},[76,62053,1363],{"class":93},[76,62055,62056,62058,62060,62062,62064],{"class":78,"line":9813},[76,62057,55204],{"class":250},[76,62059,51507],{"class":93},[76,62061,494],{"class":250},[76,62063,51562],{"class":89},[76,62065,1363],{"class":93},[76,62067,62068,62071,62073,62075,62077],{"class":78,"line":9836},[76,62069,62070],{"class":250},"      margin-left",[76,62072,51507],{"class":93},[76,62074,646],{"class":250},[76,62076,51562],{"class":89},[76,62078,1363],{"class":93},[76,62080,62081,62083,62085,62087,62089],{"class":78,"line":9860},[76,62082,54841],{"class":250},[76,62084,51507],{"class":93},[76,62086,556],{"class":250},[76,62088,51562],{"class":89},[76,62090,1363],{"class":93},[76,62092,62093,62096,62098,62101],{"class":78,"line":9865},[76,62094,62095],{"class":250},"      cursor",[76,62097,51507],{"class":93},[76,62099,62100],{"class":250},"pointer",[76,62102,1363],{"class":93},[76,62104,62105],{"class":78,"line":9870},[76,62106,2259],{"class":93},[76,62108,62109],{"class":78,"line":9875},[76,62110,2472],{"emptyLinePlaceholder":125},[76,62112,62113,62115,62118],{"class":78,"line":9884},[76,62114,61674],{"class":2035},[76,62116,62117],{"class":2035}," .total",[76,62119,15644],{"class":93},[76,62121,62122,62124,62126,62128,62130],{"class":78,"line":9889},[76,62123,61820],{"class":250},[76,62125,51507],{"class":93},[76,62127,811],{"class":250},[76,62129,51562],{"class":89},[76,62131,1363],{"class":93},[76,62133,62134,62136,62138,62141],{"class":78,"line":9895},[76,62135,57486],{"class":250},[76,62137,51507],{"class":93},[76,62139,62140],{"class":250},"#999",[76,62142,1363],{"class":93},[76,62144,62145,62148,62150,62152,62154],{"class":78,"line":9916},[76,62146,62147],{"class":250},"      margin-top",[76,62149,51507],{"class":93},[76,62151,520],{"class":250},[76,62153,51562],{"class":89},[76,62155,1363],{"class":93},[76,62157,62158,62161,62163,62165],{"class":78,"line":9922},[76,62159,62160],{"class":250},"      opacity",[76,62162,51507],{"class":93},[76,62164,392],{"class":250},[76,62166,1363],{"class":93},[76,62168,62169,62171,62173,62175,62177,62179],{"class":78,"line":9936},[76,62170,61930],{"class":250},[76,62172,51507],{"class":93},[76,62174,28194],{"class":250},[76,62176,61937],{"class":250},[76,62178,894],{"class":89},[76,62180,1363],{"class":93},[76,62182,62183],{"class":78,"line":9942},[76,62184,2259],{"class":93},[76,62186,62187],{"class":78,"line":9969},[76,62188,2472],{"emptyLinePlaceholder":125},[76,62190,62191,62194],{"class":78,"line":9978},[76,62192,62193],{"class":2035},"    .list",[76,62195,15644],{"class":93},[76,62197,62198,62200,62202,62204,62206],{"class":78,"line":9984},[76,62199,61681],{"class":250},[76,62201,51507],{"class":93},[76,62203,4059],{"class":250},[76,62205,51562],{"class":89},[76,62207,1363],{"class":93},[76,62209,62210,62212,62214,62216,62218],{"class":78,"line":9992},[76,62211,61694],{"class":250},[76,62213,51507],{"class":93},[76,62215,61699],{"class":250},[76,62217,51562],{"class":89},[76,62219,1363],{"class":93},[76,62221,62222,62224,62226,62228],{"class":78,"line":9997},[76,62223,55079],{"class":250},[76,62225,51507],{"class":93},[76,62227,51547],{"class":250},[76,62229,1363],{"class":93},[76,62231,62232],{"class":78,"line":16676},[76,62233,2259],{"class":93},[76,62235,62236],{"class":78,"line":16682},[76,62237,2472],{"emptyLinePlaceholder":125},[76,62239,62240,62242,62245],{"class":78,"line":16705},[76,62241,62193],{"class":2035},[76,62243,62244],{"class":2035}," .item",[76,62246,15644],{"class":93},[76,62248,62249,62251,62253,62255,62257],{"class":78,"line":16711},[76,62250,54841],{"class":250},[76,62252,51507],{"class":93},[76,62254,512],{"class":250},[76,62256,106],{"class":89},[76,62258,1363],{"class":93},[76,62260,62261,62263,62265,62267],{"class":78,"line":16734},[76,62262,55079],{"class":250},[76,62264,51507],{"class":93},[76,62266,51547],{"class":250},[76,62268,1363],{"class":93},[76,62270,62271],{"class":78,"line":16748},[76,62272,2259],{"class":93},[76,62274,62275],{"class":78,"line":16768},[76,62276,2472],{"emptyLinePlaceholder":125},[76,62278,62279,62281,62283,62286],{"class":78,"line":16774},[76,62280,62193],{"class":2035},[76,62282,62244],{"class":2035},[76,62284,62285],{"class":2035}," .info",[76,62287,15644],{"class":93},[76,62289,62290,62292,62294,62296],{"class":78,"line":16785},[76,62291,61907],{"class":250},[76,62293,51507],{"class":93},[76,62295,418],{"class":250},[76,62297,1363],{"class":93},[76,62299,62300,62303,62305,62307,62309,62312,62315],{"class":78,"line":16808},[76,62301,62302],{"class":250},"      border-bottom",[76,62304,51507],{"class":93},[76,62306,418],{"class":250},[76,62308,51562],{"class":89},[76,62310,62311],{"class":250}," dashed",[76,62313,62314],{"class":250}," #e4e4e4",[76,62316,1363],{"class":93},[76,62318,62319,62322,62324,62326,62328],{"class":78,"line":16830},[76,62320,62321],{"class":250},"      padding-bottom",[76,62323,51507],{"class":93},[76,62325,646],{"class":250},[76,62327,51562],{"class":89},[76,62329,1363],{"class":93},[76,62331,62332],{"class":78,"line":16835},[76,62333,2259],{"class":93},[76,62335,62336],{"class":78,"line":16841},[76,62337,2472],{"emptyLinePlaceholder":125},[76,62339,62340,62342,62344,62346],{"class":78,"line":16855},[76,62341,62193],{"class":2035},[76,62343,62244],{"class":2035},[76,62345,6897],{"class":51370},[76,62347,15644],{"class":93},[76,62349,62350,62352,62354,62356],{"class":78,"line":16868},[76,62351,54776],{"class":250},[76,62353,51507],{"class":93},[76,62355,392],{"class":250},[76,62357,1363],{"class":93},[76,62359,62360],{"class":78,"line":16873},[76,62361,2259],{"class":93},[76,62363,62364],{"class":78,"line":16887},[76,62365,2472],{"emptyLinePlaceholder":125},[76,62367,62368,62370,62372,62375],{"class":78,"line":16892},[76,62369,62193],{"class":2035},[76,62371,62244],{"class":2035},[76,62373,62374],{"class":2035}," .name",[76,62376,15644],{"class":93},[76,62378,62379,62381,62383,62386],{"class":78,"line":16898},[76,62380,57486],{"class":250},[76,62382,51507],{"class":93},[76,62384,62385],{"class":250},"#FB7299",[76,62387,1363],{"class":93},[76,62389,62390,62392,62394,62396,62398],{"class":78,"line":16903},[76,62391,54992],{"class":250},[76,62393,51507],{"class":93},[76,62395,748],{"class":250},[76,62397,51562],{"class":89},[76,62399,1363],{"class":93},[76,62401,62402,62405,62407,62410],{"class":78,"line":16917},[76,62403,62404],{"class":250},"      font-weight",[76,62406,51507],{"class":93},[76,62408,62409],{"class":250},"bold",[76,62411,1363],{"class":93},[76,62413,62414],{"class":78,"line":16922},[76,62415,2259],{"class":93},[76,62417,62418],{"class":78,"line":16927},[76,62419,2472],{"emptyLinePlaceholder":125},[76,62421,62422,62424,62426,62429],{"class":78,"line":16941},[76,62423,62193],{"class":2035},[76,62425,62244],{"class":2035},[76,62427,62428],{"class":2035}," .text",[76,62430,15644],{"class":93},[76,62432,62433,62435,62437,62440],{"class":78,"line":16953},[76,62434,57486],{"class":250},[76,62436,51507],{"class":93},[76,62438,62439],{"class":250},"#333",[76,62441,1363],{"class":93},[76,62443,62444,62446,62448,62450,62452,62454],{"class":78,"line":16958},[76,62445,54765],{"class":250},[76,62447,51507],{"class":93},[76,62449,646],{"class":250},[76,62451,51562],{"class":89},[76,62453,4165],{"class":250},[76,62455,1363],{"class":93},[76,62457,62458],{"class":78,"line":16971},[76,62459,2259],{"class":93},[76,62461,62462],{"class":78,"line":16976},[76,62463,2472],{"emptyLinePlaceholder":125},[76,62465,62466,62468,62470,62473],{"class":78,"line":16981},[76,62467,62193],{"class":2035},[76,62469,62244],{"class":2035},[76,62471,62472],{"class":2035}," .time",[76,62474,15644],{"class":93},[76,62476,62477,62479,62481,62483],{"class":78,"line":16986},[76,62478,57486],{"class":250},[76,62480,51507],{"class":93},[76,62482,62140],{"class":250},[76,62484,1363],{"class":93},[76,62486,62487,62489,62491,62493,62495],{"class":78,"line":16999},[76,62488,54992],{"class":250},[76,62490,51507],{"class":93},[76,62492,698],{"class":250},[76,62494,51562],{"class":89},[76,62496,1363],{"class":93},[76,62498,62499],{"class":78,"line":17004},[76,62500,2259],{"class":93},[76,62502,62503,62505,62507],{"class":78,"line":32703},[76,62504,52487],{"class":93},[76,62506,117],{"class":51370},[76,62508,51377],{"class":93},[76,62510,62511,62513,62515],{"class":78,"line":32709},[76,62512,51855],{"class":93},[76,62514,51404],{"class":51370},[76,62516,51377],{"class":93},[76,62518,62519],{"class":78,"line":32715},[76,62520,2472],{"emptyLinePlaceholder":125},[76,62522,62523,62525,62527],{"class":78,"line":32721},[76,62524,1109],{"class":93},[76,62526,51870],{"class":51370},[76,62528,51377],{"class":93},[76,62530,62531,62533,62535,62537,62539,62542],{"class":78,"line":32727},[76,62532,52214],{"class":93},[76,62534,51681],{"class":51370},[76,62536,53556],{"class":2035},[76,62538,247],{"class":93},[76,62540,62541],{"class":305},"\"wrapper\"",[76,62543,51377],{"class":93},[76,62545,62546,62548,62550,62552,62554,62557,62559,62561],{"class":78,"line":32738},[76,62547,51411],{"class":93},[76,62549,641],{"class":51370},[76,62551,53556],{"class":2035},[76,62553,247],{"class":93},[76,62555,62556],{"class":305},"\"avatar\"",[76,62558,55384],{"class":93},[76,62560,641],{"class":51370},[76,62562,51377],{"class":93},[76,62564,62565,62567,62569,62571,62573,62576,62578,62580,62583,62585,62587,62589,62592,62594,62597,62599,62601],{"class":78,"line":32744},[76,62566,51411],{"class":93},[76,62568,54358],{"class":51370},[76,62570,15031],{"class":2035},[76,62572,247],{"class":93},[76,62574,62575],{"class":305},"\"tx\"",[76,62577,61090],{"class":2035},[76,62579,247],{"class":93},[76,62581,62582],{"class":305},"\"发一条友善的评论\"",[76,62584,54381],{"class":2035},[76,62586,247],{"class":93},[76,62588,3773],{"class":305},[76,62590,62591],{"class":2035}," maxlength",[76,62593,247],{"class":93},[76,62595,62596],{"class":305},"\"200\"",[76,62598,55384],{"class":93},[76,62600,54358],{"class":51370},[76,62602,51377],{"class":93},[76,62604,62605,62607,62609,62612,62614],{"class":78,"line":32764},[76,62606,51411],{"class":93},[76,62608,53957],{"class":51370},[76,62610,62611],{"class":93},">发布\u003C\u002F",[76,62613,53957],{"class":51370},[76,62615,51377],{"class":93},[76,62617,62618,62620,62622],{"class":78,"line":32770},[76,62619,52487],{"class":93},[76,62621,51681],{"class":51370},[76,62623,51377],{"class":93},[76,62625,62626,62628,62630,62632,62634,62636],{"class":78,"line":32781},[76,62627,52214],{"class":93},[76,62629,51681],{"class":51370},[76,62631,53556],{"class":2035},[76,62633,247],{"class":93},[76,62635,62541],{"class":305},[76,62637,51377],{"class":93},[76,62639,62640,62642,62644,62646,62648,62651,62654,62656],{"class":78,"line":32787},[76,62641,51411],{"class":93},[76,62643,76],{"class":51370},[76,62645,53556],{"class":2035},[76,62647,247],{"class":93},[76,62649,62650],{"class":305},"\"total\"",[76,62652,62653],{"class":93},">0\u002F200字\u003C\u002F",[76,62655,76],{"class":51370},[76,62657,51377],{"class":93},[76,62659,62660,62662,62664],{"class":78,"line":32793},[76,62661,52487],{"class":93},[76,62663,51681],{"class":51370},[76,62665,51377],{"class":93},[76,62667,62668,62670,62672,62674,62676,62679],{"class":78,"line":32799},[76,62669,52214],{"class":93},[76,62671,51681],{"class":51370},[76,62673,53556],{"class":2035},[76,62675,247],{"class":93},[76,62677,62678],{"class":305},"\"list\"",[76,62680,51377],{"class":93},[76,62682,62683,62685,62687,62689,62691,62694,62697,62699,62702],{"class":78,"line":32805},[76,62684,51411],{"class":93},[76,62686,51681],{"class":51370},[76,62688,53556],{"class":2035},[76,62690,247],{"class":93},[76,62692,62693],{"class":305},"\"item\"",[76,62695,62696],{"class":2035}," style",[76,62698,247],{"class":93},[76,62700,62701],{"class":305},"\"display: none;\"",[76,62703,51377],{"class":93},[76,62705,62706,62708,62710,62712,62714,62716,62718,62720],{"class":78,"line":32811},[76,62707,55304],{"class":93},[76,62709,641],{"class":51370},[76,62711,53556],{"class":2035},[76,62713,247],{"class":93},[76,62715,62556],{"class":305},[76,62717,55384],{"class":93},[76,62719,641],{"class":51370},[76,62721,51377],{"class":93},[76,62723,62724,62726,62728,62730,62732,62735],{"class":78,"line":32817},[76,62725,55304],{"class":93},[76,62727,51681],{"class":51370},[76,62729,53556],{"class":2035},[76,62731,247],{"class":93},[76,62733,62734],{"class":305},"\"info\"",[76,62736,51377],{"class":93},[76,62738,62739,62741,62743,62745,62747,62750,62753,62755],{"class":78,"line":32823},[76,62740,55372],{"class":93},[76,62742,14],{"class":51370},[76,62744,53556],{"class":2035},[76,62746,247],{"class":93},[76,62748,62749],{"class":305},"\"name\"",[76,62751,62752],{"class":93},">清风徐来\u003C\u002F",[76,62754,14],{"class":51370},[76,62756,51377],{"class":93},[76,62758,62759,62761,62763,62765,62767,62770,62773,62775],{"class":78,"line":32843},[76,62760,55372],{"class":93},[76,62762,14],{"class":51370},[76,62764,53556],{"class":2035},[76,62766,247],{"class":93},[76,62768,62769],{"class":305},"\"text\"",[76,62771,62772],{"class":93},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[76,62774,14],{"class":51370},[76,62776,51377],{"class":93},[76,62778,62779,62781,62783,62785,62787,62790,62793,62795],{"class":78,"line":32849},[76,62780,55372],{"class":93},[76,62782,14],{"class":51370},[76,62784,53556],{"class":2035},[76,62786,247],{"class":93},[76,62788,62789],{"class":305},"\"time\"",[76,62791,62792],{"class":93},">2022-10-10 20:29:21\u003C\u002F",[76,62794,14],{"class":51370},[76,62796,51377],{"class":93},[76,62798,62799,62801,62803],{"class":78,"line":32865},[76,62800,55477],{"class":93},[76,62802,51681],{"class":51370},[76,62804,51377],{"class":93},[76,62806,62807,62809,62811],{"class":78,"line":32871},[76,62808,51846],{"class":93},[76,62810,51681],{"class":51370},[76,62812,51377],{"class":93},[76,62814,62815,62817,62819],{"class":78,"line":32885},[76,62816,52487],{"class":93},[76,62818,51681],{"class":51370},[76,62820,51377],{"class":93},[76,62822,62823,62825,62827],{"class":78,"line":32891},[76,62824,52214],{"class":93},[76,62826,51883],{"class":51370},[76,62828,51377],{"class":93},[76,62830,62831,62833,62836,62838,62840,62842,62844,62847],{"class":78,"line":32906},[76,62832,11293],{"class":89},[76,62834,62835],{"class":250}," tx",[76,62837,13636],{"class":89},[76,62839,54466],{"class":93},[76,62841,54469],{"class":2035},[76,62843,202],{"class":93},[76,62845,62846],{"class":305},"'#tx'",[76,62848,208],{"class":93},[76,62850,62851,62853,62856,62858,62860,62862,62864,62867],{"class":78,"line":32912},[76,62852,11293],{"class":89},[76,62854,62855],{"class":250}," total",[76,62857,13636],{"class":89},[76,62859,54466],{"class":93},[76,62861,54469],{"class":2035},[76,62863,202],{"class":93},[76,62865,62866],{"class":305},"'.total'",[76,62868,208],{"class":93},[76,62870,62871],{"class":78,"line":32921},[76,62872,62873],{"class":82},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[76,62875,62876,62879,62881,62883,62885,62887,62889],{"class":78,"line":32927},[76,62877,62878],{"class":93},"    tx.",[76,62880,57883],{"class":2035},[76,62882,202],{"class":93},[76,62884,61397],{"class":305},[76,62886,12507],{"class":93},[76,62888,54519],{"class":89},[76,62890,54522],{"class":93},[76,62892,62893,62896,62898],{"class":78,"line":32936},[76,62894,62895],{"class":93},"      total.style.opacity ",[76,62897,247],{"class":89},[76,62899,55769],{"class":250},[76,62901,62902],{"class":78,"line":32942},[76,62903,33531],{"class":93},[76,62905,62906],{"class":78,"line":32948},[76,62907,62908],{"class":82},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[76,62910,62911,62913,62915,62917,62919,62921,62923],{"class":78,"line":32957},[76,62912,62878],{"class":93},[76,62914,57883],{"class":2035},[76,62916,202],{"class":93},[76,62918,61458],{"class":305},[76,62920,12507],{"class":93},[76,62922,54519],{"class":89},[76,62924,54522],{"class":93},[76,62926,62927,62929,62931],{"class":78,"line":32963},[76,62928,62895],{"class":93},[76,62930,247],{"class":89},[76,62932,47403],{"class":250},[76,62934,62935],{"class":78,"line":32974},[76,62936,33531],{"class":93},[76,62938,62939],{"class":78,"line":32980},[76,62940,62941],{"class":82},"    \u002F\u002F 3. 检测用户输入\n",[76,62943,62944,62946,62948,62950,62953,62955,62957],{"class":78,"line":32999},[76,62945,62878],{"class":93},[76,62947,57883],{"class":2035},[76,62949,202],{"class":93},[76,62951,62952],{"class":305},"'input'",[76,62954,12507],{"class":93},[76,62956,54519],{"class":89},[76,62958,54522],{"class":93},[76,62960,62961],{"class":78,"line":33005},[76,62962,62963],{"class":82},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[76,62965,62966,62969,62971,62974,62977,62979,62982,62984,62986],{"class":78,"line":33016},[76,62967,62968],{"class":93},"      total.innerHTML ",[76,62970,247],{"class":89},[76,62972,62973],{"class":305}," `${",[76,62975,62976],{"class":93},"tx",[76,62978,757],{"class":305},[76,62980,62981],{"class":93},"value",[76,62983,757],{"class":305},[76,62985,52038],{"class":250},[76,62987,62988],{"class":305},"}\u002F200字`\n",[76,62990,62991],{"class":78,"line":33022},[76,62992,33531],{"class":93},[76,62994,62995],{"class":78,"line":33042},[76,62996,2472],{"emptyLinePlaceholder":125},[76,62998,62999],{"class":78,"line":33058},[76,63000,63001],{"class":82},"    \u002F\u002F const str = 'andy'\n",[76,63003,63004],{"class":78,"line":33064},[76,63005,63006],{"class":82},"    \u002F\u002F console.log(str.length)\n",[76,63008,63009,63011,63013],{"class":78,"line":33078},[76,63010,52487],{"class":93},[76,63012,51883],{"class":51370},[76,63014,51377],{"class":93},[76,63016,63017,63019,63021],{"class":78,"line":33084},[76,63018,51855],{"class":93},[76,63020,51870],{"class":51370},[76,63022,51377],{"class":93},[76,63024,63025],{"class":78,"line":33090},[76,63026,2472],{"emptyLinePlaceholder":125},[76,63028,63029,63031,63033],{"class":78,"line":33101},[76,63030,51855],{"class":93},[76,63032,50705],{"class":51370},[76,63034,51377],{"class":93},[22070,63036,63038],{"id":63037},"_3254-change事件","3.2.5.4 change事件",[14,63040,63041],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63043,63044],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63046,63047],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[67,63049,63051],{"className":50703,"code":63050,"language":50705,"meta":58,"style":58},"\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",[73,63052,63053,63063,63077,63081,63089,63103,63123,63135,63143,63147,63155,63169,63177,63195,63213,63225,63229,63237,63245,63249],{"__ignoreMap":58},[76,63054,63055,63057,63059,63061],{"class":78,"line":79},[76,63056,51367],{"class":93},[76,63058,51371],{"class":51370},[76,63060,51374],{"class":2035},[76,63062,51377],{"class":93},[76,63064,63065,63067,63069,63071,63073,63075],{"class":78,"line":86},[76,63066,1109],{"class":93},[76,63068,50705],{"class":51370},[76,63070,51386],{"class":2035},[76,63072,247],{"class":93},[76,63074,51391],{"class":305},[76,63076,51377],{"class":93},[76,63078,63079],{"class":78,"line":97},[76,63080,2472],{"emptyLinePlaceholder":125},[76,63082,63083,63085,63087],{"class":78,"line":103},[76,63084,1109],{"class":93},[76,63086,51404],{"class":51370},[76,63088,51377],{"class":93},[76,63090,63091,63093,63095,63097,63099,63101],{"class":78,"line":1273},[76,63092,52214],{"class":93},[76,63094,51414],{"class":51370},[76,63096,51417],{"class":2035},[76,63098,247],{"class":93},[76,63100,51422],{"class":305},[76,63102,51377],{"class":93},[76,63104,63105,63107,63109,63111,63113,63115,63117,63119,63121],{"class":78,"line":1287},[76,63106,52214],{"class":93},[76,63108,51414],{"class":51370},[76,63110,14992],{"class":2035},[76,63112,247],{"class":93},[76,63114,51461],{"class":305},[76,63116,51441],{"class":2035},[76,63118,247],{"class":93},[76,63120,51468],{"class":305},[76,63122,51377],{"class":93},[76,63124,63125,63127,63129,63131,63133],{"class":78,"line":1293},[76,63126,52214],{"class":93},[76,63128,51477],{"class":51370},[76,63130,51480],{"class":93},[76,63132,51477],{"class":51370},[76,63134,51377],{"class":93},[76,63136,63137,63139,63141],{"class":78,"line":1384},[76,63138,51855],{"class":93},[76,63140,51404],{"class":51370},[76,63142,51377],{"class":93},[76,63144,63145],{"class":78,"line":1390},[76,63146,2472],{"emptyLinePlaceholder":125},[76,63148,63149,63151,63153],{"class":78,"line":1402},[76,63150,1109],{"class":93},[76,63152,51870],{"class":51370},[76,63154,51377],{"class":93},[76,63156,63157,63159,63161,63163,63165,63167],{"class":78,"line":1684},[76,63158,52214],{"class":93},[76,63160,53891],{"class":51370},[76,63162,53894],{"class":2035},[76,63164,247],{"class":93},[76,63166,62769],{"class":305},[76,63168,51377],{"class":93},[76,63170,63171,63173,63175],{"class":78,"line":1689},[76,63172,52214],{"class":93},[76,63174,51883],{"class":51370},[76,63176,51377],{"class":93},[76,63178,63179,63181,63183,63185,63187,63189,63191,63193],{"class":78,"line":1695},[76,63180,11293],{"class":89},[76,63182,60675],{"class":250},[76,63184,13636],{"class":89},[76,63186,54466],{"class":93},[76,63188,54469],{"class":2035},[76,63190,202],{"class":93},[76,63192,62952],{"class":305},[76,63194,208],{"class":93},[76,63196,63197,63200,63202,63204,63207,63209,63211],{"class":78,"line":1700},[76,63198,63199],{"class":93},"    input.",[76,63201,57883],{"class":2035},[76,63203,202],{"class":93},[76,63205,63206],{"class":305},"'change'",[76,63208,12507],{"class":93},[76,63210,54519],{"class":89},[76,63212,54522],{"class":93},[76,63214,63215,63217,63219,63221,63223],{"class":78,"line":1714},[76,63216,58314],{"class":93},[76,63218,58317],{"class":2035},[76,63220,202],{"class":93},[76,63222,792],{"class":250},[76,63224,208],{"class":93},[76,63226,63227],{"class":78,"line":1719},[76,63228,33531],{"class":93},[76,63230,63231,63233,63235],{"class":78,"line":1725},[76,63232,52487],{"class":93},[76,63234,51883],{"class":51370},[76,63236,51377],{"class":93},[76,63238,63239,63241,63243],{"class":78,"line":1746},[76,63240,51855],{"class":93},[76,63242,51870],{"class":51370},[76,63244,51377],{"class":93},[76,63246,63247],{"class":78,"line":1751},[76,63248,2472],{"emptyLinePlaceholder":125},[76,63250,63251,63253,63255],{"class":78,"line":1765},[76,63252,51855],{"class":93},[76,63254,50705],{"class":51370},[76,63256,51377],{"class":93},[14,63258,63259],{},"总结：内容发生改变才回去触发",[169,63261,63263],{"id":63262},"_326-事件对象","3.2.6 事件对象",[22070,63265,63267],{"id":63266},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63269,63270],{},[56,63271],{"alt":58,"src":63272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63274,63275],{},[56,63276],{"alt":58,"src":63277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63279,63280],{},"点击一次，就输出了事件对象，它是个对象",[14,63282,63283],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63285,63286],{},[56,63287],{"alt":58,"src":63288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22070,63290,63292],{"id":63291},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63294,63295],{},[56,63296],{"alt":58,"src":63297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63299,63300],{},"实现按特殊字符才是实现打印输出效果：",[67,63302,63304],{"className":53137,"code":63303,"language":53139,"meta":58,"style":58},"\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",[73,63305,63306,63314,63319,63333,63341,63346,63351,63356,63361,63366,63371,63376,63381,63386,63390,63394,63402],{"__ignoreMap":58},[76,63307,63308,63310,63312],{"class":78,"line":79},[76,63309,1109],{"class":93},[76,63311,51870],{"class":51370},[76,63313,51377],{"class":93},[76,63315,63316],{"class":78,"line":86},[76,63317,63318],{"class":82},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[76,63320,63321,63323,63325,63327,63329,63331],{"class":78,"line":97},[76,63322,52214],{"class":93},[76,63324,53891],{"class":51370},[76,63326,53894],{"class":2035},[76,63328,247],{"class":93},[76,63330,62769],{"class":305},[76,63332,51377],{"class":93},[76,63334,63335,63337,63339],{"class":78,"line":103},[76,63336,52214],{"class":93},[76,63338,51883],{"class":51370},[76,63340,51377],{"class":93},[76,63342,63343],{"class":78,"line":1273},[76,63344,63345],{"class":93},"    \u002F\u002F const btn = document.querySelector('button')\n",[76,63347,63348],{"class":78,"line":1287},[76,63349,63350],{"class":93},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[76,63352,63353],{"class":78,"line":1293},[76,63354,63355],{"class":93},"    \u002F\u002F   console.log(e);\n",[76,63357,63358],{"class":78,"line":1384},[76,63359,63360],{"class":93},"    \u002F\u002F })\n",[76,63362,63363],{"class":78,"line":1390},[76,63364,63365],{"class":93},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[76,63367,63368],{"class":78,"line":1402},[76,63369,63370],{"class":93},"    const input = document.querySelector('input')\n",[76,63372,63373],{"class":78,"line":1684},[76,63374,63375],{"class":93},"    input.addEventListener('keyup', function (e) {\n",[76,63377,63378],{"class":78,"line":1689},[76,63379,63380],{"class":93},"      if (e.key === 'Enter') {\n",[76,63382,63383],{"class":78,"line":1695},[76,63384,63385],{"class":93},"        console.log('我按下了回车键')\n",[76,63387,63388],{"class":78,"line":1700},[76,63389,52468],{"class":93},[76,63391,63392],{"class":78,"line":1714},[76,63393,33531],{"class":93},[76,63395,63396,63398,63400],{"class":78,"line":1719},[76,63397,52487],{"class":93},[76,63399,51883],{"class":51370},[76,63401,51377],{"class":93},[76,63403,63404,63406,63408],{"class":78,"line":1725},[76,63405,51855],{"class":93},[76,63407,51870],{"class":51370},[76,63409,51377],{"class":93},[22070,63411,63413],{"id":63412},"_3263-trim方法","3.2.6.3 trim方法",[14,63415,63416],{},[56,63417],{"alt":58,"src":63418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63420,63421],{},[56,63422],{"alt":58,"src":63423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63425,63426],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63428,63429],{},"str.trim()",[169,63431,63433],{"id":63432},"_327-环境对象","3.2.7 环境对象",[14,63435,63436],{},[56,63437],{"alt":58,"src":63438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63440,63441],{},[56,63442],{"alt":58,"src":63443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63445,63446],{},[56,63447],{"alt":58,"src":63448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63450,63451],{},"实际函数调用是window.fn()",[14,63453,63454],{},"普通函数里面this指向的是window",[1206,63456,63457,63460,63463],{},[155,63458,63459],{},"在普通函数下，this指向的是window",[155,63461,63462],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[155,63464,63465],{},"箭头函数没有this",[14,63467,63468],{},"粗略记法就是：谁调用，this就指向谁",[14,63470,63471],{},[56,63472],{"alt":58,"src":63473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63475,63476],{},[56,63477],{"alt":58,"src":63478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63480,63481],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63483,63484],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[67,63486,63488],{"className":53137,"code":63487,"language":53139,"meta":58,"style":58},"\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",[73,63489,63490,63498,63510,63518,63523,63528,63533,63538,63542,63550],{"__ignoreMap":58},[76,63491,63492,63494,63496],{"class":78,"line":79},[76,63493,1109],{"class":93},[76,63495,51870],{"class":51370},[76,63497,51377],{"class":93},[76,63499,63500,63502,63504,63506,63508],{"class":78,"line":86},[76,63501,52214],{"class":93},[76,63503,53957],{"class":51370},[76,63505,53963],{"class":93},[76,63507,53957],{"class":51370},[76,63509,51377],{"class":93},[76,63511,63512,63514,63516],{"class":78,"line":97},[76,63513,52214],{"class":93},[76,63515,51883],{"class":51370},[76,63517,51377],{"class":93},[76,63519,63520],{"class":78,"line":103},[76,63521,63522],{"class":93},"    const button = document.querySelector('button')\n",[76,63524,63525],{"class":78,"line":1273},[76,63526,63527],{"class":93},"    button.addEventListener('click', function () {\n",[76,63529,63530],{"class":78,"line":1287},[76,63531,63532],{"class":93},"      \u002F\u002F console.log(this);\n",[76,63534,63535],{"class":78,"line":1293},[76,63536,63537],{"class":93},"      this.style.color = 'pink'\n",[76,63539,63540],{"class":78,"line":1384},[76,63541,33531],{"class":93},[76,63543,63544,63546,63548],{"class":78,"line":1390},[76,63545,52487],{"class":93},[76,63547,51883],{"class":51370},[76,63549,51377],{"class":93},[76,63551,63552,63554,63556],{"class":78,"line":1402},[76,63553,51855],{"class":93},[76,63555,51870],{"class":51370},[76,63557,51377],{"class":93},[169,63559,63561],{"id":63560},"_328-回调函数","3.2.8 回调函数",[14,63563,63564],{},[56,63565],{"alt":58,"src":63566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63568,63569],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63571,11404],{},[1206,63573,63574,63577,63580],{},[155,63575,63576],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[155,63578,63579],{},"回调函数本质还是函数，只不过把它当成参数使用",[155,63581,63582],{},"使用匿名函数做为回调函数比较常见",[169,63584,63586],{"id":63585},"_329-tab栏切换","3.2.9 tab栏切换",[14,63588,63589],{},[56,63590],{"alt":58,"src":63591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[67,63593,63595],{"className":50703,"code":63594,"language":50705,"meta":58,"style":58},"\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",[73,63596,63597,63607,63621,63625,63633,63647,63667,63687,63700,63708,63714,63724,63734,63738,63742,63749,63762,63775,63787,63803,63807,63811,63818,63830,63842,63854,63864,63874,63878,63882,63891,63903,63914,63926,63930,63934,63942,63952,63962,63972,63976,63980,63990,64004,64016,64020,64024,64036,64047,64064,64074,64078,64082,64097,64108,64118,64122,64126,64133,64148,64152,64156,64164,64174,64178,64182,64191,64201,64205,64213,64221,64225,64233,64248,64263,64276,64284,64318,64345,64372,64399,64426,64434,64442,64457,64494,64529,64564,64599,64634,64642,64650,64658,64663,64668,64688,64693,64722,64727,64732,64750,64755,64760,64765,64787,64792,64808,64812,64817,64822,64843,64848,64877,64881,64886,64890,64898,64906,64910],{"__ignoreMap":58},[76,63598,63599,63601,63603,63605],{"class":78,"line":79},[76,63600,51367],{"class":93},[76,63602,51371],{"class":51370},[76,63604,51374],{"class":2035},[76,63606,51377],{"class":93},[76,63608,63609,63611,63613,63615,63617,63619],{"class":78,"line":86},[76,63610,1109],{"class":93},[76,63612,50705],{"class":51370},[76,63614,51386],{"class":2035},[76,63616,247],{"class":93},[76,63618,51391],{"class":305},[76,63620,51377],{"class":93},[76,63622,63623],{"class":78,"line":97},[76,63624,2472],{"emptyLinePlaceholder":125},[76,63626,63627,63629,63631],{"class":78,"line":103},[76,63628,1109],{"class":93},[76,63630,51404],{"class":51370},[76,63632,51377],{"class":93},[76,63634,63635,63637,63639,63641,63643,63645],{"class":78,"line":1273},[76,63636,52214],{"class":93},[76,63638,51414],{"class":51370},[76,63640,51417],{"class":2035},[76,63642,247],{"class":93},[76,63644,51422],{"class":305},[76,63646,59197],{"class":93},[76,63648,63649,63651,63653,63655,63657,63659,63661,63663,63665],{"class":78,"line":1287},[76,63650,52214],{"class":93},[76,63652,51414],{"class":51370},[76,63654,51433],{"class":2035},[76,63656,247],{"class":93},[76,63658,51438],{"class":305},[76,63660,51441],{"class":2035},[76,63662,247],{"class":93},[76,63664,51446],{"class":305},[76,63666,59197],{"class":93},[76,63668,63669,63671,63673,63675,63677,63679,63681,63683,63685],{"class":78,"line":1293},[76,63670,52214],{"class":93},[76,63672,51414],{"class":51370},[76,63674,14992],{"class":2035},[76,63676,247],{"class":93},[76,63678,51461],{"class":305},[76,63680,51441],{"class":2035},[76,63682,247],{"class":93},[76,63684,51468],{"class":305},[76,63686,59197],{"class":93},[76,63688,63689,63691,63693,63696,63698],{"class":78,"line":1384},[76,63690,52214],{"class":93},[76,63692,51477],{"class":51370},[76,63694,63695],{"class":93},">tab栏切换\u003C\u002F",[76,63697,51477],{"class":51370},[76,63699,51377],{"class":93},[76,63701,63702,63704,63706],{"class":78,"line":1390},[76,63703,52214],{"class":93},[76,63705,117],{"class":51370},[76,63707,51377],{"class":93},[76,63709,63710,63712],{"class":78,"line":1402},[76,63711,6475],{"class":51370},[76,63713,15644],{"class":93},[76,63715,63716,63718,63720,63722],{"class":78,"line":1684},[76,63717,54776],{"class":250},[76,63719,51507],{"class":93},[76,63721,392],{"class":250},[76,63723,1363],{"class":93},[76,63725,63726,63728,63730,63732],{"class":78,"line":1689},[76,63727,54765],{"class":250},[76,63729,51507],{"class":93},[76,63731,392],{"class":250},[76,63733,1363],{"class":93},[76,63735,63736],{"class":78,"line":1695},[76,63737,2259],{"class":93},[76,63739,63740],{"class":78,"line":1700},[76,63741,2472],{"emptyLinePlaceholder":125},[76,63743,63744,63747],{"class":78,"line":1714},[76,63745,63746],{"class":2035},"    .tab",[76,63748,15644],{"class":93},[76,63750,63751,63753,63755,63758,63760],{"class":78,"line":1719},[76,63752,54841],{"class":250},[76,63754,51507],{"class":93},[76,63756,63757],{"class":250},"590",[76,63759,51562],{"class":89},[76,63761,1363],{"class":93},[76,63763,63764,63766,63768,63771,63773],{"class":78,"line":1725},[76,63765,54855],{"class":250},[76,63767,51507],{"class":93},[76,63769,63770],{"class":250},"340",[76,63772,51562],{"class":89},[76,63774,1363],{"class":93},[76,63776,63777,63779,63781,63783,63785],{"class":78,"line":1746},[76,63778,54776],{"class":250},[76,63780,51507],{"class":93},[76,63782,899],{"class":250},[76,63784,51562],{"class":89},[76,63786,1363],{"class":93},[76,63788,63789,63791,63793,63795,63797,63799,63801],{"class":78,"line":1751},[76,63790,62047],{"class":250},[76,63792,51507],{"class":93},[76,63794,418],{"class":250},[76,63796,51562],{"class":89},[76,63798,51591],{"class":250},[76,63800,62314],{"class":250},[76,63802,1363],{"class":93},[76,63804,63805],{"class":78,"line":1765},[76,63806,2259],{"class":93},[76,63808,63809],{"class":78,"line":1770},[76,63810,2472],{"emptyLinePlaceholder":125},[76,63812,63813,63816],{"class":78,"line":1799},[76,63814,63815],{"class":2035},"    .tab-nav",[76,63817,15644],{"class":93},[76,63819,63820,63822,63824,63826,63828],{"class":78,"line":1804},[76,63821,54841],{"class":250},[76,63823,51507],{"class":93},[76,63825,512],{"class":250},[76,63827,106],{"class":89},[76,63829,1363],{"class":93},[76,63831,63832,63834,63836,63838,63840],{"class":78,"line":1821},[76,63833,54855],{"class":250},[76,63835,51507],{"class":93},[76,63837,1106],{"class":250},[76,63839,51562],{"class":89},[76,63841,1363],{"class":93},[76,63843,63844,63846,63848,63850,63852],{"class":78,"line":1826},[76,63845,57429],{"class":250},[76,63847,51507],{"class":93},[76,63849,1106],{"class":250},[76,63851,51562],{"class":89},[76,63853,1363],{"class":93},[76,63855,63856,63858,63860,63862],{"class":78,"line":1831},[76,63857,55079],{"class":250},[76,63859,51507],{"class":93},[76,63861,51547],{"class":250},[76,63863,1363],{"class":93},[76,63865,63866,63868,63870,63872],{"class":78,"line":1836},[76,63867,55090],{"class":250},[76,63869,51507],{"class":93},[76,63871,51738],{"class":250},[76,63873,1363],{"class":93},[76,63875,63876],{"class":78,"line":1850},[76,63877,2259],{"class":93},[76,63879,63880],{"class":78,"line":1855},[76,63881,2472],{"emptyLinePlaceholder":125},[76,63883,63884,63886,63889],{"class":78,"line":2649},[76,63885,63815],{"class":2035},[76,63887,63888],{"class":51370}," h3",[76,63890,15644],{"class":93},[76,63892,63893,63895,63897,63899,63901],{"class":78,"line":2663},[76,63894,54992],{"class":250},[76,63896,51507],{"class":93},[76,63898,999],{"class":250},[76,63900,51562],{"class":89},[76,63902,1363],{"class":93},[76,63904,63905,63907,63909,63912],{"class":78,"line":2671},[76,63906,62404],{"class":250},[76,63908,51507],{"class":93},[76,63910,63911],{"class":250},"normal",[76,63913,1363],{"class":93},[76,63915,63916,63918,63920,63922,63924],{"class":78,"line":2676},[76,63917,62070],{"class":250},[76,63919,51507],{"class":93},[76,63921,899],{"class":250},[76,63923,51562],{"class":89},[76,63925,1363],{"class":93},[76,63927,63928],{"class":78,"line":2682},[76,63929,2259],{"class":93},[76,63931,63932],{"class":78,"line":2688},[76,63933,2472],{"emptyLinePlaceholder":125},[76,63935,63936,63938,63940],{"class":78,"line":2693},[76,63937,63815],{"class":2035},[76,63939,61362],{"class":51370},[76,63941,15644],{"class":93},[76,63943,63944,63946,63948,63950],{"class":78,"line":8020},[76,63945,54802],{"class":250},[76,63947,51507],{"class":93},[76,63949,54807],{"class":250},[76,63951,1363],{"class":93},[76,63953,63954,63956,63958,63960],{"class":78,"line":8044},[76,63955,55079],{"class":250},[76,63957,51507],{"class":93},[76,63959,51547],{"class":250},[76,63961,1363],{"class":93},[76,63963,63964,63966,63968,63970],{"class":78,"line":8049},[76,63965,55090],{"class":250},[76,63967,51507],{"class":93},[76,63969,51650],{"class":250},[76,63971,1363],{"class":93},[76,63973,63974],{"class":78,"line":8055},[76,63975,2259],{"class":93},[76,63977,63978],{"class":78,"line":8082},[76,63979,2472],{"emptyLinePlaceholder":125},[76,63981,63982,63984,63986,63988],{"class":78,"line":8087},[76,63983,63815],{"class":2035},[76,63985,61362],{"class":51370},[76,63987,55145],{"class":51370},[76,63989,15644],{"class":93},[76,63991,63992,63994,63996,63998,64000,64002],{"class":78,"line":8093},[76,63993,54776],{"class":250},[76,63995,51507],{"class":93},[76,63997,392],{"class":250},[76,63999,9022],{"class":250},[76,64001,51562],{"class":89},[76,64003,1363],{"class":93},[76,64005,64006,64008,64010,64012,64014],{"class":78,"line":8105},[76,64007,54992],{"class":250},[76,64009,51507],{"class":93},[76,64011,748],{"class":250},[76,64013,51562],{"class":89},[76,64015,1363],{"class":93},[76,64017,64018],{"class":78,"line":8117},[76,64019,2259],{"class":93},[76,64021,64022],{"class":78,"line":8129},[76,64023,2472],{"emptyLinePlaceholder":125},[76,64025,64026,64028,64030,64032,64034],{"class":78,"line":9788},[76,64027,63815],{"class":2035},[76,64029,61362],{"class":51370},[76,64031,55145],{"class":51370},[76,64033,1471],{"class":51370},[76,64035,15644],{"class":93},[76,64037,64038,64041,64043,64045],{"class":78,"line":9813},[76,64039,64040],{"class":250},"      text-decoration",[76,64042,51507],{"class":93},[76,64044,54807],{"class":250},[76,64046,1363],{"class":93},[76,64048,64049,64051,64053,64055,64057,64059,64062],{"class":78,"line":9836},[76,64050,62302],{"class":250},[76,64052,51507],{"class":93},[76,64054,278],{"class":250},[76,64056,51562],{"class":89},[76,64058,51591],{"class":250},[76,64060,64061],{"class":250}," transparent",[76,64063,1363],{"class":93},[76,64065,64066,64068,64070,64072],{"class":78,"line":9860},[76,64067,57486],{"class":250},[76,64069,51507],{"class":93},[76,64071,62439],{"class":250},[76,64073,1363],{"class":93},[76,64075,64076],{"class":78,"line":9865},[76,64077,2259],{"class":93},[76,64079,64080],{"class":78,"line":9870},[76,64081,2472],{"emptyLinePlaceholder":125},[76,64083,64084,64086,64088,64090,64092,64095],{"class":78,"line":9875},[76,64085,63815],{"class":2035},[76,64087,61362],{"class":51370},[76,64089,55145],{"class":51370},[76,64091,1471],{"class":51370},[76,64093,64094],{"class":2035},".active",[76,64096,15644],{"class":93},[76,64098,64099,64101,64103,64106],{"class":78,"line":9884},[76,64100,61861],{"class":250},[76,64102,51507],{"class":93},[76,64104,64105],{"class":250},"#e1251b",[76,64107,1363],{"class":93},[76,64109,64110,64112,64114,64116],{"class":78,"line":9889},[76,64111,57486],{"class":250},[76,64113,51507],{"class":93},[76,64115,64105],{"class":250},[76,64117,1363],{"class":93},[76,64119,64120],{"class":78,"line":9895},[76,64121,2259],{"class":93},[76,64123,64124],{"class":78,"line":9916},[76,64125,2472],{"emptyLinePlaceholder":125},[76,64127,64128,64131],{"class":78,"line":9922},[76,64129,64130],{"class":2035},"    .tab-content",[76,64132,15644],{"class":93},[76,64134,64135,64137,64139,64141,64144,64146],{"class":78,"line":9936},[76,64136,54765],{"class":250},[76,64138,51507],{"class":93},[76,64140,392],{"class":250},[76,64142,64143],{"class":250}," 16",[76,64145,51562],{"class":89},[76,64147,1363],{"class":93},[76,64149,64150],{"class":78,"line":9942},[76,64151,2259],{"class":93},[76,64153,64154],{"class":78,"line":9969},[76,64155,2472],{"emptyLinePlaceholder":125},[76,64157,64158,64160,64162],{"class":78,"line":9978},[76,64159,64130],{"class":2035},[76,64161,62244],{"class":2035},[76,64163,15644],{"class":93},[76,64165,64166,64168,64170,64172],{"class":78,"line":9984},[76,64167,55079],{"class":250},[76,64169,51507],{"class":93},[76,64171,54807],{"class":250},[76,64173,1363],{"class":93},[76,64175,64176],{"class":78,"line":9992},[76,64177,2259],{"class":93},[76,64179,64180],{"class":78,"line":9997},[76,64181,2472],{"emptyLinePlaceholder":125},[76,64183,64184,64186,64189],{"class":78,"line":16676},[76,64185,64130],{"class":2035},[76,64187,64188],{"class":2035}," .item.active",[76,64190,15644],{"class":93},[76,64192,64193,64195,64197,64199],{"class":78,"line":16682},[76,64194,55079],{"class":250},[76,64196,51507],{"class":93},[76,64198,60939],{"class":250},[76,64200,1363],{"class":93},[76,64202,64203],{"class":78,"line":16705},[76,64204,2259],{"class":93},[76,64206,64207,64209,64211],{"class":78,"line":16711},[76,64208,52487],{"class":93},[76,64210,117],{"class":51370},[76,64212,51377],{"class":93},[76,64214,64215,64217,64219],{"class":78,"line":16734},[76,64216,51855],{"class":93},[76,64218,51404],{"class":51370},[76,64220,51377],{"class":93},[76,64222,64223],{"class":78,"line":16748},[76,64224,2472],{"emptyLinePlaceholder":125},[76,64226,64227,64229,64231],{"class":78,"line":16768},[76,64228,1109],{"class":93},[76,64230,51870],{"class":51370},[76,64232,51377],{"class":93},[76,64234,64235,64237,64239,64241,64243,64246],{"class":78,"line":16774},[76,64236,52214],{"class":93},[76,64238,51681],{"class":51370},[76,64240,53556],{"class":2035},[76,64242,247],{"class":93},[76,64244,64245],{"class":305},"\"tab\"",[76,64247,51377],{"class":93},[76,64249,64250,64252,64254,64256,64258,64261],{"class":78,"line":16785},[76,64251,51411],{"class":93},[76,64253,51681],{"class":51370},[76,64255,53556],{"class":2035},[76,64257,247],{"class":93},[76,64259,64260],{"class":305},"\"tab-nav\"",[76,64262,51377],{"class":93},[76,64264,64265,64267,64269,64272,64274],{"class":78,"line":16808},[76,64266,55304],{"class":93},[76,64268,169],{"class":51370},[76,64270,64271],{"class":93},">每日特价\u003C\u002F",[76,64273,169],{"class":51370},[76,64275,51377],{"class":93},[76,64277,64278,64280,64282],{"class":78,"line":16830},[76,64279,55304],{"class":93},[76,64281,1206],{"class":51370},[76,64283,51377],{"class":93},[76,64285,64286,64288,64290,64292,64294,64296,64298,64300,64302,64304,64307,64310,64312,64314,64316],{"class":78,"line":16835},[76,64287,55372],{"class":93},[76,64289,155],{"class":51370},[76,64291,61122],{"class":93},[76,64293,439],{"class":51370},[76,64295,53556],{"class":2035},[76,64297,247],{"class":93},[76,64299,59776],{"class":305},[76,64301,61127],{"class":2035},[76,64303,247],{"class":93},[76,64305,64306],{"class":305},"\"javascript:;\"",[76,64308,64309],{"class":93},">精选\u003C\u002F",[76,64311,439],{"class":51370},[76,64313,55384],{"class":93},[76,64315,155],{"class":51370},[76,64317,51377],{"class":93},[76,64319,64320,64322,64324,64326,64328,64330,64332,64334,64337,64339,64341,64343],{"class":78,"line":16841},[76,64321,55372],{"class":93},[76,64323,155],{"class":51370},[76,64325,61122],{"class":93},[76,64327,439],{"class":51370},[76,64329,61127],{"class":2035},[76,64331,247],{"class":93},[76,64333,64306],{"class":305},[76,64335,64336],{"class":93},">美食\u003C\u002F",[76,64338,439],{"class":51370},[76,64340,55384],{"class":93},[76,64342,155],{"class":51370},[76,64344,51377],{"class":93},[76,64346,64347,64349,64351,64353,64355,64357,64359,64361,64364,64366,64368,64370],{"class":78,"line":16855},[76,64348,55372],{"class":93},[76,64350,155],{"class":51370},[76,64352,61122],{"class":93},[76,64354,439],{"class":51370},[76,64356,61127],{"class":2035},[76,64358,247],{"class":93},[76,64360,64306],{"class":305},[76,64362,64363],{"class":93},">百货\u003C\u002F",[76,64365,439],{"class":51370},[76,64367,55384],{"class":93},[76,64369,155],{"class":51370},[76,64371,51377],{"class":93},[76,64373,64374,64376,64378,64380,64382,64384,64386,64388,64391,64393,64395,64397],{"class":78,"line":16868},[76,64375,55372],{"class":93},[76,64377,155],{"class":51370},[76,64379,61122],{"class":93},[76,64381,439],{"class":51370},[76,64383,61127],{"class":2035},[76,64385,247],{"class":93},[76,64387,64306],{"class":305},[76,64389,64390],{"class":93},">个护\u003C\u002F",[76,64392,439],{"class":51370},[76,64394,55384],{"class":93},[76,64396,155],{"class":51370},[76,64398,51377],{"class":93},[76,64400,64401,64403,64405,64407,64409,64411,64413,64415,64418,64420,64422,64424],{"class":78,"line":16873},[76,64402,55372],{"class":93},[76,64404,155],{"class":51370},[76,64406,61122],{"class":93},[76,64408,439],{"class":51370},[76,64410,61127],{"class":2035},[76,64412,247],{"class":93},[76,64414,64306],{"class":305},[76,64416,64417],{"class":93},">预告\u003C\u002F",[76,64419,439],{"class":51370},[76,64421,55384],{"class":93},[76,64423,155],{"class":51370},[76,64425,51377],{"class":93},[76,64427,64428,64430,64432],{"class":78,"line":16887},[76,64429,55477],{"class":93},[76,64431,1206],{"class":51370},[76,64433,51377],{"class":93},[76,64435,64436,64438,64440],{"class":78,"line":16892},[76,64437,51846],{"class":93},[76,64439,51681],{"class":51370},[76,64441,51377],{"class":93},[76,64443,64444,64446,64448,64450,64452,64455],{"class":78,"line":16898},[76,64445,51411],{"class":93},[76,64447,51681],{"class":51370},[76,64449,53556],{"class":2035},[76,64451,247],{"class":93},[76,64453,64454],{"class":305},"\"tab-content\"",[76,64456,51377],{"class":93},[76,64458,64459,64461,64463,64465,64467,64470,64472,64474,64476,64478,64481,64483,64485,64487,64490,64492],{"class":78,"line":16903},[76,64460,55304],{"class":93},[76,64462,51681],{"class":51370},[76,64464,53556],{"class":2035},[76,64466,247],{"class":93},[76,64468,64469],{"class":305},"\"item active\"",[76,64471,61122],{"class":93},[76,64473,56],{"class":51370},[76,64475,55309],{"class":2035},[76,64477,247],{"class":93},[76,64479,64480],{"class":305},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[76,64482,55317],{"class":2035},[76,64484,247],{"class":93},[76,64486,7724],{"class":305},[76,64488,64489],{"class":93}," \u002F>\u003C\u002F",[76,64491,51681],{"class":51370},[76,64493,51377],{"class":93},[76,64495,64496,64498,64500,64502,64504,64506,64508,64510,64512,64514,64517,64519,64521,64523,64525,64527],{"class":78,"line":16917},[76,64497,55304],{"class":93},[76,64499,51681],{"class":51370},[76,64501,53556],{"class":2035},[76,64503,247],{"class":93},[76,64505,62693],{"class":305},[76,64507,61122],{"class":93},[76,64509,56],{"class":51370},[76,64511,55309],{"class":2035},[76,64513,247],{"class":93},[76,64515,64516],{"class":305},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[76,64518,55317],{"class":2035},[76,64520,247],{"class":93},[76,64522,7724],{"class":305},[76,64524,64489],{"class":93},[76,64526,51681],{"class":51370},[76,64528,51377],{"class":93},[76,64530,64531,64533,64535,64537,64539,64541,64543,64545,64547,64549,64552,64554,64556,64558,64560,64562],{"class":78,"line":16922},[76,64532,55304],{"class":93},[76,64534,51681],{"class":51370},[76,64536,53556],{"class":2035},[76,64538,247],{"class":93},[76,64540,62693],{"class":305},[76,64542,61122],{"class":93},[76,64544,56],{"class":51370},[76,64546,55309],{"class":2035},[76,64548,247],{"class":93},[76,64550,64551],{"class":305},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[76,64553,55317],{"class":2035},[76,64555,247],{"class":93},[76,64557,7724],{"class":305},[76,64559,64489],{"class":93},[76,64561,51681],{"class":51370},[76,64563,51377],{"class":93},[76,64565,64566,64568,64570,64572,64574,64576,64578,64580,64582,64584,64587,64589,64591,64593,64595,64597],{"class":78,"line":16927},[76,64567,55304],{"class":93},[76,64569,51681],{"class":51370},[76,64571,53556],{"class":2035},[76,64573,247],{"class":93},[76,64575,62693],{"class":305},[76,64577,61122],{"class":93},[76,64579,56],{"class":51370},[76,64581,55309],{"class":2035},[76,64583,247],{"class":93},[76,64585,64586],{"class":305},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[76,64588,55317],{"class":2035},[76,64590,247],{"class":93},[76,64592,7724],{"class":305},[76,64594,64489],{"class":93},[76,64596,51681],{"class":51370},[76,64598,51377],{"class":93},[76,64600,64601,64603,64605,64607,64609,64611,64613,64615,64617,64619,64622,64624,64626,64628,64630,64632],{"class":78,"line":16941},[76,64602,55304],{"class":93},[76,64604,51681],{"class":51370},[76,64606,53556],{"class":2035},[76,64608,247],{"class":93},[76,64610,62693],{"class":305},[76,64612,61122],{"class":93},[76,64614,56],{"class":51370},[76,64616,55309],{"class":2035},[76,64618,247],{"class":93},[76,64620,64621],{"class":305},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[76,64623,55317],{"class":2035},[76,64625,247],{"class":93},[76,64627,7724],{"class":305},[76,64629,64489],{"class":93},[76,64631,51681],{"class":51370},[76,64633,51377],{"class":93},[76,64635,64636,64638,64640],{"class":78,"line":16953},[76,64637,51846],{"class":93},[76,64639,51681],{"class":51370},[76,64641,51377],{"class":93},[76,64643,64644,64646,64648],{"class":78,"line":16958},[76,64645,52487],{"class":93},[76,64647,51681],{"class":51370},[76,64649,51377],{"class":93},[76,64651,64652,64654,64656],{"class":78,"line":16971},[76,64653,52214],{"class":93},[76,64655,51883],{"class":51370},[76,64657,51377],{"class":93},[76,64659,64660],{"class":78,"line":16976},[76,64661,64662],{"class":82},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[76,64664,64665],{"class":78,"line":16981},[76,64666,64667],{"class":82},"    \u002F\u002F 1.1 获取 a 元素 \n",[76,64669,64670,64672,64675,64677,64679,64681,64683,64686],{"class":78,"line":16986},[76,64671,11293],{"class":89},[76,64673,64674],{"class":250}," as",[76,64676,13636],{"class":89},[76,64678,54466],{"class":93},[76,64680,55751],{"class":2035},[76,64682,202],{"class":93},[76,64684,64685],{"class":305},"'.tab-nav a'",[76,64687,208],{"class":93},[76,64689,64690],{"class":78,"line":16999},[76,64691,64692],{"class":82},"    \u002F\u002F console.log(as) \n",[76,64694,64695,64697,64699,64701,64703,64705,64707,64709,64711,64714,64716,64718,64720],{"class":78,"line":17004},[76,64696,3273],{"class":89},[76,64698,1730],{"class":93},[76,64700,51917],{"class":89},[76,64702,9510],{"class":93},[76,64704,247],{"class":89},[76,64706,4165],{"class":250},[76,64708,9517],{"class":93},[76,64710,1109],{"class":89},[76,64712,64713],{"class":93}," as.",[76,64715,52038],{"class":250},[76,64717,3286],{"class":93},[76,64719,2364],{"class":89},[76,64721,12514],{"class":93},[76,64723,64724],{"class":78,"line":32703},[76,64725,64726],{"class":82},"      \u002F\u002F console.log(as[i])\n",[76,64728,64729],{"class":78,"line":32709},[76,64730,64731],{"class":82},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[76,64733,64734,64737,64739,64741,64744,64746,64748],{"class":78,"line":32715},[76,64735,64736],{"class":93},"      as[i].",[76,64738,57883],{"class":2035},[76,64740,202],{"class":93},[76,64742,64743],{"class":305},"'mouseenter'",[76,64745,12507],{"class":93},[76,64747,54519],{"class":89},[76,64749,54522],{"class":93},[76,64751,64752],{"class":78,"line":32721},[76,64753,64754],{"class":82},"        \u002F\u002F console.log('鼠标经过')\n",[76,64756,64757],{"class":78,"line":32727},[76,64758,64759],{"class":82},"        \u002F\u002F 排他思想  \n",[76,64761,64762],{"class":78,"line":32738},[76,64763,64764],{"class":82},"        \u002F\u002F 干掉别人 移除类active\n",[76,64766,64767,64769,64771,64773,64776,64778,64780,64782,64785],{"class":78,"line":32744},[76,64768,51995],{"class":93},[76,64770,54469],{"class":2035},[76,64772,202],{"class":93},[76,64774,64775],{"class":305},"'.tab-nav .active'",[76,64777,57073],{"class":93},[76,64779,57076],{"class":2035},[76,64781,202],{"class":93},[76,64783,64784],{"class":305},"'active'",[76,64786,208],{"class":93},[76,64788,64789],{"class":78,"line":32764},[76,64790,64791],{"class":82},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[76,64793,64794,64797,64800,64802,64804,64806],{"class":78,"line":32770},[76,64795,64796],{"class":250},"        this",[76,64798,64799],{"class":93},".classList.",[76,64801,5406],{"class":2035},[76,64803,202],{"class":93},[76,64805,64784],{"class":305},[76,64807,208],{"class":93},[76,64809,64810],{"class":78,"line":32781},[76,64811,2472],{"emptyLinePlaceholder":125},[76,64813,64814],{"class":78,"line":32787},[76,64815,64816],{"class":82},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[76,64818,64819],{"class":78,"line":32793},[76,64820,64821],{"class":82},"        \u002F\u002F 干掉别人\n",[76,64823,64824,64826,64828,64830,64833,64835,64837,64839,64841],{"class":78,"line":32799},[76,64825,51995],{"class":93},[76,64827,54469],{"class":2035},[76,64829,202],{"class":93},[76,64831,64832],{"class":305},"'.tab-content .active'",[76,64834,57073],{"class":93},[76,64836,57076],{"class":2035},[76,64838,202],{"class":93},[76,64840,64784],{"class":305},[76,64842,208],{"class":93},[76,64844,64845],{"class":78,"line":32805},[76,64846,64847],{"class":82},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[76,64849,64850,64852,64854,64856,64859,64861,64863,64865,64867,64869,64871,64873,64875],{"class":78,"line":32811},[76,64851,51995],{"class":93},[76,64853,54469],{"class":2035},[76,64855,202],{"class":93},[76,64857,64858],{"class":305},"`.tab-content .item:nth-child(${",[76,64860,641],{"class":93},[76,64862,45636],{"class":89},[76,64864,25191],{"class":250},[76,64866,57102],{"class":305},[76,64868,57073],{"class":93},[76,64870,5406],{"class":2035},[76,64872,202],{"class":93},[76,64874,64784],{"class":305},[76,64876,208],{"class":93},[76,64878,64879],{"class":78,"line":32817},[76,64880,2472],{"emptyLinePlaceholder":125},[76,64882,64883],{"class":78,"line":32823},[76,64884,64885],{"class":93},"      })\n",[76,64887,64888],{"class":78,"line":32843},[76,64889,2259],{"class":93},[76,64891,64892,64894,64896],{"class":78,"line":32849},[76,64893,52487],{"class":93},[76,64895,51883],{"class":51370},[76,64897,51377],{"class":93},[76,64899,64900,64902,64904],{"class":78,"line":32865},[76,64901,51855],{"class":93},[76,64903,51870],{"class":51370},[76,64905,51377],{"class":93},[76,64907,64908],{"class":78,"line":32871},[76,64909,2472],{"emptyLinePlaceholder":125},[76,64911,64912,64914,64916],{"class":78,"line":32885},[76,64913,51855],{"class":93},[76,64915,50705],{"class":51370},[76,64917,51377],{"class":93},[14,64919,64920],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64922,64923],{},"在监听事件中，this指向的就是他的调用者",[14,64925,64926],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64928,53790],{},[14,64930,64931],{},"(function () {",[14,64933,64934],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64936,64937],{},"list.addEventListener('click', function (e) {",[14,64939,64940],{},"if (e.target.tagName === 'A') {",[14,64942,64943],{},"\u002F\u002F 排他思想",[14,64945,64946],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64948,64949],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64951,64952],{},"\u002F\u002F console.log(old);",[14,64954,64955],{},"\u002F\u002F 判断",[14,64957,64958],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64960,64961],{},"if (old) old.classList.remove('active')",[14,64963,64964],{},"e.target.classList.add('active')",[14,64966,1145],{},[14,64968,52534],{},[14,64970,64971],{},"})();",[169,64973,64975],{"id":64974},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[67,64977,64979],{"className":50703,"code":64978,"language":50705,"meta":58,"style":58},"\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",[73,64980,64981,64991,64995,65003,65007,65021,65035,65047,65055,65061,65071,65081,65085,65089,65096,65108,65119,65136,65149,65163,65173,65177,65181,65188,65199,65217,65227,65239,65243,65247,65254,65271,65282,65294,65298,65302,65309,65321,65325,65333,65341,65345,65353,65361,65369,65384,65428,65436,65449,65462,65475,65483,65491,65499,65527,65535,65547,65560,65573,65581,65589,65597,65623,65631,65644,65656,65669,65677,65685,65693,65719,65727,65740,65752,65765,65773,65781,65789,65794,65814,65819,65839,65844,65861,65866,65874,65879,65908,65921,65925,65929,65934,65938,65966,65971,65988,65993,65998,66003,66008,66034,66038,66042,66050,66058,66062],{"__ignoreMap":58},[76,64982,64983,64985,64987,64989],{"class":78,"line":79},[76,64984,51367],{"class":93},[76,64986,51371],{"class":51370},[76,64988,51374],{"class":2035},[76,64990,51377],{"class":93},[76,64992,64993],{"class":78,"line":86},[76,64994,2472],{"emptyLinePlaceholder":125},[76,64996,64997,64999,65001],{"class":78,"line":97},[76,64998,1109],{"class":93},[76,65000,50705],{"class":51370},[76,65002,51377],{"class":93},[76,65004,65005],{"class":78,"line":103},[76,65006,2472],{"emptyLinePlaceholder":125},[76,65008,65009,65011,65013,65015,65017,65019],{"class":78,"line":1273},[76,65010,1109],{"class":93},[76,65012,51404],{"class":51370},[76,65014,51386],{"class":2035},[76,65016,247],{"class":93},[76,65018,51391],{"class":305},[76,65020,51377],{"class":93},[76,65022,65023,65025,65027,65029,65031,65033],{"class":78,"line":1287},[76,65024,52214],{"class":93},[76,65026,51414],{"class":51370},[76,65028,51417],{"class":2035},[76,65030,247],{"class":93},[76,65032,51422],{"class":305},[76,65034,51377],{"class":93},[76,65036,65037,65039,65041,65043,65045],{"class":78,"line":1293},[76,65038,52214],{"class":93},[76,65040,51477],{"class":51370},[76,65042,55384],{"class":93},[76,65044,51477],{"class":51370},[76,65046,51377],{"class":93},[76,65048,65049,65051,65053],{"class":78,"line":1384},[76,65050,52214],{"class":93},[76,65052,117],{"class":51370},[76,65054,51377],{"class":93},[76,65056,65057,65059],{"class":78,"line":1390},[76,65058,6475],{"class":51370},[76,65060,15644],{"class":93},[76,65062,65063,65065,65067,65069],{"class":78,"line":1402},[76,65064,54776],{"class":250},[76,65066,51507],{"class":93},[76,65068,392],{"class":250},[76,65070,1363],{"class":93},[76,65072,65073,65075,65077,65079],{"class":78,"line":1684},[76,65074,54765],{"class":250},[76,65076,51507],{"class":93},[76,65078,392],{"class":250},[76,65080,1363],{"class":93},[76,65082,65083],{"class":78,"line":1689},[76,65084,2259],{"class":93},[76,65086,65087],{"class":78,"line":1695},[76,65088,2472],{"emptyLinePlaceholder":125},[76,65090,65091,65094],{"class":78,"line":1700},[76,65092,65093],{"class":51370},"    table",[76,65095,15644],{"class":93},[76,65097,65098,65101,65103,65106],{"class":78,"line":1714},[76,65099,65100],{"class":250},"      border-collapse",[76,65102,51507],{"class":93},[76,65104,65105],{"class":250},"collapse",[76,65107,1363],{"class":93},[76,65109,65110,65113,65115,65117],{"class":78,"line":1719},[76,65111,65112],{"class":250},"      border-spacing",[76,65114,51507],{"class":93},[76,65116,392],{"class":250},[76,65118,1363],{"class":93},[76,65120,65121,65123,65125,65127,65129,65131,65134],{"class":78,"line":1725},[76,65122,62047],{"class":250},[76,65124,51507],{"class":93},[76,65126,418],{"class":250},[76,65128,51562],{"class":89},[76,65130,51591],{"class":250},[76,65132,65133],{"class":250}," #c0c0c0",[76,65135,1363],{"class":93},[76,65137,65138,65140,65142,65145,65147],{"class":78,"line":1746},[76,65139,54841],{"class":250},[76,65141,51507],{"class":93},[76,65143,65144],{"class":250},"500",[76,65146,51562],{"class":89},[76,65148,1363],{"class":93},[76,65150,65151,65153,65155,65157,65159,65161],{"class":78,"line":1751},[76,65152,54776],{"class":250},[76,65154,51507],{"class":93},[76,65156,512],{"class":250},[76,65158,51562],{"class":89},[76,65160,51626],{"class":250},[76,65162,1363],{"class":93},[76,65164,65165,65167,65169,65171],{"class":78,"line":1765},[76,65166,57356],{"class":250},[76,65168,51507],{"class":93},[76,65170,51662],{"class":250},[76,65172,1363],{"class":93},[76,65174,65175],{"class":78,"line":1770},[76,65176,2259],{"class":93},[76,65178,65179],{"class":78,"line":1799},[76,65180,2472],{"emptyLinePlaceholder":125},[76,65182,65183,65186],{"class":78,"line":1804},[76,65184,65185],{"class":51370},"    th",[76,65187,15644],{"class":93},[76,65189,65190,65192,65194,65197],{"class":78,"line":1821},[76,65191,54954],{"class":250},[76,65193,51507],{"class":93},[76,65195,65196],{"class":250},"#09c",[76,65198,1363],{"class":93},[76,65200,65201,65204,65206,65208,65210,65212,65215],{"class":78,"line":1826},[76,65202,65203],{"class":250},"      font",[76,65205,51507],{"class":93},[76,65207,62409],{"class":250},[76,65209,64143],{"class":250},[76,65211,51562],{"class":89},[76,65213,65214],{"class":305}," \"微软雅黑\"",[76,65216,1363],{"class":93},[76,65218,65219,65221,65223,65225],{"class":78,"line":1831},[76,65220,57486],{"class":250},[76,65222,51507],{"class":93},[76,65224,60912],{"class":250},[76,65226,1363],{"class":93},[76,65228,65229,65231,65233,65235,65237],{"class":78,"line":1836},[76,65230,54855],{"class":250},[76,65232,51507],{"class":93},[76,65234,999],{"class":250},[76,65236,51562],{"class":89},[76,65238,1363],{"class":93},[76,65240,65241],{"class":78,"line":1850},[76,65242,2259],{"class":93},[76,65244,65245],{"class":78,"line":1855},[76,65246,2472],{"emptyLinePlaceholder":125},[76,65248,65249,65252],{"class":78,"line":2649},[76,65250,65251],{"class":51370},"    td",[76,65253,15644],{"class":93},[76,65255,65256,65258,65260,65262,65264,65266,65269],{"class":78,"line":2663},[76,65257,62047],{"class":250},[76,65259,51507],{"class":93},[76,65261,418],{"class":250},[76,65263,51562],{"class":89},[76,65265,51591],{"class":250},[76,65267,65268],{"class":250}," #d0d0d0",[76,65270,1363],{"class":93},[76,65272,65273,65275,65277,65280],{"class":78,"line":2671},[76,65274,57486],{"class":250},[76,65276,51507],{"class":93},[76,65278,65279],{"class":250},"#404060",[76,65281,1363],{"class":93},[76,65283,65284,65286,65288,65290,65292],{"class":78,"line":2676},[76,65285,54765],{"class":250},[76,65287,51507],{"class":93},[76,65289,646],{"class":250},[76,65291,51562],{"class":89},[76,65293,1363],{"class":93},[76,65295,65296],{"class":78,"line":2682},[76,65297,2259],{"class":93},[76,65299,65300],{"class":78,"line":2688},[76,65301,2472],{"emptyLinePlaceholder":125},[76,65303,65304,65307],{"class":78,"line":2693},[76,65305,65306],{"class":2035},"    .allCheck",[76,65308,15644],{"class":93},[76,65310,65311,65313,65315,65317,65319],{"class":78,"line":8020},[76,65312,54841],{"class":250},[76,65314,51507],{"class":93},[76,65316,811],{"class":250},[76,65318,51562],{"class":89},[76,65320,1363],{"class":93},[76,65322,65323],{"class":78,"line":8044},[76,65324,2259],{"class":93},[76,65326,65327,65329,65331],{"class":78,"line":8049},[76,65328,52487],{"class":93},[76,65330,117],{"class":51370},[76,65332,51377],{"class":93},[76,65334,65335,65337,65339],{"class":78,"line":8055},[76,65336,51855],{"class":93},[76,65338,51404],{"class":51370},[76,65340,51377],{"class":93},[76,65342,65343],{"class":78,"line":8082},[76,65344,2472],{"emptyLinePlaceholder":125},[76,65346,65347,65349,65351],{"class":78,"line":8087},[76,65348,1109],{"class":93},[76,65350,51870],{"class":51370},[76,65352,51377],{"class":93},[76,65354,65355,65357,65359],{"class":78,"line":8093},[76,65356,52214],{"class":93},[76,65358,338],{"class":51370},[76,65360,51377],{"class":93},[76,65362,65363,65365,65367],{"class":78,"line":8105},[76,65364,51411],{"class":93},[76,65366,344],{"class":51370},[76,65368,51377],{"class":93},[76,65370,65371,65373,65375,65377,65379,65382],{"class":78,"line":8117},[76,65372,55304],{"class":93},[76,65374,347],{"class":51370},[76,65376,53556],{"class":2035},[76,65378,247],{"class":93},[76,65380,65381],{"class":305},"\"allCheck\"",[76,65383,51377],{"class":93},[76,65385,65386,65388,65390,65392,65394,65396,65398,65400,65402,65404,65406,65409,65412,65414,65416,65418,65421,65424,65426],{"class":78,"line":8129},[76,65387,55372],{"class":93},[76,65389,53891],{"class":51370},[76,65391,53894],{"class":2035},[76,65393,247],{"class":93},[76,65395,53899],{"class":305},[76,65397,14992],{"class":2035},[76,65399,247],{"class":93},[76,65401,7724],{"class":305},[76,65403,15031],{"class":2035},[76,65405,247],{"class":93},[76,65407,65408],{"class":305},"\"checkAll\"",[76,65410,65411],{"class":93},"> \u003C",[76,65413,76],{"class":51370},[76,65415,53556],{"class":2035},[76,65417,247],{"class":93},[76,65419,65420],{"class":305},"\"all\"",[76,65422,65423],{"class":93},">全选\u003C\u002F",[76,65425,76],{"class":51370},[76,65427,51377],{"class":93},[76,65429,65430,65432,65434],{"class":78,"line":9788},[76,65431,55477],{"class":93},[76,65433,347],{"class":51370},[76,65435,51377],{"class":93},[76,65437,65438,65440,65442,65445,65447],{"class":78,"line":9813},[76,65439,55304],{"class":93},[76,65441,347],{"class":51370},[76,65443,65444],{"class":93},">商品\u003C\u002F",[76,65446,347],{"class":51370},[76,65448,51377],{"class":93},[76,65450,65451,65453,65455,65458,65460],{"class":78,"line":9836},[76,65452,55304],{"class":93},[76,65454,347],{"class":51370},[76,65456,65457],{"class":93},">商家\u003C\u002F",[76,65459,347],{"class":51370},[76,65461,51377],{"class":93},[76,65463,65464,65466,65468,65471,65473],{"class":78,"line":9860},[76,65465,55304],{"class":93},[76,65467,347],{"class":51370},[76,65469,65470],{"class":93},">价格\u003C\u002F",[76,65472,347],{"class":51370},[76,65474,51377],{"class":93},[76,65476,65477,65479,65481],{"class":78,"line":9865},[76,65478,51846],{"class":93},[76,65480,344],{"class":51370},[76,65482,51377],{"class":93},[76,65484,65485,65487,65489],{"class":78,"line":9870},[76,65486,51411],{"class":93},[76,65488,344],{"class":51370},[76,65490,51377],{"class":93},[76,65492,65493,65495,65497],{"class":78,"line":9875},[76,65494,55304],{"class":93},[76,65496,390],{"class":51370},[76,65498,51377],{"class":93},[76,65500,65501,65503,65505,65507,65509,65511,65513,65515,65518,65520,65522,65525],{"class":78,"line":9884},[76,65502,55372],{"class":93},[76,65504,53891],{"class":51370},[76,65506,53894],{"class":2035},[76,65508,247],{"class":93},[76,65510,53899],{"class":305},[76,65512,14992],{"class":2035},[76,65514,247],{"class":93},[76,65516,65517],{"class":305},"\"check\"",[76,65519,53556],{"class":2035},[76,65521,247],{"class":93},[76,65523,65524],{"class":305},"\"ck\"",[76,65526,51377],{"class":93},[76,65528,65529,65531,65533],{"class":78,"line":9889},[76,65530,55477],{"class":93},[76,65532,390],{"class":51370},[76,65534,51377],{"class":93},[76,65536,65537,65539,65541,65543,65545],{"class":78,"line":9895},[76,65538,55304],{"class":93},[76,65540,390],{"class":51370},[76,65542,61243],{"class":93},[76,65544,390],{"class":51370},[76,65546,51377],{"class":93},[76,65548,65549,65551,65553,65556,65558],{"class":78,"line":9916},[76,65550,55304],{"class":93},[76,65552,390],{"class":51370},[76,65554,65555],{"class":93},">小米\u003C\u002F",[76,65557,390],{"class":51370},[76,65559,51377],{"class":93},[76,65561,65562,65564,65566,65569,65571],{"class":78,"line":9922},[76,65563,55304],{"class":93},[76,65565,390],{"class":51370},[76,65567,65568],{"class":93},">￥1999\u003C\u002F",[76,65570,390],{"class":51370},[76,65572,51377],{"class":93},[76,65574,65575,65577,65579],{"class":78,"line":9936},[76,65576,51846],{"class":93},[76,65578,344],{"class":51370},[76,65580,51377],{"class":93},[76,65582,65583,65585,65587],{"class":78,"line":9942},[76,65584,51411],{"class":93},[76,65586,344],{"class":51370},[76,65588,51377],{"class":93},[76,65590,65591,65593,65595],{"class":78,"line":9969},[76,65592,55304],{"class":93},[76,65594,390],{"class":51370},[76,65596,51377],{"class":93},[76,65598,65599,65601,65603,65605,65607,65609,65611,65613,65615,65617,65619,65621],{"class":78,"line":9978},[76,65600,55372],{"class":93},[76,65602,53891],{"class":51370},[76,65604,53894],{"class":2035},[76,65606,247],{"class":93},[76,65608,53899],{"class":305},[76,65610,14992],{"class":2035},[76,65612,247],{"class":93},[76,65614,65517],{"class":305},[76,65616,53556],{"class":2035},[76,65618,247],{"class":93},[76,65620,65524],{"class":305},[76,65622,51377],{"class":93},[76,65624,65625,65627,65629],{"class":78,"line":9984},[76,65626,55477],{"class":93},[76,65628,390],{"class":51370},[76,65630,51377],{"class":93},[76,65632,65633,65635,65637,65640,65642],{"class":78,"line":9992},[76,65634,55304],{"class":93},[76,65636,390],{"class":51370},[76,65638,65639],{"class":93},">小米净水器\u003C\u002F",[76,65641,390],{"class":51370},[76,65643,51377],{"class":93},[76,65645,65646,65648,65650,65652,65654],{"class":78,"line":9997},[76,65647,55304],{"class":93},[76,65649,390],{"class":51370},[76,65651,65555],{"class":93},[76,65653,390],{"class":51370},[76,65655,51377],{"class":93},[76,65657,65658,65660,65662,65665,65667],{"class":78,"line":16676},[76,65659,55304],{"class":93},[76,65661,390],{"class":51370},[76,65663,65664],{"class":93},">￥4999\u003C\u002F",[76,65666,390],{"class":51370},[76,65668,51377],{"class":93},[76,65670,65671,65673,65675],{"class":78,"line":16682},[76,65672,51846],{"class":93},[76,65674,344],{"class":51370},[76,65676,51377],{"class":93},[76,65678,65679,65681,65683],{"class":78,"line":16705},[76,65680,51411],{"class":93},[76,65682,344],{"class":51370},[76,65684,51377],{"class":93},[76,65686,65687,65689,65691],{"class":78,"line":16711},[76,65688,55304],{"class":93},[76,65690,390],{"class":51370},[76,65692,51377],{"class":93},[76,65694,65695,65697,65699,65701,65703,65705,65707,65709,65711,65713,65715,65717],{"class":78,"line":16734},[76,65696,55372],{"class":93},[76,65698,53891],{"class":51370},[76,65700,53894],{"class":2035},[76,65702,247],{"class":93},[76,65704,53899],{"class":305},[76,65706,14992],{"class":2035},[76,65708,247],{"class":93},[76,65710,65517],{"class":305},[76,65712,53556],{"class":2035},[76,65714,247],{"class":93},[76,65716,65524],{"class":305},[76,65718,51377],{"class":93},[76,65720,65721,65723,65725],{"class":78,"line":16748},[76,65722,55477],{"class":93},[76,65724,390],{"class":51370},[76,65726,51377],{"class":93},[76,65728,65729,65731,65733,65736,65738],{"class":78,"line":16768},[76,65730,55304],{"class":93},[76,65732,390],{"class":51370},[76,65734,65735],{"class":93},">小米电视\u003C\u002F",[76,65737,390],{"class":51370},[76,65739,51377],{"class":93},[76,65741,65742,65744,65746,65748,65750],{"class":78,"line":16774},[76,65743,55304],{"class":93},[76,65745,390],{"class":51370},[76,65747,65555],{"class":93},[76,65749,390],{"class":51370},[76,65751,51377],{"class":93},[76,65753,65754,65756,65758,65761,65763],{"class":78,"line":16785},[76,65755,55304],{"class":93},[76,65757,390],{"class":51370},[76,65759,65760],{"class":93},">￥5999\u003C\u002F",[76,65762,390],{"class":51370},[76,65764,51377],{"class":93},[76,65766,65767,65769,65771],{"class":78,"line":16808},[76,65768,51846],{"class":93},[76,65770,344],{"class":51370},[76,65772,51377],{"class":93},[76,65774,65775,65777,65779],{"class":78,"line":16830},[76,65776,52487],{"class":93},[76,65778,338],{"class":51370},[76,65780,51377],{"class":93},[76,65782,65783,65785,65787],{"class":78,"line":16835},[76,65784,52214],{"class":93},[76,65786,51883],{"class":51370},[76,65788,51377],{"class":93},[76,65790,65791],{"class":78,"line":16841},[76,65792,65793],{"class":82},"    \u002F\u002F 1. 获取大复选框\n",[76,65795,65796,65798,65801,65803,65805,65807,65809,65812],{"class":78,"line":16855},[76,65797,11293],{"class":89},[76,65799,65800],{"class":250}," checkAll",[76,65802,13636],{"class":89},[76,65804,54466],{"class":93},[76,65806,54469],{"class":2035},[76,65808,202],{"class":93},[76,65810,65811],{"class":305},"'#checkAll'",[76,65813,208],{"class":93},[76,65815,65816],{"class":78,"line":16868},[76,65817,65818],{"class":82},"    \u002F\u002F 2. 获取所有的小复选框\n",[76,65820,65821,65823,65826,65828,65830,65832,65834,65837],{"class":78,"line":16873},[76,65822,11293],{"class":89},[76,65824,65825],{"class":250}," cks",[76,65827,13636],{"class":89},[76,65829,54466],{"class":93},[76,65831,55751],{"class":2035},[76,65833,202],{"class":93},[76,65835,65836],{"class":305},"'.ck'",[76,65838,208],{"class":93},[76,65840,65841],{"class":78,"line":16887},[76,65842,65843],{"class":82},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[76,65845,65846,65849,65851,65853,65855,65857,65859],{"class":78,"line":16892},[76,65847,65848],{"class":93},"    checkAll.",[76,65850,57883],{"class":2035},[76,65852,202],{"class":93},[76,65854,57888],{"class":305},[76,65856,12507],{"class":93},[76,65858,54519],{"class":89},[76,65860,54522],{"class":93},[76,65862,65863],{"class":78,"line":16898},[76,65864,65865],{"class":82},"      \u002F\u002F 得到当前大复选框的选中状态\n",[76,65867,65868,65871],{"class":78,"line":16903},[76,65869,65870],{"class":82},"      \u002F\u002F console.log(checkAll.checked)",[76,65872,65873],{"class":82},"  \u002F\u002F 得到 是 true 或者是 false\n",[76,65875,65876],{"class":78,"line":16917},[76,65877,65878],{"class":82},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[76,65880,65881,65883,65885,65887,65889,65891,65893,65895,65897,65900,65902,65904,65906],{"class":78,"line":16922},[76,65882,52354],{"class":89},[76,65884,1730],{"class":93},[76,65886,51917],{"class":89},[76,65888,9510],{"class":93},[76,65890,247],{"class":89},[76,65892,4165],{"class":250},[76,65894,9517],{"class":93},[76,65896,1109],{"class":89},[76,65898,65899],{"class":93}," cks.",[76,65901,52038],{"class":250},[76,65903,3286],{"class":93},[76,65905,2364],{"class":89},[76,65907,12514],{"class":93},[76,65909,65910,65913,65915,65918],{"class":78,"line":16927},[76,65911,65912],{"class":93},"        cks[i].checked ",[76,65914,247],{"class":89},[76,65916,65917],{"class":250}," this",[76,65919,65920],{"class":93},".checked\n",[76,65922,65923],{"class":78,"line":16941},[76,65924,52468],{"class":93},[76,65926,65927],{"class":78,"line":16953},[76,65928,33531],{"class":93},[76,65930,65931],{"class":78,"line":16958},[76,65932,65933],{"class":82},"    \u002F\u002F 5. 小复选框控制大复选框\n",[76,65935,65936],{"class":78,"line":16971},[76,65937,2472],{"emptyLinePlaceholder":125},[76,65939,65940,65942,65944,65946,65948,65950,65952,65954,65956,65958,65960,65962,65964],{"class":78,"line":16976},[76,65941,3273],{"class":89},[76,65943,1730],{"class":93},[76,65945,51917],{"class":89},[76,65947,9510],{"class":93},[76,65949,247],{"class":89},[76,65951,4165],{"class":250},[76,65953,9517],{"class":93},[76,65955,1109],{"class":89},[76,65957,65899],{"class":93},[76,65959,52038],{"class":250},[76,65961,3286],{"class":93},[76,65963,2364],{"class":89},[76,65965,12514],{"class":93},[76,65967,65968],{"class":78,"line":16981},[76,65969,65970],{"class":82},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[76,65972,65973,65976,65978,65980,65982,65984,65986],{"class":78,"line":16986},[76,65974,65975],{"class":93},"      cks[i].",[76,65977,57883],{"class":2035},[76,65979,202],{"class":93},[76,65981,57888],{"class":305},[76,65983,12507],{"class":93},[76,65985,54519],{"class":89},[76,65987,54522],{"class":93},[76,65989,65990],{"class":78,"line":16999},[76,65991,65992],{"class":82},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[76,65994,65995],{"class":78,"line":17004},[76,65996,65997],{"class":82},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[76,65999,66000],{"class":78,"line":32703},[76,66001,66002],{"class":82},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[76,66004,66005],{"class":78,"line":32709},[76,66006,66007],{"class":82},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[76,66009,66010,66013,66015,66017,66019,66021,66024,66026,66028,66030,66032],{"class":78,"line":32715},[76,66011,66012],{"class":93},"        checkAll.checked ",[76,66014,247],{"class":89},[76,66016,54466],{"class":93},[76,66018,55751],{"class":2035},[76,66020,202],{"class":93},[76,66022,66023],{"class":305},"'.ck:checked'",[76,66025,30896],{"class":93},[76,66027,52038],{"class":250},[76,66029,57976],{"class":89},[76,66031,65899],{"class":93},[76,66033,55901],{"class":250},[76,66035,66036],{"class":78,"line":32721},[76,66037,64885],{"class":93},[76,66039,66040],{"class":78,"line":32727},[76,66041,2259],{"class":93},[76,66043,66044,66046,66048],{"class":78,"line":32738},[76,66045,52487],{"class":93},[76,66047,51883],{"class":51370},[76,66049,51377],{"class":93},[76,66051,66052,66054,66056],{"class":78,"line":32744},[76,66053,51855],{"class":93},[76,66055,51870],{"class":51370},[76,66057,51377],{"class":93},[76,66059,66060],{"class":78,"line":32764},[76,66061,2472],{"emptyLinePlaceholder":125},[76,66063,66064,66066,66068],{"class":78,"line":32770},[76,66065,51855],{"class":93},[76,66067,50705],{"class":51370},[76,66069,51377],{"class":93},[14,66071,66072],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66074,66075],{},"用好之间比较得到的布尔值！！！",[14,66077,66078,66079,66082,66083,1730,66086,783,66088,66091],{},"在 JS 里访问的时候，",[73,66080,66081],{},"checkbox.checked"," 是一个 ",[350,66084,66085],{},"布尔值",[73,66087,1435],{},[73,66089,66090],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66093,66094,66095,66098,66099],{},"HTML 的 ",[73,66096,66097],{},"checked=\"checked\""," 只是 ",[350,66100,66101,66102,66105],{},"初始值；JS 的 ",[73,66103,66104],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66107,66108],{},"：checked是一个伪类选择器",[14,66110,66111],{},[56,66112],{"alt":58,"src":66113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66115,66116,66119],{},[66117,66118],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66121,66122],{},[56,66123],{"alt":58,"src":66124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[140,66126,66128],{"id":66127},"_33-dom事件进阶","3.3 DOM事件进阶",[169,66130,66132],{"id":66131},"_331-事件流","3.3.1 事件流",[14,66134,66135],{},[56,66136],{"alt":58,"src":66137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22070,66139,66141],{"id":66140},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66143,66144],{},[56,66145],{"alt":58,"src":66146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[67,66148,66150],{"className":50703,"code":66149,"language":50705,"meta":58,"style":58},"\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",[73,66151,66152,66162,66176,66180,66188,66202,66222,66234,66242,66249,66261,66273,66283,66287,66291,66298,66310,66322,66332,66336,66344,66352,66356,66364,66379,66398,66406,66414,66434,66454,66470,66481,66489,66506,66517,66525,66542,66553,66561,66569,66577,66581],{"__ignoreMap":58},[76,66153,66154,66156,66158,66160],{"class":78,"line":79},[76,66155,51367],{"class":93},[76,66157,51371],{"class":51370},[76,66159,51374],{"class":2035},[76,66161,51377],{"class":93},[76,66163,66164,66166,66168,66170,66172,66174],{"class":78,"line":86},[76,66165,1109],{"class":93},[76,66167,50705],{"class":51370},[76,66169,51386],{"class":2035},[76,66171,247],{"class":93},[76,66173,51391],{"class":305},[76,66175,51377],{"class":93},[76,66177,66178],{"class":78,"line":97},[76,66179,2472],{"emptyLinePlaceholder":125},[76,66181,66182,66184,66186],{"class":78,"line":103},[76,66183,1109],{"class":93},[76,66185,51404],{"class":51370},[76,66187,51377],{"class":93},[76,66189,66190,66192,66194,66196,66198,66200],{"class":78,"line":1273},[76,66191,52214],{"class":93},[76,66193,51414],{"class":51370},[76,66195,51417],{"class":2035},[76,66197,247],{"class":93},[76,66199,51422],{"class":305},[76,66201,51377],{"class":93},[76,66203,66204,66206,66208,66210,66212,66214,66216,66218,66220],{"class":78,"line":1287},[76,66205,52214],{"class":93},[76,66207,51414],{"class":51370},[76,66209,14992],{"class":2035},[76,66211,247],{"class":93},[76,66213,51461],{"class":305},[76,66215,51441],{"class":2035},[76,66217,247],{"class":93},[76,66219,51468],{"class":305},[76,66221,51377],{"class":93},[76,66223,66224,66226,66228,66230,66232],{"class":78,"line":1293},[76,66225,52214],{"class":93},[76,66227,51477],{"class":51370},[76,66229,51480],{"class":93},[76,66231,51477],{"class":51370},[76,66233,51377],{"class":93},[76,66235,66236,66238,66240],{"class":78,"line":1384},[76,66237,52214],{"class":93},[76,66239,117],{"class":51370},[76,66241,51377],{"class":93},[76,66243,66244,66247],{"class":78,"line":1390},[76,66245,66246],{"class":2035},"    .father",[76,66248,15644],{"class":93},[76,66250,66251,66253,66255,66257,66259],{"class":78,"line":1402},[76,66252,54841],{"class":250},[76,66254,51507],{"class":93},[76,66256,65144],{"class":250},[76,66258,51562],{"class":89},[76,66260,1363],{"class":93},[76,66262,66263,66265,66267,66269,66271],{"class":78,"line":1684},[76,66264,54855],{"class":250},[76,66266,51507],{"class":93},[76,66268,65144],{"class":250},[76,66270,51562],{"class":89},[76,66272,1363],{"class":93},[76,66274,66275,66277,66279,66281],{"class":78,"line":1689},[76,66276,54954],{"class":250},[76,66278,51507],{"class":93},[76,66280,51715],{"class":250},[76,66282,1363],{"class":93},[76,66284,66285],{"class":78,"line":1695},[76,66286,2259],{"class":93},[76,66288,66289],{"class":78,"line":1700},[76,66290,2472],{"emptyLinePlaceholder":125},[76,66292,66293,66296],{"class":78,"line":1714},[76,66294,66295],{"class":2035},"    .son",[76,66297,15644],{"class":93},[76,66299,66300,66302,66304,66306,66308],{"class":78,"line":1719},[76,66301,54841],{"class":250},[76,66303,51507],{"class":93},[76,66305,1794],{"class":250},[76,66307,51562],{"class":89},[76,66309,1363],{"class":93},[76,66311,66312,66314,66316,66318,66320],{"class":78,"line":1725},[76,66313,54855],{"class":250},[76,66315,51507],{"class":93},[76,66317,1794],{"class":250},[76,66319,51562],{"class":89},[76,66321,1363],{"class":93},[76,66323,66324,66326,66328,66330],{"class":78,"line":1746},[76,66325,54954],{"class":250},[76,66327,51507],{"class":93},[76,66329,54959],{"class":250},[76,66331,1363],{"class":93},[76,66333,66334],{"class":78,"line":1751},[76,66335,2259],{"class":93},[76,66337,66338,66340,66342],{"class":78,"line":1765},[76,66339,52487],{"class":93},[76,66341,117],{"class":51370},[76,66343,51377],{"class":93},[76,66345,66346,66348,66350],{"class":78,"line":1770},[76,66347,51855],{"class":93},[76,66349,51404],{"class":51370},[76,66351,51377],{"class":93},[76,66353,66354],{"class":78,"line":1799},[76,66355,2472],{"emptyLinePlaceholder":125},[76,66357,66358,66360,66362],{"class":78,"line":1804},[76,66359,1109],{"class":93},[76,66361,51870],{"class":51370},[76,66363,51377],{"class":93},[76,66365,66366,66368,66370,66372,66374,66377],{"class":78,"line":1821},[76,66367,52214],{"class":93},[76,66369,51681],{"class":51370},[76,66371,53556],{"class":2035},[76,66373,247],{"class":93},[76,66375,66376],{"class":305},"\"father\"",[76,66378,51377],{"class":93},[76,66380,66381,66383,66385,66387,66389,66392,66394,66396],{"class":78,"line":1826},[76,66382,51411],{"class":93},[76,66384,51681],{"class":51370},[76,66386,53556],{"class":2035},[76,66388,247],{"class":93},[76,66390,66391],{"class":305},"\"son\"",[76,66393,55384],{"class":93},[76,66395,51681],{"class":51370},[76,66397,51377],{"class":93},[76,66399,66400,66402,66404],{"class":78,"line":1831},[76,66401,52487],{"class":93},[76,66403,51681],{"class":51370},[76,66405,51377],{"class":93},[76,66407,66408,66410,66412],{"class":78,"line":1836},[76,66409,52214],{"class":93},[76,66411,51883],{"class":51370},[76,66413,51377],{"class":93},[76,66415,66416,66418,66421,66423,66425,66427,66429,66432],{"class":78,"line":1850},[76,66417,11293],{"class":89},[76,66419,66420],{"class":250}," fa",[76,66422,13636],{"class":89},[76,66424,54466],{"class":93},[76,66426,54469],{"class":2035},[76,66428,202],{"class":93},[76,66430,66431],{"class":305},"'.father'",[76,66433,208],{"class":93},[76,66435,66436,66438,66441,66443,66445,66447,66449,66452],{"class":78,"line":1855},[76,66437,11293],{"class":89},[76,66439,66440],{"class":250}," son",[76,66442,13636],{"class":89},[76,66444,54466],{"class":93},[76,66446,54469],{"class":2035},[76,66448,202],{"class":93},[76,66450,66451],{"class":305},"'.son'",[76,66453,208],{"class":93},[76,66455,66456,66458,66460,66462,66464,66466,66468],{"class":78,"line":2649},[76,66457,52477],{"class":93},[76,66459,57883],{"class":2035},[76,66461,202],{"class":93},[76,66463,57888],{"class":305},[76,66465,12507],{"class":93},[76,66467,54519],{"class":89},[76,66469,54522],{"class":93},[76,66471,66472,66474,66476,66479],{"class":78,"line":2663},[76,66473,58995],{"class":2035},[76,66475,202],{"class":93},[76,66477,66478],{"class":305},"'woshiu1'",[76,66480,208],{"class":93},[76,66482,66483,66485,66487],{"class":78,"line":2671},[76,66484,54605],{"class":93},[76,66486,1435],{"class":250},[76,66488,208],{"class":93},[76,66490,66491,66494,66496,66498,66500,66502,66504],{"class":78,"line":2676},[76,66492,66493],{"class":93},"    fa.",[76,66495,57883],{"class":2035},[76,66497,202],{"class":93},[76,66499,57888],{"class":305},[76,66501,12507],{"class":93},[76,66503,54519],{"class":89},[76,66505,54522],{"class":93},[76,66507,66508,66510,66512,66515],{"class":78,"line":2682},[76,66509,58995],{"class":2035},[76,66511,202],{"class":93},[76,66513,66514],{"class":305},"'1'",[76,66516,208],{"class":93},[76,66518,66519,66521,66523],{"class":78,"line":2688},[76,66520,54605],{"class":93},[76,66522,1435],{"class":250},[76,66524,208],{"class":93},[76,66526,66527,66530,66532,66534,66536,66538,66540],{"class":78,"line":2693},[76,66528,66529],{"class":93},"    son.",[76,66531,57883],{"class":2035},[76,66533,202],{"class":93},[76,66535,57888],{"class":305},[76,66537,12507],{"class":93},[76,66539,54519],{"class":89},[76,66541,54522],{"class":93},[76,66543,66544,66546,66548,66551],{"class":78,"line":8020},[76,66545,58995],{"class":2035},[76,66547,202],{"class":93},[76,66549,66550],{"class":305},"'2'",[76,66552,208],{"class":93},[76,66554,66555,66557,66559],{"class":78,"line":8044},[76,66556,54605],{"class":93},[76,66558,1435],{"class":250},[76,66560,208],{"class":93},[76,66562,66563,66565,66567],{"class":78,"line":8049},[76,66564,52487],{"class":93},[76,66566,51883],{"class":51370},[76,66568,51377],{"class":93},[76,66570,66571,66573,66575],{"class":78,"line":8055},[76,66572,51855],{"class":93},[76,66574,51870],{"class":51370},[76,66576,51377],{"class":93},[76,66578,66579],{"class":78,"line":8082},[76,66580,2472],{"emptyLinePlaceholder":125},[76,66582,66583,66585,66587],{"class":78,"line":8087},[76,66584,51855],{"class":93},[76,66586,50705],{"class":51370},[76,66588,51377],{"class":93},[14,66590,66591],{},[56,66592],{"alt":58,"src":66593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66595,66596],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22070,66598,66600],{"id":66599},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66602,66603],{},[56,66604],{"alt":58,"src":66605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66607,66608],{},"反着来",[14,66610,66611],{},"注意是同名事件，比如都是‘click’",[22070,66613,66615],{"id":66614},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66617,66618],{},[56,66619],{"alt":58,"src":66620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22070,66622,66624],{"id":66623},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66626,66627],{},[56,66628],{"alt":58,"src":66629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66631,66632],{},[56,66633],{"alt":58,"src":66634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22070,66636,66638],{"id":66637},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[152,66640,66641],{},[155,66642,66643],{},"事件类型的区别",[14,66645,66646],{},[56,66647],{"alt":58,"src":66648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66650,66651],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[152,66653,66654],{"start":86},[155,66655,66656],{},"注册事件的区别",[14,66658,66659],{},[56,66660],{"alt":58,"src":66661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22070,66663,66665],{"id":66664},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66667,66668],{},[56,66669],{"alt":58,"src":66670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66672,66673],{},[56,66674],{"alt":58,"src":66675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[67,66677,66679],{"className":53137,"code":66678,"language":53139,"meta":58,"style":58},"\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",[73,66680,66681,66689,66706,66729,66737,66742,66747,66752,66756,66764,66772],{"__ignoreMap":58},[76,66682,66683,66685,66687],{"class":78,"line":79},[76,66684,1109],{"class":93},[76,66686,51870],{"class":51370},[76,66688,51377],{"class":93},[76,66690,66691,66693,66696,66699,66701,66704],{"class":78,"line":86},[76,66692,52214],{"class":93},[76,66694,66695],{"class":51370},"form",[76,66697,66698],{"class":2035}," action",[76,66700,247],{"class":93},[76,66702,66703],{"class":305},"\"http:\u002F\u002Fwww.itcast.cn\"",[76,66705,51377],{"class":93},[76,66707,66708,66710,66712,66714,66716,66719,66722,66724,66727],{"class":78,"line":97},[76,66709,51411],{"class":93},[76,66711,53891],{"class":51370},[76,66713,53894],{"class":2035},[76,66715,247],{"class":93},[76,66717,66718],{"class":305},"\"submit\"",[76,66720,66721],{"class":2035}," value",[76,66723,247],{"class":93},[76,66725,66726],{"class":305},"\"免费注册\"",[76,66728,51377],{"class":93},[76,66730,66731,66733,66735],{"class":78,"line":103},[76,66732,51411],{"class":93},[76,66734,51883],{"class":51370},[76,66736,51377],{"class":93},[76,66738,66739],{"class":78,"line":1273},[76,66740,66741],{"class":93},"      const form = document.querySelector('form')\n",[76,66743,66744],{"class":78,"line":1287},[76,66745,66746],{"class":93},"      form.addEventListener('submit', function (e) {\n",[76,66748,66749],{"class":78,"line":1293},[76,66750,66751],{"class":93},"        e.preventDefault()\n",[76,66753,66754],{"class":78,"line":1384},[76,66755,64885],{"class":93},[76,66757,66758,66760,66762],{"class":78,"line":1390},[76,66759,51846],{"class":93},[76,66761,51883],{"class":51370},[76,66763,51377],{"class":93},[76,66765,66766,66768,66770],{"class":78,"line":1402},[76,66767,52487],{"class":93},[76,66769,66695],{"class":51370},[76,66771,51377],{"class":93},[76,66773,66774,66776,66778],{"class":78,"line":1684},[76,66775,51855],{"class":93},[76,66777,51870],{"class":51370},[76,66779,51377],{"class":93},[14,66781,66782],{},"点击不在跳转！！！",[169,66784,66786],{"id":66785},"_332-事件委托","3.3.2 事件委托",[14,66788,66789],{},[56,66790],{"alt":58,"src":66791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[67,66793,66795],{"className":50703,"code":66794,"language":50705,"meta":58,"style":58},"\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",[73,66796,66797,66807,66821,66825,66833,66847,66867,66879,66887,66891,66899,66907,66919,66931,66943,66955,66967,66980,66988,66996,67001,67020,67041,67046,67051,67056,67061,67070,67074,67084,67088,67093,67098,67112,67122,67126,67130,67138,67146,67150],{"__ignoreMap":58},[76,66798,66799,66801,66803,66805],{"class":78,"line":79},[76,66800,51367],{"class":93},[76,66802,51371],{"class":51370},[76,66804,51374],{"class":2035},[76,66806,51377],{"class":93},[76,66808,66809,66811,66813,66815,66817,66819],{"class":78,"line":86},[76,66810,1109],{"class":93},[76,66812,50705],{"class":51370},[76,66814,51386],{"class":2035},[76,66816,247],{"class":93},[76,66818,51391],{"class":305},[76,66820,51377],{"class":93},[76,66822,66823],{"class":78,"line":97},[76,66824,2472],{"emptyLinePlaceholder":125},[76,66826,66827,66829,66831],{"class":78,"line":103},[76,66828,1109],{"class":93},[76,66830,51404],{"class":51370},[76,66832,51377],{"class":93},[76,66834,66835,66837,66839,66841,66843,66845],{"class":78,"line":1273},[76,66836,52214],{"class":93},[76,66838,51414],{"class":51370},[76,66840,51417],{"class":2035},[76,66842,247],{"class":93},[76,66844,51422],{"class":305},[76,66846,51377],{"class":93},[76,66848,66849,66851,66853,66855,66857,66859,66861,66863,66865],{"class":78,"line":1287},[76,66850,52214],{"class":93},[76,66852,51414],{"class":51370},[76,66854,14992],{"class":2035},[76,66856,247],{"class":93},[76,66858,51461],{"class":305},[76,66860,51441],{"class":2035},[76,66862,247],{"class":93},[76,66864,51468],{"class":305},[76,66866,51377],{"class":93},[76,66868,66869,66871,66873,66875,66877],{"class":78,"line":1293},[76,66870,52214],{"class":93},[76,66872,51477],{"class":51370},[76,66874,51480],{"class":93},[76,66876,51477],{"class":51370},[76,66878,51377],{"class":93},[76,66880,66881,66883,66885],{"class":78,"line":1384},[76,66882,51855],{"class":93},[76,66884,51404],{"class":51370},[76,66886,51377],{"class":93},[76,66888,66889],{"class":78,"line":1390},[76,66890,2472],{"emptyLinePlaceholder":125},[76,66892,66893,66895,66897],{"class":78,"line":1402},[76,66894,1109],{"class":93},[76,66896,51870],{"class":51370},[76,66898,51377],{"class":93},[76,66900,66901,66903,66905],{"class":78,"line":1684},[76,66902,52214],{"class":93},[76,66904,1206],{"class":51370},[76,66906,51377],{"class":93},[76,66908,66909,66911,66913,66915,66917],{"class":78,"line":1689},[76,66910,51411],{"class":93},[76,66912,155],{"class":51370},[76,66914,54036],{"class":93},[76,66916,155],{"class":51370},[76,66918,51377],{"class":93},[76,66920,66921,66923,66925,66927,66929],{"class":78,"line":1695},[76,66922,51411],{"class":93},[76,66924,155],{"class":51370},[76,66926,54055],{"class":93},[76,66928,155],{"class":51370},[76,66930,51377],{"class":93},[76,66932,66933,66935,66937,66939,66941],{"class":78,"line":1700},[76,66934,51411],{"class":93},[76,66936,155],{"class":51370},[76,66938,54074],{"class":93},[76,66940,155],{"class":51370},[76,66942,51377],{"class":93},[76,66944,66945,66947,66949,66951,66953],{"class":78,"line":1714},[76,66946,51411],{"class":93},[76,66948,155],{"class":51370},[76,66950,54093],{"class":93},[76,66952,155],{"class":51370},[76,66954,51377],{"class":93},[76,66956,66957,66959,66961,66963,66965],{"class":78,"line":1719},[76,66958,51411],{"class":93},[76,66960,155],{"class":51370},[76,66962,54112],{"class":93},[76,66964,155],{"class":51370},[76,66966,51377],{"class":93},[76,66968,66969,66971,66973,66976,66978],{"class":78,"line":1725},[76,66970,51411],{"class":93},[76,66972,14],{"class":51370},[76,66974,66975],{"class":93},">我不需要变色\u003C\u002F",[76,66977,14],{"class":51370},[76,66979,51377],{"class":93},[76,66981,66982,66984,66986],{"class":78,"line":1746},[76,66983,52487],{"class":93},[76,66985,1206],{"class":51370},[76,66987,51377],{"class":93},[76,66989,66990,66992,66994],{"class":78,"line":1751},[76,66991,52214],{"class":93},[76,66993,51883],{"class":51370},[76,66995,51377],{"class":93},[76,66997,66998],{"class":78,"line":1765},[76,66999,67000],{"class":82},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[76,67002,67003,67005,67007,67009,67011,67013,67015,67018],{"class":78,"line":1770},[76,67004,11293],{"class":89},[76,67006,61362],{"class":250},[76,67008,13636],{"class":89},[76,67010,54466],{"class":93},[76,67012,54469],{"class":2035},[76,67014,202],{"class":93},[76,67016,67017],{"class":305},"'ul'",[76,67019,208],{"class":93},[76,67021,67022,67025,67027,67029,67031,67033,67035,67037,67039],{"class":78,"line":1799},[76,67023,67024],{"class":93},"    ul.",[76,67026,57883],{"class":2035},[76,67028,202],{"class":93},[76,67030,57888],{"class":305},[76,67032,12507],{"class":93},[76,67034,54519],{"class":89},[76,67036,1730],{"class":93},[76,67038,275],{"class":5288},[76,67040,12514],{"class":93},[76,67042,67043],{"class":78,"line":1804},[76,67044,67045],{"class":82},"      \u002F\u002F alert(1)\n",[76,67047,67048],{"class":78,"line":1821},[76,67049,67050],{"class":82},"      \u002F\u002F e.target就是我们点击的对象\n",[76,67052,67053],{"class":78,"line":1826},[76,67054,67055],{"class":82},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[76,67057,67058],{"class":78,"line":1831},[76,67059,67060],{"class":82},"      \u002F\u002F e.target.style.color = 'red'\n",[76,67062,67063,67065,67067],{"class":78,"line":1836},[76,67064,58314],{"class":93},[76,67066,58317],{"class":2035},[76,67068,67069],{"class":93},"(e)\n",[76,67071,67072],{"class":78,"line":1850},[76,67073,2472],{"emptyLinePlaceholder":125},[76,67075,67076,67078,67081],{"class":78,"line":1855},[76,67077,58314],{"class":93},[76,67079,67080],{"class":2035},"dir",[76,67082,67083],{"class":93},"(e.target)\n",[76,67085,67086],{"class":78,"line":2649},[76,67087,2472],{"emptyLinePlaceholder":125},[76,67089,67090],{"class":78,"line":2663},[76,67091,67092],{"class":82},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[76,67094,67095],{"class":78,"line":2671},[76,67096,67097],{"class":82},"      \u002F\u002F 通过tagName来进行判断\n",[76,67099,67100,67102,67105,67107,67110],{"class":78,"line":2676},[76,67101,54550],{"class":89},[76,67103,67104],{"class":93}," (e.target.tagName ",[76,67106,54556],{"class":89},[76,67108,67109],{"class":305}," 'LI'",[76,67111,12514],{"class":93},[76,67113,67114,67117,67119],{"class":78,"line":2682},[76,67115,67116],{"class":93},"        e.target.style.color ",[76,67118,247],{"class":89},[76,67120,67121],{"class":305}," 'red'\n",[76,67123,67124],{"class":78,"line":2688},[76,67125,52468],{"class":93},[76,67127,67128],{"class":78,"line":2693},[76,67129,33531],{"class":93},[76,67131,67132,67134,67136],{"class":78,"line":8020},[76,67133,52487],{"class":93},[76,67135,51883],{"class":51370},[76,67137,51377],{"class":93},[76,67139,67140,67142,67144],{"class":78,"line":8044},[76,67141,51855],{"class":93},[76,67143,51870],{"class":51370},[76,67145,51377],{"class":93},[76,67147,67148],{"class":78,"line":8049},[76,67149,2472],{"emptyLinePlaceholder":125},[76,67151,67152,67154,67156],{"class":78,"line":8055},[76,67153,51855],{"class":93},[76,67155,50705],{"class":51370},[76,67157,51377],{"class":93},[14,67159,67160],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67162,67163],{},"if(e.target.ragName==='P') {}",[14,67165,67166],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67168,67169],{},"通过事件委托的方式实现tab栏切换改造：",[14,67171,67172],{},"一定要记住自定义属性！！！！！！",[14,67174,67175],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67177,67178],{},"id是自定义的属性名",[14,67180,67181],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[67,67183,67185],{"className":50703,"code":67184,"language":50705,"meta":58,"style":58},"\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",[73,67186,67187,67197,67211,67215,67223,67237,67257,67277,67289,67297,67303,67313,67323,67327,67331,67337,67349,67361,67373,67389,67393,67397,67403,67415,67427,67439,67449,67459,67463,67467,67475,67487,67497,67509,67513,67517,67525,67535,67545,67555,67559,67563,67573,67587,67599,67603,67607,67619,67629,67645,67655,67659,67663,67677,67687,67697,67701,67705,67711,67725,67729,67733,67741,67751,67755,67759,67768,67778,67782,67790,67798,67802,67810,67824,67838,67850,67858,67897,67929,67961,67993,68025,68033,68041,68055,68089,68123,68157,68191,68225,68233,68241,68249,68254,68259,68278,68283,68303,68311,68316,68329,68350,68363,68367,68372,68377,68390,68410,68438,68442,68446,68450,68458,68466,68470],{"__ignoreMap":58},[76,67188,67189,67191,67193,67195],{"class":78,"line":79},[76,67190,51367],{"class":93},[76,67192,51371],{"class":51370},[76,67194,51374],{"class":2035},[76,67196,51377],{"class":93},[76,67198,67199,67201,67203,67205,67207,67209],{"class":78,"line":86},[76,67200,1109],{"class":93},[76,67202,50705],{"class":51370},[76,67204,51386],{"class":2035},[76,67206,247],{"class":93},[76,67208,51391],{"class":305},[76,67210,51377],{"class":93},[76,67212,67213],{"class":78,"line":97},[76,67214,2472],{"emptyLinePlaceholder":125},[76,67216,67217,67219,67221],{"class":78,"line":103},[76,67218,1109],{"class":93},[76,67220,51404],{"class":51370},[76,67222,51377],{"class":93},[76,67224,67225,67227,67229,67231,67233,67235],{"class":78,"line":1273},[76,67226,52214],{"class":93},[76,67228,51414],{"class":51370},[76,67230,51417],{"class":2035},[76,67232,247],{"class":93},[76,67234,51422],{"class":305},[76,67236,59197],{"class":93},[76,67238,67239,67241,67243,67245,67247,67249,67251,67253,67255],{"class":78,"line":1287},[76,67240,52214],{"class":93},[76,67242,51414],{"class":51370},[76,67244,51433],{"class":2035},[76,67246,247],{"class":93},[76,67248,51438],{"class":305},[76,67250,51441],{"class":2035},[76,67252,247],{"class":93},[76,67254,51446],{"class":305},[76,67256,59197],{"class":93},[76,67258,67259,67261,67263,67265,67267,67269,67271,67273,67275],{"class":78,"line":1293},[76,67260,52214],{"class":93},[76,67262,51414],{"class":51370},[76,67264,14992],{"class":2035},[76,67266,247],{"class":93},[76,67268,51461],{"class":305},[76,67270,51441],{"class":2035},[76,67272,247],{"class":93},[76,67274,51468],{"class":305},[76,67276,59197],{"class":93},[76,67278,67279,67281,67283,67285,67287],{"class":78,"line":1384},[76,67280,52214],{"class":93},[76,67282,51477],{"class":51370},[76,67284,63695],{"class":93},[76,67286,51477],{"class":51370},[76,67288,51377],{"class":93},[76,67290,67291,67293,67295],{"class":78,"line":1390},[76,67292,52214],{"class":93},[76,67294,117],{"class":51370},[76,67296,51377],{"class":93},[76,67298,67299,67301],{"class":78,"line":1402},[76,67300,6475],{"class":51370},[76,67302,15644],{"class":93},[76,67304,67305,67307,67309,67311],{"class":78,"line":1684},[76,67306,54776],{"class":250},[76,67308,51507],{"class":93},[76,67310,392],{"class":250},[76,67312,1363],{"class":93},[76,67314,67315,67317,67319,67321],{"class":78,"line":1689},[76,67316,54765],{"class":250},[76,67318,51507],{"class":93},[76,67320,392],{"class":250},[76,67322,1363],{"class":93},[76,67324,67325],{"class":78,"line":1695},[76,67326,2259],{"class":93},[76,67328,67329],{"class":78,"line":1700},[76,67330,2472],{"emptyLinePlaceholder":125},[76,67332,67333,67335],{"class":78,"line":1714},[76,67334,63746],{"class":2035},[76,67336,15644],{"class":93},[76,67338,67339,67341,67343,67345,67347],{"class":78,"line":1719},[76,67340,54841],{"class":250},[76,67342,51507],{"class":93},[76,67344,63757],{"class":250},[76,67346,51562],{"class":89},[76,67348,1363],{"class":93},[76,67350,67351,67353,67355,67357,67359],{"class":78,"line":1725},[76,67352,54855],{"class":250},[76,67354,51507],{"class":93},[76,67356,63770],{"class":250},[76,67358,51562],{"class":89},[76,67360,1363],{"class":93},[76,67362,67363,67365,67367,67369,67371],{"class":78,"line":1746},[76,67364,54776],{"class":250},[76,67366,51507],{"class":93},[76,67368,899],{"class":250},[76,67370,51562],{"class":89},[76,67372,1363],{"class":93},[76,67374,67375,67377,67379,67381,67383,67385,67387],{"class":78,"line":1751},[76,67376,62047],{"class":250},[76,67378,51507],{"class":93},[76,67380,418],{"class":250},[76,67382,51562],{"class":89},[76,67384,51591],{"class":250},[76,67386,62314],{"class":250},[76,67388,1363],{"class":93},[76,67390,67391],{"class":78,"line":1765},[76,67392,2259],{"class":93},[76,67394,67395],{"class":78,"line":1770},[76,67396,2472],{"emptyLinePlaceholder":125},[76,67398,67399,67401],{"class":78,"line":1799},[76,67400,63815],{"class":2035},[76,67402,15644],{"class":93},[76,67404,67405,67407,67409,67411,67413],{"class":78,"line":1804},[76,67406,54841],{"class":250},[76,67408,51507],{"class":93},[76,67410,512],{"class":250},[76,67412,106],{"class":89},[76,67414,1363],{"class":93},[76,67416,67417,67419,67421,67423,67425],{"class":78,"line":1821},[76,67418,54855],{"class":250},[76,67420,51507],{"class":93},[76,67422,1106],{"class":250},[76,67424,51562],{"class":89},[76,67426,1363],{"class":93},[76,67428,67429,67431,67433,67435,67437],{"class":78,"line":1826},[76,67430,57429],{"class":250},[76,67432,51507],{"class":93},[76,67434,1106],{"class":250},[76,67436,51562],{"class":89},[76,67438,1363],{"class":93},[76,67440,67441,67443,67445,67447],{"class":78,"line":1831},[76,67442,55079],{"class":250},[76,67444,51507],{"class":93},[76,67446,51547],{"class":250},[76,67448,1363],{"class":93},[76,67450,67451,67453,67455,67457],{"class":78,"line":1836},[76,67452,55090],{"class":250},[76,67454,51507],{"class":93},[76,67456,51738],{"class":250},[76,67458,1363],{"class":93},[76,67460,67461],{"class":78,"line":1850},[76,67462,2259],{"class":93},[76,67464,67465],{"class":78,"line":1855},[76,67466,2472],{"emptyLinePlaceholder":125},[76,67468,67469,67471,67473],{"class":78,"line":2649},[76,67470,63815],{"class":2035},[76,67472,63888],{"class":51370},[76,67474,15644],{"class":93},[76,67476,67477,67479,67481,67483,67485],{"class":78,"line":2663},[76,67478,54992],{"class":250},[76,67480,51507],{"class":93},[76,67482,999],{"class":250},[76,67484,51562],{"class":89},[76,67486,1363],{"class":93},[76,67488,67489,67491,67493,67495],{"class":78,"line":2671},[76,67490,62404],{"class":250},[76,67492,51507],{"class":93},[76,67494,63911],{"class":250},[76,67496,1363],{"class":93},[76,67498,67499,67501,67503,67505,67507],{"class":78,"line":2676},[76,67500,62070],{"class":250},[76,67502,51507],{"class":93},[76,67504,899],{"class":250},[76,67506,51562],{"class":89},[76,67508,1363],{"class":93},[76,67510,67511],{"class":78,"line":2682},[76,67512,2259],{"class":93},[76,67514,67515],{"class":78,"line":2688},[76,67516,2472],{"emptyLinePlaceholder":125},[76,67518,67519,67521,67523],{"class":78,"line":2693},[76,67520,63815],{"class":2035},[76,67522,61362],{"class":51370},[76,67524,15644],{"class":93},[76,67526,67527,67529,67531,67533],{"class":78,"line":8020},[76,67528,54802],{"class":250},[76,67530,51507],{"class":93},[76,67532,54807],{"class":250},[76,67534,1363],{"class":93},[76,67536,67537,67539,67541,67543],{"class":78,"line":8044},[76,67538,55079],{"class":250},[76,67540,51507],{"class":93},[76,67542,51547],{"class":250},[76,67544,1363],{"class":93},[76,67546,67547,67549,67551,67553],{"class":78,"line":8049},[76,67548,55090],{"class":250},[76,67550,51507],{"class":93},[76,67552,51650],{"class":250},[76,67554,1363],{"class":93},[76,67556,67557],{"class":78,"line":8055},[76,67558,2259],{"class":93},[76,67560,67561],{"class":78,"line":8082},[76,67562,2472],{"emptyLinePlaceholder":125},[76,67564,67565,67567,67569,67571],{"class":78,"line":8087},[76,67566,63815],{"class":2035},[76,67568,61362],{"class":51370},[76,67570,55145],{"class":51370},[76,67572,15644],{"class":93},[76,67574,67575,67577,67579,67581,67583,67585],{"class":78,"line":8093},[76,67576,54776],{"class":250},[76,67578,51507],{"class":93},[76,67580,392],{"class":250},[76,67582,9022],{"class":250},[76,67584,51562],{"class":89},[76,67586,1363],{"class":93},[76,67588,67589,67591,67593,67595,67597],{"class":78,"line":8105},[76,67590,54992],{"class":250},[76,67592,51507],{"class":93},[76,67594,748],{"class":250},[76,67596,51562],{"class":89},[76,67598,1363],{"class":93},[76,67600,67601],{"class":78,"line":8117},[76,67602,2259],{"class":93},[76,67604,67605],{"class":78,"line":8129},[76,67606,2472],{"emptyLinePlaceholder":125},[76,67608,67609,67611,67613,67615,67617],{"class":78,"line":9788},[76,67610,63815],{"class":2035},[76,67612,61362],{"class":51370},[76,67614,55145],{"class":51370},[76,67616,1471],{"class":51370},[76,67618,15644],{"class":93},[76,67620,67621,67623,67625,67627],{"class":78,"line":9813},[76,67622,64040],{"class":250},[76,67624,51507],{"class":93},[76,67626,54807],{"class":250},[76,67628,1363],{"class":93},[76,67630,67631,67633,67635,67637,67639,67641,67643],{"class":78,"line":9836},[76,67632,62302],{"class":250},[76,67634,51507],{"class":93},[76,67636,278],{"class":250},[76,67638,51562],{"class":89},[76,67640,51591],{"class":250},[76,67642,64061],{"class":250},[76,67644,1363],{"class":93},[76,67646,67647,67649,67651,67653],{"class":78,"line":9860},[76,67648,57486],{"class":250},[76,67650,51507],{"class":93},[76,67652,62439],{"class":250},[76,67654,1363],{"class":93},[76,67656,67657],{"class":78,"line":9865},[76,67658,2259],{"class":93},[76,67660,67661],{"class":78,"line":9870},[76,67662,2472],{"emptyLinePlaceholder":125},[76,67664,67665,67667,67669,67671,67673,67675],{"class":78,"line":9875},[76,67666,63815],{"class":2035},[76,67668,61362],{"class":51370},[76,67670,55145],{"class":51370},[76,67672,1471],{"class":51370},[76,67674,64094],{"class":2035},[76,67676,15644],{"class":93},[76,67678,67679,67681,67683,67685],{"class":78,"line":9884},[76,67680,61861],{"class":250},[76,67682,51507],{"class":93},[76,67684,64105],{"class":250},[76,67686,1363],{"class":93},[76,67688,67689,67691,67693,67695],{"class":78,"line":9889},[76,67690,57486],{"class":250},[76,67692,51507],{"class":93},[76,67694,64105],{"class":250},[76,67696,1363],{"class":93},[76,67698,67699],{"class":78,"line":9895},[76,67700,2259],{"class":93},[76,67702,67703],{"class":78,"line":9916},[76,67704,2472],{"emptyLinePlaceholder":125},[76,67706,67707,67709],{"class":78,"line":9922},[76,67708,64130],{"class":2035},[76,67710,15644],{"class":93},[76,67712,67713,67715,67717,67719,67721,67723],{"class":78,"line":9936},[76,67714,54765],{"class":250},[76,67716,51507],{"class":93},[76,67718,392],{"class":250},[76,67720,64143],{"class":250},[76,67722,51562],{"class":89},[76,67724,1363],{"class":93},[76,67726,67727],{"class":78,"line":9942},[76,67728,2259],{"class":93},[76,67730,67731],{"class":78,"line":9969},[76,67732,2472],{"emptyLinePlaceholder":125},[76,67734,67735,67737,67739],{"class":78,"line":9978},[76,67736,64130],{"class":2035},[76,67738,62244],{"class":2035},[76,67740,15644],{"class":93},[76,67742,67743,67745,67747,67749],{"class":78,"line":9984},[76,67744,55079],{"class":250},[76,67746,51507],{"class":93},[76,67748,54807],{"class":250},[76,67750,1363],{"class":93},[76,67752,67753],{"class":78,"line":9992},[76,67754,2259],{"class":93},[76,67756,67757],{"class":78,"line":9997},[76,67758,2472],{"emptyLinePlaceholder":125},[76,67760,67761,67763,67766],{"class":78,"line":16676},[76,67762,64130],{"class":2035},[76,67764,67765],{"class":2035}," .active",[76,67767,15644],{"class":93},[76,67769,67770,67772,67774,67776],{"class":78,"line":16682},[76,67771,55079],{"class":250},[76,67773,51507],{"class":93},[76,67775,60939],{"class":250},[76,67777,1363],{"class":93},[76,67779,67780],{"class":78,"line":16705},[76,67781,2259],{"class":93},[76,67783,67784,67786,67788],{"class":78,"line":16711},[76,67785,52487],{"class":93},[76,67787,117],{"class":51370},[76,67789,51377],{"class":93},[76,67791,67792,67794,67796],{"class":78,"line":16734},[76,67793,51855],{"class":93},[76,67795,51404],{"class":51370},[76,67797,51377],{"class":93},[76,67799,67800],{"class":78,"line":16748},[76,67801,2472],{"emptyLinePlaceholder":125},[76,67803,67804,67806,67808],{"class":78,"line":16768},[76,67805,1109],{"class":93},[76,67807,51870],{"class":51370},[76,67809,51377],{"class":93},[76,67811,67812,67814,67816,67818,67820,67822],{"class":78,"line":16774},[76,67813,52214],{"class":93},[76,67815,51681],{"class":51370},[76,67817,53556],{"class":2035},[76,67819,247],{"class":93},[76,67821,64245],{"class":305},[76,67823,51377],{"class":93},[76,67825,67826,67828,67830,67832,67834,67836],{"class":78,"line":16785},[76,67827,51411],{"class":93},[76,67829,51681],{"class":51370},[76,67831,53556],{"class":2035},[76,67833,247],{"class":93},[76,67835,64260],{"class":305},[76,67837,51377],{"class":93},[76,67839,67840,67842,67844,67846,67848],{"class":78,"line":16808},[76,67841,55304],{"class":93},[76,67843,169],{"class":51370},[76,67845,64271],{"class":93},[76,67847,169],{"class":51370},[76,67849,51377],{"class":93},[76,67851,67852,67854,67856],{"class":78,"line":16830},[76,67853,55304],{"class":93},[76,67855,1206],{"class":51370},[76,67857,51377],{"class":93},[76,67859,67860,67862,67864,67866,67868,67870,67872,67874,67876,67878,67880,67882,67884,67887,67889,67891,67893,67895],{"class":78,"line":16835},[76,67861,55372],{"class":93},[76,67863,155],{"class":51370},[76,67865,61122],{"class":93},[76,67867,439],{"class":51370},[76,67869,53556],{"class":2035},[76,67871,247],{"class":93},[76,67873,59776],{"class":305},[76,67875,61127],{"class":2035},[76,67877,247],{"class":93},[76,67879,64306],{"class":305},[76,67881,54021],{"class":2035},[76,67883,247],{"class":93},[76,67885,67886],{"class":305},"\"0\"",[76,67888,64309],{"class":93},[76,67890,439],{"class":51370},[76,67892,55384],{"class":93},[76,67894,155],{"class":51370},[76,67896,51377],{"class":93},[76,67898,67899,67901,67903,67905,67907,67909,67911,67913,67915,67917,67919,67921,67923,67925,67927],{"class":78,"line":16841},[76,67900,55372],{"class":93},[76,67902,155],{"class":51370},[76,67904,61122],{"class":93},[76,67906,439],{"class":51370},[76,67908,61127],{"class":2035},[76,67910,247],{"class":93},[76,67912,64306],{"class":305},[76,67914,54021],{"class":2035},[76,67916,247],{"class":93},[76,67918,3750],{"class":305},[76,67920,64336],{"class":93},[76,67922,439],{"class":51370},[76,67924,55384],{"class":93},[76,67926,155],{"class":51370},[76,67928,51377],{"class":93},[76,67930,67931,67933,67935,67937,67939,67941,67943,67945,67947,67949,67951,67953,67955,67957,67959],{"class":78,"line":16855},[76,67932,55372],{"class":93},[76,67934,155],{"class":51370},[76,67936,61122],{"class":93},[76,67938,439],{"class":51370},[76,67940,61127],{"class":2035},[76,67942,247],{"class":93},[76,67944,64306],{"class":305},[76,67946,54021],{"class":2035},[76,67948,247],{"class":93},[76,67950,3773],{"class":305},[76,67952,64363],{"class":93},[76,67954,439],{"class":51370},[76,67956,55384],{"class":93},[76,67958,155],{"class":51370},[76,67960,51377],{"class":93},[76,67962,67963,67965,67967,67969,67971,67973,67975,67977,67979,67981,67983,67985,67987,67989,67991],{"class":78,"line":16868},[76,67964,55372],{"class":93},[76,67966,155],{"class":51370},[76,67968,61122],{"class":93},[76,67970,439],{"class":51370},[76,67972,61127],{"class":2035},[76,67974,247],{"class":93},[76,67976,64306],{"class":305},[76,67978,54021],{"class":2035},[76,67980,247],{"class":93},[76,67982,3786],{"class":305},[76,67984,64390],{"class":93},[76,67986,439],{"class":51370},[76,67988,55384],{"class":93},[76,67990,155],{"class":51370},[76,67992,51377],{"class":93},[76,67994,67995,67997,67999,68001,68003,68005,68007,68009,68011,68013,68015,68017,68019,68021,68023],{"class":78,"line":16873},[76,67996,55372],{"class":93},[76,67998,155],{"class":51370},[76,68000,61122],{"class":93},[76,68002,439],{"class":51370},[76,68004,61127],{"class":2035},[76,68006,247],{"class":93},[76,68008,64306],{"class":305},[76,68010,54021],{"class":2035},[76,68012,247],{"class":93},[76,68014,3799],{"class":305},[76,68016,64417],{"class":93},[76,68018,439],{"class":51370},[76,68020,55384],{"class":93},[76,68022,155],{"class":51370},[76,68024,51377],{"class":93},[76,68026,68027,68029,68031],{"class":78,"line":16887},[76,68028,55477],{"class":93},[76,68030,1206],{"class":51370},[76,68032,51377],{"class":93},[76,68034,68035,68037,68039],{"class":78,"line":16892},[76,68036,51846],{"class":93},[76,68038,51681],{"class":51370},[76,68040,51377],{"class":93},[76,68042,68043,68045,68047,68049,68051,68053],{"class":78,"line":16898},[76,68044,51411],{"class":93},[76,68046,51681],{"class":51370},[76,68048,53556],{"class":2035},[76,68050,247],{"class":93},[76,68052,64454],{"class":305},[76,68054,51377],{"class":93},[76,68056,68057,68059,68061,68063,68065,68067,68069,68071,68073,68075,68077,68079,68081,68083,68085,68087],{"class":78,"line":16903},[76,68058,55304],{"class":93},[76,68060,51681],{"class":51370},[76,68062,53556],{"class":2035},[76,68064,247],{"class":93},[76,68066,64469],{"class":305},[76,68068,61122],{"class":93},[76,68070,56],{"class":51370},[76,68072,55309],{"class":2035},[76,68074,247],{"class":93},[76,68076,64480],{"class":305},[76,68078,55317],{"class":2035},[76,68080,247],{"class":93},[76,68082,7724],{"class":305},[76,68084,64489],{"class":93},[76,68086,51681],{"class":51370},[76,68088,51377],{"class":93},[76,68090,68091,68093,68095,68097,68099,68101,68103,68105,68107,68109,68111,68113,68115,68117,68119,68121],{"class":78,"line":16917},[76,68092,55304],{"class":93},[76,68094,51681],{"class":51370},[76,68096,53556],{"class":2035},[76,68098,247],{"class":93},[76,68100,62693],{"class":305},[76,68102,61122],{"class":93},[76,68104,56],{"class":51370},[76,68106,55309],{"class":2035},[76,68108,247],{"class":93},[76,68110,64516],{"class":305},[76,68112,55317],{"class":2035},[76,68114,247],{"class":93},[76,68116,7724],{"class":305},[76,68118,64489],{"class":93},[76,68120,51681],{"class":51370},[76,68122,51377],{"class":93},[76,68124,68125,68127,68129,68131,68133,68135,68137,68139,68141,68143,68145,68147,68149,68151,68153,68155],{"class":78,"line":16922},[76,68126,55304],{"class":93},[76,68128,51681],{"class":51370},[76,68130,53556],{"class":2035},[76,68132,247],{"class":93},[76,68134,62693],{"class":305},[76,68136,61122],{"class":93},[76,68138,56],{"class":51370},[76,68140,55309],{"class":2035},[76,68142,247],{"class":93},[76,68144,64551],{"class":305},[76,68146,55317],{"class":2035},[76,68148,247],{"class":93},[76,68150,7724],{"class":305},[76,68152,64489],{"class":93},[76,68154,51681],{"class":51370},[76,68156,51377],{"class":93},[76,68158,68159,68161,68163,68165,68167,68169,68171,68173,68175,68177,68179,68181,68183,68185,68187,68189],{"class":78,"line":16927},[76,68160,55304],{"class":93},[76,68162,51681],{"class":51370},[76,68164,53556],{"class":2035},[76,68166,247],{"class":93},[76,68168,62693],{"class":305},[76,68170,61122],{"class":93},[76,68172,56],{"class":51370},[76,68174,55309],{"class":2035},[76,68176,247],{"class":93},[76,68178,64586],{"class":305},[76,68180,55317],{"class":2035},[76,68182,247],{"class":93},[76,68184,7724],{"class":305},[76,68186,64489],{"class":93},[76,68188,51681],{"class":51370},[76,68190,51377],{"class":93},[76,68192,68193,68195,68197,68199,68201,68203,68205,68207,68209,68211,68213,68215,68217,68219,68221,68223],{"class":78,"line":16941},[76,68194,55304],{"class":93},[76,68196,51681],{"class":51370},[76,68198,53556],{"class":2035},[76,68200,247],{"class":93},[76,68202,62693],{"class":305},[76,68204,61122],{"class":93},[76,68206,56],{"class":51370},[76,68208,55309],{"class":2035},[76,68210,247],{"class":93},[76,68212,64621],{"class":305},[76,68214,55317],{"class":2035},[76,68216,247],{"class":93},[76,68218,7724],{"class":305},[76,68220,64489],{"class":93},[76,68222,51681],{"class":51370},[76,68224,51377],{"class":93},[76,68226,68227,68229,68231],{"class":78,"line":16953},[76,68228,51846],{"class":93},[76,68230,51681],{"class":51370},[76,68232,51377],{"class":93},[76,68234,68235,68237,68239],{"class":78,"line":16958},[76,68236,52487],{"class":93},[76,68238,51681],{"class":51370},[76,68240,51377],{"class":93},[76,68242,68243,68245,68247],{"class":78,"line":16971},[76,68244,52214],{"class":93},[76,68246,51883],{"class":51370},[76,68248,51377],{"class":93},[76,68250,68251],{"class":78,"line":16976},[76,68252,68253],{"class":82},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[76,68255,68256],{"class":78,"line":16981},[76,68257,68258],{"class":82},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[76,68260,68261,68263,68265,68267,68269,68271,68273,68276],{"class":78,"line":16986},[76,68262,11293],{"class":89},[76,68264,61362],{"class":250},[76,68266,13636],{"class":89},[76,68268,54466],{"class":93},[76,68270,54469],{"class":2035},[76,68272,202],{"class":93},[76,68274,68275],{"class":305},"'.tab-nav ul'",[76,68277,208],{"class":93},[76,68279,68280],{"class":78,"line":16999},[76,68281,68282],{"class":82},"    \u002F\u002F 2.添加事件\n",[76,68284,68285,68287,68289,68291,68293,68295,68297,68299,68301],{"class":78,"line":17004},[76,68286,67024],{"class":93},[76,68288,57883],{"class":2035},[76,68290,202],{"class":93},[76,68292,57888],{"class":305},[76,68294,12507],{"class":93},[76,68296,54519],{"class":89},[76,68298,1730],{"class":93},[76,68300,275],{"class":5288},[76,68302,12514],{"class":93},[76,68304,68305,68307,68309],{"class":78,"line":32703},[76,68306,58314],{"class":93},[76,68308,67080],{"class":2035},[76,68310,67083],{"class":93},[76,68312,68313],{"class":78,"line":32709},[76,68314,68315],{"class":82},"      \u002F\u002Fe.targer是我们点击的对象\n",[76,68317,68318,68320,68322,68324,68327],{"class":78,"line":32715},[76,68319,54550],{"class":89},[76,68321,67104],{"class":93},[76,68323,54556],{"class":89},[76,68325,68326],{"class":305}," 'A'",[76,68328,12514],{"class":93},[76,68330,68331,68333,68335,68337,68340,68342,68344,68346,68348],{"class":78,"line":32721},[76,68332,51995],{"class":93},[76,68334,54469],{"class":2035},[76,68336,202],{"class":93},[76,68338,68339],{"class":305},"'.active'",[76,68341,57073],{"class":93},[76,68343,57076],{"class":2035},[76,68345,202],{"class":93},[76,68347,64784],{"class":305},[76,68349,208],{"class":93},[76,68351,68352,68355,68357,68359,68361],{"class":78,"line":32727},[76,68353,68354],{"class":93},"        e.target.classList.",[76,68356,5406],{"class":2035},[76,68358,202],{"class":93},[76,68360,64784],{"class":305},[76,68362,208],{"class":93},[76,68364,68365],{"class":78,"line":32738},[76,68366,2472],{"emptyLinePlaceholder":125},[76,68368,68369],{"class":78,"line":32744},[76,68370,68371],{"class":82},"        \u002F\u002F 下面大盒子模块\n",[76,68373,68374],{"class":78,"line":32764},[76,68375,68376],{"class":82},"        \u002F\u002F console.log(e.target.dataset.id)\n",[76,68378,68379,68381,68383,68385,68387],{"class":78,"line":32770},[76,68380,61340],{"class":89},[76,68382,3104],{"class":250},[76,68384,13636],{"class":89},[76,68386,45636],{"class":89},[76,68388,68389],{"class":93},"e.target.dataset.id\n",[76,68391,68392,68394,68396,68398,68400,68402,68404,68406,68408],{"class":78,"line":32781},[76,68393,51995],{"class":93},[76,68395,54469],{"class":2035},[76,68397,202],{"class":93},[76,68399,64832],{"class":305},[76,68401,57073],{"class":93},[76,68403,57076],{"class":2035},[76,68405,202],{"class":93},[76,68407,64784],{"class":305},[76,68409,208],{"class":93},[76,68411,68412,68414,68416,68418,68420,68422,68424,68426,68428,68430,68432,68434,68436],{"class":78,"line":32787},[76,68413,51995],{"class":93},[76,68415,54469],{"class":2035},[76,68417,202],{"class":93},[76,68419,64858],{"class":305},[76,68421,641],{"class":93},[76,68423,45636],{"class":89},[76,68425,25191],{"class":250},[76,68427,57102],{"class":305},[76,68429,57073],{"class":93},[76,68431,5406],{"class":2035},[76,68433,202],{"class":93},[76,68435,64784],{"class":305},[76,68437,208],{"class":93},[76,68439,68440],{"class":78,"line":32793},[76,68441,2472],{"emptyLinePlaceholder":125},[76,68443,68444],{"class":78,"line":32799},[76,68445,52468],{"class":93},[76,68447,68448],{"class":78,"line":32805},[76,68449,33531],{"class":93},[76,68451,68452,68454,68456],{"class":78,"line":32811},[76,68453,52487],{"class":93},[76,68455,51883],{"class":51370},[76,68457,51377],{"class":93},[76,68459,68460,68462,68464],{"class":78,"line":32817},[76,68461,51855],{"class":93},[76,68463,51870],{"class":51370},[76,68465,51377],{"class":93},[76,68467,68468],{"class":78,"line":32823},[76,68469,2472],{"emptyLinePlaceholder":125},[76,68471,68472,68474,68476],{"class":78,"line":32843},[76,68473,51855],{"class":93},[76,68475,50705],{"class":51370},[76,68477,51377],{"class":93},[169,68479,68481],{"id":68480},"_333-页面加载事件","3.3.3 页面加载事件",[152,68483,68484],{},[155,68485,68486],{},"load",[14,68488,68489],{},[56,68490],{"alt":58,"src":68491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68493,68494],{},"window代表整个窗口，比document还要大",[14,68496,68497],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68499,68500],{},"img.addEventListener('load', function () {",[14,68502,68503],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68505,52534],{},[152,68507,68508],{"start":86},[155,68509,68510],{},"DOMContentLoaded",[14,68512,68513],{},[56,68514],{"alt":58,"src":68515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68517,68518],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[169,68520,68522],{"id":68521},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68524,68525],{},[56,68526],{"alt":58,"src":68527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68529,68530],{},[56,68531],{"alt":58,"src":68532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68534,68535],{},[56,68536],{"alt":58,"src":68537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68539,68540],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68542,68543],{},"获得的是数字型数据，不带单位",[14,68545,68546],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68548,68549],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68551,68552],{},"它是通过document.documentElement来获取",[14,68554,68555],{},[56,68556],{"alt":58,"src":68557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68559,68560],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[169,68562,68564],{"id":68563},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68566,68567],{},[56,68568],{"alt":58,"src":68569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68571,68572],{},[56,68573],{"alt":58,"src":68574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[169,68576,68578],{"id":68577},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68580,68581],{},[56,68582],{"alt":58,"src":68583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68585,68586],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68588,68589],{},[56,68590],{"alt":58,"src":68591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68593,68594],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68596,68597],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68599,68600],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68602,68603],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68605,68606],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68608,68609],{},[56,68610],{"alt":58,"src":68611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68613,68614],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68616,68617],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68619,68620],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68622,68623],{},"e.pageX-box.getBoundingClientRect()",[169,68625,68627],{"id":68626},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68629,68630],{},[56,68631],{"alt":58,"src":68632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68634,68635],{},"这个是相对于视口来说的，它是个方法，不是属性值",[169,68637,68639],{"id":68638},"_338-总结","3.3.8 总结",[14,68641,68642],{},[56,68643],{"alt":58,"src":68644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68646,68647],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68649,68650],{},"修改盒子的宽高只能通过width和height来实现",[169,68652,68654],{"id":68653},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[67,68656,68658],{"className":50703,"code":68657,"language":50705,"meta":58,"style":58},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[73,68659,68660,68665,68670,68675,68680],{"__ignoreMap":58},[76,68661,68662],{"class":78,"line":79},[76,68663,68664],{"class":93},"\u002F* 页面滑动 *\u002F\n",[76,68666,68667],{"class":78,"line":86},[76,68668,68669],{"class":93},"html {\n",[76,68671,68672],{"class":78,"line":97},[76,68673,68674],{"class":93},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[76,68676,68677],{"class":78,"line":103},[76,68678,68679],{"class":93},"  scroll-behavior: smooth;\n",[76,68681,68682],{"class":78,"line":1273},[76,68683,1637],{"class":93},[14,68685,68686],{},"默认是auto",[169,68688,68690],{"id":68689},"_3310-日期对象","3.3.10 日期对象",[22070,68692,68694],{"id":68693},"_33101-实例化","3.3.10.1 实例化",[14,68696,68697],{},[56,68698],{"alt":58,"src":68699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22070,68701,68703],{"id":68702},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68705,68706],{},[56,68707],{"alt":58,"src":68708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68710,68711],{},"月份+1",[14,68713,68714],{},"老外认为第一天为0，星期天",[14,68716,68717],{},"方法使用的时候必须要跟括号",[14,68719,68720],{},"快速获得日期",[14,68722,68723],{},"\u002F\u002F 得到年月日",[14,68725,68726],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68728,68729],{},"\u002F\u002F 得到当地日期",[14,68731,68732],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68734,68735],{},"\u002F\u002F 得到当地时间",[14,68737,68738],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68740,68741],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68743,68744],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51883,68746,68747],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,68749,68750],{},"学会去封装函数！",[22070,68752,68754],{"id":68753},"_33103-时间戳","3.3.10.3 时间戳",[14,68756,68757],{},[56,68758],{"alt":58,"src":68759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68761,68762],{},[56,68763],{"alt":58,"src":68764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68766,68767],{},"三种方法记住一个就可以",[169,68769,68771],{"id":68770},"_3311-节点操作","3.3.11 节点操作",[22070,68773,68775],{"id":68774},"_33111-dom节点","3.3.11.1 DOM节点",[14,68777,68778],{},[56,68779],{"alt":58,"src":68780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68782,68783],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22070,68785,68787],{"id":68786},"_33112-查找节点","3.3.11.2 查找节点",[14,68789,68790],{},"前边的document.querySelector()是获取的元素",[14,68792,68793],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68795,68796],{},[56,68797],{"alt":58,"src":68798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[152,68800,68801],{},[155,68802,68803],{},"父节点",[14,68805,68806],{},[56,68807],{"alt":58,"src":68808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[152,68810,68811],{"start":86},[155,68812,68813],{},"子节点",[14,68815,68816],{},[56,68817],{"alt":58,"src":68818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68820,68821],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68823,68824],{},"children获得的是伪数组，是亲儿子",[152,68826,68827],{"start":97},[155,68828,68829],{},"兄弟节点",[14,68831,68832],{},[56,68833],{"alt":58,"src":68834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22070,68836,68838],{"id":68837},"_33113-增加节点","3.3.11.3 增加节点",[14,68840,68841],{},[56,68842],{"alt":58,"src":68843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68845,68846],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68848,68849],{},[56,68850],{"alt":58,"src":68851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68853,68854],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68856,68857],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68859,68860],{},"例：",[51883,68862,68863],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,68865,68866],{},[56,68867],{"alt":58,"src":68868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68870,68871],{},"false只克隆标签，里边的内容不会克隆过来",[67,68873,68875],{"className":50703,"code":68874,"language":50705,"meta":58,"style":58},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[73,68876,68877],{"__ignoreMap":58},[76,68878,68879],{"class":78,"line":79},[76,68880,68874],{"class":93},[22070,68882,68884],{"id":68883},"_33114-删除节点","3.3.11.4 删除节点",[14,68886,68887],{},[56,68888],{"alt":58,"src":68889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68891,68892],{},"父亲删儿子",[14,68894,68895],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[169,68897,68899],{"id":68898},"_3312-m端事件","3.3.12 M端事件",[14,68901,68902],{},"M端就是移动端",[14,68904,68905],{},[56,68906],{"alt":58,"src":68907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[169,68909,68911],{"id":68910},"_3313-插件","3.3.13 插件",[14,68913,68914],{},"要熟悉官网！！！",[14,68916,68917],{},[439,68918,68919],{"href":68919,"rel":68920},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23937],[14,68922,68923],{},[439,68924,68925],{"href":68925,"rel":68926},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23937],[169,68928,68930],{"id":68929},"_3314-学生信息表","3.3.14 学生信息表",[152,68932,68933,68936,68939,68942,68945,68948,68951,68954],{},[155,68934,68935],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[155,68937,68938],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[155,68940,68941],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[155,68943,68944],{},"用好表单元素自带的属性，value,name等",[155,68946,68947],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[155,68949,68950],{},"不要忘记事件对象",[155,68952,68953],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[155,68955,68956],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68958,68959],{},"结构：",[67,68961,68963],{"className":50703,"code":68962,"language":50705,"meta":58,"style":58},"\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",[73,68964,68965,68975,68989,68993,69001,69015,69035,69056,69069,69093,69101,69105,69113,69126,69147,69175,69203,69208,69230,69250,69269,69277,69305,69327,69347,69367,69387,69407,69427,69435,69455,69463,69467,69480,69488,69496,69504,69517,69530,69543,69556,69569,69582,69595,69603,69611,69619,69624,69629,69634,69639,69644,69649,69654,69659,69664,69669,69674,69679,69684,69692,69700,69708,69712,69732,69751,69771,69791,69811,69831,69835,69840,69860,69865,69875,69880,69885,69905,69927,69932,69942,69946,69950,69955,69960,69989,70003,70018,70022,70026,70030,70035,70046,70059,70064,70069,70074,70079,70084,70088,70093,70098,70107,70112,70117,70129,70134,70141,70145,70150,70160,70165,70175,70180,70208,70229,70239,70259,70277,70294,70311,70328,70345,70349,70359,70364,70369,70374,70385,70389,70393,70397,70402,70407,70428,70440,70445,70450,70455,70469,70474,70481,70485,70489,70497,70501,70509,70513],{"__ignoreMap":58},[76,68966,68967,68969,68971,68973],{"class":78,"line":79},[76,68968,51367],{"class":93},[76,68970,51371],{"class":51370},[76,68972,51374],{"class":2035},[76,68974,51377],{"class":93},[76,68976,68977,68979,68981,68983,68985,68987],{"class":78,"line":86},[76,68978,1109],{"class":93},[76,68980,50705],{"class":51370},[76,68982,51386],{"class":2035},[76,68984,247],{"class":93},[76,68986,51391],{"class":305},[76,68988,51377],{"class":93},[76,68990,68991],{"class":78,"line":97},[76,68992,2472],{"emptyLinePlaceholder":125},[76,68994,68995,68997,68999],{"class":78,"line":103},[76,68996,1109],{"class":93},[76,68998,51404],{"class":51370},[76,69000,51377],{"class":93},[76,69002,69003,69005,69007,69009,69011,69013],{"class":78,"line":1273},[76,69004,52214],{"class":93},[76,69006,51414],{"class":51370},[76,69008,51417],{"class":2035},[76,69010,247],{"class":93},[76,69012,51422],{"class":305},[76,69014,59197],{"class":93},[76,69016,69017,69019,69021,69023,69025,69027,69029,69031,69033],{"class":78,"line":1287},[76,69018,52214],{"class":93},[76,69020,51414],{"class":51370},[76,69022,14992],{"class":2035},[76,69024,247],{"class":93},[76,69026,51461],{"class":305},[76,69028,51441],{"class":2035},[76,69030,247],{"class":93},[76,69032,51468],{"class":305},[76,69034,59197],{"class":93},[76,69036,69037,69039,69041,69043,69045,69047,69049,69051,69054],{"class":78,"line":1293},[76,69038,52214],{"class":93},[76,69040,51414],{"class":51370},[76,69042,51433],{"class":2035},[76,69044,247],{"class":93},[76,69046,51438],{"class":305},[76,69048,51441],{"class":2035},[76,69050,247],{"class":93},[76,69052,69053],{"class":305},"\"ie=edge\"",[76,69055,59197],{"class":93},[76,69057,69058,69060,69062,69065,69067],{"class":78,"line":1384},[76,69059,52214],{"class":93},[76,69061,51477],{"class":51370},[76,69063,69064],{"class":93},">学生信息管理\u003C\u002F",[76,69066,51477],{"class":51370},[76,69068,51377],{"class":93},[76,69070,69071,69073,69076,69079,69081,69084,69086,69088,69091],{"class":78,"line":1390},[76,69072,52214],{"class":93},[76,69074,69075],{"class":51370},"link",[76,69077,69078],{"class":2035}," rel",[76,69080,247],{"class":93},[76,69082,69083],{"class":305},"\"stylesheet\"",[76,69085,61127],{"class":2035},[76,69087,247],{"class":93},[76,69089,69090],{"class":305},"\"css\u002Findex.css\"",[76,69092,59197],{"class":93},[76,69094,69095,69097,69099],{"class":78,"line":1402},[76,69096,51855],{"class":93},[76,69098,51404],{"class":51370},[76,69100,51377],{"class":93},[76,69102,69103],{"class":78,"line":1684},[76,69104,2472],{"emptyLinePlaceholder":125},[76,69106,69107,69109,69111],{"class":78,"line":1689},[76,69108,1109],{"class":93},[76,69110,51870],{"class":51370},[76,69112,51377],{"class":93},[76,69114,69115,69117,69119,69122,69124],{"class":78,"line":1695},[76,69116,52214],{"class":93},[76,69118,10],{"class":51370},[76,69120,69121],{"class":93},">新增学员\u003C\u002F",[76,69123,10],{"class":51370},[76,69125,51377],{"class":93},[76,69127,69128,69130,69132,69134,69136,69138,69141,69143,69145],{"class":78,"line":1700},[76,69129,52214],{"class":93},[76,69131,66695],{"class":51370},[76,69133,53556],{"class":2035},[76,69135,247],{"class":93},[76,69137,62734],{"class":305},[76,69139,69140],{"class":2035}," autocomplete",[76,69142,247],{"class":93},[76,69144,31846],{"class":305},[76,69146,51377],{"class":93},[76,69148,69149,69152,69154,69156,69158,69160,69162,69164,69167,69169,69171,69173],{"class":78,"line":1714},[76,69150,69151],{"class":93},"    姓名：\u003C",[76,69153,53891],{"class":51370},[76,69155,53894],{"class":2035},[76,69157,247],{"class":93},[76,69159,62769],{"class":305},[76,69161,53556],{"class":2035},[76,69163,247],{"class":93},[76,69165,69166],{"class":305},"\"uname\"",[76,69168,14992],{"class":2035},[76,69170,247],{"class":93},[76,69172,69166],{"class":305},[76,69174,59197],{"class":93},[76,69176,69177,69180,69182,69184,69186,69188,69190,69192,69195,69197,69199,69201],{"class":78,"line":1719},[76,69178,69179],{"class":93},"    年龄：\u003C",[76,69181,53891],{"class":51370},[76,69183,53894],{"class":2035},[76,69185,247],{"class":93},[76,69187,62769],{"class":305},[76,69189,53556],{"class":2035},[76,69191,247],{"class":93},[76,69193,69194],{"class":305},"\"age\"",[76,69196,14992],{"class":2035},[76,69198,247],{"class":93},[76,69200,69194],{"class":305},[76,69202,59197],{"class":93},[76,69204,69205],{"class":78,"line":1725},[76,69206,69207],{"class":93},"    性别:\n",[76,69209,69210,69212,69215,69217,69219,69222,69224,69226,69228],{"class":78,"line":1746},[76,69211,51411],{"class":93},[76,69213,69214],{"class":51370},"select",[76,69216,14992],{"class":2035},[76,69218,247],{"class":93},[76,69220,69221],{"class":305},"\"gender\"",[76,69223,53556],{"class":2035},[76,69225,247],{"class":93},[76,69227,69221],{"class":305},[76,69229,51377],{"class":93},[76,69231,69232,69234,69237,69239,69241,69243,69246,69248],{"class":78,"line":1751},[76,69233,55304],{"class":93},[76,69235,69236],{"class":51370},"option",[76,69238,66721],{"class":2035},[76,69240,247],{"class":93},[76,69242,10033],{"class":305},[76,69244,69245],{"class":93},">男\u003C\u002F",[76,69247,69236],{"class":51370},[76,69249,51377],{"class":93},[76,69251,69252,69254,69256,69258,69260,69262,69265,69267],{"class":78,"line":1765},[76,69253,55304],{"class":93},[76,69255,69236],{"class":51370},[76,69257,66721],{"class":2035},[76,69259,247],{"class":93},[76,69261,10102],{"class":305},[76,69263,69264],{"class":93},">女\u003C\u002F",[76,69266,69236],{"class":51370},[76,69268,51377],{"class":93},[76,69270,69271,69273,69275],{"class":78,"line":1770},[76,69272,51846],{"class":93},[76,69274,69214],{"class":51370},[76,69276,51377],{"class":93},[76,69278,69279,69282,69284,69286,69288,69290,69292,69294,69297,69299,69301,69303],{"class":78,"line":1799},[76,69280,69281],{"class":93},"    薪资：\u003C",[76,69283,53891],{"class":51370},[76,69285,53894],{"class":2035},[76,69287,247],{"class":93},[76,69289,62769],{"class":305},[76,69291,53556],{"class":2035},[76,69293,247],{"class":93},[76,69295,69296],{"class":305},"\"salary\"",[76,69298,14992],{"class":2035},[76,69300,247],{"class":93},[76,69302,69296],{"class":305},[76,69304,59197],{"class":93},[76,69306,69307,69310,69312,69314,69316,69319,69321,69323,69325],{"class":78,"line":1804},[76,69308,69309],{"class":93},"    就业城市：\u003C",[76,69311,69214],{"class":51370},[76,69313,14992],{"class":2035},[76,69315,247],{"class":93},[76,69317,69318],{"class":305},"\"city\"",[76,69320,53556],{"class":2035},[76,69322,247],{"class":93},[76,69324,69318],{"class":305},[76,69326,51377],{"class":93},[76,69328,69329,69331,69333,69335,69337,69340,69343,69345],{"class":78,"line":1821},[76,69330,55304],{"class":93},[76,69332,69236],{"class":51370},[76,69334,66721],{"class":2035},[76,69336,247],{"class":93},[76,69338,69339],{"class":305},"\"北京\"",[76,69341,69342],{"class":93},">北京\u003C\u002F",[76,69344,69236],{"class":51370},[76,69346,51377],{"class":93},[76,69348,69349,69351,69353,69355,69357,69360,69363,69365],{"class":78,"line":1826},[76,69350,55304],{"class":93},[76,69352,69236],{"class":51370},[76,69354,66721],{"class":2035},[76,69356,247],{"class":93},[76,69358,69359],{"class":305},"\"上海\"",[76,69361,69362],{"class":93},">上海\u003C\u002F",[76,69364,69236],{"class":51370},[76,69366,51377],{"class":93},[76,69368,69369,69371,69373,69375,69377,69380,69383,69385],{"class":78,"line":1831},[76,69370,55304],{"class":93},[76,69372,69236],{"class":51370},[76,69374,66721],{"class":2035},[76,69376,247],{"class":93},[76,69378,69379],{"class":305},"\"广州\"",[76,69381,69382],{"class":93},">广州\u003C\u002F",[76,69384,69236],{"class":51370},[76,69386,51377],{"class":93},[76,69388,69389,69391,69393,69395,69397,69400,69403,69405],{"class":78,"line":1836},[76,69390,55304],{"class":93},[76,69392,69236],{"class":51370},[76,69394,66721],{"class":2035},[76,69396,247],{"class":93},[76,69398,69399],{"class":305},"\"深圳\"",[76,69401,69402],{"class":93},">深圳\u003C\u002F",[76,69404,69236],{"class":51370},[76,69406,51377],{"class":93},[76,69408,69409,69411,69413,69415,69417,69420,69423,69425],{"class":78,"line":1850},[76,69410,55304],{"class":93},[76,69412,69236],{"class":51370},[76,69414,66721],{"class":2035},[76,69416,247],{"class":93},[76,69418,69419],{"class":305},"\"曹县\"",[76,69421,69422],{"class":93},">曹县\u003C\u002F",[76,69424,69236],{"class":51370},[76,69426,51377],{"class":93},[76,69428,69429,69431,69433],{"class":78,"line":1855},[76,69430,51846],{"class":93},[76,69432,69214],{"class":51370},[76,69434,51377],{"class":93},[76,69436,69437,69439,69441,69443,69445,69448,69451,69453],{"class":78,"line":2649},[76,69438,51411],{"class":93},[76,69440,53957],{"class":51370},[76,69442,53556],{"class":2035},[76,69444,247],{"class":93},[76,69446,69447],{"class":305},"\"add\"",[76,69449,69450],{"class":93},">录入\u003C\u002F",[76,69452,53957],{"class":51370},[76,69454,51377],{"class":93},[76,69456,69457,69459,69461],{"class":78,"line":2663},[76,69458,52487],{"class":93},[76,69460,66695],{"class":51370},[76,69462,51377],{"class":93},[76,69464,69465],{"class":78,"line":2671},[76,69466,2472],{"emptyLinePlaceholder":125},[76,69468,69469,69471,69473,69476,69478],{"class":78,"line":2676},[76,69470,52214],{"class":93},[76,69472,10],{"class":51370},[76,69474,69475],{"class":93},">就业榜\u003C\u002F",[76,69477,10],{"class":51370},[76,69479,51377],{"class":93},[76,69481,69482,69484,69486],{"class":78,"line":2682},[76,69483,52214],{"class":93},[76,69485,338],{"class":51370},[76,69487,51377],{"class":93},[76,69489,69490,69492,69494],{"class":78,"line":2688},[76,69491,51411],{"class":93},[76,69493,341],{"class":51370},[76,69495,51377],{"class":93},[76,69497,69498,69500,69502],{"class":78,"line":2693},[76,69499,55304],{"class":93},[76,69501,344],{"class":51370},[76,69503,51377],{"class":93},[76,69505,69506,69508,69510,69513,69515],{"class":78,"line":8020},[76,69507,55372],{"class":93},[76,69509,347],{"class":51370},[76,69511,69512],{"class":93},">序号\u003C\u002F",[76,69514,347],{"class":51370},[76,69516,51377],{"class":93},[76,69518,69519,69521,69523,69526,69528],{"class":78,"line":8044},[76,69520,55372],{"class":93},[76,69522,347],{"class":51370},[76,69524,69525],{"class":93},">姓名\u003C\u002F",[76,69527,347],{"class":51370},[76,69529,51377],{"class":93},[76,69531,69532,69534,69536,69539,69541],{"class":78,"line":8049},[76,69533,55372],{"class":93},[76,69535,347],{"class":51370},[76,69537,69538],{"class":93},">年龄\u003C\u002F",[76,69540,347],{"class":51370},[76,69542,51377],{"class":93},[76,69544,69545,69547,69549,69552,69554],{"class":78,"line":8055},[76,69546,55372],{"class":93},[76,69548,347],{"class":51370},[76,69550,69551],{"class":93},">性别\u003C\u002F",[76,69553,347],{"class":51370},[76,69555,51377],{"class":93},[76,69557,69558,69560,69562,69565,69567],{"class":78,"line":8082},[76,69559,55372],{"class":93},[76,69561,347],{"class":51370},[76,69563,69564],{"class":93},">薪资\u003C\u002F",[76,69566,347],{"class":51370},[76,69568,51377],{"class":93},[76,69570,69571,69573,69575,69578,69580],{"class":78,"line":8087},[76,69572,55372],{"class":93},[76,69574,347],{"class":51370},[76,69576,69577],{"class":93},">就业城市\u003C\u002F",[76,69579,347],{"class":51370},[76,69581,51377],{"class":93},[76,69583,69584,69586,69588,69591,69593],{"class":78,"line":8093},[76,69585,55372],{"class":93},[76,69587,347],{"class":51370},[76,69589,69590],{"class":93},">操作\u003C\u002F",[76,69592,347],{"class":51370},[76,69594,51377],{"class":93},[76,69596,69597,69599,69601],{"class":78,"line":8105},[76,69598,55477],{"class":93},[76,69600,344],{"class":51370},[76,69602,51377],{"class":93},[76,69604,69605,69607,69609],{"class":78,"line":8117},[76,69606,51846],{"class":93},[76,69608,341],{"class":51370},[76,69610,51377],{"class":93},[76,69612,69613,69615,69617],{"class":78,"line":8129},[76,69614,51411],{"class":93},[76,69616,385],{"class":51370},[76,69618,51377],{"class":93},[76,69620,69621],{"class":78,"line":9788},[76,69622,69623],{"class":82},"      \u003C!-- \n",[76,69625,69626],{"class":78,"line":9813},[76,69627,69628],{"class":82},"        \u003Ctr>\n",[76,69630,69631],{"class":78,"line":9836},[76,69632,69633],{"class":82},"          \u003Ctd>1001\u003C\u002Ftd>\n",[76,69635,69636],{"class":78,"line":9860},[76,69637,69638],{"class":82},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[76,69640,69641],{"class":78,"line":9865},[76,69642,69643],{"class":82},"          \u003Ctd>19\u003C\u002Ftd>\n",[76,69645,69646],{"class":78,"line":9870},[76,69647,69648],{"class":82},"          \u003Ctd>男\u003C\u002Ftd>\n",[76,69650,69651],{"class":78,"line":9875},[76,69652,69653],{"class":82},"          \u003Ctd>15000\u003C\u002Ftd>\n",[76,69655,69656],{"class":78,"line":9884},[76,69657,69658],{"class":82},"          \u003Ctd>上海\u003C\u002Ftd>\n",[76,69660,69661],{"class":78,"line":9889},[76,69662,69663],{"class":82},"          \u003Ctd>\n",[76,69665,69666],{"class":78,"line":9895},[76,69667,69668],{"class":82},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[76,69670,69671],{"class":78,"line":9916},[76,69672,69673],{"class":82},"          \u003C\u002Ftd>\n",[76,69675,69676],{"class":78,"line":9922},[76,69677,69678],{"class":82},"        \u003C\u002Ftr> \n",[76,69680,69681],{"class":78,"line":9936},[76,69682,69683],{"class":82},"        -->\n",[76,69685,69686,69688,69690],{"class":78,"line":9942},[76,69687,51846],{"class":93},[76,69689,385],{"class":51370},[76,69691,51377],{"class":93},[76,69693,69694,69696,69698],{"class":78,"line":9969},[76,69695,52487],{"class":93},[76,69697,338],{"class":51370},[76,69699,51377],{"class":93},[76,69701,69702,69704,69706],{"class":78,"line":9978},[76,69703,52214],{"class":93},[76,69705,51883],{"class":51370},[76,69707,51377],{"class":93},[76,69709,69710],{"class":78,"line":9984},[76,69711,60028],{"class":82},[76,69713,69714,69716,69719,69721,69723,69725,69727,69730],{"class":78,"line":9992},[76,69715,11293],{"class":89},[76,69717,69718],{"class":250}," uname",[76,69720,13636],{"class":89},[76,69722,54466],{"class":93},[76,69724,54469],{"class":2035},[76,69726,202],{"class":93},[76,69728,69729],{"class":305},"'.uname'",[76,69731,208],{"class":93},[76,69733,69734,69736,69738,69740,69742,69744,69746,69749],{"class":78,"line":9997},[76,69735,11293],{"class":89},[76,69737,15761],{"class":250},[76,69739,13636],{"class":89},[76,69741,54466],{"class":93},[76,69743,54469],{"class":2035},[76,69745,202],{"class":93},[76,69747,69748],{"class":305},"'.age'",[76,69750,208],{"class":93},[76,69752,69753,69755,69758,69760,69762,69764,69766,69769],{"class":78,"line":16676},[76,69754,11293],{"class":89},[76,69756,69757],{"class":250}," gender",[76,69759,13636],{"class":89},[76,69761,54466],{"class":93},[76,69763,54469],{"class":2035},[76,69765,202],{"class":93},[76,69767,69768],{"class":305},"'.gender'",[76,69770,208],{"class":93},[76,69772,69773,69775,69778,69780,69782,69784,69786,69789],{"class":78,"line":16682},[76,69774,11293],{"class":89},[76,69776,69777],{"class":250}," salary",[76,69779,13636],{"class":89},[76,69781,54466],{"class":93},[76,69783,54469],{"class":2035},[76,69785,202],{"class":93},[76,69787,69788],{"class":305},"'.salary'",[76,69790,208],{"class":93},[76,69792,69793,69795,69798,69800,69802,69804,69806,69809],{"class":78,"line":16705},[76,69794,11293],{"class":89},[76,69796,69797],{"class":250}," city",[76,69799,13636],{"class":89},[76,69801,54466],{"class":93},[76,69803,54469],{"class":2035},[76,69805,202],{"class":93},[76,69807,69808],{"class":305},"'.city'",[76,69810,208],{"class":93},[76,69812,69813,69815,69818,69820,69822,69824,69826,69829],{"class":78,"line":16711},[76,69814,11293],{"class":89},[76,69816,69817],{"class":250}," tbody",[76,69819,13636],{"class":89},[76,69821,54466],{"class":93},[76,69823,54469],{"class":2035},[76,69825,202],{"class":93},[76,69827,69828],{"class":305},"'tbody'",[76,69830,208],{"class":93},[76,69832,69833],{"class":78,"line":16734},[76,69834,2472],{"emptyLinePlaceholder":125},[76,69836,69837],{"class":78,"line":16748},[76,69838,69839],{"class":82},"    \u002F\u002F 获取所有带有name属性的元素\n",[76,69841,69842,69844,69847,69849,69851,69853,69855,69858],{"class":78,"line":16768},[76,69843,11293],{"class":89},[76,69845,69846],{"class":250}," items",[76,69848,13636],{"class":89},[76,69850,54466],{"class":93},[76,69852,55751],{"class":2035},[76,69854,202],{"class":93},[76,69856,69857],{"class":305},"'[name]'",[76,69859,208],{"class":93},[76,69861,69862],{"class":78,"line":16774},[76,69863,69864],{"class":82},"    \u002F\u002F 声明一个空的数组\n",[76,69866,69867,69869,69871,69873],{"class":78,"line":16785},[76,69868,11293],{"class":89},[76,69870,57765],{"class":250},[76,69872,13636],{"class":89},[76,69874,51908],{"class":93},[76,69876,69877],{"class":78,"line":16808},[76,69878,69879],{"class":82},"    \u002F\u002F 1.录入模块\n",[76,69881,69882],{"class":78,"line":16830},[76,69883,69884],{"class":82},"    \u002F\u002F 1.1这是一个表单提交事件\n",[76,69886,69887,69889,69892,69894,69896,69898,69900,69903],{"class":78,"line":16835},[76,69888,11293],{"class":89},[76,69890,69891],{"class":250}," info",[76,69893,13636],{"class":89},[76,69895,54466],{"class":93},[76,69897,54469],{"class":2035},[76,69899,202],{"class":93},[76,69901,69902],{"class":305},"'.info'",[76,69904,208],{"class":93},[76,69906,69907,69910,69912,69914,69917,69919,69921,69923,69925],{"class":78,"line":16841},[76,69908,69909],{"class":93},"    info.",[76,69911,57883],{"class":2035},[76,69913,202],{"class":93},[76,69915,69916],{"class":305},"'submit'",[76,69918,12507],{"class":93},[76,69920,54519],{"class":89},[76,69922,1730],{"class":93},[76,69924,275],{"class":5288},[76,69926,12514],{"class":93},[76,69928,69929],{"class":78,"line":16855},[76,69930,69931],{"class":82},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[76,69933,69934,69937,69940],{"class":78,"line":16868},[76,69935,69936],{"class":93},"      e.",[76,69938,69939],{"class":2035},"preventDefault",[76,69941,2048],{"class":93},[76,69943,69944],{"class":78,"line":16873},[76,69945,60082],{"class":82},[76,69947,69948],{"class":78,"line":16887},[76,69949,2472],{"emptyLinePlaceholder":125},[76,69951,69952],{"class":78,"line":16892},[76,69953,69954],{"class":82},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[76,69956,69957],{"class":78,"line":16898},[76,69958,69959],{"class":82},"      \u002F\u002F 先遍历循环\n",[76,69961,69962,69964,69966,69968,69970,69972,69974,69976,69978,69981,69983,69985,69987],{"class":78,"line":16903},[76,69963,52354],{"class":89},[76,69965,1730],{"class":93},[76,69967,51917],{"class":89},[76,69969,9510],{"class":93},[76,69971,247],{"class":89},[76,69973,4165],{"class":250},[76,69975,9517],{"class":93},[76,69977,1109],{"class":89},[76,69979,69980],{"class":93}," items.",[76,69982,52038],{"class":250},[76,69984,3286],{"class":93},[76,69986,2364],{"class":89},[76,69988,12514],{"class":93},[76,69990,69991,69993,69996,69998,70001],{"class":78,"line":16917},[76,69992,2569],{"class":89},[76,69994,69995],{"class":93}," (items[i].value ",[76,69997,54556],{"class":89},[76,69999,70000],{"class":305}," ''",[76,70002,12514],{"class":93},[76,70004,70005,70008,70011,70013,70016],{"class":78,"line":16922},[76,70006,70007],{"class":89},"          return",[76,70009,70010],{"class":2035}," alert",[76,70012,202],{"class":93},[76,70014,70015],{"class":305},"'输入内容不能为空'",[76,70017,208],{"class":93},[76,70019,70020],{"class":78,"line":16927},[76,70021,2601],{"class":93},[76,70023,70024],{"class":78,"line":16941},[76,70025,52468],{"class":93},[76,70027,70028],{"class":78,"line":16953},[76,70029,2472],{"emptyLinePlaceholder":125},[76,70031,70032],{"class":78,"line":16958},[76,70033,70034],{"class":82},"      \u002F\u002F 创建新的对象\n",[76,70036,70037,70039,70042,70044],{"class":78,"line":16971},[76,70038,58298],{"class":89},[76,70040,70041],{"class":250}," obj",[76,70043,13636],{"class":89},[76,70045,15644],{"class":93},[76,70047,70048,70051,70053,70055,70057],{"class":78,"line":16976},[76,70049,70050],{"class":93},"        stuID: arr.",[76,70052,52038],{"class":250},[76,70054,45636],{"class":89},[76,70056,25191],{"class":250},[76,70058,31536],{"class":93},[76,70060,70061],{"class":78,"line":16981},[76,70062,70063],{"class":93},"        uname: uname.value,\n",[76,70065,70066],{"class":78,"line":16986},[76,70067,70068],{"class":93},"        age: age.value,\n",[76,70070,70071],{"class":78,"line":16999},[76,70072,70073],{"class":93},"        gender: gender.value,\n",[76,70075,70076],{"class":78,"line":17004},[76,70077,70078],{"class":93},"        salary: salary.value,\n",[76,70080,70081],{"class":78,"line":32703},[76,70082,70083],{"class":93},"        city: city.value\n",[76,70085,70086],{"class":78,"line":32709},[76,70087,52468],{"class":93},[76,70089,70090],{"class":78,"line":32715},[76,70091,70092],{"class":82},"      \u002F\u002F console.log(obj);\n",[76,70094,70095],{"class":78,"line":32721},[76,70096,70097],{"class":82},"      \u002F\u002F 追加到数组里面\n",[76,70099,70100,70102,70104],{"class":78,"line":32727},[76,70101,58077],{"class":93},[76,70103,51954],{"class":2035},[76,70105,70106],{"class":93},"(obj)\n",[76,70108,70109],{"class":78,"line":32738},[76,70110,70111],{"class":82},"      \u002F\u002F console.log(arr);\n",[76,70113,70114],{"class":78,"line":32744},[76,70115,70116],{"class":82},"      \u002F\u002F 清空表单  reset重置表单\n",[76,70118,70119,70122,70124,70127],{"class":78,"line":32764},[76,70120,70121],{"class":250},"      this",[76,70123,757],{"class":93},[76,70125,70126],{"class":2035},"reset",[76,70128,2048],{"class":93},[76,70130,70131],{"class":78,"line":32770},[76,70132,70133],{"class":82},"      \u002F\u002F 调用渲染函数\n",[76,70135,70136,70139],{"class":78,"line":32781},[76,70137,70138],{"class":2035},"      render",[76,70140,2048],{"class":93},[76,70142,70143],{"class":78,"line":32787},[76,70144,33531],{"class":93},[76,70146,70147],{"class":78,"line":32793},[76,70148,70149],{"class":82},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[76,70151,70152,70155,70158],{"class":78,"line":32799},[76,70153,70154],{"class":89},"    function",[76,70156,70157],{"class":2035}," render",[76,70159,10925],{"class":93},[76,70161,70162],{"class":78,"line":32805},[76,70163,70164],{"class":82},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[76,70166,70167,70170,70172],{"class":78,"line":32811},[76,70168,70169],{"class":93},"      tbody.innerHTML ",[76,70171,247],{"class":89},[76,70173,70174],{"class":305}," ''\n",[76,70176,70177],{"class":78,"line":32817},[76,70178,70179],{"class":82},"      \u002F\u002F 遍历数组\n",[76,70181,70182,70184,70186,70188,70190,70192,70194,70196,70198,70200,70202,70204,70206],{"class":78,"line":32823},[76,70183,52354],{"class":89},[76,70185,1730],{"class":93},[76,70187,51917],{"class":89},[76,70189,9510],{"class":93},[76,70191,247],{"class":89},[76,70193,4165],{"class":250},[76,70195,9517],{"class":93},[76,70197,1109],{"class":89},[76,70199,52035],{"class":93},[76,70201,52038],{"class":250},[76,70203,3286],{"class":93},[76,70205,2364],{"class":89},[76,70207,12514],{"class":93},[76,70209,70210,70212,70215,70217,70219,70222,70224,70227],{"class":78,"line":32843},[76,70211,61340],{"class":89},[76,70213,70214],{"class":250}," tr",[76,70216,13636],{"class":89},[76,70218,54466],{"class":93},[76,70220,70221],{"class":2035},"createElement",[76,70223,202],{"class":93},[76,70225,70226],{"class":305},"'tr'",[76,70228,208],{"class":93},[76,70230,70231,70234,70236],{"class":78,"line":32849},[76,70232,70233],{"class":93},"        tr.innerHTML ",[76,70235,247],{"class":89},[76,70237,70238],{"class":305}," `\n",[76,70240,70241,70244,70246,70248,70250,70253,70256],{"class":78,"line":32865},[76,70242,70243],{"class":305},"        \u003Ctd>${",[76,70245,3952],{"class":93},[76,70247,1089],{"class":305},[76,70249,641],{"class":93},[76,70251,70252],{"class":305},"].",[76,70254,70255],{"class":93},"stuID",[76,70257,70258],{"class":305},"}\u003C\u002Ftd>\n",[76,70260,70261,70264,70266,70268,70270,70272,70275],{"class":78,"line":32871},[76,70262,70263],{"class":305},"          \u003Ctd>${",[76,70265,3952],{"class":93},[76,70267,1089],{"class":305},[76,70269,641],{"class":93},[76,70271,70252],{"class":305},[76,70273,70274],{"class":93},"uname",[76,70276,70258],{"class":305},[76,70278,70279,70281,70283,70285,70287,70289,70292],{"class":78,"line":32885},[76,70280,70263],{"class":305},[76,70282,3952],{"class":93},[76,70284,1089],{"class":305},[76,70286,641],{"class":93},[76,70288,70252],{"class":305},[76,70290,70291],{"class":93},"age",[76,70293,70258],{"class":305},[76,70295,70296,70298,70300,70302,70304,70306,70309],{"class":78,"line":32891},[76,70297,70263],{"class":305},[76,70299,3952],{"class":93},[76,70301,1089],{"class":305},[76,70303,641],{"class":93},[76,70305,70252],{"class":305},[76,70307,70308],{"class":93},"gender",[76,70310,70258],{"class":305},[76,70312,70313,70315,70317,70319,70321,70323,70326],{"class":78,"line":32906},[76,70314,70263],{"class":305},[76,70316,3952],{"class":93},[76,70318,1089],{"class":305},[76,70320,641],{"class":93},[76,70322,70252],{"class":305},[76,70324,70325],{"class":93},"salary",[76,70327,70258],{"class":305},[76,70329,70330,70332,70334,70336,70338,70340,70343],{"class":78,"line":32912},[76,70331,70263],{"class":305},[76,70333,3952],{"class":93},[76,70335,1089],{"class":305},[76,70337,641],{"class":93},[76,70339,70252],{"class":305},[76,70341,70342],{"class":93},"city",[76,70344,70258],{"class":305},[76,70346,70347],{"class":78,"line":32921},[76,70348,69663],{"class":305},[76,70350,70351,70354,70356],{"class":78,"line":32927},[76,70352,70353],{"class":305},"            \u003Ca href=\"javascript:\" data-id=${",[76,70355,641],{"class":93},[76,70357,70358],{"class":305},"}>删除\u003C\u002Fa>\n",[76,70360,70361],{"class":78,"line":32936},[76,70362,70363],{"class":305},"          \u003C\u002Ftd> \n",[76,70365,70366],{"class":78,"line":32942},[76,70367,70368],{"class":305},"          `\n",[76,70370,70371],{"class":78,"line":32948},[76,70372,70373],{"class":82},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[76,70375,70376,70379,70382],{"class":78,"line":32957},[76,70377,70378],{"class":93},"        tbody.",[76,70380,70381],{"class":2035},"appendChild",[76,70383,70384],{"class":93},"(tr)\n",[76,70386,70387],{"class":78,"line":32963},[76,70388,52468],{"class":93},[76,70390,70391],{"class":78,"line":32974},[76,70392,2259],{"class":93},[76,70394,70395],{"class":78,"line":32980},[76,70396,2472],{"emptyLinePlaceholder":125},[76,70398,70399],{"class":78,"line":32999},[76,70400,70401],{"class":82},"    \u002F\u002F 3.删除委托\n",[76,70403,70404],{"class":78,"line":33005},[76,70405,70406],{"class":82},"    \u002F\u002F 3.1 事件委托 tbody\n",[76,70408,70409,70412,70414,70416,70418,70420,70422,70424,70426],{"class":78,"line":33016},[76,70410,70411],{"class":93},"    tbody.",[76,70413,57883],{"class":2035},[76,70415,202],{"class":93},[76,70417,57888],{"class":305},[76,70419,12507],{"class":93},[76,70421,54519],{"class":89},[76,70423,1730],{"class":93},[76,70425,275],{"class":5288},[76,70427,12514],{"class":93},[76,70429,70430,70432,70434,70436,70438],{"class":78,"line":33022},[76,70431,54550],{"class":89},[76,70433,67104],{"class":93},[76,70435,54556],{"class":89},[76,70437,68326],{"class":305},[76,70439,12514],{"class":93},[76,70441,70442],{"class":78,"line":33042},[76,70443,70444],{"class":82},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[76,70446,70447],{"class":78,"line":33058},[76,70448,70449],{"class":82},"        \u002F\u002F console.log(e.target.dataset.id);\n",[76,70451,70452],{"class":78,"line":33064},[76,70453,70454],{"class":82},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[76,70456,70457,70460,70462,70465,70467],{"class":78,"line":33078},[76,70458,70459],{"class":93},"        arr.",[76,70461,58080],{"class":2035},[76,70463,70464],{"class":93},"(e.target.dataset.id, ",[76,70466,418],{"class":250},[76,70468,208],{"class":93},[76,70470,70471],{"class":78,"line":33084},[76,70472,70473],{"class":82},"        \u002F\u002F 重新渲染一次\n",[76,70475,70476,70479],{"class":78,"line":33090},[76,70477,70478],{"class":2035},"        render",[76,70480,2048],{"class":93},[76,70482,70483],{"class":78,"line":33101},[76,70484,52468],{"class":93},[76,70486,70487],{"class":78,"line":33107},[76,70488,33531],{"class":93},[76,70490,70491,70493,70495],{"class":78,"line":33113},[76,70492,52487],{"class":93},[76,70494,51883],{"class":51370},[76,70496,51377],{"class":93},[76,70498,70499],{"class":78,"line":33123},[76,70500,2472],{"emptyLinePlaceholder":125},[76,70502,70503,70505,70507],{"class":78,"line":33129},[76,70504,51855],{"class":93},[76,70506,51870],{"class":51370},[76,70508,51377],{"class":93},[76,70510,70511],{"class":78,"line":33140},[76,70512,2472],{"emptyLinePlaceholder":125},[76,70514,70515,70517,70519],{"class":78,"line":33146},[76,70516,51855],{"class":93},[76,70518,50705],{"class":51370},[76,70520,51377],{"class":93},[14,70522,70523],{},"样式：",[67,70525,70529],{"className":70526,"code":70527,"language":70528,"meta":58,"style":58},"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",[73,70530,70531,70536,70546,70555,70559,70563,70568,70578,70583,70587,70592,70602,70607,70616,70620,70624,70629,70634,70644,70654,70659,70663,70668,70677,70687,70692,70702,70712,70716,70721,70729,70733,70738,70743,70748,70756,70765,70769,70774,70783,70787,70792,70801,70805,70810,70819,70828,70836,70840,70845,70854,70864,70873,70883,70889,70898,70908,70918,70922,70927,70936,70944,70954,70962,70971,70980,70990,70998,71002,71007,71016],{"__ignoreMap":58},[76,70532,70533],{"class":78,"line":79},[76,70534,70535],{"class":93},"* {\n",[76,70537,70538,70541,70543],{"class":78,"line":86},[76,70539,70540],{"class":51370},"  margin",[76,70542,51507],{"class":93},[76,70544,70545],{"class":305},"0;\n",[76,70547,70548,70551,70553],{"class":78,"line":97},[76,70549,70550],{"class":305},"  padding",[76,70552,51507],{"class":93},[76,70554,70545],{"class":305},[76,70556,70557],{"class":78,"line":103},[76,70558,1637],{"class":93},[76,70560,70561],{"class":78,"line":1273},[76,70562,2472],{"emptyLinePlaceholder":125},[76,70564,70565],{"class":78,"line":1287},[76,70566,70567],{"class":305},"a {\n",[76,70569,70570,70573,70575],{"class":78,"line":1293},[76,70571,70572],{"class":51370},"  text-decoration",[76,70574,51507],{"class":93},[76,70576,70577],{"class":305},"none;\n",[76,70579,70580],{"class":78,"line":1384},[76,70581,70582],{"class":305},"  color:#721c24;\n",[76,70584,70585],{"class":78,"line":1390},[76,70586,1637],{"class":93},[76,70588,70589],{"class":78,"line":1402},[76,70590,70591],{"class":305},"h1 {\n",[76,70593,70594,70597,70599],{"class":78,"line":1684},[76,70595,70596],{"class":51370},"  text-align",[76,70598,51507],{"class":93},[76,70600,70601],{"class":305},"center;\n",[76,70603,70604],{"class":78,"line":1689},[76,70605,70606],{"class":305},"  color:#333;\n",[76,70608,70609,70611,70613],{"class":78,"line":1695},[76,70610,70540],{"class":51370},[76,70612,51507],{"class":93},[76,70614,70615],{"class":305},"20px 0;\n",[76,70617,70618],{"class":78,"line":1700},[76,70619,2746],{"class":93},[76,70621,70622],{"class":78,"line":1714},[76,70623,1637],{"class":93},[76,70625,70626],{"class":78,"line":1719},[76,70627,70628],{"class":305},"table {\n",[76,70630,70631],{"class":78,"line":1725},[76,70632,70633],{"class":305},"  margin:0 auto;\n",[76,70635,70636,70639,70641],{"class":78,"line":1746},[76,70637,70638],{"class":51370},"  width",[76,70640,51507],{"class":93},[76,70642,70643],{"class":305},"800px;\n",[76,70645,70646,70649,70651],{"class":78,"line":1751},[76,70647,70648],{"class":51370},"  border-collapse",[76,70650,51507],{"class":93},[76,70652,70653],{"class":305},"collapse;\n",[76,70655,70656],{"class":78,"line":1765},[76,70657,70658],{"class":305},"  color:#004085;\n",[76,70660,70661],{"class":78,"line":1770},[76,70662,1637],{"class":93},[76,70664,70665],{"class":78,"line":1799},[76,70666,70667],{"class":305},"th {\n",[76,70669,70670,70672,70674],{"class":78,"line":1804},[76,70671,70550],{"class":51370},[76,70673,51507],{"class":93},[76,70675,70676],{"class":305},"10px;\n",[76,70678,70679,70682,70684],{"class":78,"line":1821},[76,70680,70681],{"class":51370},"  background",[76,70683,51507],{"class":93},[76,70685,70686],{"class":82},"#cfe5ff;\n",[76,70688,70689],{"class":78,"line":1826},[76,70690,70691],{"class":93},"  \n",[76,70693,70694,70697,70699],{"class":78,"line":1831},[76,70695,70696],{"class":51370},"  font-size",[76,70698,51507],{"class":93},[76,70700,70701],{"class":305},"20px;\n",[76,70703,70704,70707,70709],{"class":78,"line":1836},[76,70705,70706],{"class":51370},"  font-weight",[76,70708,51507],{"class":93},[76,70710,70711],{"class":305},"400;\n",[76,70713,70714],{"class":78,"line":1850},[76,70715,1637],{"class":93},[76,70717,70718],{"class":78,"line":1855},[76,70719,70720],{"class":305},"td,th {\n",[76,70722,70723,70726],{"class":78,"line":2649},[76,70724,70725],{"class":305},"  border:1px solid",[76,70727,70728],{"class":82}," #b8daff;\n",[76,70730,70731],{"class":78,"line":2663},[76,70732,1637],{"class":93},[76,70734,70735],{"class":78,"line":2671},[76,70736,70737],{"class":305},"td {\n",[76,70739,70740],{"class":78,"line":2676},[76,70741,70742],{"class":305},"  padding:10px;\n",[76,70744,70745],{"class":78,"line":2682},[76,70746,70747],{"class":305},"  color:#666;\n",[76,70749,70750,70752,70754],{"class":78,"line":2688},[76,70751,70596],{"class":51370},[76,70753,51507],{"class":93},[76,70755,70601],{"class":305},[76,70757,70758,70760,70762],{"class":78,"line":2693},[76,70759,70696],{"class":51370},[76,70761,51507],{"class":93},[76,70763,70764],{"class":305},"16px;\n",[76,70766,70767],{"class":78,"line":8020},[76,70768,1637],{"class":93},[76,70770,70771],{"class":78,"line":8044},[76,70772,70773],{"class":305},"tbody tr {\n",[76,70775,70776,70778,70780],{"class":78,"line":8049},[76,70777,70681],{"class":51370},[76,70779,51507],{"class":93},[76,70781,70782],{"class":82},"#fff;\n",[76,70784,70785],{"class":78,"line":8055},[76,70786,1637],{"class":93},[76,70788,70789],{"class":78,"line":8082},[76,70790,70791],{"class":305},"tbody tr:hover {\n",[76,70793,70794,70796,70798],{"class":78,"line":8087},[76,70795,70681],{"class":51370},[76,70797,51507],{"class":93},[76,70799,70800],{"class":82},"#e1ecf8;\n",[76,70802,70803],{"class":78,"line":8093},[76,70804,1637],{"class":93},[76,70806,70807],{"class":78,"line":8105},[76,70808,70809],{"class":305},".info {\n",[76,70811,70812,70814,70816],{"class":78,"line":8117},[76,70813,70638],{"class":51370},[76,70815,51507],{"class":93},[76,70817,70818],{"class":305},"900px;\n",[76,70820,70821,70823,70825],{"class":78,"line":8129},[76,70822,70540],{"class":51370},[76,70824,51507],{"class":93},[76,70826,70827],{"class":305},"50px auto;\n",[76,70829,70830,70832,70834],{"class":78,"line":9788},[76,70831,70596],{"class":51370},[76,70833,51507],{"class":93},[76,70835,70601],{"class":305},[76,70837,70838],{"class":78,"line":9813},[76,70839,1637],{"class":93},[76,70841,70842],{"class":78,"line":9836},[76,70843,70844],{"class":305},".info  input, .info select {\n",[76,70846,70847,70849,70851],{"class":78,"line":9860},[76,70848,70638],{"class":51370},[76,70850,51507],{"class":93},[76,70852,70853],{"class":305},"80px;\n",[76,70855,70856,70859,70861],{"class":78,"line":9865},[76,70857,70858],{"class":51370},"  height",[76,70860,51507],{"class":93},[76,70862,70863],{"class":305},"27px;\n",[76,70865,70866,70869,70871],{"class":78,"line":9870},[76,70867,70868],{"class":51370},"  outline",[76,70870,51507],{"class":93},[76,70872,70577],{"class":305},[76,70874,70875,70878,70880],{"class":78,"line":9875},[76,70876,70877],{"class":51370},"  border-radius",[76,70879,51507],{"class":93},[76,70881,70882],{"class":305},"5px;\n",[76,70884,70885,70887],{"class":78,"line":9884},[76,70886,70725],{"class":305},[76,70888,70728],{"class":82},[76,70890,70891,70894,70896],{"class":78,"line":9889},[76,70892,70893],{"class":51370},"  padding-left",[76,70895,51507],{"class":93},[76,70897,70882],{"class":305},[76,70899,70900,70903,70905],{"class":78,"line":9895},[76,70901,70902],{"class":51370},"  box-sizing",[76,70904,51507],{"class":93},[76,70906,70907],{"class":305},"border-box;\n",[76,70909,70910,70913,70915],{"class":78,"line":9916},[76,70911,70912],{"class":51370},"  margin-right",[76,70914,51507],{"class":93},[76,70916,70917],{"class":305},"15px;\n",[76,70919,70920],{"class":78,"line":9922},[76,70921,1637],{"class":93},[76,70923,70924],{"class":78,"line":9936},[76,70925,70926],{"class":305},".info button {\n",[76,70928,70929,70931,70933],{"class":78,"line":9942},[76,70930,70638],{"class":51370},[76,70932,51507],{"class":93},[76,70934,70935],{"class":305},"60px;\n",[76,70937,70938,70940,70942],{"class":78,"line":9969},[76,70939,70858],{"class":51370},[76,70941,51507],{"class":93},[76,70943,70863],{"class":305},[76,70945,70946,70949,70951],{"class":78,"line":9978},[76,70947,70948],{"class":51370},"  background-color",[76,70950,51507],{"class":93},[76,70952,70953],{"class":82},"#004085;\n",[76,70955,70956,70958,70960],{"class":78,"line":9984},[76,70957,70868],{"class":51370},[76,70959,51507],{"class":93},[76,70961,70577],{"class":305},[76,70963,70964,70967,70969],{"class":78,"line":9992},[76,70965,70966],{"class":51370},"  border",[76,70968,51507],{"class":93},[76,70970,70545],{"class":305},[76,70972,70973,70976,70978],{"class":78,"line":9997},[76,70974,70975],{"class":51370},"  color",[76,70977,51507],{"class":93},[76,70979,70782],{"class":82},[76,70981,70982,70985,70987],{"class":78,"line":16676},[76,70983,70984],{"class":51370},"  cursor",[76,70986,51507],{"class":93},[76,70988,70989],{"class":305},"pointer;\n",[76,70991,70992,70994,70996],{"class":78,"line":16682},[76,70993,70877],{"class":51370},[76,70995,51507],{"class":93},[76,70997,70882],{"class":305},[76,70999,71000],{"class":78,"line":16705},[76,71001,1637],{"class":93},[76,71003,71004],{"class":78,"line":16711},[76,71005,71006],{"class":305},".info .age {\n",[76,71008,71009,71011,71013],{"class":78,"line":16734},[76,71010,70638],{"class":51370},[76,71012,51507],{"class":93},[76,71014,71015],{"class":305},"50px;\n",[76,71017,71018],{"class":78,"line":16748},[76,71019,1637],{"class":93},[14,71021,71022],{},"思路：",[14,71024,71025],{},[56,71026],{"alt":58,"src":71027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71029,71030],{},[56,71031],{"alt":58,"src":71032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71034,71035],{},[56,71036],{"alt":58,"src":71037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[169,71039,71041],{"id":71040},"_3315-重绘回流","3.3.15 重绘回流",[14,71043,71044],{},[56,71045],{"alt":58,"src":71046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71048,71049],{},[56,71050],{"alt":58,"src":71051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71053,71054],{},[56,71055],{"alt":58,"src":71056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[140,71058,71060],{"id":71059},"_34-bom","3.4 BOM",[14,71062,71063],{},[56,71064],{"alt":58,"src":71065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71067,71068],{},"平时写的document省略了window而已，实际上是window.document",[14,71070,71071],{},"函数也是这样，调用的时候实际为window.fn()",[14,71073,71074],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71076,71077],{},"window大部分情况下可以省略",[169,71079,71081],{"id":71080},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71083,71084],{},"只执行一次",[14,71086,71087],{},[56,71088],{"alt":58,"src":71089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71091,71092],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71094,71095],{},[56,71096],{"alt":58,"src":71097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[169,71099,71101],{"id":71100},"_342-js执行机制","3.4.2 JS执行机制",[14,71103,71104],{},[56,71105],{"alt":58,"src":71106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71108,71109],{},"两个的结果都是1111 3333 2222",[14,71111,71112],{},[56,71113],{"alt":58,"src":71114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71116,71117],{},[56,71118],{"alt":58,"src":71119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71121,71122],{},[56,71123],{"alt":58,"src":71124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71126,71127],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71129,71130],{},"工作流程：",[14,71132,71133],{},[56,71134],{"alt":58,"src":71135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71137,71138],{},[56,71139],{"alt":58,"src":71140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71142,71143],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71145,71146],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[169,71148,71150],{"id":71149},"_343-location对象","3.4.3 location对象",[14,71152,71153],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71155,71156],{},[56,71157],{"alt":58,"src":71158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71160,71161],{},"href可以跳转页面",[152,71163,71164],{},[155,71165,71166],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71168,71169],{},"search得到提交信息之后网站后边的地址",[14,71171,71172],{},[56,71173],{"alt":58,"src":71174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71176,71177],{},[56,71178],{"alt":58,"src":71179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[152,71181,71182],{"start":86},[155,71183,71184],{},"hash:这个获取单页面应用#后边的地址",[14,71186,71187],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71189,71190],{},[56,71191],{"alt":58,"src":71192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[67,71194,71196],{"className":53137,"code":71195,"language":53139,"meta":58,"style":58},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[73,71197,71198,71218,71238],{"__ignoreMap":58},[76,71199,71200,71202,71204,71206,71208,71211,71214,71216],{"class":78,"line":79},[76,71201,52214],{"class":93},[76,71203,439],{"class":51370},[76,71205,61127],{"class":2035},[76,71207,247],{"class":93},[76,71209,71210],{"class":305},"\"#\u002Fmy\"",[76,71212,71213],{"class":93},">我的\u003C\u002F",[76,71215,439],{"class":51370},[76,71217,51377],{"class":93},[76,71219,71220,71222,71224,71226,71228,71231,71234,71236],{"class":78,"line":86},[76,71221,52214],{"class":93},[76,71223,439],{"class":51370},[76,71225,61127],{"class":2035},[76,71227,247],{"class":93},[76,71229,71230],{"class":305},"\"#\u002Ffriend\"",[76,71232,71233],{"class":93},">关注\u003C\u002F",[76,71235,439],{"class":51370},[76,71237,51377],{"class":93},[76,71239,71240,71242,71244,71246,71248,71251,71254,71256],{"class":78,"line":97},[76,71241,52214],{"class":93},[76,71243,439],{"class":51370},[76,71245,61127],{"class":2035},[76,71247,247],{"class":93},[76,71249,71250],{"class":305},"\"#\u002Fdownload\"",[76,71252,71253],{"class":93},">下载\u003C\u002F",[76,71255,439],{"class":51370},[76,71257,51377],{"class":93},[14,71259,71260],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[152,71262,71263],{"start":97},[155,71264,71265,71266,71268,71269,71271],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53786,71267],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53786,71270],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[169,71273,71275],{"id":71274},"_345-navigator对象","3.4.5 navigator对象",[14,71277,71278],{},[56,71279],{"alt":58,"src":71280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[67,71282,71286],{"className":71283,"code":71284,"language":71285,"meta":58,"style":58},"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",[73,71287,71288,71293,71304,71316,71321,71372,71413,71418,71431,71443,71448],{"__ignoreMap":58},[76,71289,71290],{"class":78,"line":79},[76,71291,71292],{"class":82},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[76,71294,71295,71297,71299,71301],{"class":78,"line":86},[76,71296,427],{"class":89},[76,71298,202],{"class":93},[76,71300,54519],{"class":89},[76,71302,71303],{"class":93}," () { \n",[76,71305,71306,71308,71311,71313],{"class":78,"line":97},[76,71307,6864],{"class":89},[76,71309,71310],{"class":250}," userAgent",[76,71312,13636],{"class":89},[76,71314,71315],{"class":93}," navigator.userAgent \n",[76,71317,71318],{"class":78,"line":103},[76,71319,71320],{"class":82},"\u002F\u002F 验证是否为Android或iPhone \n",[76,71322,71323,71325,71328,71330,71333,71336,71338,71340,71343,71345,71348,71352,71354,71356,71358,71361,71363,71365,71367,71369],{"class":78,"line":1273},[76,71324,6864],{"class":89},[76,71326,71327],{"class":250}," android",[76,71329,13636],{"class":89},[76,71331,71332],{"class":93}," userAgent.",[76,71334,71335],{"class":2035},"match",[76,71337,202],{"class":93},[76,71339,783],{"class":305},[76,71341,71342],{"class":48047},"(Android);",[76,71344,1185],{"class":89},[76,71346,71347],{"class":250},"[\\s",[76,71349,71351],{"class":71350},"snhLl","\\\u002F",[76,71353,1139],{"class":250},[76,71355,681],{"class":89},[76,71357,202],{"class":48047},[76,71359,71360],{"class":250},"[\\d.]",[76,71362,681],{"class":89},[76,71364,629],{"class":48047},[76,71366,1185],{"class":89},[76,71368,783],{"class":305},[76,71370,71371],{"class":93},") \n",[76,71373,71374,71376,71379,71381,71383,71385,71387,71389,71392,71395,71398,71400,71402,71405,71407,71409,71411],{"class":78,"line":1287},[76,71375,6864],{"class":89},[76,71377,71378],{"class":250}," iphone",[76,71380,13636],{"class":89},[76,71382,71332],{"class":93},[76,71384,71335],{"class":2035},[76,71386,202],{"class":93},[76,71388,783],{"class":305},[76,71390,71391],{"class":48047},"(iPhone",[76,71393,71394],{"class":250},"\\s",[76,71396,71397],{"class":48047},"OS)",[76,71399,71394],{"class":250},[76,71401,202],{"class":48047},[76,71403,71404],{"class":250},"[\\d_]",[76,71406,681],{"class":89},[76,71408,629],{"class":48047},[76,71410,783],{"class":305},[76,71412,71371],{"class":93},[76,71414,71415],{"class":78,"line":1293},[76,71416,71417],{"class":82},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[76,71419,71420,71422,71425,71428],{"class":78,"line":1384},[76,71421,1603],{"class":89},[76,71423,71424],{"class":93}," (android ",[76,71426,71427],{"class":89},"||",[76,71429,71430],{"class":93}," iphone) { \n",[76,71432,71433,71436,71438,71441],{"class":78,"line":1390},[76,71434,71435],{"class":93},"location.href ",[76,71437,247],{"class":89},[76,71439,71440],{"class":305}," 'http:\u002F\u002Fm.itcast.cn'",[76,71442,2746],{"class":93},[76,71444,71445],{"class":78,"line":1402},[76,71446,71447],{"class":93},"} \n",[76,71449,71450],{"class":78,"line":1684},[76,71451,71452],{"class":93},"})()\n",[169,71454,71456],{"id":71455},"_346-histroy对象","3.4.6 histroy对象",[14,71458,71459],{},[56,71460],{"alt":58,"src":71461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71463,71464],{},"浏览器地址的前进与后退!!!",[14,71466,71467],{},"history.back() 等效于 history.go(-1)",[14,71469,71470],{},"history.forward() 等效于 history.go(1)",[140,71472,71474],{"id":71473},"_35-本地存储","3.5 本地存储",[152,71476,71477,71480,71483],{},[155,71478,71479],{},"数据存储在用户浏览器中",[155,71481,71482],{},"设置、读取方便、甚至页面刷新不丢失数据",[155,71484,71485],{},"容量较大，sessionStorage和localStorage约 5M 左右",[169,71487,71489],{"id":71488},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71491,71492],{},"只能存储字符串",[14,71494,71495],{},[56,71496],{"alt":58,"src":71497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71499,71500],{},[56,71501],{"alt":58,"src":71502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71504,71505],{},"键值对要加引号,不然就会当变量来看了",[14,71507,71508],{},"localStorage.setItem('uname', 'pink')",[14,71510,71511],{},"刷新之后信息不再丢失",[14,71513,71514],{},"操作key,value会跟着变",[14,71516,71517],{},"删除只删除键就可以,即名字",[14,71519,71508],{},[14,71521,71522],{},"改:",[14,71524,71525],{},"localStorage.setItem('uname','red')",[14,71527,71528],{},"有这个键就是改,没有这个键就是改",[14,71530,71531],{},[56,71532],{"alt":58,"src":71533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71535,71536],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71538,71539],{},[56,71540],{"alt":58,"src":71541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71543,71544],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[169,71546,71548],{"id":71547},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71550,71551],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71553,71554],{},"特性:",[152,71556,71557,71560,71563,71566],{},[155,71558,71559],{},"生命周期为关闭浏览器窗口",[155,71561,71562],{},"在同一个窗口(页面)下数据可以共享",[155,71564,71565],{},"以键值对的形式存储使用",[155,71567,71568],{},"用法跟localStorage 基本相同",[169,71570,71572],{"id":71571},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71574,71575],{},"本地只能存储字符串,无法直接存储复杂数据类型",[67,71577,71579],{"className":53137,"code":71578,"language":53139,"meta":58,"style":58},"\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",[73,71580,71581,71589,71594,71599,71604,71609,71613,71618,71623],{"__ignoreMap":58},[76,71582,71583,71585,71587],{"class":78,"line":79},[76,71584,1109],{"class":93},[76,71586,51883],{"class":51370},[76,71588,51377],{"class":93},[76,71590,71591],{"class":78,"line":86},[76,71592,71593],{"class":93},"    const obj = {\n",[76,71595,71596],{"class":78,"line":97},[76,71597,71598],{"class":93},"      uname: 'pink老师',\n",[76,71600,71601],{"class":78,"line":103},[76,71602,71603],{"class":93},"      age: 18,\n",[76,71605,71606],{"class":78,"line":1273},[76,71607,71608],{"class":93},"      gender: '女'\n",[76,71610,71611],{"class":78,"line":1287},[76,71612,2259],{"class":93},[76,71614,71615],{"class":78,"line":1293},[76,71616,71617],{"class":93},"    \u002F\u002F 存储复杂数据类型\n",[76,71619,71620],{"class":78,"line":1384},[76,71621,71622],{"class":93},"    localStorage.setItem('obj', obj)\n",[76,71624,71625,71627,71629],{"class":78,"line":1390},[76,71626,52487],{"class":93},[76,71628,51883],{"class":51370},[76,71630,51377],{"class":93},[14,71632,71633],{},[56,71634],{"alt":58,"src":71635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71637,71638],{},"如果获取一下数据:",[14,71640,71641],{},"log(localStorage.getItem('obj'))",[14,71643,71644],{},[56,71645],{"alt":58,"src":71646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71648,71649],{},"发现直接存对象是使用不了的!!!",[22070,71651,71653],{"id":71652},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71655,71656],{},[56,71657],{"alt":58,"src":71658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[67,71660,71662],{"className":50703,"code":71661,"language":50705,"meta":58,"style":58},"\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",[73,71663,71664,71672,71682,71692,71701,71709,71713,71717,71743,71762,71770,71774,71779,71784],{"__ignoreMap":58},[76,71665,71666,71668,71670],{"class":78,"line":79},[76,71667,1109],{"class":93},[76,71669,51883],{"class":51370},[76,71671,51377],{"class":93},[76,71673,71674,71676,71678,71680],{"class":78,"line":86},[76,71675,11293],{"class":89},[76,71677,70041],{"class":250},[76,71679,13636],{"class":89},[76,71681,15644],{"class":93},[76,71683,71684,71687,71690],{"class":78,"line":97},[76,71685,71686],{"class":93},"      uname: ",[76,71688,71689],{"class":305},"'pink老师'",[76,71691,31536],{"class":93},[76,71693,71694,71697,71699],{"class":78,"line":103},[76,71695,71696],{"class":93},"      age: ",[76,71698,849],{"class":250},[76,71700,31536],{"class":93},[76,71702,71703,71706],{"class":78,"line":1273},[76,71704,71705],{"class":93},"      gender: ",[76,71707,71708],{"class":305},"'女'\n",[76,71710,71711],{"class":78,"line":1287},[76,71712,2259],{"class":93},[76,71714,71715],{"class":78,"line":1293},[76,71716,71617],{"class":82},[76,71718,71719,71722,71725,71727,71730,71732,71735,71737,71740],{"class":78,"line":1384},[76,71720,71721],{"class":93},"  localStorage.",[76,71723,71724],{"class":2035},"setItem",[76,71726,202],{"class":93},[76,71728,71729],{"class":305},"'obj'",[76,71731,12507],{"class":93},[76,71733,71734],{"class":250},"JSON",[76,71736,757],{"class":93},[76,71738,71739],{"class":2035},"stringify",[76,71741,71742],{"class":93},"(obj))\n",[76,71744,71745,71748,71750,71753,71756,71758,71760],{"class":78,"line":1390},[76,71746,71747],{"class":93},"  console.",[76,71749,58317],{"class":2035},[76,71751,71752],{"class":93},"(localStorage.",[76,71754,71755],{"class":2035},"getItem",[76,71757,202],{"class":93},[76,71759,71729],{"class":305},[76,71761,30567],{"class":93},[76,71763,71764,71766,71768],{"class":78,"line":1402},[76,71765,52487],{"class":93},[76,71767,51883],{"class":51370},[76,71769,51377],{"class":93},[76,71771,71772],{"class":78,"line":1684},[76,71773,70691],{"class":93},[76,71775,71776],{"class":78,"line":1689},[76,71777,71778],{"class":93},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[76,71780,71781],{"class":78,"line":1695},[76,71782,71783],{"class":93},"  类型是字符串的\n",[76,71785,71786],{"class":78,"line":1700},[76,71787,71788],{"class":93},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22070,71790,71792],{"id":71791},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71794,71795],{},[56,71796],{"alt":58,"src":71797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71799,71800],{},[56,71801],{"alt":58,"src":71802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[67,71804,71806],{"className":53137,"code":71805,"language":53139,"meta":58,"style":58},"  \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",[73,71807,71808,71816,71820,71824,71828,71832,71836,71841,71846,71851,71856,71861,71866,71871,71876],{"__ignoreMap":58},[76,71809,71810,71812,71814],{"class":78,"line":79},[76,71811,52214],{"class":93},[76,71813,51883],{"class":51370},[76,71815,51377],{"class":93},[76,71817,71818],{"class":78,"line":86},[76,71819,71593],{"class":93},[76,71821,71822],{"class":78,"line":97},[76,71823,71598],{"class":93},[76,71825,71826],{"class":78,"line":103},[76,71827,71603],{"class":93},[76,71829,71830],{"class":78,"line":1273},[76,71831,71608],{"class":93},[76,71833,71834],{"class":78,"line":1287},[76,71835,2259],{"class":93},[76,71837,71838],{"class":78,"line":1293},[76,71839,71840],{"class":93},"    \u002F\u002F 1.存储复杂数据类型\n",[76,71842,71843],{"class":78,"line":1384},[76,71844,71845],{"class":93},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[76,71847,71848],{"class":78,"line":1390},[76,71849,71850],{"class":93},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[76,71852,71853],{"class":78,"line":1402},[76,71854,71855],{"class":93},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[76,71857,71858],{"class":78,"line":1684},[76,71859,71860],{"class":93},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[76,71862,71863],{"class":78,"line":1689},[76,71864,71865],{"class":93},"    \u002F\u002F 取\n",[76,71867,71868],{"class":78,"line":1695},[76,71869,71870],{"class":93},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[76,71872,71873],{"class":78,"line":1700},[76,71874,71875],{"class":93},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[76,71877,71878,71880,71882],{"class":78,"line":1714},[76,71879,52487],{"class":93},[76,71881,51883],{"class":51370},[76,71883,51377],{"class":93},[14,71885,71886],{},[56,71887],{"alt":58,"src":71888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[169,71890,71892],{"id":71891},"_356-数组map方法","3.5.6 数组map方法",[14,71894,71895],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71897,71898],{},[56,71899],{"alt":58,"src":71900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71902,71903],{},[56,71904],{"alt":58,"src":71905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71907,71908,71911],{},[350,71909,71910],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71913,71914],{},"map有返回值，但是forEach没有返回值",[14,71916,71917],{},"map是个方法。用的时候要加 ()",[14,71919,71920],{},"map返回的是一个数组",[169,71922,71924],{"id":71923},"_357-数组中join方法","3.5.7 数组中join方法",[14,71926,71927],{},[56,71928],{"alt":58,"src":71929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71931,71932],{},"类似于python中拼接字符串一样！",[152,71934,71935,71938,71941],{},[155,71936,71937],{},"小括号为空则逗号分开",[155,71939,71940],{},"小括号为空字符串 ''，则元素之间没有分隔符",[155,71942,71943],{},"小括号用啥符号就用进行分割",[169,71945,71947],{"id":71946},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[152,71949,71950,71953,71956,71959,71962],{},[155,71951,71952],{},"记住本地时间获取快速方式：new Date().toDateString()",[155,71954,71955],{},"尽量减少DOM操作，用好map+join的渲染方式",[155,71957,71958],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[155,71960,71961],{},"return可以实现函数的结束",[155,71963,71964],{},"禁止跳转是 preventDefault() 不要忘记",[67,71966,71968],{"className":50703,"code":71967,"language":50705,"meta":58,"style":58},"\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",[73,71969,71970,71980,71994,71998,72006,72020,72040,72052,72060,72066,72076,72086,72090,72094,72100,72110,72122,72126,72130,72137,72149,72163,72173,72177,72181,72188,72195,72202,72214,72226,72236,72248,72252,72256,72263,72270,72282,72294,72304,72316,72346,72350,72354,72361,72373,72385,72409,72419,72429,72433,72437,72445,72456,72468,72480,72492,72509,72521,72533,72537,72541,72548,72560,72572,72584,72595,72613,72626,72638,72662,72673,72677,72681,72689,72699,72703,72707,72713,72725,72736,72746,72750,72754,72760,72782,72786,72790,72796,72802,72814,72824,72836,72866,72879,72896,72900,72904,72915,72937,72947,72951,72955,72968,72978,72990,73002,73014,73026,73036,73046,73056,73067,73080,73084,73092,73100,73104,73112,73125,73145,73178,73211,73244,73270,73288,73306,73314,73340,73358,73376,73394,73412,73430,73438,73446,73464,73472,73501,73509,73517,73525,73538,73550,73562,73574,73586,73598,73611,73623,73631,73639,73647,73652,73657,73661,73665,73669,73673,73677,73681,73686,73691,73696,73701,73709,73717,73725,73730,73735,73740,73745,73750,73755,73760,73765,73770,73775,73780,73785,73790,73795,73799,73804,73809,73819,73828,73832,73837,73846,73862,73904,73944,73983,74048,74056,74060,74065,74083,74091,74096,74101,74131,74137,74142,74155,74167,74179,74191,74203,74215,74227,74231,74241,74245,74250,74255,74259,74268,74272,74277,74282,74301,74306,74326,74330,74335,74339,74344,74362,74380,74398,74417,74436,74455,74460,74466,74487,74493,74502,74508,74514,74520,74547,74560,74565,74575,74581,74587,74593,74599,74604,74610,74616,74622,74628,74661,74666,74671,74676,74681,74687,74693,74699,74710,74715,74721,74728,74742,74748,74772,74777,74782,74788,74794,74815,74821,74834,74840,74846,74852,74858,74863,74869,74875,74881,74899,74913,74919,74927,74933,74955,74960,74965,74970,74975,74980,74989,74998,75003],{"__ignoreMap":58},[76,71971,71972,71974,71976,71978],{"class":78,"line":79},[76,71973,51367],{"class":93},[76,71975,51371],{"class":51370},[76,71977,51374],{"class":2035},[76,71979,51377],{"class":93},[76,71981,71982,71984,71986,71988,71990,71992],{"class":78,"line":86},[76,71983,1109],{"class":93},[76,71985,50705],{"class":51370},[76,71987,51386],{"class":2035},[76,71989,247],{"class":93},[76,71991,51391],{"class":305},[76,71993,51377],{"class":93},[76,71995,71996],{"class":78,"line":97},[76,71997,2472],{"emptyLinePlaceholder":125},[76,71999,72000,72002,72004],{"class":78,"line":103},[76,72001,1109],{"class":93},[76,72003,51404],{"class":51370},[76,72005,51377],{"class":93},[76,72007,72008,72010,72012,72014,72016,72018],{"class":78,"line":1273},[76,72009,52214],{"class":93},[76,72011,51414],{"class":51370},[76,72013,51417],{"class":2035},[76,72015,247],{"class":93},[76,72017,51422],{"class":305},[76,72019,51377],{"class":93},[76,72021,72022,72024,72026,72028,72030,72032,72034,72036,72038],{"class":78,"line":1287},[76,72023,52214],{"class":93},[76,72025,51414],{"class":51370},[76,72027,14992],{"class":2035},[76,72029,247],{"class":93},[76,72031,51461],{"class":305},[76,72033,51441],{"class":2035},[76,72035,247],{"class":93},[76,72037,51468],{"class":305},[76,72039,51377],{"class":93},[76,72041,72042,72044,72046,72048,72050],{"class":78,"line":1293},[76,72043,52214],{"class":93},[76,72045,51477],{"class":51370},[76,72047,51480],{"class":93},[76,72049,51477],{"class":51370},[76,72051,51377],{"class":93},[76,72053,72054,72056,72058],{"class":78,"line":1384},[76,72055,52214],{"class":93},[76,72057,117],{"class":51370},[76,72059,51377],{"class":93},[76,72061,72062,72064],{"class":78,"line":1390},[76,72063,6475],{"class":51370},[76,72065,15644],{"class":93},[76,72067,72068,72070,72072,72074],{"class":78,"line":1402},[76,72069,54765],{"class":250},[76,72071,51507],{"class":93},[76,72073,392],{"class":250},[76,72075,1363],{"class":93},[76,72077,72078,72080,72082,72084],{"class":78,"line":1684},[76,72079,54776],{"class":250},[76,72081,51507],{"class":93},[76,72083,392],{"class":250},[76,72085,1363],{"class":93},[76,72087,72088],{"class":78,"line":1689},[76,72089,2259],{"class":93},[76,72091,72092],{"class":78,"line":1695},[76,72093,2472],{"emptyLinePlaceholder":125},[76,72095,72096,72098],{"class":78,"line":1700},[76,72097,57349],{"class":51370},[76,72099,15644],{"class":93},[76,72101,72102,72104,72106,72108],{"class":78,"line":1714},[76,72103,57356],{"class":250},[76,72105,51507],{"class":93},[76,72107,51662],{"class":250},[76,72109,1363],{"class":93},[76,72111,72112,72114,72116,72118,72120],{"class":78,"line":1719},[76,72113,62147],{"class":250},[76,72115,51507],{"class":93},[76,72117,899],{"class":250},[76,72119,51562],{"class":89},[76,72121,1363],{"class":93},[76,72123,72124],{"class":78,"line":1725},[76,72125,2259],{"class":93},[76,72127,72128],{"class":78,"line":1746},[76,72129,2472],{"emptyLinePlaceholder":125},[76,72131,72132,72135],{"class":78,"line":1751},[76,72133,72134],{"class":2035},"    .info",[76,72136,15644],{"class":93},[76,72138,72139,72141,72143,72145,72147],{"class":78,"line":1765},[76,72140,54841],{"class":250},[76,72142,51507],{"class":93},[76,72144,51559],{"class":250},[76,72146,51562],{"class":89},[76,72148,1363],{"class":93},[76,72150,72151,72153,72155,72157,72159,72161],{"class":78,"line":1770},[76,72152,54776],{"class":250},[76,72154,51507],{"class":93},[76,72156,646],{"class":250},[76,72158,51562],{"class":89},[76,72160,51626],{"class":250},[76,72162,1363],{"class":93},[76,72164,72165,72167,72169,72171],{"class":78,"line":1799},[76,72166,57356],{"class":250},[76,72168,51507],{"class":93},[76,72170,51662],{"class":250},[76,72172,1363],{"class":93},[76,72174,72175],{"class":78,"line":1804},[76,72176,2259],{"class":93},[76,72178,72179],{"class":78,"line":1821},[76,72180,2472],{"emptyLinePlaceholder":125},[76,72182,72183,72186],{"class":78,"line":1826},[76,72184,72185],{"class":2035},"    .uname",[76,72187,31536],{"class":93},[76,72189,72190,72193],{"class":78,"line":1831},[76,72191,72192],{"class":2035},"    .age",[76,72194,31536],{"class":93},[76,72196,72197,72200],{"class":78,"line":1836},[76,72198,72199],{"class":2035},"    .salary",[76,72201,15644],{"class":93},[76,72203,72204,72206,72208,72210,72212],{"class":78,"line":1850},[76,72205,54841],{"class":250},[76,72207,51507],{"class":93},[76,72209,512],{"class":250},[76,72211,51562],{"class":89},[76,72213,1363],{"class":93},[76,72215,72216,72218,72220,72222,72224],{"class":78,"line":1855},[76,72217,54855],{"class":250},[76,72219,51507],{"class":93},[76,72221,899],{"class":250},[76,72223,51562],{"class":89},[76,72225,1363],{"class":93},[76,72227,72228,72230,72232,72234],{"class":78,"line":2649},[76,72229,61850],{"class":250},[76,72231,51507],{"class":93},[76,72233,54807],{"class":250},[76,72235,1363],{"class":93},[76,72237,72238,72240,72242,72244,72246],{"class":78,"line":2663},[76,72239,61820],{"class":250},[76,72241,51507],{"class":93},[76,72243,774],{"class":250},[76,72245,51562],{"class":89},[76,72247,1363],{"class":93},[76,72249,72250],{"class":78,"line":2671},[76,72251,2259],{"class":93},[76,72253,72254],{"class":78,"line":2676},[76,72255,2472],{"emptyLinePlaceholder":125},[76,72257,72258,72261],{"class":78,"line":2682},[76,72259,72260],{"class":2035},"    .gender",[76,72262,31536],{"class":93},[76,72264,72265,72268],{"class":78,"line":2688},[76,72266,72267],{"class":2035},"    .city",[76,72269,15644],{"class":93},[76,72271,72272,72274,72276,72278,72280],{"class":78,"line":2693},[76,72273,54841],{"class":250},[76,72275,51507],{"class":93},[76,72277,512],{"class":250},[76,72279,51562],{"class":89},[76,72281,1363],{"class":93},[76,72283,72284,72286,72288,72290,72292],{"class":78,"line":8020},[76,72285,54855],{"class":250},[76,72287,51507],{"class":93},[76,72289,1024],{"class":250},[76,72291,51562],{"class":89},[76,72293,1363],{"class":93},[76,72295,72296,72298,72300,72302],{"class":78,"line":8044},[76,72297,61850],{"class":250},[76,72299,51507],{"class":93},[76,72301,54807],{"class":250},[76,72303,1363],{"class":93},[76,72305,72306,72308,72310,72312,72314],{"class":78,"line":8049},[76,72307,61820],{"class":250},[76,72309,51507],{"class":93},[76,72311,774],{"class":250},[76,72313,51562],{"class":89},[76,72315,1363],{"class":93},[76,72317,72318,72320,72322,72324,72326,72328,72331,72333,72335,72337,72340,72342,72344],{"class":78,"line":8055},[76,72319,62047],{"class":250},[76,72321,51507],{"class":93},[76,72323,418],{"class":250},[76,72325,51562],{"class":89},[76,72327,51591],{"class":250},[76,72329,72330],{"class":250}," rgb",[76,72332,202],{"class":93},[76,72334,1794],{"class":250},[76,72336,12507],{"class":93},[76,72338,72339],{"class":250},"197",[76,72341,12507],{"class":93},[76,72343,72339],{"class":250},[76,72345,2791],{"class":93},[76,72347,72348],{"class":78,"line":8082},[76,72349,2259],{"class":93},[76,72351,72352],{"class":78,"line":8087},[76,72353,2472],{"emptyLinePlaceholder":125},[76,72355,72356,72359],{"class":78,"line":8093},[76,72357,72358],{"class":51370},"    button",[76,72360,15644],{"class":93},[76,72362,72363,72365,72367,72369,72371],{"class":78,"line":8105},[76,72364,54855],{"class":250},[76,72366,51507],{"class":93},[76,72368,1024],{"class":250},[76,72370,51562],{"class":89},[76,72372,1363],{"class":93},[76,72374,72375,72377,72379,72381,72383],{"class":78,"line":8117},[76,72376,54841],{"class":250},[76,72378,51507],{"class":93},[76,72380,684],{"class":250},[76,72382,51562],{"class":89},[76,72384,1363],{"class":93},[76,72386,72387,72389,72391,72394,72396,72398,72400,72403,72405,72407],{"class":78,"line":8129},[76,72388,54954],{"class":250},[76,72390,51507],{"class":93},[76,72392,72393],{"class":250},"rgb",[76,72395,202],{"class":93},[76,72397,1168],{"class":250},[76,72399,12507],{"class":93},[76,72401,72402],{"class":250},"187",[76,72404,12507],{"class":93},[76,72406,500],{"class":250},[76,72408,2791],{"class":93},[76,72410,72411,72413,72415,72417],{"class":78,"line":9788},[76,72412,57486],{"class":250},[76,72414,51507],{"class":93},[76,72416,60912],{"class":250},[76,72418,1363],{"class":93},[76,72420,72421,72423,72425,72427],{"class":78,"line":9813},[76,72422,62047],{"class":250},[76,72424,51507],{"class":93},[76,72426,392],{"class":250},[76,72428,1363],{"class":93},[76,72430,72431],{"class":78,"line":9836},[76,72432,2259],{"class":93},[76,72434,72435],{"class":78,"line":9860},[76,72436,2472],{"emptyLinePlaceholder":125},[76,72438,72439,72441,72443],{"class":78,"line":9865},[76,72440,72358],{"class":51370},[76,72442,51758],{"class":51370},[76,72444,15644],{"class":93},[76,72446,72447,72449,72451,72454],{"class":78,"line":9870},[76,72448,55079],{"class":250},[76,72450,51507],{"class":93},[76,72452,72453],{"class":250},"inline-block",[76,72455,1363],{"class":93},[76,72457,72458,72460,72462,72464,72466],{"class":78,"line":9875},[76,72459,54841],{"class":250},[76,72461,51507],{"class":93},[76,72463,646],{"class":250},[76,72465,51562],{"class":89},[76,72467,1363],{"class":93},[76,72469,72470,72472,72474,72476,72478],{"class":78,"line":9884},[76,72471,54855],{"class":250},[76,72473,51507],{"class":93},[76,72475,646],{"class":250},[76,72477,51562],{"class":89},[76,72479,1363],{"class":93},[76,72481,72482,72484,72486,72488,72490],{"class":78,"line":9889},[76,72483,57429],{"class":250},[76,72485,51507],{"class":93},[76,72487,672],{"class":250},[76,72489,51562],{"class":89},[76,72491,1363],{"class":93},[76,72493,72494,72496,72498,72500,72502,72504,72507],{"class":78,"line":9895},[76,72495,62047],{"class":250},[76,72497,51507],{"class":93},[76,72499,418],{"class":250},[76,72501,51562],{"class":89},[76,72503,51591],{"class":250},[76,72505,72506],{"class":250}," #fff",[76,72508,1363],{"class":93},[76,72510,72511,72513,72515,72517,72519],{"class":78,"line":9916},[76,72512,55204],{"class":250},[76,72514,51507],{"class":93},[76,72516,520],{"class":250},[76,72518,51562],{"class":89},[76,72520,1363],{"class":93},[76,72522,72523,72525,72527,72529,72531],{"class":78,"line":9922},[76,72524,61820],{"class":250},[76,72526,51507],{"class":93},[76,72528,418],{"class":250},[76,72530,51562],{"class":89},[76,72532,1363],{"class":93},[76,72534,72535],{"class":78,"line":9936},[76,72536,2259],{"class":93},[76,72538,72539],{"class":78,"line":9942},[76,72540,2472],{"emptyLinePlaceholder":125},[76,72542,72543,72546],{"class":78,"line":9969},[76,72544,72545],{"class":2035},"    .total",[76,72547,15644],{"class":93},[76,72549,72550,72552,72554,72556,72558],{"class":78,"line":9978},[76,72551,54841],{"class":250},[76,72553,51507],{"class":93},[76,72555,61699],{"class":250},[76,72557,51562],{"class":89},[76,72559,1363],{"class":93},[76,72561,72562,72564,72566,72568,72570],{"class":78,"line":9984},[76,72563,54855],{"class":250},[76,72565,51507],{"class":93},[76,72567,601],{"class":250},[76,72569,51562],{"class":89},[76,72571,1363],{"class":93},[76,72573,72574,72576,72578,72580,72582],{"class":78,"line":9992},[76,72575,57429],{"class":250},[76,72577,51507],{"class":93},[76,72579,601],{"class":250},[76,72581,51562],{"class":89},[76,72583,1363],{"class":93},[76,72585,72586,72588,72590,72593],{"class":78,"line":9997},[76,72587,57356],{"class":250},[76,72589,51507],{"class":93},[76,72591,72592],{"class":250},"right",[76,72594,1363],{"class":93},[76,72596,72597,72599,72601,72603,72605,72607,72609,72611],{"class":78,"line":16676},[76,72598,54776],{"class":250},[76,72600,51507],{"class":93},[76,72602,601],{"class":250},[76,72604,51562],{"class":89},[76,72606,51626],{"class":250},[76,72608,2110],{"class":250},[76,72610,51562],{"class":89},[76,72612,1363],{"class":93},[76,72614,72615,72618,72620,72622,72624],{"class":78,"line":16682},[76,72616,72617],{"class":250},"      padding-right",[76,72619,51507],{"class":93},[76,72621,646],{"class":250},[76,72623,51562],{"class":89},[76,72625,1363],{"class":93},[76,72627,72628,72630,72632,72634,72636],{"class":78,"line":16705},[76,72629,54992],{"class":250},[76,72631,51507],{"class":93},[76,72633,723],{"class":250},[76,72635,51562],{"class":89},[76,72637,1363],{"class":93},[76,72639,72640,72642,72644,72646,72648,72651,72653,72656,72658,72660],{"class":78,"line":16711},[76,72641,54954],{"class":250},[76,72643,51507],{"class":93},[76,72645,72393],{"class":250},[76,72647,202],{"class":93},[76,72649,72650],{"class":250},"237",[76,72652,12507],{"class":93},[76,72654,72655],{"class":250},"235",[76,72657,12507],{"class":93},[76,72659,72655],{"class":250},[76,72661,2791],{"class":93},[76,72663,72664,72667,72669,72671],{"class":78,"line":16734},[76,72665,72666],{"class":250},"      box-sizing",[76,72668,51507],{"class":93},[76,72670,60575],{"class":250},[76,72672,1363],{"class":93},[76,72674,72675],{"class":78,"line":16748},[76,72676,2259],{"class":93},[76,72678,72679],{"class":78,"line":16768},[76,72680,2472],{"emptyLinePlaceholder":125},[76,72682,72683,72685,72687],{"class":78,"line":16774},[76,72684,72545],{"class":2035},[76,72686,51758],{"class":51370},[76,72688,15644],{"class":93},[76,72690,72691,72693,72695,72697],{"class":78,"line":16785},[76,72692,57486],{"class":250},[76,72694,51507],{"class":93},[76,72696,57491],{"class":250},[76,72698,1363],{"class":93},[76,72700,72701],{"class":78,"line":16808},[76,72702,2259],{"class":93},[76,72704,72705],{"class":78,"line":16830},[76,72706,2472],{"emptyLinePlaceholder":125},[76,72708,72709,72711],{"class":78,"line":16835},[76,72710,65093],{"class":51370},[76,72712,15644],{"class":93},[76,72714,72715,72717,72719,72721,72723],{"class":78,"line":16841},[76,72716,54841],{"class":250},[76,72718,51507],{"class":93},[76,72720,61699],{"class":250},[76,72722,51562],{"class":89},[76,72724,1363],{"class":93},[76,72726,72727,72729,72731,72734],{"class":78,"line":16855},[76,72728,54776],{"class":250},[76,72730,51507],{"class":93},[76,72732,72733],{"class":250},"auto",[76,72735,1363],{"class":93},[76,72737,72738,72740,72742,72744],{"class":78,"line":16868},[76,72739,65100],{"class":250},[76,72741,51507],{"class":93},[76,72743,65105],{"class":250},[76,72745,1363],{"class":93},[76,72747,72748],{"class":78,"line":16873},[76,72749,2259],{"class":93},[76,72751,72752],{"class":78,"line":16887},[76,72753,2472],{"emptyLinePlaceholder":125},[76,72755,72756,72758],{"class":78,"line":16892},[76,72757,65185],{"class":51370},[76,72759,15644],{"class":93},[76,72761,72762,72764,72766,72768,72770,72772,72774,72776,72778,72780],{"class":78,"line":16898},[76,72763,54954],{"class":250},[76,72765,51507],{"class":93},[76,72767,72393],{"class":250},[76,72769,202],{"class":93},[76,72771,72650],{"class":250},[76,72773,12507],{"class":93},[76,72775,72655],{"class":250},[76,72777,12507],{"class":93},[76,72779,72655],{"class":250},[76,72781,2791],{"class":93},[76,72783,72784],{"class":78,"line":16903},[76,72785,2259],{"class":93},[76,72787,72788],{"class":78,"line":16917},[76,72789,2472],{"emptyLinePlaceholder":125},[76,72791,72792,72794],{"class":78,"line":16922},[76,72793,65185],{"class":51370},[76,72795,31536],{"class":93},[76,72797,72798,72800],{"class":78,"line":16927},[76,72799,65251],{"class":51370},[76,72801,15644],{"class":93},[76,72803,72804,72806,72808,72810,72812],{"class":78,"line":16941},[76,72805,54855],{"class":250},[76,72807,51507],{"class":93},[76,72809,474],{"class":250},[76,72811,51562],{"class":89},[76,72813,1363],{"class":93},[76,72815,72816,72818,72820,72822],{"class":78,"line":16953},[76,72817,57356],{"class":250},[76,72819,51507],{"class":93},[76,72821,23808],{"class":250},[76,72823,1363],{"class":93},[76,72825,72826,72828,72830,72832,72834],{"class":78,"line":16958},[76,72827,54992],{"class":250},[76,72829,51507],{"class":93},[76,72831,748],{"class":250},[76,72833,51562],{"class":89},[76,72835,1363],{"class":93},[76,72837,72838,72840,72842,72844,72846,72848,72850,72852,72855,72857,72860,72862,72864],{"class":78,"line":16971},[76,72839,62047],{"class":250},[76,72841,51507],{"class":93},[76,72843,418],{"class":250},[76,72845,51562],{"class":89},[76,72847,51591],{"class":250},[76,72849,72330],{"class":250},[76,72851,202],{"class":93},[76,72853,72854],{"class":250},"228",[76,72856,12507],{"class":93},[76,72858,72859],{"class":250},"225",[76,72861,12507],{"class":93},[76,72863,72859],{"class":250},[76,72865,2791],{"class":93},[76,72867,72868,72871,72873,72875,72877],{"class":78,"line":16976},[76,72869,72870],{"class":250},"      padding-left",[76,72872,51507],{"class":93},[76,72874,520],{"class":250},[76,72876,51562],{"class":89},[76,72878,1363],{"class":93},[76,72880,72881,72883,72885,72887,72890,72892,72894],{"class":78,"line":16981},[76,72882,61930],{"class":250},[76,72884,51507],{"class":93},[76,72886,28194],{"class":250},[76,72888,72889],{"class":250}," linear",[76,72891,61937],{"class":250},[76,72893,894],{"class":89},[76,72895,1363],{"class":93},[76,72897,72898],{"class":78,"line":16986},[76,72899,2259],{"class":93},[76,72901,72902],{"class":78,"line":16999},[76,72903,2472],{"emptyLinePlaceholder":125},[76,72905,72906,72909,72911,72913],{"class":78,"line":17004},[76,72907,72908],{"class":51370},"    tbody",[76,72910,70214],{"class":51370},[76,72912,61010],{"class":2035},[76,72914,15644],{"class":93},[76,72916,72917,72919,72921,72923,72925,72927,72929,72931,72933,72935],{"class":78,"line":32703},[76,72918,54954],{"class":250},[76,72920,51507],{"class":93},[76,72922,72393],{"class":250},[76,72924,202],{"class":93},[76,72926,72650],{"class":250},[76,72928,12507],{"class":93},[76,72930,72655],{"class":250},[76,72932,12507],{"class":93},[76,72934,72655],{"class":250},[76,72936,2791],{"class":93},[76,72938,72939,72941,72943,72945],{"class":78,"line":32709},[76,72940,62095],{"class":250},[76,72942,51507],{"class":93},[76,72944,62100],{"class":250},[76,72946,1363],{"class":93},[76,72948,72949],{"class":78,"line":32715},[76,72950,2259],{"class":93},[76,72952,72953],{"class":78,"line":32721},[76,72954,2472],{"emptyLinePlaceholder":125},[76,72956,72957,72959,72961,72964,72966],{"class":78,"line":32727},[76,72958,72908],{"class":51370},[76,72960,70214],{"class":51370},[76,72962,72963],{"class":51370}," td",[76,72965,1471],{"class":51370},[76,72967,15644],{"class":93},[76,72969,72970,72972,72974,72976],{"class":78,"line":32738},[76,72971,55079],{"class":250},[76,72973,51507],{"class":93},[76,72975,60939],{"class":250},[76,72977,1363],{"class":93},[76,72979,72980,72982,72984,72986,72988],{"class":78,"line":32744},[76,72981,54841],{"class":250},[76,72983,51507],{"class":93},[76,72985,1106],{"class":250},[76,72987,51562],{"class":89},[76,72989,1363],{"class":93},[76,72991,72992,72994,72996,72998,73000],{"class":78,"line":32764},[76,72993,54855],{"class":250},[76,72995,51507],{"class":93},[76,72997,1024],{"class":250},[76,72999,51562],{"class":89},[76,73001,1363],{"class":93},[76,73003,73004,73006,73008,73010,73012],{"class":78,"line":32770},[76,73005,57429],{"class":250},[76,73007,51507],{"class":93},[76,73009,1024],{"class":250},[76,73011,51562],{"class":89},[76,73013,1363],{"class":93},[76,73015,73016,73018,73020,73022,73024],{"class":78,"line":32781},[76,73017,62147],{"class":250},[76,73019,51507],{"class":93},[76,73021,278],{"class":250},[76,73023,51562],{"class":89},[76,73025,1363],{"class":93},[76,73027,73028,73030,73032,73034],{"class":78,"line":32787},[76,73029,57486],{"class":250},[76,73031,51507],{"class":93},[76,73033,60912],{"class":250},[76,73035,1363],{"class":93},[76,73037,73038,73040,73042,73044],{"class":78,"line":32793},[76,73039,57356],{"class":250},[76,73041,51507],{"class":93},[76,73043,51662],{"class":250},[76,73045,1363],{"class":93},[76,73047,73048,73050,73052,73054],{"class":78,"line":32799},[76,73049,64040],{"class":250},[76,73051,51507],{"class":93},[76,73053,54807],{"class":250},[76,73055,1363],{"class":93},[76,73057,73058,73060,73062,73065],{"class":78,"line":32805},[76,73059,54954],{"class":250},[76,73061,51507],{"class":93},[76,73063,73064],{"class":250},"orange",[76,73066,1363],{"class":93},[76,73068,73069,73071,73073,73076,73078],{"class":78,"line":32811},[76,73070,55204],{"class":250},[76,73072,51507],{"class":93},[76,73074,73075],{"class":250},"12.5",[76,73077,51562],{"class":89},[76,73079,1363],{"class":93},[76,73081,73082],{"class":78,"line":32817},[76,73083,2259],{"class":93},[76,73085,73086,73088,73090],{"class":78,"line":32823},[76,73087,52487],{"class":93},[76,73089,117],{"class":51370},[76,73091,51377],{"class":93},[76,73093,73094,73096,73098],{"class":78,"line":32843},[76,73095,51855],{"class":93},[76,73097,51404],{"class":51370},[76,73099,51377],{"class":93},[76,73101,73102],{"class":78,"line":32849},[76,73103,2472],{"emptyLinePlaceholder":125},[76,73105,73106,73108,73110],{"class":78,"line":32865},[76,73107,1109],{"class":93},[76,73109,51870],{"class":51370},[76,73111,51377],{"class":93},[76,73113,73114,73116,73118,73121,73123],{"class":78,"line":32871},[76,73115,52214],{"class":93},[76,73117,140],{"class":51370},[76,73119,73120],{"class":93},">学生就业统计表\u003C\u002F",[76,73122,140],{"class":51370},[76,73124,51377],{"class":93},[76,73126,73127,73129,73131,73133,73135,73137,73139,73141,73143],{"class":78,"line":32885},[76,73128,52214],{"class":93},[76,73130,66695],{"class":51370},[76,73132,53556],{"class":2035},[76,73134,247],{"class":93},[76,73136,62734],{"class":305},[76,73138,69140],{"class":2035},[76,73140,247],{"class":93},[76,73142,31846],{"class":305},[76,73144,51377],{"class":93},[76,73146,73147,73149,73151,73153,73155,73157,73159,73161,73163,73165,73167,73170,73172,73174,73176],{"class":78,"line":32891},[76,73148,51411],{"class":93},[76,73150,53891],{"class":51370},[76,73152,53894],{"class":2035},[76,73154,247],{"class":93},[76,73156,62769],{"class":305},[76,73158,14992],{"class":2035},[76,73160,247],{"class":93},[76,73162,69166],{"class":305},[76,73164,61090],{"class":2035},[76,73166,247],{"class":93},[76,73168,73169],{"class":305},"\"姓名\"",[76,73171,53556],{"class":2035},[76,73173,247],{"class":93},[76,73175,69166],{"class":305},[76,73177,51377],{"class":93},[76,73179,73180,73182,73184,73186,73188,73190,73192,73194,73196,73198,73200,73203,73205,73207,73209],{"class":78,"line":32906},[76,73181,51411],{"class":93},[76,73183,53891],{"class":51370},[76,73185,53894],{"class":2035},[76,73187,247],{"class":93},[76,73189,62769],{"class":305},[76,73191,14992],{"class":2035},[76,73193,247],{"class":93},[76,73195,69194],{"class":305},[76,73197,61090],{"class":2035},[76,73199,247],{"class":93},[76,73201,73202],{"class":305},"\"年龄\"",[76,73204,53556],{"class":2035},[76,73206,247],{"class":93},[76,73208,69194],{"class":305},[76,73210,51377],{"class":93},[76,73212,73213,73215,73217,73219,73221,73223,73225,73227,73229,73231,73233,73236,73238,73240,73242],{"class":78,"line":32912},[76,73214,51411],{"class":93},[76,73216,53891],{"class":51370},[76,73218,53894],{"class":2035},[76,73220,247],{"class":93},[76,73222,62769],{"class":305},[76,73224,14992],{"class":2035},[76,73226,247],{"class":93},[76,73228,69296],{"class":305},[76,73230,61090],{"class":2035},[76,73232,247],{"class":93},[76,73234,73235],{"class":305},"\"薪资\"",[76,73237,53556],{"class":2035},[76,73239,247],{"class":93},[76,73241,69296],{"class":305},[76,73243,51377],{"class":93},[76,73245,73246,73248,73250,73252,73254,73256,73258,73260,73262,73264,73266,73268],{"class":78,"line":32921},[76,73247,51411],{"class":93},[76,73249,69214],{"class":51370},[76,73251,14992],{"class":2035},[76,73253,247],{"class":93},[76,73255,69221],{"class":305},[76,73257,15031],{"class":2035},[76,73259,247],{"class":93},[76,73261,7724],{"class":305},[76,73263,53556],{"class":2035},[76,73265,247],{"class":93},[76,73267,69221],{"class":305},[76,73269,51377],{"class":93},[76,73271,73272,73274,73276,73278,73280,73282,73284,73286],{"class":78,"line":32927},[76,73273,55304],{"class":93},[76,73275,69236],{"class":51370},[76,73277,66721],{"class":2035},[76,73279,247],{"class":93},[76,73281,10033],{"class":305},[76,73283,69245],{"class":93},[76,73285,69236],{"class":51370},[76,73287,51377],{"class":93},[76,73289,73290,73292,73294,73296,73298,73300,73302,73304],{"class":78,"line":32936},[76,73291,55304],{"class":93},[76,73293,69236],{"class":51370},[76,73295,66721],{"class":2035},[76,73297,247],{"class":93},[76,73299,10102],{"class":305},[76,73301,69264],{"class":93},[76,73303,69236],{"class":51370},[76,73305,51377],{"class":93},[76,73307,73308,73310,73312],{"class":78,"line":32942},[76,73309,51846],{"class":93},[76,73311,69214],{"class":51370},[76,73313,51377],{"class":93},[76,73315,73316,73318,73320,73322,73324,73326,73328,73330,73332,73334,73336,73338],{"class":78,"line":32948},[76,73317,51411],{"class":93},[76,73319,69214],{"class":51370},[76,73321,14992],{"class":2035},[76,73323,247],{"class":93},[76,73325,69318],{"class":305},[76,73327,15031],{"class":2035},[76,73329,247],{"class":93},[76,73331,7724],{"class":305},[76,73333,53556],{"class":2035},[76,73335,247],{"class":93},[76,73337,69318],{"class":305},[76,73339,51377],{"class":93},[76,73341,73342,73344,73346,73348,73350,73352,73354,73356],{"class":78,"line":32957},[76,73343,55304],{"class":93},[76,73345,69236],{"class":51370},[76,73347,66721],{"class":2035},[76,73349,247],{"class":93},[76,73351,69339],{"class":305},[76,73353,69342],{"class":93},[76,73355,69236],{"class":51370},[76,73357,51377],{"class":93},[76,73359,73360,73362,73364,73366,73368,73370,73372,73374],{"class":78,"line":32963},[76,73361,55304],{"class":93},[76,73363,69236],{"class":51370},[76,73365,66721],{"class":2035},[76,73367,247],{"class":93},[76,73369,69359],{"class":305},[76,73371,69362],{"class":93},[76,73373,69236],{"class":51370},[76,73375,51377],{"class":93},[76,73377,73378,73380,73382,73384,73386,73388,73390,73392],{"class":78,"line":32974},[76,73379,55304],{"class":93},[76,73381,69236],{"class":51370},[76,73383,66721],{"class":2035},[76,73385,247],{"class":93},[76,73387,69379],{"class":305},[76,73389,69382],{"class":93},[76,73391,69236],{"class":51370},[76,73393,51377],{"class":93},[76,73395,73396,73398,73400,73402,73404,73406,73408,73410],{"class":78,"line":32980},[76,73397,55304],{"class":93},[76,73399,69236],{"class":51370},[76,73401,66721],{"class":2035},[76,73403,247],{"class":93},[76,73405,69399],{"class":305},[76,73407,69402],{"class":93},[76,73409,69236],{"class":51370},[76,73411,51377],{"class":93},[76,73413,73414,73416,73418,73420,73422,73424,73426,73428],{"class":78,"line":32999},[76,73415,55304],{"class":93},[76,73417,69236],{"class":51370},[76,73419,66721],{"class":2035},[76,73421,247],{"class":93},[76,73423,69419],{"class":305},[76,73425,69422],{"class":93},[76,73427,69236],{"class":51370},[76,73429,51377],{"class":93},[76,73431,73432,73434,73436],{"class":78,"line":33005},[76,73433,51846],{"class":93},[76,73435,69214],{"class":51370},[76,73437,51377],{"class":93},[76,73439,73440,73442,73444],{"class":78,"line":33016},[76,73441,51411],{"class":93},[76,73443,53957],{"class":51370},[76,73445,51377],{"class":93},[76,73447,73448,73450,73452,73455,73457,73460,73462],{"class":78,"line":33022},[76,73449,55304],{"class":93},[76,73451,76],{"class":51370},[76,73453,73454],{"class":93},">+\u003C\u002F",[76,73456,76],{"class":51370},[76,73458,73459],{"class":93},">添加\u003C\u002F",[76,73461,53957],{"class":51370},[76,73463,51377],{"class":93},[76,73465,73466,73468,73470],{"class":78,"line":33042},[76,73467,52487],{"class":93},[76,73469,66695],{"class":51370},[76,73471,51377],{"class":93},[76,73473,73474,73476,73478,73480,73482,73484,73487,73489,73492,73494,73497,73499],{"class":78,"line":33058},[76,73475,52214],{"class":93},[76,73477,51681],{"class":51370},[76,73479,53556],{"class":2035},[76,73481,247],{"class":93},[76,73483,62650],{"class":305},[76,73485,73486],{"class":93},">共有数据 \u003C",[76,73488,76],{"class":51370},[76,73490,73491],{"class":93},">0\u003C\u002F",[76,73493,76],{"class":51370},[76,73495,73496],{"class":93},"> 条\u003C\u002F",[76,73498,51681],{"class":51370},[76,73500,51377],{"class":93},[76,73502,73503,73505,73507],{"class":78,"line":33064},[76,73504,52214],{"class":93},[76,73506,338],{"class":51370},[76,73508,51377],{"class":93},[76,73510,73511,73513,73515],{"class":78,"line":33078},[76,73512,51411],{"class":93},[76,73514,341],{"class":51370},[76,73516,51377],{"class":93},[76,73518,73519,73521,73523],{"class":78,"line":33084},[76,73520,55304],{"class":93},[76,73522,344],{"class":51370},[76,73524,51377],{"class":93},[76,73526,73527,73529,73531,73534,73536],{"class":78,"line":33090},[76,73528,55372],{"class":93},[76,73530,347],{"class":51370},[76,73532,73533],{"class":93},">ID\u003C\u002F",[76,73535,347],{"class":51370},[76,73537,51377],{"class":93},[76,73539,73540,73542,73544,73546,73548],{"class":78,"line":33101},[76,73541,55372],{"class":93},[76,73543,347],{"class":51370},[76,73545,69525],{"class":93},[76,73547,347],{"class":51370},[76,73549,51377],{"class":93},[76,73551,73552,73554,73556,73558,73560],{"class":78,"line":33107},[76,73553,55372],{"class":93},[76,73555,347],{"class":51370},[76,73557,69538],{"class":93},[76,73559,347],{"class":51370},[76,73561,51377],{"class":93},[76,73563,73564,73566,73568,73570,73572],{"class":78,"line":33113},[76,73565,55372],{"class":93},[76,73567,347],{"class":51370},[76,73569,69551],{"class":93},[76,73571,347],{"class":51370},[76,73573,51377],{"class":93},[76,73575,73576,73578,73580,73582,73584],{"class":78,"line":33123},[76,73577,55372],{"class":93},[76,73579,347],{"class":51370},[76,73581,69564],{"class":93},[76,73583,347],{"class":51370},[76,73585,51377],{"class":93},[76,73587,73588,73590,73592,73594,73596],{"class":78,"line":33129},[76,73589,55372],{"class":93},[76,73591,347],{"class":51370},[76,73593,69577],{"class":93},[76,73595,347],{"class":51370},[76,73597,51377],{"class":93},[76,73599,73600,73602,73604,73607,73609],{"class":78,"line":33140},[76,73601,55372],{"class":93},[76,73603,347],{"class":51370},[76,73605,73606],{"class":93},">录入时间\u003C\u002F",[76,73608,347],{"class":51370},[76,73610,51377],{"class":93},[76,73612,73613,73615,73617,73619,73621],{"class":78,"line":33146},[76,73614,55372],{"class":93},[76,73616,347],{"class":51370},[76,73618,69590],{"class":93},[76,73620,347],{"class":51370},[76,73622,51377],{"class":93},[76,73624,73625,73627,73629],{"class":78,"line":33156},[76,73626,55477],{"class":93},[76,73628,344],{"class":51370},[76,73630,51377],{"class":93},[76,73632,73633,73635,73637],{"class":78,"line":33161},[76,73634,51846],{"class":93},[76,73636,341],{"class":51370},[76,73638,51377],{"class":93},[76,73640,73641,73643,73645],{"class":78,"line":33167},[76,73642,51411],{"class":93},[76,73644,385],{"class":51370},[76,73646,51377],{"class":93},[76,73648,73649],{"class":78,"line":33216},[76,73650,73651],{"class":82},"      \u003C!-- \u003Ctr>\n",[76,73653,73654],{"class":78,"line":33263},[76,73655,73656],{"class":82},"        \u003Ctd>1\u003C\u002Ftd>\n",[76,73658,73659],{"class":78,"line":33268},[76,73660,73656],{"class":82},[76,73662,73663],{"class":78,"line":33274},[76,73664,73656],{"class":82},[76,73666,73667],{"class":78,"line":33293},[76,73668,73656],{"class":82},[76,73670,73671],{"class":78,"line":33299},[76,73672,73656],{"class":82},[76,73674,73675],{"class":78,"line":33319},[76,73676,73656],{"class":82},[76,73678,73679],{"class":78,"line":33325},[76,73680,73656],{"class":82},[76,73682,73683],{"class":78,"line":33331},[76,73684,73685],{"class":82},"        \u003Ctd>\n",[76,73687,73688],{"class":78,"line":33341},[76,73689,73690],{"class":82},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[76,73692,73693],{"class":78,"line":33346},[76,73694,73695],{"class":82},"        \u003C\u002Ftd>\n",[76,73697,73698],{"class":78,"line":33352},[76,73699,73700],{"class":82},"      \u003C\u002Ftr> -->\n",[76,73702,73703,73705,73707],{"class":78,"line":33368},[76,73704,51846],{"class":93},[76,73706,385],{"class":51370},[76,73708,51377],{"class":93},[76,73710,73711,73713,73715],{"class":78,"line":33413},[76,73712,52487],{"class":93},[76,73714,338],{"class":51370},[76,73716,51377],{"class":93},[76,73718,73719,73721,73723],{"class":78,"line":33419},[76,73720,52214],{"class":93},[76,73722,51883],{"class":51370},[76,73724,51377],{"class":93},[76,73726,73727],{"class":78,"line":33425},[76,73728,73729],{"class":82},"    \u002F\u002F const initData = [{\n",[76,73731,73732],{"class":78,"line":33431},[76,73733,73734],{"class":82},"    \u002F\u002F   unameId: 1,\n",[76,73736,73737],{"class":78,"line":33442},[76,73738,73739],{"class":82},"    \u002F\u002F   uname: '华晨宇',\n",[76,73741,73742],{"class":78,"line":33448},[76,73743,73744],{"class":82},"    \u002F\u002F   age: 22,\n",[76,73746,73747],{"class":78,"line":33454},[76,73748,73749],{"class":82},"    \u002F\u002F   salary: 12000,\n",[76,73751,73752],{"class":78,"line":33460},[76,73753,73754],{"class":82},"    \u002F\u002F   gender: '男',\n",[76,73756,73757],{"class":78,"line":33478},[76,73758,73759],{"class":82},"    \u002F\u002F   city: '北京',\n",[76,73761,73762],{"class":78,"line":33492},[76,73763,73764],{"class":82},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[76,73766,73767],{"class":78,"line":33501},[76,73768,73769],{"class":82},"    \u002F\u002F }]\n",[76,73771,73772],{"class":78,"line":33510},[76,73773,73774],{"class":82},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[76,73776,73777],{"class":78,"line":33519},[76,73778,73779],{"class":82},"    \u002F\u002F 1.渲染业务\n",[76,73781,73782],{"class":78,"line":33528},[76,73783,73784],{"class":82},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[76,73786,73787],{"class":78,"line":33534},[76,73788,73789],{"class":82},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[76,73791,73792],{"class":78,"line":33540},[76,73793,73794],{"class":82},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[76,73796,73797],{"class":78,"line":33548},[76,73798,2472],{"emptyLinePlaceholder":125},[76,73800,73801],{"class":78,"line":33553},[76,73802,73803],{"class":82},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[76,73805,73806],{"class":78,"line":33559},[76,73807,73808],{"class":82},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[76,73810,73811,73813,73815,73817],{"class":78,"line":33570},[76,73812,11293],{"class":89},[76,73814,57765],{"class":250},[76,73816,13636],{"class":89},[76,73818,51908],{"class":93},[76,73820,73821,73824,73826],{"class":78,"line":33576},[76,73822,73823],{"class":93},"    console.",[76,73825,58317],{"class":2035},[76,73827,52482],{"class":93},[76,73829,73830],{"class":78,"line":33596},[76,73831,2472],{"emptyLinePlaceholder":125},[76,73833,73834],{"class":78,"line":33602},[76,73835,73836],{"class":82},"    \u002F\u002F 时间函数\n",[76,73838,73839,73841,73844],{"class":78,"line":33608},[76,73840,70154],{"class":89},[76,73842,73843],{"class":2035}," getTime",[76,73845,10925],{"class":93},[76,73847,73848,73850,73853,73855,73857,73860],{"class":78,"line":33614},[76,73849,58298],{"class":89},[76,73851,73852],{"class":250}," date",[76,73854,13636],{"class":89},[76,73856,11650],{"class":89},[76,73858,73859],{"class":2035}," Date",[76,73861,2048],{"class":93},[76,73863,73864,73866,73868,73870,73873,73876,73878,73880,73882,73885,73888,73890,73892,73894,73896,73898,73900,73902],{"class":78,"line":33631},[76,73865,58298],{"class":89},[76,73867,16163],{"class":250},[76,73869,13636],{"class":89},[76,73871,73872],{"class":93}," date.",[76,73874,73875],{"class":2035},"getHours",[76,73877,13122],{"class":93},[76,73879,1109],{"class":89},[76,73881,2110],{"class":250},[76,73883,73884],{"class":89}," ?",[76,73886,73887],{"class":305}," '0'",[76,73889,45636],{"class":89},[76,73891,73872],{"class":93},[76,73893,73875],{"class":2035},[76,73895,13122],{"class":93},[76,73897,1058],{"class":89},[76,73899,73872],{"class":93},[76,73901,73875],{"class":2035},[76,73903,2048],{"class":93},[76,73905,73906,73908,73911,73913,73915,73918,73920,73922,73924,73926,73928,73930,73932,73934,73936,73938,73940,73942],{"class":78,"line":33637},[76,73907,58298],{"class":89},[76,73909,73910],{"class":250}," m",[76,73912,13636],{"class":89},[76,73914,73872],{"class":93},[76,73916,73917],{"class":2035},"getMinutes",[76,73919,13122],{"class":93},[76,73921,1109],{"class":89},[76,73923,2110],{"class":250},[76,73925,73884],{"class":89},[76,73927,73887],{"class":305},[76,73929,45636],{"class":89},[76,73931,73872],{"class":93},[76,73933,73917],{"class":2035},[76,73935,13122],{"class":93},[76,73937,1058],{"class":89},[76,73939,73872],{"class":93},[76,73941,73917],{"class":2035},[76,73943,2048],{"class":93},[76,73945,73946,73948,73950,73952,73954,73957,73959,73961,73963,73965,73967,73969,73971,73973,73975,73977,73979,73981],{"class":78,"line":33643},[76,73947,58298],{"class":89},[76,73949,8500],{"class":250},[76,73951,13636],{"class":89},[76,73953,73872],{"class":93},[76,73955,73956],{"class":2035},"getSeconds",[76,73958,13122],{"class":93},[76,73960,1109],{"class":89},[76,73962,2110],{"class":250},[76,73964,73884],{"class":89},[76,73966,73887],{"class":305},[76,73968,45636],{"class":89},[76,73970,73872],{"class":93},[76,73972,73956],{"class":2035},[76,73974,13122],{"class":93},[76,73976,1058],{"class":89},[76,73978,73872],{"class":93},[76,73980,73956],{"class":2035},[76,73982,2048],{"class":93},[76,73984,73985,73987,73990,73992,73994,73997,73999,74002,74004,74007,74009,74011,74014,74016,74018,74020,74022,74024,74026,74029,74031,74034,74036,74039,74041,74043,74045],{"class":78,"line":33649},[76,73986,58298],{"class":89},[76,73988,73989],{"class":250}," str",[76,73991,13636],{"class":89},[76,73993,62973],{"class":305},[76,73995,73996],{"class":93},"date",[76,73998,757],{"class":305},[76,74000,74001],{"class":2035},"getFullYear",[76,74003,2499],{"class":305},[76,74005,74006],{"class":305},"}\u002F${",[76,74008,73996],{"class":93},[76,74010,757],{"class":305},[76,74012,74013],{"class":2035},"getMonth",[76,74015,13122],{"class":305},[76,74017,681],{"class":89},[76,74019,25191],{"class":250},[76,74021,74006],{"class":305},[76,74023,73996],{"class":93},[76,74025,757],{"class":305},[76,74027,74028],{"class":2035},"getDate",[76,74030,2499],{"class":305},[76,74032,74033],{"class":305},"} ${",[76,74035,615],{"class":93},[76,74037,74038],{"class":305},"}:${",[76,74040,743],{"class":93},[76,74042,74038],{"class":305},[76,74044,894],{"class":93},[76,74046,74047],{"class":305},"}`\n",[76,74049,74050,74053],{"class":78,"line":33655},[76,74051,74052],{"class":89},"      return",[76,74054,74055],{"class":93}," str\n",[76,74057,74058],{"class":78,"line":33661},[76,74059,2259],{"class":93},[76,74061,74062],{"class":78,"line":33688},[76,74063,74064],{"class":82},"    \u002F\u002F 渲染函数\n",[76,74066,74067,74069,74071,74073,74075,74077,74079,74081],{"class":78,"line":33712},[76,74068,11293],{"class":89},[76,74070,69817],{"class":250},[76,74072,13636],{"class":89},[76,74074,54466],{"class":93},[76,74076,54469],{"class":2035},[76,74078,202],{"class":93},[76,74080,69828],{"class":305},[76,74082,208],{"class":93},[76,74084,74085,74087,74089],{"class":78,"line":33718},[76,74086,70154],{"class":89},[76,74088,70157],{"class":2035},[76,74090,10925],{"class":93},[76,74092,74093],{"class":78,"line":33724},[76,74094,74095],{"class":82},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[76,74097,74098],{"class":78,"line":33730},[76,74099,74100],{"class":82},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[76,74102,74103,74105,74108,74110,74112,74115,74117,74119,74121,74124,74126,74129],{"class":78,"line":33741},[76,74104,58298],{"class":89},[76,74106,74107],{"class":250}," trArr",[76,74109,13636],{"class":89},[76,74111,52035],{"class":93},[76,74113,74114],{"class":2035},"map",[76,74116,202],{"class":93},[76,74118,54519],{"class":89},[76,74120,1730],{"class":93},[76,74122,74123],{"class":5288},"ele",[76,74125,12507],{"class":93},[76,74127,74128],{"class":5288},"index",[76,74130,12514],{"class":93},[76,74132,74133,74135],{"class":78,"line":33752},[76,74134,14824],{"class":89},[76,74136,70238],{"class":305},[76,74138,74139],{"class":78,"line":33758},[76,74140,74141],{"class":305},"      \u003Ctr>\n",[76,74143,74144,74146,74148,74150,74153],{"class":78,"line":33775},[76,74145,70243],{"class":305},[76,74147,74123],{"class":93},[76,74149,757],{"class":305},[76,74151,74152],{"class":93},"unameId",[76,74154,70258],{"class":305},[76,74156,74157,74159,74161,74163,74165],{"class":78,"line":33798},[76,74158,70243],{"class":305},[76,74160,74123],{"class":93},[76,74162,757],{"class":305},[76,74164,70274],{"class":93},[76,74166,70258],{"class":305},[76,74168,74169,74171,74173,74175,74177],{"class":78,"line":33821},[76,74170,70243],{"class":305},[76,74172,74123],{"class":93},[76,74174,757],{"class":305},[76,74176,70291],{"class":93},[76,74178,70258],{"class":305},[76,74180,74181,74183,74185,74187,74189],{"class":78,"line":33827},[76,74182,70243],{"class":305},[76,74184,74123],{"class":93},[76,74186,757],{"class":305},[76,74188,70308],{"class":93},[76,74190,70258],{"class":305},[76,74192,74193,74195,74197,74199,74201],{"class":78,"line":33832},[76,74194,70243],{"class":305},[76,74196,74123],{"class":93},[76,74198,757],{"class":305},[76,74200,70325],{"class":93},[76,74202,70258],{"class":305},[76,74204,74205,74207,74209,74211,74213],{"class":78,"line":33841},[76,74206,70243],{"class":305},[76,74208,74123],{"class":93},[76,74210,757],{"class":305},[76,74212,70342],{"class":93},[76,74214,70258],{"class":305},[76,74216,74217,74219,74221,74223,74225],{"class":78,"line":33851},[76,74218,70243],{"class":305},[76,74220,74123],{"class":93},[76,74222,757],{"class":305},[76,74224,2459],{"class":93},[76,74226,70258],{"class":305},[76,74228,74229],{"class":78,"line":33857},[76,74230,73685],{"class":305},[76,74232,74233,74236,74238],{"class":78,"line":33862},[76,74234,74235],{"class":305},"          \u003Ca href=\"#\" data-id=\"${",[76,74237,74128],{"class":93},[76,74239,74240],{"class":305},"}\">删除\u003C\u002Fa>\n",[76,74242,74243],{"class":78,"line":33868},[76,74244,73695],{"class":305},[76,74246,74247],{"class":78,"line":33881},[76,74248,74249],{"class":305},"      \u003C\u002Ftr>\n",[76,74251,74252],{"class":78,"line":33887},[76,74253,74254],{"class":305},"  `\n",[76,74256,74257],{"class":78,"line":33898},[76,74258,64885],{"class":93},[76,74260,74261,74263,74265],{"class":78,"line":33909},[76,74262,58314],{"class":93},[76,74264,58317],{"class":2035},[76,74266,74267],{"class":93},"(trArr)\n",[76,74269,74270],{"class":78,"line":33928},[76,74271,2472],{"emptyLinePlaceholder":125},[76,74273,74274],{"class":78,"line":49588},[76,74275,74276],{"class":82},"      \u002F\u002F (2) 把数组转换为字符串join\n",[76,74278,74279],{"class":78,"line":49593},[76,74280,74281],{"class":82},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[76,74283,74284,74286,74288,74291,74294,74296,74299],{"class":78,"line":49602},[76,74285,70169],{"class":93},[76,74287,247],{"class":89},[76,74289,74290],{"class":93}," trArr.",[76,74292,74293],{"class":2035},"join",[76,74295,202],{"class":93},[76,74297,74298],{"class":305},"''",[76,74300,208],{"class":93},[76,74302,74303],{"class":78,"line":49611},[76,74304,74305],{"class":82},"      \u002F\u002F 显示共有几条\n",[76,74307,74308,74310,74312,74314,74317,74320,74322,74324],{"class":78,"line":49616},[76,74309,55841],{"class":93},[76,74311,54469],{"class":2035},[76,74313,202],{"class":93},[76,74315,74316],{"class":305},"'.total span'",[76,74318,74319],{"class":93},").innerHTML ",[76,74321,247],{"class":89},[76,74323,52035],{"class":93},[76,74325,55901],{"class":250},[76,74327,74328],{"class":78,"line":49621},[76,74329,2259],{"class":93},[76,74331,74332],{"class":78,"line":49626},[76,74333,74334],{"class":82},"    \u002F\u002F render()\n",[76,74336,74337],{"class":78,"line":49639},[76,74338,2472],{"emptyLinePlaceholder":125},[76,74340,74341],{"class":78,"line":49644},[76,74342,74343],{"class":82},"    \u002F\u002F 获取DOM对象\n",[76,74345,74346,74348,74350,74352,74354,74356,74358,74360],{"class":78,"line":49653},[76,74347,11293],{"class":89},[76,74349,69891],{"class":250},[76,74351,13636],{"class":89},[76,74353,54466],{"class":93},[76,74355,54469],{"class":2035},[76,74357,202],{"class":93},[76,74359,69902],{"class":305},[76,74361,208],{"class":93},[76,74363,74364,74366,74368,74370,74372,74374,74376,74378],{"class":78,"line":49662},[76,74365,11293],{"class":89},[76,74367,69718],{"class":250},[76,74369,13636],{"class":89},[76,74371,54466],{"class":93},[76,74373,54469],{"class":2035},[76,74375,202],{"class":93},[76,74377,69729],{"class":305},[76,74379,208],{"class":93},[76,74381,74382,74384,74386,74388,74390,74392,74394,74396],{"class":78,"line":49679},[76,74383,11293],{"class":89},[76,74385,15761],{"class":250},[76,74387,13636],{"class":89},[76,74389,54466],{"class":93},[76,74391,54469],{"class":2035},[76,74393,202],{"class":93},[76,74395,69748],{"class":305},[76,74397,208],{"class":93},[76,74399,74401,74403,74405,74407,74409,74411,74413,74415],{"class":78,"line":74400},231,[76,74402,11293],{"class":89},[76,74404,69777],{"class":250},[76,74406,13636],{"class":89},[76,74408,54466],{"class":93},[76,74410,54469],{"class":2035},[76,74412,202],{"class":93},[76,74414,69788],{"class":305},[76,74416,208],{"class":93},[76,74418,74420,74422,74424,74426,74428,74430,74432,74434],{"class":78,"line":74419},232,[76,74421,11293],{"class":89},[76,74423,69757],{"class":250},[76,74425,13636],{"class":89},[76,74427,54466],{"class":93},[76,74429,54469],{"class":2035},[76,74431,202],{"class":93},[76,74433,69768],{"class":305},[76,74435,208],{"class":93},[76,74437,74439,74441,74443,74445,74447,74449,74451,74453],{"class":78,"line":74438},233,[76,74440,11293],{"class":89},[76,74442,69797],{"class":250},[76,74444,13636],{"class":89},[76,74446,54466],{"class":93},[76,74448,54469],{"class":2035},[76,74450,202],{"class":93},[76,74452,69808],{"class":305},[76,74454,208],{"class":93},[76,74456,74458],{"class":78,"line":74457},234,[76,74459,2472],{"emptyLinePlaceholder":125},[76,74461,74463],{"class":78,"line":74462},235,[76,74464,74465],{"class":82},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[76,74467,74469,74471,74473,74475,74477,74479,74481,74483,74485],{"class":78,"line":74468},236,[76,74470,69909],{"class":93},[76,74472,57883],{"class":2035},[76,74474,202],{"class":93},[76,74476,69916],{"class":305},[76,74478,12507],{"class":93},[76,74480,54519],{"class":89},[76,74482,1730],{"class":93},[76,74484,275],{"class":5288},[76,74486,12514],{"class":93},[76,74488,74490],{"class":78,"line":74489},237,[76,74491,74492],{"class":82},"      \u002F\u002F 禁止浏览器跳转\n",[76,74494,74496,74498,74500],{"class":78,"line":74495},238,[76,74497,69936],{"class":93},[76,74499,69939],{"class":2035},[76,74501,2048],{"class":93},[76,74503,74505],{"class":78,"line":74504},239,[76,74506,74507],{"class":82},"      \u002F\u002F 非空判断\n",[76,74509,74511],{"class":78,"line":74510},240,[76,74512,74513],{"class":82},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[76,74515,74517],{"class":78,"line":74516},241,[76,74518,74519],{"class":82},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[76,74521,74523,74525,74527,74529,74532,74534,74537,74540,74542,74544],{"class":78,"line":74522},242,[76,74524,54550],{"class":89},[76,74526,1730],{"class":93},[76,74528,427],{"class":89},[76,74530,74531],{"class":93},"uname.value ",[76,74533,71427],{"class":89},[76,74535,74536],{"class":89}," !",[76,74538,74539],{"class":93},"age.value ",[76,74541,71427],{"class":89},[76,74543,74536],{"class":89},[76,74545,74546],{"class":93},"salary.value) {\n",[76,74548,74550,74552,74554,74556,74558],{"class":78,"line":74549},243,[76,74551,14824],{"class":89},[76,74553,70010],{"class":2035},[76,74555,202],{"class":93},[76,74557,70015],{"class":305},[76,74559,208],{"class":93},[76,74561,74563],{"class":78,"line":74562},244,[76,74564,52468],{"class":93},[76,74566,74568,74570,74572],{"class":78,"line":74567},245,[76,74569,58077],{"class":93},[76,74571,51954],{"class":2035},[76,74573,74574],{"class":93},"({\n",[76,74576,74578],{"class":78,"line":74577},246,[76,74579,74580],{"class":82},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[76,74582,74584],{"class":78,"line":74583},247,[76,74585,74586],{"class":82},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[76,74588,74590],{"class":78,"line":74589},248,[76,74591,74592],{"class":82},"        \u002F\u002F 对象的序号应为数组长度+1\n",[76,74594,74596],{"class":78,"line":74595},249,[76,74597,74598],{"class":82},"        \u002F\u002F unameId: arr.length + 1,\n",[76,74600,74602],{"class":78,"line":74601},250,[76,74603,2472],{"emptyLinePlaceholder":125},[76,74605,74607],{"class":78,"line":74606},251,[76,74608,74609],{"class":82},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[76,74611,74613],{"class":78,"line":74612},252,[76,74614,74615],{"class":82},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[76,74617,74619],{"class":78,"line":74618},253,[76,74620,74621],{"class":82},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[76,74623,74625],{"class":78,"line":74624},254,[76,74626,74627],{"class":82},"        \u002F\u002F 0当假看\n",[76,74629,74631,74634,74636,74638,74641,74643,74645,74647,74650,74652,74654,74657,74659],{"class":78,"line":74630},255,[76,74632,74633],{"class":93},"        unameId: arr.",[76,74635,52038],{"class":250},[76,74637,73884],{"class":89},[76,74639,74640],{"class":93}," arr[arr.",[76,74642,52038],{"class":250},[76,74644,52341],{"class":89},[76,74646,25191],{"class":250},[76,74648,74649],{"class":93},"].unameId ",[76,74651,681],{"class":89},[76,74653,25191],{"class":250},[76,74655,74656],{"class":89}," :",[76,74658,25191],{"class":250},[76,74660,31536],{"class":93},[76,74662,74664],{"class":78,"line":74663},256,[76,74665,70063],{"class":93},[76,74667,74669],{"class":78,"line":74668},257,[76,74670,70068],{"class":93},[76,74672,74674],{"class":78,"line":74673},258,[76,74675,70078],{"class":93},[76,74677,74679],{"class":78,"line":74678},259,[76,74680,70073],{"class":93},[76,74682,74684],{"class":78,"line":74683},260,[76,74685,74686],{"class":93},"        city: city.value,\n",[76,74688,74690],{"class":78,"line":74689},261,[76,74691,74692],{"class":82},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[76,74694,74696],{"class":78,"line":74695},262,[76,74697,74698],{"class":82},"        \u002F\u002F time: new Date().toDateString()\n",[76,74700,74702,74705,74708],{"class":78,"line":74701},263,[76,74703,74704],{"class":93},"        time: ",[76,74706,74707],{"class":2035},"getTime",[76,74709,2048],{"class":93},[76,74711,74713],{"class":78,"line":74712},264,[76,74714,64885],{"class":93},[76,74716,74718],{"class":78,"line":74717},265,[76,74719,74720],{"class":82},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[76,74722,74724,74726],{"class":78,"line":74723},266,[76,74725,70138],{"class":2035},[76,74727,2048],{"class":93},[76,74729,74731,74733,74735,74737,74739],{"class":78,"line":74730},267,[76,74732,70121],{"class":250},[76,74734,757],{"class":93},[76,74736,70126],{"class":2035},[76,74738,13122],{"class":93},[76,74740,74741],{"class":82},"\u002F\u002F重置表单\n",[76,74743,74745],{"class":78,"line":74744},268,[76,74746,74747],{"class":82},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[76,74749,74751,74754,74756,74758,74761,74763,74765,74767,74769],{"class":78,"line":74750},269,[76,74752,74753],{"class":93},"      localStorage.",[76,74755,71724],{"class":2035},[76,74757,202],{"class":93},[76,74759,74760],{"class":305},"'data'",[76,74762,12507],{"class":93},[76,74764,71734],{"class":250},[76,74766,757],{"class":93},[76,74768,71739],{"class":2035},[76,74770,74771],{"class":93},"(arr))\n",[76,74773,74775],{"class":78,"line":74774},270,[76,74776,33531],{"class":93},[76,74778,74780],{"class":78,"line":74779},271,[76,74781,2472],{"emptyLinePlaceholder":125},[76,74783,74785],{"class":78,"line":74784},272,[76,74786,74787],{"class":82},"    \u002F\u002F 3.删除业务\n",[76,74789,74791],{"class":78,"line":74790},273,[76,74792,74793],{"class":82},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[76,74795,74797,74799,74801,74803,74805,74807,74809,74811,74813],{"class":78,"line":74796},274,[76,74798,70411],{"class":93},[76,74800,57883],{"class":2035},[76,74802,202],{"class":93},[76,74804,57888],{"class":305},[76,74806,12507],{"class":93},[76,74808,54519],{"class":89},[76,74810,1730],{"class":93},[76,74812,275],{"class":5288},[76,74814,12514],{"class":93},[76,74816,74818],{"class":78,"line":74817},275,[76,74819,74820],{"class":82},"      \u002F\u002F 判断是否点击的是删除按钮\n",[76,74822,74824,74826,74828,74830,74832],{"class":78,"line":74823},276,[76,74825,54550],{"class":89},[76,74827,67104],{"class":93},[76,74829,54556],{"class":89},[76,74831,68326],{"class":305},[76,74833,12514],{"class":93},[76,74835,74837],{"class":78,"line":74836},277,[76,74838,74839],{"class":82},"        \u002F\u002F alert(1)\n",[76,74841,74843],{"class":78,"line":74842},278,[76,74844,74845],{"class":82},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[76,74847,74849],{"class":78,"line":74848},279,[76,74850,74851],{"class":82},"        \u002F\u002F console.log(e.target)\n",[76,74853,74855],{"class":78,"line":74854},280,[76,74856,74857],{"class":82},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[76,74859,74861],{"class":78,"line":74860},281,[76,74862,2472],{"emptyLinePlaceholder":125},[76,74864,74866],{"class":78,"line":74865},282,[76,74867,74868],{"class":82},"        \u002F\u002F 确认框，确然是否真的要删除\n",[76,74870,74872],{"class":78,"line":74871},283,[76,74873,74874],{"class":82},"        \u002F\u002F confirm()为确认框\n",[76,74876,74878],{"class":78,"line":74877},284,[76,74879,74880],{"class":82},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[76,74882,74884,74886,74888,74891,74893,74896],{"class":78,"line":74883},285,[76,74885,2569],{"class":89},[76,74887,1730],{"class":93},[76,74889,74890],{"class":2035},"confirm",[76,74892,202],{"class":93},[76,74894,74895],{"class":305},"'您确定要删除这条数据吗？'",[76,74897,74898],{"class":93},")) {\n",[76,74900,74902,74905,74907,74909,74911],{"class":78,"line":74901},286,[76,74903,74904],{"class":93},"          arr.",[76,74906,58080],{"class":2035},[76,74908,70464],{"class":93},[76,74910,418],{"class":250},[76,74912,208],{"class":93},[76,74914,74916],{"class":78,"line":74915},287,[76,74917,74918],{"class":82},"          \u002F\u002F 3.4 重新渲染页面\n",[76,74920,74922,74925],{"class":78,"line":74921},288,[76,74923,74924],{"class":2035},"          render",[76,74926,2048],{"class":93},[76,74928,74930],{"class":78,"line":74929},289,[76,74931,74932],{"class":82},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[76,74934,74936,74939,74941,74943,74945,74947,74949,74951,74953],{"class":78,"line":74935},290,[76,74937,74938],{"class":93},"          localStorage.",[76,74940,71724],{"class":2035},[76,74942,202],{"class":93},[76,74944,74760],{"class":305},[76,74946,12507],{"class":93},[76,74948,71734],{"class":250},[76,74950,757],{"class":93},[76,74952,71739],{"class":2035},[76,74954,74771],{"class":93},[76,74956,74958],{"class":78,"line":74957},291,[76,74959,2601],{"class":93},[76,74961,74963],{"class":78,"line":74962},292,[76,74964,52468],{"class":93},[76,74966,74968],{"class":78,"line":74967},293,[76,74969,2472],{"emptyLinePlaceholder":125},[76,74971,74973],{"class":78,"line":74972},294,[76,74974,33531],{"class":93},[76,74976,74978],{"class":78,"line":74977},295,[76,74979,2472],{"emptyLinePlaceholder":125},[76,74981,74983,74985,74987],{"class":78,"line":74982},296,[76,74984,52487],{"class":93},[76,74986,51883],{"class":51370},[76,74988,51377],{"class":93},[76,74990,74992,74994,74996],{"class":78,"line":74991},297,[76,74993,51855],{"class":93},[76,74995,51870],{"class":51370},[76,74997,51377],{"class":93},[76,74999,75001],{"class":78,"line":75000},298,[76,75002,2472],{"emptyLinePlaceholder":125},[76,75004,75006,75008,75010],{"class":78,"line":75005},299,[76,75007,51855],{"class":93},[76,75009,50705],{"class":51370},[76,75011,51377],{"class":93},[140,75013,75015],{"id":75014},"_36-正则表达式","3.6 正则表达式",[14,75017,75018],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75020,75021],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75023,75024],{},"正则表达式的作用：",[1206,75026,75027,75034,75040],{},[155,75028,75029,75030,75033],{},"表单验证（ ",[350,75031,75032],{},"匹配"," ）",[155,75035,75036,75037,75033],{},"过滤敏感词（ ",[350,75038,75039],{},"替换",[155,75041,75042,75043,75033],{},"字符串中提取我们想要的部分（ ",[350,75044,75045],{},"提取",[169,75047,75049],{"id":75048},"_361-语法","3.6.1 语法",[14,75051,75052],{},"正则表达式使用步骤：",[152,75054,75055,75058],{},[155,75056,75057],{},"定义规则",[155,75059,75060],{},"查找是否匹配",[14,75062,75063],{},"正则表达式里边不需要写引号",[14,75065,75066],{},[56,75067],{"alt":58,"src":75068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75070,75071],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75073,75074],{},"reg.test(str)",[14,75076,75077],{},[56,75078],{"alt":58,"src":75079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75081,75082],{},[56,75083],{"alt":58,"src":75084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[169,75086,75088],{"id":75087},"_362-元字符","3.6.2 元字符",[152,75090,75091,75094,75097,75100,75107],{},[155,75092,75093],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[155,75095,75096],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[155,75098,75099],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[155,75101,75102,75103],{},"正则验证工具：",[439,75104,75105],{"href":75105,"rel":75106},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23937],[155,75108,75109],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22070,75111,75113],{"id":75112},"_3621-边界符","3.6.2.1 边界符",[14,75115,75116],{},[56,75117],{"alt":58,"src":75118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75120,75121],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75123,75124],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75126,75127],{},"只匹配一次",[14,75129,75130],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22070,75132,75134],{"id":75133},"_3622-量词","3.6.2.2 量词",[14,75136,75137],{},[56,75138],{"alt":58,"src":75139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75141,75142],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22070,75144,75146],{"id":75145},"_3623-元字符","3.6.2.3 元字符",[14,75148,75149],{},[56,75150],{"alt":58,"src":75151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75153,75154],{},"匹配的是a或b或c []只选一个",[14,75156,75157],{},[56,75158],{"alt":58,"src":75159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75161,75162],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75164,75165],{},[56,75166],{"alt":58,"src":75167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75169,75170],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75172,75173],{},[56,75174],{"alt":58,"src":75175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[67,75177,75179],{"className":50703,"code":75178,"language":50705,"meta":58,"style":58},"\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",[73,75180,75181,75191,75205,75209,75217,75231,75251,75263,75271,75275,75283,75291,75296,75327,75354,75382,75386,75391,75419,75450,75455,75460,75491,75523,75555,75559,75564,75595,75625,75655,75659,75664,75695,75726,75756,75786,75790,75795,75828,75832,75837,75868,75899,75903,75908,75939,75969,76000,76004,76009,76041,76072,76103,76130,76161,76193,76226,76257,76288,76320,76351,76359,76367,76371],{"__ignoreMap":58},[76,75182,75183,75185,75187,75189],{"class":78,"line":79},[76,75184,51367],{"class":93},[76,75186,51371],{"class":51370},[76,75188,51374],{"class":2035},[76,75190,51377],{"class":93},[76,75192,75193,75195,75197,75199,75201,75203],{"class":78,"line":86},[76,75194,1109],{"class":93},[76,75196,50705],{"class":51370},[76,75198,51386],{"class":2035},[76,75200,247],{"class":93},[76,75202,51391],{"class":305},[76,75204,51377],{"class":93},[76,75206,75207],{"class":78,"line":97},[76,75208,2472],{"emptyLinePlaceholder":125},[76,75210,75211,75213,75215],{"class":78,"line":103},[76,75212,1109],{"class":93},[76,75214,51404],{"class":51370},[76,75216,51377],{"class":93},[76,75218,75219,75221,75223,75225,75227,75229],{"class":78,"line":1273},[76,75220,52214],{"class":93},[76,75222,51414],{"class":51370},[76,75224,51417],{"class":2035},[76,75226,247],{"class":93},[76,75228,51422],{"class":305},[76,75230,51377],{"class":93},[76,75232,75233,75235,75237,75239,75241,75243,75245,75247,75249],{"class":78,"line":1287},[76,75234,52214],{"class":93},[76,75236,51414],{"class":51370},[76,75238,14992],{"class":2035},[76,75240,247],{"class":93},[76,75242,51461],{"class":305},[76,75244,51441],{"class":2035},[76,75246,247],{"class":93},[76,75248,51468],{"class":305},[76,75250,51377],{"class":93},[76,75252,75253,75255,75257,75259,75261],{"class":78,"line":1293},[76,75254,52214],{"class":93},[76,75256,51477],{"class":51370},[76,75258,51480],{"class":93},[76,75260,51477],{"class":51370},[76,75262,51377],{"class":93},[76,75264,75265,75267,75269],{"class":78,"line":1384},[76,75266,51855],{"class":93},[76,75268,51404],{"class":51370},[76,75270,51377],{"class":93},[76,75272,75273],{"class":78,"line":1390},[76,75274,2472],{"emptyLinePlaceholder":125},[76,75276,75277,75279,75281],{"class":78,"line":1402},[76,75278,1109],{"class":93},[76,75280,51870],{"class":51370},[76,75282,51377],{"class":93},[76,75284,75285,75287,75289],{"class":78,"line":1684},[76,75286,52214],{"class":93},[76,75288,51883],{"class":51370},[76,75290,51377],{"class":93},[76,75292,75293],{"class":78,"line":1689},[76,75294,75295],{"class":82},"    \u002F\u002F 元字符中\n",[76,75297,75298,75300,75302,75304,75306,75309,75311,75313,75316,75318,75321,75324],{"class":78,"line":1695},[76,75299,73823],{"class":93},[76,75301,58317],{"class":2035},[76,75303,202],{"class":93},[76,75305,783],{"class":305},[76,75307,75308],{"class":48047},"哈",[76,75310,783],{"class":305},[76,75312,757],{"class":93},[76,75314,75315],{"class":2035},"test",[76,75317,202],{"class":93},[76,75319,75320],{"class":305},"'哈'",[76,75322,75323],{"class":93},"))  ",[76,75325,75326],{"class":82},"\u002F\u002Ftrue\n",[76,75328,75329,75331,75333,75335,75337,75339,75341,75343,75345,75347,75350,75352],{"class":78,"line":1700},[76,75330,73823],{"class":93},[76,75332,58317],{"class":2035},[76,75334,202],{"class":93},[76,75336,783],{"class":305},[76,75338,75308],{"class":48047},[76,75340,783],{"class":305},[76,75342,757],{"class":93},[76,75344,75315],{"class":2035},[76,75346,202],{"class":93},[76,75348,75349],{"class":305},"'哈哈'",[76,75351,75323],{"class":93},[76,75353,75326],{"class":82},[76,75355,75356,75358,75360,75362,75364,75366,75368,75370,75372,75374,75377,75380],{"class":78,"line":1714},[76,75357,73823],{"class":93},[76,75359,58317],{"class":2035},[76,75361,202],{"class":93},[76,75363,783],{"class":305},[76,75365,75308],{"class":48047},[76,75367,783],{"class":305},[76,75369,757],{"class":93},[76,75371,75315],{"class":2035},[76,75373,202],{"class":93},[76,75375,75376],{"class":305},"'二哈'",[76,75378,75379],{"class":93},"))   ",[76,75381,75326],{"class":82},[76,75383,75384],{"class":78,"line":1719},[76,75385,2472],{"emptyLinePlaceholder":125},[76,75387,75388],{"class":78,"line":1725},[76,75389,75390],{"class":82},"    \u002F\u002F 1.边界符\n",[76,75392,75393,75395,75397,75399,75401,75403,75405,75407,75409,75411,75413,75415,75417],{"class":78,"line":1746},[76,75394,73823],{"class":93},[76,75396,58317],{"class":2035},[76,75398,202],{"class":93},[76,75400,783],{"class":305},[76,75402,1165],{"class":89},[76,75404,75308],{"class":48047},[76,75406,783],{"class":305},[76,75408,757],{"class":93},[76,75410,75315],{"class":2035},[76,75412,202],{"class":93},[76,75414,75320],{"class":305},[76,75416,75323],{"class":93},[76,75418,75326],{"class":82},[76,75420,75421,75423,75425,75427,75429,75431,75433,75435,75437,75439,75441,75443,75445,75447],{"class":78,"line":1751},[76,75422,73823],{"class":93},[76,75424,58317],{"class":2035},[76,75426,202],{"class":93},[76,75428,783],{"class":305},[76,75430,1165],{"class":89},[76,75432,75308],{"class":48047},[76,75434,503],{"class":89},[76,75436,783],{"class":305},[76,75438,757],{"class":93},[76,75440,75315],{"class":2035},[76,75442,202],{"class":93},[76,75444,75349],{"class":305},[76,75446,75323],{"class":93},[76,75448,75449],{"class":82},"\u002F\u002Ffalse\n",[76,75451,75452],{"class":78,"line":1765},[76,75453,75454],{"class":82},"    \u002F\u002F 2.量词\n",[76,75456,75457],{"class":78,"line":1770},[76,75458,75459],{"class":82},"    \u002F\u002F 量词 * 类似于 >= 0\n",[76,75461,75462,75464,75466,75468,75470,75472,75474,75477,75479,75481,75483,75485,75487,75489],{"class":78,"line":1799},[76,75463,73823],{"class":93},[76,75465,58317],{"class":2035},[76,75467,202],{"class":93},[76,75469,783],{"class":305},[76,75471,1165],{"class":89},[76,75473,75308],{"class":48047},[76,75475,75476],{"class":89},"*$",[76,75478,783],{"class":305},[76,75480,757],{"class":93},[76,75482,75315],{"class":2035},[76,75484,202],{"class":93},[76,75486,75349],{"class":305},[76,75488,75323],{"class":93},[76,75490,75326],{"class":82},[76,75492,75493,75495,75497,75499,75501,75503,75505,75507,75509,75511,75513,75515,75518,75520],{"class":78,"line":1804},[76,75494,73823],{"class":93},[76,75496,58317],{"class":2035},[76,75498,202],{"class":93},[76,75500,783],{"class":305},[76,75502,1165],{"class":89},[76,75504,75308],{"class":48047},[76,75506,75476],{"class":89},[76,75508,783],{"class":305},[76,75510,757],{"class":93},[76,75512,75315],{"class":2035},[76,75514,202],{"class":93},[76,75516,75517],{"class":305},"'二哈好傻'",[76,75519,75323],{"class":93},[76,75521,75522],{"class":82},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[76,75524,75525,75527,75529,75531,75533,75535,75537,75539,75541,75543,75545,75547,75550,75552],{"class":78,"line":1821},[76,75526,73823],{"class":93},[76,75528,58317],{"class":2035},[76,75530,202],{"class":93},[76,75532,783],{"class":305},[76,75534,1165],{"class":89},[76,75536,75308],{"class":48047},[76,75538,75476],{"class":89},[76,75540,783],{"class":305},[76,75542,757],{"class":93},[76,75544,75315],{"class":2035},[76,75546,202],{"class":93},[76,75548,75549],{"class":305},"'哈好哈'",[76,75551,75379],{"class":93},[76,75553,75554],{"class":82},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[76,75556,75557],{"class":78,"line":1826},[76,75558,2472],{"emptyLinePlaceholder":125},[76,75560,75561],{"class":78,"line":1831},[76,75562,75563],{"class":82},"    \u002F\u002F +类似于>=1\n",[76,75565,75566,75568,75570,75572,75574,75576,75578,75581,75583,75585,75587,75589,75591,75593],{"class":78,"line":1836},[76,75567,73823],{"class":93},[76,75569,58317],{"class":2035},[76,75571,202],{"class":93},[76,75573,783],{"class":305},[76,75575,1165],{"class":89},[76,75577,75308],{"class":48047},[76,75579,75580],{"class":89},"+$",[76,75582,783],{"class":305},[76,75584,757],{"class":93},[76,75586,75315],{"class":2035},[76,75588,202],{"class":93},[76,75590,75349],{"class":305},[76,75592,75323],{"class":93},[76,75594,75326],{"class":82},[76,75596,75597,75599,75601,75603,75605,75607,75609,75611,75613,75615,75617,75619,75621,75623],{"class":78,"line":1850},[76,75598,73823],{"class":93},[76,75600,58317],{"class":2035},[76,75602,202],{"class":93},[76,75604,783],{"class":305},[76,75606,1165],{"class":89},[76,75608,75308],{"class":48047},[76,75610,75580],{"class":89},[76,75612,783],{"class":305},[76,75614,757],{"class":93},[76,75616,75315],{"class":2035},[76,75618,202],{"class":93},[76,75620,75517],{"class":305},[76,75622,75323],{"class":93},[76,75624,75522],{"class":82},[76,75626,75627,75629,75631,75633,75635,75637,75639,75641,75643,75645,75647,75649,75651,75653],{"class":78,"line":1855},[76,75628,73823],{"class":93},[76,75630,58317],{"class":2035},[76,75632,202],{"class":93},[76,75634,783],{"class":305},[76,75636,1165],{"class":89},[76,75638,75308],{"class":48047},[76,75640,75580],{"class":89},[76,75642,783],{"class":305},[76,75644,757],{"class":93},[76,75646,75315],{"class":2035},[76,75648,202],{"class":93},[76,75650,75549],{"class":305},[76,75652,75379],{"class":93},[76,75654,75449],{"class":82},[76,75656,75657],{"class":78,"line":2649},[76,75658,2472],{"emptyLinePlaceholder":125},[76,75660,75661],{"class":78,"line":2663},[76,75662,75663],{"class":82},"    \u002F\u002F ?类似于0次或一次\n",[76,75665,75666,75668,75670,75672,75674,75676,75679,75681,75683,75685,75687,75689,75691,75693],{"class":78,"line":2671},[76,75667,73823],{"class":93},[76,75669,58317],{"class":2035},[76,75671,202],{"class":93},[76,75673,783],{"class":305},[76,75675,1165],{"class":89},[76,75677,75678],{"class":48047},"哈？",[76,75680,503],{"class":89},[76,75682,783],{"class":305},[76,75684,757],{"class":93},[76,75686,75315],{"class":2035},[76,75688,202],{"class":93},[76,75690,74298],{"class":305},[76,75692,75379],{"class":93},[76,75694,75326],{"class":82},[76,75696,75697,75699,75701,75703,75705,75707,75709,75712,75714,75716,75718,75720,75722,75724],{"class":78,"line":2676},[76,75698,73823],{"class":93},[76,75700,58317],{"class":2035},[76,75702,202],{"class":93},[76,75704,783],{"class":305},[76,75706,1165],{"class":89},[76,75708,75308],{"class":48047},[76,75710,75711],{"class":89},"?$",[76,75713,783],{"class":305},[76,75715,757],{"class":93},[76,75717,75315],{"class":2035},[76,75719,202],{"class":93},[76,75721,75349],{"class":305},[76,75723,75323],{"class":93},[76,75725,75449],{"class":82},[76,75727,75728,75730,75732,75734,75736,75738,75740,75742,75744,75746,75748,75750,75752,75754],{"class":78,"line":2682},[76,75729,73823],{"class":93},[76,75731,58317],{"class":2035},[76,75733,202],{"class":93},[76,75735,783],{"class":305},[76,75737,1165],{"class":89},[76,75739,75308],{"class":48047},[76,75741,75711],{"class":89},[76,75743,783],{"class":305},[76,75745,757],{"class":93},[76,75747,75315],{"class":2035},[76,75749,202],{"class":93},[76,75751,75517],{"class":305},[76,75753,75323],{"class":93},[76,75755,75522],{"class":82},[76,75757,75758,75760,75762,75764,75766,75768,75770,75772,75774,75776,75778,75780,75782,75784],{"class":78,"line":2688},[76,75759,73823],{"class":93},[76,75761,58317],{"class":2035},[76,75763,202],{"class":93},[76,75765,783],{"class":305},[76,75767,1165],{"class":89},[76,75769,75308],{"class":48047},[76,75771,75711],{"class":89},[76,75773,783],{"class":305},[76,75775,757],{"class":93},[76,75777,75315],{"class":2035},[76,75779,202],{"class":93},[76,75781,75549],{"class":305},[76,75783,75323],{"class":93},[76,75785,75449],{"class":82},[76,75787,75788],{"class":78,"line":2693},[76,75789,2472],{"emptyLinePlaceholder":125},[76,75791,75792],{"class":78,"line":8020},[76,75793,75794],{"class":82},"    \u002F\u002F {n}写几，就必须出现几次\n",[76,75796,75797,75799,75801,75803,75805,75807,75809,75812,75814,75816,75818,75820,75823,75826],{"class":78,"line":8044},[76,75798,73823],{"class":93},[76,75800,58317],{"class":2035},[76,75802,202],{"class":93},[76,75804,783],{"class":305},[76,75806,1165],{"class":89},[76,75808,75308],{"class":48047},[76,75810,75811],{"class":89},"{4}$",[76,75813,783],{"class":305},[76,75815,757],{"class":93},[76,75817,75315],{"class":2035},[76,75819,202],{"class":93},[76,75821,75822],{"class":305},"'哈哈哈哈'",[76,75824,75825],{"class":93},")) ",[76,75827,75326],{"class":82},[76,75829,75830],{"class":78,"line":8049},[76,75831,2472],{"emptyLinePlaceholder":125},[76,75833,75834],{"class":78,"line":8055},[76,75835,75836],{"class":82},"    \u002F\u002F {n,}大于等于n次\n",[76,75838,75839,75841,75843,75845,75847,75849,75851,75854,75856,75858,75860,75862,75864,75866],{"class":78,"line":8082},[76,75840,73823],{"class":93},[76,75842,58317],{"class":2035},[76,75844,202],{"class":93},[76,75846,783],{"class":305},[76,75848,1165],{"class":89},[76,75850,75308],{"class":48047},[76,75852,75853],{"class":89},"{4,}$",[76,75855,783],{"class":305},[76,75857,757],{"class":93},[76,75859,75315],{"class":2035},[76,75861,202],{"class":93},[76,75863,75822],{"class":305},[76,75865,75825],{"class":93},[76,75867,75326],{"class":82},[76,75869,75870,75872,75874,75876,75878,75880,75882,75884,75886,75888,75890,75892,75895,75897],{"class":78,"line":8087},[76,75871,73823],{"class":93},[76,75873,58317],{"class":2035},[76,75875,202],{"class":93},[76,75877,783],{"class":305},[76,75879,1165],{"class":89},[76,75881,75308],{"class":48047},[76,75883,75853],{"class":89},[76,75885,783],{"class":305},[76,75887,757],{"class":93},[76,75889,75315],{"class":2035},[76,75891,202],{"class":93},[76,75893,75894],{"class":305},"'哈哈哈哈哈'",[76,75896,75825],{"class":93},[76,75898,75326],{"class":82},[76,75900,75901],{"class":78,"line":8093},[76,75902,2472],{"emptyLinePlaceholder":125},[76,75904,75905],{"class":78,"line":8105},[76,75906,75907],{"class":82},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[76,75909,75910,75912,75914,75916,75918,75920,75922,75925,75927,75929,75931,75933,75935,75937],{"class":78,"line":8117},[76,75911,73823],{"class":93},[76,75913,58317],{"class":2035},[76,75915,202],{"class":93},[76,75917,783],{"class":305},[76,75919,1165],{"class":89},[76,75921,75308],{"class":48047},[76,75923,75924],{"class":89},"{4,6}$",[76,75926,783],{"class":305},[76,75928,757],{"class":93},[76,75930,75315],{"class":2035},[76,75932,202],{"class":93},[76,75934,75822],{"class":305},[76,75936,75825],{"class":93},[76,75938,75326],{"class":82},[76,75940,75941,75943,75945,75947,75949,75951,75953,75955,75957,75959,75961,75963,75965,75967],{"class":78,"line":8129},[76,75942,73823],{"class":93},[76,75944,58317],{"class":2035},[76,75946,202],{"class":93},[76,75948,783],{"class":305},[76,75950,1165],{"class":89},[76,75952,75308],{"class":48047},[76,75954,75924],{"class":89},[76,75956,783],{"class":305},[76,75958,757],{"class":93},[76,75960,75315],{"class":2035},[76,75962,202],{"class":93},[76,75964,75894],{"class":305},[76,75966,75825],{"class":93},[76,75968,75326],{"class":82},[76,75970,75971,75973,75975,75977,75979,75981,75983,75985,75987,75989,75991,75993,75996,75998],{"class":78,"line":9788},[76,75972,73823],{"class":93},[76,75974,58317],{"class":2035},[76,75976,202],{"class":93},[76,75978,783],{"class":305},[76,75980,1165],{"class":89},[76,75982,75308],{"class":48047},[76,75984,75924],{"class":89},[76,75986,783],{"class":305},[76,75988,757],{"class":93},[76,75990,75315],{"class":2035},[76,75992,202],{"class":93},[76,75994,75995],{"class":305},"'哈哈哈哈哈哈哈'",[76,75997,75825],{"class":93},[76,75999,75449],{"class":82},[76,76001,76002],{"class":78,"line":9813},[76,76003,2472],{"emptyLinePlaceholder":125},[76,76005,76006],{"class":78,"line":9836},[76,76007,76008],{"class":82},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[76,76010,76011,76013,76015,76017,76019,76021,76024,76026,76028,76030,76032,76034,76037,76039],{"class":78,"line":9860},[76,76012,73823],{"class":93},[76,76014,58317],{"class":2035},[76,76016,202],{"class":93},[76,76018,783],{"class":305},[76,76020,1165],{"class":89},[76,76022,76023],{"class":250},"[abc]",[76,76025,503],{"class":89},[76,76027,783],{"class":305},[76,76029,757],{"class":93},[76,76031,75315],{"class":2035},[76,76033,202],{"class":93},[76,76035,76036],{"class":305},"'a'",[76,76038,75323],{"class":93},[76,76040,75326],{"class":82},[76,76042,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063,76065,76068,76070],{"class":78,"line":9865},[76,76044,73823],{"class":93},[76,76046,58317],{"class":2035},[76,76048,202],{"class":93},[76,76050,783],{"class":305},[76,76052,1165],{"class":89},[76,76054,76023],{"class":250},[76,76056,503],{"class":89},[76,76058,783],{"class":305},[76,76060,757],{"class":93},[76,76062,75315],{"class":2035},[76,76064,202],{"class":93},[76,76066,76067],{"class":305},"'b'",[76,76069,75323],{"class":93},[76,76071,75326],{"class":82},[76,76073,76074,76076,76078,76080,76082,76084,76086,76088,76090,76092,76094,76096,76099,76101],{"class":78,"line":9870},[76,76075,73823],{"class":93},[76,76077,58317],{"class":2035},[76,76079,202],{"class":93},[76,76081,783],{"class":305},[76,76083,1165],{"class":89},[76,76085,76023],{"class":250},[76,76087,503],{"class":89},[76,76089,783],{"class":305},[76,76091,757],{"class":93},[76,76093,75315],{"class":2035},[76,76095,202],{"class":93},[76,76097,76098],{"class":305},"'c'",[76,76100,75323],{"class":93},[76,76102,75326],{"class":82},[76,76104,76105,76107,76109,76111,76113,76115,76117,76119,76121,76123,76126,76128],{"class":78,"line":9875},[76,76106,73823],{"class":93},[76,76108,58317],{"class":2035},[76,76110,202],{"class":93},[76,76112,783],{"class":305},[76,76114,76023],{"class":250},[76,76116,783],{"class":305},[76,76118,757],{"class":93},[76,76120,75315],{"class":2035},[76,76122,202],{"class":93},[76,76124,76125],{"class":305},"'ab'",[76,76127,75323],{"class":93},[76,76129,75326],{"class":82},[76,76131,76132,76134,76136,76138,76140,76142,76144,76146,76148,76150,76152,76154,76156,76158],{"class":78,"line":9884},[76,76133,73823],{"class":93},[76,76135,58317],{"class":2035},[76,76137,202],{"class":93},[76,76139,783],{"class":305},[76,76141,1165],{"class":89},[76,76143,76023],{"class":250},[76,76145,503],{"class":89},[76,76147,783],{"class":305},[76,76149,757],{"class":93},[76,76151,75315],{"class":2035},[76,76153,202],{"class":93},[76,76155,76125],{"class":305},[76,76157,75323],{"class":93},[76,76159,76160],{"class":82},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[76,76162,76163,76165,76167,76169,76171,76173,76175,76178,76180,76182,76184,76186,76188,76190],{"class":78,"line":9889},[76,76164,73823],{"class":93},[76,76166,58317],{"class":2035},[76,76168,202],{"class":93},[76,76170,783],{"class":305},[76,76172,1165],{"class":89},[76,76174,76023],{"class":250},[76,76176,76177],{"class":89},"{2}$",[76,76179,783],{"class":305},[76,76181,757],{"class":93},[76,76183,75315],{"class":2035},[76,76185,202],{"class":93},[76,76187,76125],{"class":305},[76,76189,75323],{"class":93},[76,76191,76192],{"class":82},"\u002F\u002Ftrue   可以选两个\n",[76,76194,76195,76197,76199,76201,76203,76205,76208,76210,76212,76214,76216,76218,76221,76223],{"class":78,"line":9895},[76,76196,73823],{"class":93},[76,76198,58317],{"class":2035},[76,76200,202],{"class":93},[76,76202,783],{"class":305},[76,76204,1165],{"class":89},[76,76206,76207],{"class":250},"[a-z]",[76,76209,503],{"class":89},[76,76211,783],{"class":305},[76,76213,757],{"class":93},[76,76215,75315],{"class":2035},[76,76217,202],{"class":93},[76,76219,76220],{"class":305},"'p'",[76,76222,75379],{"class":93},[76,76224,76225],{"class":82},"\u002F\u002Ftrue   依然只能选一个\n",[76,76227,76228,76230,76232,76234,76236,76238,76241,76243,76245,76247,76249,76251,76253,76255],{"class":78,"line":9916},[76,76229,73823],{"class":93},[76,76231,58317],{"class":2035},[76,76233,202],{"class":93},[76,76235,783],{"class":305},[76,76237,1165],{"class":89},[76,76239,76240],{"class":250},"[A-Z]",[76,76242,503],{"class":89},[76,76244,783],{"class":305},[76,76246,757],{"class":93},[76,76248,75315],{"class":2035},[76,76250,202],{"class":93},[76,76252,76220],{"class":305},[76,76254,75379],{"class":93},[76,76256,75449],{"class":82},[76,76258,76259,76261,76263,76265,76267,76269,76271,76273,76275,76277,76279,76281,76284,76286],{"class":78,"line":9922},[76,76260,73823],{"class":93},[76,76262,58317],{"class":2035},[76,76264,202],{"class":93},[76,76266,783],{"class":305},[76,76268,1165],{"class":89},[76,76270,76240],{"class":250},[76,76272,503],{"class":89},[76,76274,783],{"class":305},[76,76276,757],{"class":93},[76,76278,75315],{"class":2035},[76,76280,202],{"class":93},[76,76282,76283],{"class":305},"'P'",[76,76285,75379],{"class":93},[76,76287,75326],{"class":82},[76,76289,76290,76292,76294,76296,76298,76300,76303,76305,76307,76309,76311,76313,76316,76318],{"class":78,"line":9936},[76,76291,73823],{"class":93},[76,76293,58317],{"class":2035},[76,76295,202],{"class":93},[76,76297,783],{"class":305},[76,76299,1165],{"class":89},[76,76301,76302],{"class":250},"[0-9]",[76,76304,503],{"class":89},[76,76306,783],{"class":305},[76,76308,757],{"class":93},[76,76310,75315],{"class":2035},[76,76312,202],{"class":93},[76,76314,76315],{"class":305},"'0'",[76,76317,75379],{"class":93},[76,76319,75326],{"class":82},[76,76321,76322,76324,76326,76328,76330,76332,76335,76337,76339,76341,76343,76345,76347,76349],{"class":78,"line":9942},[76,76323,73823],{"class":93},[76,76325,58317],{"class":2035},[76,76327,202],{"class":93},[76,76329,783],{"class":305},[76,76331,1165],{"class":89},[76,76333,76334],{"class":250},"[a-zA-Z0-9]",[76,76336,503],{"class":89},[76,76338,783],{"class":305},[76,76340,757],{"class":93},[76,76342,75315],{"class":2035},[76,76344,202],{"class":93},[76,76346,76220],{"class":305},[76,76348,75323],{"class":93},[76,76350,75326],{"class":82},[76,76352,76353,76355,76357],{"class":78,"line":9969},[76,76354,52487],{"class":93},[76,76356,51883],{"class":51370},[76,76358,51377],{"class":93},[76,76360,76361,76363,76365],{"class":78,"line":9978},[76,76362,51855],{"class":93},[76,76364,51870],{"class":51370},[76,76366,51377],{"class":93},[76,76368,76369],{"class":78,"line":9984},[76,76370,2472],{"emptyLinePlaceholder":125},[76,76372,76373,76375,76377],{"class":78,"line":9992},[76,76374,51855],{"class":93},[76,76376,50705],{"class":51370},[76,76378,51377],{"class":93},[22070,76380,76382],{"id":76381},"_3624-修饰符","3.6.2.4 修饰符",[14,76384,76385],{},[56,76386],{"alt":58,"src":76387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76389,76390],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76392,76393],{},[56,76394],{"alt":58,"src":76395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[67,76397,76399],{"className":50703,"code":76398,"language":50705,"meta":58,"style":58},"\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",[73,76400,76401,76411,76425,76433,76447,76467,76479,76487,76495,76503,76535,76566,76571,76603,76614,76647,76656,76664,76672],{"__ignoreMap":58},[76,76402,76403,76405,76407,76409],{"class":78,"line":79},[76,76404,51367],{"class":93},[76,76406,51371],{"class":51370},[76,76408,51374],{"class":2035},[76,76410,51377],{"class":93},[76,76412,76413,76415,76417,76419,76421,76423],{"class":78,"line":86},[76,76414,1109],{"class":93},[76,76416,50705],{"class":51370},[76,76418,51386],{"class":2035},[76,76420,247],{"class":93},[76,76422,51391],{"class":305},[76,76424,51377],{"class":93},[76,76426,76427,76429,76431],{"class":78,"line":97},[76,76428,1109],{"class":93},[76,76430,51404],{"class":51370},[76,76432,51377],{"class":93},[76,76434,76435,76437,76439,76441,76443,76445],{"class":78,"line":103},[76,76436,52214],{"class":93},[76,76438,51414],{"class":51370},[76,76440,51417],{"class":2035},[76,76442,247],{"class":93},[76,76444,51422],{"class":305},[76,76446,51377],{"class":93},[76,76448,76449,76451,76453,76455,76457,76459,76461,76463,76465],{"class":78,"line":1273},[76,76450,52214],{"class":93},[76,76452,51414],{"class":51370},[76,76454,14992],{"class":2035},[76,76456,247],{"class":93},[76,76458,51461],{"class":305},[76,76460,51441],{"class":2035},[76,76462,247],{"class":93},[76,76464,51468],{"class":305},[76,76466,51377],{"class":93},[76,76468,76469,76471,76473,76475,76477],{"class":78,"line":1287},[76,76470,52214],{"class":93},[76,76472,51477],{"class":51370},[76,76474,51480],{"class":93},[76,76476,51477],{"class":51370},[76,76478,51377],{"class":93},[76,76480,76481,76483,76485],{"class":78,"line":1293},[76,76482,51855],{"class":93},[76,76484,51404],{"class":51370},[76,76486,51377],{"class":93},[76,76488,76489,76491,76493],{"class":78,"line":1384},[76,76490,1109],{"class":93},[76,76492,51870],{"class":51370},[76,76494,51377],{"class":93},[76,76496,76497,76499,76501],{"class":78,"line":1390},[76,76498,52214],{"class":93},[76,76500,51883],{"class":51370},[76,76502,51377],{"class":93},[76,76504,76505,76507,76509,76511,76513,76515,76518,76520,76522,76524,76526,76528,76531,76533],{"class":78,"line":1402},[76,76506,73823],{"class":93},[76,76508,58317],{"class":2035},[76,76510,202],{"class":93},[76,76512,783],{"class":305},[76,76514,1165],{"class":89},[76,76516,76517],{"class":48047},"java",[76,76519,503],{"class":89},[76,76521,783],{"class":305},[76,76523,757],{"class":93},[76,76525,75315],{"class":2035},[76,76527,202],{"class":93},[76,76529,76530],{"class":305},"'java'",[76,76532,75825],{"class":93},[76,76534,75326],{"class":82},[76,76536,76537,76539,76541,76543,76545,76547,76549,76551,76553,76555,76557,76559,76562,76564],{"class":78,"line":1684},[76,76538,73823],{"class":93},[76,76540,58317],{"class":2035},[76,76542,202],{"class":93},[76,76544,783],{"class":305},[76,76546,1165],{"class":89},[76,76548,76517],{"class":48047},[76,76550,503],{"class":89},[76,76552,783],{"class":305},[76,76554,757],{"class":93},[76,76556,75315],{"class":2035},[76,76558,202],{"class":93},[76,76560,76561],{"class":305},"'Java'",[76,76563,75825],{"class":93},[76,76565,75449],{"class":82},[76,76567,76568],{"class":78,"line":1689},[76,76569,76570],{"class":82},"    \u002F\u002F 不区分大小写、\n",[76,76572,76573,76575,76577,76579,76581,76583,76585,76587,76589,76591,76593,76595,76597,76599,76601],{"class":78,"line":1695},[76,76574,73823],{"class":93},[76,76576,58317],{"class":2035},[76,76578,202],{"class":93},[76,76580,783],{"class":305},[76,76582,1165],{"class":89},[76,76584,76517],{"class":48047},[76,76586,503],{"class":89},[76,76588,783],{"class":305},[76,76590,641],{"class":89},[76,76592,757],{"class":93},[76,76594,75315],{"class":2035},[76,76596,202],{"class":93},[76,76598,76561],{"class":305},[76,76600,75825],{"class":93},[76,76602,75326],{"class":82},[76,76604,76605,76607,76609,76611],{"class":78,"line":1700},[76,76606,11293],{"class":89},[76,76608,73989],{"class":250},[76,76610,13636],{"class":89},[76,76612,76613],{"class":305}," 'java是一门编程语言，学完java工资很高'\n",[76,76615,76616,76618,76621,76623,76626,76629,76631,76633,76635,76637,76640,76642,76645],{"class":78,"line":1714},[76,76617,11293],{"class":89},[76,76619,76620],{"class":250}," result",[76,76622,13636],{"class":89},[76,76624,76625],{"class":93}," str.",[76,76627,76628],{"class":2035},"replace",[76,76630,202],{"class":93},[76,76632,783],{"class":305},[76,76634,76517],{"class":48047},[76,76636,783],{"class":305},[76,76638,76639],{"class":89},"ig",[76,76641,12507],{"class":93},[76,76643,76644],{"class":305},"'前端'",[76,76646,208],{"class":93},[76,76648,76649,76651,76653],{"class":78,"line":1719},[76,76650,73823],{"class":93},[76,76652,58317],{"class":2035},[76,76654,76655],{"class":93},"(result)\n",[76,76657,76658,76660,76662],{"class":78,"line":1725},[76,76659,52487],{"class":93},[76,76661,51883],{"class":51370},[76,76663,51377],{"class":93},[76,76665,76666,76668,76670],{"class":78,"line":1746},[76,76667,51855],{"class":93},[76,76669,51870],{"class":51370},[76,76671,51377],{"class":93},[76,76673,76674,76676,76678],{"class":78,"line":1751},[76,76675,51855],{"class":93},[76,76677,50705],{"class":51370},[76,76679,51377],{"class":93},[117,76681,76682],{},"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":58,"searchDepth":86,"depth":86,"links":76684},[76685,76695,76707,76724,76731,76739],{"id":53430,"depth":86,"text":53431,"children":76686},[76687,76688,76689,76690,76691,76692,76693,76694],{"id":53434,"depth":97,"text":53435},{"id":53467,"depth":97,"text":53468},{"id":53506,"depth":97,"text":53507},{"id":53664,"depth":97,"text":53665},{"id":53712,"depth":97,"text":53713},{"id":53849,"depth":97,"text":53850},{"id":54171,"depth":97,"text":54172},{"id":57159,"depth":97,"text":57160},{"id":57187,"depth":86,"text":57188,"children":76696},[76697,76698,76699,76700,76701,76702,76703,76704,76705,76706],{"id":57191,"depth":97,"text":57192},{"id":57214,"depth":97,"text":57215},{"id":58129,"depth":97,"text":58130},{"id":58819,"depth":97,"text":58820},{"id":59101,"depth":97,"text":59102},{"id":63262,"depth":97,"text":63263},{"id":63432,"depth":97,"text":63433},{"id":63560,"depth":97,"text":63561},{"id":63585,"depth":97,"text":63586},{"id":64974,"depth":97,"text":64975},{"id":66127,"depth":86,"text":66128,"children":76708},[76709,76710,76711,76712,76713,76714,76715,76716,76717,76718,76719,76720,76721,76722,76723],{"id":66131,"depth":97,"text":66132},{"id":66785,"depth":97,"text":66786},{"id":68480,"depth":97,"text":68481},{"id":68521,"depth":97,"text":68522},{"id":68563,"depth":97,"text":68564},{"id":68577,"depth":97,"text":68578},{"id":68626,"depth":97,"text":68627},{"id":68638,"depth":97,"text":68639},{"id":68653,"depth":97,"text":68654},{"id":68689,"depth":97,"text":68690},{"id":68770,"depth":97,"text":68771},{"id":68898,"depth":97,"text":68899},{"id":68910,"depth":97,"text":68911},{"id":68929,"depth":97,"text":68930},{"id":71040,"depth":97,"text":71041},{"id":71059,"depth":86,"text":71060,"children":76725},[76726,76727,76728,76729,76730],{"id":71080,"depth":97,"text":71081},{"id":71100,"depth":97,"text":71101},{"id":71149,"depth":97,"text":71150},{"id":71274,"depth":97,"text":71275},{"id":71455,"depth":97,"text":71456},{"id":71473,"depth":86,"text":71474,"children":76732},[76733,76734,76735,76736,76737,76738],{"id":71488,"depth":97,"text":71489},{"id":71547,"depth":97,"text":71548},{"id":71571,"depth":97,"text":71572},{"id":71891,"depth":97,"text":71892},{"id":71923,"depth":97,"text":71924},{"id":71946,"depth":97,"text":71947},{"id":75014,"depth":86,"text":75015,"children":76740},[76741,76742],{"id":75048,"depth":97,"text":75049},{"id":75087,"depth":97,"text":75088},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53402,"description":122},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76749,"title":76750,"body":76751,"description":122,"extension":123,"meta":92888,"navigation":125,"path":92889,"seo":92890,"stem":92891,"__hash__":92892},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76752,"toc":92824},[76753,76756,76759,76763,76767,76772,76777,76788,76792,76797,76800,76804,76807,76812,76816,76820,76823,76828,76831,76835,76838,76846,76849,76853,76858,76863,76866,76870,76875,76880,76883,76887,76892,76895,76900,76903,76908,76911,76916,76921,76924,76927,76931,76936,76941,76944,76948,76952,76955,76958,76961,76965,76969,76974,76979,76982,76986,76991,76996,76999,77002,77005,77008,77011,77014,77017,77020,77023,77028,77032,77037,77042,77045,77048,77051,77054,77057,77060,77063,77066,77070,77074,77077,77080,77083,77088,77090,77093,77096,77099,77102,77105,77108,77111,77114,77117,77120,77123,77126,77129,77134,77139,77144,77147,77151,77154,77159,77163,77165,77176,77181,77282,77285,77288,77291,77294,77297,77300,77303,77306,77308,77311,77314,77317,77320,77323,77325,77328,77331,77334,77337,77340,77343,77345,77348,77350,77352,77355,77359,77363,77366,77369,77372,77375,77378,77381,77384,77387,77390,77395,77515,77518,77521,77526,77529,77532,77535,77538,77543,77546,77549,77552,77555,77560,77563,77663,77728,77802,77806,77809,77812,77816,77819,77833,77862,77865,77868,77871,77874,77877,77880,77883,77885,77888,77891,77894,77897,77901,77906,77910,77915,77990,77993,78176,78179,78182,78185,78188,78191,78193,78196,78199,78202,78205,78208,78211,78213,78217,78220,78225,78228,78231,78234,78237,78239,78244,78247,78250,78253,78256,78258,78263,78266,78269,78271,78273,78276,78280,78283,78286,78291,78294,78297,78300,78350,78355,78359,78364,78367,78436,78439,78448,78452,78457,78460,78463,78471,78474,78491,80293,80297,80301,80306,80309,80313,80319,80325,80477,80482,80487,80490,80493,80496,80499,80502,80505,80508,80511,80514,80517,80520,80523,80528,80532,80535,80546,80550,80555,80558,80561,80564,80567,80570,80572,80575,80578,80581,80584,80586,80603,80606,80610,80613,80618,80623,80626,80629,80633,80636,80639,80648,80651,80655,80658,80663,80668,80735,80739,80742,80745,80750,80755,80841,80846,80850,80853,80856,80871,80874,80879,80883,80888,80997,81000,81011,81161,81165,81170,81279,81283,81288,81293,81298,81301,81308,81328,81364,81528,81533,81536,81541,81548,81551,81554,81557,81616,81672,81728,81732,81737,82052,82055,82059,82062,82067,82176,82181,82185,82190,82194,82265,82269,82271,82274,82277,82315,82591,82595,82612,82678,82712,82716,82719,82724,82753,82760,82769,82774,82789,82794,82803,82806,82943,82947,83009,83013,83018,83263,83267,83272,83275,83278,83281,83284,83288,83293,84874,84878,84882,84888,84891,84896,84900,84903,84908,84911,84922,84926,84931,84935,84940,84945,84948,84953,84957,84961,84964,84969,84974,84977,84980,84983,85105,85110,85212,85215,85218,85222,85227,85399,85404,85408,85411,85416,85482,85487,85490,85621,85624,85629,85632,85635,85726,85731,85734,85737,85740,85743,85748,85753,85756,85761,85766,85771,85775,85778,85781,85786,85791,85796,85801,85855,85858,85861,85866,85869,85872,85877,85882,85887,85891,85896,85910,85915,85918,85923,85927,85932,85937,85942,85947,85952,85957,85962,85967,85970,85974,85979,85982,85985,85988,85993,85998,86001,86004,86008,86011,86014,86019,86024,86029,86034,86037,86042,86047,86108,86113,86116,86121,87362,87367,87371,87375,87380,87383,87388,87393,87396,87401,87403,87408,87412,87415,87418,87429,87433,87438,87443,87498,87503,87508,87513,87724,87729,87733,87738,87741,87743,87746,87749,88196,88201,88208,88214,88217,88220,88484,88489,88493,88758,88763,88767,88772,88777,88782,88787,89118,89121,89126,89131,89134,89138,89142,89147,89152,89157,89162,89167,89172,89176,89179,89184,89189,89192,89266,89271,89276,89281,89283,89286,89656,89661,89666,89671,89674,89677,89779,89784,89789,89892,89896,89901,89905,89909,89914,89919,89922,89927,89930,89933,90326,90331,90334,90337,90340,90343,90863,90867,90872,90877,90882,90885,90890,90893,90896,91278,91283,91285,91287,91290,91293,91805,91809,91870,91873,91876,91879,91883,91886,91891,91896,92821],[10,76754,76750],{"id":76755},"_4js进阶",[14,76757,76758],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[140,76760,76762],{"id":76761},"_41-作用域","4.1 作用域",[169,76764,76766],{"id":76765},"_411-局部作用域","4.1.1 局部作用域",[14,76768,76769],{},[56,76770],{"alt":58,"src":76771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76773,76774],{},[56,76775],{"alt":58,"src":76776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1206,76778,76779,76782,76785],{},[155,76780,76781],{},"函数作用域在函数内部",[155,76783,76784],{},"块级作用域在{}",[155,76786,76787],{},"对象的那个{}不是作用域，不是块作用域",[169,76789,76791],{"id":76790},"_412-全局作用域","4.1.2 全局作用域",[14,76793,76794],{},[56,76795],{"alt":58,"src":76796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76798,76799],{},"window.a=10不要这样写",[169,76801,76803],{"id":76802},"_413-作用域链","4.1.3 作用域链",[14,76805,76806],{},"变量查找机制",[14,76808,76809],{},[56,76810],{"alt":58,"src":76811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[140,76813,76815],{"id":76814},"_42-垃圾回收机制","4.2 垃圾回收机制",[169,76817,76819],{"id":76818},"_421-大体介绍","4.2.1 大体介绍",[14,76821,76822],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76824,76825],{},[56,76826],{"alt":58,"src":76827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76829,76830],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[169,76832,76834],{"id":76833},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76836,76837],{},"堆栈空间分配区别：",[152,76839,76840,76843],{},[155,76841,76842],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[155,76844,76845],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76847,76848],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22070,76850,76852],{"id":76851},"_4221-引用计数","4.2.2.1 引用计数",[14,76854,76855],{},[56,76856],{"alt":58,"src":76857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76859,76860],{},[56,76861],{"alt":58,"src":76862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76864,76865],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22070,76867,76869],{"id":76868},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76871,76872],{},[56,76873],{"alt":58,"src":76874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76876,76877],{},[56,76878],{"alt":58,"src":76879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76881,76882],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[140,76884,76886],{"id":76885},"_43-闭包","4.3 闭包",[14,76888,76889],{},[56,76890],{"alt":58,"src":76891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76893,76894],{},"闭包：内层函数+外层函数的变量",[14,76896,76897],{},[56,76898],{"alt":58,"src":76899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76901,76902],{},"closure就是闭包",[14,76904,76905],{},[56,76906],{"alt":58,"src":76907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76909,76910],{},"内层函数必须包含外层函数的变量才是闭包",[14,76912,76913],{},[56,76914],{"alt":58,"src":76915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76917,76918],{},[56,76919],{"alt":58,"src":76920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76922,76923],{},"闭包可能会引起内存泄漏",[14,76925,76926],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[140,76928,76930],{"id":76929},"_44-变量提升","4.4 变量提升",[14,76932,76933],{},[56,76934],{"alt":58,"src":76935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76937,76938],{},[56,76939],{"alt":58,"src":76940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76942,76943],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[140,76945,76947],{"id":76946},"_45-函数进阶","4.5 函数进阶",[169,76949,76951],{"id":76950},"_451-函数提升","4.5.1 函数提升",[14,76953,76954],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76956,76957],{},"只提升函数声明，不提升函数调用",[51883,76959,76960],{},"\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",[169,76962,76964],{"id":76963},"_452-函数参数","4.5.2 函数参数",[22070,76966,76968],{"id":76967},"_4521-动态参数","4.5.2.1 动态参数",[14,76970,76971],{},[56,76972],{"alt":58,"src":76973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76975,76976],{},[56,76977],{"alt":58,"src":76978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76980,76981],{},"箭头函数里边没有arguments",[22070,76983,76985],{"id":76984},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76987,76988],{},[56,76989],{"alt":58,"src":76990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76992,76993],{},[56,76994],{"alt":58,"src":76995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76997,76998],{},"剩余参数使用的时候不需要写...",[14,77000,77001],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77003,77004],{},"  function getSum(a,b,...arr) {",[14,77006,77007],{},"  console.log(11)",[14,77009,77010],{},"  }",[14,77012,77013],{},"  getSum(1,2,3,4)",[14,77015,77016],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77018,77019],{},"  getSum(1,2)",[14,77021,77022],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77024,77025],{},[56,77026],{"alt":58,"src":77027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22070,77029,77031],{"id":77030},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77033,77034],{},[56,77035],{"alt":58,"src":77036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77038,77039],{},[56,77040],{"alt":58,"src":77041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77043,77044],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77046,77047],{},"展开运算符可以用于数组之间的合并：",[14,77049,77050],{},"const arr1 = [1, 2, 3]",[14,77052,77053],{},"const arr2 = [3, 4, 5]",[14,77055,77056],{},"const arr = [...arr1, ...arr2]",[14,77058,77059],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77061,77062],{},"剩余参数：函数参数使用，得到真数组",[14,77064,77065],{},"展开运算符：数组中使用，数组展开",[169,77067,77069],{"id":77068},"_453-箭头函数","4.5.3 箭头函数",[22070,77071,77073],{"id":77072},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77075,77076],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77078,77079],{},"它不是万能的！！！",[14,77081,77082],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77084,77085],{},[56,77086],{"alt":58,"src":77087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77089,231],{},[14,77091,77092],{},"① 只有一个形参的时候，可以省略小括号：",[14,77094,77095],{},"const fn=x=>{console.log(x)}",[14,77097,77098],{},"② 只有一行代码时可以省略大括号：",[14,77100,77101],{},"const fn=x=>console.log(11)",[14,77103,77104],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77106,77107],{},"const fn=x=>x+x",[14,77109,77110],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77112,77113],{},"⑤ 阻止表单默认提交：",[14,77115,77116],{},"const form = document.querySelector('form')",[14,77118,77119],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77121,77122],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77124,77125],{},"const fn=uname=>({uname:uname})",[14,77127,77128],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77130,77131],{},[56,77132],{"alt":58,"src":77133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77135,77136],{},[56,77137],{"alt":58,"src":77138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77140,77141],{},[56,77142],{"alt":58,"src":77143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77145,77146],{},"一定不要忘记用()，有()就理解为自带return",[22070,77148,77150],{"id":77149},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77152,77153],{},"箭头函数是没有动态参数的arguments",[14,77155,77156],{},[56,77157],{"alt":58,"src":77158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22070,77160,77162],{"id":77161},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77164,11404],{},[152,77166,77167,77170,77173],{},[155,77168,77169],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[155,77171,77172],{},"事件回调函数使用箭头函数时，this 为全局的 window",[155,77174,77175],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77177,77178],{},[56,77179],{"alt":58,"src":77180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[67,77182,77184],{"className":53137,"code":77183,"language":53139,"meta":58,"style":58},"  \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",[73,77185,77186,77194,77199,77204,77209,77214,77219,77223,77228,77232,77236,77241,77246,77251,77255,77259,77264,77269,77274],{"__ignoreMap":58},[76,77187,77188,77190,77192],{"class":78,"line":79},[76,77189,52214],{"class":93},[76,77191,51883],{"class":51370},[76,77193,51377],{"class":93},[76,77195,77196],{"class":78,"line":86},[76,77197,77198],{"class":93},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[76,77200,77201],{"class":78,"line":97},[76,77202,77203],{"class":93},"    console.log(this) \u002F\u002F指向window\n",[76,77205,77206],{"class":78,"line":103},[76,77207,77208],{"class":93},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[76,77210,77211],{"class":78,"line":1273},[76,77212,77213],{"class":93},"    function fn() {\n",[76,77215,77216],{"class":78,"line":1287},[76,77217,77218],{"class":93},"      console.log(this)  \u002F\u002F指向window\n",[76,77220,77221],{"class":78,"line":1293},[76,77222,2259],{"class":93},[76,77224,77225],{"class":78,"line":1384},[76,77226,77227],{"class":93},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[76,77229,77230],{"class":78,"line":1390},[76,77231,2472],{"emptyLinePlaceholder":125},[76,77233,77234],{"class":78,"line":1402},[76,77235,71593],{"class":93},[76,77237,77238],{"class":78,"line":1684},[76,77239,77240],{"class":93},"      name: 'andy',\n",[76,77242,77243],{"class":78,"line":1689},[76,77244,77245],{"class":93},"      sayHai: function () {\n",[76,77247,77248],{"class":78,"line":1695},[76,77249,77250],{"class":93},"        console.log(this)\n",[76,77252,77253],{"class":78,"line":1700},[76,77254,52468],{"class":93},[76,77256,77257],{"class":78,"line":1714},[76,77258,2259],{"class":93},[76,77260,77261],{"class":78,"line":1719},[76,77262,77263],{"class":93},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[76,77265,77266],{"class":78,"line":1725},[76,77267,77268],{"class":93},"    \u002F\u002F 2.箭头函数的this\n",[76,77270,77271],{"class":78,"line":1746},[76,77272,77273],{"class":93},"    const fn = () => console.log(this)\n",[76,77275,77276,77278,77280],{"class":78,"line":1751},[76,77277,52487],{"class":93},[76,77279,51883],{"class":51370},[76,77281,51377],{"class":93},[14,77283,77284],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77286,77287],{},"const fn = () => console.log(this)",[14,77289,77290],{},"fn() \u002F\u002F指向window",[14,77292,77293],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77295,77296],{},"①",[14,77298,77299],{},"const obj = {",[14,77301,77302],{},"uname: 'pink老师',",[14,77304,77305],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77307,1145],{},[14,77309,77310],{},"调用对象里边的函数",[14,77312,77313],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77315,77316],{},"obj.sayHai()",[14,77318,77319],{},"②",[14,77321,77322],{},"const obj1 = {",[14,77324,77302],{},[14,77326,77327],{},"sayHai: function () {",[14,77329,77330],{},"let i = 10",[14,77332,77333],{},"const count = () => {",[14,77335,77336],{},"console.log(this)",[14,77338,77339],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77341,77342],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77344,1145],{},[14,77346,77347],{},"count()",[14,77349,1145],{},[14,77351,1145],{},[14,77353,77354],{},"obj1.sayHai()",[140,77356,77358],{"id":77357},"_46-解构赋值","4.6 解构赋值",[169,77360,77362],{"id":77361},"_461-数组解构","4.6.1 数组解构",[14,77364,77365],{},"以前要是使用数组中的值的话：",[14,77367,77368],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77370,77371],{},"const arr=[100,60,80]",[14,77373,77374],{},"const max=arr[0]",[14,77376,77377],{},"const min=arr[1]",[14,77379,77380],{},"const avg=arr[2]",[14,77382,77383],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77385,77386],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77388,77389],{},"这个写法就类似于上边的那种用很多const的方法",[14,77391,77392],{},[56,77393],{"alt":58,"src":77394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[67,77396,77398],{"className":50703,"code":77397,"language":50705,"meta":58,"style":58},"①变量之间交换值:\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",[73,77399,77400,77405,77410,77415,77420,77425,77429,77433,77438,77442,77447,77452,77456,77461,77466,77477,77487,77492,77497,77502,77506,77510],{"__ignoreMap":58},[76,77401,77402],{"class":78,"line":79},[76,77403,77404],{"class":93},"①变量之间交换值:\n",[76,77406,77407],{"class":78,"line":86},[76,77408,77409],{"class":93},"let a=1\n",[76,77411,77412],{"class":78,"line":97},[76,77413,77414],{"class":93},"let b=2;\n",[76,77416,77417],{"class":78,"line":103},[76,77418,77419],{"class":93},"必须加这行代码，不然就会报错\n",[76,77421,77422],{"class":78,"line":1273},[76,77423,77424],{"class":93},"[b,a]=[a,b]\n",[76,77426,77427],{"class":78,"line":1287},[76,77428,2472],{"emptyLinePlaceholder":125},[76,77430,77431],{"class":78,"line":1293},[76,77432,2472],{"emptyLinePlaceholder":125},[76,77434,77435],{"class":78,"line":1384},[76,77436,77437],{"class":93},"可以写成下面的方式：\n",[76,77439,77440],{"class":78,"line":1390},[76,77441,77409],{"class":93},[76,77443,77444],{"class":78,"line":1402},[76,77445,77446],{"class":93},"let b=2\n",[76,77448,77449],{"class":78,"line":1684},[76,77450,77451],{"class":93},";[b,a]=[a,b]\n",[76,77453,77454],{"class":78,"line":1689},[76,77455,2472],{"emptyLinePlaceholder":125},[76,77457,77458],{"class":78,"line":1695},[76,77459,77460],{"class":93},"②排序\n",[76,77462,77463],{"class":78,"line":1700},[76,77464,77465],{"class":93},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[76,77467,77468,77471,77474],{"class":78,"line":1714},[76,77469,77470],{"class":93},"for (let i = 0; i ",[76,77472,1109],{"class":77473},"s7hpK",[76,77475,77476],{"class":93}," arr1.length; i++) {\n",[76,77478,77479,77482,77484],{"class":78,"line":1719},[76,77480,77481],{"class":93},"   for (let j = 0; j ",[76,77483,1109],{"class":77473},[76,77485,77486],{"class":93}," arr1.length - 1; j++) {\n",[76,77488,77489],{"class":78,"line":1725},[76,77490,77491],{"class":93},"      if (arr1[j] > arr1[j + 1]) {\n",[76,77493,77494],{"class":78,"line":1746},[76,77495,77496],{"class":93},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[76,77498,77499],{"class":78,"line":1751},[76,77500,77501],{"class":93},"       }\n",[76,77503,77504],{"class":78,"line":1765},[76,77505,4381],{"class":93},[76,77507,77508],{"class":78,"line":1770},[76,77509,1637],{"class":93},[76,77511,77512],{"class":78,"line":1799},[76,77513,77514],{"class":93},"console.log(arr1)\n",[14,77516,77517],{},"数组解构的细节：",[14,77519,77520],{},"①变量多，单元值少",[14,77522,77523],{},[56,77524],{"alt":58,"src":77525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77527,77528],{},"防止出现undefined的方法：",[14,77530,77531],{},"const [a=0,b=0] =[1]",[14,77533,77534],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77536,77537],{},"②变量少，单元值多",[14,77539,77540],{},[56,77541],{"alt":58,"src":77542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77544,77545],{},"此时可以使用剩余参数来接收多余的值",[14,77547,77548],{},"const [a,b,...c]=[1,2,3,4]",[14,77550,77551],{},"console.log(c) 输出[3,4]",[14,77553,77554],{},"③可以按需导入，忽略某些返回值",[14,77556,77557],{},[56,77558],{"alt":58,"src":77559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77561,77562],{},"④支持多维数组的结构",[67,77564,77568],{"className":77565,"code":77566,"language":77567,"meta":58,"style":58},"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",[73,77569,77570,77598,77614,77629,77644],{"__ignoreMap":58},[76,77571,77572,77574,77576,77578,77580,77582,77584,77586,77589,77591,77593,77595],{"class":78,"line":79},[76,77573,6864],{"class":89},[76,77575,51903],{"class":93},[76,77577,247],{"class":89},[76,77579,52296],{"class":93},[76,77581,418],{"class":250},[76,77583,12507],{"class":93},[76,77585,278],{"class":250},[76,77587,77588],{"class":93},", [",[76,77590,272],{"class":250},[76,77592,12507],{"class":93},[76,77594,494],{"class":250},[76,77596,77597],{"class":93},"]]\n",[76,77599,77600,77603,77605,77607,77609,77611],{"class":78,"line":86},[76,77601,77602],{"class":93},"console.",[76,77604,58317],{"class":2035},[76,77606,3923],{"class":93},[76,77608,392],{"class":250},[76,77610,4288],{"class":93},[76,77612,77613],{"class":82},"  \u002F\u002F1\n",[76,77615,77616,77618,77620,77622,77624,77626],{"class":78,"line":97},[76,77617,77602],{"class":93},[76,77619,58317],{"class":2035},[76,77621,3923],{"class":93},[76,77623,418],{"class":250},[76,77625,4288],{"class":93},[76,77627,77628],{"class":82},"  \u002F\u002F2\n",[76,77630,77631,77633,77635,77637,77639,77641],{"class":78,"line":103},[76,77632,77602],{"class":93},[76,77634,58317],{"class":2035},[76,77636,3923],{"class":93},[76,77638,278],{"class":250},[76,77640,4288],{"class":93},[76,77642,77643],{"class":82},"  \u002F\u002F[3,4]\n",[76,77645,77646,77648,77650,77652,77654,77656,77658,77660],{"class":78,"line":1273},[76,77647,77602],{"class":93},[76,77649,58317],{"class":2035},[76,77651,3923],{"class":93},[76,77653,278],{"class":250},[76,77655,4973],{"class":93},[76,77657,392],{"class":250},[76,77659,4288],{"class":93},[76,77661,77662],{"class":82},"  \u002F\u002F3\n",[67,77664,77666],{"className":77565,"code":77665,"language":77567,"meta":58,"style":58},"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",[73,77667,77668,77695,77706,77717],{"__ignoreMap":58},[76,77669,77670,77672,77675,77677,77679,77681,77683,77685,77687,77689,77691,77693],{"class":78,"line":79},[76,77671,6864],{"class":89},[76,77673,77674],{"class":93}," [a, b, c] ",[76,77676,247],{"class":89},[76,77678,52296],{"class":93},[76,77680,418],{"class":250},[76,77682,12507],{"class":93},[76,77684,278],{"class":250},[76,77686,77588],{"class":93},[76,77688,272],{"class":250},[76,77690,12507],{"class":93},[76,77692,494],{"class":250},[76,77694,77597],{"class":93},[76,77696,77697,77699,77701,77704],{"class":78,"line":86},[76,77698,77602],{"class":93},[76,77700,58317],{"class":2035},[76,77702,77703],{"class":93},"(a)",[76,77705,77613],{"class":82},[76,77707,77708,77710,77712,77715],{"class":78,"line":97},[76,77709,77602],{"class":93},[76,77711,58317],{"class":2035},[76,77713,77714],{"class":93},"(b)",[76,77716,77628],{"class":82},[76,77718,77719,77721,77723,77726],{"class":78,"line":103},[76,77720,77602],{"class":93},[76,77722,58317],{"class":2035},[76,77724,77725],{"class":93},"(c)",[76,77727,77643],{"class":82},[67,77729,77731],{"className":77565,"code":77730,"language":77567,"meta":58,"style":58},"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",[73,77732,77733,77760,77770,77780,77790],{"__ignoreMap":58},[76,77734,77735,77737,77740,77742,77744,77746,77748,77750,77752,77754,77756,77758],{"class":78,"line":79},[76,77736,6864],{"class":89},[76,77738,77739],{"class":93}," [a, b, [c, d]] ",[76,77741,247],{"class":89},[76,77743,52296],{"class":93},[76,77745,418],{"class":250},[76,77747,12507],{"class":93},[76,77749,278],{"class":250},[76,77751,77588],{"class":93},[76,77753,272],{"class":250},[76,77755,12507],{"class":93},[76,77757,494],{"class":250},[76,77759,77597],{"class":93},[76,77761,77762,77764,77766,77768],{"class":78,"line":86},[76,77763,77602],{"class":93},[76,77765,58317],{"class":2035},[76,77767,77703],{"class":93},[76,77769,77613],{"class":82},[76,77771,77772,77774,77776,77778],{"class":78,"line":97},[76,77773,77602],{"class":93},[76,77775,58317],{"class":2035},[76,77777,77714],{"class":93},[76,77779,77628],{"class":82},[76,77781,77782,77784,77786,77788],{"class":78,"line":103},[76,77783,77602],{"class":93},[76,77785,58317],{"class":2035},[76,77787,77725],{"class":93},[76,77789,77662],{"class":82},[76,77791,77792,77794,77796,77799],{"class":78,"line":1273},[76,77793,77602],{"class":93},[76,77795,58317],{"class":2035},[76,77797,77798],{"class":93},"(d)",[76,77800,77801],{"class":82},"  \u002F\u002F4\n",[169,77803,77805],{"id":77804},"_462-对象解构","4.6.2 对象解构",[14,77807,77808],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77810,77811],{},"用的非常非常多！！！！！！",[22070,77813,77815],{"id":77814},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77817,77818],{},"基本语法：",[152,77820,77821,77824,77827,77830],{},[155,77822,77823],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[155,77825,77826],{},"对象属性的值将被赋值给与属性名相同的变量",[155,77828,77829],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[155,77831,77832],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[67,77834,77836],{"className":50703,"code":77835,"language":50705,"meta":58,"style":58},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[73,77837,77838,77843,77848,77853,77857],{"__ignoreMap":58},[76,77839,77840],{"class":78,"line":79},[76,77841,77842],{"class":93},"const obj = {\n",[76,77844,77845],{"class":78,"line":86},[76,77846,77847],{"class":93},"   uname: 'pink老师',\n",[76,77849,77850],{"class":78,"line":97},[76,77851,77852],{"class":93},"   age: 18,\n",[76,77854,77855],{"class":78,"line":103},[76,77856,1637],{"class":93},[76,77858,77859],{"class":78,"line":1273},[76,77860,77861],{"class":93},"const { uname, age } = obj\n",[14,77863,77864],{},"上方代码这样写等价于：",[14,77866,77867],{},"const uname等价于obj.uname",[14,77869,77870],{},"变量名可以重新改名：",[14,77872,77873],{},"const uname='red老师'",[14,77875,77876],{},"const user={",[14,77878,77879],{},"  uname:'pink老师',",[14,77881,77882],{},"  age:18",[14,77884,1145],{},[14,77886,77887],{},"const {uname,age}=user",[14,77889,77890],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77892,77893],{},"const {旧变量名：新变量名}=对象",[14,77895,77896],{},"const {uname:username,age}=user",[22070,77898,77900],{"id":77899},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77902,77903],{},[56,77904],{"alt":58,"src":77905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22070,77907,77909],{"id":77908},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77911,77912],{},[56,77913],{"alt":58,"src":77914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[67,77916,77918],{"className":53137,"code":77917,"language":53139,"meta":58,"style":58},"  \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",[73,77919,77920,77928,77933,77938,77943,77948,77953,77958,77963,77968,77972,77977,77982],{"__ignoreMap":58},[76,77921,77922,77924,77926],{"class":78,"line":79},[76,77923,52214],{"class":93},[76,77925,51883],{"class":51370},[76,77927,51377],{"class":93},[76,77929,77930],{"class":78,"line":86},[76,77931,77932],{"class":93},"    const pig = {\n",[76,77934,77935],{"class":78,"line":97},[76,77936,77937],{"class":93},"      name: '佩奇',\n",[76,77939,77940],{"class":78,"line":103},[76,77941,77942],{"class":93},"      family: {\n",[76,77944,77945],{"class":78,"line":1273},[76,77946,77947],{"class":93},"        mother: '猪妈妈',\n",[76,77949,77950],{"class":78,"line":1287},[76,77951,77952],{"class":93},"        father: '猪爸爸',\n",[76,77954,77955],{"class":78,"line":1293},[76,77956,77957],{"class":93},"        sister: '乔治'\n",[76,77959,77960],{"class":78,"line":1384},[76,77961,77962],{"class":93},"      },\n",[76,77964,77965],{"class":78,"line":1390},[76,77966,77967],{"class":93},"      age: 6\n",[76,77969,77970],{"class":78,"line":1402},[76,77971,2259],{"class":93},[76,77973,77974],{"class":78,"line":1684},[76,77975,77976],{"class":93},"    \u002F\u002F 多级对象解构\n",[76,77978,77979],{"class":78,"line":1689},[76,77980,77981],{"class":93},"    const { name, family: { mother, father, sister }, age } = pig\n",[76,77983,77984,77986,77988],{"class":78,"line":1695},[76,77985,52487],{"class":93},[76,77987,51883],{"class":51370},[76,77989,51377],{"class":93},[14,77991,77992],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[67,77994,77997],{"className":77995,"code":77996,"language":76517,"meta":58,"style":58},"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",[73,77998,77999,78004,78015,78027,78039,78048,78052,78063,78075,78085,78090,78094,78104,78115,78124,78128,78132,78143,78154,78163,78167,78172],{"__ignoreMap":58},[76,78000,78001],{"class":78,"line":79},[76,78002,78003],{"class":82},"    \u002F\u002F 这是后台传递过来的数据\n",[76,78005,78006,78008,78011,78013],{"class":78,"line":86},[76,78007,11293],{"class":89},[76,78009,78010],{"class":93}," msg ",[76,78012,247],{"class":89},[76,78014,15644],{"class":93},[76,78016,78017,78020,78022,78025],{"class":78,"line":97},[76,78018,78019],{"class":305},"      \"code\"",[76,78021,1058],{"class":89},[76,78023,78024],{"class":250}," 200",[76,78026,31536],{"class":93},[76,78028,78029,78032,78034,78037],{"class":78,"line":103},[76,78030,78031],{"class":305},"      \"msg\"",[76,78033,1058],{"class":89},[76,78035,78036],{"class":305}," \"获取新闻列表成功\"",[76,78038,31536],{"class":93},[76,78040,78041,78044,78046],{"class":78,"line":1273},[76,78042,78043],{"class":305},"      \"data\"",[76,78045,1058],{"class":89},[76,78047,55517],{"class":93},[76,78049,78050],{"class":78,"line":1287},[76,78051,2582],{"class":93},[76,78053,78054,78057,78059,78061],{"class":78,"line":1293},[76,78055,78056],{"class":305},"          \"id\"",[76,78058,1058],{"class":89},[76,78060,25191],{"class":250},[76,78062,31536],{"class":93},[76,78064,78065,78068,78070,78073],{"class":78,"line":1384},[76,78066,78067],{"class":305},"          \"title\"",[76,78069,1058],{"class":89},[76,78071,78072],{"class":305}," \"5G商用自己，三大运用商收入下降\"",[76,78074,31536],{"class":93},[76,78076,78077,78080,78082],{"class":78,"line":1390},[76,78078,78079],{"class":305},"          \"count\"",[76,78081,1058],{"class":89},[76,78083,78084],{"class":250}," 58\n",[76,78086,78087],{"class":78,"line":1402},[76,78088,78089],{"class":93},"        },\n",[76,78091,78092],{"class":78,"line":1684},[76,78093,2582],{"class":93},[76,78095,78096,78098,78100,78102],{"class":78,"line":1689},[76,78097,78056],{"class":305},[76,78099,1058],{"class":89},[76,78101,14827],{"class":250},[76,78103,31536],{"class":93},[76,78105,78106,78108,78110,78113],{"class":78,"line":1695},[76,78107,78067],{"class":305},[76,78109,1058],{"class":89},[76,78111,78112],{"class":305}," \"国际媒体头条速览\"",[76,78114,31536],{"class":93},[76,78116,78117,78119,78121],{"class":78,"line":1700},[76,78118,78079],{"class":305},[76,78120,1058],{"class":89},[76,78122,78123],{"class":250}," 56\n",[76,78125,78126],{"class":78,"line":1714},[76,78127,78089],{"class":93},[76,78129,78130],{"class":78,"line":1719},[76,78131,2582],{"class":93},[76,78133,78134,78136,78138,78141],{"class":78,"line":1725},[76,78135,78056],{"class":305},[76,78137,1058],{"class":89},[76,78139,78140],{"class":250}," 3",[76,78142,31536],{"class":93},[76,78144,78145,78147,78149,78152],{"class":78,"line":1746},[76,78146,78067],{"class":305},[76,78148,1058],{"class":89},[76,78150,78151],{"class":305}," \"乌克兰和俄罗斯持续冲突\"",[76,78153,31536],{"class":93},[76,78155,78156,78158,78160],{"class":78,"line":1751},[76,78157,78079],{"class":305},[76,78159,1058],{"class":89},[76,78161,78162],{"class":250}," 1669\n",[76,78164,78165],{"class":78,"line":1765},[76,78166,78089],{"class":93},[76,78168,78169],{"class":78,"line":1770},[76,78170,78171],{"class":93},"      ]\n",[76,78173,78174],{"class":78,"line":1799},[76,78175,2259],{"class":93},[14,78177,78178],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78180,78181],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78183,78184],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78186,78187],{},"function({data}) {",[14,78189,78190],{},"console.log(data)",[14,78192,1145],{},[14,78194,78195],{},"render(msg)",[14,78197,78198],{},"实参传递给形参的时候解构了",[14,78200,78201],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78203,78204],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78206,78207],{},"function render({data:mydata}) {",[14,78209,78210],{},"  console.log(data)",[14,78212,1145],{},[169,78214,78216],{"id":78215},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78218,78219],{},"有两种情况：一个是数组结构，一个是立即执行函数",[152,78221,78222],{},[155,78223,78224],{},"如果对一个数组进行遍历，有两种方式：",[14,78226,78227],{},"①法1",[14,78229,78230],{},"const arr=[1,2,3]",[14,78232,78233],{},"arr.map(function(item,index) {",[14,78235,78236],{},"  console.log(item)",[14,78238,52534],{},[14,78240,78241],{},[56,78242],{"alt":58,"src":78243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78245,78246],{},"②法2",[14,78248,78249],{},"const str='pink'",[14,78251,78252],{},"[1,2,3].map(function(item,index) {",[14,78254,78255],{},"console.log(item)",[14,78257,52534],{},[14,78259,78260],{},[56,78261],{"alt":58,"src":78262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78264,78265],{},"此时会报错",[14,78267,78268],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78270,78255],{},[14,78272,52534],{},[14,78274,78275],{},"内部会当成这样处理，所以我们用分号进行隔开",[140,78277,78279],{"id":78278},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78281,78282],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78284,78285],{},"可以理解为加强版的for循环",[14,78287,78288],{},[56,78289],{"alt":58,"src":78290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78292,78293],{},"里边不写return，不返回数组，只遍历不返回",[14,78295,78296],{},"map是返回数组",[14,78298,78299],{},"forEach主要用于遍历数组对象",[67,78301,78303],{"className":53137,"code":78302,"language":53139,"meta":58,"style":58},"  \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",[73,78304,78305,78313,78318,78323,78328,78333,78337,78342],{"__ignoreMap":58},[76,78306,78307,78309,78311],{"class":78,"line":79},[76,78308,52214],{"class":93},[76,78310,51883],{"class":51370},[76,78312,51377],{"class":93},[76,78314,78315],{"class":78,"line":86},[76,78316,78317],{"class":93},"    const arr = ['red', 'green', 'pink']\n",[76,78319,78320],{"class":78,"line":97},[76,78321,78322],{"class":93},"    const result = arr.forEach(function (item, index) {\n",[76,78324,78325],{"class":78,"line":103},[76,78326,78327],{"class":93},"      console.log(item)\n",[76,78329,78330],{"class":78,"line":1273},[76,78331,78332],{"class":93},"      console.log(index)\n",[76,78334,78335],{"class":78,"line":1287},[76,78336,33531],{"class":93},[76,78338,78339],{"class":78,"line":1293},[76,78340,78341],{"class":93},"    console.log(result)\n",[76,78343,78344,78346,78348],{"class":78,"line":1384},[76,78345,52487],{"class":93},[76,78347,51883],{"class":51370},[76,78349,51377],{"class":93},[14,78351,78352],{},[56,78353],{"alt":58,"src":78354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[140,78356,78358],{"id":78357},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78360,78361],{},[56,78362],{"alt":58,"src":78363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78365,78366],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[67,78368,78370],{"className":53137,"code":78369,"language":53139,"meta":58,"style":58},"\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",[73,78371,78372,78380,78388,78393,78398,78402,78406,78411,78415,78420,78428],{"__ignoreMap":58},[76,78373,78374,78376,78378],{"class":78,"line":79},[76,78375,1109],{"class":93},[76,78377,51870],{"class":51370},[76,78379,51377],{"class":93},[76,78381,78382,78384,78386],{"class":78,"line":86},[76,78383,52214],{"class":93},[76,78385,51883],{"class":51370},[76,78387,51377],{"class":93},[76,78389,78390],{"class":78,"line":97},[76,78391,78392],{"class":93},"    const arr = [10, 20, 30]\n",[76,78394,78395],{"class":78,"line":103},[76,78396,78397],{"class":93},"    const newArr = arr.filter(function (item, index) {\n",[76,78399,78400],{"class":78,"line":1273},[76,78401,78327],{"class":93},[76,78403,78404],{"class":78,"line":1287},[76,78405,78332],{"class":93},[76,78407,78408],{"class":78,"line":1293},[76,78409,78410],{"class":93},"      return item >= 20\n",[76,78412,78413],{"class":78,"line":1384},[76,78414,33531],{"class":93},[76,78416,78417],{"class":78,"line":1390},[76,78418,78419],{"class":93},"    console.log(newArr)\n",[76,78421,78422,78424,78426],{"class":78,"line":1402},[76,78423,52487],{"class":93},[76,78425,51883],{"class":51370},[76,78427,51377],{"class":93},[76,78429,78430,78432,78434],{"class":78,"line":1684},[76,78431,51855],{"class":93},[76,78433,51870],{"class":51370},[76,78435,51377],{"class":93},[14,78437,78438],{},"这个也可以写成箭头函数：",[67,78440,78442],{"className":50703,"code":78441,"language":50705,"meta":58,"style":58},"const newArr = arr.filter(item => item >= 20)\n",[73,78443,78444],{"__ignoreMap":58},[76,78445,78446],{"class":78,"line":79},[76,78447,78441],{"class":93},[140,78449,78451],{"id":78450},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78453,78454],{},[56,78455],{"alt":58,"src":78456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78458,78459],{},"步骤：",[14,78461,78462],{},"①：渲染页面模块",[1206,78464,78465,78468],{},[155,78466,78467],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[155,78469,78470],{},"用forEach+字符串的形式",[14,78472,78473],{},"②：点击不同需求，显示不同页面内容",[1206,78475,78476,78479,78482,78485,78488],{},[155,78477,78478],{},"点击采取事件委托方式 .filter",[155,78480,78481],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[155,78483,78484],{},"筛选条件是根据点击的 data-index 来判断",[155,78486,78487],{},"可以使用对象解构，把事件对象解构",[155,78489,78490],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[67,78492,78494],{"className":50703,"code":78493,"language":50705,"meta":58,"style":58},"\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",[73,78495,78496,78506,78520,78524,78532,78546,78566,78578,78586,78592,78602,78612,78622,78626,78630,78636,78649,78661,78671,78683,78687,78691,78698,78711,78723,78740,78758,78771,78775,78779,78791,78801,78805,78809,78816,78857,78884,78894,78898,78902,78910,78922,78926,78930,78938,78950,78962,78973,78977,78981,78990,79002,79013,79017,79021,79030,79042,79054,79058,79062,79069,79079,79091,79103,79118,79122,79126,79134,79150,79160,79170,79180,79192,79196,79200,79210,79221,79231,79235,79243,79251,79255,79263,79278,79304,79329,79354,79373,79381,79395,79400,79405,79410,79415,79420,79428,79436,79441,79452,79457,79467,79477,79487,79497,79501,79505,79514,79523,79532,79541,79545,79549,79558,79567,79576,79585,79589,79593,79602,79611,79620,79629,79633,79637,79646,79655,79664,79673,79677,79681,79690,79699,79708,79717,79721,79725,79734,79743,79752,79761,79765,79769,79778,79787,79795,79804,79808,79812,79816,79821,79833,79838,79850,79854,79871,79899,79908,79913,79923,79933,79942,79947,79952,79956,79961,79978,79982,79987,79995,80000,80027,80032,80052,80057,80069,80074,80079,80084,80095,80109,80146,80164,80197,80214,80238,80242,80247,80253,80257,80261,80265,80273,80281,80285],{"__ignoreMap":58},[76,78497,78498,78500,78502,78504],{"class":78,"line":79},[76,78499,51367],{"class":93},[76,78501,51371],{"class":51370},[76,78503,51374],{"class":2035},[76,78505,51377],{"class":93},[76,78507,78508,78510,78512,78514,78516,78518],{"class":78,"line":86},[76,78509,1109],{"class":93},[76,78511,50705],{"class":51370},[76,78513,51386],{"class":2035},[76,78515,247],{"class":93},[76,78517,51391],{"class":305},[76,78519,51377],{"class":93},[76,78521,78522],{"class":78,"line":97},[76,78523,2472],{"emptyLinePlaceholder":125},[76,78525,78526,78528,78530],{"class":78,"line":103},[76,78527,1109],{"class":93},[76,78529,51404],{"class":51370},[76,78531,51377],{"class":93},[76,78533,78534,78536,78538,78540,78542,78544],{"class":78,"line":1273},[76,78535,52214],{"class":93},[76,78537,51414],{"class":51370},[76,78539,51417],{"class":2035},[76,78541,247],{"class":93},[76,78543,51422],{"class":305},[76,78545,51377],{"class":93},[76,78547,78548,78550,78552,78554,78556,78558,78560,78562,78564],{"class":78,"line":1287},[76,78549,52214],{"class":93},[76,78551,51414],{"class":51370},[76,78553,14992],{"class":2035},[76,78555,247],{"class":93},[76,78557,51461],{"class":305},[76,78559,51441],{"class":2035},[76,78561,247],{"class":93},[76,78563,51468],{"class":305},[76,78565,51377],{"class":93},[76,78567,78568,78570,78572,78574,78576],{"class":78,"line":1293},[76,78569,52214],{"class":93},[76,78571,51477],{"class":51370},[76,78573,51480],{"class":93},[76,78575,51477],{"class":51370},[76,78577,51377],{"class":93},[76,78579,78580,78582,78584],{"class":78,"line":1384},[76,78581,52214],{"class":93},[76,78583,117],{"class":51370},[76,78585,51377],{"class":93},[76,78587,78588,78590],{"class":78,"line":1390},[76,78589,6475],{"class":51370},[76,78591,15644],{"class":93},[76,78593,78594,78596,78598,78600],{"class":78,"line":1402},[76,78595,54765],{"class":250},[76,78597,51507],{"class":93},[76,78599,392],{"class":250},[76,78601,1363],{"class":93},[76,78603,78604,78606,78608,78610],{"class":78,"line":1684},[76,78605,54776],{"class":250},[76,78607,51507],{"class":93},[76,78609,392],{"class":250},[76,78611,1363],{"class":93},[76,78613,78614,78616,78618,78620],{"class":78,"line":1689},[76,78615,72666],{"class":250},[76,78617,51507],{"class":93},[76,78619,60575],{"class":250},[76,78621,1363],{"class":93},[76,78623,78624],{"class":78,"line":1695},[76,78625,2259],{"class":93},[76,78627,78628],{"class":78,"line":1700},[76,78629,2472],{"emptyLinePlaceholder":125},[76,78631,78632,78634],{"class":78,"line":1714},[76,78633,62193],{"class":2035},[76,78635,15644],{"class":93},[76,78637,78638,78640,78642,78645,78647],{"class":78,"line":1719},[76,78639,54841],{"class":250},[76,78641,51507],{"class":93},[76,78643,78644],{"class":250},"990",[76,78646,51562],{"class":89},[76,78648,1363],{"class":93},[76,78650,78651,78653,78655,78657,78659],{"class":78,"line":1725},[76,78652,54776],{"class":250},[76,78654,51507],{"class":93},[76,78656,392],{"class":250},[76,78658,51626],{"class":250},[76,78660,1363],{"class":93},[76,78662,78663,78665,78667,78669],{"class":78,"line":1746},[76,78664,55079],{"class":250},[76,78666,51507],{"class":93},[76,78668,51547],{"class":250},[76,78670,1363],{"class":93},[76,78672,78673,78676,78678,78681],{"class":78,"line":1751},[76,78674,78675],{"class":250},"      flex-wrap",[76,78677,51507],{"class":93},[76,78679,78680],{"class":250},"wrap",[76,78682,1363],{"class":93},[76,78684,78685],{"class":78,"line":1765},[76,78686,2259],{"class":93},[76,78688,78689],{"class":78,"line":1770},[76,78690,2472],{"emptyLinePlaceholder":125},[76,78692,78693,78696],{"class":78,"line":1799},[76,78694,78695],{"class":2035},"    .item",[76,78697,15644],{"class":93},[76,78699,78700,78702,78704,78707,78709],{"class":78,"line":1804},[76,78701,54841],{"class":250},[76,78703,51507],{"class":93},[76,78705,78706],{"class":250},"240",[76,78708,51562],{"class":89},[76,78710,1363],{"class":93},[76,78712,78713,78715,78717,78719,78721],{"class":78,"line":1821},[76,78714,62070],{"class":250},[76,78716,51507],{"class":93},[76,78718,646],{"class":250},[76,78720,51562],{"class":89},[76,78722,1363],{"class":93},[76,78724,78725,78727,78729,78731,78733,78736,78738],{"class":78,"line":1826},[76,78726,54765],{"class":250},[76,78728,51507],{"class":93},[76,78730,899],{"class":250},[76,78732,51562],{"class":89},[76,78734,78735],{"class":250}," 30",[76,78737,51562],{"class":89},[76,78739,1363],{"class":93},[76,78741,78742,78744,78746,78748,78751,78754,78756],{"class":78,"line":1831},[76,78743,61930],{"class":250},[76,78745,51507],{"class":93},[76,78747,28194],{"class":250},[76,78749,78750],{"class":250}," ease",[76,78752,78753],{"class":250}," .5",[76,78755,894],{"class":89},[76,78757,1363],{"class":93},[76,78759,78760,78763,78765,78767,78769],{"class":78,"line":1836},[76,78761,78762],{"class":250},"      margin-bottom",[76,78764,51507],{"class":93},[76,78766,899],{"class":250},[76,78768,51562],{"class":89},[76,78770,1363],{"class":93},[76,78772,78773],{"class":78,"line":1850},[76,78774,2259],{"class":93},[76,78776,78777],{"class":78,"line":1855},[76,78778,2472],{"emptyLinePlaceholder":125},[76,78780,78781,78784,78786,78789],{"class":78,"line":2649},[76,78782,78783],{"class":2035},"    .item:nth-child",[76,78785,202],{"class":93},[76,78787,78788],{"class":250},"4n",[76,78790,12514],{"class":93},[76,78792,78793,78795,78797,78799],{"class":78,"line":2663},[76,78794,62070],{"class":250},[76,78796,51507],{"class":93},[76,78798,392],{"class":250},[76,78800,1363],{"class":93},[76,78802,78803],{"class":78,"line":2671},[76,78804,2259],{"class":93},[76,78806,78807],{"class":78,"line":2676},[76,78808,2472],{"emptyLinePlaceholder":125},[76,78810,78811,78814],{"class":78,"line":2682},[76,78812,78813],{"class":2035},"    .item:hover",[76,78815,15644],{"class":93},[76,78817,78818,78821,78823,78825,78827,78829,78831,78833,78835,78838,78840,78842,78844,78846,78848,78850,78852,78855],{"class":78,"line":2688},[76,78819,78820],{"class":250},"      box-shadow",[76,78822,51507],{"class":93},[76,78824,392],{"class":250},[76,78826,51562],{"class":89},[76,78828,4165],{"class":250},[76,78830,51562],{"class":89},[76,78832,2220],{"class":250},[76,78834,51562],{"class":89},[76,78836,78837],{"class":250}," rgba",[76,78839,202],{"class":93},[76,78841,392],{"class":250},[76,78843,12507],{"class":93},[76,78845,392],{"class":250},[76,78847,12507],{"class":93},[76,78849,392],{"class":250},[76,78851,12507],{"class":93},[76,78853,78854],{"class":250},".2",[76,78856,2791],{"class":93},[76,78858,78859,78862,78864,78867,78869,78871,78873,78876,78878,78880,78882],{"class":78,"line":2693},[76,78860,78861],{"class":250},"      transform",[76,78863,51507],{"class":93},[76,78865,78866],{"class":250},"translate3d",[76,78868,202],{"class":93},[76,78870,392],{"class":250},[76,78872,12507],{"class":93},[76,78874,78875],{"class":250},"-4",[76,78877,51562],{"class":89},[76,78879,12507],{"class":93},[76,78881,392],{"class":250},[76,78883,2791],{"class":93},[76,78885,78886,78888,78890,78892],{"class":78,"line":8020},[76,78887,62095],{"class":250},[76,78889,51507],{"class":93},[76,78891,62100],{"class":250},[76,78893,1363],{"class":93},[76,78895,78896],{"class":78,"line":8044},[76,78897,2259],{"class":93},[76,78899,78900],{"class":78,"line":8049},[76,78901,2472],{"emptyLinePlaceholder":125},[76,78903,78904,78906,78908],{"class":78,"line":8055},[76,78905,78695],{"class":2035},[76,78907,55685],{"class":51370},[76,78909,15644],{"class":93},[76,78911,78912,78914,78916,78918,78920],{"class":78,"line":8082},[76,78913,54841],{"class":250},[76,78915,51507],{"class":93},[76,78917,512],{"class":250},[76,78919,106],{"class":89},[76,78921,1363],{"class":93},[76,78923,78924],{"class":78,"line":8087},[76,78925,2259],{"class":93},[76,78927,78928],{"class":78,"line":8093},[76,78929,2472],{"emptyLinePlaceholder":125},[76,78931,78932,78934,78936],{"class":78,"line":8105},[76,78933,78695],{"class":2035},[76,78935,62374],{"class":2035},[76,78937,15644],{"class":93},[76,78939,78940,78942,78944,78946,78948],{"class":78,"line":8117},[76,78941,54992],{"class":250},[76,78943,51507],{"class":93},[76,78945,849],{"class":250},[76,78947,51562],{"class":89},[76,78949,1363],{"class":93},[76,78951,78952,78954,78956,78958,78960],{"class":78,"line":8129},[76,78953,78762],{"class":250},[76,78955,51507],{"class":93},[76,78957,646],{"class":250},[76,78959,51562],{"class":89},[76,78961,1363],{"class":93},[76,78963,78964,78966,78968,78971],{"class":78,"line":9788},[76,78965,57486],{"class":250},[76,78967,51507],{"class":93},[76,78969,78970],{"class":250},"#666",[76,78972,1363],{"class":93},[76,78974,78975],{"class":78,"line":9813},[76,78976,2259],{"class":93},[76,78978,78979],{"class":78,"line":9836},[76,78980,2472],{"emptyLinePlaceholder":125},[76,78982,78983,78985,78988],{"class":78,"line":9860},[76,78984,78695],{"class":2035},[76,78986,78987],{"class":2035}," .price",[76,78989,15644],{"class":93},[76,78991,78992,78994,78996,78998,79000],{"class":78,"line":9865},[76,78993,54992],{"class":250},[76,78995,51507],{"class":93},[76,78997,949],{"class":250},[76,78999,51562],{"class":89},[76,79001,1363],{"class":93},[76,79003,79004,79006,79008,79011],{"class":78,"line":9870},[76,79005,57486],{"class":250},[76,79007,51507],{"class":93},[76,79009,79010],{"class":250},"firebrick",[76,79012,1363],{"class":93},[76,79014,79015],{"class":78,"line":9875},[76,79016,2259],{"class":93},[76,79018,79019],{"class":78,"line":9884},[76,79020,2472],{"emptyLinePlaceholder":125},[76,79022,79023,79025,79028],{"class":78,"line":9889},[76,79024,78695],{"class":2035},[76,79026,79027],{"class":2035}," .price::before",[76,79029,15644],{"class":93},[76,79031,79032,79035,79037,79040],{"class":78,"line":9895},[76,79033,79034],{"class":250},"      content",[76,79036,51507],{"class":93},[76,79038,79039],{"class":305},"'￥'",[76,79041,1363],{"class":93},[76,79043,79044,79046,79048,79050,79052],{"class":78,"line":9916},[76,79045,54992],{"class":250},[76,79047,51507],{"class":93},[76,79049,748],{"class":250},[76,79051,51562],{"class":89},[76,79053,1363],{"class":93},[76,79055,79056],{"class":78,"line":9922},[76,79057,2259],{"class":93},[76,79059,79060],{"class":78,"line":9936},[76,79061,2472],{"emptyLinePlaceholder":125},[76,79063,79064,79067],{"class":78,"line":9942},[76,79065,79066],{"class":2035},"    .filter",[76,79068,15644],{"class":93},[76,79070,79071,79073,79075,79077],{"class":78,"line":9969},[76,79072,55079],{"class":250},[76,79074,51507],{"class":93},[76,79076,51547],{"class":250},[76,79078,1363],{"class":93},[76,79080,79081,79083,79085,79087,79089],{"class":78,"line":9978},[76,79082,54841],{"class":250},[76,79084,51507],{"class":93},[76,79086,78644],{"class":250},[76,79088,51562],{"class":89},[76,79090,1363],{"class":93},[76,79092,79093,79095,79097,79099,79101],{"class":78,"line":9984},[76,79094,54776],{"class":250},[76,79096,51507],{"class":93},[76,79098,392],{"class":250},[76,79100,51626],{"class":250},[76,79102,1363],{"class":93},[76,79104,79105,79107,79109,79111,79113,79115],{"class":78,"line":9992},[76,79106,54765],{"class":250},[76,79108,51507],{"class":93},[76,79110,855],{"class":250},[76,79112,51562],{"class":89},[76,79114,78735],{"class":250},[76,79116,79117],{"class":89},"px\n",[76,79119,79120],{"class":78,"line":9997},[76,79121,2259],{"class":93},[76,79123,79124],{"class":78,"line":16676},[76,79125,2472],{"emptyLinePlaceholder":125},[76,79127,79128,79130,79132],{"class":78,"line":16682},[76,79129,79066],{"class":2035},[76,79131,1471],{"class":51370},[76,79133,15644],{"class":93},[76,79135,79136,79138,79140,79142,79144,79146,79148],{"class":78,"line":16705},[76,79137,54765],{"class":250},[76,79139,51507],{"class":93},[76,79141,646],{"class":250},[76,79143,51562],{"class":89},[76,79145,9022],{"class":250},[76,79147,51562],{"class":89},[76,79149,1363],{"class":93},[76,79151,79152,79154,79156,79158],{"class":78,"line":16711},[76,79153,61791],{"class":250},[76,79155,51507],{"class":93},[76,79157,61888],{"class":250},[76,79159,1363],{"class":93},[76,79161,79162,79164,79166,79168],{"class":78,"line":16734},[76,79163,57486],{"class":250},[76,79165,51507],{"class":93},[76,79167,78970],{"class":250},[76,79169,1363],{"class":93},[76,79171,79172,79174,79176,79178],{"class":78,"line":16748},[76,79173,64040],{"class":250},[76,79175,51507],{"class":93},[76,79177,54807],{"class":250},[76,79179,1363],{"class":93},[76,79181,79182,79184,79186,79188,79190],{"class":78,"line":16768},[76,79183,61820],{"class":250},[76,79185,51507],{"class":93},[76,79187,899],{"class":250},[76,79189,51562],{"class":89},[76,79191,1363],{"class":93},[76,79193,79194],{"class":78,"line":16774},[76,79195,2259],{"class":93},[76,79197,79198],{"class":78,"line":16785},[76,79199,2472],{"emptyLinePlaceholder":125},[76,79201,79202,79204,79206,79208],{"class":78,"line":16808},[76,79203,79066],{"class":2035},[76,79205,1471],{"class":51370},[76,79207,61970],{"class":2035},[76,79209,15644],{"class":93},[76,79211,79212,79214,79216,79219],{"class":78,"line":16830},[76,79213,54954],{"class":250},[76,79215,51507],{"class":93},[76,79217,79218],{"class":250},"#05943c",[76,79220,1363],{"class":93},[76,79222,79223,79225,79227,79229],{"class":78,"line":16835},[76,79224,57486],{"class":250},[76,79226,51507],{"class":93},[76,79228,60912],{"class":250},[76,79230,1363],{"class":93},[76,79232,79233],{"class":78,"line":16841},[76,79234,2259],{"class":93},[76,79236,79237,79239,79241],{"class":78,"line":16855},[76,79238,52487],{"class":93},[76,79240,117],{"class":51370},[76,79242,51377],{"class":93},[76,79244,79245,79247,79249],{"class":78,"line":16868},[76,79246,51855],{"class":93},[76,79248,51404],{"class":51370},[76,79250,51377],{"class":93},[76,79252,79253],{"class":78,"line":16873},[76,79254,2472],{"emptyLinePlaceholder":125},[76,79256,79257,79259,79261],{"class":78,"line":16887},[76,79258,1109],{"class":93},[76,79260,51870],{"class":51370},[76,79262,51377],{"class":93},[76,79264,79265,79267,79269,79271,79273,79276],{"class":78,"line":16892},[76,79266,52214],{"class":93},[76,79268,51681],{"class":51370},[76,79270,53556],{"class":2035},[76,79272,247],{"class":93},[76,79274,79275],{"class":305},"\"filter\"",[76,79277,51377],{"class":93},[76,79279,79280,79282,79284,79286,79288,79290,79293,79295,79297,79300,79302],{"class":78,"line":16898},[76,79281,51411],{"class":93},[76,79283,439],{"class":51370},[76,79285,61127],{"class":2035},[76,79287,247],{"class":93},[76,79289,61132],{"class":305},[76,79291,79292],{"class":2035}," data-index",[76,79294,247],{"class":93},[76,79296,3750],{"class":305},[76,79298,79299],{"class":93},">0-100元\u003C\u002F",[76,79301,439],{"class":51370},[76,79303,51377],{"class":93},[76,79305,79306,79308,79310,79312,79314,79316,79318,79320,79322,79325,79327],{"class":78,"line":16903},[76,79307,51411],{"class":93},[76,79309,439],{"class":51370},[76,79311,61127],{"class":2035},[76,79313,247],{"class":93},[76,79315,61132],{"class":305},[76,79317,79292],{"class":2035},[76,79319,247],{"class":93},[76,79321,3773],{"class":305},[76,79323,79324],{"class":93},">100-300元\u003C\u002F",[76,79326,439],{"class":51370},[76,79328,51377],{"class":93},[76,79330,79331,79333,79335,79337,79339,79341,79343,79345,79347,79350,79352],{"class":78,"line":16917},[76,79332,51411],{"class":93},[76,79334,439],{"class":51370},[76,79336,61127],{"class":2035},[76,79338,247],{"class":93},[76,79340,61132],{"class":305},[76,79342,79292],{"class":2035},[76,79344,247],{"class":93},[76,79346,3786],{"class":305},[76,79348,79349],{"class":93},">300元以上\u003C\u002F",[76,79351,439],{"class":51370},[76,79353,51377],{"class":93},[76,79355,79356,79358,79360,79362,79364,79366,79369,79371],{"class":78,"line":16922},[76,79357,51411],{"class":93},[76,79359,439],{"class":51370},[76,79361,61127],{"class":2035},[76,79363,247],{"class":93},[76,79365,61132],{"class":305},[76,79367,79368],{"class":93},">全部区间\u003C\u002F",[76,79370,439],{"class":51370},[76,79372,51377],{"class":93},[76,79374,79375,79377,79379],{"class":78,"line":16927},[76,79376,52487],{"class":93},[76,79378,51681],{"class":51370},[76,79380,51377],{"class":93},[76,79382,79383,79385,79387,79389,79391,79393],{"class":78,"line":16941},[76,79384,52214],{"class":93},[76,79386,51681],{"class":51370},[76,79388,53556],{"class":2035},[76,79390,247],{"class":93},[76,79392,62678],{"class":305},[76,79394,51377],{"class":93},[76,79396,79397],{"class":78,"line":16953},[76,79398,79399],{"class":82},"    \u003C!-- \u003Cdiv class=\"item\">\n",[76,79401,79402],{"class":78,"line":16958},[76,79403,79404],{"class":82},"      \u003Cimg src=\"\" alt=\"\">\n",[76,79406,79407],{"class":78,"line":16971},[76,79408,79409],{"class":82},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[76,79411,79412],{"class":78,"line":16976},[76,79413,79414],{"class":82},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[76,79416,79417],{"class":78,"line":16981},[76,79418,79419],{"class":82},"    \u003C\u002Fdiv> -->\n",[76,79421,79422,79424,79426],{"class":78,"line":16986},[76,79423,52487],{"class":93},[76,79425,51681],{"class":51370},[76,79427,51377],{"class":93},[76,79429,79430,79432,79434],{"class":78,"line":16999},[76,79431,52214],{"class":93},[76,79433,51883],{"class":51370},[76,79435,51377],{"class":93},[76,79437,79438],{"class":78,"line":17004},[76,79439,79440],{"class":82},"    \u002F\u002F 2. 初始化数据\n",[76,79442,79443,79445,79448,79450],{"class":78,"line":32703},[76,79444,11293],{"class":89},[76,79446,79447],{"class":250}," goodsList",[76,79449,13636],{"class":89},[76,79451,55517],{"class":93},[76,79453,79454],{"class":78,"line":32709},[76,79455,79456],{"class":93},"      {\n",[76,79458,79459,79462,79465],{"class":78,"line":32715},[76,79460,79461],{"class":93},"        id: ",[76,79463,79464],{"class":305},"'4001172'",[76,79466,31536],{"class":93},[76,79468,79469,79472,79475],{"class":78,"line":32721},[76,79470,79471],{"class":93},"        name: ",[76,79473,79474],{"class":305},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[76,79476,31536],{"class":93},[76,79478,79479,79482,79485],{"class":78,"line":32727},[76,79480,79481],{"class":93},"        price: ",[76,79483,79484],{"class":305},"'289.00'",[76,79486,31536],{"class":93},[76,79488,79489,79492,79495],{"class":78,"line":32738},[76,79490,79491],{"class":93},"        picture: ",[76,79493,79494],{"class":305},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[76,79496,31536],{"class":93},[76,79498,79499],{"class":78,"line":32744},[76,79500,77962],{"class":93},[76,79502,79503],{"class":78,"line":32764},[76,79504,79456],{"class":93},[76,79506,79507,79509,79512],{"class":78,"line":32770},[76,79508,79461],{"class":93},[76,79510,79511],{"class":305},"'4001594'",[76,79513,31536],{"class":93},[76,79515,79516,79518,79521],{"class":78,"line":32781},[76,79517,79471],{"class":93},[76,79519,79520],{"class":305},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[76,79522,31536],{"class":93},[76,79524,79525,79527,79530],{"class":78,"line":32787},[76,79526,79481],{"class":93},[76,79528,79529],{"class":305},"'288.00'",[76,79531,31536],{"class":93},[76,79533,79534,79536,79539],{"class":78,"line":32793},[76,79535,79491],{"class":93},[76,79537,79538],{"class":305},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[76,79540,31536],{"class":93},[76,79542,79543],{"class":78,"line":32799},[76,79544,77962],{"class":93},[76,79546,79547],{"class":78,"line":32805},[76,79548,79456],{"class":93},[76,79550,79551,79553,79556],{"class":78,"line":32811},[76,79552,79461],{"class":93},[76,79554,79555],{"class":305},"'4001009'",[76,79557,31536],{"class":93},[76,79559,79560,79562,79565],{"class":78,"line":32817},[76,79561,79471],{"class":93},[76,79563,79564],{"class":305},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[76,79566,31536],{"class":93},[76,79568,79569,79571,79574],{"class":78,"line":32823},[76,79570,79481],{"class":93},[76,79572,79573],{"class":305},"'109.00'",[76,79575,31536],{"class":93},[76,79577,79578,79580,79583],{"class":78,"line":32843},[76,79579,79491],{"class":93},[76,79581,79582],{"class":305},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[76,79584,31536],{"class":93},[76,79586,79587],{"class":78,"line":32849},[76,79588,77962],{"class":93},[76,79590,79591],{"class":78,"line":32865},[76,79592,79456],{"class":93},[76,79594,79595,79597,79600],{"class":78,"line":32871},[76,79596,79461],{"class":93},[76,79598,79599],{"class":305},"'4001874'",[76,79601,31536],{"class":93},[76,79603,79604,79606,79609],{"class":78,"line":32885},[76,79605,79471],{"class":93},[76,79607,79608],{"class":305},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[76,79610,31536],{"class":93},[76,79612,79613,79615,79618],{"class":78,"line":32891},[76,79614,79481],{"class":93},[76,79616,79617],{"class":305},"'488.00'",[76,79619,31536],{"class":93},[76,79621,79622,79624,79627],{"class":78,"line":32906},[76,79623,79491],{"class":93},[76,79625,79626],{"class":305},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[76,79628,31536],{"class":93},[76,79630,79631],{"class":78,"line":32912},[76,79632,77962],{"class":93},[76,79634,79635],{"class":78,"line":32921},[76,79636,79456],{"class":93},[76,79638,79639,79641,79644],{"class":78,"line":32927},[76,79640,79461],{"class":93},[76,79642,79643],{"class":305},"'4001649'",[76,79645,31536],{"class":93},[76,79647,79648,79650,79653],{"class":78,"line":32936},[76,79649,79471],{"class":93},[76,79651,79652],{"class":305},"'大师监制龙泉青瓷茶叶罐'",[76,79654,31536],{"class":93},[76,79656,79657,79659,79662],{"class":78,"line":32942},[76,79658,79481],{"class":93},[76,79660,79661],{"class":305},"'139.00'",[76,79663,31536],{"class":93},[76,79665,79666,79668,79671],{"class":78,"line":32948},[76,79667,79491],{"class":93},[76,79669,79670],{"class":305},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[76,79672,31536],{"class":93},[76,79674,79675],{"class":78,"line":32957},[76,79676,77962],{"class":93},[76,79678,79679],{"class":78,"line":32963},[76,79680,79456],{"class":93},[76,79682,79683,79685,79688],{"class":78,"line":32974},[76,79684,79461],{"class":93},[76,79686,79687],{"class":305},"'3997185'",[76,79689,31536],{"class":93},[76,79691,79692,79694,79697],{"class":78,"line":32980},[76,79693,79471],{"class":93},[76,79695,79696],{"class":305},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[76,79698,31536],{"class":93},[76,79700,79701,79703,79706],{"class":78,"line":32999},[76,79702,79481],{"class":93},[76,79704,79705],{"class":305},"'108.00'",[76,79707,31536],{"class":93},[76,79709,79710,79712,79715],{"class":78,"line":33005},[76,79711,79491],{"class":93},[76,79713,79714],{"class":305},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[76,79716,31536],{"class":93},[76,79718,79719],{"class":78,"line":33016},[76,79720,77962],{"class":93},[76,79722,79723],{"class":78,"line":33022},[76,79724,79456],{"class":93},[76,79726,79727,79729,79732],{"class":78,"line":33042},[76,79728,79461],{"class":93},[76,79730,79731],{"class":305},"'3997403'",[76,79733,31536],{"class":93},[76,79735,79736,79738,79741],{"class":78,"line":33058},[76,79737,79471],{"class":93},[76,79739,79740],{"class":305},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[76,79742,31536],{"class":93},[76,79744,79745,79747,79750],{"class":78,"line":33064},[76,79746,79481],{"class":93},[76,79748,79749],{"class":305},"'100.00'",[76,79751,31536],{"class":93},[76,79753,79754,79756,79759],{"class":78,"line":33078},[76,79755,79491],{"class":93},[76,79757,79758],{"class":305},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[76,79760,31536],{"class":93},[76,79762,79763],{"class":78,"line":33084},[76,79764,77962],{"class":93},[76,79766,79767],{"class":78,"line":33090},[76,79768,79456],{"class":93},[76,79770,79771,79773,79776],{"class":78,"line":33101},[76,79772,79461],{"class":93},[76,79774,79775],{"class":305},"'3998274'",[76,79777,31536],{"class":93},[76,79779,79780,79782,79785],{"class":78,"line":33107},[76,79781,79471],{"class":93},[76,79783,79784],{"class":305},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[76,79786,31536],{"class":93},[76,79788,79789,79791,79793],{"class":78,"line":33113},[76,79790,79481],{"class":93},[76,79792,79661],{"class":305},[76,79794,31536],{"class":93},[76,79796,79797,79799,79802],{"class":78,"line":33123},[76,79798,79491],{"class":93},[76,79800,79801],{"class":305},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[76,79803,31536],{"class":93},[76,79805,79806],{"class":78,"line":33129},[76,79807,77962],{"class":93},[76,79809,79810],{"class":78,"line":33140},[76,79811,53179],{"class":93},[76,79813,79814],{"class":78,"line":33146},[76,79815,2472],{"emptyLinePlaceholder":125},[76,79817,79818],{"class":78,"line":33156},[76,79819,79820],{"class":82},"    \u002F\u002F 1.渲染函数\n",[76,79822,79823,79825,79827,79829,79831],{"class":78,"line":33161},[76,79824,70154],{"class":89},[76,79826,70157],{"class":2035},[76,79828,202],{"class":93},[76,79830,3952],{"class":5288},[76,79832,12514],{"class":93},[76,79834,79835],{"class":78,"line":33167},[76,79836,79837],{"class":82},"      \u002F\u002F 声明空字符串\n",[76,79839,79840,79843,79846,79848],{"class":78,"line":33216},[76,79841,79842],{"class":89},"      let",[76,79844,79845],{"class":93}," str ",[76,79847,247],{"class":89},[76,79849,70174],{"class":305},[76,79851,79852],{"class":78,"line":33263},[76,79853,70179],{"class":82},[76,79855,79856,79858,79861,79863,79866,79869],{"class":78,"line":33268},[76,79857,58077],{"class":93},[76,79859,79860],{"class":2035},"forEach",[76,79862,202],{"class":93},[76,79864,79865],{"class":5288},"item",[76,79867,79868],{"class":89}," =>",[76,79870,15644],{"class":93},[76,79872,79873,79875,79878,79881,79883,79886,79888,79891,79894,79896],{"class":78,"line":33274},[76,79874,61340],{"class":89},[76,79876,79877],{"class":93}," { ",[76,79879,79880],{"class":250},"name",[76,79882,12507],{"class":93},[76,79884,79885],{"class":250},"price",[76,79887,12507],{"class":93},[76,79889,79890],{"class":250},"picture",[76,79892,79893],{"class":93}," } ",[76,79895,247],{"class":89},[76,79897,79898],{"class":93}," item\n",[76,79900,79901,79904,79906],{"class":78,"line":33293},[76,79902,79903],{"class":93},"        str ",[76,79905,9549],{"class":89},[76,79907,70238],{"class":305},[76,79909,79910],{"class":78,"line":33299},[76,79911,79912],{"class":305},"          \u003Cdiv class=\"item\">\n",[76,79914,79915,79918,79920],{"class":78,"line":33319},[76,79916,79917],{"class":305},"            \u003Cimg src=\"${",[76,79919,79890],{"class":93},[76,79921,79922],{"class":305},"}\" alt=\"\">\n",[76,79924,79925,79928,79930],{"class":78,"line":33325},[76,79926,79927],{"class":305},"            \u003Cp class=\"name\">${",[76,79929,79880],{"class":93},[76,79931,79932],{"class":305},"}\u003C\u002Fp>\n",[76,79934,79935,79938,79940],{"class":78,"line":33331},[76,79936,79937],{"class":305},"            \u003Cp class=\"price\">${",[76,79939,79885],{"class":93},[76,79941,79932],{"class":305},[76,79943,79944],{"class":78,"line":33341},[76,79945,79946],{"class":305},"          \u003C\u002Fdiv>\n",[76,79948,79949],{"class":78,"line":33346},[76,79950,79951],{"class":305},"        `\n",[76,79953,79954],{"class":78,"line":33352},[76,79955,64885],{"class":93},[76,79957,79958],{"class":78,"line":33368},[76,79959,79960],{"class":82},"      \u002F\u002F 追加给List\n",[76,79962,79963,79965,79967,79969,79972,79974,79976],{"class":78,"line":33413},[76,79964,55841],{"class":93},[76,79966,54469],{"class":2035},[76,79968,202],{"class":93},[76,79970,79971],{"class":305},"'.list'",[76,79973,74319],{"class":93},[76,79975,247],{"class":89},[76,79977,74055],{"class":93},[76,79979,79980],{"class":78,"line":33419},[76,79981,2259],{"class":93},[76,79983,79984],{"class":78,"line":33425},[76,79985,79986],{"class":82},"    \u002F\u002F 页面一打开就需要渲染\n",[76,79988,79989,79992],{"class":78,"line":33431},[76,79990,79991],{"class":2035},"    render",[76,79993,79994],{"class":93},"(goodsList)\n",[76,79996,79997],{"class":78,"line":33442},[76,79998,79999],{"class":82},"    \u002F\u002F 2.过滤筛选\n",[76,80001,80002,80004,80006,80008,80011,80013,80015,80017,80019,80021,80023,80025],{"class":78,"line":33448},[76,80003,52477],{"class":93},[76,80005,54469],{"class":2035},[76,80007,202],{"class":93},[76,80009,80010],{"class":305},"'.filter'",[76,80012,30896],{"class":93},[76,80014,57883],{"class":2035},[76,80016,202],{"class":93},[76,80018,57888],{"class":305},[76,80020,12507],{"class":93},[76,80022,275],{"class":5288},[76,80024,79868],{"class":89},[76,80026,15644],{"class":93},[76,80028,80029],{"class":78,"line":33454},[76,80030,80031],{"class":82},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[76,80033,80034,80036,80038,80041,80043,80045,80047,80049],{"class":78,"line":33460},[76,80035,58298],{"class":89},[76,80037,79877],{"class":93},[76,80039,80040],{"class":250},"tagName",[76,80042,12507],{"class":93},[76,80044,31607],{"class":250},[76,80046,79893],{"class":93},[76,80048,247],{"class":89},[76,80050,80051],{"class":93}," e.target\n",[76,80053,80054],{"class":78,"line":33478},[76,80055,80056],{"class":82},"      \u002F\u002F 判断\n",[76,80058,80059,80061,80063,80065,80067],{"class":78,"line":33492},[76,80060,54550],{"class":89},[76,80062,67104],{"class":93},[76,80064,54556],{"class":89},[76,80066,68326],{"class":305},[76,80068,12514],{"class":93},[76,80070,80071],{"class":78,"line":33501},[76,80072,80073],{"class":82},"        \u002F\u002F console.log(11)\n",[76,80075,80076],{"class":78,"line":33510},[76,80077,80078],{"class":82},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[76,80080,80081],{"class":78,"line":33519},[76,80082,80083],{"class":82},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[76,80085,80086,80088,80090,80092],{"class":78,"line":33528},[76,80087,51900],{"class":89},[76,80089,51903],{"class":93},[76,80091,247],{"class":89},[76,80093,80094],{"class":93}," goodsList\n",[76,80096,80097,80099,80102,80104,80107],{"class":78,"line":33534},[76,80098,2569],{"class":89},[76,80100,80101],{"class":93}," (dataset.index ",[76,80103,54556],{"class":89},[76,80105,80106],{"class":305}," '1'",[76,80108,12514],{"class":93},[76,80110,80111,80114,80116,80119,80122,80124,80126,80128,80131,80133,80135,80138,80140,80142,80144],{"class":78,"line":33540},[76,80112,80113],{"class":93},"          arr ",[76,80115,247],{"class":89},[76,80117,80118],{"class":93}," goodsList.",[76,80120,80121],{"class":2035},"filter",[76,80123,202],{"class":93},[76,80125,79865],{"class":5288},[76,80127,79868],{"class":89},[76,80129,80130],{"class":93}," item.price ",[76,80132,1782],{"class":89},[76,80134,4165],{"class":250},[76,80136,80137],{"class":89}," &&",[76,80139,80130],{"class":93},[76,80141,1660],{"class":89},[76,80143,5826],{"class":250},[76,80145,208],{"class":93},[76,80147,80148,80151,80153,80155,80157,80159,80162],{"class":78,"line":33548},[76,80149,80150],{"class":93},"        } ",[76,80152,1773],{"class":89},[76,80154,1776],{"class":89},[76,80156,80101],{"class":93},[76,80158,54556],{"class":89},[76,80160,80161],{"class":305}," '2'",[76,80163,12514],{"class":93},[76,80165,80166,80168,80170,80172,80174,80176,80178,80180,80182,80184,80186,80188,80190,80192,80195],{"class":78,"line":33553},[76,80167,80113],{"class":93},[76,80169,247],{"class":89},[76,80171,80118],{"class":93},[76,80173,80121],{"class":2035},[76,80175,202],{"class":93},[76,80177,79865],{"class":5288},[76,80179,79868],{"class":89},[76,80181,80130],{"class":93},[76,80183,1782],{"class":89},[76,80185,5826],{"class":250},[76,80187,80137],{"class":89},[76,80189,80130],{"class":93},[76,80191,1660],{"class":89},[76,80193,80194],{"class":250}," 300",[76,80196,208],{"class":93},[76,80198,80199,80201,80203,80205,80207,80209,80212],{"class":78,"line":33559},[76,80200,80150],{"class":93},[76,80202,1773],{"class":89},[76,80204,1776],{"class":89},[76,80206,80101],{"class":93},[76,80208,54556],{"class":89},[76,80210,80211],{"class":305}," '3'",[76,80213,12514],{"class":93},[76,80215,80216,80218,80220,80222,80224,80226,80228,80230,80232,80234,80236],{"class":78,"line":33570},[76,80217,80113],{"class":93},[76,80219,247],{"class":89},[76,80221,80118],{"class":93},[76,80223,80121],{"class":2035},[76,80225,202],{"class":93},[76,80227,79865],{"class":5288},[76,80229,79868],{"class":89},[76,80231,80130],{"class":93},[76,80233,1782],{"class":89},[76,80235,80194],{"class":250},[76,80237,208],{"class":93},[76,80239,80240],{"class":78,"line":33576},[76,80241,2601],{"class":93},[76,80243,80244],{"class":78,"line":33596},[76,80245,80246],{"class":82},"        \u002F\u002F 渲染函数\n",[76,80248,80249,80251],{"class":78,"line":33602},[76,80250,70478],{"class":2035},[76,80252,52482],{"class":93},[76,80254,80255],{"class":78,"line":33608},[76,80256,52468],{"class":93},[76,80258,80259],{"class":78,"line":33614},[76,80260,2472],{"emptyLinePlaceholder":125},[76,80262,80263],{"class":78,"line":33631},[76,80264,33531],{"class":93},[76,80266,80267,80269,80271],{"class":78,"line":33637},[76,80268,52487],{"class":93},[76,80270,51883],{"class":51370},[76,80272,51377],{"class":93},[76,80274,80275,80277,80279],{"class":78,"line":33643},[76,80276,51855],{"class":93},[76,80278,51870],{"class":51370},[76,80280,51377],{"class":93},[76,80282,80283],{"class":78,"line":33649},[76,80284,2472],{"emptyLinePlaceholder":125},[76,80286,80287,80289,80291],{"class":78,"line":33655},[76,80288,51855],{"class":93},[76,80290,50705],{"class":51370},[76,80292,51377],{"class":93},[140,80294,80296],{"id":80295},"_410-深入了解对象","4.10 深入了解对象",[169,80298,80300],{"id":80299},"_4101-创建对象","4.10.1 创建对象",[14,80302,80303],{},[56,80304],{"alt":58,"src":80305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80307,80308],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[169,80310,80312],{"id":80311},"_4102-构造函数","4.10.2 构造函数",[14,80314,80315,80318],{},[350,80316,80317],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80320,80321,80324],{},[350,80322,80323],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[67,80326,80328],{"className":50703,"code":80327,"language":50705,"meta":58,"style":58},"\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",[73,80329,80330,80338,80343,80364,80377,80389,80401,80405,80410,80437,80442,80469],{"__ignoreMap":58},[76,80331,80332,80334,80336],{"class":78,"line":79},[76,80333,1109],{"class":93},[76,80335,51883],{"class":51370},[76,80337,51377],{"class":93},[76,80339,80340],{"class":78,"line":86},[76,80341,80342],{"class":82},"\u002F\u002F例：\n",[76,80344,80345,80347,80350,80352,80354,80356,80358,80360,80362],{"class":78,"line":97},[76,80346,54519],{"class":89},[76,80348,80349],{"class":2035}," Pig",[76,80351,202],{"class":93},[76,80353,79880],{"class":5288},[76,80355,578],{"class":93},[76,80357,70291],{"class":5288},[76,80359,578],{"class":93},[76,80361,70308],{"class":5288},[76,80363,12514],{"class":93},[76,80365,80366,80369,80372,80374],{"class":78,"line":103},[76,80367,80368],{"class":250},"    this",[76,80370,80371],{"class":93},".name",[76,80373,247],{"class":89},[76,80375,80376],{"class":93},"name\n",[76,80378,80379,80381,80384,80386],{"class":78,"line":1273},[76,80380,80368],{"class":250},[76,80382,80383],{"class":93},".age",[76,80385,247],{"class":89},[76,80387,80388],{"class":93},"age\n",[76,80390,80391,80393,80396,80398],{"class":78,"line":1287},[76,80392,80368],{"class":250},[76,80394,80395],{"class":93},".gender",[76,80397,247],{"class":89},[76,80399,80400],{"class":93},"gender    \n",[76,80402,80403],{"class":78,"line":1293},[76,80404,1637],{"class":93},[76,80406,80407],{"class":78,"line":1384},[76,80408,80409],{"class":82},"\u002F\u002F创建佩奇对象\n",[76,80411,80412,80414,80417,80419,80421,80423,80426,80428,80430,80432,80435],{"class":78,"line":1390},[76,80413,6864],{"class":89},[76,80415,80416],{"class":250}," Peppa",[76,80418,11789],{"class":89},[76,80420,80349],{"class":2035},[76,80422,202],{"class":93},[76,80424,80425],{"class":305},"'佩奇'",[76,80427,578],{"class":93},[76,80429,544],{"class":250},[76,80431,578],{"class":93},[76,80433,80434],{"class":305},"'女'",[76,80436,208],{"class":93},[76,80438,80439],{"class":78,"line":1402},[76,80440,80441],{"class":82},"\u002F\u002F创建乔治对象\n",[76,80443,80444,80446,80449,80451,80453,80455,80458,80460,80462,80464,80467],{"class":78,"line":1684},[76,80445,6864],{"class":89},[76,80447,80448],{"class":250}," George",[76,80450,11789],{"class":89},[76,80452,80349],{"class":2035},[76,80454,202],{"class":93},[76,80456,80457],{"class":305},"'乔治'",[76,80459,578],{"class":93},[76,80461,272],{"class":250},[76,80463,578],{"class":93},[76,80465,80466],{"class":305},"'男'",[76,80468,208],{"class":93},[76,80470,80471,80473,80475],{"class":78,"line":1689},[76,80472,51855],{"class":93},[76,80474,51883],{"class":51370},[76,80476,51377],{"class":93},[14,80478,80479],{},[56,80480],{"alt":58,"src":80481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80483,80484],{},[56,80485],{"alt":58,"src":80486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80488,80489],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80491,80492],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80494,80495],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80497,80498],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80500,80501],{},"这里用等号是因为：对象.属性=值",[14,80503,80504],{},"①利用对象字面量创建对象",[14,80506,80507],{},"const o={",[14,80509,80510],{},"name:'pink'",[14,80512,80513],{},"} ②利用new Object创建对象",[14,80515,80516],{},"const o=new Object({name:'pink'})",[14,80518,80519],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80521,80522],{},"构造函数创建对象的执行过程：",[14,80524,80525],{},[56,80526],{"alt":58,"src":80527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[169,80529,80531],{"id":80530},"_4103-实例成员","4.10.3 实例成员",[14,80533,80534],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[152,80536,80537,80540,80543],{},[155,80538,80539],{},"实例对象的属性和方法即为实例成员",[155,80541,80542],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[155,80544,80545],{},"构造函数创建的实例对象彼此独立互不影响",[169,80547,80549],{"id":80548},"_4104-静态成员","4.10.4 静态成员",[14,80551,80552],{},[56,80553],{"alt":58,"src":80554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80556,80557],{},"静态成员有Date.now() Math.PI Math.random()",[14,80559,80560],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80562,80563],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80565,80566],{},"function Pig(name) n {",[14,80568,80569],{},"this.name=name",[14,80571,1145],{},[14,80573,80574],{},"Pig.eyes=2",[14,80576,80577],{},"Pig.sayHai=function () { console.log(this) }",[14,80579,80580],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80582,80583],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80585,11404],{},[152,80587,80588,80591,80594,80597,80600],{},[155,80589,80590],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[155,80592,80593],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[155,80595,80596],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[155,80598,80599],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[155,80601,80602],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80604,80605],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[169,80607,80609],{"id":80608},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80611,80612],{},"内置构造函数包含：",[14,80614,80615],{},[56,80616],{"alt":58,"src":80617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80619,80620],{},[56,80621],{"alt":58,"src":80622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80624,80625],{},"这些基本数据类型，js对他们进行了包装",[51883,80627,80628],{},"\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",[22070,80630,80632],{"id":80631},"_41051-object","4.10.5.1 Object",[14,80634,80635],{},"Object 是内置的构造函数，用于创建普通对象",[14,80637,80638],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[67,80640,80642],{"className":50703,"code":80641,"language":50705,"meta":58,"style":58},"const user=new Object({name:'小明',age:15})\n",[73,80643,80644],{"__ignoreMap":58},[76,80645,80646],{"class":78,"line":79},[76,80647,80641],{"class":93},[14,80649,80650],{},"三个常用的静态方法：",[22982,80652,80654],{"id":80653},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80656,80657],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80659,80660],{},[56,80661],{"alt":58,"src":80662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80664,80665],{},[56,80666],{"alt":58,"src":80667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[67,80669,80671],{"className":53137,"code":80670,"language":53139,"meta":58,"style":58},"\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",[73,80672,80673,80681,80689,80694,80699,80704,80709,80714,80719,80727],{"__ignoreMap":58},[76,80674,80675,80677,80679],{"class":78,"line":79},[76,80676,1109],{"class":93},[76,80678,51870],{"class":51370},[76,80680,51377],{"class":93},[76,80682,80683,80685,80687],{"class":78,"line":86},[76,80684,52214],{"class":93},[76,80686,51883],{"class":51370},[76,80688,51377],{"class":93},[76,80690,80691],{"class":78,"line":97},[76,80692,80693],{"class":93},"    const o = { name: 'pink', age: 6 }\n",[76,80695,80696],{"class":78,"line":103},[76,80697,80698],{"class":93},"    \u002F\u002F 获得所有属性名\n",[76,80700,80701],{"class":78,"line":1273},[76,80702,80703],{"class":93},"    const arr = Object.keys(o)\n",[76,80705,80706],{"class":78,"line":1287},[76,80707,80708],{"class":93},"    console.log(arr)\n",[76,80710,80711],{"class":78,"line":1293},[76,80712,80713],{"class":93},"    \u002F\u002F 获得所有属性值\n",[76,80715,80716],{"class":78,"line":1384},[76,80717,80718],{"class":93},"    console.log(Object.values(o))\n",[76,80720,80721,80723,80725],{"class":78,"line":1390},[76,80722,52487],{"class":93},[76,80724,51883],{"class":51370},[76,80726,51377],{"class":93},[76,80728,80729,80731,80733],{"class":78,"line":1402},[76,80730,51855],{"class":93},[76,80732,51870],{"class":51370},[76,80734,51377],{"class":93},[22982,80736,80738],{"id":80737},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80740,80741],{},"Object.assign(oo,o)",[14,80743,80744],{},"后的东西添加给前 是追加",[14,80746,80747],{},[56,80748],{"alt":58,"src":80749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80751,80752],{},[56,80753],{"alt":58,"src":80754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[67,80756,80758],{"className":53137,"code":80757,"language":53139,"meta":58,"style":58},"\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",[73,80759,80760,80768,80776,80780,80784,80788,80792,80796,80800,80805,80810,80815,80820,80825,80833],{"__ignoreMap":58},[76,80761,80762,80764,80766],{"class":78,"line":79},[76,80763,1109],{"class":93},[76,80765,51870],{"class":51370},[76,80767,51377],{"class":93},[76,80769,80770,80772,80774],{"class":78,"line":86},[76,80771,52214],{"class":93},[76,80773,51883],{"class":51370},[76,80775,51377],{"class":93},[76,80777,80778],{"class":78,"line":97},[76,80779,80693],{"class":93},[76,80781,80782],{"class":78,"line":103},[76,80783,80698],{"class":93},[76,80785,80786],{"class":78,"line":1273},[76,80787,80703],{"class":93},[76,80789,80790],{"class":78,"line":1287},[76,80791,80708],{"class":93},[76,80793,80794],{"class":78,"line":1293},[76,80795,80713],{"class":93},[76,80797,80798],{"class":78,"line":1384},[76,80799,80718],{"class":93},[76,80801,80802],{"class":78,"line":1390},[76,80803,80804],{"class":93},"    const oo = {}\n",[76,80806,80807],{"class":78,"line":1402},[76,80808,80809],{"class":93},"    Object.assign(oo, o)\n",[76,80811,80812],{"class":78,"line":1684},[76,80813,80814],{"class":93},"    console.log(oo)\n",[76,80816,80817],{"class":78,"line":1689},[76,80818,80819],{"class":93},"    Object.assign(o, { gender: '女' })\n",[76,80821,80822],{"class":78,"line":1695},[76,80823,80824],{"class":93},"    console.log(o)\n",[76,80826,80827,80829,80831],{"class":78,"line":1700},[76,80828,52487],{"class":93},[76,80830,51883],{"class":51370},[76,80832,51377],{"class":93},[76,80834,80835,80837,80839],{"class":78,"line":1714},[76,80836,51855],{"class":93},[76,80838,51870],{"class":51370},[76,80840,51377],{"class":93},[14,80842,80843],{},[56,80844],{"alt":58,"src":80845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22070,80847,80849],{"id":80848},"_41052-array","4.10.5.2 Array",[14,80851,80852],{},"Array 是内置的构造函数，用于创建数组",[14,80854,80855],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[67,80857,80859],{"className":50703,"code":80858,"language":50705,"meta":58,"style":58},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[73,80860,80861,80866],{"__ignoreMap":58},[76,80862,80863],{"class":78,"line":79},[76,80864,80865],{"class":93},"const arr=new Array(3,5)\n",[76,80867,80868],{"class":78,"line":86},[76,80869,80870],{"class":93},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80872,80873],{},"Array的实例方法，这个方法是实例成员",[14,80875,80876],{},[56,80877],{"alt":58,"src":80878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22982,80880,80882],{"id":80881},"_410521-reduce","4.10.5.2.1 reduce",[14,80884,80885],{},[56,80886],{"alt":58,"src":80887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[67,80889,80891],{"className":53137,"code":80890,"language":53139,"meta":58,"style":58},"\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",[73,80892,80893,80901,80909,80914,80919,80924,80929,80933,80938,80943,80948,80952,80957,80962,80966,80971,80976,80981,80989],{"__ignoreMap":58},[76,80894,80895,80897,80899],{"class":78,"line":79},[76,80896,1109],{"class":93},[76,80898,51870],{"class":51370},[76,80900,51377],{"class":93},[76,80902,80903,80905,80907],{"class":78,"line":86},[76,80904,52214],{"class":93},[76,80906,51883],{"class":51370},[76,80908,51377],{"class":93},[76,80910,80911],{"class":78,"line":97},[76,80912,80913],{"class":93},"    const arr = [1, 5, 8]\n",[76,80915,80916],{"class":78,"line":103},[76,80917,80918],{"class":93},"    \u002F\u002F 1.没有初始值\n",[76,80920,80921],{"class":78,"line":1273},[76,80922,80923],{"class":93},"    const total = arr.reduce(function (prev, current) {\n",[76,80925,80926],{"class":78,"line":1287},[76,80927,80928],{"class":93},"      return prev + current\n",[76,80930,80931],{"class":78,"line":1293},[76,80932,33531],{"class":93},[76,80934,80935],{"class":78,"line":1384},[76,80936,80937],{"class":93},"    console.log(total)   \u002F\u002F14\n",[76,80939,80940],{"class":78,"line":1390},[76,80941,80942],{"class":93},"    \u002F\u002F 2.有初始值\n",[76,80944,80945],{"class":78,"line":1402},[76,80946,80947],{"class":93},"    const total1 = arr.reduce(function (prev, current) {\n",[76,80949,80950],{"class":78,"line":1684},[76,80951,80928],{"class":93},[76,80953,80954],{"class":78,"line":1689},[76,80955,80956],{"class":93},"    }, 10)\n",[76,80958,80959],{"class":78,"line":1695},[76,80960,80961],{"class":93},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[76,80963,80964],{"class":78,"line":1700},[76,80965,2472],{"emptyLinePlaceholder":125},[76,80967,80968],{"class":78,"line":1714},[76,80969,80970],{"class":93},"    \u002F\u002F 3.箭头函数写法\n",[76,80972,80973],{"class":78,"line":1719},[76,80974,80975],{"class":93},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[76,80977,80978],{"class":78,"line":1725},[76,80979,80980],{"class":93},"    console.log(total2)   \u002F\u002F24\n",[76,80982,80983,80985,80987],{"class":78,"line":1746},[76,80984,52487],{"class":93},[76,80986,51883],{"class":51370},[76,80988,51377],{"class":93},[76,80990,80991,80993,80995],{"class":78,"line":1751},[76,80992,51855],{"class":93},[76,80994,51870],{"class":51370},[76,80996,51377],{"class":93},[14,80998,80999],{},"执行过程：",[152,81001,81002,81005,81008],{},[155,81003,81004],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[155,81006,81007],{},"每一次循环，把返回值给作为下一次循环的上一次值",[155,81009,81010],{},"如果有起始值，则起始值作为上一次值",[67,81012,81014],{"className":53137,"code":81013,"language":53139,"meta":58,"style":58},"\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",[73,81015,81016,81024,81032,81036,81040,81044,81048,81052,81056,81061,81066,81071,81076,81081,81085,81089,81093,81097,81101,81105,81110,81114,81119,81123,81128,81133,81137,81141,81145,81153],{"__ignoreMap":58},[76,81017,81018,81020,81022],{"class":78,"line":79},[76,81019,1109],{"class":93},[76,81021,51870],{"class":51370},[76,81023,51377],{"class":93},[76,81025,81026,81028,81030],{"class":78,"line":86},[76,81027,52214],{"class":93},[76,81029,51883],{"class":51370},[76,81031,51377],{"class":93},[76,81033,81034],{"class":78,"line":97},[76,81035,80913],{"class":93},[76,81037,81038],{"class":78,"line":103},[76,81039,80918],{"class":93},[76,81041,81042],{"class":78,"line":1273},[76,81043,80923],{"class":93},[76,81045,81046],{"class":78,"line":1287},[76,81047,80928],{"class":93},[76,81049,81050],{"class":78,"line":1293},[76,81051,33531],{"class":93},[76,81053,81054],{"class":78,"line":1384},[76,81055,80937],{"class":93},[76,81057,81058],{"class":78,"line":1390},[76,81059,81060],{"class":93},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[76,81062,81063],{"class":78,"line":1402},[76,81064,81065],{"class":93},"    \u002F\u002F     1              5                    6\n",[76,81067,81068],{"class":78,"line":1684},[76,81069,81070],{"class":93},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[76,81072,81073],{"class":78,"line":1689},[76,81074,81075],{"class":93},"    \u002F\u002F     6              8                    14\n",[76,81077,81078],{"class":78,"line":1695},[76,81079,81080],{"class":93},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[76,81082,81083],{"class":78,"line":1700},[76,81084,80942],{"class":93},[76,81086,81087],{"class":78,"line":1714},[76,81088,80947],{"class":93},[76,81090,81091],{"class":78,"line":1719},[76,81092,80928],{"class":93},[76,81094,81095],{"class":78,"line":1725},[76,81096,80956],{"class":93},[76,81098,81099],{"class":78,"line":1746},[76,81100,80961],{"class":93},[76,81102,81103],{"class":78,"line":1751},[76,81104,81060],{"class":93},[76,81106,81107],{"class":78,"line":1765},[76,81108,81109],{"class":93},"    \u002F\u002F     10             1                     11\n",[76,81111,81112],{"class":78,"line":1770},[76,81113,81070],{"class":93},[76,81115,81116],{"class":78,"line":1799},[76,81117,81118],{"class":93},"    \u002F\u002F     11             5                    16\n",[76,81120,81121],{"class":78,"line":1804},[76,81122,81070],{"class":93},[76,81124,81125],{"class":78,"line":1821},[76,81126,81127],{"class":93},"    \u002F\u002F     16             8                    24\n",[76,81129,81130],{"class":78,"line":1826},[76,81131,81132],{"class":93},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[76,81134,81135],{"class":78,"line":1831},[76,81136,80970],{"class":93},[76,81138,81139],{"class":78,"line":1836},[76,81140,80975],{"class":93},[76,81142,81143],{"class":78,"line":1850},[76,81144,80980],{"class":93},[76,81146,81147,81149,81151],{"class":78,"line":1855},[76,81148,52487],{"class":93},[76,81150,51883],{"class":51370},[76,81152,51377],{"class":93},[76,81154,81155,81157,81159],{"class":78,"line":2649},[76,81156,51855],{"class":93},[76,81158,51870],{"class":51370},[76,81160,51377],{"class":93},[22982,81162,81164],{"id":81163},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81166,81167],{},[56,81168],{"alt":58,"src":81169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[67,81171,81173],{"className":53137,"code":81172,"language":53139,"meta":58,"style":58},"\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",[73,81174,81175,81183,81191,81196,81201,81206,81211,81215,81220,81225,81230,81235,81240,81245,81249,81254,81258,81263,81271],{"__ignoreMap":58},[76,81176,81177,81179,81181],{"class":78,"line":79},[76,81178,1109],{"class":93},[76,81180,51870],{"class":51370},[76,81182,51377],{"class":93},[76,81184,81185,81187,81189],{"class":78,"line":86},[76,81186,52214],{"class":93},[76,81188,51883],{"class":51370},[76,81190,51377],{"class":93},[76,81192,81193],{"class":78,"line":97},[76,81194,81195],{"class":93},"    const arr = [\n",[76,81197,81198],{"class":78,"line":103},[76,81199,81200],{"class":93},"      { name: '张三', salary: 10000 },\n",[76,81202,81203],{"class":78,"line":1273},[76,81204,81205],{"class":93},"      { name: '李四', salary: 10000 },\n",[76,81207,81208],{"class":78,"line":1287},[76,81209,81210],{"class":93},"      { name: '王五', salary: 10000 }\n",[76,81212,81213],{"class":78,"line":1293},[76,81214,53179],{"class":93},[76,81216,81217],{"class":78,"line":1384},[76,81218,81219],{"class":93},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[76,81221,81222],{"class":78,"line":1390},[76,81223,81224],{"class":93},"    \u002F\u002F prev是累计值\n",[76,81226,81227],{"class":78,"line":1402},[76,81228,81229],{"class":93},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[76,81231,81232],{"class":78,"line":1684},[76,81233,81234],{"class":93},"    console.log(total)\n",[76,81236,81237],{"class":78,"line":1689},[76,81238,81239],{"class":93},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[76,81241,81242],{"class":78,"line":1695},[76,81243,81244],{"class":93},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[76,81246,81247],{"class":78,"line":1700},[76,81248,81239],{"class":93},[76,81250,81251],{"class":78,"line":1714},[76,81252,81253],{"class":93},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[76,81255,81256],{"class":78,"line":1719},[76,81257,81239],{"class":93},[76,81259,81260],{"class":78,"line":1725},[76,81261,81262],{"class":93},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[76,81264,81265,81267,81269],{"class":78,"line":1746},[76,81266,52487],{"class":93},[76,81268,51883],{"class":51370},[76,81270,51377],{"class":93},[76,81272,81273,81275,81277],{"class":78,"line":1751},[76,81274,51855],{"class":93},[76,81276,51870],{"class":51370},[76,81278,51377],{"class":93},[22982,81280,81282],{"id":81281},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81284,81285],{},[56,81286],{"alt":58,"src":81287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81289,81290],{},[56,81291],{"alt":58,"src":81292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[152,81294,81295],{},[155,81296,81297],{},"find()",[14,81299,81300],{},"循环查找，找到第一个就ok",[14,81302,81303],{},[439,81304,81307],{"href":81305,"rel":81306},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23937],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[67,81309,81311],{"className":50703,"code":81310,"language":50705,"meta":58,"style":58},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[73,81312,81313,81318,81323],{"__ignoreMap":58},[76,81314,81315],{"class":78,"line":79},[76,81316,81317],{"class":93},"const array1 = [5, 12, 8, 130, 44]\n",[76,81319,81320],{"class":78,"line":86},[76,81321,81322],{"class":93},"const found = array1.find((element) => element > 10)\n",[76,81324,81325],{"class":78,"line":97},[76,81326,81327],{"class":93},"console.log(found)  \u002F\u002F12\n",[14,81329,81330,81332,81333,81338,81339,81342,81343,81345,81346,81351,81352,81354,81355,81357,81358,81360,81361],{},[73,81331,81297],{}," 方法是一个",[439,81334,81337],{"href":81335,"rel":81336},"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",[23937],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[73,81340,81341],{},"callbackFn"," 函数，直到 ",[73,81344,81341],{}," 返回一个",[439,81347,81350],{"href":81348,"rel":81349},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23937],"真值","。然后 ",[73,81353,81297],{}," 返回该元素并停止迭代数组。如果 ",[73,81356,81341],{}," 从未返回真值，则 ",[73,81359,81297],{}," 返回 ",[73,81362,81363],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[67,81365,81367],{"className":53137,"code":81366,"language":53139,"meta":58,"style":58},"\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",[73,81368,81369,81377,81385,81390,81395,81400,81404,81409,81414,81418,81423,81428,81432,81436,81441,81446,81450,81454,81459,81464,81469,81474,81479,81483,81488,81493,81498,81503,81507,81512,81520],{"__ignoreMap":58},[76,81370,81371,81373,81375],{"class":78,"line":79},[76,81372,1109],{"class":93},[76,81374,51870],{"class":51370},[76,81376,51377],{"class":93},[76,81378,81379,81381,81383],{"class":78,"line":86},[76,81380,52214],{"class":93},[76,81382,51883],{"class":51370},[76,81384,51377],{"class":93},[76,81386,81387],{"class":78,"line":97},[76,81388,81389],{"class":93},"    const arr = ['red', 'blue', 'green']\n",[76,81391,81392],{"class":78,"line":103},[76,81393,81394],{"class":93},"    const found = arr.find(item => item === 'pink')\n",[76,81396,81397],{"class":78,"line":1273},[76,81398,81399],{"class":93},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[76,81401,81402],{"class":78,"line":1287},[76,81403,2472],{"emptyLinePlaceholder":125},[76,81405,81406],{"class":78,"line":1293},[76,81407,81408],{"class":93},"    \u002F\u002F 使用场景，用于查找数据\n",[76,81410,81411],{"class":78,"line":1384},[76,81412,81413],{"class":93},"    const arr1 = [\n",[76,81415,81416],{"class":78,"line":1390},[76,81417,79456],{"class":93},[76,81419,81420],{"class":78,"line":1402},[76,81421,81422],{"class":93},"        name: '小米',\n",[76,81424,81425],{"class":78,"line":1684},[76,81426,81427],{"class":93},"        price: 1999\n",[76,81429,81430],{"class":78,"line":1689},[76,81431,77962],{"class":93},[76,81433,81434],{"class":78,"line":1695},[76,81435,79456],{"class":93},[76,81437,81438],{"class":78,"line":1700},[76,81439,81440],{"class":93},"        name: '华为',\n",[76,81442,81443],{"class":78,"line":1714},[76,81444,81445],{"class":93},"        price: 3999\n",[76,81447,81448],{"class":78,"line":1719},[76,81449,52468],{"class":93},[76,81451,81452],{"class":78,"line":1725},[76,81453,53179],{"class":93},[76,81455,81456],{"class":78,"line":1746},[76,81457,81458],{"class":93},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[76,81460,81461],{"class":78,"line":1751},[76,81462,81463],{"class":93},"    \u002F\u002F const found1 = arr1.find(item => {\n",[76,81465,81466],{"class":78,"line":1765},[76,81467,81468],{"class":93},"    \u002F\u002F   if (item.name === '小米') {\n",[76,81470,81471],{"class":78,"line":1770},[76,81472,81473],{"class":93},"    \u002F\u002F     return item\n",[76,81475,81476],{"class":78,"line":1799},[76,81477,81478],{"class":93},"    \u002F\u002F   }\n",[76,81480,81481],{"class":78,"line":1804},[76,81482,63360],{"class":93},[76,81484,81485],{"class":78,"line":1821},[76,81486,81487],{"class":93},"    \u002F\u002F 另一种写法\n",[76,81489,81490],{"class":78,"line":1826},[76,81491,81492],{"class":93},"    const found1 = arr1.find(item => {\n",[76,81494,81495],{"class":78,"line":1831},[76,81496,81497],{"class":93},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[76,81499,81500],{"class":78,"line":1836},[76,81501,81502],{"class":93},"      return item.name = '小米'\n",[76,81504,81505],{"class":78,"line":1850},[76,81506,33531],{"class":93},[76,81508,81509],{"class":78,"line":1855},[76,81510,81511],{"class":93},"    console.log(found1)\n",[76,81513,81514,81516,81518],{"class":78,"line":2649},[76,81515,52487],{"class":93},[76,81517,51883],{"class":51370},[76,81519,51377],{"class":93},[76,81521,81522,81524,81526],{"class":78,"line":2663},[76,81523,51855],{"class":93},[76,81525,51870],{"class":51370},[76,81527,51377],{"class":93},[14,81529,81530],{},[56,81531],{"alt":58,"src":81532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81534,81535],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[152,81537,81538],{"start":86},[155,81539,81540],{},"every()返回的是布尔值",[14,81542,81543],{},[439,81544,81547],{"href":81545,"rel":81546},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23937],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81549,81550],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81552,81553],{},"some是只有有一个就没问题",[14,81555,81556],{},"every是必须全是才行",[67,81558,81562],{"className":81559,"code":81560,"language":81561,"meta":58,"style":58},"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",[73,81563,81564,81580,81594,81598,81607],{"__ignoreMap":58},[76,81565,81566,81568,81571,81573,81575,81578],{"class":78,"line":79},[76,81567,54519],{"class":89},[76,81569,81570],{"class":93}," isBigEnough(element, ",[76,81572,74128],{"class":89},[76,81574,12507],{"class":93},[76,81576,81577],{"class":89},"array",[76,81579,12514],{"class":93},[76,81581,81582,81585,81588,81590,81592],{"class":78,"line":86},[76,81583,81584],{"class":89},"  return",[76,81586,81587],{"class":93}," element ",[76,81589,1782],{"class":89},[76,81591,2110],{"class":250},[76,81593,1363],{"class":93},[76,81595,81596],{"class":78,"line":97},[76,81597,1637],{"class":93},[76,81599,81600,81603,81605],{"class":78,"line":103},[76,81601,81602],{"class":93},"[12, 5, 8, 130, 44].every(isBigEnough); ",[76,81604,33399],{"class":89},[76,81606,54586],{"class":93},[76,81608,81609,81612,81614],{"class":78,"line":1273},[76,81610,81611],{"class":93},"[12, 54, 18, 130, 44].every(isBigEnough); ",[76,81613,33399],{"class":89},[76,81615,58010],{"class":93},[67,81617,81619],{"className":53137,"code":81618,"language":53139,"meta":58,"style":58},"\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",[73,81620,81621,81629,81637,81642,81646,81651,81656,81664],{"__ignoreMap":58},[76,81622,81623,81625,81627],{"class":78,"line":79},[76,81624,1109],{"class":93},[76,81626,51870],{"class":51370},[76,81628,51377],{"class":93},[76,81630,81631,81633,81635],{"class":78,"line":86},[76,81632,52214],{"class":93},[76,81634,51883],{"class":51370},[76,81636,51377],{"class":93},[76,81638,81639],{"class":78,"line":97},[76,81640,81641],{"class":93},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[76,81643,81644],{"class":78,"line":103},[76,81645,78392],{"class":93},[76,81647,81648],{"class":78,"line":1273},[76,81649,81650],{"class":93},"    const flag = arr.every(item => item >= 10)\n",[76,81652,81653],{"class":78,"line":1287},[76,81654,81655],{"class":93},"    console.log(flag)    \u002F\u002Ftrue\n",[76,81657,81658,81660,81662],{"class":78,"line":1293},[76,81659,52487],{"class":93},[76,81661,51883],{"class":51370},[76,81663,51377],{"class":93},[76,81665,81666,81668,81670],{"class":78,"line":1384},[76,81667,51855],{"class":93},[76,81669,51870],{"class":51370},[76,81671,51377],{"class":93},[67,81673,81675],{"className":53137,"code":81674,"language":53139,"meta":58,"style":58},"\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",[73,81676,81677,81685,81693,81697,81702,81707,81712,81720],{"__ignoreMap":58},[76,81678,81679,81681,81683],{"class":78,"line":79},[76,81680,1109],{"class":93},[76,81682,51870],{"class":51370},[76,81684,51377],{"class":93},[76,81686,81687,81689,81691],{"class":78,"line":86},[76,81688,52214],{"class":93},[76,81690,51883],{"class":51370},[76,81692,51377],{"class":93},[76,81694,81695],{"class":78,"line":97},[76,81696,81641],{"class":93},[76,81698,81699],{"class":78,"line":103},[76,81700,81701],{"class":93},"    const arr = [10, 0, 5]\n",[76,81703,81704],{"class":78,"line":1273},[76,81705,81706],{"class":93},"    const flag = arr.some(item => item >= 10)\n",[76,81708,81709],{"class":78,"line":1287},[76,81710,81711],{"class":93},"    console.log(flag)   \u002F\u002Ftrue\n",[76,81713,81714,81716,81718],{"class":78,"line":1293},[76,81715,52487],{"class":93},[76,81717,51883],{"class":51370},[76,81719,51377],{"class":93},[76,81721,81722,81724,81726],{"class":78,"line":1384},[76,81723,51855],{"class":93},[76,81725,51870],{"class":51370},[76,81727,51377],{"class":93},[22982,81729,81731],{"id":81730},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81733,81734],{},[56,81735],{"alt":58,"src":81736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[67,81738,81740],{"className":50703,"code":81739,"language":50705,"meta":58,"style":58},"\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",[73,81741,81742,81752,81766,81770,81778,81792,81812,81824,81832,81839,81851,81863,81875,81887,81897,81907,81911,81919,81927,81931,81939,81951,81959,81981,81986,81991,82024,82032,82040,82044],{"__ignoreMap":58},[76,81743,81744,81746,81748,81750],{"class":78,"line":79},[76,81745,51367],{"class":93},[76,81747,51371],{"class":51370},[76,81749,51374],{"class":2035},[76,81751,51377],{"class":93},[76,81753,81754,81756,81758,81760,81762,81764],{"class":78,"line":86},[76,81755,1109],{"class":93},[76,81757,50705],{"class":51370},[76,81759,51386],{"class":2035},[76,81761,247],{"class":93},[76,81763,51391],{"class":305},[76,81765,51377],{"class":93},[76,81767,81768],{"class":78,"line":97},[76,81769,2472],{"emptyLinePlaceholder":125},[76,81771,81772,81774,81776],{"class":78,"line":103},[76,81773,1109],{"class":93},[76,81775,51404],{"class":51370},[76,81777,51377],{"class":93},[76,81779,81780,81782,81784,81786,81788,81790],{"class":78,"line":1273},[76,81781,52214],{"class":93},[76,81783,51414],{"class":51370},[76,81785,51417],{"class":2035},[76,81787,247],{"class":93},[76,81789,51422],{"class":305},[76,81791,51377],{"class":93},[76,81793,81794,81796,81798,81800,81802,81804,81806,81808,81810],{"class":78,"line":1287},[76,81795,52214],{"class":93},[76,81797,51414],{"class":51370},[76,81799,14992],{"class":2035},[76,81801,247],{"class":93},[76,81803,51461],{"class":305},[76,81805,51441],{"class":2035},[76,81807,247],{"class":93},[76,81809,51468],{"class":305},[76,81811,51377],{"class":93},[76,81813,81814,81816,81818,81820,81822],{"class":78,"line":1293},[76,81815,52214],{"class":93},[76,81817,51477],{"class":51370},[76,81819,51480],{"class":93},[76,81821,51477],{"class":51370},[76,81823,51377],{"class":93},[76,81825,81826,81828,81830],{"class":78,"line":1384},[76,81827,52214],{"class":93},[76,81829,117],{"class":51370},[76,81831,51377],{"class":93},[76,81833,81834,81837],{"class":78,"line":1390},[76,81835,81836],{"class":51370},"    div",[76,81838,15644],{"class":93},[76,81840,81841,81843,81845,81847,81849],{"class":78,"line":1402},[76,81842,54841],{"class":250},[76,81844,51507],{"class":93},[76,81846,1794],{"class":250},[76,81848,51562],{"class":89},[76,81850,1363],{"class":93},[76,81852,81853,81855,81857,81859,81861],{"class":78,"line":1684},[76,81854,54855],{"class":250},[76,81856,51507],{"class":93},[76,81858,601],{"class":250},[76,81860,51562],{"class":89},[76,81862,1363],{"class":93},[76,81864,81865,81867,81869,81871,81873],{"class":78,"line":1689},[76,81866,57429],{"class":250},[76,81868,51507],{"class":93},[76,81870,601],{"class":250},[76,81872,51562],{"class":89},[76,81874,1363],{"class":93},[76,81876,81877,81879,81881,81883,81885],{"class":78,"line":1695},[76,81878,65203],{"class":250},[76,81880,51507],{"class":93},[76,81882,698],{"class":250},[76,81884,51562],{"class":89},[76,81886,1363],{"class":93},[76,81888,81889,81891,81893,81895],{"class":78,"line":1700},[76,81890,57356],{"class":250},[76,81892,51507],{"class":93},[76,81894,51662],{"class":250},[76,81896,1363],{"class":93},[76,81898,81899,81901,81903,81905],{"class":78,"line":1714},[76,81900,54954],{"class":250},[76,81902,51507],{"class":93},[76,81904,51715],{"class":250},[76,81906,1363],{"class":93},[76,81908,81909],{"class":78,"line":1719},[76,81910,2259],{"class":93},[76,81912,81913,81915,81917],{"class":78,"line":1725},[76,81914,52487],{"class":93},[76,81916,117],{"class":51370},[76,81918,51377],{"class":93},[76,81920,81921,81923,81925],{"class":78,"line":1746},[76,81922,51855],{"class":93},[76,81924,51404],{"class":51370},[76,81926,51377],{"class":93},[76,81928,81929],{"class":78,"line":1751},[76,81930,2472],{"emptyLinePlaceholder":125},[76,81932,81933,81935,81937],{"class":78,"line":1765},[76,81934,1109],{"class":93},[76,81936,51870],{"class":51370},[76,81938,51377],{"class":93},[76,81940,81941,81943,81945,81947,81949],{"class":78,"line":1770},[76,81942,52214],{"class":93},[76,81944,51681],{"class":51370},[76,81946,55384],{"class":93},[76,81948,51681],{"class":51370},[76,81950,51377],{"class":93},[76,81952,81953,81955,81957],{"class":78,"line":1799},[76,81954,52214],{"class":93},[76,81956,51883],{"class":51370},[76,81958,51377],{"class":93},[76,81960,81961,81963,81966,81968,81971,81974,81976,81979],{"class":78,"line":1804},[76,81962,11293],{"class":89},[76,81964,81965],{"class":250}," spec",[76,81967,13636],{"class":89},[76,81969,81970],{"class":93}," { size: ",[76,81972,81973],{"class":305},"'40cm*40cm'",[76,81975,55534],{"class":93},[76,81977,81978],{"class":305},"'黑色'",[76,81980,55674],{"class":93},[76,81982,81983],{"class":78,"line":1821},[76,81984,81985],{"class":82},"    \u002F\u002F const arr = Object.values(spec)\n",[76,81987,81988],{"class":78,"line":1826},[76,81989,81990],{"class":82},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[76,81992,81993,81995,81997,81999,82002,82004,82006,82009,82012,82015,82017,82019,82022],{"class":78,"line":1831},[76,81994,52477],{"class":93},[76,81996,54469],{"class":2035},[76,81998,202],{"class":93},[76,82000,82001],{"class":305},"'div'",[76,82003,74319],{"class":93},[76,82005,247],{"class":89},[76,82007,82008],{"class":93}," Object.",[76,82010,82011],{"class":2035},"values",[76,82013,82014],{"class":93},"(spec).",[76,82016,74293],{"class":2035},[76,82018,202],{"class":93},[76,82020,82021],{"class":305},"'\u002F'",[76,82023,208],{"class":93},[76,82025,82026,82028,82030],{"class":78,"line":1836},[76,82027,52487],{"class":93},[76,82029,51883],{"class":51370},[76,82031,51377],{"class":93},[76,82033,82034,82036,82038],{"class":78,"line":1850},[76,82035,51855],{"class":93},[76,82037,51870],{"class":51370},[76,82039,51377],{"class":93},[76,82041,82042],{"class":78,"line":1855},[76,82043,2472],{"emptyLinePlaceholder":125},[76,82045,82046,82048,82050],{"class":78,"line":2649},[76,82047,51855],{"class":93},[76,82049,50705],{"class":51370},[76,82051,51377],{"class":93},[14,82053,82054],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22982,82056,82058],{"id":82057},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82060,82061],{},"静态方法，将伪数组转换为真数组",[14,82063,82064],{},[56,82065],{"alt":58,"src":82066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[67,82068,82070],{"className":53137,"code":82069,"language":53139,"meta":58,"style":58},"\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",[73,82071,82072,82080,82088,82100,82112,82124,82132,82140,82145,82150,82155,82160,82168],{"__ignoreMap":58},[76,82073,82074,82076,82078],{"class":78,"line":79},[76,82075,1109],{"class":93},[76,82077,51870],{"class":51370},[76,82079,51377],{"class":93},[76,82081,82082,82084,82086],{"class":78,"line":86},[76,82083,52214],{"class":93},[76,82085,1206],{"class":51370},[76,82087,51377],{"class":93},[76,82089,82090,82092,82094,82096,82098],{"class":78,"line":97},[76,82091,51411],{"class":93},[76,82093,155],{"class":51370},[76,82095,55384],{"class":93},[76,82097,155],{"class":51370},[76,82099,51377],{"class":93},[76,82101,82102,82104,82106,82108,82110],{"class":78,"line":103},[76,82103,51411],{"class":93},[76,82105,155],{"class":51370},[76,82107,55384],{"class":93},[76,82109,155],{"class":51370},[76,82111,51377],{"class":93},[76,82113,82114,82116,82118,82120,82122],{"class":78,"line":1273},[76,82115,51411],{"class":93},[76,82117,155],{"class":51370},[76,82119,55384],{"class":93},[76,82121,155],{"class":51370},[76,82123,51377],{"class":93},[76,82125,82126,82128,82130],{"class":78,"line":1287},[76,82127,52487],{"class":93},[76,82129,1206],{"class":51370},[76,82131,51377],{"class":93},[76,82133,82134,82136,82138],{"class":78,"line":1293},[76,82135,52214],{"class":93},[76,82137,51883],{"class":51370},[76,82139,51377],{"class":93},[76,82141,82142],{"class":78,"line":1384},[76,82143,82144],{"class":93},"    const lis = document.querySelectorAll('li')\n",[76,82146,82147],{"class":78,"line":1390},[76,82148,82149],{"class":93},"    const liss = Array.from(lis)\n",[76,82151,82152],{"class":78,"line":1402},[76,82153,82154],{"class":93},"    liss.pop()\n",[76,82156,82157],{"class":78,"line":1684},[76,82158,82159],{"class":93},"    console.log(liss)\n",[76,82161,82162,82164,82166],{"class":78,"line":1689},[76,82163,52487],{"class":93},[76,82165,51883],{"class":51370},[76,82167,51377],{"class":93},[76,82169,82170,82172,82174],{"class":78,"line":1695},[76,82171,51855],{"class":93},[76,82173,51870],{"class":51370},[76,82175,51377],{"class":93},[14,82177,82178],{},[56,82179],{"alt":58,"src":82180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22070,82182,82184],{"id":82183},"_41053-string","4.10.5.3 String",[14,82186,82187],{},[56,82188],{"alt":58,"src":82189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22982,82191,82193],{"id":82192},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[67,82195,82197],{"className":53137,"code":82196,"language":53139,"meta":58,"style":58},"\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",[73,82198,82199,82207,82215,82220,82225,82230,82234,82239,82244,82249,82257],{"__ignoreMap":58},[76,82200,82201,82203,82205],{"class":78,"line":79},[76,82202,1109],{"class":93},[76,82204,51870],{"class":51370},[76,82206,51377],{"class":93},[76,82208,82209,82211,82213],{"class":78,"line":86},[76,82210,52214],{"class":93},[76,82212,51883],{"class":51370},[76,82214,51377],{"class":93},[76,82216,82217],{"class":78,"line":97},[76,82218,82219],{"class":93},"    \u002F\u002F 把字符串转化为数组\n",[76,82221,82222],{"class":78,"line":103},[76,82223,82224],{"class":93},"    const str = 'pink,red'\n",[76,82226,82227],{"class":78,"line":1273},[76,82228,82229],{"class":93},"    const arr = str.split(',')\n",[76,82231,82232],{"class":78,"line":1287},[76,82233,80708],{"class":93},[76,82235,82236],{"class":78,"line":1293},[76,82237,82238],{"class":93},"    const str1 = '2025-8-25'\n",[76,82240,82241],{"class":78,"line":1384},[76,82242,82243],{"class":93},"    const arr1 = str1.split('-')\n",[76,82245,82246],{"class":78,"line":1390},[76,82247,82248],{"class":93},"    console.log(arr1)\n",[76,82250,82251,82253,82255],{"class":78,"line":1402},[76,82252,52487],{"class":93},[76,82254,51883],{"class":51370},[76,82256,51377],{"class":93},[76,82258,82259,82261,82263],{"class":78,"line":1684},[76,82260,51855],{"class":93},[76,82262,51870],{"class":51370},[76,82264,51377],{"class":93},[22982,82266,82268],{"id":82267},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82270,5253],{},[14,82272,82273],{},"substring(indexStart)",[14,82275,82276],{},"substring(indexStart, indexEnd)",[1206,82278,82279,82290,82302,82312],{},[155,82280,82281,82282,82285,82286,82289],{},"如果省略了 ",[73,82283,82284],{},"indexEnd","，则 ",[73,82287,82288],{},"substring()"," 提取字符直到字符串的末尾",[155,82291,82292,82293,82296,82297,82285,82299,82301],{},"如果 ",[73,82294,82295],{},"indexStart"," 等于 ",[73,82298,82284],{},[73,82300,82288],{}," 返回一个空字符串",[155,82303,82292,82304,82306,82307,82285,82309,82311],{},[73,82305,82295],{}," 大于 ",[73,82308,82284],{},[73,82310,82288],{}," 的效果就像交换了这两个参数一样",[155,82313,82314],{},"结束的索引号不包含想要截取的部分",[67,82316,82318],{"className":81559,"code":82317,"language":81561,"meta":58,"style":58},"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",[73,82319,82320,82332,82336,82370,82400,82404,82435,82439,82466,82496,82526,82530,82561],{"__ignoreMap":58},[76,82321,82322,82325,82327,82330],{"class":78,"line":79},[76,82323,82324],{"class":93},"const anyString ",[76,82326,247],{"class":89},[76,82328,82329],{"class":305}," \"Mozilla\"",[76,82331,1363],{"class":93},[76,82333,82334],{"class":78,"line":86},[76,82335,2472],{"emptyLinePlaceholder":125},[76,82337,82338,82341,82343,82345,82347,82350,82352,82355,82357,82359,82361,82363,82365,82367],{"class":78,"line":97},[76,82339,82340],{"class":250},"console",[76,82342,757],{"class":93},[76,82344,58317],{"class":250},[76,82346,202],{"class":93},[76,82348,82349],{"class":250},"anyString",[76,82351,757],{"class":93},[76,82353,82354],{"class":250},"substring",[76,82356,202],{"class":93},[76,82358,392],{"class":250},[76,82360,12507],{"class":93},[76,82362,418],{"class":250},[76,82364,75323],{"class":93},[76,82366,33399],{"class":89},[76,82368,82369],{"class":305}," 'M'\n",[76,82371,82372,82374,82376,82378,82380,82382,82384,82386,82388,82390,82392,82394,82396,82398],{"class":78,"line":103},[76,82373,82340],{"class":250},[76,82375,757],{"class":93},[76,82377,58317],{"class":250},[76,82379,202],{"class":93},[76,82381,82349],{"class":250},[76,82383,757],{"class":93},[76,82385,82354],{"class":250},[76,82387,202],{"class":93},[76,82389,418],{"class":250},[76,82391,12507],{"class":93},[76,82393,392],{"class":250},[76,82395,75323],{"class":93},[76,82397,33399],{"class":89},[76,82399,82369],{"class":305},[76,82401,82402],{"class":78,"line":1273},[76,82403,2472],{"emptyLinePlaceholder":125},[76,82405,82406,82408,82410,82412,82414,82416,82418,82420,82422,82424,82426,82428,82430,82432],{"class":78,"line":1287},[76,82407,82340],{"class":250},[76,82409,757],{"class":93},[76,82411,58317],{"class":250},[76,82413,202],{"class":93},[76,82415,82349],{"class":250},[76,82417,757],{"class":93},[76,82419,82354],{"class":250},[76,82421,202],{"class":93},[76,82423,392],{"class":250},[76,82425,12507],{"class":93},[76,82427,544],{"class":250},[76,82429,75323],{"class":93},[76,82431,33399],{"class":89},[76,82433,82434],{"class":305}," 'Mozill'\n",[76,82436,82437],{"class":78,"line":1293},[76,82438,2472],{"emptyLinePlaceholder":125},[76,82440,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463],{"class":78,"line":1384},[76,82442,82340],{"class":250},[76,82444,757],{"class":93},[76,82446,58317],{"class":250},[76,82448,202],{"class":93},[76,82450,82349],{"class":250},[76,82452,757],{"class":93},[76,82454,82354],{"class":250},[76,82456,202],{"class":93},[76,82458,494],{"class":250},[76,82460,75323],{"class":93},[76,82462,33399],{"class":89},[76,82464,82465],{"class":305}," 'lla'\n",[76,82467,82468,82470,82472,82474,82476,82478,82480,82482,82484,82486,82488,82490,82492,82494],{"class":78,"line":1390},[76,82469,82340],{"class":250},[76,82471,757],{"class":93},[76,82473,58317],{"class":250},[76,82475,202],{"class":93},[76,82477,82349],{"class":250},[76,82479,757],{"class":93},[76,82481,82354],{"class":250},[76,82483,202],{"class":93},[76,82485,494],{"class":250},[76,82487,12507],{"class":93},[76,82489,569],{"class":250},[76,82491,75379],{"class":93},[76,82493,33399],{"class":89},[76,82495,82465],{"class":305},[76,82497,82498,82500,82502,82504,82506,82508,82510,82512,82514,82516,82518,82520,82522,82524],{"class":78,"line":1402},[76,82499,82340],{"class":250},[76,82501,757],{"class":93},[76,82503,58317],{"class":250},[76,82505,202],{"class":93},[76,82507,82349],{"class":250},[76,82509,757],{"class":93},[76,82511,82354],{"class":250},[76,82513,202],{"class":93},[76,82515,569],{"class":250},[76,82517,12507],{"class":93},[76,82519,494],{"class":250},[76,82521,75323],{"class":93},[76,82523,33399],{"class":89},[76,82525,82465],{"class":305},[76,82527,82528],{"class":78,"line":1684},[76,82529,2472],{"emptyLinePlaceholder":125},[76,82531,82532,82534,82536,82538,82540,82542,82544,82546,82548,82550,82552,82554,82556,82558],{"class":78,"line":1689},[76,82533,82340],{"class":250},[76,82535,757],{"class":93},[76,82537,58317],{"class":250},[76,82539,202],{"class":93},[76,82541,82349],{"class":250},[76,82543,757],{"class":93},[76,82545,82354],{"class":250},[76,82547,202],{"class":93},[76,82549,392],{"class":250},[76,82551,12507],{"class":93},[76,82553,569],{"class":250},[76,82555,75323],{"class":93},[76,82557,33399],{"class":89},[76,82559,82560],{"class":305}," 'Mozilla'\n",[76,82562,82563,82565,82567,82569,82571,82573,82575,82577,82579,82581,82583,82585,82587,82589],{"class":78,"line":1695},[76,82564,82340],{"class":250},[76,82566,757],{"class":93},[76,82568,58317],{"class":250},[76,82570,202],{"class":93},[76,82572,82349],{"class":250},[76,82574,757],{"class":93},[76,82576,82354],{"class":250},[76,82578,202],{"class":93},[76,82580,392],{"class":250},[76,82582,12507],{"class":93},[76,82584,646],{"class":250},[76,82586,75323],{"class":93},[76,82588,33399],{"class":89},[76,82590,82560],{"class":305},[22982,82592,82594],{"id":82593},"_410533-startswith","4.10.5.3.3 startsWith",[14,82596,82597,82600,82601,82606,82607,82609,82610],{},[73,82598,82599],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[350,82602,82603],{},[73,82604,82605],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[73,82608,1435],{}," 或 ",[73,82611,66090],{},[67,82613,82615],{"className":77565,"code":82614,"language":77567,"meta":58,"style":58},"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",[73,82616,82617,82629,82648,82653,82673],{"__ignoreMap":58},[76,82618,82619,82621,82624,82626],{"class":78,"line":79},[76,82620,6864],{"class":89},[76,82622,82623],{"class":93}," str1 ",[76,82625,247],{"class":89},[76,82627,82628],{"class":305}," \"Saturday night plans\"\n",[76,82630,82631,82633,82635,82638,82641,82643,82646],{"class":78,"line":86},[76,82632,77602],{"class":93},[76,82634,58317],{"class":2035},[76,82636,82637],{"class":93},"(str1.",[76,82639,82640],{"class":2035},"startsWith",[76,82642,202],{"class":93},[76,82644,82645],{"class":305},"\"Sat\"",[76,82647,30567],{"class":93},[76,82649,82650],{"class":78,"line":97},[76,82651,82652],{"class":82},"\u002F\u002F Expected output: true\n",[76,82654,82655,82657,82659,82661,82663,82665,82667,82669,82671],{"class":78,"line":103},[76,82656,77602],{"class":93},[76,82658,58317],{"class":2035},[76,82660,82637],{"class":93},[76,82662,82640],{"class":2035},[76,82664,202],{"class":93},[76,82666,82645],{"class":305},[76,82668,12507],{"class":93},[76,82670,272],{"class":250},[76,82672,30567],{"class":93},[76,82674,82675],{"class":78,"line":1273},[76,82676,82677],{"class":82},"\u002F\u002F Expected output: false\n",[67,82679,82681],{"className":50703,"code":82680,"language":50705,"meta":58,"style":58},"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",[73,82682,82683,82688,82693,82697,82702,82707],{"__ignoreMap":58},[76,82684,82685],{"class":78,"line":79},[76,82686,82687],{"class":93},"startsWith(searchString)\n",[76,82689,82690],{"class":78,"line":86},[76,82691,82692],{"class":93},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[76,82694,82695],{"class":78,"line":97},[76,82696,2472],{"emptyLinePlaceholder":125},[76,82698,82699],{"class":78,"line":103},[76,82700,82701],{"class":93},"const str3 = 'pink老师上课中'\n",[76,82703,82704],{"class":78,"line":1273},[76,82705,82706],{"class":93},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[76,82708,82709],{"class":78,"line":1287},[76,82710,82711],{"class":93},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22982,82713,82715],{"id":82714},"_410534-includes","4.10.5.3.4 includes",[14,82717,82718],{},"includes(searchString) includes(searchString, position)",[152,82720,82721],{},[155,82722,82723],{},"searchString:",[14,82725,82726,82727,82729,82730,82735,82736,82741,82742,21572,82745,82748,82749,82752],{},"一个要在 ",[73,82728,1372],{}," 中查找的字符串。",[439,82731,82734],{"href":82732,"rel":82733},"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",[23937],"不能是正则表达式","。所有非正则表达式的值都会被",[439,82737,82740],{"href":82738,"rel":82739},"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",[23937],"强制转换为字符串","，因此如果该参数被省略或传入 ",[73,82743,82744],{},"undefined",[73,82746,82747],{},"includes()"," 方法会在字符串中搜索 ",[73,82750,82751],{},"\"undefined\"","，这通常不是你想要的",[152,82754,82755],{"start":86},[155,82756,82757,1058],{},[73,82758,82759],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82761,82762,82763,82766,82767],{},"在字符串中开始搜索 ",[73,82764,82765],{},"searchString"," 的位置。默认值为 ",[73,82768,392],{},[152,82770,82771],{"start":97},[155,82772,82773],{},"返回值：",[14,82775,82776,82777,82779,82780,82784,82785],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[73,82778,82765],{}," 为空字符串的情况），则返回 ",[350,82781,82782],{},[73,82783,1435],{}," ，否则返回 ",[350,82786,82787],{},[73,82788,66090],{},[152,82790,82791],{"start":103},[155,82792,82793],{},"异常：",[14,82795,82292,82796,13867,82798,82802],{},[73,82797,82765],{},[439,82799,82801],{"href":82732,"rel":82800},[23937],"是一个正则表达式","，则会抛出",[14,82804,82805],{},"只要是有就是true，不需要非得以谁开头结尾",[67,82807,82809],{"className":77565,"code":82808,"language":77567,"meta":58,"style":58},"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",[73,82810,82811,82822,82845,82864,82884,82906,82925],{"__ignoreMap":58},[76,82812,82813,82815,82817,82819],{"class":78,"line":79},[76,82814,6864],{"class":89},[76,82816,79845],{"class":93},[76,82818,247],{"class":89},[76,82820,82821],{"class":305}," \"To be, or not to be, that is the question.\"\n",[76,82823,82824,82826,82828,82831,82834,82836,82839,82842],{"class":78,"line":86},[76,82825,77602],{"class":93},[76,82827,58317],{"class":2035},[76,82829,82830],{"class":93},"(str.",[76,82832,82833],{"class":2035},"includes",[76,82835,202],{"class":93},[76,82837,82838],{"class":305},"\"To be\"",[76,82840,82841],{"class":93},"))",[76,82843,82844],{"class":82},"  \u002F\u002F true\n",[76,82846,82847,82849,82851,82853,82855,82857,82860,82862],{"class":78,"line":97},[76,82848,77602],{"class":93},[76,82850,58317],{"class":2035},[76,82852,82830],{"class":93},[76,82854,82833],{"class":2035},[76,82856,202],{"class":93},[76,82858,82859],{"class":305},"\"question\"",[76,82861,82841],{"class":93},[76,82863,82844],{"class":82},[76,82865,82866,82868,82870,82872,82874,82876,82879,82881],{"class":78,"line":103},[76,82867,77602],{"class":93},[76,82869,58317],{"class":2035},[76,82871,82830],{"class":93},[76,82873,82833],{"class":2035},[76,82875,202],{"class":93},[76,82877,82878],{"class":305},"\"nonexistent\"",[76,82880,82841],{"class":93},[76,82882,82883],{"class":82},"  \u002F\u002F false\n",[76,82885,82886,82888,82890,82892,82894,82896,82898,82900,82902,82904],{"class":78,"line":1273},[76,82887,77602],{"class":93},[76,82889,58317],{"class":2035},[76,82891,82830],{"class":93},[76,82893,82833],{"class":2035},[76,82895,202],{"class":93},[76,82897,82838],{"class":305},[76,82899,12507],{"class":93},[76,82901,418],{"class":250},[76,82903,82841],{"class":93},[76,82905,82883],{"class":82},[76,82907,82908,82910,82912,82914,82916,82918,82921,82923],{"class":78,"line":1287},[76,82909,77602],{"class":93},[76,82911,58317],{"class":2035},[76,82913,82830],{"class":93},[76,82915,82833],{"class":2035},[76,82917,202],{"class":93},[76,82919,82920],{"class":305},"\"TO BE\"",[76,82922,82841],{"class":93},[76,82924,82883],{"class":82},[76,82926,82927,82929,82931,82933,82935,82937,82939,82941],{"class":78,"line":1293},[76,82928,77602],{"class":93},[76,82930,58317],{"class":2035},[76,82932,82830],{"class":93},[76,82934,82833],{"class":2035},[76,82936,202],{"class":93},[76,82938,7724],{"class":305},[76,82940,82841],{"class":93},[76,82942,82844],{"class":82},[22982,82944,82946],{"id":82945},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[67,82948,82950],{"className":53137,"code":82949,"language":53139,"meta":58,"style":58},"\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",[73,82951,82952,82960,82968,82973,82978,82983,82988,82993,83001],{"__ignoreMap":58},[76,82953,82954,82956,82958],{"class":78,"line":79},[76,82955,1109],{"class":93},[76,82957,51870],{"class":51370},[76,82959,51377],{"class":93},[76,82961,82962,82964,82966],{"class":78,"line":86},[76,82963,52214],{"class":93},[76,82965,51883],{"class":51370},[76,82967,51377],{"class":93},[76,82969,82970],{"class":78,"line":97},[76,82971,82972],{"class":93},"    const num = 10\n",[76,82974,82975],{"class":78,"line":103},[76,82976,82977],{"class":93},"    \u002F\u002F 强制转换\n",[76,82979,82980],{"class":78,"line":1273},[76,82981,82982],{"class":93},"    console.log(String(num))\n",[76,82984,82985],{"class":78,"line":1287},[76,82986,82987],{"class":93},"    \u002F\u002F toString()方法转换\n",[76,82989,82990],{"class":78,"line":1293},[76,82991,82992],{"class":93},"    console.log(num.toString())\n",[76,82994,82995,82997,82999],{"class":78,"line":1384},[76,82996,52487],{"class":93},[76,82998,51883],{"class":51370},[76,83000,51377],{"class":93},[76,83002,83003,83005,83007],{"class":78,"line":1390},[76,83004,51855],{"class":93},[76,83006,51870],{"class":51370},[76,83008,51377],{"class":93},[22982,83010,83012],{"id":83011},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83014,83015],{},[56,83016],{"alt":58,"src":83017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[67,83019,83021],{"className":50703,"code":83020,"language":50705,"meta":58,"style":58},"\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",[73,83022,83023,83033,83047,83051,83059,83073,83093,83105,83113,83117,83125,83137,83145,83157,83162,83167,83172,83219,83235,83243,83251,83255],{"__ignoreMap":58},[76,83024,83025,83027,83029,83031],{"class":78,"line":79},[76,83026,51367],{"class":93},[76,83028,51371],{"class":51370},[76,83030,51374],{"class":2035},[76,83032,51377],{"class":93},[76,83034,83035,83037,83039,83041,83043,83045],{"class":78,"line":86},[76,83036,1109],{"class":93},[76,83038,50705],{"class":51370},[76,83040,51386],{"class":2035},[76,83042,247],{"class":93},[76,83044,51391],{"class":305},[76,83046,51377],{"class":93},[76,83048,83049],{"class":78,"line":97},[76,83050,2472],{"emptyLinePlaceholder":125},[76,83052,83053,83055,83057],{"class":78,"line":103},[76,83054,1109],{"class":93},[76,83056,51404],{"class":51370},[76,83058,51377],{"class":93},[76,83060,83061,83063,83065,83067,83069,83071],{"class":78,"line":1273},[76,83062,52214],{"class":93},[76,83064,51414],{"class":51370},[76,83066,51417],{"class":2035},[76,83068,247],{"class":93},[76,83070,51422],{"class":305},[76,83072,51377],{"class":93},[76,83074,83075,83077,83079,83081,83083,83085,83087,83089,83091],{"class":78,"line":1287},[76,83076,52214],{"class":93},[76,83078,51414],{"class":51370},[76,83080,14992],{"class":2035},[76,83082,247],{"class":93},[76,83084,51461],{"class":305},[76,83086,51441],{"class":2035},[76,83088,247],{"class":93},[76,83090,51468],{"class":305},[76,83092,51377],{"class":93},[76,83094,83095,83097,83099,83101,83103],{"class":78,"line":1293},[76,83096,52214],{"class":93},[76,83098,51477],{"class":51370},[76,83100,51480],{"class":93},[76,83102,51477],{"class":51370},[76,83104,51377],{"class":93},[76,83106,83107,83109,83111],{"class":78,"line":1384},[76,83108,51855],{"class":93},[76,83110,51404],{"class":51370},[76,83112,51377],{"class":93},[76,83114,83115],{"class":78,"line":1390},[76,83116,2472],{"emptyLinePlaceholder":125},[76,83118,83119,83121,83123],{"class":78,"line":1402},[76,83120,1109],{"class":93},[76,83122,51870],{"class":51370},[76,83124,51377],{"class":93},[76,83126,83127,83129,83131,83133,83135],{"class":78,"line":1684},[76,83128,52214],{"class":93},[76,83130,51681],{"class":51370},[76,83132,55384],{"class":93},[76,83134,51681],{"class":51370},[76,83136,51377],{"class":93},[76,83138,83139,83141,83143],{"class":78,"line":1689},[76,83140,52214],{"class":93},[76,83142,51883],{"class":51370},[76,83144,51377],{"class":93},[76,83146,83147,83149,83152,83154],{"class":78,"line":1695},[76,83148,11293],{"class":89},[76,83150,83151],{"class":250}," gift",[76,83153,13636],{"class":89},[76,83155,83156],{"class":305}," '50g的茶叶，清洗球'\n",[76,83158,83159],{"class":78,"line":1700},[76,83160,83161],{"class":82},"    \u002F\u002F 1.把字符串拆分为数组\n",[76,83163,83164],{"class":78,"line":1714},[76,83165,83166],{"class":82},"    \u002F\u002F console.log(gift.split(','))\n",[76,83168,83169],{"class":78,"line":1719},[76,83170,83171],{"class":82},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[76,83173,83174,83176,83178,83180,83183,83186,83188,83191,83193,83195,83197,83199,83201,83204,83206,83209,83211,83213,83215,83217],{"class":78,"line":1725},[76,83175,11293],{"class":89},[76,83177,73989],{"class":250},[76,83179,13636],{"class":89},[76,83181,83182],{"class":93}," gift.",[76,83184,83185],{"class":2035},"split",[76,83187,202],{"class":93},[76,83189,83190],{"class":305},"'，'",[76,83192,30896],{"class":93},[76,83194,74114],{"class":2035},[76,83196,202],{"class":93},[76,83198,79865],{"class":5288},[76,83200,79868],{"class":89},[76,83202,83203],{"class":305}," `\u003Cspan>【赠品】${",[76,83205,79865],{"class":93},[76,83207,83208],{"class":305},"}\u003C\u002Fspan>\u003Cbr>`",[76,83210,30896],{"class":93},[76,83212,74293],{"class":2035},[76,83214,202],{"class":93},[76,83216,74298],{"class":305},[76,83218,208],{"class":93},[76,83220,83221,83223,83225,83227,83229,83231,83233],{"class":78,"line":1746},[76,83222,52477],{"class":93},[76,83224,54469],{"class":2035},[76,83226,202],{"class":93},[76,83228,82001],{"class":305},[76,83230,74319],{"class":93},[76,83232,247],{"class":89},[76,83234,74055],{"class":93},[76,83236,83237,83239,83241],{"class":78,"line":1751},[76,83238,52487],{"class":93},[76,83240,51883],{"class":51370},[76,83242,51377],{"class":93},[76,83244,83245,83247,83249],{"class":78,"line":1765},[76,83246,51855],{"class":93},[76,83248,51870],{"class":51370},[76,83250,51377],{"class":93},[76,83252,83253],{"class":78,"line":1770},[76,83254,2472],{"emptyLinePlaceholder":125},[76,83256,83257,83259,83261],{"class":78,"line":1799},[76,83258,51855],{"class":93},[76,83260,50705],{"class":51370},[76,83262,51377],{"class":93},[22070,83264,83266],{"id":83265},"_41054-number","4.10.5.4 Number",[14,83268,83269],{},[56,83270],{"alt":58,"src":83271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83273,83274],{},"整数也可以进行toFixed来保留小数",[14,83276,83277],{},"比如：",[14,83279,83280],{},"const price=10",[14,83282,83283],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22070,83285,83287],{"id":83286},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83289,83290],{},[56,83291],{"alt":58,"src":83292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[67,83294,83296],{"className":50703,"code":83295,"language":50705,"meta":58,"style":58},"\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",[73,83297,83298,83308,83322,83326,83334,83348,83368,83380,83388,83394,83404,83414,83424,83428,83432,83438,83450,83464,83468,83472,83478,83490,83506,83516,83532,83536,83540,83546,83556,83566,83570,83574,83582,83594,83606,83618,83622,83626,83634,83646,83650,83654,83665,83675,83687,83699,83709,83713,83717,83725,83734,83746,83756,83766,83770,83774,83782,83791,83798,83808,83820,83824,83828,83837,83847,83858,83870,83882,83886,83890,83899,83909,83920,83924,83928,83934,83946,83958,83968,83978,83996,84008,84012,84016,84025,84037,84047,84057,84069,84073,84081,84089,84093,84101,84115,84123,84137,84165,84173,84181,84191,84195,84203,84211,84220,84228,84237,84247,84251,84255,84263,84271,84280,84288,84296,84309,84313,84317,84325,84333,84342,84350,84358,84373,84377,84381,84389,84397,84406,84414,84422,84436,84444,84448,84452,84457,84483,84488,84525,84530,84553,84558,84612,84617,84653,84657,84663,84668,84677,84691,84700,84719,84728,84738,84743,84748,84761,84766,84820,84846,84854,84862,84866],{"__ignoreMap":58},[76,83299,83300,83302,83304,83306],{"class":78,"line":79},[76,83301,51367],{"class":93},[76,83303,51371],{"class":51370},[76,83305,51374],{"class":2035},[76,83307,51377],{"class":93},[76,83309,83310,83312,83314,83316,83318,83320],{"class":78,"line":86},[76,83311,1109],{"class":93},[76,83313,50705],{"class":51370},[76,83315,51386],{"class":2035},[76,83317,247],{"class":93},[76,83319,51391],{"class":305},[76,83321,51377],{"class":93},[76,83323,83324],{"class":78,"line":97},[76,83325,2472],{"emptyLinePlaceholder":125},[76,83327,83328,83330,83332],{"class":78,"line":103},[76,83329,1109],{"class":93},[76,83331,51404],{"class":51370},[76,83333,51377],{"class":93},[76,83335,83336,83338,83340,83342,83344,83346],{"class":78,"line":1273},[76,83337,52214],{"class":93},[76,83339,51414],{"class":51370},[76,83341,51417],{"class":2035},[76,83343,247],{"class":93},[76,83345,51422],{"class":305},[76,83347,51377],{"class":93},[76,83349,83350,83352,83354,83356,83358,83360,83362,83364,83366],{"class":78,"line":1287},[76,83351,52214],{"class":93},[76,83353,51414],{"class":51370},[76,83355,14992],{"class":2035},[76,83357,247],{"class":93},[76,83359,51461],{"class":305},[76,83361,51441],{"class":2035},[76,83363,247],{"class":93},[76,83365,51468],{"class":305},[76,83367,51377],{"class":93},[76,83369,83370,83372,83374,83376,83378],{"class":78,"line":1293},[76,83371,52214],{"class":93},[76,83373,51477],{"class":51370},[76,83375,51480],{"class":93},[76,83377,51477],{"class":51370},[76,83379,51377],{"class":93},[76,83381,83382,83384,83386],{"class":78,"line":1384},[76,83383,52214],{"class":93},[76,83385,117],{"class":51370},[76,83387,51377],{"class":93},[76,83389,83390,83392],{"class":78,"line":1390},[76,83391,6475],{"class":51370},[76,83393,15644],{"class":93},[76,83395,83396,83398,83400,83402],{"class":78,"line":1402},[76,83397,54765],{"class":250},[76,83399,51507],{"class":93},[76,83401,392],{"class":250},[76,83403,1363],{"class":93},[76,83405,83406,83408,83410,83412],{"class":78,"line":1684},[76,83407,54776],{"class":250},[76,83409,51507],{"class":93},[76,83411,392],{"class":250},[76,83413,1363],{"class":93},[76,83415,83416,83418,83420,83422],{"class":78,"line":1689},[76,83417,72666],{"class":250},[76,83419,51507],{"class":93},[76,83421,60575],{"class":250},[76,83423,1363],{"class":93},[76,83425,83426],{"class":78,"line":1695},[76,83427,2259],{"class":93},[76,83429,83430],{"class":78,"line":1700},[76,83431,2472],{"emptyLinePlaceholder":125},[76,83433,83434,83436],{"class":78,"line":1714},[76,83435,62193],{"class":2035},[76,83437,15644],{"class":93},[76,83439,83440,83442,83444,83446,83448],{"class":78,"line":1719},[76,83441,54841],{"class":250},[76,83443,51507],{"class":93},[76,83445,78644],{"class":250},[76,83447,51562],{"class":89},[76,83449,1363],{"class":93},[76,83451,83452,83454,83456,83458,83460,83462],{"class":78,"line":1725},[76,83453,54776],{"class":250},[76,83455,51507],{"class":93},[76,83457,512],{"class":250},[76,83459,51562],{"class":89},[76,83461,51626],{"class":250},[76,83463,1363],{"class":93},[76,83465,83466],{"class":78,"line":1746},[76,83467,2259],{"class":93},[76,83469,83470],{"class":78,"line":1751},[76,83471,2472],{"emptyLinePlaceholder":125},[76,83473,83474,83476],{"class":78,"line":1765},[76,83475,78695],{"class":2035},[76,83477,15644],{"class":93},[76,83479,83480,83482,83484,83486,83488],{"class":78,"line":1770},[76,83481,54765],{"class":250},[76,83483,51507],{"class":93},[76,83485,774],{"class":250},[76,83487,51562],{"class":89},[76,83489,1363],{"class":93},[76,83491,83492,83494,83496,83498,83500,83502,83504],{"class":78,"line":1799},[76,83493,61930],{"class":250},[76,83495,51507],{"class":93},[76,83497,28194],{"class":250},[76,83499,78750],{"class":250},[76,83501,78753],{"class":250},[76,83503,894],{"class":89},[76,83505,1363],{"class":93},[76,83507,83508,83510,83512,83514],{"class":78,"line":1804},[76,83509,55079],{"class":250},[76,83511,51507],{"class":93},[76,83513,51547],{"class":250},[76,83515,1363],{"class":93},[76,83517,83518,83520,83522,83524,83526,83528,83530],{"class":78,"line":1821},[76,83519,62047],{"class":250},[76,83521,51507],{"class":93},[76,83523,418],{"class":250},[76,83525,51562],{"class":89},[76,83527,51591],{"class":250},[76,83529,62314],{"class":250},[76,83531,1363],{"class":93},[76,83533,83534],{"class":78,"line":1826},[76,83535,2259],{"class":93},[76,83537,83538],{"class":78,"line":1831},[76,83539,2472],{"emptyLinePlaceholder":125},[76,83541,83542,83544],{"class":78,"line":1836},[76,83543,78813],{"class":2035},[76,83545,15644],{"class":93},[76,83547,83548,83550,83552,83554],{"class":78,"line":1850},[76,83549,62095],{"class":250},[76,83551,51507],{"class":93},[76,83553,62100],{"class":250},[76,83555,1363],{"class":93},[76,83557,83558,83560,83562,83564],{"class":78,"line":1855},[76,83559,54954],{"class":250},[76,83561,51507],{"class":93},[76,83563,61888],{"class":250},[76,83565,1363],{"class":93},[76,83567,83568],{"class":78,"line":2649},[76,83569,2259],{"class":93},[76,83571,83572],{"class":78,"line":2663},[76,83573,2472],{"emptyLinePlaceholder":125},[76,83575,83576,83578,83580],{"class":78,"line":2671},[76,83577,78695],{"class":2035},[76,83579,55685],{"class":51370},[76,83581,15644],{"class":93},[76,83583,83584,83586,83588,83590,83592],{"class":78,"line":2676},[76,83585,54841],{"class":250},[76,83587,51507],{"class":93},[76,83589,811],{"class":250},[76,83591,51562],{"class":89},[76,83593,1363],{"class":93},[76,83595,83596,83598,83600,83602,83604],{"class":78,"line":2682},[76,83597,54855],{"class":250},[76,83599,51507],{"class":93},[76,83601,811],{"class":250},[76,83603,51562],{"class":89},[76,83605,1363],{"class":93},[76,83607,83608,83610,83612,83614,83616],{"class":78,"line":2688},[76,83609,61820],{"class":250},[76,83611,51507],{"class":93},[76,83613,520],{"class":250},[76,83615,51562],{"class":89},[76,83617,1363],{"class":93},[76,83619,83620],{"class":78,"line":2693},[76,83621,2259],{"class":93},[76,83623,83624],{"class":78,"line":8020},[76,83625,2472],{"emptyLinePlaceholder":125},[76,83627,83628,83630,83632],{"class":78,"line":8044},[76,83629,78695],{"class":2035},[76,83631,62374],{"class":2035},[76,83633,15644],{"class":93},[76,83635,83636,83638,83640,83642,83644],{"class":78,"line":8049},[76,83637,54841],{"class":250},[76,83639,51507],{"class":93},[76,83641,1794],{"class":250},[76,83643,51562],{"class":89},[76,83645,1363],{"class":93},[76,83647,83648],{"class":78,"line":8055},[76,83649,2259],{"class":93},[76,83651,83652],{"class":78,"line":8082},[76,83653,2472],{"emptyLinePlaceholder":125},[76,83655,83656,83658,83660,83663],{"class":78,"line":8087},[76,83657,78695],{"class":2035},[76,83659,62374],{"class":2035},[76,83661,83662],{"class":2035}," .tag",[76,83664,15644],{"class":93},[76,83666,83667,83669,83671,83673],{"class":78,"line":8093},[76,83668,55079],{"class":250},[76,83670,51507],{"class":93},[76,83672,60939],{"class":250},[76,83674,1363],{"class":93},[76,83676,83677,83679,83681,83683,83685],{"class":78,"line":8105},[76,83678,54765],{"class":250},[76,83680,51507],{"class":93},[76,83682,278],{"class":250},[76,83684,51562],{"class":89},[76,83686,1363],{"class":93},[76,83688,83689,83691,83693,83695,83697],{"class":78,"line":8117},[76,83690,54992],{"class":250},[76,83692,51507],{"class":93},[76,83694,698],{"class":250},[76,83696,51562],{"class":89},[76,83698,1363],{"class":93},[76,83700,83701,83703,83705,83707],{"class":78,"line":8129},[76,83702,57486],{"class":250},[76,83704,51507],{"class":93},[76,83706,62140],{"class":250},[76,83708,1363],{"class":93},[76,83710,83711],{"class":78,"line":9788},[76,83712,2259],{"class":93},[76,83714,83715],{"class":78,"line":9813},[76,83716,2472],{"emptyLinePlaceholder":125},[76,83718,83719,83721,83723],{"class":78,"line":9836},[76,83720,78695],{"class":2035},[76,83722,78987],{"class":2035},[76,83724,31536],{"class":93},[76,83726,83727,83729,83732],{"class":78,"line":9860},[76,83728,78695],{"class":2035},[76,83730,83731],{"class":2035}," .sub-total",[76,83733,15644],{"class":93},[76,83735,83736,83738,83740,83742,83744],{"class":78,"line":9865},[76,83737,54992],{"class":250},[76,83739,51507],{"class":93},[76,83741,849],{"class":250},[76,83743,51562],{"class":89},[76,83745,1363],{"class":93},[76,83747,83748,83750,83752,83754],{"class":78,"line":9870},[76,83749,57486],{"class":250},[76,83751,51507],{"class":93},[76,83753,79010],{"class":250},[76,83755,1363],{"class":93},[76,83757,83758,83760,83762,83764],{"class":78,"line":9875},[76,83759,61907],{"class":250},[76,83761,51507],{"class":93},[76,83763,418],{"class":250},[76,83765,1363],{"class":93},[76,83767,83768],{"class":78,"line":9884},[76,83769,2259],{"class":93},[76,83771,83772],{"class":78,"line":9889},[76,83773,2472],{"emptyLinePlaceholder":125},[76,83775,83776,83778,83780],{"class":78,"line":9895},[76,83777,78695],{"class":2035},[76,83779,79027],{"class":2035},[76,83781,31536],{"class":93},[76,83783,83784,83786,83789],{"class":78,"line":9916},[76,83785,78695],{"class":2035},[76,83787,83788],{"class":2035}," .sub-total::before",[76,83790,31536],{"class":93},[76,83792,83793,83796],{"class":78,"line":9922},[76,83794,83795],{"class":2035},"    .amount::before",[76,83797,15644],{"class":93},[76,83799,83800,83802,83804,83806],{"class":78,"line":9936},[76,83801,79034],{"class":250},[76,83803,51507],{"class":93},[76,83805,79039],{"class":305},[76,83807,1363],{"class":93},[76,83809,83810,83812,83814,83816,83818],{"class":78,"line":9942},[76,83811,54992],{"class":250},[76,83813,51507],{"class":93},[76,83815,698],{"class":250},[76,83817,51562],{"class":89},[76,83819,1363],{"class":93},[76,83821,83822],{"class":78,"line":9969},[76,83823,2259],{"class":93},[76,83825,83826],{"class":78,"line":9978},[76,83827,2472],{"emptyLinePlaceholder":125},[76,83829,83830,83832,83835],{"class":78,"line":9984},[76,83831,78695],{"class":2035},[76,83833,83834],{"class":2035}," .spec",[76,83836,15644],{"class":93},[76,83838,83839,83841,83843,83845],{"class":78,"line":9992},[76,83840,61907],{"class":250},[76,83842,51507],{"class":93},[76,83844,278],{"class":250},[76,83846,1363],{"class":93},[76,83848,83849,83851,83853,83856],{"class":78,"line":9997},[76,83850,57486],{"class":250},[76,83852,51507],{"class":93},[76,83854,83855],{"class":250},"#888",[76,83857,1363],{"class":93},[76,83859,83860,83862,83864,83866,83868],{"class":78,"line":16676},[76,83861,54992],{"class":250},[76,83863,51507],{"class":93},[76,83865,748],{"class":250},[76,83867,51562],{"class":89},[76,83869,1363],{"class":93},[76,83871,83872,83874,83876,83878,83880],{"class":78,"line":16682},[76,83873,62070],{"class":250},[76,83875,51507],{"class":93},[76,83877,899],{"class":250},[76,83879,51562],{"class":89},[76,83881,1363],{"class":93},[76,83883,83884],{"class":78,"line":16705},[76,83885,2259],{"class":93},[76,83887,83888],{"class":78,"line":16711},[76,83889,2472],{"emptyLinePlaceholder":125},[76,83891,83892,83894,83897],{"class":78,"line":16734},[76,83893,78695],{"class":2035},[76,83895,83896],{"class":2035}," .count",[76,83898,15644],{"class":93},[76,83900,83901,83903,83905,83907],{"class":78,"line":16748},[76,83902,61907],{"class":250},[76,83904,51507],{"class":93},[76,83906,418],{"class":250},[76,83908,1363],{"class":93},[76,83910,83911,83913,83915,83918],{"class":78,"line":16768},[76,83912,57486],{"class":250},[76,83914,51507],{"class":93},[76,83916,83917],{"class":250},"#aaa",[76,83919,1363],{"class":93},[76,83921,83922],{"class":78,"line":16774},[76,83923,2259],{"class":93},[76,83925,83926],{"class":78,"line":16785},[76,83927,2472],{"emptyLinePlaceholder":125},[76,83929,83930,83932],{"class":78,"line":16808},[76,83931,72545],{"class":2035},[76,83933,15644],{"class":93},[76,83935,83936,83938,83940,83942,83944],{"class":78,"line":16830},[76,83937,54841],{"class":250},[76,83939,51507],{"class":93},[76,83941,78644],{"class":250},[76,83943,51562],{"class":89},[76,83945,1363],{"class":93},[76,83947,83948,83950,83952,83954,83956],{"class":78,"line":16835},[76,83949,54776],{"class":250},[76,83951,51507],{"class":93},[76,83953,392],{"class":250},[76,83955,51626],{"class":250},[76,83957,1363],{"class":93},[76,83959,83960,83962,83964,83966],{"class":78,"line":16841},[76,83961,55079],{"class":250},[76,83963,51507],{"class":93},[76,83965,51547],{"class":250},[76,83967,1363],{"class":93},[76,83969,83970,83972,83974,83976],{"class":78,"line":16855},[76,83971,55090],{"class":250},[76,83973,51507],{"class":93},[76,83975,51650],{"class":250},[76,83977,1363],{"class":93},[76,83979,83980,83983,83985,83987,83989,83991,83994],{"class":78,"line":16868},[76,83981,83982],{"class":250},"      border-top",[76,83984,51507],{"class":93},[76,83986,418],{"class":250},[76,83988,51562],{"class":89},[76,83990,51591],{"class":250},[76,83992,83993],{"class":250}," #4e4e4e",[76,83995,1363],{"class":93},[76,83997,83998,84000,84002,84004,84006],{"class":78,"line":16873},[76,83999,54765],{"class":250},[76,84001,51507],{"class":93},[76,84003,899],{"class":250},[76,84005,51562],{"class":89},[76,84007,1363],{"class":93},[76,84009,84010],{"class":78,"line":16887},[76,84011,2259],{"class":93},[76,84013,84014],{"class":78,"line":16892},[76,84015,2472],{"emptyLinePlaceholder":125},[76,84017,84018,84020,84023],{"class":78,"line":16898},[76,84019,72545],{"class":2035},[76,84021,84022],{"class":2035}," .amount",[76,84024,15644],{"class":93},[76,84026,84027,84029,84031,84033,84035],{"class":78,"line":16903},[76,84028,54992],{"class":250},[76,84030,51507],{"class":93},[76,84032,849],{"class":250},[76,84034,51562],{"class":89},[76,84036,1363],{"class":93},[76,84038,84039,84041,84043,84045],{"class":78,"line":16917},[76,84040,57486],{"class":250},[76,84042,51507],{"class":93},[76,84044,79010],{"class":250},[76,84046,1363],{"class":93},[76,84048,84049,84051,84053,84055],{"class":78,"line":16922},[76,84050,62404],{"class":250},[76,84052,51507],{"class":93},[76,84054,51559],{"class":250},[76,84056,1363],{"class":93},[76,84058,84059,84061,84063,84065,84067],{"class":78,"line":16927},[76,84060,61820],{"class":250},[76,84062,51507],{"class":93},[76,84064,855],{"class":250},[76,84066,51562],{"class":89},[76,84068,1363],{"class":93},[76,84070,84071],{"class":78,"line":16941},[76,84072,2259],{"class":93},[76,84074,84075,84077,84079],{"class":78,"line":16953},[76,84076,52487],{"class":93},[76,84078,117],{"class":51370},[76,84080,51377],{"class":93},[76,84082,84083,84085,84087],{"class":78,"line":16958},[76,84084,51855],{"class":93},[76,84086,51404],{"class":51370},[76,84088,51377],{"class":93},[76,84090,84091],{"class":78,"line":16971},[76,84092,2472],{"emptyLinePlaceholder":125},[76,84094,84095,84097,84099],{"class":78,"line":16976},[76,84096,1109],{"class":93},[76,84098,51870],{"class":51370},[76,84100,51377],{"class":93},[76,84102,84103,84105,84107,84109,84111,84113],{"class":78,"line":16981},[76,84104,52214],{"class":93},[76,84106,51681],{"class":51370},[76,84108,53556],{"class":2035},[76,84110,247],{"class":93},[76,84112,62678],{"class":305},[76,84114,51377],{"class":93},[76,84116,84117,84119,84121],{"class":78,"line":16986},[76,84118,52487],{"class":93},[76,84120,51681],{"class":51370},[76,84122,51377],{"class":93},[76,84124,84125,84127,84129,84131,84133,84135],{"class":78,"line":16999},[76,84126,52214],{"class":93},[76,84128,51681],{"class":51370},[76,84130,53556],{"class":2035},[76,84132,247],{"class":93},[76,84134,62650],{"class":305},[76,84136,51377],{"class":93},[76,84138,84139,84141,84143,84146,84148,84150,84152,84155,84157,84159,84161,84163],{"class":78,"line":17004},[76,84140,51411],{"class":93},[76,84142,51681],{"class":51370},[76,84144,84145],{"class":93},">合计：\u003C",[76,84147,76],{"class":51370},[76,84149,53556],{"class":2035},[76,84151,247],{"class":93},[76,84153,84154],{"class":305},"\"amount\"",[76,84156,55384],{"class":93},[76,84158,76],{"class":51370},[76,84160,55384],{"class":93},[76,84162,51681],{"class":51370},[76,84164,51377],{"class":93},[76,84166,84167,84169,84171],{"class":78,"line":32703},[76,84168,52487],{"class":93},[76,84170,51681],{"class":51370},[76,84172,51377],{"class":93},[76,84174,84175,84177,84179],{"class":78,"line":32709},[76,84176,52214],{"class":93},[76,84178,51883],{"class":51370},[76,84180,51377],{"class":93},[76,84182,84183,84185,84187,84189],{"class":78,"line":32715},[76,84184,11293],{"class":89},[76,84186,79447],{"class":250},[76,84188,13636],{"class":89},[76,84190,55517],{"class":93},[76,84192,84193],{"class":78,"line":32721},[76,84194,79456],{"class":93},[76,84196,84197,84199,84201],{"class":78,"line":32727},[76,84198,79461],{"class":93},[76,84200,79464],{"class":305},[76,84202,31536],{"class":93},[76,84204,84205,84207,84209],{"class":78,"line":32738},[76,84206,79471],{"class":93},[76,84208,79474],{"class":305},[76,84210,31536],{"class":93},[76,84212,84213,84215,84218],{"class":78,"line":32744},[76,84214,79481],{"class":93},[76,84216,84217],{"class":250},"289.9",[76,84219,31536],{"class":93},[76,84221,84222,84224,84226],{"class":78,"line":32764},[76,84223,79491],{"class":93},[76,84225,79494],{"class":305},[76,84227,31536],{"class":93},[76,84229,84230,84233,84235],{"class":78,"line":32770},[76,84231,84232],{"class":93},"        count: ",[76,84234,278],{"class":250},[76,84236,31536],{"class":93},[76,84238,84239,84242,84245],{"class":78,"line":32781},[76,84240,84241],{"class":93},"        spec: { color: ",[76,84243,84244],{"class":305},"'白色'",[76,84246,55674],{"class":93},[76,84248,84249],{"class":78,"line":32787},[76,84250,77962],{"class":93},[76,84252,84253],{"class":78,"line":32793},[76,84254,79456],{"class":93},[76,84256,84257,84259,84261],{"class":78,"line":32799},[76,84258,79461],{"class":93},[76,84260,79555],{"class":305},[76,84262,31536],{"class":93},[76,84264,84265,84267,84269],{"class":78,"line":32805},[76,84266,79471],{"class":93},[76,84268,79564],{"class":305},[76,84270,31536],{"class":93},[76,84272,84273,84275,84278],{"class":78,"line":32811},[76,84274,79481],{"class":93},[76,84276,84277],{"class":250},"109.8",[76,84279,31536],{"class":93},[76,84281,84282,84284,84286],{"class":78,"line":32817},[76,84283,79491],{"class":93},[76,84285,79582],{"class":305},[76,84287,31536],{"class":93},[76,84289,84290,84292,84294],{"class":78,"line":32823},[76,84291,84232],{"class":93},[76,84293,272],{"class":250},[76,84295,31536],{"class":93},[76,84297,84298,84301,84303,84305,84307],{"class":78,"line":32843},[76,84299,84300],{"class":93},"        spec: { size: ",[76,84302,81973],{"class":305},[76,84304,55534],{"class":93},[76,84306,81978],{"class":305},[76,84308,55674],{"class":93},[76,84310,84311],{"class":78,"line":32849},[76,84312,77962],{"class":93},[76,84314,84315],{"class":78,"line":32865},[76,84316,79456],{"class":93},[76,84318,84319,84321,84323],{"class":78,"line":32871},[76,84320,79461],{"class":93},[76,84322,79599],{"class":305},[76,84324,31536],{"class":93},[76,84326,84327,84329,84331],{"class":78,"line":32885},[76,84328,79471],{"class":93},[76,84330,79608],{"class":305},[76,84332,31536],{"class":93},[76,84334,84335,84337,84340],{"class":78,"line":32891},[76,84336,79481],{"class":93},[76,84338,84339],{"class":250},"488",[76,84341,31536],{"class":93},[76,84343,84344,84346,84348],{"class":78,"line":32906},[76,84345,79491],{"class":93},[76,84347,79626],{"class":305},[76,84349,31536],{"class":93},[76,84351,84352,84354,84356],{"class":78,"line":32912},[76,84353,84232],{"class":93},[76,84355,418],{"class":250},[76,84357,31536],{"class":93},[76,84359,84360,84362,84365,84368,84371],{"class":78,"line":32921},[76,84361,84241],{"class":93},[76,84363,84364],{"class":305},"'青色'",[76,84366,84367],{"class":93},", sum: ",[76,84369,84370],{"class":305},"'一大四小'",[76,84372,55674],{"class":93},[76,84374,84375],{"class":78,"line":32927},[76,84376,77962],{"class":93},[76,84378,84379],{"class":78,"line":32936},[76,84380,79456],{"class":93},[76,84382,84383,84385,84387],{"class":78,"line":32942},[76,84384,79461],{"class":93},[76,84386,79643],{"class":305},[76,84388,31536],{"class":93},[76,84390,84391,84393,84395],{"class":78,"line":32948},[76,84392,79471],{"class":93},[76,84394,79652],{"class":305},[76,84396,31536],{"class":93},[76,84398,84399,84401,84404],{"class":78,"line":32957},[76,84400,79481],{"class":93},[76,84402,84403],{"class":250},"139",[76,84405,31536],{"class":93},[76,84407,84408,84410,84412],{"class":78,"line":32963},[76,84409,79491],{"class":93},[76,84411,79670],{"class":305},[76,84413,31536],{"class":93},[76,84415,84416,84418,84420],{"class":78,"line":32974},[76,84417,84232],{"class":93},[76,84419,418],{"class":250},[76,84421,31536],{"class":93},[76,84423,84424,84426,84429,84431,84434],{"class":78,"line":32980},[76,84425,84300],{"class":93},[76,84427,84428],{"class":305},"'小号'",[76,84430,55534],{"class":93},[76,84432,84433],{"class":305},"'紫色'",[76,84435,55540],{"class":93},[76,84437,84438,84441],{"class":78,"line":32999},[76,84439,84440],{"class":93},"        gift: ",[76,84442,84443],{"class":305},"'50g茶叶,清洗球'\n",[76,84445,84446],{"class":78,"line":33005},[76,84447,52468],{"class":93},[76,84449,84450],{"class":78,"line":33016},[76,84451,53179],{"class":93},[76,84453,84454],{"class":78,"line":33022},[76,84455,84456],{"class":82},"    \u002F\u002F  1.根据数据渲染页面\n",[76,84458,84459,84461,84463,84465,84467,84469,84471,84473,84475,84477,84479,84481],{"class":78,"line":33042},[76,84460,52477],{"class":93},[76,84462,54469],{"class":2035},[76,84464,202],{"class":93},[76,84466,79971],{"class":305},[76,84468,74319],{"class":93},[76,84470,247],{"class":89},[76,84472,80118],{"class":93},[76,84474,74114],{"class":2035},[76,84476,202],{"class":93},[76,84478,79865],{"class":5288},[76,84480,79868],{"class":89},[76,84482,15644],{"class":93},[76,84484,84485],{"class":78,"line":33058},[76,84486,84487],{"class":82},"      \u002F\u002F 对象解构\n",[76,84489,84490,84492,84494,84496,84498,84500,84502,84505,84507,84509,84511,84514,84516,84519,84521,84523],{"class":78,"line":33064},[76,84491,58298],{"class":89},[76,84493,79877],{"class":93},[76,84495,79890],{"class":250},[76,84497,12507],{"class":93},[76,84499,79880],{"class":250},[76,84501,12507],{"class":93},[76,84503,84504],{"class":250},"count",[76,84506,12507],{"class":93},[76,84508,79885],{"class":250},[76,84510,12507],{"class":93},[76,84512,84513],{"class":250},"spec",[76,84515,12507],{"class":93},[76,84517,84518],{"class":250},"gift",[76,84520,79893],{"class":93},[76,84522,247],{"class":89},[76,84524,79898],{"class":93},[76,84526,84527],{"class":78,"line":33078},[76,84528,84529],{"class":82},"      \u002F\u002F 规格文字模块处理\n",[76,84531,84532,84534,84537,84539,84541,84543,84545,84547,84549,84551],{"class":78,"line":33084},[76,84533,58298],{"class":89},[76,84535,84536],{"class":250}," text",[76,84538,13636],{"class":89},[76,84540,82008],{"class":93},[76,84542,82011],{"class":2035},[76,84544,82014],{"class":93},[76,84546,74293],{"class":2035},[76,84548,202],{"class":93},[76,84550,82021],{"class":305},[76,84552,208],{"class":93},[76,84554,84555],{"class":78,"line":33090},[76,84556,84557],{"class":82},"      \u002F\u002F 处理赠品模块\n",[76,84559,84560,84562,84564,84566,84569,84571,84573,84575,84577,84580,84582,84584,84586,84588,84590,84593,84595,84598,84600,84602,84604,84606,84608,84610],{"class":78,"line":33101},[76,84561,58298],{"class":89},[76,84563,73989],{"class":250},[76,84565,13636],{"class":89},[76,84567,84568],{"class":93}," gift ",[76,84570,1185],{"class":89},[76,84572,83182],{"class":93},[76,84574,83185],{"class":2035},[76,84576,202],{"class":93},[76,84578,84579],{"class":305},"','",[76,84581,30896],{"class":93},[76,84583,74114],{"class":2035},[76,84585,202],{"class":93},[76,84587,79865],{"class":5288},[76,84589,79868],{"class":89},[76,84591,84592],{"class":305}," `\u003Cspan class=\"tag\">【赠品】${",[76,84594,79865],{"class":93},[76,84596,84597],{"class":305},"}\u003C\u002Fspan>`",[76,84599,30896],{"class":93},[76,84601,74293],{"class":2035},[76,84603,202],{"class":93},[76,84605,74298],{"class":305},[76,84607,13786],{"class":93},[76,84609,1058],{"class":89},[76,84611,70174],{"class":305},[76,84613,84614],{"class":78,"line":33107},[76,84615,84616],{"class":82},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[76,84618,84619,84621,84624,84626,84629,84631,84633,84635,84638,84640,84642,84644,84647,84649,84651],{"class":78,"line":33113},[76,84620,58298],{"class":89},[76,84622,84623],{"class":250}," subtotal",[76,84625,13636],{"class":89},[76,84627,84628],{"class":93}," ((price ",[76,84630,655],{"class":89},[76,84632,5826],{"class":250},[76,84634,6590],{"class":89},[76,84636,84637],{"class":93}," count) ",[76,84639,783],{"class":89},[76,84641,5826],{"class":250},[76,84643,30896],{"class":93},[76,84645,84646],{"class":2035},"toFixed",[76,84648,202],{"class":93},[76,84650,278],{"class":250},[76,84652,208],{"class":93},[76,84654,84655],{"class":78,"line":33123},[76,84656,2472],{"emptyLinePlaceholder":125},[76,84658,84659,84661],{"class":78,"line":33129},[76,84660,74052],{"class":89},[76,84662,70238],{"class":305},[76,84664,84665],{"class":78,"line":33140},[76,84666,84667],{"class":305},"        \u003Cdiv class=\"item\">\n",[76,84669,84670,84673,84675],{"class":78,"line":33146},[76,84671,84672],{"class":305},"          \u003Cimg src=\"${",[76,84674,79890],{"class":93},[76,84676,79922],{"class":305},[76,84678,84679,84682,84684,84687,84689],{"class":78,"line":33156},[76,84680,84681],{"class":305},"          \u003Cp class=\"name\">${",[76,84683,79880],{"class":93},[76,84685,84686],{"class":305},"}${",[76,84688,1372],{"class":93},[76,84690,79932],{"class":305},[76,84692,84693,84696,84698],{"class":78,"line":33161},[76,84694,84695],{"class":305},"          \u003Cp class=\"spec\">${",[76,84697,5259],{"class":93},[76,84699,79932],{"class":305},[76,84701,84702,84705,84707,84709,84711,84713,84715,84717],{"class":78,"line":33167},[76,84703,84704],{"class":305},"          \u003Cp class=\"price\">${",[76,84706,79885],{"class":93},[76,84708,757],{"class":305},[76,84710,84646],{"class":2035},[76,84712,202],{"class":305},[76,84714,278],{"class":250},[76,84716,629],{"class":305},[76,84718,79932],{"class":305},[76,84720,84721,84724,84726],{"class":78,"line":33216},[76,84722,84723],{"class":305},"          \u003Cp class=\"count\">x${",[76,84725,84504],{"class":93},[76,84727,79932],{"class":305},[76,84729,84730,84733,84736],{"class":78,"line":33263},[76,84731,84732],{"class":305},"          \u003Cp class=\"sub-total\">${",[76,84734,84735],{"class":93},"subtotal",[76,84737,79932],{"class":305},[76,84739,84740],{"class":78,"line":33268},[76,84741,84742],{"class":305},"        \u003C\u002Fdiv> \n",[76,84744,84745],{"class":78,"line":33274},[76,84746,84747],{"class":305},"             `\n",[76,84749,84750,84753,84755,84757,84759],{"class":78,"line":33293},[76,84751,84752],{"class":93},"    }).",[76,84754,74293],{"class":2035},[76,84756,202],{"class":93},[76,84758,74298],{"class":305},[76,84760,208],{"class":93},[76,84762,84763],{"class":78,"line":33299},[76,84764,84765],{"class":82},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[76,84767,84768,84770,84772,84774,84776,84779,84781,84784,84786,84788,84790,84793,84796,84798,84801,84803,84805,84807,84810,84812,84814,84816,84818],{"class":78,"line":33319},[76,84769,11293],{"class":89},[76,84771,62855],{"class":250},[76,84773,13636],{"class":89},[76,84775,80118],{"class":93},[76,84777,84778],{"class":2035},"reduce",[76,84780,2448],{"class":93},[76,84782,84783],{"class":5288},"prev",[76,84785,12507],{"class":93},[76,84787,79865],{"class":5288},[76,84789,13786],{"class":93},[76,84791,84792],{"class":89},"=>",[76,84794,84795],{"class":93}," prev ",[76,84797,681],{"class":89},[76,84799,84800],{"class":93}," (item.price ",[76,84802,655],{"class":89},[76,84804,5826],{"class":250},[76,84806,6590],{"class":89},[76,84808,84809],{"class":93}," item.count) ",[76,84811,783],{"class":89},[76,84813,5826],{"class":250},[76,84815,12507],{"class":93},[76,84817,392],{"class":250},[76,84819,208],{"class":93},[76,84821,84822,84824,84826,84828,84831,84833,84835,84838,84840,84842,84844],{"class":78,"line":33325},[76,84823,52477],{"class":93},[76,84825,54469],{"class":2035},[76,84827,202],{"class":93},[76,84829,84830],{"class":305},"'.amount'",[76,84832,74319],{"class":93},[76,84834,247],{"class":89},[76,84836,84837],{"class":93}," total.",[76,84839,84646],{"class":2035},[76,84841,202],{"class":93},[76,84843,278],{"class":250},[76,84845,208],{"class":93},[76,84847,84848,84850,84852],{"class":78,"line":33331},[76,84849,52487],{"class":93},[76,84851,51883],{"class":51370},[76,84853,51377],{"class":93},[76,84855,84856,84858,84860],{"class":78,"line":33341},[76,84857,51855],{"class":93},[76,84859,51870],{"class":51370},[76,84861,51377],{"class":93},[76,84863,84864],{"class":78,"line":33346},[76,84865,2472],{"emptyLinePlaceholder":125},[76,84867,84868,84870,84872],{"class":78,"line":33352},[76,84869,51855],{"class":93},[76,84871,50705],{"class":51370},[76,84873,51377],{"class":93},[140,84875,84877],{"id":84876},"_411-编程思想","4.11 编程思想",[169,84879,84881],{"id":84880},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84883,84884,84887],{},[350,84885,84886],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84889,84890],{},"调用就可以了",[14,84892,84893],{},[56,84894],{"alt":58,"src":84895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[169,84897,84899],{"id":84898},"_4112-面向对象","4.11.2 面向对象",[14,84901,84902],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84904,84905],{},[56,84906],{"alt":58,"src":84907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84909,84910],{},"面向对象的特性：",[1206,84912,84913,84916,84919],{},[155,84914,84915],{},"封装性",[155,84917,84918],{},"继承性",[155,84920,84921],{},"多态性",[169,84923,84925],{"id":84924},"_4113-两者比较","4.11.3 两者比较",[14,84927,84928],{},[56,84929],{"alt":58,"src":84930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[140,84932,84934],{"id":84933},"_412-构造函数回顾","4.12 构造函数回顾",[14,84936,84937],{},[56,84938],{"alt":58,"src":84939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84941,84942],{},[56,84943],{"alt":58,"src":84944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84946,84947],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84949,84950],{},[56,84951],{"alt":58,"src":84952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[140,84954,84956],{"id":84955},"_413-原型","4.13 原型",[169,84958,84960],{"id":84959},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84962,84963],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84965,84966],{},[56,84967],{"alt":58,"src":84968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84970,84971],{},[56,84972],{"alt":58,"src":84973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84975,84976],{},"原型是构造函数的属性，它也是一个对象",[14,84978,84979],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84981,84982],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[67,84984,84986],{"className":53137,"code":84985,"language":53139,"meta":58,"style":58},"\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",[73,84987,84988,84996,85001,85009,85014,85019,85024,85029,85034,85038,85042,85046,85051,85056,85060,85065,85070,85075,85080,85085,85089,85097],{"__ignoreMap":58},[76,84989,84990,84992,84994],{"class":78,"line":79},[76,84991,1109],{"class":93},[76,84993,51870],{"class":51370},[76,84995,51377],{"class":93},[76,84997,84998],{"class":78,"line":86},[76,84999,85000],{"class":82},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[76,85002,85003,85005,85007],{"class":78,"line":97},[76,85004,52214],{"class":93},[76,85006,51883],{"class":51370},[76,85008,51377],{"class":93},[76,85010,85011],{"class":78,"line":103},[76,85012,85013],{"class":93},"    function Star(uname, age) {\n",[76,85015,85016],{"class":78,"line":1273},[76,85017,85018],{"class":93},"      this.uname = uname,\n",[76,85020,85021],{"class":78,"line":1287},[76,85022,85023],{"class":93},"        this.age = age\n",[76,85025,85026],{"class":78,"line":1293},[76,85027,85028],{"class":93},"      \u002F\u002F this.sing = function () {\n",[76,85030,85031],{"class":78,"line":1384},[76,85032,85033],{"class":93},"      \u002F\u002F   console.log('唱歌')\n",[76,85035,85036],{"class":78,"line":1390},[76,85037,2472],{"emptyLinePlaceholder":125},[76,85039,85040],{"class":78,"line":1402},[76,85041,60107],{"class":93},[76,85043,85044],{"class":78,"line":1684},[76,85045,2259],{"class":93},[76,85047,85048],{"class":78,"line":1689},[76,85049,85050],{"class":93},"    Star.prototype.sing = function () {\n",[76,85052,85053],{"class":78,"line":1695},[76,85054,85055],{"class":93},"      console.log('唱歌')\n",[76,85057,85058],{"class":78,"line":1700},[76,85059,2259],{"class":93},[76,85061,85062],{"class":78,"line":1714},[76,85063,85064],{"class":93},"    \u002F\u002F console.dir(Star.prototype)\n",[76,85066,85067],{"class":78,"line":1719},[76,85068,85069],{"class":93},"    const pink = new Star('pink', 18)\n",[76,85071,85072],{"class":78,"line":1725},[76,85073,85074],{"class":93},"    const red = new Star('red', 20)\n",[76,85076,85077],{"class":78,"line":1746},[76,85078,85079],{"class":93},"    pink.sing()\n",[76,85081,85082],{"class":78,"line":1751},[76,85083,85084],{"class":93},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[76,85086,85087],{"class":78,"line":1765},[76,85088,2472],{"emptyLinePlaceholder":125},[76,85090,85091,85093,85095],{"class":78,"line":1770},[76,85092,52487],{"class":93},[76,85094,51883],{"class":51370},[76,85096,51377],{"class":93},[76,85098,85099,85101,85103],{"class":78,"line":1799},[76,85100,51855],{"class":93},[76,85102,51870],{"class":51370},[76,85104,51377],{"class":93},[14,85106,85107],{},[56,85108],{"alt":58,"src":85109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[67,85111,85113],{"className":53137,"code":85112,"language":53139,"meta":58,"style":58},"\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",[73,85114,85115,85123,85131,85136,85141,85146,85151,85155,85160,85165,85170,85174,85179,85183,85187,85192,85196,85204],{"__ignoreMap":58},[76,85116,85117,85119,85121],{"class":78,"line":79},[76,85118,1109],{"class":93},[76,85120,51870],{"class":51370},[76,85122,51377],{"class":93},[76,85124,85125,85127,85129],{"class":78,"line":86},[76,85126,52214],{"class":93},[76,85128,51883],{"class":51370},[76,85130,51377],{"class":93},[76,85132,85133],{"class":78,"line":97},[76,85134,85135],{"class":93},"    let that\n",[76,85137,85138],{"class":78,"line":103},[76,85139,85140],{"class":93},"    function Star(uname) {\n",[76,85142,85143],{"class":78,"line":1273},[76,85144,85145],{"class":93},"      this.uname = uname\n",[76,85147,85148],{"class":78,"line":1287},[76,85149,85150],{"class":93},"      that = this\n",[76,85152,85153],{"class":78,"line":1293},[76,85154,2259],{"class":93},[76,85156,85157],{"class":78,"line":1384},[76,85158,85159],{"class":93},"    \u002F\u002F 实例对象是 ldh\n",[76,85161,85162],{"class":78,"line":1390},[76,85163,85164],{"class":93},"    const ldh = new Star('刘德华')\n",[76,85166,85167],{"class":78,"line":1402},[76,85168,85169],{"class":93},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[76,85171,85172],{"class":78,"line":1684},[76,85173,2472],{"emptyLinePlaceholder":125},[76,85175,85176],{"class":78,"line":1689},[76,85177,85178],{"class":93},"    Star.sing = function () {\n",[76,85180,85181],{"class":78,"line":1695},[76,85182,85055],{"class":93},[76,85184,85185],{"class":78,"line":1700},[76,85186,2259],{"class":93},[76,85188,85189],{"class":78,"line":1714},[76,85190,85191],{"class":93},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[76,85193,85194],{"class":78,"line":1719},[76,85195,2472],{"emptyLinePlaceholder":125},[76,85197,85198,85200,85202],{"class":78,"line":1725},[76,85199,52487],{"class":93},[76,85201,51883],{"class":51370},[76,85203,51377],{"class":93},[76,85205,85206,85208,85210],{"class":78,"line":1746},[76,85207,51855],{"class":93},[76,85209,51870],{"class":51370},[76,85211,51377],{"class":93},[14,85213,85214],{},"构造函数的this指向的是实例对象；",[14,85216,85217],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[169,85219,85221],{"id":85220},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85223,85224],{},[56,85225],{"alt":58,"src":85226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[67,85228,85230],{"className":53137,"code":85229,"language":53139,"meta":58,"style":58},"\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",[73,85231,85232,85240,85248,85253,85258,85263,85268,85273,85278,85283,85288,85293,85298,85302,85307,85312,85317,85322,85326,85331,85336,85341,85346,85350,85355,85360,85365,85370,85374,85379,85383,85391],{"__ignoreMap":58},[76,85233,85234,85236,85238],{"class":78,"line":79},[76,85235,1109],{"class":93},[76,85237,51870],{"class":51370},[76,85239,51377],{"class":93},[76,85241,85242,85244,85246],{"class":78,"line":86},[76,85243,52214],{"class":93},[76,85245,51883],{"class":51370},[76,85247,51377],{"class":93},[76,85249,85250],{"class":78,"line":97},[76,85251,85252],{"class":93},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[76,85254,85255],{"class":78,"line":103},[76,85256,85257],{"class":93},"    const arr = [1, 2, 3]\n",[76,85259,85260],{"class":78,"line":1273},[76,85261,85262],{"class":93},"    \u002F\u002F 自己定义数组的扩展方法\n",[76,85264,85265],{"class":78,"line":1287},[76,85266,85267],{"class":93},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[76,85269,85270],{"class":78,"line":1293},[76,85271,85272],{"class":93},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[76,85274,85275],{"class":78,"line":1384},[76,85276,85277],{"class":93},"    \u002F\u002F ①.最大值\n",[76,85279,85280],{"class":78,"line":1390},[76,85281,85282],{"class":93},"    Array.prototype.max = function () {\n",[76,85284,85285],{"class":78,"line":1402},[76,85286,85287],{"class":93},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[76,85289,85290],{"class":78,"line":1684},[76,85291,85292],{"class":93},"      return Math.max(...this)\n",[76,85294,85295],{"class":78,"line":1689},[76,85296,85297],{"class":93},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[76,85299,85300],{"class":78,"line":1695},[76,85301,2259],{"class":93},[76,85303,85304],{"class":78,"line":1700},[76,85305,85306],{"class":93},"    console.log(arr.max())\n",[76,85308,85309],{"class":78,"line":1714},[76,85310,85311],{"class":93},"    \u002F\u002F ②最小值\n",[76,85313,85314],{"class":78,"line":1719},[76,85315,85316],{"class":93},"    Array.prototype.min = function () {\n",[76,85318,85319],{"class":78,"line":1725},[76,85320,85321],{"class":93},"      return Math.min(...this)\n",[76,85323,85324],{"class":78,"line":1746},[76,85325,2259],{"class":93},[76,85327,85328],{"class":78,"line":1751},[76,85329,85330],{"class":93},"    console.log(arr.min())\n",[76,85332,85333],{"class":78,"line":1765},[76,85334,85335],{"class":93},"    \u002F\u002F③求和\n",[76,85337,85338],{"class":78,"line":1770},[76,85339,85340],{"class":93},"    Array.prototype.sum = function () {\n",[76,85342,85343],{"class":78,"line":1799},[76,85344,85345],{"class":93},"      return this.reduce((prev, current) => prev + current, 0)\n",[76,85347,85348],{"class":78,"line":1804},[76,85349,2259],{"class":93},[76,85351,85352],{"class":78,"line":1821},[76,85353,85354],{"class":93},"    console.log(arr.sum())\n",[76,85356,85357],{"class":78,"line":1826},[76,85358,85359],{"class":93},"    \u002F\u002F ③排序\n",[76,85361,85362],{"class":78,"line":1831},[76,85363,85364],{"class":93},"    Array.prototype.rever = function () {\n",[76,85366,85367],{"class":78,"line":1836},[76,85368,85369],{"class":93},"      return this.reverse()\n",[76,85371,85372],{"class":78,"line":1850},[76,85373,2259],{"class":93},[76,85375,85376],{"class":78,"line":1855},[76,85377,85378],{"class":93},"    console.log(arr.rever())\n",[76,85380,85381],{"class":78,"line":2649},[76,85382,2472],{"emptyLinePlaceholder":125},[76,85384,85385,85387,85389],{"class":78,"line":2663},[76,85386,52487],{"class":93},[76,85388,51883],{"class":51370},[76,85390,51377],{"class":93},[76,85392,85393,85395,85397],{"class":78,"line":2671},[76,85394,51855],{"class":93},[76,85396,51870],{"class":51370},[76,85398,51377],{"class":93},[14,85400,85401],{},[56,85402],{"alt":58,"src":85403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[169,85405,85407],{"id":85406},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85409,85410],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85412,85413],{},[56,85414],{"alt":58,"src":85415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[67,85417,85419],{"className":53137,"code":85418,"language":53139,"meta":58,"style":58},"\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",[73,85420,85421,85429,85437,85442,85447,85451,85456,85461,85466,85474],{"__ignoreMap":58},[76,85422,85423,85425,85427],{"class":78,"line":79},[76,85424,1109],{"class":93},[76,85426,51870],{"class":51370},[76,85428,51377],{"class":93},[76,85430,85431,85433,85435],{"class":78,"line":86},[76,85432,52214],{"class":93},[76,85434,51883],{"class":51370},[76,85436,51377],{"class":93},[76,85438,85439],{"class":78,"line":97},[76,85440,85441],{"class":93},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[76,85443,85444],{"class":78,"line":103},[76,85445,85446],{"class":93},"    function Star() {\n",[76,85448,85449],{"class":78,"line":1273},[76,85450,2259],{"class":93},[76,85452,85453],{"class":78,"line":1287},[76,85454,85455],{"class":93},"    const ldh = new Star()\n",[76,85457,85458],{"class":78,"line":1293},[76,85459,85460],{"class":93},"    console.log(Star.prototype)\n",[76,85462,85463],{"class":78,"line":1384},[76,85464,85465],{"class":93},"    console.log(Star.prototype.constructor === Star)\n",[76,85467,85468,85470,85472],{"class":78,"line":1390},[76,85469,52487],{"class":93},[76,85471,51883],{"class":51370},[76,85473,51377],{"class":93},[76,85475,85476,85478,85480],{"class":78,"line":1402},[76,85477,51855],{"class":93},[76,85479,51870],{"class":51370},[76,85481,51377],{"class":93},[14,85483,85484],{},[56,85485],{"alt":58,"src":85486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85488,85489],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[67,85491,85493],{"className":53137,"code":85492,"language":53139,"meta":58,"style":58},"  \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",[73,85494,85495,85503,85507,85511,85515,85520,85525,85530,85534,85539,85544,85549,85554,85559,85564,85568,85572,85577,85582,85587,85591,85596,85601,85605,85609,85613],{"__ignoreMap":58},[76,85496,85497,85499,85501],{"class":78,"line":79},[76,85498,52214],{"class":93},[76,85500,51883],{"class":51370},[76,85502,51377],{"class":93},[76,85504,85505],{"class":78,"line":86},[76,85506,85441],{"class":93},[76,85508,85509],{"class":78,"line":97},[76,85510,85446],{"class":93},[76,85512,85513],{"class":78,"line":103},[76,85514,2259],{"class":93},[76,85516,85517],{"class":78,"line":1273},[76,85518,85519],{"class":93},"    \u002F\u002F const ldh = new Star()\n",[76,85521,85522],{"class":78,"line":1287},[76,85523,85524],{"class":93},"    \u002F\u002F console.log(Star.prototype)\n",[76,85526,85527],{"class":78,"line":1293},[76,85528,85529],{"class":93},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[76,85531,85532],{"class":78,"line":1384},[76,85533,2472],{"emptyLinePlaceholder":125},[76,85535,85536],{"class":78,"line":1390},[76,85537,85538],{"class":93},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[76,85540,85541],{"class":78,"line":1402},[76,85542,85543],{"class":93},"    \u002F\u002F Star.prototype.sing = function () {\n",[76,85545,85546],{"class":78,"line":1684},[76,85547,85548],{"class":93},"    \u002F\u002F   console.log('唱歌')\n",[76,85550,85551],{"class":78,"line":1689},[76,85552,85553],{"class":93},"    \u002F\u002F }\n",[76,85555,85556],{"class":78,"line":1695},[76,85557,85558],{"class":93},"    \u002F\u002F Star.prototype.dance = function () {\n",[76,85560,85561],{"class":78,"line":1700},[76,85562,85563],{"class":93},"    \u002F\u002F   console.log('跳舞')\n",[76,85565,85566],{"class":78,"line":1714},[76,85567,85553],{"class":93},[76,85569,85570],{"class":78,"line":1719},[76,85571,85460],{"class":93},[76,85573,85574],{"class":78,"line":1725},[76,85575,85576],{"class":93},"    Star.prototype = {\n",[76,85578,85579],{"class":78,"line":1746},[76,85580,85581],{"class":93},"      sing: function () {\n",[76,85583,85584],{"class":78,"line":1751},[76,85585,85586],{"class":93},"        console.log('唱歌')\n",[76,85588,85589],{"class":78,"line":1765},[76,85590,77962],{"class":93},[76,85592,85593],{"class":78,"line":1770},[76,85594,85595],{"class":93},"      dance: function () {\n",[76,85597,85598],{"class":78,"line":1799},[76,85599,85600],{"class":93},"        console.log('跳舞')\n",[76,85602,85603],{"class":78,"line":1804},[76,85604,52468],{"class":93},[76,85606,85607],{"class":78,"line":1821},[76,85608,2259],{"class":93},[76,85610,85611],{"class":78,"line":1826},[76,85612,85460],{"class":93},[76,85614,85615,85617,85619],{"class":78,"line":1831},[76,85616,52487],{"class":93},[76,85618,51883],{"class":51370},[76,85620,51377],{"class":93},[14,85622,85623],{},"进行输出结果后会发现：",[14,85625,85626],{},[56,85627],{"alt":58,"src":85628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85630,85631],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85633,85634],{},"所以，要重新指回创造这个原型对象的构造函数",[67,85636,85638],{"className":71283,"code":85637,"language":71285,"meta":58,"style":58},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[73,85639,85640,85654,85659,85664,85675,85688,85693,85704,85718,85722],{"__ignoreMap":58},[76,85641,85642,85645,85647,85650,85652],{"class":78,"line":79},[76,85643,85644],{"class":250},"Star",[76,85646,757],{"class":93},[76,85648,85649],{"class":250},"prototype",[76,85651,13636],{"class":89},[76,85653,15644],{"class":93},[76,85655,85656],{"class":78,"line":86},[76,85657,85658],{"class":82},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[76,85660,85661],{"class":78,"line":97},[76,85662,85663],{"class":93},"  constructor: Star,\n",[76,85665,85666,85669,85671,85673],{"class":78,"line":103},[76,85667,85668],{"class":2035},"  sing",[76,85670,51507],{"class":93},[76,85672,54519],{"class":89},[76,85674,54522],{"class":93},[76,85676,85677,85679,85681,85683,85686],{"class":78,"line":1273},[76,85678,73823],{"class":93},[76,85680,58317],{"class":2035},[76,85682,202],{"class":93},[76,85684,85685],{"class":305},"'唱歌'",[76,85687,208],{"class":93},[76,85689,85690],{"class":78,"line":1287},[76,85691,85692],{"class":93},"   },\n",[76,85694,85695,85698,85700,85702],{"class":78,"line":1293},[76,85696,85697],{"class":2035},"   dance",[76,85699,51507],{"class":93},[76,85701,54519],{"class":89},[76,85703,54522],{"class":93},[76,85705,85706,85709,85711,85713,85716],{"class":78,"line":1384},[76,85707,85708],{"class":93},"     console.",[76,85710,58317],{"class":2035},[76,85712,202],{"class":93},[76,85714,85715],{"class":305},"'跳舞'",[76,85717,208],{"class":93},[76,85719,85720],{"class":78,"line":1390},[76,85721,4381],{"class":93},[76,85723,85724],{"class":78,"line":1402},[76,85725,1637],{"class":93},[14,85727,85728],{},[56,85729],{"alt":58,"src":85730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85732,85733],{},"总结1：",[14,85735,85736],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85738,85739],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85741,85742],{},"constructor指的是他的来源",[14,85744,85745],{},[56,85746],{"alt":58,"src":85747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85749,85750],{},[56,85751],{"alt":58,"src":85752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85754,85755],{},"总结2：",[14,85757,85758],{},[56,85759],{"alt":58,"src":85760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85762,85763],{},[56,85764],{"alt":58,"src":85765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85767,85768],{},[56,85769],{"alt":58,"src":85770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[169,85772,85774],{"id":85773},"_4134-对象原型","4.13.4 对象原型",[14,85776,85777],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85779,85780],{},"对象原型就是__proto__这个属性",[14,85782,85783],{},[56,85784],{"alt":58,"src":85785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85787,85788],{},[56,85789],{"alt":58,"src":85790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85792,85793],{},[56,85794],{"alt":58,"src":85795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85797,85798],{},[56,85799],{"alt":58,"src":85800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[67,85802,85804],{"className":53137,"code":85803,"language":53139,"meta":58,"style":58},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[73,85805,85806,85814,85822,85826,85830,85834,85839,85847],{"__ignoreMap":58},[76,85807,85808,85810,85812],{"class":78,"line":79},[76,85809,1109],{"class":93},[76,85811,51870],{"class":51370},[76,85813,51377],{"class":93},[76,85815,85816,85818,85820],{"class":78,"line":86},[76,85817,52214],{"class":93},[76,85819,51883],{"class":51370},[76,85821,51377],{"class":93},[76,85823,85824],{"class":78,"line":97},[76,85825,85446],{"class":93},[76,85827,85828],{"class":78,"line":103},[76,85829,2259],{"class":93},[76,85831,85832],{"class":78,"line":1273},[76,85833,85455],{"class":93},[76,85835,85836],{"class":78,"line":1287},[76,85837,85838],{"class":93},"    console.log(ldh)\n",[76,85840,85841,85843,85845],{"class":78,"line":1293},[76,85842,52487],{"class":93},[76,85844,51883],{"class":51370},[76,85846,51377],{"class":93},[76,85848,85849,85851,85853],{"class":78,"line":1384},[76,85850,51855],{"class":93},[76,85852,51870],{"class":51370},[76,85854,51377],{"class":93},[14,85856,85857],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85859,85860],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85862,85863],{},[56,85864],{"alt":58,"src":85865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85867,85868],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85870,85871],{},"对象原型指向原型对象",[14,85873,85874],{},[56,85875],{"alt":58,"src":85876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85878,85879],{},[56,85880],{"alt":58,"src":85881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85883,85884],{},[56,85885],{"alt":58,"src":85886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[169,85888,85890],{"id":85889},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85892,85893],{},[56,85894],{"alt":58,"src":85895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[152,85897,85898,85901,85904,85907],{},[155,85899,85900],{},"构造函数通过new的形式实例化得到实例对象",[155,85902,85903],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[155,85905,85906],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[155,85908,85909],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85911,85912],{},[56,85913],{"alt":58,"src":85914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85916,85917],{},"题目梳理：",[14,85919,85920],{},[56,85921],{"alt":58,"src":85922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[169,85924,85926],{"id":85925},"_4136-原型继承","4.13.6 原型继承",[14,85928,85929],{},[56,85930],{"alt":58,"src":85931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85933,85934],{},[56,85935],{"alt":58,"src":85936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85938,85939],{},[56,85940],{"alt":58,"src":85941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85943,85944],{},[56,85945],{"alt":58,"src":85946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85948,85949],{},[56,85950],{"alt":58,"src":85951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85953,85954],{},[56,85955],{"alt":58,"src":85956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85958,85959],{},[56,85960],{"alt":58,"src":85961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85963,85964],{},[56,85965],{"alt":58,"src":85966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85968,85969],{},"回顾：构造函数每次new得到对象都是不同的",[169,85971,85973],{"id":85972},"_4137-原型链","4.13.7 原型链",[14,85975,85976],{},[56,85977],{"alt":58,"src":85978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85980,85981],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85983,85984],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85986,85987],{},"大哥是Object",[14,85989,85990],{},[56,85991],{"alt":58,"src":85992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85994,85995],{},[56,85996],{"alt":58,"src":85997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85999,86000],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86002,86003],{},"万物皆对象",[169,86005,86007],{"id":86006},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86009,86010],{},"模态框",[14,86012,86013],{},"以后遇见这个效果直接使用这个就行",[14,86015,86016],{},[56,86017],{"alt":58,"src":86018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86020,86021],{},[56,86022],{"alt":58,"src":86023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86025,86026],{},[56,86027],{"alt":58,"src":86028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86030,86031],{},[56,86032],{"alt":58,"src":86033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86035,86036],{},"补充知识点：",[152,86038,86039],{},[155,86040,86041],{},"append()",[14,86043,86044],{},[56,86045],{"alt":58,"src":86046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[67,86048,86050],{"className":50703,"code":86049,"language":50705,"meta":58,"style":58},"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",[73,86051,86052,86057,86062,86067,86071,86075,86079,86084,86089,86094,86098],{"__ignoreMap":58},[76,86053,86054],{"class":78,"line":79},[76,86055,86056],{"class":93},"append(param1)\n",[76,86058,86059],{"class":78,"line":86},[76,86060,86061],{"class":93},"append(param1, param2)\n",[76,86063,86064],{"class":78,"line":97},[76,86065,86066],{"class":93},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[76,86068,86069],{"class":78,"line":103},[76,86070,2472],{"emptyLinePlaceholder":125},[76,86072,86073],{"class":78,"line":1273},[76,86074,2472],{"emptyLinePlaceholder":125},[76,86076,86077],{"class":78,"line":1287},[76,86078,2472],{"emptyLinePlaceholder":125},[76,86080,86081],{"class":78,"line":1293},[76,86082,86083],{"class":93},"let div = document.createElement(\"div\");\n",[76,86085,86086],{"class":78,"line":1384},[76,86087,86088],{"class":93},"let p = document.createElement(\"p\");\n",[76,86090,86091],{"class":78,"line":1390},[76,86092,86093],{"class":93},"div.append(p);\n",[76,86095,86096],{"class":78,"line":1402},[76,86097,2472],{"emptyLinePlaceholder":125},[76,86099,86100,86103,86105],{"class":78,"line":1684},[76,86101,86102],{"class":93},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[76,86104,14],{"class":51370},[76,86106,86107],{"class":93},"> ]\n",[152,86109,86110],{"start":86},[155,86111,86112],{},"remove()",[14,86114,86115],{},"自己删自己",[14,86117,86118],{},[56,86119],{"alt":58,"src":86120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[67,86122,86124],{"className":50703,"code":86123,"language":50705,"meta":58,"style":58},"\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",[73,86125,86126,86136,86150,86154,86162,86176,86196,86208,86216,86223,86235,86248,86283,86295,86306,86318,86330,86342,86369,86379,86383,86387,86396,86408,86422,86432,86444,86448,86452,86462,86473,86483,86493,86506,86519,86529,86533,86537,86546,86556,86568,86572,86576,86585,86595,86605,86617,86621,86625,86635,86651,86662,86672,86682,86694,86706,86718,86722,86726,86739,86750,86754,86762,86770,86774,86782,86802,86822,86830,86835,86861,86866,86871,86890,86895,86907,86912,86923,86933,86943,86948,86953,86957,86962,86967,86972,86992,86997,87017,87022,87036,87041,87046,87051,87067,87071,87076,87105,87110,87115,87120,87131,87135,87139,87143,87148,87173,87178,87203,87208,87217,87221,87226,87251,87255,87280,87284,87293,87297,87302,87320,87330,87334,87342,87350,87354],{"__ignoreMap":58},[76,86127,86128,86130,86132,86134],{"class":78,"line":79},[76,86129,51367],{"class":93},[76,86131,51371],{"class":51370},[76,86133,51374],{"class":2035},[76,86135,51377],{"class":93},[76,86137,86138,86140,86142,86144,86146,86148],{"class":78,"line":86},[76,86139,1109],{"class":93},[76,86141,50705],{"class":51370},[76,86143,51386],{"class":2035},[76,86145,247],{"class":93},[76,86147,51391],{"class":305},[76,86149,51377],{"class":93},[76,86151,86152],{"class":78,"line":97},[76,86153,2472],{"emptyLinePlaceholder":125},[76,86155,86156,86158,86160],{"class":78,"line":103},[76,86157,1109],{"class":93},[76,86159,51404],{"class":51370},[76,86161,51377],{"class":93},[76,86163,86164,86166,86168,86170,86172,86174],{"class":78,"line":1273},[76,86165,52214],{"class":93},[76,86167,51414],{"class":51370},[76,86169,51417],{"class":2035},[76,86171,247],{"class":93},[76,86173,51422],{"class":305},[76,86175,51377],{"class":93},[76,86177,86178,86180,86182,86184,86186,86188,86190,86192,86194],{"class":78,"line":1287},[76,86179,52214],{"class":93},[76,86181,51414],{"class":51370},[76,86183,14992],{"class":2035},[76,86185,247],{"class":93},[76,86187,51461],{"class":305},[76,86189,51441],{"class":2035},[76,86191,247],{"class":93},[76,86193,51468],{"class":305},[76,86195,51377],{"class":93},[76,86197,86198,86200,86202,86204,86206],{"class":78,"line":1293},[76,86199,52214],{"class":93},[76,86201,51477],{"class":51370},[76,86203,51480],{"class":93},[76,86205,51477],{"class":51370},[76,86207,51377],{"class":93},[76,86209,86210,86212,86214],{"class":78,"line":1384},[76,86211,52214],{"class":93},[76,86213,117],{"class":51370},[76,86215,51377],{"class":93},[76,86217,86218,86221],{"class":78,"line":1390},[76,86219,86220],{"class":2035},"    .modal",[76,86222,15644],{"class":93},[76,86224,86225,86227,86229,86231,86233],{"class":78,"line":1402},[76,86226,54841],{"class":250},[76,86228,51507],{"class":93},[76,86230,4045],{"class":250},[76,86232,51562],{"class":89},[76,86234,1363],{"class":93},[76,86236,86237,86240,86242,86244,86246],{"class":78,"line":1684},[76,86238,86239],{"class":250},"      min-height",[76,86241,51507],{"class":93},[76,86243,512],{"class":250},[76,86245,51562],{"class":89},[76,86247,1363],{"class":93},[76,86249,86250,86252,86254,86256,86258,86260,86262,86264,86266,86268,86270,86272,86274,86276,86278,86281],{"class":78,"line":1689},[76,86251,78820],{"class":250},[76,86253,51507],{"class":93},[76,86255,392],{"class":250},[76,86257,4165],{"class":250},[76,86259,2110],{"class":250},[76,86261,51562],{"class":89},[76,86263,78837],{"class":250},[76,86265,202],{"class":93},[76,86267,392],{"class":250},[76,86269,12507],{"class":93},[76,86271,392],{"class":250},[76,86273,12507],{"class":93},[76,86275,392],{"class":250},[76,86277,12507],{"class":93},[76,86279,86280],{"class":250},"0.1",[76,86282,2791],{"class":93},[76,86284,86285,86287,86289,86291,86293],{"class":78,"line":1695},[76,86286,55204],{"class":250},[76,86288,51507],{"class":93},[76,86290,494],{"class":250},[76,86292,51562],{"class":89},[76,86294,1363],{"class":93},[76,86296,86297,86299,86301,86304],{"class":78,"line":1700},[76,86298,54829],{"class":250},[76,86300,51507],{"class":93},[76,86302,86303],{"class":250},"fixed",[76,86305,1363],{"class":93},[76,86307,86308,86311,86313,86316],{"class":78,"line":1714},[76,86309,86310],{"class":250},"      z-index",[76,86312,51507],{"class":93},[76,86314,86315],{"class":250},"999",[76,86317,1363],{"class":93},[76,86319,86320,86322,86324,86326,86328],{"class":78,"line":1719},[76,86321,54908],{"class":250},[76,86323,51507],{"class":93},[76,86325,855],{"class":250},[76,86327,106],{"class":89},[76,86329,1363],{"class":93},[76,86331,86332,86334,86336,86338,86340],{"class":78,"line":1725},[76,86333,55017],{"class":250},[76,86335,51507],{"class":93},[76,86337,855],{"class":250},[76,86339,106],{"class":89},[76,86341,1363],{"class":93},[76,86343,86344,86346,86348,86350,86352,86355,86357,86359,86361,86363,86365,86367],{"class":78,"line":1746},[76,86345,78861],{"class":250},[76,86347,51507],{"class":93},[76,86349,78866],{"class":250},[76,86351,202],{"class":93},[76,86353,86354],{"class":250},"-50",[76,86356,106],{"class":89},[76,86358,12507],{"class":93},[76,86360,86354],{"class":250},[76,86362,106],{"class":89},[76,86364,12507],{"class":93},[76,86366,392],{"class":250},[76,86368,2791],{"class":93},[76,86370,86371,86373,86375,86377],{"class":78,"line":1751},[76,86372,54954],{"class":250},[76,86374,51507],{"class":93},[76,86376,60912],{"class":250},[76,86378,1363],{"class":93},[76,86380,86381],{"class":78,"line":1765},[76,86382,2259],{"class":93},[76,86384,86385],{"class":78,"line":1770},[76,86386,2472],{"emptyLinePlaceholder":125},[76,86388,86389,86391,86394],{"class":78,"line":1799},[76,86390,86220],{"class":2035},[76,86392,86393],{"class":2035}," .header",[76,86395,15644],{"class":93},[76,86397,86398,86400,86402,86404,86406],{"class":78,"line":1804},[76,86399,57429],{"class":250},[76,86401,51507],{"class":93},[76,86403,601],{"class":250},[76,86405,51562],{"class":89},[76,86407,1363],{"class":93},[76,86409,86410,86412,86414,86416,86418,86420],{"class":78,"line":1821},[76,86411,54765],{"class":250},[76,86413,51507],{"class":93},[76,86415,392],{"class":250},[76,86417,2110],{"class":250},[76,86419,51562],{"class":89},[76,86421,1363],{"class":93},[76,86423,86424,86426,86428,86430],{"class":78,"line":1826},[76,86425,54829],{"class":250},[76,86427,51507],{"class":93},[76,86429,54834],{"class":250},[76,86431,1363],{"class":93},[76,86433,86434,86436,86438,86440,86442],{"class":78,"line":1831},[76,86435,54992],{"class":250},[76,86437,51507],{"class":93},[76,86439,899],{"class":250},[76,86441,51562],{"class":89},[76,86443,1363],{"class":93},[76,86445,86446],{"class":78,"line":1836},[76,86447,2259],{"class":93},[76,86449,86450],{"class":78,"line":1850},[76,86451,2472],{"emptyLinePlaceholder":125},[76,86453,86454,86456,86458,86460],{"class":78,"line":1855},[76,86455,86220],{"class":2035},[76,86457,86393],{"class":2035},[76,86459,3104],{"class":51370},[76,86461,15644],{"class":93},[76,86463,86464,86467,86469,86471],{"class":78,"line":2649},[76,86465,86466],{"class":250},"      font-style",[76,86468,51507],{"class":93},[76,86470,63911],{"class":250},[76,86472,1363],{"class":93},[76,86474,86475,86477,86479,86481],{"class":78,"line":2663},[76,86476,57486],{"class":250},[76,86478,51507],{"class":93},[76,86480,62140],{"class":250},[76,86482,1363],{"class":93},[76,86484,86485,86487,86489,86491],{"class":78,"line":2671},[76,86486,54829],{"class":250},[76,86488,51507],{"class":93},[76,86490,54901],{"class":250},[76,86492,1363],{"class":93},[76,86494,86495,86498,86500,86502,86504],{"class":78,"line":2676},[76,86496,86497],{"class":250},"      right",[76,86499,51507],{"class":93},[76,86501,774],{"class":250},[76,86503,51562],{"class":89},[76,86505,1363],{"class":93},[76,86507,86508,86510,86512,86515,86517],{"class":78,"line":2682},[76,86509,55017],{"class":250},[76,86511,51507],{"class":93},[76,86513,86514],{"class":250},"-2",[76,86516,51562],{"class":89},[76,86518,1363],{"class":93},[76,86520,86521,86523,86525,86527],{"class":78,"line":2688},[76,86522,62095],{"class":250},[76,86524,51507],{"class":93},[76,86526,62100],{"class":250},[76,86528,1363],{"class":93},[76,86530,86531],{"class":78,"line":2693},[76,86532,2259],{"class":93},[76,86534,86535],{"class":78,"line":8020},[76,86536,2472],{"emptyLinePlaceholder":125},[76,86538,86539,86541,86544],{"class":78,"line":8044},[76,86540,86220],{"class":2035},[76,86542,86543],{"class":2035}," .body",[76,86545,15644],{"class":93},[76,86547,86548,86550,86552,86554],{"class":78,"line":8049},[76,86549,57356],{"class":250},[76,86551,51507],{"class":93},[76,86553,51662],{"class":250},[76,86555,1363],{"class":93},[76,86557,86558,86560,86562,86564,86566],{"class":78,"line":8055},[76,86559,54765],{"class":250},[76,86561,51507],{"class":93},[76,86563,646],{"class":250},[76,86565,51562],{"class":89},[76,86567,1363],{"class":93},[76,86569,86570],{"class":78,"line":8082},[76,86571,2259],{"class":93},[76,86573,86574],{"class":78,"line":8087},[76,86575,2472],{"emptyLinePlaceholder":125},[76,86577,86578,86580,86583],{"class":78,"line":8093},[76,86579,86220],{"class":2035},[76,86581,86582],{"class":2035}," .footer",[76,86584,15644],{"class":93},[76,86586,86587,86589,86591,86593],{"class":78,"line":8105},[76,86588,55079],{"class":250},[76,86590,51507],{"class":93},[76,86592,51547],{"class":250},[76,86594,1363],{"class":93},[76,86596,86597,86599,86601,86603],{"class":78,"line":8117},[76,86598,55090],{"class":250},[76,86600,51507],{"class":93},[76,86602,51650],{"class":250},[76,86604,1363],{"class":93},[76,86606,86607,86609,86611,86613,86615],{"class":78,"line":8129},[76,86608,54765],{"class":250},[76,86610,51507],{"class":93},[76,86612,646],{"class":250},[76,86614,51562],{"class":89},[76,86616,1363],{"class":93},[76,86618,86619],{"class":78,"line":9788},[76,86620,2259],{"class":93},[76,86622,86623],{"class":78,"line":9813},[76,86624,2472],{"emptyLinePlaceholder":125},[76,86626,86627,86629,86631,86633],{"class":78,"line":9836},[76,86628,86220],{"class":2035},[76,86630,86582],{"class":2035},[76,86632,1471],{"class":51370},[76,86634,15644],{"class":93},[76,86636,86637,86639,86641,86643,86645,86647,86649],{"class":78,"line":9860},[76,86638,54765],{"class":250},[76,86640,51507],{"class":93},[76,86642,272],{"class":250},[76,86644,51562],{"class":89},[76,86646,2155],{"class":250},[76,86648,51562],{"class":89},[76,86650,1363],{"class":93},[76,86652,86653,86655,86657,86660],{"class":78,"line":9865},[76,86654,61791],{"class":250},[76,86656,51507],{"class":93},[76,86658,86659],{"class":250},"#ccc",[76,86661,1363],{"class":93},[76,86663,86664,86666,86668,86670],{"class":78,"line":9870},[76,86665,64040],{"class":250},[76,86667,51507],{"class":93},[76,86669,54807],{"class":250},[76,86671,1363],{"class":93},[76,86673,86674,86676,86678,86680],{"class":78,"line":9875},[76,86675,57486],{"class":250},[76,86677,51507],{"class":93},[76,86679,60912],{"class":250},[76,86681,1363],{"class":93},[76,86683,86684,86686,86688,86690,86692],{"class":78,"line":9884},[76,86685,55204],{"class":250},[76,86687,51507],{"class":93},[76,86689,278],{"class":250},[76,86691,51562],{"class":89},[76,86693,1363],{"class":93},[76,86695,86696,86698,86700,86702,86704],{"class":78,"line":9889},[76,86697,61820],{"class":250},[76,86699,51507],{"class":93},[76,86701,646],{"class":250},[76,86703,51562],{"class":89},[76,86705,1363],{"class":93},[76,86707,86708,86710,86712,86714,86716],{"class":78,"line":9895},[76,86709,54992],{"class":250},[76,86711,51507],{"class":93},[76,86713,748],{"class":250},[76,86715,51562],{"class":89},[76,86717,1363],{"class":93},[76,86719,86720],{"class":78,"line":9916},[76,86721,2259],{"class":93},[76,86723,86724],{"class":78,"line":9922},[76,86725,2472],{"emptyLinePlaceholder":125},[76,86727,86728,86730,86732,86734,86737],{"class":78,"line":9936},[76,86729,86220],{"class":2035},[76,86731,86582],{"class":2035},[76,86733,1471],{"class":51370},[76,86735,86736],{"class":2035},".submit",[76,86738,15644],{"class":93},[76,86740,86741,86743,86745,86748],{"class":78,"line":9942},[76,86742,54954],{"class":250},[76,86744,51507],{"class":93},[76,86746,86747],{"class":250},"#369",[76,86749,1363],{"class":93},[76,86751,86752],{"class":78,"line":9969},[76,86753,2259],{"class":93},[76,86755,86756,86758,86760],{"class":78,"line":9978},[76,86757,52487],{"class":93},[76,86759,117],{"class":51370},[76,86761,51377],{"class":93},[76,86763,86764,86766,86768],{"class":78,"line":9984},[76,86765,51855],{"class":93},[76,86767,51404],{"class":51370},[76,86769,51377],{"class":93},[76,86771,86772],{"class":78,"line":9992},[76,86773,2472],{"emptyLinePlaceholder":125},[76,86775,86776,86778,86780],{"class":78,"line":9997},[76,86777,1109],{"class":93},[76,86779,51870],{"class":51370},[76,86781,51377],{"class":93},[76,86783,86784,86786,86788,86790,86792,86795,86798,86800],{"class":78,"line":16676},[76,86785,52214],{"class":93},[76,86787,53957],{"class":51370},[76,86789,15031],{"class":2035},[76,86791,247],{"class":93},[76,86793,86794],{"class":305},"\"delete\"",[76,86796,86797],{"class":93},">删除\u003C\u002F",[76,86799,53957],{"class":51370},[76,86801,51377],{"class":93},[76,86803,86804,86806,86808,86810,86812,86815,86818,86820],{"class":78,"line":16682},[76,86805,52214],{"class":93},[76,86807,53957],{"class":51370},[76,86809,15031],{"class":2035},[76,86811,247],{"class":93},[76,86813,86814],{"class":305},"\"login\"",[76,86816,86817],{"class":93},">登录\u003C\u002F",[76,86819,53957],{"class":51370},[76,86821,51377],{"class":93},[76,86823,86824,86826,86828],{"class":78,"line":16705},[76,86825,52214],{"class":93},[76,86827,51883],{"class":51370},[76,86829,51377],{"class":93},[76,86831,86832],{"class":78,"line":16711},[76,86833,86834],{"class":82},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[76,86836,86837,86839,86842,86844,86846,86848,86850,86852,86855,86857,86859],{"class":78,"line":16734},[76,86838,70154],{"class":89},[76,86840,86841],{"class":2035}," Modal",[76,86843,202],{"class":93},[76,86845,51477],{"class":5288},[76,86847,13636],{"class":89},[76,86849,70000],{"class":305},[76,86851,12507],{"class":93},[76,86853,86854],{"class":5288},"message",[76,86856,13636],{"class":89},[76,86858,70000],{"class":305},[76,86860,12514],{"class":93},[76,86862,86863],{"class":78,"line":16748},[76,86864,86865],{"class":82},"      \u002F\u002F 创建Model 模态框盒子\n",[76,86867,86868],{"class":78,"line":16768},[76,86869,86870],{"class":82},"      \u002F\u002F 1.1 创建div标签\n",[76,86872,86873,86875,86878,86880,86882,86884,86886,86888],{"class":78,"line":16774},[76,86874,70121],{"class":250},[76,86876,86877],{"class":93},".modalBox ",[76,86879,247],{"class":89},[76,86881,54466],{"class":93},[76,86883,70221],{"class":2035},[76,86885,202],{"class":93},[76,86887,82001],{"class":305},[76,86889,208],{"class":93},[76,86891,86892],{"class":78,"line":16785},[76,86893,86894],{"class":82},"      \u002F\u002F 1.2 给div 添加类名为model\n",[76,86896,86897,86899,86902,86904],{"class":78,"line":16808},[76,86898,70121],{"class":250},[76,86900,86901],{"class":93},".modalBox.className ",[76,86903,247],{"class":89},[76,86905,86906],{"class":305}," 'modal'\n",[76,86908,86909],{"class":78,"line":16830},[76,86910,86911],{"class":82},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[76,86913,86914,86916,86919,86921],{"class":78,"line":16835},[76,86915,70121],{"class":250},[76,86917,86918],{"class":93},".modalBox.innerHTML ",[76,86920,247],{"class":89},[76,86922,70238],{"class":305},[76,86924,86925,86928,86930],{"class":78,"line":16841},[76,86926,86927],{"class":305},"        \u003Cdiv class=\"header\">${",[76,86929,51477],{"class":93},[76,86931,86932],{"class":305},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[76,86934,86935,86938,86940],{"class":78,"line":16855},[76,86936,86937],{"class":305},"        \u003Cdiv class=\"body\">${",[76,86939,86854],{"class":93},[76,86941,86942],{"class":305},"}\u003C\u002Fdiv>\n",[76,86944,86945],{"class":78,"line":16868},[76,86946,86947],{"class":305},"      `\n",[76,86949,86950],{"class":78,"line":16873},[76,86951,86952],{"class":82},"      \u002F\u002F console.log(this.modalBox)\n",[76,86954,86955],{"class":78,"line":16887},[76,86956,2259],{"class":93},[76,86958,86959],{"class":78,"line":16892},[76,86960,86961],{"class":82},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[76,86963,86964],{"class":78,"line":16898},[76,86965,86966],{"class":82},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[76,86968,86969],{"class":78,"line":16903},[76,86970,86971],{"class":82},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[76,86973,86974,86977,86979,86981,86983,86986,86988,86990],{"class":78,"line":16917},[76,86975,86976],{"class":250},"    Modal",[76,86978,757],{"class":93},[76,86980,85649],{"class":250},[76,86982,757],{"class":93},[76,86984,86985],{"class":2035},"open",[76,86987,13636],{"class":89},[76,86989,58988],{"class":89},[76,86991,54522],{"class":93},[76,86993,86994],{"class":78,"line":16922},[76,86995,86996],{"class":82},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[76,86998,86999,87001,87004,87006,87008,87010,87012,87015],{"class":78,"line":16927},[76,87000,58298],{"class":89},[76,87002,87003],{"class":250}," box",[76,87005,13636],{"class":89},[76,87007,54466],{"class":93},[76,87009,54469],{"class":2035},[76,87011,202],{"class":93},[76,87013,87014],{"class":305},"'.modal'",[76,87016,208],{"class":93},[76,87018,87019],{"class":78,"line":16941},[76,87020,87021],{"class":82},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[76,87023,87024,87027,87029,87032,87034],{"class":78,"line":16953},[76,87025,87026],{"class":93},"      box ",[76,87028,1787],{"class":89},[76,87030,87031],{"class":93}," box.",[76,87033,57076],{"class":2035},[76,87035,2048],{"class":93},[76,87037,87038],{"class":78,"line":16958},[76,87039,87040],{"class":82},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[76,87042,87043],{"class":78,"line":16971},[76,87044,87045],{"class":82},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[76,87047,87048],{"class":78,"line":16976},[76,87049,87050],{"class":82},"      \u002F\u002F append可以增加对象\n",[76,87052,87053,87056,87059,87061,87064],{"class":78,"line":16981},[76,87054,87055],{"class":93},"      document.body.",[76,87057,87058],{"class":2035},"append",[76,87060,202],{"class":93},[76,87062,87063],{"class":250},"this",[76,87065,87066],{"class":93},".modalBox)\n",[76,87068,87069],{"class":78,"line":16986},[76,87070,2472],{"emptyLinePlaceholder":125},[76,87072,87073],{"class":78,"line":16999},[76,87074,87075],{"class":82},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[76,87077,87078,87080,87083,87085,87087,87090,87092,87094,87096,87098,87101,87103],{"class":78,"line":17004},[76,87079,70121],{"class":250},[76,87081,87082],{"class":93},".modalBox.",[76,87084,54469],{"class":2035},[76,87086,202],{"class":93},[76,87088,87089],{"class":305},"'i'",[76,87091,30896],{"class":93},[76,87093,57883],{"class":2035},[76,87095,202],{"class":93},[76,87097,57888],{"class":305},[76,87099,87100],{"class":93},", () ",[76,87102,84792],{"class":89},[76,87104,15644],{"class":93},[76,87106,87107],{"class":78,"line":32703},[76,87108,87109],{"class":82},"        \u002F\u002F 这个地方需要用到箭头函数\n",[76,87111,87112],{"class":78,"line":32709},[76,87113,87114],{"class":82},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[76,87116,87117],{"class":78,"line":32715},[76,87118,87119],{"class":82},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[76,87121,87122,87124,87126,87129],{"class":78,"line":32721},[76,87123,64796],{"class":250},[76,87125,757],{"class":93},[76,87127,87128],{"class":2035},"close",[76,87130,2048],{"class":93},[76,87132,87133],{"class":78,"line":32727},[76,87134,64885],{"class":93},[76,87136,87137],{"class":78,"line":32738},[76,87138,2259],{"class":93},[76,87140,87141],{"class":78,"line":32744},[76,87142,2472],{"emptyLinePlaceholder":125},[76,87144,87145],{"class":78,"line":32764},[76,87146,87147],{"class":82},"    \u002F\u002F 测试一下 点击 删除按钮\n",[76,87149,87150,87152,87154,87156,87159,87161,87163,87165,87167,87169,87171],{"class":78,"line":32770},[76,87151,52477],{"class":93},[76,87153,54469],{"class":2035},[76,87155,202],{"class":93},[76,87157,87158],{"class":305},"'#delete'",[76,87160,30896],{"class":93},[76,87162,57883],{"class":2035},[76,87164,202],{"class":93},[76,87166,57888],{"class":305},[76,87168,87100],{"class":93},[76,87170,84792],{"class":89},[76,87172,15644],{"class":93},[76,87174,87175],{"class":78,"line":32781},[76,87176,87177],{"class":82},"      \u002F\u002F 先调用Model构造函数\n",[76,87179,87180,87182,87185,87187,87189,87191,87193,87196,87198,87201],{"class":78,"line":32787},[76,87181,58298],{"class":89},[76,87183,87184],{"class":250}," del",[76,87186,13636],{"class":89},[76,87188,11650],{"class":89},[76,87190,86841],{"class":2035},[76,87192,202],{"class":93},[76,87194,87195],{"class":305},"'温馨的提示'",[76,87197,12507],{"class":93},[76,87199,87200],{"class":305},"'您没有删除权限操作'",[76,87202,208],{"class":93},[76,87204,87205],{"class":78,"line":32793},[76,87206,87207],{"class":82},"      \u002F\u002F 实例对象调用open方法\n",[76,87209,87210,87213,87215],{"class":78,"line":32799},[76,87211,87212],{"class":93},"      del.",[76,87214,86985],{"class":2035},[76,87216,2048],{"class":93},[76,87218,87219],{"class":78,"line":32805},[76,87220,33531],{"class":93},[76,87222,87223],{"class":78,"line":32811},[76,87224,87225],{"class":82},"    \u002F\u002F 测试一下 点击 登录按钮\n",[76,87227,87228,87230,87232,87234,87237,87239,87241,87243,87245,87247,87249],{"class":78,"line":32817},[76,87229,52477],{"class":93},[76,87231,54469],{"class":2035},[76,87233,202],{"class":93},[76,87235,87236],{"class":305},"'#login'",[76,87238,30896],{"class":93},[76,87240,57883],{"class":2035},[76,87242,202],{"class":93},[76,87244,57888],{"class":305},[76,87246,87100],{"class":93},[76,87248,84792],{"class":89},[76,87250,15644],{"class":93},[76,87252,87253],{"class":78,"line":32823},[76,87254,87177],{"class":82},[76,87256,87257,87259,87262,87264,87266,87268,87270,87273,87275,87278],{"class":78,"line":32843},[76,87258,58298],{"class":89},[76,87260,87261],{"class":250}," log",[76,87263,13636],{"class":89},[76,87265,11650],{"class":89},[76,87267,86841],{"class":2035},[76,87269,202],{"class":93},[76,87271,87272],{"class":305},"'友情提示'",[76,87274,12507],{"class":93},[76,87276,87277],{"class":305},"'您还没有登录呢'",[76,87279,208],{"class":93},[76,87281,87282],{"class":78,"line":32849},[76,87283,87207],{"class":82},[76,87285,87286,87289,87291],{"class":78,"line":32865},[76,87287,87288],{"class":93},"      log.",[76,87290,86985],{"class":2035},[76,87292,2048],{"class":93},[76,87294,87295],{"class":78,"line":32871},[76,87296,33531],{"class":93},[76,87298,87299],{"class":78,"line":32885},[76,87300,87301],{"class":82},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[76,87303,87304,87306,87308,87310,87312,87314,87316,87318],{"class":78,"line":32891},[76,87305,86976],{"class":250},[76,87307,757],{"class":93},[76,87309,85649],{"class":250},[76,87311,757],{"class":93},[76,87313,87128],{"class":2035},[76,87315,13636],{"class":89},[76,87317,58988],{"class":89},[76,87319,54522],{"class":93},[76,87321,87322,87324,87326,87328],{"class":78,"line":32906},[76,87323,70121],{"class":250},[76,87325,87082],{"class":93},[76,87327,57076],{"class":2035},[76,87329,2048],{"class":93},[76,87331,87332],{"class":78,"line":32912},[76,87333,2259],{"class":93},[76,87335,87336,87338,87340],{"class":78,"line":32921},[76,87337,52487],{"class":93},[76,87339,51883],{"class":51370},[76,87341,51377],{"class":93},[76,87343,87344,87346,87348],{"class":78,"line":32927},[76,87345,51855],{"class":93},[76,87347,51870],{"class":51370},[76,87349,51377],{"class":93},[76,87351,87352],{"class":78,"line":32936},[76,87353,2472],{"emptyLinePlaceholder":125},[76,87355,87356,87358,87360],{"class":78,"line":32942},[76,87357,51855],{"class":93},[76,87359,50705],{"class":51370},[76,87361,51377],{"class":93},[14,87363,87364],{},[56,87365],{"alt":58,"src":87366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[140,87368,87370],{"id":87369},"_414-深浅拷贝","4.14 深浅拷贝",[169,87372,87374],{"id":87373},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87376,87377],{},[56,87378],{"alt":58,"src":87379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87381,87382],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87384,87385],{},[56,87386],{"alt":58,"src":87387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87389,87390],{},[56,87391],{"alt":58,"src":87392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87394,87395],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87397,87398],{},[56,87399],{"alt":58,"src":87400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87402,11404],{},[14,87404,87405],{},[56,87406],{"alt":58,"src":87407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[169,87409,87411],{"id":87410},"_4142-深拷贝","4.14.2 深拷贝",[14,87413,87414],{},"深拷贝：拷贝的是对象，不是地址",[14,87416,87417],{},"常用的三种方法：",[152,87419,87420,87423,87426],{},[155,87421,87422],{},"通过递归实现深拷贝",[155,87424,87425],{},"lodash\u002FcloneDeep",[155,87427,87428],{},"通过JSON.stringify()实现",[22070,87430,87432],{"id":87431},"_41421-递归函数","4.14.2.1 递归函数",[14,87434,87435],{},[56,87436],{"alt":58,"src":87437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[152,87439,87440],{},[155,87441,87442],{},"死递归占溢出：",[67,87444,87446],{"className":53137,"code":87445,"language":53139,"meta":58,"style":58},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[73,87447,87448,87456,87464,87468,87473,87477,87482,87490],{"__ignoreMap":58},[76,87449,87450,87452,87454],{"class":78,"line":79},[76,87451,1109],{"class":93},[76,87453,51870],{"class":51370},[76,87455,51377],{"class":93},[76,87457,87458,87460,87462],{"class":78,"line":86},[76,87459,52214],{"class":93},[76,87461,51883],{"class":51370},[76,87463,51377],{"class":93},[76,87465,87466],{"class":78,"line":97},[76,87467,77213],{"class":93},[76,87469,87470],{"class":78,"line":103},[76,87471,87472],{"class":93},"      fn()\n",[76,87474,87475],{"class":78,"line":1273},[76,87476,2259],{"class":93},[76,87478,87479],{"class":78,"line":1287},[76,87480,87481],{"class":93},"    fn()\n",[76,87483,87484,87486,87488],{"class":78,"line":1293},[76,87485,52487],{"class":93},[76,87487,51883],{"class":51370},[76,87489,51377],{"class":93},[76,87491,87492,87494,87496],{"class":78,"line":1384},[76,87493,51855],{"class":93},[76,87495,51870],{"class":51370},[76,87497,51377],{"class":93},[152,87499,87500],{"start":86},[155,87501,87502],{},"递归函数要加判断条件：",[14,87504,87505],{},[56,87506],{"alt":58,"src":87507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[152,87509,87510],{"start":97},[155,87511,87512],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[67,87514,87516],{"className":50703,"code":87515,"language":50705,"meta":58,"style":58},"\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",[73,87517,87518,87528,87542,87546,87554,87568,87588,87600,87608,87612,87620,87632,87640,87648,87673,87685,87689,87696,87704,87712,87716],{"__ignoreMap":58},[76,87519,87520,87522,87524,87526],{"class":78,"line":79},[76,87521,51367],{"class":93},[76,87523,51371],{"class":51370},[76,87525,51374],{"class":2035},[76,87527,51377],{"class":93},[76,87529,87530,87532,87534,87536,87538,87540],{"class":78,"line":86},[76,87531,1109],{"class":93},[76,87533,50705],{"class":51370},[76,87535,51386],{"class":2035},[76,87537,247],{"class":93},[76,87539,51391],{"class":305},[76,87541,51377],{"class":93},[76,87543,87544],{"class":78,"line":97},[76,87545,2472],{"emptyLinePlaceholder":125},[76,87547,87548,87550,87552],{"class":78,"line":103},[76,87549,1109],{"class":93},[76,87551,51404],{"class":51370},[76,87553,51377],{"class":93},[76,87555,87556,87558,87560,87562,87564,87566],{"class":78,"line":1273},[76,87557,52214],{"class":93},[76,87559,51414],{"class":51370},[76,87561,51417],{"class":2035},[76,87563,247],{"class":93},[76,87565,51422],{"class":305},[76,87567,51377],{"class":93},[76,87569,87570,87572,87574,87576,87578,87580,87582,87584,87586],{"class":78,"line":1287},[76,87571,52214],{"class":93},[76,87573,51414],{"class":51370},[76,87575,14992],{"class":2035},[76,87577,247],{"class":93},[76,87579,51461],{"class":305},[76,87581,51441],{"class":2035},[76,87583,247],{"class":93},[76,87585,51468],{"class":305},[76,87587,51377],{"class":93},[76,87589,87590,87592,87594,87596,87598],{"class":78,"line":1293},[76,87591,52214],{"class":93},[76,87593,51477],{"class":51370},[76,87595,51480],{"class":93},[76,87597,51477],{"class":51370},[76,87599,51377],{"class":93},[76,87601,87602,87604,87606],{"class":78,"line":1384},[76,87603,51855],{"class":93},[76,87605,51404],{"class":51370},[76,87607,51377],{"class":93},[76,87609,87610],{"class":78,"line":1390},[76,87611,2472],{"emptyLinePlaceholder":125},[76,87613,87614,87616,87618],{"class":78,"line":1402},[76,87615,1109],{"class":93},[76,87617,51870],{"class":51370},[76,87619,51377],{"class":93},[76,87621,87622,87624,87626,87628,87630],{"class":78,"line":1684},[76,87623,52214],{"class":93},[76,87625,51681],{"class":51370},[76,87627,55384],{"class":93},[76,87629,51681],{"class":51370},[76,87631,51377],{"class":93},[76,87633,87634,87636,87638],{"class":78,"line":1689},[76,87635,52214],{"class":93},[76,87637,51883],{"class":51370},[76,87639,51377],{"class":93},[76,87641,87642,87644,87646],{"class":78,"line":1695},[76,87643,70154],{"class":89},[76,87645,73843],{"class":2035},[76,87647,10925],{"class":93},[76,87649,87650,87652,87654,87656,87658,87660,87662,87664,87666,87668,87671],{"class":78,"line":1700},[76,87651,55841],{"class":93},[76,87653,54469],{"class":2035},[76,87655,202],{"class":93},[76,87657,82001],{"class":305},[76,87659,74319],{"class":93},[76,87661,247],{"class":89},[76,87663,11650],{"class":89},[76,87665,73859],{"class":2035},[76,87667,17333],{"class":93},[76,87669,87670],{"class":2035},"toLocaleString",[76,87672,2048],{"class":93},[76,87674,87675,87678,87681,87683],{"class":78,"line":1714},[76,87676,87677],{"class":2035},"      setTimeout",[76,87679,87680],{"class":93},"(getTime, ",[76,87682,6482],{"class":250},[76,87684,208],{"class":93},[76,87686,87687],{"class":78,"line":1719},[76,87688,2259],{"class":93},[76,87690,87691,87694],{"class":78,"line":1725},[76,87692,87693],{"class":2035},"    getTime",[76,87695,2048],{"class":93},[76,87697,87698,87700,87702],{"class":78,"line":1746},[76,87699,52487],{"class":93},[76,87701,51883],{"class":51370},[76,87703,51377],{"class":93},[76,87705,87706,87708,87710],{"class":78,"line":1751},[76,87707,51855],{"class":93},[76,87709,51870],{"class":51370},[76,87711,51377],{"class":93},[76,87713,87714],{"class":78,"line":1765},[76,87715,2472],{"emptyLinePlaceholder":125},[76,87717,87718,87720,87722],{"class":78,"line":1770},[76,87719,51855],{"class":93},[76,87721,50705],{"class":51370},[76,87723,51377],{"class":93},[14,87725,87726],{},[56,87727],{"alt":58,"src":87728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[152,87730,87731],{"start":103},[155,87732,87422],{},[14,87734,87735],{},[56,87736],{"alt":58,"src":87737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87739,87740],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87742,39259],{},[14,87744,87745],{},"这个是简易版的递归函数深拷贝",[14,87747,87748],{},"一定要注意先数组再对象，因为万物皆可对象",[67,87750,87752],{"className":50703,"code":87751,"language":50705,"meta":58,"style":58},"\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",[73,87753,87754,87764,87778,87782,87790,87804,87824,87836,87844,87848,87856,87864,87874,87883,87891,87907,87911,87919,87923,87927,87939,87944,87963,87979,87984,87989,87994,88009,88014,88019,88028,88036,88053,88061,88067,88075,88080,88085,88094,88098,88102,88106,88117,88126,88136,88150,88160,88168,88176,88184,88188],{"__ignoreMap":58},[76,87755,87756,87758,87760,87762],{"class":78,"line":79},[76,87757,51367],{"class":93},[76,87759,51371],{"class":51370},[76,87761,51374],{"class":2035},[76,87763,51377],{"class":93},[76,87765,87766,87768,87770,87772,87774,87776],{"class":78,"line":86},[76,87767,1109],{"class":93},[76,87769,50705],{"class":51370},[76,87771,51386],{"class":2035},[76,87773,247],{"class":93},[76,87775,51391],{"class":305},[76,87777,51377],{"class":93},[76,87779,87780],{"class":78,"line":97},[76,87781,2472],{"emptyLinePlaceholder":125},[76,87783,87784,87786,87788],{"class":78,"line":103},[76,87785,1109],{"class":93},[76,87787,51404],{"class":51370},[76,87789,51377],{"class":93},[76,87791,87792,87794,87796,87798,87800,87802],{"class":78,"line":1273},[76,87793,52214],{"class":93},[76,87795,51414],{"class":51370},[76,87797,51417],{"class":2035},[76,87799,247],{"class":93},[76,87801,51422],{"class":305},[76,87803,51377],{"class":93},[76,87805,87806,87808,87810,87812,87814,87816,87818,87820,87822],{"class":78,"line":1287},[76,87807,52214],{"class":93},[76,87809,51414],{"class":51370},[76,87811,14992],{"class":2035},[76,87813,247],{"class":93},[76,87815,51461],{"class":305},[76,87817,51441],{"class":2035},[76,87819,247],{"class":93},[76,87821,51468],{"class":305},[76,87823,51377],{"class":93},[76,87825,87826,87828,87830,87832,87834],{"class":78,"line":1293},[76,87827,52214],{"class":93},[76,87829,51477],{"class":51370},[76,87831,51480],{"class":93},[76,87833,51477],{"class":51370},[76,87835,51377],{"class":93},[76,87837,87838,87840,87842],{"class":78,"line":1384},[76,87839,51855],{"class":93},[76,87841,51404],{"class":51370},[76,87843,51377],{"class":93},[76,87845,87846],{"class":78,"line":1390},[76,87847,2472],{"emptyLinePlaceholder":125},[76,87849,87850,87852,87854],{"class":78,"line":1402},[76,87851,1109],{"class":93},[76,87853,51870],{"class":51370},[76,87855,51377],{"class":93},[76,87857,87858,87860,87862],{"class":78,"line":1684},[76,87859,52214],{"class":93},[76,87861,51883],{"class":51370},[76,87863,51377],{"class":93},[76,87865,87866,87868,87870,87872],{"class":78,"line":1689},[76,87867,11293],{"class":89},[76,87869,70041],{"class":250},[76,87871,13636],{"class":89},[76,87873,15644],{"class":93},[76,87875,87876,87878,87881],{"class":78,"line":1695},[76,87877,71686],{"class":93},[76,87879,87880],{"class":305},"'pink'",[76,87882,31536],{"class":93},[76,87884,87885,87887,87889],{"class":78,"line":1700},[76,87886,71696],{"class":93},[76,87888,849],{"class":250},[76,87890,31536],{"class":93},[76,87892,87893,87896,87899,87901,87904],{"class":78,"line":1714},[76,87894,87895],{"class":93},"      hobby: [",[76,87897,87898],{"class":305},"'乒乓球'",[76,87900,12507],{"class":93},[76,87902,87903],{"class":305},"'足球'",[76,87905,87906],{"class":93},"],\n",[76,87908,87909],{"class":78,"line":1719},[76,87910,77942],{"class":93},[76,87912,87913,87916],{"class":78,"line":1725},[76,87914,87915],{"class":93},"        baby: ",[76,87917,87918],{"class":305},"'小pink'\n",[76,87920,87921],{"class":78,"line":1746},[76,87922,52468],{"class":93},[76,87924,87925],{"class":78,"line":1751},[76,87926,2259],{"class":93},[76,87928,87929,87931,87934,87936],{"class":78,"line":1765},[76,87930,11293],{"class":89},[76,87932,87933],{"class":250}," o",[76,87935,13636],{"class":89},[76,87937,87938],{"class":93}," {}\n",[76,87940,87941],{"class":78,"line":1770},[76,87942,87943],{"class":82},"    \u002F\u002F 拷贝函数\n",[76,87945,87946,87948,87951,87953,87956,87958,87961],{"class":78,"line":1799},[76,87947,70154],{"class":89},[76,87949,87950],{"class":2035}," deepCopy",[76,87952,202],{"class":93},[76,87954,87955],{"class":5288},"newObj",[76,87957,12507],{"class":93},[76,87959,87960],{"class":5288},"oldObj",[76,87962,12514],{"class":93},[76,87964,87965,87967,87969,87971,87974,87976],{"class":78,"line":1804},[76,87966,52354],{"class":89},[76,87968,1730],{"class":93},[76,87970,51917],{"class":89},[76,87972,87973],{"class":93}," k ",[76,87975,26116],{"class":89},[76,87977,87978],{"class":93}," oldObj) {\n",[76,87980,87981],{"class":78,"line":1821},[76,87982,87983],{"class":82},"        \u002F\u002F 处理数组的问题\n",[76,87985,87986],{"class":78,"line":1826},[76,87987,87988],{"class":82},"        \u002F\u002F 判断是否属于数组\n",[76,87990,87991],{"class":78,"line":1831},[76,87992,87993],{"class":82},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[76,87995,87996,87998,88001,88004,88007],{"class":78,"line":1836},[76,87997,2569],{"class":89},[76,87999,88000],{"class":93}," (oldObj[k] ",[76,88002,88003],{"class":89},"instanceof",[76,88005,88006],{"class":2035}," Array",[76,88008,12514],{"class":93},[76,88010,88011],{"class":78,"line":1850},[76,88012,88013],{"class":82},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[76,88015,88016],{"class":78,"line":1855},[76,88017,88018],{"class":82},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[76,88020,88021,88024,88026],{"class":78,"line":2649},[76,88022,88023],{"class":93},"          newObj[k] ",[76,88025,247],{"class":89},[76,88027,51908],{"class":93},[76,88029,88030,88033],{"class":78,"line":2663},[76,88031,88032],{"class":2035},"          deepCopy",[76,88034,88035],{"class":93},"(newObj[k], oldObj[k])\n",[76,88037,88038,88040,88042,88044,88046,88048,88051],{"class":78,"line":2671},[76,88039,80150],{"class":93},[76,88041,1773],{"class":89},[76,88043,1776],{"class":89},[76,88045,88000],{"class":93},[76,88047,88003],{"class":89},[76,88049,88050],{"class":2035}," Object",[76,88052,12514],{"class":93},[76,88054,88055,88057,88059],{"class":78,"line":2676},[76,88056,88023],{"class":93},[76,88058,247],{"class":89},[76,88060,87938],{"class":93},[76,88062,88063,88065],{"class":78,"line":2682},[76,88064,88032],{"class":2035},[76,88066,88035],{"class":93},[76,88068,88069,88071,88073],{"class":78,"line":2688},[76,88070,80150],{"class":93},[76,88072,1773],{"class":89},[76,88074,15644],{"class":93},[76,88076,88077],{"class":78,"line":2693},[76,88078,88079],{"class":82},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[76,88081,88082],{"class":78,"line":8020},[76,88083,88084],{"class":82},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[76,88086,88087,88089,88091],{"class":78,"line":8044},[76,88088,88023],{"class":93},[76,88090,247],{"class":89},[76,88092,88093],{"class":93}," oldObj[k]\n",[76,88095,88096],{"class":78,"line":8049},[76,88097,2601],{"class":93},[76,88099,88100],{"class":78,"line":8055},[76,88101,52468],{"class":93},[76,88103,88104],{"class":78,"line":8082},[76,88105,2259],{"class":93},[76,88107,88108,88111,88114],{"class":78,"line":8087},[76,88109,88110],{"class":2035},"    deepCopy",[76,88112,88113],{"class":93},"(o, obj) ",[76,88115,88116],{"class":82},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[76,88118,88119,88121,88123],{"class":78,"line":8093},[76,88120,73823],{"class":93},[76,88122,58317],{"class":2035},[76,88124,88125],{"class":93},"(o)\n",[76,88127,88128,88131,88133],{"class":78,"line":8105},[76,88129,88130],{"class":93},"    o.age ",[76,88132,247],{"class":89},[76,88134,88135],{"class":250}," 20\n",[76,88137,88138,88141,88143,88145,88147],{"class":78,"line":8117},[76,88139,88140],{"class":93},"    o.hobby[",[76,88142,392],{"class":250},[76,88144,4515],{"class":93},[76,88146,247],{"class":89},[76,88148,88149],{"class":305}," '篮球'\n",[76,88151,88152,88155,88157],{"class":78,"line":8129},[76,88153,88154],{"class":93},"    o.family ",[76,88156,247],{"class":89},[76,88158,88159],{"class":305}," '老pink'\n",[76,88161,88162,88164,88166],{"class":78,"line":9788},[76,88163,73823],{"class":93},[76,88165,58317],{"class":2035},[76,88167,70106],{"class":93},[76,88169,88170,88172,88174],{"class":78,"line":9813},[76,88171,52487],{"class":93},[76,88173,51883],{"class":51370},[76,88175,51377],{"class":93},[76,88177,88178,88180,88182],{"class":78,"line":9836},[76,88179,51855],{"class":93},[76,88181,51870],{"class":51370},[76,88183,51377],{"class":93},[76,88185,88186],{"class":78,"line":9860},[76,88187,2472],{"emptyLinePlaceholder":125},[76,88189,88190,88192,88194],{"class":78,"line":9865},[76,88191,51855],{"class":93},[76,88193,50705],{"class":51370},[76,88195,51377],{"class":93},[14,88197,88198],{},[56,88199],{"alt":58,"src":88200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22070,88202,88204,88205],{"id":88203},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[350,88206,88207],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88209,88210],{},[439,88211,88212],{"href":88212,"rel":88213},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23937],[14,88215,88216],{},"lodash里边的方法都要加上一个下划线_",[14,88218,88219],{},"_.cloneDeep()",[67,88221,88223],{"className":50703,"code":88222,"language":50705,"meta":58,"style":58},"\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",[73,88224,88225,88235,88249,88253,88261,88275,88295,88307,88315,88319,88327,88332,88351,88359,88369,88377,88385,88397,88401,88407,88411,88415,88431,88439,88448,88456,88464,88472,88476],{"__ignoreMap":58},[76,88226,88227,88229,88231,88233],{"class":78,"line":79},[76,88228,51367],{"class":93},[76,88230,51371],{"class":51370},[76,88232,51374],{"class":2035},[76,88234,51377],{"class":93},[76,88236,88237,88239,88241,88243,88245,88247],{"class":78,"line":86},[76,88238,1109],{"class":93},[76,88240,50705],{"class":51370},[76,88242,51386],{"class":2035},[76,88244,247],{"class":93},[76,88246,51391],{"class":305},[76,88248,51377],{"class":93},[76,88250,88251],{"class":78,"line":97},[76,88252,2472],{"emptyLinePlaceholder":125},[76,88254,88255,88257,88259],{"class":78,"line":103},[76,88256,1109],{"class":93},[76,88258,51404],{"class":51370},[76,88260,51377],{"class":93},[76,88262,88263,88265,88267,88269,88271,88273],{"class":78,"line":1273},[76,88264,52214],{"class":93},[76,88266,51414],{"class":51370},[76,88268,51417],{"class":2035},[76,88270,247],{"class":93},[76,88272,51422],{"class":305},[76,88274,51377],{"class":93},[76,88276,88277,88279,88281,88283,88285,88287,88289,88291,88293],{"class":78,"line":1287},[76,88278,52214],{"class":93},[76,88280,51414],{"class":51370},[76,88282,14992],{"class":2035},[76,88284,247],{"class":93},[76,88286,51461],{"class":305},[76,88288,51441],{"class":2035},[76,88290,247],{"class":93},[76,88292,51468],{"class":305},[76,88294,51377],{"class":93},[76,88296,88297,88299,88301,88303,88305],{"class":78,"line":1293},[76,88298,52214],{"class":93},[76,88300,51477],{"class":51370},[76,88302,51480],{"class":93},[76,88304,51477],{"class":51370},[76,88306,51377],{"class":93},[76,88308,88309,88311,88313],{"class":78,"line":1384},[76,88310,51855],{"class":93},[76,88312,51404],{"class":51370},[76,88314,51377],{"class":93},[76,88316,88317],{"class":78,"line":1390},[76,88318,2472],{"emptyLinePlaceholder":125},[76,88320,88321,88323,88325],{"class":78,"line":1402},[76,88322,1109],{"class":93},[76,88324,51870],{"class":51370},[76,88326,51377],{"class":93},[76,88328,88329],{"class":78,"line":1684},[76,88330,88331],{"class":82},"  \u003C!-- 先引用这个库 -->\n",[76,88333,88334,88336,88338,88340,88342,88345,88347,88349],{"class":78,"line":1689},[76,88335,52214],{"class":93},[76,88337,51883],{"class":51370},[76,88339,55309],{"class":2035},[76,88341,247],{"class":93},[76,88343,88344],{"class":305},"\"lodash.min.js\"",[76,88346,55384],{"class":93},[76,88348,51883],{"class":51370},[76,88350,51377],{"class":93},[76,88352,88353,88355,88357],{"class":78,"line":1695},[76,88354,52214],{"class":93},[76,88356,51883],{"class":51370},[76,88358,51377],{"class":93},[76,88360,88361,88363,88365,88367],{"class":78,"line":1700},[76,88362,11293],{"class":89},[76,88364,70041],{"class":250},[76,88366,13636],{"class":89},[76,88368,15644],{"class":93},[76,88370,88371,88373,88375],{"class":78,"line":1714},[76,88372,71686],{"class":93},[76,88374,87880],{"class":305},[76,88376,31536],{"class":93},[76,88378,88379,88381,88383],{"class":78,"line":1719},[76,88380,71696],{"class":93},[76,88382,849],{"class":250},[76,88384,31536],{"class":93},[76,88386,88387,88389,88391,88393,88395],{"class":78,"line":1725},[76,88388,87895],{"class":93},[76,88390,87898],{"class":305},[76,88392,12507],{"class":93},[76,88394,87903],{"class":305},[76,88396,87906],{"class":93},[76,88398,88399],{"class":78,"line":1746},[76,88400,77942],{"class":93},[76,88402,88403,88405],{"class":78,"line":1751},[76,88404,87915],{"class":93},[76,88406,87918],{"class":305},[76,88408,88409],{"class":78,"line":1765},[76,88410,52468],{"class":93},[76,88412,88413],{"class":78,"line":1770},[76,88414,2259],{"class":93},[76,88416,88417,88419,88421,88423,88426,88429],{"class":78,"line":1799},[76,88418,11293],{"class":89},[76,88420,87933],{"class":250},[76,88422,13636],{"class":89},[76,88424,88425],{"class":93}," _.",[76,88427,88428],{"class":2035},"cloneDeep",[76,88430,70106],{"class":93},[76,88432,88433,88435,88437],{"class":78,"line":1804},[76,88434,73823],{"class":93},[76,88436,58317],{"class":2035},[76,88438,88125],{"class":93},[76,88440,88441,88444,88446],{"class":78,"line":1821},[76,88442,88443],{"class":93},"    o.family.baby ",[76,88445,247],{"class":89},[76,88447,88159],{"class":305},[76,88449,88450,88452,88454],{"class":78,"line":1826},[76,88451,73823],{"class":93},[76,88453,58317],{"class":2035},[76,88455,70106],{"class":93},[76,88457,88458,88460,88462],{"class":78,"line":1831},[76,88459,52487],{"class":93},[76,88461,51883],{"class":51370},[76,88463,51377],{"class":93},[76,88465,88466,88468,88470],{"class":78,"line":1836},[76,88467,51855],{"class":93},[76,88469,51870],{"class":51370},[76,88471,51377],{"class":93},[76,88473,88474],{"class":78,"line":1850},[76,88475,2472],{"emptyLinePlaceholder":125},[76,88477,88478,88480,88482],{"class":78,"line":1855},[76,88479,51855],{"class":93},[76,88481,50705],{"class":51370},[76,88483,51377],{"class":93},[14,88485,88486],{},[56,88487],{"alt":58,"src":88488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22070,88490,88492],{"id":88491},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[67,88494,88496],{"className":50703,"code":88495,"language":50705,"meta":58,"style":58},"\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",[73,88497,88498,88508,88522,88526,88534,88548,88568,88580,88588,88592,88600,88608,88618,88626,88634,88646,88650,88656,88660,88664,88669,88674,88679,88705,88713,88722,88730,88738,88746,88750],{"__ignoreMap":58},[76,88499,88500,88502,88504,88506],{"class":78,"line":79},[76,88501,51367],{"class":93},[76,88503,51371],{"class":51370},[76,88505,51374],{"class":2035},[76,88507,51377],{"class":93},[76,88509,88510,88512,88514,88516,88518,88520],{"class":78,"line":86},[76,88511,1109],{"class":93},[76,88513,50705],{"class":51370},[76,88515,51386],{"class":2035},[76,88517,247],{"class":93},[76,88519,51391],{"class":305},[76,88521,51377],{"class":93},[76,88523,88524],{"class":78,"line":97},[76,88525,2472],{"emptyLinePlaceholder":125},[76,88527,88528,88530,88532],{"class":78,"line":103},[76,88529,1109],{"class":93},[76,88531,51404],{"class":51370},[76,88533,51377],{"class":93},[76,88535,88536,88538,88540,88542,88544,88546],{"class":78,"line":1273},[76,88537,52214],{"class":93},[76,88539,51414],{"class":51370},[76,88541,51417],{"class":2035},[76,88543,247],{"class":93},[76,88545,51422],{"class":305},[76,88547,51377],{"class":93},[76,88549,88550,88552,88554,88556,88558,88560,88562,88564,88566],{"class":78,"line":1287},[76,88551,52214],{"class":93},[76,88553,51414],{"class":51370},[76,88555,14992],{"class":2035},[76,88557,247],{"class":93},[76,88559,51461],{"class":305},[76,88561,51441],{"class":2035},[76,88563,247],{"class":93},[76,88565,51468],{"class":305},[76,88567,51377],{"class":93},[76,88569,88570,88572,88574,88576,88578],{"class":78,"line":1293},[76,88571,52214],{"class":93},[76,88573,51477],{"class":51370},[76,88575,51480],{"class":93},[76,88577,51477],{"class":51370},[76,88579,51377],{"class":93},[76,88581,88582,88584,88586],{"class":78,"line":1384},[76,88583,51855],{"class":93},[76,88585,51404],{"class":51370},[76,88587,51377],{"class":93},[76,88589,88590],{"class":78,"line":1390},[76,88591,2472],{"emptyLinePlaceholder":125},[76,88593,88594,88596,88598],{"class":78,"line":1402},[76,88595,1109],{"class":93},[76,88597,51870],{"class":51370},[76,88599,51377],{"class":93},[76,88601,88602,88604,88606],{"class":78,"line":1684},[76,88603,52214],{"class":93},[76,88605,51883],{"class":51370},[76,88607,51377],{"class":93},[76,88609,88610,88612,88614,88616],{"class":78,"line":1689},[76,88611,11293],{"class":89},[76,88613,70041],{"class":250},[76,88615,13636],{"class":89},[76,88617,15644],{"class":93},[76,88619,88620,88622,88624],{"class":78,"line":1695},[76,88621,71686],{"class":93},[76,88623,87880],{"class":305},[76,88625,31536],{"class":93},[76,88627,88628,88630,88632],{"class":78,"line":1700},[76,88629,71696],{"class":93},[76,88631,849],{"class":250},[76,88633,31536],{"class":93},[76,88635,88636,88638,88640,88642,88644],{"class":78,"line":1714},[76,88637,87895],{"class":93},[76,88639,87898],{"class":305},[76,88641,12507],{"class":93},[76,88643,87903],{"class":305},[76,88645,87906],{"class":93},[76,88647,88648],{"class":78,"line":1719},[76,88649,77942],{"class":93},[76,88651,88652,88654],{"class":78,"line":1725},[76,88653,87915],{"class":93},[76,88655,87918],{"class":305},[76,88657,88658],{"class":78,"line":1746},[76,88659,52468],{"class":93},[76,88661,88662],{"class":78,"line":1751},[76,88663,2259],{"class":93},[76,88665,88666],{"class":78,"line":1765},[76,88667,88668],{"class":82},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[76,88670,88671],{"class":78,"line":1770},[76,88672,88673],{"class":82},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[76,88675,88676],{"class":78,"line":1799},[76,88677,88678],{"class":82},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[76,88680,88681,88683,88685,88687,88690,88692,88695,88697,88699,88701,88703],{"class":78,"line":1804},[76,88682,11293],{"class":89},[76,88684,87933],{"class":250},[76,88686,13636],{"class":89},[76,88688,88689],{"class":250}," JSON",[76,88691,757],{"class":93},[76,88693,88694],{"class":2035},"parse",[76,88696,202],{"class":93},[76,88698,71734],{"class":250},[76,88700,757],{"class":93},[76,88702,71739],{"class":2035},[76,88704,71742],{"class":93},[76,88706,88707,88709,88711],{"class":78,"line":1821},[76,88708,73823],{"class":93},[76,88710,58317],{"class":2035},[76,88712,88125],{"class":93},[76,88714,88715,88717,88719],{"class":78,"line":1826},[76,88716,88443],{"class":93},[76,88718,247],{"class":89},[76,88720,88721],{"class":305}," '123'\n",[76,88723,88724,88726,88728],{"class":78,"line":1831},[76,88725,73823],{"class":93},[76,88727,58317],{"class":2035},[76,88729,70106],{"class":93},[76,88731,88732,88734,88736],{"class":78,"line":1836},[76,88733,52487],{"class":93},[76,88735,51883],{"class":51370},[76,88737,51377],{"class":93},[76,88739,88740,88742,88744],{"class":78,"line":1850},[76,88741,51855],{"class":93},[76,88743,51870],{"class":51370},[76,88745,51377],{"class":93},[76,88747,88748],{"class":78,"line":1855},[76,88749,2472],{"emptyLinePlaceholder":125},[76,88751,88752,88754,88756],{"class":78,"line":2649},[76,88753,51855],{"class":93},[76,88755,50705],{"class":51370},[76,88757,51377],{"class":93},[14,88759,88760],{},[56,88761],{"alt":58,"src":88762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[140,88764,88766],{"id":88765},"_415-异常处理","4.15 异常处理",[152,88768,88769],{},[155,88770,88771],{},"throw抛异常",[14,88773,88774],{},[56,88775],{"alt":58,"src":88776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[152,88778,88779],{"start":86},[155,88780,88781],{},"try\u002Fcatch 捕获错误信息",[14,88783,88784],{},[56,88785],{"alt":58,"src":88786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[67,88788,88790],{"className":50703,"code":88789,"language":50705,"meta":58,"style":58},"\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",[73,88791,88792,88802,88816,88820,88828,88842,88862,88874,88882,88886,88894,88906,88914,88923,88930,88935,88954,88963,88974,88979,88989,88994,88999,89004,89021,89025,89030,89037,89049,89053,89065,89069,89073,89078,89083,89090,89098,89106,89110],{"__ignoreMap":58},[76,88793,88794,88796,88798,88800],{"class":78,"line":79},[76,88795,51367],{"class":93},[76,88797,51371],{"class":51370},[76,88799,51374],{"class":2035},[76,88801,51377],{"class":93},[76,88803,88804,88806,88808,88810,88812,88814],{"class":78,"line":86},[76,88805,1109],{"class":93},[76,88807,50705],{"class":51370},[76,88809,51386],{"class":2035},[76,88811,247],{"class":93},[76,88813,51391],{"class":305},[76,88815,51377],{"class":93},[76,88817,88818],{"class":78,"line":97},[76,88819,2472],{"emptyLinePlaceholder":125},[76,88821,88822,88824,88826],{"class":78,"line":103},[76,88823,1109],{"class":93},[76,88825,51404],{"class":51370},[76,88827,51377],{"class":93},[76,88829,88830,88832,88834,88836,88838,88840],{"class":78,"line":1273},[76,88831,52214],{"class":93},[76,88833,51414],{"class":51370},[76,88835,51417],{"class":2035},[76,88837,247],{"class":93},[76,88839,51422],{"class":305},[76,88841,51377],{"class":93},[76,88843,88844,88846,88848,88850,88852,88854,88856,88858,88860],{"class":78,"line":1287},[76,88845,52214],{"class":93},[76,88847,51414],{"class":51370},[76,88849,14992],{"class":2035},[76,88851,247],{"class":93},[76,88853,51461],{"class":305},[76,88855,51441],{"class":2035},[76,88857,247],{"class":93},[76,88859,51468],{"class":305},[76,88861,51377],{"class":93},[76,88863,88864,88866,88868,88870,88872],{"class":78,"line":1293},[76,88865,52214],{"class":93},[76,88867,51477],{"class":51370},[76,88869,51480],{"class":93},[76,88871,51477],{"class":51370},[76,88873,51377],{"class":93},[76,88875,88876,88878,88880],{"class":78,"line":1384},[76,88877,51855],{"class":93},[76,88879,51404],{"class":51370},[76,88881,51377],{"class":93},[76,88883,88884],{"class":78,"line":1390},[76,88885,2472],{"emptyLinePlaceholder":125},[76,88887,88888,88890,88892],{"class":78,"line":1402},[76,88889,1109],{"class":93},[76,88891,51870],{"class":51370},[76,88893,51377],{"class":93},[76,88895,88896,88898,88900,88902,88904],{"class":78,"line":1684},[76,88897,52214],{"class":93},[76,88899,14],{"class":51370},[76,88901,53564],{"class":93},[76,88903,14],{"class":51370},[76,88905,51377],{"class":93},[76,88907,88908,88910,88912],{"class":78,"line":1689},[76,88909,52214],{"class":93},[76,88911,51883],{"class":51370},[76,88913,51377],{"class":93},[76,88915,88916,88918,88921],{"class":78,"line":1695},[76,88917,70154],{"class":89},[76,88919,88920],{"class":2035}," fn",[76,88922,10925],{"class":93},[76,88924,88925,88928],{"class":78,"line":1700},[76,88926,88927],{"class":89},"      try",[76,88929,15644],{"class":93},[76,88931,88932],{"class":78,"line":1714},[76,88933,88934],{"class":82},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[76,88936,88937,88939,88941,88943,88945,88947,88949,88952],{"class":78,"line":1719},[76,88938,61340],{"class":89},[76,88940,6897],{"class":250},[76,88942,13636],{"class":89},[76,88944,54466],{"class":93},[76,88946,54469],{"class":2035},[76,88948,202],{"class":93},[76,88950,88951],{"class":305},"'.p'",[76,88953,208],{"class":93},[76,88955,88956,88959,88961],{"class":78,"line":1725},[76,88957,88958],{"class":93},"        p.style.color ",[76,88960,247],{"class":89},[76,88962,67121],{"class":305},[76,88964,88965,88968,88971],{"class":78,"line":1746},[76,88966,88967],{"class":93},"      } ",[76,88969,88970],{"class":89},"catch",[76,88972,88973],{"class":93}," (err) {\n",[76,88975,88976],{"class":78,"line":1751},[76,88977,88978],{"class":82},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[76,88980,88981,88984,88986],{"class":78,"line":1765},[76,88982,88983],{"class":93},"        console.",[76,88985,58317],{"class":2035},[76,88987,88988],{"class":93},"(err.message)\n",[76,88990,88991],{"class":78,"line":1770},[76,88992,88993],{"class":82},"        \u002F\u002F 想要中断程序，需要加return\n",[76,88995,88996],{"class":78,"line":1799},[76,88997,88998],{"class":82},"        \u002F\u002F return\n",[76,89000,89001],{"class":78,"line":1804},[76,89002,89003],{"class":82},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[76,89005,89006,89009,89011,89014,89016,89019],{"class":78,"line":1821},[76,89007,89008],{"class":89},"        throw",[76,89010,11650],{"class":89},[76,89012,89013],{"class":2035}," Error",[76,89015,202],{"class":93},[76,89017,89018],{"class":305},"'你看看，选择器错误了吧'",[76,89020,208],{"class":93},[76,89022,89023],{"class":78,"line":1826},[76,89024,52468],{"class":93},[76,89026,89027],{"class":78,"line":1831},[76,89028,89029],{"class":82},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[76,89031,89032,89035],{"class":78,"line":1836},[76,89033,89034],{"class":89},"      finally",[76,89036,15644],{"class":93},[76,89038,89039,89042,89044,89047],{"class":78,"line":1850},[76,89040,89041],{"class":2035},"        alert",[76,89043,202],{"class":93},[76,89045,89046],{"class":305},"'弹出对话框'",[76,89048,208],{"class":93},[76,89050,89051],{"class":78,"line":1855},[76,89052,52468],{"class":93},[76,89054,89055,89057,89059,89061,89063],{"class":78,"line":2649},[76,89056,58314],{"class":93},[76,89058,58317],{"class":2035},[76,89060,202],{"class":93},[76,89062,672],{"class":250},[76,89064,208],{"class":93},[76,89066,89067],{"class":78,"line":2663},[76,89068,2472],{"emptyLinePlaceholder":125},[76,89070,89071],{"class":78,"line":2671},[76,89072,2259],{"class":93},[76,89074,89075],{"class":78,"line":2676},[76,89076,89077],{"class":82},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[76,89079,89080],{"class":78,"line":2682},[76,89081,89082],{"class":82},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[76,89084,89085,89088],{"class":78,"line":2688},[76,89086,89087],{"class":2035},"    fn",[76,89089,2048],{"class":93},[76,89091,89092,89094,89096],{"class":78,"line":2693},[76,89093,52487],{"class":93},[76,89095,51883],{"class":51370},[76,89097,51377],{"class":93},[76,89099,89100,89102,89104],{"class":78,"line":8020},[76,89101,51855],{"class":93},[76,89103,51870],{"class":51370},[76,89105,51377],{"class":93},[76,89107,89108],{"class":78,"line":8044},[76,89109,2472],{"emptyLinePlaceholder":125},[76,89111,89112,89114,89116],{"class":78,"line":8049},[76,89113,51855],{"class":93},[76,89115,50705],{"class":51370},[76,89117,51377],{"class":93},[14,89119,89120],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[152,89122,89123],{"start":97},[155,89124,89125],{},"debugger",[14,89127,89128],{},[56,89129],{"alt":58,"src":89130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89132,89133],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[140,89135,89137],{"id":89136},"_416-处理this","4.16 处理this",[169,89139,89141],{"id":89140},"_4161-this的指向","4.16.1 this的指向",[152,89143,89144],{},[155,89145,89146],{},"普通函数的this",[14,89148,89149],{},[56,89150],{"alt":58,"src":89151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[152,89153,89154],{"start":86},[155,89155,89156],{},"箭头函数的this",[14,89158,89159],{},[56,89160],{"alt":58,"src":89161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89163,89164],{},[56,89165],{"alt":58,"src":89166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89168,89169],{},[56,89170],{"alt":58,"src":89171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[169,89173,89175],{"id":89174},"_4162-this的改变","4.16.2 this的改变",[14,89177,89178],{},"call() apply() bind()",[152,89180,89181],{},[155,89182,89183],{},"call()",[14,89185,89186],{},[56,89187],{"alt":58,"src":89188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89190,89191],{},"两个作用：①调用函数；②改变this指向",[67,89193,89195],{"className":53137,"code":89194,"language":53139,"meta":58,"style":58},"\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",[73,89196,89197,89205,89213,89217,89222,89226,89231,89236,89241,89245,89250,89258],{"__ignoreMap":58},[76,89198,89199,89201,89203],{"class":78,"line":79},[76,89200,1109],{"class":93},[76,89202,51870],{"class":51370},[76,89204,51377],{"class":93},[76,89206,89207,89209,89211],{"class":78,"line":86},[76,89208,52214],{"class":93},[76,89210,51883],{"class":51370},[76,89212,51377],{"class":93},[76,89214,89215],{"class":78,"line":97},[76,89216,71593],{"class":93},[76,89218,89219],{"class":78,"line":103},[76,89220,89221],{"class":93},"      uname: 'pink'\n",[76,89223,89224],{"class":78,"line":1273},[76,89225,2259],{"class":93},[76,89227,89228],{"class":78,"line":1287},[76,89229,89230],{"class":93},"    function fn(x, y) {\n",[76,89232,89233],{"class":78,"line":1293},[76,89234,89235],{"class":93},"      console.log(this)  \u002F\u002Fwindow\n",[76,89237,89238],{"class":78,"line":1384},[76,89239,89240],{"class":93},"      console.log(x + y)\n",[76,89242,89243],{"class":78,"line":1390},[76,89244,2259],{"class":93},[76,89246,89247],{"class":78,"line":1402},[76,89248,89249],{"class":93},"    fn.call(obj, 1, 2)\n",[76,89251,89252,89254,89256],{"class":78,"line":1684},[76,89253,52487],{"class":93},[76,89255,51883],{"class":51370},[76,89257,51377],{"class":93},[76,89259,89260,89262,89264],{"class":78,"line":1689},[76,89261,51855],{"class":93},[76,89263,51870],{"class":51370},[76,89265,51377],{"class":93},[14,89267,89268],{},[56,89269],{"alt":58,"src":89270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[152,89272,89273],{"start":86},[155,89274,89275],{},"apply()",[14,89277,89278],{},[56,89279],{"alt":58,"src":89280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89282,89191],{},[14,89284,89285],{},"call传递的是普通参数，而apply必须传递的是数组",[67,89287,89289],{"className":50703,"code":89288,"language":50705,"meta":58,"style":58},"\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",[73,89290,89291,89301,89315,89319,89327,89341,89361,89373,89381,89385,89393,89401,89411,89418,89422,89427,89443,89455,89469,89473,89478,89497,89502,89506,89511,89516,89524,89529,89551,89556,89572,89588,89600,89604,89609,89628,89636,89644,89648],{"__ignoreMap":58},[76,89292,89293,89295,89297,89299],{"class":78,"line":79},[76,89294,51367],{"class":93},[76,89296,51371],{"class":51370},[76,89298,51374],{"class":2035},[76,89300,51377],{"class":93},[76,89302,89303,89305,89307,89309,89311,89313],{"class":78,"line":86},[76,89304,1109],{"class":93},[76,89306,50705],{"class":51370},[76,89308,51386],{"class":2035},[76,89310,247],{"class":93},[76,89312,51391],{"class":305},[76,89314,51377],{"class":93},[76,89316,89317],{"class":78,"line":97},[76,89318,2472],{"emptyLinePlaceholder":125},[76,89320,89321,89323,89325],{"class":78,"line":103},[76,89322,1109],{"class":93},[76,89324,51404],{"class":51370},[76,89326,51377],{"class":93},[76,89328,89329,89331,89333,89335,89337,89339],{"class":78,"line":1273},[76,89330,52214],{"class":93},[76,89332,51414],{"class":51370},[76,89334,51417],{"class":2035},[76,89336,247],{"class":93},[76,89338,51422],{"class":305},[76,89340,51377],{"class":93},[76,89342,89343,89345,89347,89349,89351,89353,89355,89357,89359],{"class":78,"line":1287},[76,89344,52214],{"class":93},[76,89346,51414],{"class":51370},[76,89348,14992],{"class":2035},[76,89350,247],{"class":93},[76,89352,51461],{"class":305},[76,89354,51441],{"class":2035},[76,89356,247],{"class":93},[76,89358,51468],{"class":305},[76,89360,51377],{"class":93},[76,89362,89363,89365,89367,89369,89371],{"class":78,"line":1293},[76,89364,52214],{"class":93},[76,89366,51477],{"class":51370},[76,89368,51480],{"class":93},[76,89370,51477],{"class":51370},[76,89372,51377],{"class":93},[76,89374,89375,89377,89379],{"class":78,"line":1384},[76,89376,51855],{"class":93},[76,89378,51404],{"class":51370},[76,89380,51377],{"class":93},[76,89382,89383],{"class":78,"line":1390},[76,89384,2472],{"emptyLinePlaceholder":125},[76,89386,89387,89389,89391],{"class":78,"line":1402},[76,89388,1109],{"class":93},[76,89390,51870],{"class":51370},[76,89392,51377],{"class":93},[76,89394,89395,89397,89399],{"class":78,"line":1684},[76,89396,52214],{"class":93},[76,89398,51883],{"class":51370},[76,89400,51377],{"class":93},[76,89402,89403,89405,89407,89409],{"class":78,"line":1689},[76,89404,11293],{"class":89},[76,89406,70041],{"class":250},[76,89408,13636],{"class":89},[76,89410,15644],{"class":93},[76,89412,89413,89415],{"class":78,"line":1695},[76,89414,71696],{"class":93},[76,89416,89417],{"class":250},"18\n",[76,89419,89420],{"class":78,"line":1700},[76,89421,2259],{"class":93},[76,89423,89424],{"class":78,"line":1714},[76,89425,89426],{"class":82},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[76,89428,89429,89431,89433,89435,89437,89439,89441],{"class":78,"line":1719},[76,89430,70154],{"class":89},[76,89432,88920],{"class":2035},[76,89434,202],{"class":93},[76,89436,1019],{"class":5288},[76,89438,12507],{"class":93},[76,89440,1044],{"class":5288},[76,89442,12514],{"class":93},[76,89444,89445,89447,89449,89451,89453],{"class":78,"line":1725},[76,89446,58314],{"class":93},[76,89448,58317],{"class":2035},[76,89450,202],{"class":93},[76,89452,87063],{"class":250},[76,89454,208],{"class":93},[76,89456,89457,89459,89461,89464,89466],{"class":78,"line":1746},[76,89458,58314],{"class":93},[76,89460,58317],{"class":2035},[76,89462,89463],{"class":93},"(x ",[76,89465,681],{"class":89},[76,89467,89468],{"class":93}," y)\n",[76,89470,89471],{"class":78,"line":1751},[76,89472,2259],{"class":93},[76,89474,89475],{"class":78,"line":1765},[76,89476,89477],{"class":82},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[76,89479,89480,89483,89486,89489,89491,89493,89495],{"class":78,"line":1770},[76,89481,89482],{"class":93},"    fn.",[76,89484,89485],{"class":2035},"apply",[76,89487,89488],{"class":93},"(obj, [",[76,89490,418],{"class":250},[76,89492,12507],{"class":93},[76,89494,278],{"class":250},[76,89496,4729],{"class":93},[76,89498,89499],{"class":78,"line":1799},[76,89500,89501],{"class":82},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[76,89503,89504],{"class":78,"line":1804},[76,89505,2472],{"emptyLinePlaceholder":125},[76,89507,89508],{"class":78,"line":1821},[76,89509,89510],{"class":82},"    \u002F\u002F 使用场景：求数组最大值\n",[76,89512,89513],{"class":78,"line":1826},[76,89514,89515],{"class":82},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[76,89517,89518,89521],{"class":78,"line":1831},[76,89519,89520],{"class":82},"    \u002F\u002F console.log(max)",[76,89522,89523],{"class":82},"   \u002F\u002F3\n",[76,89525,89526],{"class":78,"line":1836},[76,89527,89528],{"class":82},"    \u002F\u002F 指向空或者Math都是可以的\n",[76,89530,89531,89533,89535,89537,89539,89541,89543,89545,89547,89549],{"class":78,"line":1850},[76,89532,11293],{"class":89},[76,89534,57765],{"class":250},[76,89536,13636],{"class":89},[76,89538,52296],{"class":93},[76,89540,512],{"class":250},[76,89542,12507],{"class":93},[76,89544,704],{"class":250},[76,89546,12507],{"class":93},[76,89548,734],{"class":250},[76,89550,33316],{"class":93},[76,89552,89553],{"class":78,"line":1855},[76,89554,89555],{"class":82},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[76,89557,89558,89560,89562,89564,89567,89569],{"class":78,"line":2649},[76,89559,11293],{"class":89},[76,89561,6023],{"class":250},[76,89563,13636],{"class":89},[76,89565,89566],{"class":93}," Math.max.",[76,89568,89485],{"class":2035},[76,89570,89571],{"class":93},"(Math, arr)\n",[76,89573,89574,89576,89579,89581,89584,89586],{"class":78,"line":2663},[76,89575,11293],{"class":89},[76,89577,89578],{"class":250}," min",[76,89580,13636],{"class":89},[76,89582,89583],{"class":93}," Math.min.",[76,89585,89485],{"class":2035},[76,89587,89571],{"class":93},[76,89589,89590,89592,89594,89597],{"class":78,"line":2671},[76,89591,73823],{"class":93},[76,89593,58317],{"class":2035},[76,89595,89596],{"class":93},"(max, min)     ",[76,89598,89599],{"class":82},"\u002F\u002F100,4\n",[76,89601,89602],{"class":78,"line":2676},[76,89603,2472],{"emptyLinePlaceholder":125},[76,89605,89606],{"class":78,"line":2682},[76,89607,89608],{"class":82},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[76,89610,89611,89613,89615,89618,89620,89622,89625],{"class":78,"line":2688},[76,89612,73823],{"class":93},[76,89614,58317],{"class":2035},[76,89616,89617],{"class":93},"(Max.",[76,89619,6087],{"class":2035},[76,89621,202],{"class":93},[76,89623,89624],{"class":89},"...",[76,89626,89627],{"class":93},"arr))\n",[76,89629,89630,89632,89634],{"class":78,"line":2693},[76,89631,52487],{"class":93},[76,89633,51883],{"class":51370},[76,89635,51377],{"class":93},[76,89637,89638,89640,89642],{"class":78,"line":8020},[76,89639,51855],{"class":93},[76,89641,51870],{"class":51370},[76,89643,51377],{"class":93},[76,89645,89646],{"class":78,"line":8044},[76,89647,2472],{"emptyLinePlaceholder":125},[76,89649,89650,89652,89654],{"class":78,"line":8049},[76,89651,51855],{"class":93},[76,89653,50705],{"class":51370},[76,89655,51377],{"class":93},[14,89657,89658],{},[56,89659],{"alt":58,"src":89660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[152,89662,89663],{"start":97},[155,89664,89665],{},"bind()",[14,89667,89668],{},[56,89669],{"alt":58,"src":89670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89672,89673],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89675,89676],{},"bind的语法跟call很相似",[67,89678,89680],{"className":53137,"code":89679,"language":53139,"meta":58,"style":58},"\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",[73,89681,89682,89690,89698,89702,89707,89711,89715,89720,89724,89729,89734,89739,89744,89749,89754,89759,89763,89771],{"__ignoreMap":58},[76,89683,89684,89686,89688],{"class":78,"line":79},[76,89685,1109],{"class":93},[76,89687,51870],{"class":51370},[76,89689,51377],{"class":93},[76,89691,89692,89694,89696],{"class":78,"line":86},[76,89693,52214],{"class":93},[76,89695,51883],{"class":51370},[76,89697,51377],{"class":93},[76,89699,89700],{"class":78,"line":97},[76,89701,71593],{"class":93},[76,89703,89704],{"class":78,"line":103},[76,89705,89706],{"class":93},"      age: 18\n",[76,89708,89709],{"class":78,"line":1273},[76,89710,2259],{"class":93},[76,89712,89713],{"class":78,"line":1287},[76,89714,77213],{"class":93},[76,89716,89717],{"class":78,"line":1293},[76,89718,89719],{"class":93},"      console.log(this)\n",[76,89721,89722],{"class":78,"line":1384},[76,89723,2259],{"class":93},[76,89725,89726],{"class":78,"line":1390},[76,89727,89728],{"class":93},"    \u002F\u002F 1.bind 不会调用函数\n",[76,89730,89731],{"class":78,"line":1402},[76,89732,89733],{"class":93},"    \u002F\u002F 2.bind能改变this的指向\n",[76,89735,89736],{"class":78,"line":1684},[76,89737,89738],{"class":93},"    fn.bind()\n",[76,89740,89741],{"class":78,"line":1689},[76,89742,89743],{"class":93},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[76,89745,89746],{"class":78,"line":1695},[76,89747,89748],{"class":93},"    const fun = fn.bind(obj)\n",[76,89750,89751],{"class":78,"line":1700},[76,89752,89753],{"class":93},"    \u002F\u002F console.log(fun)\n",[76,89755,89756],{"class":78,"line":1714},[76,89757,89758],{"class":93},"    \u002F\u002F 调用,查看this的指向\n",[76,89760,89761],{"class":78,"line":1719},[76,89762,52721],{"class":93},[76,89764,89765,89767,89769],{"class":78,"line":1725},[76,89766,52487],{"class":93},[76,89768,51883],{"class":51370},[76,89770,51377],{"class":93},[76,89772,89773,89775,89777],{"class":78,"line":1746},[76,89774,51855],{"class":93},[76,89776,51870],{"class":51370},[76,89778,51377],{"class":93},[14,89780,89781],{},[56,89782],{"alt":58,"src":89783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[152,89785,89786],{"start":103},[155,89787,89788],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[67,89790,89792],{"className":53137,"code":89791,"language":53139,"meta":58,"style":58},"\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",[73,89793,89794,89802,89815,89823,89828,89832,89837,89842,89847,89852,89857,89862,89867,89872,89876,89884],{"__ignoreMap":58},[76,89795,89796,89798,89800],{"class":78,"line":79},[76,89797,1109],{"class":93},[76,89799,51870],{"class":51370},[76,89801,51377],{"class":93},[76,89803,89804,89806,89808,89811,89813],{"class":78,"line":86},[76,89805,52214],{"class":93},[76,89807,53957],{"class":51370},[76,89809,89810],{"class":93},">禁用\u003C\u002F",[76,89812,53957],{"class":51370},[76,89814,51377],{"class":93},[76,89816,89817,89819,89821],{"class":78,"line":97},[76,89818,52214],{"class":93},[76,89820,51883],{"class":51370},[76,89822,51377],{"class":93},[76,89824,89825],{"class":78,"line":103},[76,89826,89827],{"class":93},"    const btn = document.querySelector('button')\n",[76,89829,89830],{"class":78,"line":1273},[76,89831,59086],{"class":93},[76,89833,89834],{"class":78,"line":1287},[76,89835,89836],{"class":93},"      this.disabled = true\n",[76,89838,89839],{"class":78,"line":1293},[76,89840,89841],{"class":93},"      \u002F\u002F 定时器是window进行调用的\n",[76,89843,89844],{"class":78,"line":1384},[76,89845,89846],{"class":93},"      setTimeout(function () {\n",[76,89848,89849],{"class":78,"line":1390},[76,89850,89851],{"class":93},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[76,89853,89854],{"class":78,"line":1402},[76,89855,89856],{"class":93},"        this.disabled = false\n",[76,89858,89859],{"class":78,"line":1684},[76,89860,89861],{"class":93},"      }.bind(this), 2000)\n",[76,89863,89864],{"class":78,"line":1689},[76,89865,89866],{"class":93},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[76,89868,89869],{"class":78,"line":1695},[76,89870,89871],{"class":93},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[76,89873,89874],{"class":78,"line":1700},[76,89875,33531],{"class":93},[76,89877,89878,89880,89882],{"class":78,"line":1714},[76,89879,52487],{"class":93},[76,89881,51883],{"class":51370},[76,89883,51377],{"class":93},[76,89885,89886,89888,89890],{"class":78,"line":1719},[76,89887,51855],{"class":93},[76,89889,51870],{"class":51370},[76,89891,51377],{"class":93},[152,89893,89894],{"start":1273},[155,89895,22025],{},[14,89897,89898],{},[56,89899],{"alt":58,"src":89900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[140,89902,89904],{"id":89903},"_417-性能优化","4.17 性能优化",[169,89906,89908],{"id":89907},"_4171-防抖","4.17.1 防抖",[14,89910,89911],{},[56,89912],{"alt":58,"src":89913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89915,89916],{},[350,89917,89918],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89920,89921],{},"防抖实现方式：",[1206,89923,89924],{},[155,89925,89926],{},"lodash 提供了防抖处理",[14,89928,89929],{},"_.debounce(func,[wait=0],[options={}])",[14,89931,89932],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[67,89934,89936],{"className":50703,"code":89935,"language":50705,"meta":58,"style":58},"\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",[73,89937,89938,89948,89962,89966,89974,89988,90008,90020,90028,90034,90044,90056,90068,90079,90091,90101,90111,90124,90128,90136,90144,90148,90156,90174,90192,90200,90219,90229,90238,90249,90254,90258,90263,90268,90273,90298,90306,90314,90318],{"__ignoreMap":58},[76,89939,89940,89942,89944,89946],{"class":78,"line":79},[76,89941,51367],{"class":93},[76,89943,51371],{"class":51370},[76,89945,51374],{"class":2035},[76,89947,51377],{"class":93},[76,89949,89950,89952,89954,89956,89958,89960],{"class":78,"line":86},[76,89951,1109],{"class":93},[76,89953,50705],{"class":51370},[76,89955,51386],{"class":2035},[76,89957,247],{"class":93},[76,89959,51391],{"class":305},[76,89961,51377],{"class":93},[76,89963,89964],{"class":78,"line":97},[76,89965,2472],{"emptyLinePlaceholder":125},[76,89967,89968,89970,89972],{"class":78,"line":103},[76,89969,1109],{"class":93},[76,89971,51404],{"class":51370},[76,89973,51377],{"class":93},[76,89975,89976,89978,89980,89982,89984,89986],{"class":78,"line":1273},[76,89977,52214],{"class":93},[76,89979,51414],{"class":51370},[76,89981,51417],{"class":2035},[76,89983,247],{"class":93},[76,89985,51422],{"class":305},[76,89987,51377],{"class":93},[76,89989,89990,89992,89994,89996,89998,90000,90002,90004,90006],{"class":78,"line":1287},[76,89991,52214],{"class":93},[76,89993,51414],{"class":51370},[76,89995,14992],{"class":2035},[76,89997,247],{"class":93},[76,89999,51461],{"class":305},[76,90001,51441],{"class":2035},[76,90003,247],{"class":93},[76,90005,51468],{"class":305},[76,90007,51377],{"class":93},[76,90009,90010,90012,90014,90016,90018],{"class":78,"line":1293},[76,90011,52214],{"class":93},[76,90013,51477],{"class":51370},[76,90015,51480],{"class":93},[76,90017,51477],{"class":51370},[76,90019,51377],{"class":93},[76,90021,90022,90024,90026],{"class":78,"line":1384},[76,90023,52214],{"class":93},[76,90025,117],{"class":51370},[76,90027,51377],{"class":93},[76,90029,90030,90032],{"class":78,"line":1390},[76,90031,54822],{"class":2035},[76,90033,15644],{"class":93},[76,90035,90036,90038,90040,90042],{"class":78,"line":1402},[76,90037,72666],{"class":250},[76,90039,51507],{"class":93},[76,90041,60575],{"class":250},[76,90043,1363],{"class":93},[76,90045,90046,90048,90050,90052,90054],{"class":78,"line":1684},[76,90047,54841],{"class":250},[76,90049,51507],{"class":93},[76,90051,1794],{"class":250},[76,90053,51562],{"class":89},[76,90055,1363],{"class":93},[76,90057,90058,90060,90062,90064,90066],{"class":78,"line":1689},[76,90059,54855],{"class":250},[76,90061,51507],{"class":93},[76,90063,1794],{"class":250},[76,90065,51562],{"class":89},[76,90067,1363],{"class":93},[76,90069,90070,90072,90074,90077],{"class":78,"line":1695},[76,90071,54954],{"class":250},[76,90073,51507],{"class":93},[76,90075,90076],{"class":250},"gray",[76,90078,1363],{"class":93},[76,90080,90081,90083,90085,90087,90089],{"class":78,"line":1700},[76,90082,54992],{"class":250},[76,90084,51507],{"class":93},[76,90086,1024],{"class":250},[76,90088,51562],{"class":89},[76,90090,1363],{"class":93},[76,90092,90093,90095,90097,90099],{"class":78,"line":1714},[76,90094,57486],{"class":250},[76,90096,51507],{"class":93},[76,90098,60912],{"class":250},[76,90100,1363],{"class":93},[76,90102,90103,90105,90107,90109],{"class":78,"line":1719},[76,90104,57356],{"class":250},[76,90106,51507],{"class":93},[76,90108,51662],{"class":250},[76,90110,1363],{"class":93},[76,90112,90113,90116,90118,90120,90122],{"class":78,"line":1725},[76,90114,90115],{"class":250},"      padding-top",[76,90117,51507],{"class":93},[76,90119,520],{"class":250},[76,90121,51562],{"class":89},[76,90123,1363],{"class":93},[76,90125,90126],{"class":78,"line":1746},[76,90127,2259],{"class":93},[76,90129,90130,90132,90134],{"class":78,"line":1751},[76,90131,52487],{"class":93},[76,90133,117],{"class":51370},[76,90135,51377],{"class":93},[76,90137,90138,90140,90142],{"class":78,"line":1765},[76,90139,51855],{"class":93},[76,90141,51404],{"class":51370},[76,90143,51377],{"class":93},[76,90145,90146],{"class":78,"line":1770},[76,90147,2472],{"emptyLinePlaceholder":125},[76,90149,90150,90152,90154],{"class":78,"line":1799},[76,90151,1109],{"class":93},[76,90153,51870],{"class":51370},[76,90155,51377],{"class":93},[76,90157,90158,90160,90162,90164,90166,90168,90170,90172],{"class":78,"line":1804},[76,90159,52214],{"class":93},[76,90161,51681],{"class":51370},[76,90163,53556],{"class":2035},[76,90165,247],{"class":93},[76,90167,53561],{"class":305},[76,90169,55384],{"class":93},[76,90171,51681],{"class":51370},[76,90173,51377],{"class":93},[76,90175,90176,90178,90180,90182,90184,90186,90188,90190],{"class":78,"line":1821},[76,90177,52214],{"class":93},[76,90179,51883],{"class":51370},[76,90181,55309],{"class":2035},[76,90183,247],{"class":93},[76,90185,88344],{"class":305},[76,90187,55384],{"class":93},[76,90189,51883],{"class":51370},[76,90191,51377],{"class":93},[76,90193,90194,90196,90198],{"class":78,"line":1826},[76,90195,52214],{"class":93},[76,90197,51883],{"class":51370},[76,90199,51377],{"class":93},[76,90201,90202,90204,90206,90208,90210,90212,90214,90217],{"class":78,"line":1831},[76,90203,11293],{"class":89},[76,90205,87003],{"class":250},[76,90207,13636],{"class":89},[76,90209,54466],{"class":93},[76,90211,54469],{"class":2035},[76,90213,202],{"class":93},[76,90215,90216],{"class":305},"'.box'",[76,90218,208],{"class":93},[76,90220,90221,90223,90225,90227],{"class":78,"line":1836},[76,90222,52289],{"class":89},[76,90224,9510],{"class":93},[76,90226,247],{"class":89},[76,90228,47403],{"class":250},[76,90230,90231,90233,90236],{"class":78,"line":1850},[76,90232,70154],{"class":89},[76,90234,90235],{"class":2035}," mouseMove",[76,90237,10925],{"class":93},[76,90239,90240,90243,90245,90247],{"class":78,"line":1855},[76,90241,90242],{"class":93},"      box.innerHTML ",[76,90244,247],{"class":89},[76,90246,3104],{"class":93},[76,90248,2774],{"class":89},[76,90250,90251],{"class":78,"line":2649},[76,90252,90253],{"class":82},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[76,90255,90256],{"class":78,"line":2663},[76,90257,2259],{"class":93},[76,90259,90260],{"class":78,"line":2671},[76,90261,90262],{"class":82},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[76,90264,90265],{"class":78,"line":2676},[76,90266,90267],{"class":82},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[76,90269,90270],{"class":78,"line":2682},[76,90271,90272],{"class":82},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[76,90274,90275,90278,90280,90282,90285,90288,90291,90294,90296],{"class":78,"line":2688},[76,90276,90277],{"class":93},"    box.",[76,90279,57883],{"class":2035},[76,90281,202],{"class":93},[76,90283,90284],{"class":305},"'mousemove'",[76,90286,90287],{"class":93},", _.",[76,90289,90290],{"class":2035},"debounce",[76,90292,90293],{"class":93},"(mouseMove, ",[76,90295,65144],{"class":250},[76,90297,30567],{"class":93},[76,90299,90300,90302,90304],{"class":78,"line":2693},[76,90301,52487],{"class":93},[76,90303,51883],{"class":51370},[76,90305,51377],{"class":93},[76,90307,90308,90310,90312],{"class":78,"line":8020},[76,90309,51855],{"class":93},[76,90311,51870],{"class":51370},[76,90313,51377],{"class":93},[76,90315,90316],{"class":78,"line":8044},[76,90317,2472],{"emptyLinePlaceholder":125},[76,90319,90320,90322,90324],{"class":78,"line":8049},[76,90321,51855],{"class":93},[76,90323,50705],{"class":51370},[76,90325,51377],{"class":93},[1206,90327,90328],{},[155,90329,90330],{},"手写一个防抖函数来处理",[14,90332,90333],{},"防抖的核心就是利用定时器来实现的：",[14,90335,90336],{},"①声明一个定时器变量",[14,90338,90339],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90341,90342],{},"③如果没有定时器则开启定时器，记得存到变量里面",[67,90344,90346],{"className":50703,"code":90345,"language":50705,"meta":58,"style":58},"\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",[73,90347,90348,90358,90372,90376,90384,90398,90418,90430,90438,90444,90454,90466,90478,90488,90500,90510,90520,90532,90536,90544,90552,90556,90564,90582,90600,90608,90626,90636,90644,90654,90658,90662,90666,90671,90676,90681,90686,90691,90696,90714,90721,90726,90734,90739,90752,90768,90778,90783,90787,90791,90811,90815,90820,90825,90830,90835,90843,90851,90855],{"__ignoreMap":58},[76,90349,90350,90352,90354,90356],{"class":78,"line":79},[76,90351,51367],{"class":93},[76,90353,51371],{"class":51370},[76,90355,51374],{"class":2035},[76,90357,51377],{"class":93},[76,90359,90360,90362,90364,90366,90368,90370],{"class":78,"line":86},[76,90361,1109],{"class":93},[76,90363,50705],{"class":51370},[76,90365,51386],{"class":2035},[76,90367,247],{"class":93},[76,90369,51391],{"class":305},[76,90371,51377],{"class":93},[76,90373,90374],{"class":78,"line":97},[76,90375,2472],{"emptyLinePlaceholder":125},[76,90377,90378,90380,90382],{"class":78,"line":103},[76,90379,1109],{"class":93},[76,90381,51404],{"class":51370},[76,90383,51377],{"class":93},[76,90385,90386,90388,90390,90392,90394,90396],{"class":78,"line":1273},[76,90387,52214],{"class":93},[76,90389,51414],{"class":51370},[76,90391,51417],{"class":2035},[76,90393,247],{"class":93},[76,90395,51422],{"class":305},[76,90397,51377],{"class":93},[76,90399,90400,90402,90404,90406,90408,90410,90412,90414,90416],{"class":78,"line":1287},[76,90401,52214],{"class":93},[76,90403,51414],{"class":51370},[76,90405,14992],{"class":2035},[76,90407,247],{"class":93},[76,90409,51461],{"class":305},[76,90411,51441],{"class":2035},[76,90413,247],{"class":93},[76,90415,51468],{"class":305},[76,90417,51377],{"class":93},[76,90419,90420,90422,90424,90426,90428],{"class":78,"line":1293},[76,90421,52214],{"class":93},[76,90423,51477],{"class":51370},[76,90425,51480],{"class":93},[76,90427,51477],{"class":51370},[76,90429,51377],{"class":93},[76,90431,90432,90434,90436],{"class":78,"line":1384},[76,90433,52214],{"class":93},[76,90435,117],{"class":51370},[76,90437,51377],{"class":93},[76,90439,90440,90442],{"class":78,"line":1390},[76,90441,54822],{"class":2035},[76,90443,15644],{"class":93},[76,90445,90446,90448,90450,90452],{"class":78,"line":1402},[76,90447,72666],{"class":250},[76,90449,51507],{"class":93},[76,90451,60575],{"class":250},[76,90453,1363],{"class":93},[76,90455,90456,90458,90460,90462,90464],{"class":78,"line":1684},[76,90457,54841],{"class":250},[76,90459,51507],{"class":93},[76,90461,1794],{"class":250},[76,90463,51562],{"class":89},[76,90465,1363],{"class":93},[76,90467,90468,90470,90472,90474,90476],{"class":78,"line":1689},[76,90469,54855],{"class":250},[76,90471,51507],{"class":93},[76,90473,1794],{"class":250},[76,90475,51562],{"class":89},[76,90477,1363],{"class":93},[76,90479,90480,90482,90484,90486],{"class":78,"line":1695},[76,90481,54954],{"class":250},[76,90483,51507],{"class":93},[76,90485,90076],{"class":250},[76,90487,1363],{"class":93},[76,90489,90490,90492,90494,90496,90498],{"class":78,"line":1700},[76,90491,54992],{"class":250},[76,90493,51507],{"class":93},[76,90495,1024],{"class":250},[76,90497,51562],{"class":89},[76,90499,1363],{"class":93},[76,90501,90502,90504,90506,90508],{"class":78,"line":1714},[76,90503,57486],{"class":250},[76,90505,51507],{"class":93},[76,90507,60912],{"class":250},[76,90509,1363],{"class":93},[76,90511,90512,90514,90516,90518],{"class":78,"line":1719},[76,90513,57356],{"class":250},[76,90515,51507],{"class":93},[76,90517,51662],{"class":250},[76,90519,1363],{"class":93},[76,90521,90522,90524,90526,90528,90530],{"class":78,"line":1725},[76,90523,90115],{"class":250},[76,90525,51507],{"class":93},[76,90527,520],{"class":250},[76,90529,51562],{"class":89},[76,90531,1363],{"class":93},[76,90533,90534],{"class":78,"line":1746},[76,90535,2259],{"class":93},[76,90537,90538,90540,90542],{"class":78,"line":1751},[76,90539,52487],{"class":93},[76,90541,117],{"class":51370},[76,90543,51377],{"class":93},[76,90545,90546,90548,90550],{"class":78,"line":1765},[76,90547,51855],{"class":93},[76,90549,51404],{"class":51370},[76,90551,51377],{"class":93},[76,90553,90554],{"class":78,"line":1770},[76,90555,2472],{"emptyLinePlaceholder":125},[76,90557,90558,90560,90562],{"class":78,"line":1799},[76,90559,1109],{"class":93},[76,90561,51870],{"class":51370},[76,90563,51377],{"class":93},[76,90565,90566,90568,90570,90572,90574,90576,90578,90580],{"class":78,"line":1804},[76,90567,52214],{"class":93},[76,90569,51681],{"class":51370},[76,90571,53556],{"class":2035},[76,90573,247],{"class":93},[76,90575,53561],{"class":305},[76,90577,55384],{"class":93},[76,90579,51681],{"class":51370},[76,90581,51377],{"class":93},[76,90583,90584,90586,90588,90590,90592,90594,90596,90598],{"class":78,"line":1821},[76,90585,52214],{"class":93},[76,90587,51883],{"class":51370},[76,90589,55309],{"class":2035},[76,90591,247],{"class":93},[76,90593,88344],{"class":305},[76,90595,55384],{"class":93},[76,90597,51883],{"class":51370},[76,90599,51377],{"class":93},[76,90601,90602,90604,90606],{"class":78,"line":1826},[76,90603,52214],{"class":93},[76,90605,51883],{"class":51370},[76,90607,51377],{"class":93},[76,90609,90610,90612,90614,90616,90618,90620,90622,90624],{"class":78,"line":1831},[76,90611,11293],{"class":89},[76,90613,87003],{"class":250},[76,90615,13636],{"class":89},[76,90617,54466],{"class":93},[76,90619,54469],{"class":2035},[76,90621,202],{"class":93},[76,90623,90216],{"class":305},[76,90625,208],{"class":93},[76,90627,90628,90630,90632,90634],{"class":78,"line":1836},[76,90629,52289],{"class":89},[76,90631,9510],{"class":93},[76,90633,247],{"class":89},[76,90635,47403],{"class":250},[76,90637,90638,90640,90642],{"class":78,"line":1850},[76,90639,70154],{"class":89},[76,90641,90235],{"class":2035},[76,90643,10925],{"class":93},[76,90645,90646,90648,90650,90652],{"class":78,"line":1855},[76,90647,90242],{"class":93},[76,90649,247],{"class":89},[76,90651,3104],{"class":93},[76,90653,2774],{"class":89},[76,90655,90656],{"class":78,"line":2649},[76,90657,90253],{"class":82},[76,90659,90660],{"class":78,"line":2663},[76,90661,2259],{"class":93},[76,90663,90664],{"class":78,"line":2671},[76,90665,90262],{"class":82},[76,90667,90668],{"class":78,"line":2676},[76,90669,90670],{"class":82},"    \u002F\u002F 手写防抖函数\n",[76,90672,90673],{"class":78,"line":2682},[76,90674,90675],{"class":82},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[76,90677,90678],{"class":78,"line":2688},[76,90679,90680],{"class":82},"    \u002F\u002F 1.声明定时器变量\n",[76,90682,90683],{"class":78,"line":2693},[76,90684,90685],{"class":82},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[76,90687,90688],{"class":78,"line":8020},[76,90689,90690],{"class":82},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[76,90692,90693],{"class":78,"line":8044},[76,90694,90695],{"class":82},"    \u002F\u002F 4.定时器里面写函数调用\n",[76,90697,90698,90700,90703,90705,90708,90710,90712],{"class":78,"line":8049},[76,90699,70154],{"class":89},[76,90701,90702],{"class":2035}," debounce",[76,90704,202],{"class":93},[76,90706,90707],{"class":5288},"fn",[76,90709,12507],{"class":93},[76,90711,919],{"class":5288},[76,90713,12514],{"class":93},[76,90715,90716,90718],{"class":78,"line":8055},[76,90717,79842],{"class":89},[76,90719,90720],{"class":93}," timer\n",[76,90722,90723],{"class":78,"line":8082},[76,90724,90725],{"class":82},"      \u002F\u002F return 返回一个匿名函数\n",[76,90727,90728,90730,90732],{"class":78,"line":8087},[76,90729,74052],{"class":89},[76,90731,58988],{"class":89},[76,90733,54522],{"class":93},[76,90735,90736],{"class":78,"line":8093},[76,90737,90738],{"class":82},"        \u002F\u002F 这里边写第二三四步\n",[76,90740,90741,90743,90746,90749],{"class":78,"line":8105},[76,90742,2569],{"class":89},[76,90744,90745],{"class":93}," (timer) ",[76,90747,90748],{"class":2035},"clearTimeout",[76,90750,90751],{"class":93},"(timer)\n",[76,90753,90754,90757,90759,90762,90764,90766],{"class":78,"line":8117},[76,90755,90756],{"class":93},"        timer ",[76,90758,247],{"class":89},[76,90760,90761],{"class":2035}," setTimeout",[76,90763,202],{"class":93},[76,90765,54519],{"class":89},[76,90767,54522],{"class":93},[76,90769,90770,90773,90775],{"class":78,"line":8129},[76,90771,90772],{"class":2035},"          fn",[76,90774,13122],{"class":93},[76,90776,90777],{"class":82},"\u002F\u002F加小括号调用fn }, t)\n",[76,90779,90780],{"class":78,"line":9788},[76,90781,90782],{"class":93},"        }, t)\n",[76,90784,90785],{"class":78,"line":9813},[76,90786,52468],{"class":93},[76,90788,90789],{"class":78,"line":9836},[76,90790,2259],{"class":93},[76,90792,90793,90795,90797,90799,90801,90803,90805,90807,90809],{"class":78,"line":9860},[76,90794,90277],{"class":93},[76,90796,57883],{"class":2035},[76,90798,202],{"class":93},[76,90800,90284],{"class":305},[76,90802,12507],{"class":93},[76,90804,90290],{"class":2035},[76,90806,90293],{"class":93},[76,90808,65144],{"class":250},[76,90810,30567],{"class":93},[76,90812,90813],{"class":78,"line":9865},[76,90814,2472],{"emptyLinePlaceholder":125},[76,90816,90817],{"class":78,"line":9870},[76,90818,90819],{"class":82},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[76,90821,90822],{"class":78,"line":9875},[76,90823,90824],{"class":82},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[76,90826,90827],{"class":78,"line":9884},[76,90828,90829],{"class":82},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[76,90831,90832],{"class":78,"line":9889},[76,90833,90834],{"class":82},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[76,90836,90837,90839,90841],{"class":78,"line":9895},[76,90838,52487],{"class":93},[76,90840,51883],{"class":51370},[76,90842,51377],{"class":93},[76,90844,90845,90847,90849],{"class":78,"line":9916},[76,90846,51855],{"class":93},[76,90848,51870],{"class":51370},[76,90850,51377],{"class":93},[76,90852,90853],{"class":78,"line":9922},[76,90854,2472],{"emptyLinePlaceholder":125},[76,90856,90857,90859,90861],{"class":78,"line":9936},[76,90858,51855],{"class":93},[76,90860,50705],{"class":51370},[76,90862,51377],{"class":93},[169,90864,90866],{"id":90865},"_4172-节流","4.17.2 节流",[14,90868,90869],{},[56,90870],{"alt":58,"src":90871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90873,90874],{},[56,90875],{"alt":58,"src":90876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90878,90879],{},[350,90880,90881],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90883,90884],{},"实现方式：",[1206,90886,90887],{},[155,90888,90889],{},"lodash 提供的节流函数来处理",[14,90891,90892],{},"_.throttle(func,[wait=0],[options=])",[14,90894,90895],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[67,90897,90899],{"className":50703,"code":90898,"language":50705,"meta":58,"style":58},"\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",[73,90900,90901,90911,90925,90929,90937,90951,90971,90983,90991,90997,91007,91019,91031,91041,91053,91063,91073,91085,91089,91097,91105,91109,91117,91135,91153,91161,91179,91189,91197,91207,91211,91215,91219,91224,91229,91250,91258,91266,91270],{"__ignoreMap":58},[76,90902,90903,90905,90907,90909],{"class":78,"line":79},[76,90904,51367],{"class":93},[76,90906,51371],{"class":51370},[76,90908,51374],{"class":2035},[76,90910,51377],{"class":93},[76,90912,90913,90915,90917,90919,90921,90923],{"class":78,"line":86},[76,90914,1109],{"class":93},[76,90916,50705],{"class":51370},[76,90918,51386],{"class":2035},[76,90920,247],{"class":93},[76,90922,51391],{"class":305},[76,90924,51377],{"class":93},[76,90926,90927],{"class":78,"line":97},[76,90928,2472],{"emptyLinePlaceholder":125},[76,90930,90931,90933,90935],{"class":78,"line":103},[76,90932,1109],{"class":93},[76,90934,51404],{"class":51370},[76,90936,51377],{"class":93},[76,90938,90939,90941,90943,90945,90947,90949],{"class":78,"line":1273},[76,90940,52214],{"class":93},[76,90942,51414],{"class":51370},[76,90944,51417],{"class":2035},[76,90946,247],{"class":93},[76,90948,51422],{"class":305},[76,90950,51377],{"class":93},[76,90952,90953,90955,90957,90959,90961,90963,90965,90967,90969],{"class":78,"line":1287},[76,90954,52214],{"class":93},[76,90956,51414],{"class":51370},[76,90958,14992],{"class":2035},[76,90960,247],{"class":93},[76,90962,51461],{"class":305},[76,90964,51441],{"class":2035},[76,90966,247],{"class":93},[76,90968,51468],{"class":305},[76,90970,51377],{"class":93},[76,90972,90973,90975,90977,90979,90981],{"class":78,"line":1293},[76,90974,52214],{"class":93},[76,90976,51477],{"class":51370},[76,90978,51480],{"class":93},[76,90980,51477],{"class":51370},[76,90982,51377],{"class":93},[76,90984,90985,90987,90989],{"class":78,"line":1384},[76,90986,52214],{"class":93},[76,90988,117],{"class":51370},[76,90990,51377],{"class":93},[76,90992,90993,90995],{"class":78,"line":1390},[76,90994,54822],{"class":2035},[76,90996,15644],{"class":93},[76,90998,90999,91001,91003,91005],{"class":78,"line":1402},[76,91000,72666],{"class":250},[76,91002,51507],{"class":93},[76,91004,60575],{"class":250},[76,91006,1363],{"class":93},[76,91008,91009,91011,91013,91015,91017],{"class":78,"line":1684},[76,91010,54841],{"class":250},[76,91012,51507],{"class":93},[76,91014,1794],{"class":250},[76,91016,51562],{"class":89},[76,91018,1363],{"class":93},[76,91020,91021,91023,91025,91027,91029],{"class":78,"line":1689},[76,91022,54855],{"class":250},[76,91024,51507],{"class":93},[76,91026,1794],{"class":250},[76,91028,51562],{"class":89},[76,91030,1363],{"class":93},[76,91032,91033,91035,91037,91039],{"class":78,"line":1695},[76,91034,54954],{"class":250},[76,91036,51507],{"class":93},[76,91038,90076],{"class":250},[76,91040,1363],{"class":93},[76,91042,91043,91045,91047,91049,91051],{"class":78,"line":1700},[76,91044,54992],{"class":250},[76,91046,51507],{"class":93},[76,91048,1024],{"class":250},[76,91050,51562],{"class":89},[76,91052,1363],{"class":93},[76,91054,91055,91057,91059,91061],{"class":78,"line":1714},[76,91056,57486],{"class":250},[76,91058,51507],{"class":93},[76,91060,60912],{"class":250},[76,91062,1363],{"class":93},[76,91064,91065,91067,91069,91071],{"class":78,"line":1719},[76,91066,57356],{"class":250},[76,91068,51507],{"class":93},[76,91070,51662],{"class":250},[76,91072,1363],{"class":93},[76,91074,91075,91077,91079,91081,91083],{"class":78,"line":1725},[76,91076,90115],{"class":250},[76,91078,51507],{"class":93},[76,91080,520],{"class":250},[76,91082,51562],{"class":89},[76,91084,1363],{"class":93},[76,91086,91087],{"class":78,"line":1746},[76,91088,2259],{"class":93},[76,91090,91091,91093,91095],{"class":78,"line":1751},[76,91092,52487],{"class":93},[76,91094,117],{"class":51370},[76,91096,51377],{"class":93},[76,91098,91099,91101,91103],{"class":78,"line":1765},[76,91100,51855],{"class":93},[76,91102,51404],{"class":51370},[76,91104,51377],{"class":93},[76,91106,91107],{"class":78,"line":1770},[76,91108,2472],{"emptyLinePlaceholder":125},[76,91110,91111,91113,91115],{"class":78,"line":1799},[76,91112,1109],{"class":93},[76,91114,51870],{"class":51370},[76,91116,51377],{"class":93},[76,91118,91119,91121,91123,91125,91127,91129,91131,91133],{"class":78,"line":1804},[76,91120,52214],{"class":93},[76,91122,51681],{"class":51370},[76,91124,53556],{"class":2035},[76,91126,247],{"class":93},[76,91128,53561],{"class":305},[76,91130,55384],{"class":93},[76,91132,51681],{"class":51370},[76,91134,51377],{"class":93},[76,91136,91137,91139,91141,91143,91145,91147,91149,91151],{"class":78,"line":1821},[76,91138,52214],{"class":93},[76,91140,51883],{"class":51370},[76,91142,55309],{"class":2035},[76,91144,247],{"class":93},[76,91146,88344],{"class":305},[76,91148,55384],{"class":93},[76,91150,51883],{"class":51370},[76,91152,51377],{"class":93},[76,91154,91155,91157,91159],{"class":78,"line":1826},[76,91156,52214],{"class":93},[76,91158,51883],{"class":51370},[76,91160,51377],{"class":93},[76,91162,91163,91165,91167,91169,91171,91173,91175,91177],{"class":78,"line":1831},[76,91164,11293],{"class":89},[76,91166,87003],{"class":250},[76,91168,13636],{"class":89},[76,91170,54466],{"class":93},[76,91172,54469],{"class":2035},[76,91174,202],{"class":93},[76,91176,90216],{"class":305},[76,91178,208],{"class":93},[76,91180,91181,91183,91185,91187],{"class":78,"line":1836},[76,91182,52289],{"class":89},[76,91184,9510],{"class":93},[76,91186,247],{"class":89},[76,91188,47403],{"class":250},[76,91190,91191,91193,91195],{"class":78,"line":1850},[76,91192,70154],{"class":89},[76,91194,90235],{"class":2035},[76,91196,10925],{"class":93},[76,91198,91199,91201,91203,91205],{"class":78,"line":1855},[76,91200,90242],{"class":93},[76,91202,247],{"class":89},[76,91204,3104],{"class":93},[76,91206,2774],{"class":89},[76,91208,91209],{"class":78,"line":2649},[76,91210,90253],{"class":82},[76,91212,91213],{"class":78,"line":2663},[76,91214,2259],{"class":93},[76,91216,91217],{"class":78,"line":2671},[76,91218,90262],{"class":82},[76,91220,91221],{"class":78,"line":2676},[76,91222,91223],{"class":82},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[76,91225,91226],{"class":78,"line":2682},[76,91227,91228],{"class":82},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[76,91230,91231,91233,91235,91237,91239,91241,91244,91246,91248],{"class":78,"line":2688},[76,91232,90277],{"class":93},[76,91234,57883],{"class":2035},[76,91236,202],{"class":93},[76,91238,90284],{"class":305},[76,91240,90287],{"class":93},[76,91242,91243],{"class":2035},"throttle",[76,91245,90293],{"class":93},[76,91247,65144],{"class":250},[76,91249,30567],{"class":93},[76,91251,91252,91254,91256],{"class":78,"line":2693},[76,91253,52487],{"class":93},[76,91255,51883],{"class":51370},[76,91257,51377],{"class":93},[76,91259,91260,91262,91264],{"class":78,"line":8020},[76,91261,51855],{"class":93},[76,91263,51870],{"class":51370},[76,91265,51377],{"class":93},[76,91267,91268],{"class":78,"line":8044},[76,91269,2472],{"emptyLinePlaceholder":125},[76,91271,91272,91274,91276],{"class":78,"line":8049},[76,91273,51855],{"class":93},[76,91275,50705],{"class":51370},[76,91277,51377],{"class":93},[1206,91279,91280],{},[155,91281,91282],{},"手写一个节流函数来处理",[14,91284,71022],{},[14,91286,90336],{},[14,91288,91289],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91291,91292],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[67,91294,91296],{"className":50703,"code":91295,"language":50705,"meta":58,"style":58},"\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",[73,91297,91298,91308,91322,91326,91334,91348,91368,91380,91388,91394,91404,91416,91428,91438,91450,91460,91470,91482,91486,91494,91502,91506,91514,91532,91550,91558,91576,91586,91594,91604,91608,91612,91616,91621,91626,91631,91636,91641,91646,91663,91669,91677,91688,91703,91710,91715,91720,91730,91735,91740,91745,91749,91753,91757,91777,91785,91793,91797],{"__ignoreMap":58},[76,91299,91300,91302,91304,91306],{"class":78,"line":79},[76,91301,51367],{"class":93},[76,91303,51371],{"class":51370},[76,91305,51374],{"class":2035},[76,91307,51377],{"class":93},[76,91309,91310,91312,91314,91316,91318,91320],{"class":78,"line":86},[76,91311,1109],{"class":93},[76,91313,50705],{"class":51370},[76,91315,51386],{"class":2035},[76,91317,247],{"class":93},[76,91319,51391],{"class":305},[76,91321,51377],{"class":93},[76,91323,91324],{"class":78,"line":97},[76,91325,2472],{"emptyLinePlaceholder":125},[76,91327,91328,91330,91332],{"class":78,"line":103},[76,91329,1109],{"class":93},[76,91331,51404],{"class":51370},[76,91333,51377],{"class":93},[76,91335,91336,91338,91340,91342,91344,91346],{"class":78,"line":1273},[76,91337,52214],{"class":93},[76,91339,51414],{"class":51370},[76,91341,51417],{"class":2035},[76,91343,247],{"class":93},[76,91345,51422],{"class":305},[76,91347,51377],{"class":93},[76,91349,91350,91352,91354,91356,91358,91360,91362,91364,91366],{"class":78,"line":1287},[76,91351,52214],{"class":93},[76,91353,51414],{"class":51370},[76,91355,14992],{"class":2035},[76,91357,247],{"class":93},[76,91359,51461],{"class":305},[76,91361,51441],{"class":2035},[76,91363,247],{"class":93},[76,91365,51468],{"class":305},[76,91367,51377],{"class":93},[76,91369,91370,91372,91374,91376,91378],{"class":78,"line":1293},[76,91371,52214],{"class":93},[76,91373,51477],{"class":51370},[76,91375,51480],{"class":93},[76,91377,51477],{"class":51370},[76,91379,51377],{"class":93},[76,91381,91382,91384,91386],{"class":78,"line":1384},[76,91383,52214],{"class":93},[76,91385,117],{"class":51370},[76,91387,51377],{"class":93},[76,91389,91390,91392],{"class":78,"line":1390},[76,91391,54822],{"class":2035},[76,91393,15644],{"class":93},[76,91395,91396,91398,91400,91402],{"class":78,"line":1402},[76,91397,72666],{"class":250},[76,91399,51507],{"class":93},[76,91401,60575],{"class":250},[76,91403,1363],{"class":93},[76,91405,91406,91408,91410,91412,91414],{"class":78,"line":1684},[76,91407,54841],{"class":250},[76,91409,51507],{"class":93},[76,91411,1794],{"class":250},[76,91413,51562],{"class":89},[76,91415,1363],{"class":93},[76,91417,91418,91420,91422,91424,91426],{"class":78,"line":1689},[76,91419,54855],{"class":250},[76,91421,51507],{"class":93},[76,91423,1794],{"class":250},[76,91425,51562],{"class":89},[76,91427,1363],{"class":93},[76,91429,91430,91432,91434,91436],{"class":78,"line":1695},[76,91431,54954],{"class":250},[76,91433,51507],{"class":93},[76,91435,90076],{"class":250},[76,91437,1363],{"class":93},[76,91439,91440,91442,91444,91446,91448],{"class":78,"line":1700},[76,91441,54992],{"class":250},[76,91443,51507],{"class":93},[76,91445,1024],{"class":250},[76,91447,51562],{"class":89},[76,91449,1363],{"class":93},[76,91451,91452,91454,91456,91458],{"class":78,"line":1714},[76,91453,57486],{"class":250},[76,91455,51507],{"class":93},[76,91457,60912],{"class":250},[76,91459,1363],{"class":93},[76,91461,91462,91464,91466,91468],{"class":78,"line":1719},[76,91463,57356],{"class":250},[76,91465,51507],{"class":93},[76,91467,51662],{"class":250},[76,91469,1363],{"class":93},[76,91471,91472,91474,91476,91478,91480],{"class":78,"line":1725},[76,91473,90115],{"class":250},[76,91475,51507],{"class":93},[76,91477,520],{"class":250},[76,91479,51562],{"class":89},[76,91481,1363],{"class":93},[76,91483,91484],{"class":78,"line":1746},[76,91485,2259],{"class":93},[76,91487,91488,91490,91492],{"class":78,"line":1751},[76,91489,52487],{"class":93},[76,91491,117],{"class":51370},[76,91493,51377],{"class":93},[76,91495,91496,91498,91500],{"class":78,"line":1765},[76,91497,51855],{"class":93},[76,91499,51404],{"class":51370},[76,91501,51377],{"class":93},[76,91503,91504],{"class":78,"line":1770},[76,91505,2472],{"emptyLinePlaceholder":125},[76,91507,91508,91510,91512],{"class":78,"line":1799},[76,91509,1109],{"class":93},[76,91511,51870],{"class":51370},[76,91513,51377],{"class":93},[76,91515,91516,91518,91520,91522,91524,91526,91528,91530],{"class":78,"line":1804},[76,91517,52214],{"class":93},[76,91519,51681],{"class":51370},[76,91521,53556],{"class":2035},[76,91523,247],{"class":93},[76,91525,53561],{"class":305},[76,91527,55384],{"class":93},[76,91529,51681],{"class":51370},[76,91531,51377],{"class":93},[76,91533,91534,91536,91538,91540,91542,91544,91546,91548],{"class":78,"line":1821},[76,91535,52214],{"class":93},[76,91537,51883],{"class":51370},[76,91539,55309],{"class":2035},[76,91541,247],{"class":93},[76,91543,88344],{"class":305},[76,91545,55384],{"class":93},[76,91547,51883],{"class":51370},[76,91549,51377],{"class":93},[76,91551,91552,91554,91556],{"class":78,"line":1826},[76,91553,52214],{"class":93},[76,91555,51883],{"class":51370},[76,91557,51377],{"class":93},[76,91559,91560,91562,91564,91566,91568,91570,91572,91574],{"class":78,"line":1831},[76,91561,11293],{"class":89},[76,91563,87003],{"class":250},[76,91565,13636],{"class":89},[76,91567,54466],{"class":93},[76,91569,54469],{"class":2035},[76,91571,202],{"class":93},[76,91573,90216],{"class":305},[76,91575,208],{"class":93},[76,91577,91578,91580,91582,91584],{"class":78,"line":1836},[76,91579,52289],{"class":89},[76,91581,9510],{"class":93},[76,91583,247],{"class":89},[76,91585,47403],{"class":250},[76,91587,91588,91590,91592],{"class":78,"line":1850},[76,91589,70154],{"class":89},[76,91591,90235],{"class":2035},[76,91593,10925],{"class":93},[76,91595,91596,91598,91600,91602],{"class":78,"line":1855},[76,91597,90242],{"class":93},[76,91599,247],{"class":89},[76,91601,3104],{"class":93},[76,91603,2774],{"class":89},[76,91605,91606],{"class":78,"line":2649},[76,91607,90253],{"class":82},[76,91609,91610],{"class":78,"line":2663},[76,91611,2259],{"class":93},[76,91613,91614],{"class":78,"line":2671},[76,91615,90262],{"class":82},[76,91617,91618],{"class":78,"line":2676},[76,91619,91620],{"class":82},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[76,91622,91623],{"class":78,"line":2682},[76,91624,91625],{"class":82},"    \u002F\u002F 1.声明一个定时器变量\n",[76,91627,91628],{"class":78,"line":2688},[76,91629,91630],{"class":82},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[76,91632,91633],{"class":78,"line":2693},[76,91634,91635],{"class":82},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[76,91637,91638],{"class":78,"line":8020},[76,91639,91640],{"class":82},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[76,91642,91643],{"class":78,"line":8044},[76,91644,91645],{"class":82},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[76,91647,91648,91650,91653,91655,91657,91659,91661],{"class":78,"line":8049},[76,91649,70154],{"class":89},[76,91651,91652],{"class":2035}," throttle",[76,91654,202],{"class":93},[76,91656,90707],{"class":5288},[76,91658,12507],{"class":93},[76,91660,919],{"class":5288},[76,91662,12514],{"class":93},[76,91664,91665,91667],{"class":78,"line":8055},[76,91666,79842],{"class":89},[76,91668,90720],{"class":93},[76,91670,91671,91673,91675],{"class":78,"line":8082},[76,91672,74052],{"class":89},[76,91674,58988],{"class":89},[76,91676,54522],{"class":93},[76,91678,91679,91681,91683,91685],{"class":78,"line":8087},[76,91680,2569],{"class":89},[76,91682,1730],{"class":93},[76,91684,427],{"class":89},[76,91686,91687],{"class":93},"timer) {\n",[76,91689,91690,91693,91695,91697,91699,91701],{"class":78,"line":8093},[76,91691,91692],{"class":93},"          timer ",[76,91694,247],{"class":89},[76,91696,90761],{"class":2035},[76,91698,202],{"class":93},[76,91700,54519],{"class":89},[76,91702,54522],{"class":93},[76,91704,91705,91708],{"class":78,"line":8105},[76,91706,91707],{"class":2035},"            fn",[76,91709,2048],{"class":93},[76,91711,91712],{"class":78,"line":8117},[76,91713,91714],{"class":82},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[76,91716,91717],{"class":78,"line":8129},[76,91718,91719],{"class":82},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[76,91721,91722,91725,91727],{"class":78,"line":9788},[76,91723,91724],{"class":93},"            timer ",[76,91726,247],{"class":89},[76,91728,91729],{"class":250}," null\n",[76,91731,91732],{"class":78,"line":9813},[76,91733,91734],{"class":82},"            \u002F\u002F 不能用clearTimeout(timer)\n",[76,91736,91737],{"class":78,"line":9836},[76,91738,91739],{"class":82},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[76,91741,91742],{"class":78,"line":9860},[76,91743,91744],{"class":93},"          }, t)\n",[76,91746,91747],{"class":78,"line":9865},[76,91748,2601],{"class":93},[76,91750,91751],{"class":78,"line":9870},[76,91752,52468],{"class":93},[76,91754,91755],{"class":78,"line":9875},[76,91756,2259],{"class":93},[76,91758,91759,91761,91763,91765,91767,91769,91771,91773,91775],{"class":78,"line":9884},[76,91760,90277],{"class":93},[76,91762,57883],{"class":2035},[76,91764,202],{"class":93},[76,91766,90284],{"class":305},[76,91768,12507],{"class":93},[76,91770,91243],{"class":2035},[76,91772,90293],{"class":93},[76,91774,65144],{"class":250},[76,91776,30567],{"class":93},[76,91778,91779,91781,91783],{"class":78,"line":9889},[76,91780,52487],{"class":93},[76,91782,51883],{"class":51370},[76,91784,51377],{"class":93},[76,91786,91787,91789,91791],{"class":78,"line":9895},[76,91788,51855],{"class":93},[76,91790,51870],{"class":51370},[76,91792,51377],{"class":93},[76,91794,91795],{"class":78,"line":9916},[76,91796,2472],{"emptyLinePlaceholder":125},[76,91798,91799,91801,91803],{"class":78,"line":9922},[76,91800,51855],{"class":93},[76,91802,50705],{"class":51370},[76,91804,51377],{"class":93},[169,91806,91808],{"id":91807},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[67,91810,91812],{"className":53137,"code":91811,"language":53139,"meta":58,"style":58},"\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",[73,91813,91814,91822,91830,91835,91840,91845,91850,91854,91862],{"__ignoreMap":58},[76,91815,91816,91818,91820],{"class":78,"line":79},[76,91817,1109],{"class":93},[76,91819,51870],{"class":51370},[76,91821,51377],{"class":93},[76,91823,91824,91826,91828],{"class":78,"line":86},[76,91825,52214],{"class":93},[76,91827,51883],{"class":51370},[76,91829,51377],{"class":93},[76,91831,91832],{"class":78,"line":97},[76,91833,91834],{"class":93},"    let timer = null\n",[76,91836,91837],{"class":78,"line":103},[76,91838,91839],{"class":93},"    timer = setTimeout(() => {\n",[76,91841,91842],{"class":78,"line":1273},[76,91843,91844],{"class":93},"      clearTimeout(timer)\n",[76,91846,91847],{"class":78,"line":1287},[76,91848,91849],{"class":93},"      console.log(timer)\n",[76,91851,91852],{"class":78,"line":1293},[76,91853,60295],{"class":93},[76,91855,91856,91858,91860],{"class":78,"line":1384},[76,91857,52487],{"class":93},[76,91859,51883],{"class":51370},[76,91861,51377],{"class":93},[76,91863,91864,91866,91868],{"class":78,"line":1390},[76,91865,51855],{"class":93},[76,91867,51870],{"class":51370},[76,91869,51377],{"class":93},[14,91871,91872],{},"输出为1",[14,91874,91875],{},"在开启的定时器里边写清除定时器",[14,91877,91878],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[169,91880,91882],{"id":91881},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91884,91885],{},"页面打开，可以记录上一次的视频播放位置",[14,91887,91888],{},[56,91889],{"alt":58,"src":91890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91892,91893],{},[56,91894],{"alt":58,"src":91895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[67,91897,91899],{"className":50703,"code":91898,"language":50705,"meta":58,"style":58},"\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",[73,91900,91901,91911,91925,91929,91937,91951,91971,91991,92013,92026,92034,92040,92050,92060,92070,92074,92078,92085,92098,92110,92114,92118,92128,92140,92154,92158,92162,92169,92179,92192,92204,92214,92224,92240,92252,92256,92260,92268,92278,92290,92300,92310,92320,92324,92328,92338,92349,92353,92361,92369,92373,92381,92396,92411,92426,92447,92455,92463,92478,92500,92508,92523,92549,92575,92601,92609,92617,92636,92644,92649,92668,92673,92691,92696,92701,92709,92714,92728,92736,92741,92758,92762,92767,92789,92793,92801,92809,92813],{"__ignoreMap":58},[76,91902,91903,91905,91907,91909],{"class":78,"line":79},[76,91904,51367],{"class":93},[76,91906,51371],{"class":51370},[76,91908,51374],{"class":2035},[76,91910,51377],{"class":93},[76,91912,91913,91915,91917,91919,91921,91923],{"class":78,"line":86},[76,91914,1109],{"class":93},[76,91916,50705],{"class":51370},[76,91918,51386],{"class":2035},[76,91920,247],{"class":93},[76,91922,51391],{"class":305},[76,91924,51377],{"class":93},[76,91926,91927],{"class":78,"line":97},[76,91928,2472],{"emptyLinePlaceholder":125},[76,91930,91931,91933,91935],{"class":78,"line":103},[76,91932,1109],{"class":93},[76,91934,51404],{"class":51370},[76,91936,51377],{"class":93},[76,91938,91939,91941,91943,91945,91947,91949],{"class":78,"line":1273},[76,91940,52214],{"class":93},[76,91942,51414],{"class":51370},[76,91944,51417],{"class":2035},[76,91946,247],{"class":93},[76,91948,51422],{"class":305},[76,91950,59197],{"class":93},[76,91952,91953,91955,91957,91959,91961,91963,91965,91967,91969],{"class":78,"line":1287},[76,91954,52214],{"class":93},[76,91956,51414],{"class":51370},[76,91958,51433],{"class":2035},[76,91960,247],{"class":93},[76,91962,51438],{"class":305},[76,91964,51441],{"class":2035},[76,91966,247],{"class":93},[76,91968,51446],{"class":305},[76,91970,59197],{"class":93},[76,91972,91973,91975,91977,91979,91981,91983,91985,91987,91989],{"class":78,"line":1293},[76,91974,52214],{"class":93},[76,91976,51414],{"class":51370},[76,91978,14992],{"class":2035},[76,91980,247],{"class":93},[76,91982,51461],{"class":305},[76,91984,51441],{"class":2035},[76,91986,247],{"class":93},[76,91988,51468],{"class":305},[76,91990,59197],{"class":93},[76,91992,91993,91995,91997,91999,92001,92004,92006,92008,92011],{"class":78,"line":1384},[76,91994,52214],{"class":93},[76,91996,51414],{"class":51370},[76,91998,14992],{"class":2035},[76,92000,247],{"class":93},[76,92002,92003],{"class":305},"\"referrer\"",[76,92005,51441],{"class":2035},[76,92007,247],{"class":93},[76,92009,92010],{"class":305},"\"never\"",[76,92012,59197],{"class":93},[76,92014,92015,92017,92019,92022,92024],{"class":78,"line":1390},[76,92016,52214],{"class":93},[76,92018,51477],{"class":51370},[76,92020,92021],{"class":93},">综合案例\u003C\u002F",[76,92023,51477],{"class":51370},[76,92025,51377],{"class":93},[76,92027,92028,92030,92032],{"class":78,"line":1402},[76,92029,52214],{"class":93},[76,92031,117],{"class":51370},[76,92033,51377],{"class":93},[76,92035,92036,92038],{"class":78,"line":1684},[76,92037,6475],{"class":51370},[76,92039,15644],{"class":93},[76,92041,92042,92044,92046,92048],{"class":78,"line":1689},[76,92043,54765],{"class":250},[76,92045,51507],{"class":93},[76,92047,392],{"class":250},[76,92049,1363],{"class":93},[76,92051,92052,92054,92056,92058],{"class":78,"line":1695},[76,92053,54776],{"class":250},[76,92055,51507],{"class":93},[76,92057,392],{"class":250},[76,92059,1363],{"class":93},[76,92061,92062,92064,92066,92068],{"class":78,"line":1700},[76,92063,72666],{"class":250},[76,92065,51507],{"class":93},[76,92067,60575],{"class":250},[76,92069,1363],{"class":93},[76,92071,92072],{"class":78,"line":1714},[76,92073,2259],{"class":93},[76,92075,92076],{"class":78,"line":1719},[76,92077,2472],{"emptyLinePlaceholder":125},[76,92079,92080,92083],{"class":78,"line":1725},[76,92081,92082],{"class":2035},"    .container",[76,92084,15644],{"class":93},[76,92086,92087,92089,92091,92094,92096],{"class":78,"line":1746},[76,92088,54841],{"class":250},[76,92090,51507],{"class":93},[76,92092,92093],{"class":250},"1200",[76,92095,51562],{"class":89},[76,92097,1363],{"class":93},[76,92099,92100,92102,92104,92106,92108],{"class":78,"line":1751},[76,92101,54776],{"class":250},[76,92103,51507],{"class":93},[76,92105,392],{"class":250},[76,92107,51626],{"class":250},[76,92109,1363],{"class":93},[76,92111,92112],{"class":78,"line":1765},[76,92113,2259],{"class":93},[76,92115,92116],{"class":78,"line":1770},[76,92117,2472],{"emptyLinePlaceholder":125},[76,92119,92120,92123,92126],{"class":78,"line":1799},[76,92121,92122],{"class":2035},"    .video",[76,92124,92125],{"class":51370}," video",[76,92127,15644],{"class":93},[76,92129,92130,92132,92134,92136,92138],{"class":78,"line":1804},[76,92131,54841],{"class":250},[76,92133,51507],{"class":93},[76,92135,512],{"class":250},[76,92137,106],{"class":89},[76,92139,1363],{"class":93},[76,92141,92142,92144,92146,92148,92150,92152],{"class":78,"line":1821},[76,92143,54765],{"class":250},[76,92145,51507],{"class":93},[76,92147,899],{"class":250},[76,92149,51562],{"class":89},[76,92151,4165],{"class":250},[76,92153,1363],{"class":93},[76,92155,92156],{"class":78,"line":1826},[76,92157,2259],{"class":93},[76,92159,92160],{"class":78,"line":1831},[76,92161,2472],{"emptyLinePlaceholder":125},[76,92163,92164,92167],{"class":78,"line":1836},[76,92165,92166],{"class":2035},"    .elevator",[76,92168,15644],{"class":93},[76,92170,92171,92173,92175,92177],{"class":78,"line":1850},[76,92172,54829],{"class":250},[76,92174,51507],{"class":93},[76,92176,86303],{"class":250},[76,92178,1363],{"class":93},[76,92180,92181,92183,92185,92188,92190],{"class":78,"line":1855},[76,92182,55017],{"class":250},[76,92184,51507],{"class":93},[76,92186,92187],{"class":250},"280",[76,92189,51562],{"class":89},[76,92191,1363],{"class":93},[76,92193,92194,92196,92198,92200,92202],{"class":78,"line":2649},[76,92195,86497],{"class":250},[76,92197,51507],{"class":93},[76,92199,899],{"class":250},[76,92201,51562],{"class":89},[76,92203,1363],{"class":93},[76,92205,92206,92208,92210,92212],{"class":78,"line":2663},[76,92207,86310],{"class":250},[76,92209,51507],{"class":93},[76,92211,86315],{"class":250},[76,92213,1363],{"class":93},[76,92215,92216,92218,92220,92222],{"class":78,"line":2671},[76,92217,61791],{"class":250},[76,92219,51507],{"class":93},[76,92221,60912],{"class":250},[76,92223,1363],{"class":93},[76,92225,92226,92228,92230,92232,92234,92236,92238],{"class":78,"line":2676},[76,92227,62047],{"class":250},[76,92229,51507],{"class":93},[76,92231,418],{"class":250},[76,92233,51562],{"class":89},[76,92235,51591],{"class":250},[76,92237,62314],{"class":250},[76,92239,1363],{"class":93},[76,92241,92242,92244,92246,92248,92250],{"class":78,"line":2682},[76,92243,54841],{"class":250},[76,92245,51507],{"class":93},[76,92247,1106],{"class":250},[76,92249,51562],{"class":89},[76,92251,1363],{"class":93},[76,92253,92254],{"class":78,"line":2688},[76,92255,2259],{"class":93},[76,92257,92258],{"class":78,"line":2693},[76,92259,2472],{"emptyLinePlaceholder":125},[76,92261,92262,92264,92266],{"class":78,"line":8020},[76,92263,92166],{"class":2035},[76,92265,1471],{"class":51370},[76,92267,15644],{"class":93},[76,92269,92270,92272,92274,92276],{"class":78,"line":8044},[76,92271,55079],{"class":250},[76,92273,51507],{"class":93},[76,92275,60939],{"class":250},[76,92277,1363],{"class":93},[76,92279,92280,92282,92284,92286,92288],{"class":78,"line":8049},[76,92281,54765],{"class":250},[76,92283,51507],{"class":93},[76,92285,646],{"class":250},[76,92287,51562],{"class":89},[76,92289,1363],{"class":93},[76,92291,92292,92294,92296,92298],{"class":78,"line":8055},[76,92293,64040],{"class":250},[76,92295,51507],{"class":93},[76,92297,54807],{"class":250},[76,92299,1363],{"class":93},[76,92301,92302,92304,92306,92308],{"class":78,"line":8082},[76,92303,57356],{"class":250},[76,92305,51507],{"class":93},[76,92307,51662],{"class":250},[76,92309,1363],{"class":93},[76,92311,92312,92314,92316,92318],{"class":78,"line":8087},[76,92313,57486],{"class":250},[76,92315,51507],{"class":93},[76,92317,62140],{"class":250},[76,92319,1363],{"class":93},[76,92321,92322],{"class":78,"line":8093},[76,92323,2259],{"class":93},[76,92325,92326],{"class":78,"line":8105},[76,92327,2472],{"emptyLinePlaceholder":125},[76,92329,92330,92332,92334,92336],{"class":78,"line":8117},[76,92331,92166],{"class":2035},[76,92333,1471],{"class":51370},[76,92335,64094],{"class":2035},[76,92337,15644],{"class":93},[76,92339,92340,92342,92344,92347],{"class":78,"line":8129},[76,92341,57486],{"class":250},[76,92343,51507],{"class":93},[76,92345,92346],{"class":250},"#1286ff",[76,92348,1363],{"class":93},[76,92350,92351],{"class":78,"line":9788},[76,92352,2259],{"class":93},[76,92354,92355,92357,92359],{"class":78,"line":9813},[76,92356,52487],{"class":93},[76,92358,117],{"class":51370},[76,92360,51377],{"class":93},[76,92362,92363,92365,92367],{"class":78,"line":9836},[76,92364,51855],{"class":93},[76,92366,51404],{"class":51370},[76,92368,51377],{"class":93},[76,92370,92371],{"class":78,"line":9860},[76,92372,2472],{"emptyLinePlaceholder":125},[76,92374,92375,92377,92379],{"class":78,"line":9865},[76,92376,1109],{"class":93},[76,92378,51870],{"class":51370},[76,92380,51377],{"class":93},[76,92382,92383,92385,92387,92389,92391,92394],{"class":78,"line":9870},[76,92384,52214],{"class":93},[76,92386,51681],{"class":51370},[76,92388,53556],{"class":2035},[76,92390,247],{"class":93},[76,92392,92393],{"class":305},"\"container\"",[76,92395,51377],{"class":93},[76,92397,92398,92400,92402,92404,92406,92409],{"class":78,"line":9875},[76,92399,51411],{"class":93},[76,92401,51681],{"class":51370},[76,92403,53556],{"class":2035},[76,92405,247],{"class":93},[76,92407,92408],{"class":305},"\"header\"",[76,92410,51377],{"class":93},[76,92412,92413,92415,92417,92419,92421,92424],{"class":78,"line":9884},[76,92414,55304],{"class":93},[76,92416,439],{"class":51370},[76,92418,61127],{"class":2035},[76,92420,247],{"class":93},[76,92422,92423],{"class":305},"\"http:\u002F\u002Fpip.itcast.cn\"",[76,92425,51377],{"class":93},[76,92427,92428,92430,92432,92434,92436,92439,92441,92443,92445],{"class":78,"line":9889},[76,92429,55372],{"class":93},[76,92431,56],{"class":51370},[76,92433,55309],{"class":2035},[76,92435,247],{"class":93},[76,92437,92438],{"class":305},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[76,92440,55317],{"class":2035},[76,92442,247],{"class":93},[76,92444,7724],{"class":305},[76,92446,59197],{"class":93},[76,92448,92449,92451,92453],{"class":78,"line":9895},[76,92450,55477],{"class":93},[76,92452,439],{"class":51370},[76,92454,51377],{"class":93},[76,92456,92457,92459,92461],{"class":78,"line":9916},[76,92458,51846],{"class":93},[76,92460,51681],{"class":51370},[76,92462,51377],{"class":93},[76,92464,92465,92467,92469,92471,92473,92476],{"class":78,"line":9922},[76,92466,51411],{"class":93},[76,92468,51681],{"class":51370},[76,92470,53556],{"class":2035},[76,92472,247],{"class":93},[76,92474,92475],{"class":305},"\"video\"",[76,92477,51377],{"class":93},[76,92479,92480,92482,92484,92486,92488,92491,92494,92496,92498],{"class":78,"line":9936},[76,92481,55304],{"class":93},[76,92483,28256],{"class":51370},[76,92485,55309],{"class":2035},[76,92487,247],{"class":93},[76,92489,92490],{"class":305},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[76,92492,92493],{"class":2035}," controls",[76,92495,55384],{"class":93},[76,92497,28256],{"class":51370},[76,92499,51377],{"class":93},[76,92501,92502,92504,92506],{"class":78,"line":9942},[76,92503,51846],{"class":93},[76,92505,51681],{"class":51370},[76,92507,51377],{"class":93},[76,92509,92510,92512,92514,92516,92518,92521],{"class":78,"line":9969},[76,92511,51411],{"class":93},[76,92513,51681],{"class":51370},[76,92515,53556],{"class":2035},[76,92517,247],{"class":93},[76,92519,92520],{"class":305},"\"elevator\"",[76,92522,51377],{"class":93},[76,92524,92525,92527,92529,92531,92533,92535,92538,92540,92542,92545,92547],{"class":78,"line":9978},[76,92526,55304],{"class":93},[76,92528,439],{"class":51370},[76,92530,61127],{"class":2035},[76,92532,247],{"class":93},[76,92534,64306],{"class":305},[76,92536,92537],{"class":2035}," data-ref",[76,92539,247],{"class":93},[76,92541,92475],{"class":305},[76,92543,92544],{"class":93},">视频介绍\u003C\u002F",[76,92546,439],{"class":51370},[76,92548,51377],{"class":93},[76,92550,92551,92553,92555,92557,92559,92561,92563,92565,92568,92571,92573],{"class":78,"line":9984},[76,92552,55304],{"class":93},[76,92554,439],{"class":51370},[76,92556,61127],{"class":2035},[76,92558,247],{"class":93},[76,92560,64306],{"class":305},[76,92562,92537],{"class":2035},[76,92564,247],{"class":93},[76,92566,92567],{"class":305},"\"intro\"",[76,92569,92570],{"class":93},">课程简介\u003C\u002F",[76,92572,439],{"class":51370},[76,92574,51377],{"class":93},[76,92576,92577,92579,92581,92583,92585,92587,92589,92591,92594,92597,92599],{"class":78,"line":9992},[76,92578,55304],{"class":93},[76,92580,439],{"class":51370},[76,92582,61127],{"class":2035},[76,92584,247],{"class":93},[76,92586,64306],{"class":305},[76,92588,92537],{"class":2035},[76,92590,247],{"class":93},[76,92592,92593],{"class":305},"\"outline\"",[76,92595,92596],{"class":93},">评论列表\u003C\u002F",[76,92598,439],{"class":51370},[76,92600,51377],{"class":93},[76,92602,92603,92605,92607],{"class":78,"line":9997},[76,92604,51846],{"class":93},[76,92606,51681],{"class":51370},[76,92608,51377],{"class":93},[76,92610,92611,92613,92615],{"class":78,"line":16676},[76,92612,52487],{"class":93},[76,92614,51681],{"class":51370},[76,92616,51377],{"class":93},[76,92618,92619,92621,92623,92625,92627,92630,92632,92634],{"class":78,"line":16682},[76,92620,52214],{"class":93},[76,92622,51883],{"class":51370},[76,92624,55309],{"class":2035},[76,92626,247],{"class":93},[76,92628,92629],{"class":305},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[76,92631,55384],{"class":93},[76,92633,51883],{"class":51370},[76,92635,51377],{"class":93},[76,92637,92638,92640,92642],{"class":78,"line":16705},[76,92639,52214],{"class":93},[76,92641,51883],{"class":51370},[76,92643,51377],{"class":93},[76,92645,92646],{"class":78,"line":16711},[76,92647,92648],{"class":82},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[76,92650,92651,92653,92655,92657,92659,92661,92663,92666],{"class":78,"line":16734},[76,92652,11293],{"class":89},[76,92654,92125],{"class":250},[76,92656,13636],{"class":89},[76,92658,54466],{"class":93},[76,92660,54469],{"class":2035},[76,92662,202],{"class":93},[76,92664,92665],{"class":305},"'video'",[76,92667,208],{"class":93},[76,92669,92670],{"class":78,"line":16748},[76,92671,92672],{"class":82},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[76,92674,92675,92678,92680,92682,92684,92687,92689],{"class":78,"line":16768},[76,92676,92677],{"class":93},"    video.ontimeupdate ",[76,92679,247],{"class":89},[76,92681,88425],{"class":93},[76,92683,91243],{"class":2035},[76,92685,92686],{"class":93},"(() ",[76,92688,84792],{"class":89},[76,92690,15644],{"class":93},[76,92692,92693],{"class":78,"line":16774},[76,92694,92695],{"class":82},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[76,92697,92698],{"class":78,"line":16785},[76,92699,92700],{"class":82},"      \u002F\u002F 控制台输出当前的时间\n",[76,92702,92703,92706],{"class":78,"line":16808},[76,92704,92705],{"class":82},"      \u002F\u002F console.log(video.currentTime)",[76,92707,92708],{"class":82},"  \u002F\u002F获得当前的视频时间\n",[76,92710,92711],{"class":78,"line":16830},[76,92712,92713],{"class":82},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[76,92715,92716,92718,92720,92722,92725],{"class":78,"line":16835},[76,92717,74753],{"class":93},[76,92719,71724],{"class":2035},[76,92721,202],{"class":93},[76,92723,92724],{"class":305},"'currentTime'",[76,92726,92727],{"class":93},", video.currentTime)\n",[76,92729,92730,92732,92734],{"class":78,"line":16841},[76,92731,54605],{"class":93},[76,92733,6482],{"class":250},[76,92735,208],{"class":93},[76,92737,92738],{"class":78,"line":16855},[76,92739,92740],{"class":82},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[76,92742,92743,92746,92749,92751,92754,92756],{"class":78,"line":16868},[76,92744,92745],{"class":93},"    video.",[76,92747,92748],{"class":2035},"onloadeddata",[76,92750,13636],{"class":89},[76,92752,92753],{"class":93}," () ",[76,92755,84792],{"class":89},[76,92757,15644],{"class":93},[76,92759,92760],{"class":78,"line":16873},[76,92761,60082],{"class":82},[76,92763,92764],{"class":78,"line":16887},[76,92765,92766],{"class":82},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[76,92768,92769,92772,92774,92777,92779,92781,92783,92785,92787],{"class":78,"line":16892},[76,92770,92771],{"class":93},"      video.currentTime ",[76,92773,247],{"class":89},[76,92775,92776],{"class":93}," localStorage.",[76,92778,71755],{"class":2035},[76,92780,202],{"class":93},[76,92782,92724],{"class":305},[76,92784,13786],{"class":93},[76,92786,71427],{"class":89},[76,92788,47403],{"class":250},[76,92790,92791],{"class":78,"line":16898},[76,92792,2259],{"class":93},[76,92794,92795,92797,92799],{"class":78,"line":16903},[76,92796,52487],{"class":93},[76,92798,51883],{"class":51370},[76,92800,51377],{"class":93},[76,92802,92803,92805,92807],{"class":78,"line":16917},[76,92804,51855],{"class":93},[76,92806,51870],{"class":51370},[76,92808,51377],{"class":93},[76,92810,92811],{"class":78,"line":16922},[76,92812,2472],{"emptyLinePlaceholder":125},[76,92814,92815,92817,92819],{"class":78,"line":16927},[76,92816,51855],{"class":93},[76,92818,50705],{"class":51370},[76,92820,51377],{"class":93},[117,92822,92823],{},"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":58,"searchDepth":86,"depth":86,"links":92825},[92826,92831,92835,92836,92837,92842,92847,92848,92849,92850,92857,92862,92863,92873,92877,92878,92882],{"id":76761,"depth":86,"text":76762,"children":92827},[92828,92829,92830],{"id":76765,"depth":97,"text":76766},{"id":76790,"depth":97,"text":76791},{"id":76802,"depth":97,"text":76803},{"id":76814,"depth":86,"text":76815,"children":92832},[92833,92834],{"id":76818,"depth":97,"text":76819},{"id":76833,"depth":97,"text":76834},{"id":76885,"depth":86,"text":76886},{"id":76929,"depth":86,"text":76930},{"id":76946,"depth":86,"text":76947,"children":92838},[92839,92840,92841],{"id":76950,"depth":97,"text":76951},{"id":76963,"depth":97,"text":76964},{"id":77068,"depth":97,"text":77069},{"id":77357,"depth":86,"text":77358,"children":92843},[92844,92845,92846],{"id":77361,"depth":97,"text":77362},{"id":77804,"depth":97,"text":77805},{"id":78215,"depth":97,"text":78216},{"id":78278,"depth":86,"text":78279},{"id":78357,"depth":86,"text":78358},{"id":78450,"depth":86,"text":78451},{"id":80295,"depth":86,"text":80296,"children":92851},[92852,92853,92854,92855,92856],{"id":80299,"depth":97,"text":80300},{"id":80311,"depth":97,"text":80312},{"id":80530,"depth":97,"text":80531},{"id":80548,"depth":97,"text":80549},{"id":80608,"depth":97,"text":80609},{"id":84876,"depth":86,"text":84877,"children":92858},[92859,92860,92861],{"id":84880,"depth":97,"text":84881},{"id":84898,"depth":97,"text":84899},{"id":84924,"depth":97,"text":84925},{"id":84933,"depth":86,"text":84934},{"id":84955,"depth":86,"text":84956,"children":92864},[92865,92866,92867,92868,92869,92870,92871,92872],{"id":84959,"depth":97,"text":84960},{"id":85220,"depth":97,"text":85221},{"id":85406,"depth":97,"text":85407},{"id":85773,"depth":97,"text":85774},{"id":85889,"depth":97,"text":85890},{"id":85925,"depth":97,"text":85926},{"id":85972,"depth":97,"text":85973},{"id":86006,"depth":97,"text":86007},{"id":87369,"depth":86,"text":87370,"children":92874},[92875,92876],{"id":87373,"depth":97,"text":87374},{"id":87410,"depth":97,"text":87411},{"id":88765,"depth":86,"text":88766},{"id":89136,"depth":86,"text":89137,"children":92879},[92880,92881],{"id":89140,"depth":97,"text":89141},{"id":89174,"depth":97,"text":89175},{"id":89903,"depth":86,"text":89904,"children":92883},[92884,92885,92886,92887],{"id":89907,"depth":97,"text":89908},{"id":90865,"depth":97,"text":90866},{"id":91807,"depth":97,"text":91808},{"id":91881,"depth":97,"text":91882},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76750,"description":122},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92894,"title":92895,"body":92896,"description":92907,"extension":123,"meta":92908,"navigation":125,"path":92910,"seo":92911,"stem":92912,"__hash__":92913},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92897,"toc":92905},[92898],[14,92899,92900,92901],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[439,92902,92903],{"href":92903,"rel":92904},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23937],{"title":58,"searchDepth":86,"depth":86,"links":92906},[],"三件套第三套学习",{"category":92909},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92895,"description":92907},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92915,"title":92916,"body":92917,"description":122,"extension":123,"meta":93022,"navigation":125,"path":93023,"seo":93024,"stem":93025,"__hash__":93026},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92918,"toc":93017},[92919,92926,92929,92932,92935,92939,92948,92951,92954,92958,92967,92970,92974,92977,92997,93000,93014],[14,92920,92921],{},[439,92922,92925],{"href":92923,"rel":92924},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23937],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92927,92916],{"id":92928},"_1安装",[14,92930,92931],{},"numpy是科学计算基础库,底层是C语言",[14,92933,92934],{},"三种方式：",[140,92936,92938],{"id":92937},"_11-通过pip安装","1.1 通过pip安装",[67,92940,92942],{"className":69,"code":92941,"language":71,"meta":58,"style":58},"pip install numpy\n",[73,92943,92944],{"__ignoreMap":58},[76,92945,92946],{"class":78,"line":79},[76,92947,92941],{"class":93},[14,92949,92950],{},"首选方式，自动处理依赖项",[14,92952,92953],{},"在提示系统命令符中使用cmd",[140,92955,92957],{"id":92956},"_12-通过anaconda安装","1.2 通过Anaconda安装",[67,92959,92961],{"className":69,"code":92960,"language":71,"meta":58,"style":58},"conda install numpy\n",[73,92962,92963],{"__ignoreMap":58},[76,92964,92965],{"class":78,"line":79},[76,92966,92960],{"class":93},[14,92968,92969],{},"自动解决环境依赖",[140,92971,92973],{"id":92972},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92975,92976],{},"对于Debian\u002FUbuntu",[67,92978,92980],{"className":69,"code":92979,"language":71,"meta":58,"style":58},"sudo apt-get install python3-numpy\n",[73,92981,92982],{"__ignoreMap":58},[76,92983,92984,92987,92989,92992,92994],{"class":78,"line":79},[76,92985,92986],{"class":93},"sudo apt",[76,92988,112],{"class":89},[76,92990,92991],{"class":93},"get install python3",[76,92993,112],{"class":89},[76,92995,92996],{"class":93},"numpy\n",[14,92998,92999],{},"对于Fedora:",[67,93001,93003],{"className":69,"code":93002,"language":71,"meta":58,"style":58},"sudo dnf install python3-numpy\n",[73,93004,93005],{"__ignoreMap":58},[76,93006,93007,93010,93012],{"class":78,"line":79},[76,93008,93009],{"class":93},"sudo dnf install python3",[76,93011,112],{"class":89},[76,93013,92996],{"class":93},[117,93015,93016],{},"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":58,"searchDepth":86,"depth":86,"links":93018},[93019,93020,93021],{"id":92937,"depth":86,"text":92938},{"id":92956,"depth":86,"text":92957},{"id":92972,"depth":86,"text":92973},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92916,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93028,"title":93029,"body":93030,"description":122,"extension":123,"meta":93143,"navigation":125,"path":93144,"seo":93145,"stem":93146,"__hash__":93147},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93031,"toc":93141},[93032,93035,93038,93041,93044,93047,93050,93053,93056,93059,93135,93138],[10,93033,93029],{"id":93034},"_10算数函数",[14,93036,93037],{},"加减乘除运算跟python基础语法没区别",[14,93039,93040],{},"除了python那种方法外还可以使用函数",[14,93042,93043],{},"加：np.add(a,b)",[14,93045,93046],{},"减：np.subtract(a,b)",[14,93048,93049],{},"乘：np.multiply(a,b)",[14,93051,93052],{},"除：np.divide(a,b) == a\u002Fb",[14,93054,93055],{},"取余：np.mod(a,b) == a%b",[14,93057,93058],{},"必须会的用法：",[67,93060,93062],{"className":69,"code":93061,"language":71,"meta":58,"style":58},"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",[73,93063,93064,93086,93107,93117,93130],{"__ignoreMap":58},[76,93065,93066,93068,93070,93073,93075,93078,93080,93082,93084],{"class":78,"line":79},[76,93067,439],{"class":93},[76,93069,247],{"class":89},[76,93071,93072],{"class":93},"np.arange(",[76,93074,620],{"class":250},[76,93076,93077],{"class":93},").reshape(",[76,93079,272],{"class":250},[76,93081,578],{"class":93},[76,93083,272],{"class":250},[76,93085,208],{"class":93},[76,93087,93088,93090,93092,93095,93097,93099,93101,93103,93105],{"class":78,"line":86},[76,93089,464],{"class":93},[76,93091,247],{"class":89},[76,93093,93094],{"class":93},"np.array([",[76,93096,646],{"class":250},[76,93098,578],{"class":93},[76,93100,646],{"class":250},[76,93102,578],{"class":93},[76,93104,646],{"class":250},[76,93106,4729],{"class":93},[76,93108,93109,93112,93114],{"class":78,"line":97},[76,93110,93111],{"class":93},"result",[76,93113,247],{"class":89},[76,93115,93116],{"class":93},"np.empty_like(a)\n",[76,93118,93119,93122,93125,93127],{"class":78,"line":103},[76,93120,93121],{"class":93},"np.add(a,b,",[76,93123,93124],{"class":5288},"out",[76,93126,247],{"class":89},[76,93128,93129],{"class":93},"result)\n",[76,93131,93132],{"class":78,"line":1273},[76,93133,93134],{"class":93},"result\n",[14,93136,93137],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[117,93139,93140],{},"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":58,"searchDepth":86,"depth":86,"links":93142},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93029,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93149,"title":93150,"body":93151,"description":122,"extension":123,"meta":93913,"navigation":125,"path":93914,"seo":93915,"stem":93916,"__hash__":93917},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93152,"toc":93900},[93153,93156,93159,93162,93166,93205,93209,93253,93313,93317,93320,93359,93362,93407,93411,93447,93451,93520,93524,93588,93592,93595,93598,93601,93604,93640,93644,93684,93688,93760,93763,93767,93830,93834,93897],[10,93154,93150],{"id":93155},"_11统计函数",[14,93157,93158],{},"sum max min mean",[14,93160,93161],{},"这些有axis参数，可以指定方向",[140,93163,93165],{"id":93164},"_111-sum求和函数","11.1 sum()求和函数",[67,93167,93169],{"className":69,"code":93168,"language":71,"meta":58,"style":58},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[73,93170,93171,93176,93197],{"__ignoreMap":58},[76,93172,93173],{"class":78,"line":79},[76,93174,93175],{"class":82},"#创建一维数组\n",[76,93177,93178,93180,93182,93185,93187,93189,93191,93193,93195],{"class":78,"line":86},[76,93179,439],{"class":93},[76,93181,247],{"class":89},[76,93183,93184],{"class":93},"np.random.randint(",[76,93186,418],{"class":250},[76,93188,578],{"class":93},[76,93190,512],{"class":250},[76,93192,578],{"class":93},[76,93194,899],{"class":250},[76,93196,208],{"class":93},[76,93198,93199,93202],{"class":78,"line":97},[76,93200,93201],{"class":93},"np.sum(a)",[76,93203,93204],{"class":82},"#求和\n",[140,93206,93208],{"id":93207},"_112-max求最大值函数","11.2 max()求最大值函数",[67,93210,93212],{"className":69,"code":93211,"language":71,"meta":58,"style":58},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[73,93213,93214,93218,93238,93243,93248],{"__ignoreMap":58},[76,93215,93216],{"class":78,"line":79},[76,93217,93175],{"class":82},[76,93219,93220,93222,93224,93226,93228,93230,93232,93234,93236],{"class":78,"line":86},[76,93221,439],{"class":93},[76,93223,247],{"class":89},[76,93225,93184],{"class":93},[76,93227,418],{"class":250},[76,93229,578],{"class":93},[76,93231,512],{"class":250},[76,93233,578],{"class":93},[76,93235,899],{"class":250},[76,93237,208],{"class":93},[76,93239,93240],{"class":78,"line":97},[76,93241,93242],{"class":93},"np.max(a)\n",[76,93244,93245],{"class":78,"line":103},[76,93246,93247],{"class":82},"#最大索引(求最大元素的索引)arg\n",[76,93249,93250],{"class":78,"line":1273},[76,93251,93252],{"class":93},"np.argmax(a)\n",[67,93254,93256],{"className":69,"code":93255,"language":71,"meta":58,"style":58},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[73,93257,93258,93279,93299,93303],{"__ignoreMap":58},[76,93259,93260,93262,93264,93267,93269,93271,93273,93275,93277],{"class":78,"line":79},[76,93261,10991],{"class":93},[76,93263,247],{"class":89},[76,93265,93266],{"class":93}," np.array([",[76,93268,418],{"class":250},[76,93270,12507],{"class":93},[76,93272,520],{"class":250},[76,93274,12507],{"class":93},[76,93276,272],{"class":250},[76,93278,4729],{"class":93},[76,93280,93281,93283,93285,93287,93289,93291,93293,93295,93297],{"class":78,"line":86},[76,93282,11017],{"class":93},[76,93284,247],{"class":89},[76,93286,93266],{"class":93},[76,93288,272],{"class":250},[76,93290,12507],{"class":93},[76,93292,278],{"class":250},[76,93294,12507],{"class":93},[76,93296,494],{"class":250},[76,93298,4729],{"class":93},[76,93300,93301],{"class":78,"line":97},[76,93302,2472],{"emptyLinePlaceholder":125},[76,93304,93305,93307,93310],{"class":78,"line":103},[76,93306,30485],{"class":250},[76,93308,93309],{"class":93},"(np.maximum(a, b))   ",[76,93311,93312],{"class":82},"# [3 5 4]，每个位置上取较大值\n",[140,93314,93316],{"id":93315},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93318,93319],{},"①一维数组：",[67,93321,93323],{"className":69,"code":93322,"language":71,"meta":58,"style":58},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[73,93324,93325,93329,93349,93354],{"__ignoreMap":58},[76,93326,93327],{"class":78,"line":79},[76,93328,93175],{"class":82},[76,93330,93331,93333,93335,93337,93339,93341,93343,93345,93347],{"class":78,"line":86},[76,93332,439],{"class":93},[76,93334,247],{"class":89},[76,93336,93184],{"class":93},[76,93338,418],{"class":250},[76,93340,578],{"class":93},[76,93342,512],{"class":250},[76,93344,578],{"class":93},[76,93346,899],{"class":250},[76,93348,208],{"class":93},[76,93350,93351],{"class":78,"line":97},[76,93352,93353],{"class":82},"#求平均值\n",[76,93355,93356],{"class":78,"line":103},[76,93357,93358],{"class":93},"np.mean(a)\n",[14,93360,93361],{},"②二维数组",[67,93363,93365],{"className":69,"code":93364,"language":71,"meta":58,"style":58},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[73,93366,93367,93372,93397,93402],{"__ignoreMap":58},[76,93368,93369],{"class":78,"line":79},[76,93370,93371],{"class":82},"#二维数组\n",[76,93373,93374,93377,93379,93381,93383,93385,93387,93389,93391,93393,93395],{"class":78,"line":86},[76,93375,93376],{"class":93},"aa",[76,93378,247],{"class":89},[76,93380,93072],{"class":93},[76,93382,418],{"class":250},[76,93384,578],{"class":93},[76,93386,723],{"class":250},[76,93388,93077],{"class":93},[76,93390,272],{"class":250},[76,93392,578],{"class":93},[76,93394,494],{"class":250},[76,93396,208],{"class":93},[76,93398,93399],{"class":78,"line":97},[76,93400,93401],{"class":82},"#对数组中的所有数求平均\n",[76,93403,93404],{"class":78,"line":103},[76,93405,93406],{"class":93},"np.mean(aa)\n",[140,93408,93410],{"id":93409},"_114-median求中位数函数","11.4 median()求中位数函数",[67,93412,93414],{"className":69,"code":93413,"language":71,"meta":58,"style":58},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[73,93415,93416,93421,93437,93442],{"__ignoreMap":58},[76,93417,93418],{"class":78,"line":79},[76,93419,93420],{"class":82},"#求中位数\n",[76,93422,93423,93425,93427,93429,93431,93433,93435],{"class":78,"line":86},[76,93424,464],{"class":93},[76,93426,247],{"class":89},[76,93428,93072],{"class":93},[76,93430,418],{"class":250},[76,93432,578],{"class":93},[76,93434,646],{"class":250},[76,93436,208],{"class":93},[76,93438,93439],{"class":78,"line":97},[76,93440,93441],{"class":93},"np.median(b)\n",[76,93443,93444],{"class":78,"line":103},[76,93445,93446],{"class":82},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[140,93448,93450],{"id":93449},"_115-power求幂运算函数","11.5 power()求幂运算函数",[67,93452,93454],{"className":69,"code":93453,"language":71,"meta":58,"style":58},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[73,93455,93456,93472,93477,93482,93491,93496,93505],{"__ignoreMap":58},[76,93457,93458,93460,93462,93464,93466,93468,93470],{"class":78,"line":79},[76,93459,464],{"class":93},[76,93461,247],{"class":89},[76,93463,93072],{"class":93},[76,93465,418],{"class":250},[76,93467,578],{"class":93},[76,93469,646],{"class":250},[76,93471,208],{"class":93},[76,93473,93474],{"class":78,"line":86},[76,93475,93476],{"class":82},"#幂运算\n",[76,93478,93479],{"class":78,"line":97},[76,93480,93481],{"class":82},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[76,93483,93484,93487,93489],{"class":78,"line":103},[76,93485,93486],{"class":93},"np.power(b,",[76,93488,278],{"class":250},[76,93490,208],{"class":93},[76,93492,93493],{"class":78,"line":1273},[76,93494,93495],{"class":82},"#或者以下代码，将数据存储起来\n",[76,93497,93498,93500,93502],{"class":78,"line":1287},[76,93499,1044],{"class":93},[76,93501,247],{"class":89},[76,93503,93504],{"class":93},"np.empty_like(b)\n",[76,93506,93507,93509,93511,93513,93515,93517],{"class":78,"line":1293},[76,93508,93486],{"class":93},[76,93510,278],{"class":250},[76,93512,578],{"class":93},[76,93514,93124],{"class":5288},[76,93516,247],{"class":89},[76,93518,93519],{"class":93},"y)\n",[140,93521,93523],{"id":93522},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[67,93525,93527],{"className":69,"code":93526,"language":71,"meta":58,"style":58},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[73,93528,93529,93545,93550,93555,93559,93577],{"__ignoreMap":58},[76,93530,93531,93533,93535,93537,93539,93541,93543],{"class":78,"line":79},[76,93532,464],{"class":93},[76,93534,247],{"class":89},[76,93536,93072],{"class":93},[76,93538,418],{"class":250},[76,93540,578],{"class":93},[76,93542,646],{"class":250},[76,93544,208],{"class":93},[76,93546,93547],{"class":78,"line":86},[76,93548,93549],{"class":82},"#开方\n",[76,93551,93552],{"class":78,"line":97},[76,93553,93554],{"class":93},"np.sqrt(b)\n",[76,93556,93557],{"class":78,"line":103},[76,93558,93495],{"class":82},[76,93560,93561,93563,93565,93568,93571,93573,93575],{"class":78,"line":1273},[76,93562,1044],{"class":93},[76,93564,247],{"class":89},[76,93566,93567],{"class":93},"np.empty_like(b,",[76,93569,93570],{"class":5288},"dtype",[76,93572,247],{"class":89},[76,93574,241],{"class":250},[76,93576,208],{"class":93},[76,93578,93579,93582,93584,93586],{"class":78,"line":1287},[76,93580,93581],{"class":93},"np.sqrt(b,",[76,93583,93124],{"class":5288},[76,93585,247],{"class":89},[76,93587,93519],{"class":93},[140,93589,93591],{"id":93590},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93593,93594],{},"对数组中的元素累计求和，可指定轴",[14,93596,93597],{},"#累计求和的意思是：",[14,93599,93600],{},"a = np.array([1, 2, 3, 4])",[14,93602,93603],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[67,93605,93607],{"className":69,"code":93606,"language":71,"meta":58,"style":58},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[73,93608,93609,93625,93630,93635],{"__ignoreMap":58},[76,93610,93611,93613,93615,93617,93619,93621,93623],{"class":78,"line":79},[76,93612,464],{"class":93},[76,93614,247],{"class":89},[76,93616,93072],{"class":93},[76,93618,418],{"class":250},[76,93620,578],{"class":93},[76,93622,646],{"class":250},[76,93624,208],{"class":93},[76,93626,93627],{"class":78,"line":86},[76,93628,93629],{"class":93},"np.cumsum(b)\n",[76,93631,93632],{"class":78,"line":97},[76,93633,93634],{"class":82},"#结果：\n",[76,93636,93637],{"class":78,"line":103},[76,93638,93639],{"class":82},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[140,93641,93643],{"id":93642},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[67,93645,93647],{"className":69,"code":93646,"language":71,"meta":58,"style":58},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[73,93648,93649,93665,93670,93675,93679],{"__ignoreMap":58},[76,93650,93651,93653,93655,93657,93659,93661,93663],{"class":78,"line":79},[76,93652,464],{"class":93},[76,93654,247],{"class":89},[76,93656,93072],{"class":93},[76,93658,418],{"class":250},[76,93660,578],{"class":93},[76,93662,646],{"class":250},[76,93664,208],{"class":93},[76,93666,93667],{"class":78,"line":86},[76,93668,93669],{"class":82},"#对数组中的元素累计求积，可指定轴\n",[76,93671,93672],{"class":78,"line":97},[76,93673,93674],{"class":93},"np.cumprod(b)\n",[76,93676,93677],{"class":78,"line":103},[76,93678,93634],{"class":82},[76,93680,93681],{"class":78,"line":1273},[76,93682,93683],{"class":82},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[140,93685,93687],{"id":93686},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[67,93689,93691],{"className":69,"code":93690,"language":71,"meta":58,"style":58},"#删除数组中的重复数据，并对数据进行排序\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",[73,93692,93693,93698,93746,93751,93755],{"__ignoreMap":58},[76,93694,93695],{"class":78,"line":79},[76,93696,93697],{"class":82},"#删除数组中的重复数据，并对数据进行排序\n",[76,93699,93700,93702,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728,93730,93732,93734,93736,93738,93740,93742,93744],{"class":78,"line":86},[76,93701,439],{"class":93},[76,93703,247],{"class":89},[76,93705,93094],{"class":93},[76,93707,418],{"class":250},[76,93709,578],{"class":93},[76,93711,278],{"class":250},[76,93713,578],{"class":93},[76,93715,272],{"class":250},[76,93717,578],{"class":93},[76,93719,698],{"class":250},[76,93721,578],{"class":93},[76,93723,272],{"class":250},[76,93725,578],{"class":93},[76,93727,646],{"class":250},[76,93729,578],{"class":93},[76,93731,398],{"class":250},[76,93733,578],{"class":93},[76,93735,392],{"class":250},[76,93737,578],{"class":93},[76,93739,974],{"class":250},[76,93741,578],{"class":93},[76,93743,494],{"class":250},[76,93745,4729],{"class":93},[76,93747,93748],{"class":78,"line":97},[76,93749,93750],{"class":93},"np.unique(a)\n",[76,93752,93753],{"class":78,"line":103},[76,93754,93634],{"class":82},[76,93756,93757],{"class":78,"line":1273},[76,93758,93759],{"class":82},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93761,93762],{},"升序形式排序",[140,93764,93766],{"id":93765},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[67,93768,93770],{"className":69,"code":93769,"language":71,"meta":58,"style":58},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[73,93771,93772,93820,93825],{"__ignoreMap":58},[76,93773,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808,93810,93812,93814,93816,93818],{"class":78,"line":79},[76,93775,439],{"class":93},[76,93777,247],{"class":89},[76,93779,93094],{"class":93},[76,93781,418],{"class":250},[76,93783,578],{"class":93},[76,93785,278],{"class":250},[76,93787,578],{"class":93},[76,93789,272],{"class":250},[76,93791,578],{"class":93},[76,93793,698],{"class":250},[76,93795,578],{"class":93},[76,93797,272],{"class":250},[76,93799,578],{"class":93},[76,93801,646],{"class":250},[76,93803,578],{"class":93},[76,93805,398],{"class":250},[76,93807,578],{"class":93},[76,93809,392],{"class":250},[76,93811,578],{"class":93},[76,93813,974],{"class":250},[76,93815,578],{"class":93},[76,93817,494],{"class":250},[76,93819,4729],{"class":93},[76,93821,93822],{"class":78,"line":86},[76,93823,93824],{"class":82},"#返回数组中非零元素的索引\n",[76,93826,93827],{"class":78,"line":97},[76,93828,93829],{"class":93},"np.nonzero(a)\n",[140,93831,93833],{"id":93832},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[67,93835,93837],{"className":69,"code":93836,"language":71,"meta":58,"style":58},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[73,93838,93839,93887,93892],{"__ignoreMap":58},[76,93840,93841,93843,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869,93871,93873,93875,93877,93879,93881,93883,93885],{"class":78,"line":79},[76,93842,439],{"class":93},[76,93844,247],{"class":89},[76,93846,93094],{"class":93},[76,93848,418],{"class":250},[76,93850,578],{"class":93},[76,93852,278],{"class":250},[76,93854,578],{"class":93},[76,93856,272],{"class":250},[76,93858,578],{"class":93},[76,93860,698],{"class":250},[76,93862,578],{"class":93},[76,93864,272],{"class":250},[76,93866,578],{"class":93},[76,93868,646],{"class":250},[76,93870,578],{"class":93},[76,93872,398],{"class":250},[76,93874,578],{"class":93},[76,93876,392],{"class":250},[76,93878,578],{"class":93},[76,93880,974],{"class":250},[76,93882,578],{"class":93},[76,93884,494],{"class":250},[76,93886,4729],{"class":93},[76,93888,93889],{"class":78,"line":86},[76,93890,93891],{"class":82},"#计算一组数中最大值与最小值的差，可指定轴\n",[76,93893,93894],{"class":78,"line":97},[76,93895,93896],{"class":93},"np.ptp(a)\n",[117,93898,93899],{},"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":58,"searchDepth":86,"depth":86,"links":93901},[93902,93903,93904,93905,93906,93907,93908,93909,93910,93911,93912],{"id":93164,"depth":86,"text":93165},{"id":93207,"depth":86,"text":93208},{"id":93315,"depth":86,"text":93316},{"id":93409,"depth":86,"text":93410},{"id":93449,"depth":86,"text":93450},{"id":93522,"depth":86,"text":93523},{"id":93590,"depth":86,"text":93591},{"id":93642,"depth":86,"text":93643},{"id":93686,"depth":86,"text":93687},{"id":93765,"depth":86,"text":93766},{"id":93832,"depth":86,"text":93833},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93150,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93919,"title":93920,"body":93921,"description":122,"extension":123,"meta":94576,"navigation":125,"path":94577,"seo":94578,"stem":94579,"__hash__":94580},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93922,"toc":94564},[93923,93926,93930,93933,94149,94153,94156,94365,94369,94435,94440,94444,94447,94450,94488,94492,94495,94500,94504,94507,94510,94515,94519,94522,94526,94529,94532,94537,94541,94544,94547,94552,94556,94561],[10,93924,93920],{"id":93925},"_12其他常用函数",[140,93927,93929],{"id":93928},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93931,93932],{},"将数组的数据按照行列复制扩展",[67,93934,93936],{"className":69,"code":93935,"language":71,"meta":58,"style":58},"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",[73,93937,93938,93954,93963,93967,93972,93977,93990,93994,93999,94004,94009,94013,94018,94042,94054,94058,94062,94067,94072,94077,94082,94086,94099,94103,94107,94112,94117,94122,94127,94132,94136,94140,94145],{"__ignoreMap":58},[76,93939,93940,93942,93944,93946,93948,93950,93952],{"class":78,"line":79},[76,93941,439],{"class":93},[76,93943,247],{"class":89},[76,93945,93072],{"class":93},[76,93947,418],{"class":250},[76,93949,578],{"class":93},[76,93951,520],{"class":250},[76,93953,208],{"class":93},[76,93955,93956,93959,93961],{"class":78,"line":86},[76,93957,93958],{"class":93},"np.tile(a,",[76,93960,278],{"class":250},[76,93962,208],{"class":93},[76,93964,93965],{"class":78,"line":97},[76,93966,93634],{"class":82},[76,93968,93969],{"class":78,"line":103},[76,93970,93971],{"class":82},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[76,93973,93974],{"class":78,"line":1273},[76,93975,93976],{"class":82},"#行复制两次，列复制三次\n",[76,93978,93979,93982,93984,93986,93988],{"class":78,"line":1287},[76,93980,93981],{"class":93},"np.tile(a,(",[76,93983,278],{"class":250},[76,93985,578],{"class":93},[76,93987,272],{"class":250},[76,93989,30567],{"class":93},[76,93991,93992],{"class":78,"line":1293},[76,93993,93634],{"class":82},[76,93995,93996],{"class":78,"line":1384},[76,93997,93998],{"class":305},"'''\n",[76,94000,94001],{"class":78,"line":1390},[76,94002,94003],{"class":305},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[76,94005,94006],{"class":78,"line":1402},[76,94007,94008],{"class":305},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[76,94010,94011],{"class":78,"line":1684},[76,94012,93998],{"class":305},[76,94014,94015],{"class":78,"line":1689},[76,94016,94017],{"class":82},"#创建二维数组\n",[76,94019,94020,94022,94024,94026,94028,94030,94032,94034,94036,94038,94040],{"class":78,"line":1695},[76,94021,93376],{"class":93},[76,94023,247],{"class":89},[76,94025,93072],{"class":93},[76,94027,418],{"class":250},[76,94029,578],{"class":93},[76,94031,723],{"class":250},[76,94033,93077],{"class":93},[76,94035,494],{"class":250},[76,94037,578],{"class":93},[76,94039,272],{"class":250},[76,94041,208],{"class":93},[76,94043,94044,94047,94049,94051],{"class":78,"line":1700},[76,94045,94046],{"class":93},"np.tile(aa,",[76,94048,278],{"class":250},[76,94050,629],{"class":93},[76,94052,94053],{"class":82},"#一个数的时候就是行\n",[76,94055,94056],{"class":78,"line":1714},[76,94057,93634],{"class":82},[76,94059,94060],{"class":78,"line":1719},[76,94061,93998],{"class":305},[76,94063,94064],{"class":78,"line":1725},[76,94065,94066],{"class":305},"array([[ 1,  2,  3,  1,  2,  3],\n",[76,94068,94069],{"class":78,"line":1746},[76,94070,94071],{"class":305},"       [ 4,  5,  6,  4,  5,  6],\n",[76,94073,94074],{"class":78,"line":1751},[76,94075,94076],{"class":305},"       [ 7,  8,  9,  7,  8,  9],\n",[76,94078,94079],{"class":78,"line":1765},[76,94080,94081],{"class":305},"       [10, 11, 12, 10, 11, 12]])\n",[76,94083,94084],{"class":78,"line":1770},[76,94085,93998],{"class":305},[76,94087,94088,94091,94093,94095,94097],{"class":78,"line":1799},[76,94089,94090],{"class":93},"np.tile(aa,(",[76,94092,278],{"class":250},[76,94094,578],{"class":93},[76,94096,272],{"class":250},[76,94098,30567],{"class":93},[76,94100,94101],{"class":78,"line":1804},[76,94102,93634],{"class":82},[76,94104,94105],{"class":78,"line":1821},[76,94106,93998],{"class":305},[76,94108,94109],{"class":78,"line":1826},[76,94110,94111],{"class":305},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[76,94113,94114],{"class":78,"line":1831},[76,94115,94116],{"class":305},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[76,94118,94119],{"class":78,"line":1836},[76,94120,94121],{"class":305},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[76,94123,94124],{"class":78,"line":1850},[76,94125,94126],{"class":305},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[76,94128,94129],{"class":78,"line":1855},[76,94130,94131],{"class":305},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[76,94133,94134],{"class":78,"line":2649},[76,94135,94116],{"class":305},[76,94137,94138],{"class":78,"line":2663},[76,94139,94121],{"class":305},[76,94141,94142],{"class":78,"line":2671},[76,94143,94144],{"class":305},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[76,94146,94147],{"class":78,"line":2676},[76,94148,93998],{"class":305},[140,94150,94152],{"id":94151},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94154,94155],{},"repeat()将数组中的每个元素重复若干次",[67,94157,94159],{"className":69,"code":94158,"language":71,"meta":58,"style":58},"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",[73,94160,94161,94177,94186,94190,94195,94219,94224,94233,94237,94242,94246,94251,94267,94271,94275,94280,94285,94290,94294,94299,94303,94308,94313,94317,94333,94337,94341,94346,94351,94356,94361],{"__ignoreMap":58},[76,94162,94163,94165,94167,94169,94171,94173,94175],{"class":78,"line":79},[76,94164,439],{"class":93},[76,94166,247],{"class":89},[76,94168,93072],{"class":93},[76,94170,418],{"class":250},[76,94172,578],{"class":93},[76,94174,520],{"class":250},[76,94176,208],{"class":93},[76,94178,94179,94182,94184],{"class":78,"line":86},[76,94180,94181],{"class":93},"np.repeat(a,",[76,94183,272],{"class":250},[76,94185,208],{"class":93},[76,94187,94188],{"class":78,"line":97},[76,94189,93634],{"class":82},[76,94191,94192],{"class":78,"line":103},[76,94193,94194],{"class":82},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[76,94196,94197,94199,94201,94203,94205,94207,94209,94211,94213,94215,94217],{"class":78,"line":1273},[76,94198,93376],{"class":93},[76,94200,247],{"class":89},[76,94202,93072],{"class":93},[76,94204,418],{"class":250},[76,94206,578],{"class":93},[76,94208,723],{"class":250},[76,94210,93077],{"class":93},[76,94212,494],{"class":250},[76,94214,578],{"class":93},[76,94216,272],{"class":250},[76,94218,208],{"class":93},[76,94220,94221],{"class":78,"line":1287},[76,94222,94223],{"class":82},"#这个重复之后二维变成一维\n",[76,94225,94226,94229,94231],{"class":78,"line":1293},[76,94227,94228],{"class":93},"np.repeat(aa,",[76,94230,278],{"class":250},[76,94232,208],{"class":93},[76,94234,94235],{"class":78,"line":1384},[76,94236,93998],{"class":305},[76,94238,94239],{"class":78,"line":1390},[76,94240,94241],{"class":305},"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",[76,94243,94244],{"class":78,"line":1402},[76,94245,93998],{"class":305},[76,94247,94248],{"class":78,"line":1684},[76,94249,94250],{"class":82},"#指定axis\n",[76,94252,94253,94255,94257,94259,94261,94263,94265],{"class":78,"line":1689},[76,94254,94228],{"class":93},[76,94256,278],{"class":250},[76,94258,578],{"class":93},[76,94260,47584],{"class":5288},[76,94262,247],{"class":89},[76,94264,392],{"class":250},[76,94266,208],{"class":93},[76,94268,94269],{"class":78,"line":1695},[76,94270,93634],{"class":82},[76,94272,94273],{"class":78,"line":1700},[76,94274,93998],{"class":305},[76,94276,94277],{"class":78,"line":1714},[76,94278,94279],{"class":305},"array([[ 1,  2,  3],\n",[76,94281,94282],{"class":78,"line":1719},[76,94283,94284],{"class":305},"       [ 1,  2,  3],\n",[76,94286,94287],{"class":78,"line":1725},[76,94288,94289],{"class":305},"       [ 4,  5,  6],\n",[76,94291,94292],{"class":78,"line":1746},[76,94293,94289],{"class":305},[76,94295,94296],{"class":78,"line":1751},[76,94297,94298],{"class":305},"       [ 7,  8,  9],\n",[76,94300,94301],{"class":78,"line":1765},[76,94302,94298],{"class":305},[76,94304,94305],{"class":78,"line":1770},[76,94306,94307],{"class":305},"       [10, 11, 12],\n",[76,94309,94310],{"class":78,"line":1799},[76,94311,94312],{"class":305},"       [10, 11, 12]])\n",[76,94314,94315],{"class":78,"line":1804},[76,94316,93998],{"class":305},[76,94318,94319,94321,94323,94325,94327,94329,94331],{"class":78,"line":1821},[76,94320,94228],{"class":93},[76,94322,278],{"class":250},[76,94324,578],{"class":93},[76,94326,47584],{"class":5288},[76,94328,247],{"class":89},[76,94330,418],{"class":250},[76,94332,208],{"class":93},[76,94334,94335],{"class":78,"line":1826},[76,94336,93634],{"class":82},[76,94338,94339],{"class":78,"line":1831},[76,94340,93998],{"class":305},[76,94342,94343],{"class":78,"line":1836},[76,94344,94345],{"class":305},"array([[ 1,  1,  2,  2,  3,  3],\n",[76,94347,94348],{"class":78,"line":1850},[76,94349,94350],{"class":305},"       [ 4,  4,  5,  5,  6,  6],\n",[76,94352,94353],{"class":78,"line":1855},[76,94354,94355],{"class":305},"       [ 7,  7,  8,  8,  9,  9],\n",[76,94357,94358],{"class":78,"line":2649},[76,94359,94360],{"class":305},"       [10, 10, 11, 11, 12, 12]])\n",[76,94362,94363],{"class":78,"line":2663},[76,94364,93998],{"class":305},[140,94366,94368],{"id":94367},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[67,94370,94372],{"className":69,"code":94371,"language":71,"meta":58,"style":58},"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",[73,94373,94374,94390,94395,94407,94411,94416,94426,94430],{"__ignoreMap":58},[76,94375,94376,94378,94380,94382,94384,94386,94388],{"class":78,"line":79},[76,94377,439],{"class":93},[76,94379,247],{"class":89},[76,94381,93072],{"class":93},[76,94383,418],{"class":250},[76,94385,578],{"class":93},[76,94387,520],{"class":250},[76,94389,208],{"class":93},[76,94391,94392],{"class":78,"line":86},[76,94393,94394],{"class":82},"#array([，2，3，4])\n",[76,94396,94397,94400,94402,94404],{"class":78,"line":97},[76,94398,94399],{"class":93},"np.roll(a,",[76,94401,278],{"class":250},[76,94403,629],{"class":93},[76,94405,94406],{"class":82},"#传正数向后调多少位，传负数向前调多少位\n",[76,94408,94409],{"class":78,"line":103},[76,94410,93634],{"class":82},[76,94412,94413],{"class":78,"line":1273},[76,94414,94415],{"class":82},"#array([3, 4, 1, 2])\n",[76,94417,94418,94420,94422,94424],{"class":78,"line":1287},[76,94419,94399],{"class":93},[76,94421,112],{"class":89},[76,94423,418],{"class":250},[76,94425,208],{"class":93},[76,94427,94428],{"class":78,"line":1293},[76,94429,93634],{"class":82},[76,94431,94432],{"class":78,"line":1384},[76,94433,94434],{"class":82},"#array([2, 3, 4, 1])\n",[14,94436,94437],{},[56,94438],{"alt":58,"src":94439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[140,94441,94443],{"id":94442},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94445,94446],{},"resize()重新调整数组的大小",[14,94448,94449],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[67,94451,94453],{"className":69,"code":94452,"language":71,"meta":58,"style":58},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[73,94454,94455,94460,94473],{"__ignoreMap":58},[76,94456,94457],{"class":78,"line":79},[76,94458,94459],{"class":82},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[76,94461,94462,94465,94467,94469,94471],{"class":78,"line":86},[76,94463,94464],{"class":93},"np.resize(aa,(",[76,94466,278],{"class":250},[76,94468,578],{"class":93},[76,94470,544],{"class":250},[76,94472,30567],{"class":93},[76,94474,94475,94477,94479,94481,94483,94485],{"class":78,"line":97},[76,94476,94464],{"class":93},[76,94478,278],{"class":250},[76,94480,578],{"class":93},[76,94482,620],{"class":250},[76,94484,82841],{"class":93},[76,94486,94487],{"class":82},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[140,94489,94491],{"id":94490},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94493,94494],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94496,94497],{},[56,94498],{"alt":58,"src":94499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[140,94501,94503],{"id":94502},"_126-保存加载文件","12.6 保存加载文件",[14,94505,94506],{},"savetxt():将数据保存到txt文件中",[14,94508,94509],{},"loadtxt():从文件加载数据",[14,94511,94512],{},[56,94513],{"alt":58,"src":94514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[140,94516,94518],{"id":94517},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94520,94521],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[140,94523,94525],{"id":94524},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94527,94528],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94530,94531],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94533,94534],{},[56,94535],{"alt":58,"src":94536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[140,94538,94540],{"id":94539},"_129-where语句","12.9 where语句",[14,94542,94543],{},"np.where(条件,x,y)",[14,94545,94546],{},"如果条件为True,对应值为x,否则对应值为y",[14,94548,94549],{},[56,94550],{"alt":58,"src":94551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[140,94553,94555],{"id":94554},"_1210-dot矩阵","12.10 dot()矩阵",[14,94557,94558],{},[56,94559],{"alt":58,"src":94560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[117,94562,94563],{},"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":58,"searchDepth":86,"depth":86,"links":94565},[94566,94567,94568,94569,94570,94571,94572,94573,94574,94575],{"id":93928,"depth":86,"text":93929},{"id":94151,"depth":86,"text":94152},{"id":94367,"depth":86,"text":94368},{"id":94442,"depth":86,"text":94443},{"id":94490,"depth":86,"text":94491},{"id":94502,"depth":86,"text":94503},{"id":94517,"depth":86,"text":94518},{"id":94524,"depth":86,"text":94525},{"id":94539,"depth":86,"text":94540},{"id":94554,"depth":86,"text":94555},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93920,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94582,"title":94583,"body":94584,"description":122,"extension":123,"meta":94937,"navigation":125,"path":94938,"seo":94939,"stem":94940,"__hash__":94941},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94585,"toc":94935},[94586,94589,94592,94595,94598,94601,94666,94668,94932],[10,94587,94583],{"id":94588},"_13数组排序",[14,94590,94591],{},"排序主要用到的方法是np.sort和np.argsort",[14,94593,94594],{},"其中np.sort()对数组直接排序",[14,94596,94597],{},"而np.argsort()是返回排序后的原始索引",[14,94599,94600],{},"①一维数组",[67,94602,94604],{"className":69,"code":94603,"language":71,"meta":58,"style":58},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[73,94605,94606,94610,94650,94658],{"__ignoreMap":58},[76,94607,94608],{"class":78,"line":79},[76,94609,93175],{"class":82},[76,94611,94612,94614,94616,94618,94620,94622,94624,94626,94628,94630,94632,94634,94636,94638,94640,94642,94644,94646,94648],{"class":78,"line":86},[76,94613,439],{"class":93},[76,94615,247],{"class":89},[76,94617,93094],{"class":93},[76,94619,272],{"class":250},[76,94621,578],{"class":93},[76,94623,698],{"class":250},[76,94625,578],{"class":93},[76,94627,595],{"class":250},[76,94629,578],{"class":93},[76,94631,974],{"class":250},[76,94633,578],{"class":93},[76,94635,480],{"class":250},[76,94637,578],{"class":93},[76,94639,1092],{"class":250},[76,94641,578],{"class":93},[76,94643,544],{"class":250},[76,94645,578],{"class":93},[76,94647,646],{"class":250},[76,94649,4729],{"class":93},[76,94651,94652,94655],{"class":78,"line":97},[76,94653,94654],{"class":93},"np.sort(a)",[76,94656,94657],{"class":82},"#升序排序\n",[76,94659,94660,94663],{"class":78,"line":103},[76,94661,94662],{"class":93},"np.argsort(a)",[76,94664,94665],{"class":82},"#按照元素大小来索引排序\n",[14,94667,93361],{},[67,94669,94671],{"className":69,"code":94670,"language":71,"meta":58,"style":58},"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",[73,94672,94673,94685,94711,94716,94720,94725,94730,94735,94740,94744,94752,94756,94761,94766,94771,94776,94780,94785,94798,94802,94807,94812,94817,94822,94826,94831,94843,94847,94851,94855,94859,94863,94867,94872,94887,94892,94901,94906,94910,94914,94919,94923,94928],{"__ignoreMap":58},[76,94674,94675,94678,94680,94682],{"class":78,"line":79},[76,94676,94677],{"class":93},"np.random.seed(",[76,94679,392],{"class":250},[76,94681,629],{"class":93},[76,94683,94684],{"class":82},"#保证每次值一样\n",[76,94686,94687,94689,94691,94693,94695,94697,94699,94701,94703,94705,94707,94709],{"class":78,"line":86},[76,94688,93376],{"class":93},[76,94690,247],{"class":89},[76,94692,93184],{"class":93},[76,94694,512],{"class":250},[76,94696,578],{"class":93},[76,94698,31566],{"class":5288},[76,94700,247],{"class":89},[76,94702,202],{"class":93},[76,94704,494],{"class":250},[76,94706,578],{"class":93},[76,94708,544],{"class":250},[76,94710,30567],{"class":93},[76,94712,94713],{"class":78,"line":97},[76,94714,94715],{"class":82},"#原数组：\n",[76,94717,94718],{"class":78,"line":103},[76,94719,93998],{"class":305},[76,94721,94722],{"class":78,"line":1273},[76,94723,94724],{"class":305},"array([[44, 47, 64, 67, 67,  9],\n",[76,94726,94727],{"class":78,"line":1287},[76,94728,94729],{"class":305},"       [83, 21, 36, 87, 70, 88],\n",[76,94731,94732],{"class":78,"line":1293},[76,94733,94734],{"class":305},"       [88, 12, 58, 65, 39, 87],\n",[76,94736,94737],{"class":78,"line":1384},[76,94738,94739],{"class":305},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[76,94741,94742],{"class":78,"line":1390},[76,94743,93998],{"class":305},[76,94745,94746,94749],{"class":78,"line":1402},[76,94747,94748],{"class":93},"np.sort(aa)",[76,94750,94751],{"class":82},"#每行进行了排序\n",[76,94753,94754],{"class":78,"line":1684},[76,94755,93998],{"class":305},[76,94757,94758],{"class":78,"line":1689},[76,94759,94760],{"class":305},"array([[ 9, 44, 47, 64, 67, 67],\n",[76,94762,94763],{"class":78,"line":1695},[76,94764,94765],{"class":305},"       [21, 36, 70, 83, 87, 88],\n",[76,94767,94768],{"class":78,"line":1700},[76,94769,94770],{"class":305},"       [12, 39, 58, 65, 87, 88],\n",[76,94772,94773],{"class":78,"line":1714},[76,94774,94775],{"class":305},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[76,94777,94778],{"class":78,"line":1719},[76,94779,93998],{"class":305},[76,94781,94782],{"class":78,"line":1725},[76,94783,94784],{"class":82},"#axis=0时\n",[76,94786,94787,94790,94792,94794,94796],{"class":78,"line":1746},[76,94788,94789],{"class":93},"np.sort(aa,",[76,94791,47584],{"class":5288},[76,94793,247],{"class":89},[76,94795,392],{"class":250},[76,94797,208],{"class":93},[76,94799,94800],{"class":78,"line":1751},[76,94801,93998],{"class":305},[76,94803,94804],{"class":78,"line":1765},[76,94805,94806],{"class":305},"array([[44, 12, 36, 37, 25,  9],\n",[76,94808,94809],{"class":78,"line":1770},[76,94810,94811],{"class":305},"       [46, 21, 58, 65, 39, 77],\n",[76,94813,94814],{"class":78,"line":1799},[76,94815,94816],{"class":305},"       [83, 47, 64, 67, 67, 87],\n",[76,94818,94819],{"class":78,"line":1804},[76,94820,94821],{"class":305},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[76,94823,94824],{"class":78,"line":1821},[76,94825,93998],{"class":305},[76,94827,94828],{"class":78,"line":1826},[76,94829,94830],{"class":82},"#axis=1时,为默认值\n",[76,94832,94833,94835,94837,94839,94841],{"class":78,"line":1831},[76,94834,94789],{"class":93},[76,94836,47584],{"class":5288},[76,94838,247],{"class":89},[76,94840,418],{"class":250},[76,94842,208],{"class":93},[76,94844,94845],{"class":78,"line":1836},[76,94846,93998],{"class":305},[76,94848,94849],{"class":78,"line":1850},[76,94850,94760],{"class":305},[76,94852,94853],{"class":78,"line":1855},[76,94854,94765],{"class":305},[76,94856,94857],{"class":78,"line":2649},[76,94858,94770],{"class":305},[76,94860,94861],{"class":78,"line":2663},[76,94862,94775],{"class":305},[76,94864,94865],{"class":78,"line":2671},[76,94866,93998],{"class":305},[76,94868,94869],{"class":78,"line":2676},[76,94870,94871],{"class":82},"#按最后一列排序\n",[76,94873,94874,94876,94878,94881,94883,94885],{"class":78,"line":2682},[76,94875,464],{"class":93},[76,94877,247],{"class":89},[76,94879,94880],{"class":93},"aa[:,",[76,94882,112],{"class":89},[76,94884,418],{"class":250},[76,94886,33316],{"class":93},[76,94888,94889],{"class":78,"line":2688},[76,94890,94891],{"class":82},"#获取最后一列排好序的索引\n",[76,94893,94894,94896,94898],{"class":78,"line":2693},[76,94895,74128],{"class":93},[76,94897,247],{"class":89},[76,94899,94900],{"class":93},"np.argsort(b)\n",[76,94902,94903],{"class":78,"line":8020},[76,94904,94905],{"class":93},"aa[index]\n",[76,94907,94908],{"class":78,"line":8044},[76,94909,93998],{"class":305},[76,94911,94912],{"class":78,"line":8049},[76,94913,94724],{"class":305},[76,94915,94916],{"class":78,"line":8055},[76,94917,94918],{"class":305},"       [46, 88, 81, 37, 25, 77],\n",[76,94920,94921],{"class":78,"line":8082},[76,94922,94734],{"class":305},[76,94924,94925],{"class":78,"line":8087},[76,94926,94927],{"class":305},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[76,94929,94930],{"class":78,"line":8093},[76,94931,93998],{"class":305},[117,94933,94934],{},"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":58,"searchDepth":86,"depth":86,"links":94936},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94583,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94943,"title":94944,"body":94945,"description":122,"extension":123,"meta":94975,"navigation":125,"path":94976,"seo":94977,"stem":94978,"__hash__":94979},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94946,"toc":94973},[94947,94950,94953,94956,94959,94962,94965,94968],[10,94948,94944],{"id":94949},"_14广播机制",[14,94951,94952],{},"广播的规则：",[14,94954,94955],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94957,94958],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94960,94961],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94963,94964],{},"3.如果没有维度形状为1，则会引发异常",[14,94966,94967],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94969,94970],{},[56,94971],{"alt":58,"src":94972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":58,"searchDepth":86,"depth":86,"links":94974},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94944,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94981,"title":94982,"body":94983,"description":122,"extension":123,"meta":95081,"navigation":125,"path":95082,"seo":95083,"stem":95084,"__hash__":95085},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94984,"toc":95079},[94985,94988,94991,95076],[10,94986,94982],{"id":94987},"_15比较掩码",[14,94989,94990],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[67,94992,94994],{"className":69,"code":94993,"language":71,"meta":58,"style":58},"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",[73,94995,94996,95042,95053,95067,95071],{"__ignoreMap":58},[76,94997,94998,95000,95002,95005,95007,95009,95011,95013,95015,95017,95019,95021,95023,95025,95027,95029,95031,95033,95035,95037,95039],{"class":78,"line":79},[76,94999,439],{"class":93},[76,95001,247],{"class":89},[76,95003,95004],{"class":93},"np.array([[",[76,95006,418],{"class":250},[76,95008,578],{"class":93},[76,95010,278],{"class":250},[76,95012,578],{"class":93},[76,95014,272],{"class":250},[76,95016,48100],{"class":93},[76,95018,672],{"class":250},[76,95020,578],{"class":93},[76,95022,698],{"class":250},[76,95024,578],{"class":93},[76,95026,723],{"class":250},[76,95028,48100],{"class":93},[76,95030,924],{"class":250},[76,95032,578],{"class":93},[76,95034,949],{"class":250},[76,95036,578],{"class":93},[76,95038,974],{"class":250},[76,95040,95041],{"class":93},"]])\n",[76,95043,95044,95046,95048,95050],{"class":78,"line":86},[76,95045,439],{"class":93},[76,95047,1109],{"class":89},[76,95049,899],{"class":250},[76,95051,95052],{"class":82},"#结果是一个由True,False组成的数组\n",[76,95054,95055,95058,95060,95062,95064],{"class":78,"line":97},[76,95056,95057],{"class":93},"a[a",[76,95059,1109],{"class":89},[76,95061,899],{"class":250},[76,95063,1139],{"class":93},[76,95065,95066],{"class":82},"#小于20的元素会存到这个数组中\n",[76,95068,95069],{"class":78,"line":103},[76,95070,93634],{"class":82},[76,95072,95073],{"class":78,"line":1273},[76,95074,95075],{"class":82},"#array([ 1,  2,  3, 11, 12, 13])\n",[117,95077,95078],{},"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":58,"searchDepth":86,"depth":86,"links":95080},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94982,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95087,"title":95088,"body":95089,"description":122,"extension":123,"meta":95181,"navigation":125,"path":95182,"seo":95183,"stem":95184,"__hash__":95185},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95090,"toc":95179},[95091,95094,95097,95100,95103,95106,95171,95176],[10,95092,95088],{"id":95093},"_16魔法命令time",[14,95095,95096],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95098,95099],{},"%:行模式",[14,95101,95102],{},"%%:单元格模式",[14,95104,95105],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[67,95107,95109],{"className":69,"code":95108,"language":71,"meta":58,"style":58},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[73,95110,95111,95116,95123,95128,95137,95150,95154,95162],{"__ignoreMap":58},[76,95112,95113],{"class":78,"line":79},[76,95114,95115],{"class":82},"#程序执行时间\n",[76,95117,95118,95120],{"class":78,"line":86},[76,95119,90],{"class":89},[76,95121,95122],{"class":93}," time \n",[76,95124,95125],{"class":78,"line":97},[76,95126,95127],{"class":82},"#获取时间\n",[76,95129,95130,95133,95135],{"class":78,"line":103},[76,95131,95132],{"class":93},"start",[76,95134,247],{"class":89},[76,95136,32488],{"class":93},[76,95138,95139,95142,95145,95147],{"class":78,"line":1273},[76,95140,95141],{"class":93},"time.sleep(",[76,95143,95144],{"class":250},"0.4",[76,95146,629],{"class":93},[76,95148,95149],{"class":82},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[76,95151,95152],{"class":78,"line":1287},[76,95153,95127],{"class":82},[76,95155,95156,95158,95160],{"class":78,"line":1293},[76,95157,45871],{"class":93},[76,95159,247],{"class":89},[76,95161,32488],{"class":93},[76,95163,95164,95166,95168],{"class":78,"line":1384},[76,95165,45871],{"class":93},[76,95167,112],{"class":89},[76,95169,95170],{"class":93},"start\n",[14,95172,95173],{},[56,95174],{"alt":58,"src":95175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[117,95177,95178],{},"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":58,"searchDepth":86,"depth":86,"links":95180},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95088,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95187,"title":95188,"body":95189,"description":122,"extension":123,"meta":95224,"navigation":125,"path":95225,"seo":95226,"stem":95227,"__hash__":95228},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95190,"toc":95222},[95191,95194,95197,95200,95203,95206,95209,95212,95217],[10,95192,95188],{"id":95193},"_17魔法命令timeit",[14,95195,95196],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95198,95199],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95201,95202],{},"单元格模式：",[14,95204,95205],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95207,95208],{},"初始化语句执行次数由轮数来决定",[14,95210,95211],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95213,95214],{},[56,95215],{"alt":58,"src":95216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95218,95219],{},[56,95220],{"alt":58,"src":95221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":58,"searchDepth":86,"depth":86,"links":95223},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95188,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95230,"title":95231,"body":95232,"description":122,"extension":123,"meta":95250,"navigation":125,"path":95251,"seo":95252,"stem":95253,"__hash__":95254},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95233,"toc":95248},[95234,95237,95240,95243],[10,95235,95231],{"id":95236},"_18魔法命令writefile和run",[14,95238,95239],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95241,95242],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95244,95245],{},[56,95246],{"alt":58,"src":95247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":58,"searchDepth":86,"depth":86,"links":95249},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95231,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95256,"title":95257,"body":95258,"description":122,"extension":123,"meta":95310,"navigation":125,"path":95311,"seo":95312,"stem":95313,"__hash__":95314},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95259,"toc":95308},[95260,95263,95266,95268,95271,95273,95278,95281,95284,95287,95290,95293,95296,95299,95302,95305],[10,95261,95257],{"id":95262},"_19魔法命令memit",[14,95264,95265],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95267,24672],{},[14,95269,95270],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95272,46],{},[14,95274,95275],{},[56,95276],{"alt":58,"src":95277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95279,95280],{},"补充：",[14,95282,95283],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95285,95286],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95288,95289],{},"解决方法：",[14,95291,95292],{},"1.cmd",[14,95294,95295],{},"2.依次输入以下代码：",[14,95297,95298],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95300,95301],{},"pip install --upgrade ipython",[14,95303,95304],{},"#升级 memory_profiler 和 setuptools",[14,95306,95307],{},"pip install --upgrade memory_profiler setuptools",{"title":58,"searchDepth":86,"depth":86,"links":95309},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95257,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95316,"title":95317,"body":95318,"description":122,"extension":123,"meta":96964,"navigation":125,"path":96965,"seo":96966,"stem":96967,"__hash__":96968},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95319,"toc":96934},[95320,95323,95327,95331,95392,95395,95400,95404,95409,95414,95419,95424,95427,95432,95436,95440,95473,95476,95479,95482,95534,95537,95573,95576,95618,95622,95643,95645,95682,95684,95689,95691,95696,95700,95703,95731,95735,95739,95792,95796,95888,95892,95896,95899,95904,95908,95933,95938,95942,95945,95948,95951,95954,95957,95960,95963,95975,95979,95983,95986,96018,96021,96044,96047,96073,96076,96102,96105,96139,96142,96204,96208,96211,96215,96218,96244,96247,96250,96255,96258,96327,96329,96334,96395,96398,96409,96415,96420,96424,96427,96440,96444,96459,96461,96484,96486,96512,96515,96518,96521,96569,96571,96576,96580,96584,96611,96615,96642,96645,96650,96655,96745,96749,96807,96812,96815,96818,96860,96864,96920,96925,96928,96931],[10,95321,95317],{"id":95322},"_2创建数组",[140,95324,95326],{"id":95325},"_21-array函数创建数组","2.1 array()函数创建数组",[169,95328,95330],{"id":95329},"_221-函数语句","2.2.1 函数语句",[67,95332,95334],{"className":69,"code":95333,"language":71,"meta":58,"style":58},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[73,95335,95336],{"__ignoreMap":58},[76,95337,95338,95341,95344,95346,95348,95350,95352,95354,95357,95359,95362,95364,95367,95369,95371,95373,95376,95378,95381,95383,95386,95388,95390],{"class":78,"line":79},[76,95339,95340],{"class":93},"numpy.array(",[76,95342,95343],{"class":250},"object",[76,95345,12507],{"class":93},[76,95347,93570],{"class":5288},[76,95349,13636],{"class":89},[76,95351,39003],{"class":250},[76,95353,12507],{"class":93},[76,95355,95356],{"class":5288},"copy",[76,95358,13636],{"class":89},[76,95360,95361],{"class":250}," True",[76,95363,12507],{"class":93},[76,95365,95366],{"class":5288},"order",[76,95368,13636],{"class":89},[76,95370,39003],{"class":250},[76,95372,12507],{"class":93},[76,95374,95375],{"class":5288},"subok",[76,95377,13636],{"class":89},[76,95379,95380],{"class":250}," False",[76,95382,12507],{"class":93},[76,95384,95385],{"class":5288},"ndmin",[76,95387,13636],{"class":89},[76,95389,4165],{"class":250},[76,95391,208],{"class":93},[14,95393,95394],{},"参数：",[14,95396,95397],{},[56,95398],{"alt":58,"src":95399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[169,95401,95403],{"id":95402},"_222-实例","2.2.2 实例",[14,95405,95406],{},[56,95407],{"alt":58,"src":95408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95410,95411],{},[56,95412],{"alt":58,"src":95413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95415,95416],{},[56,95417],{"alt":58,"src":95418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95420,95421],{},[56,95422],{"alt":58,"src":95423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95425,95426],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95428,95429],{},[56,95430],{"alt":58,"src":95431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[140,95433,95435],{"id":95434},"_22-随机数创建数组","2.2 随机数创建数组",[169,95437,95439],{"id":95438},"_221-random语句","2.2.1 random语句",[67,95441,95443],{"className":69,"code":95442,"language":71,"meta":58,"style":58},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[73,95444,95445,95450,95455,95463,95468],{"__ignoreMap":58},[76,95446,95447],{"class":78,"line":79},[76,95448,95449],{"class":82},"#random.random()\n",[76,95451,95452],{"class":78,"line":86},[76,95453,95454],{"class":82},"#确定随机种子,就是每次运行结果是相同的\n",[76,95456,95457,95459,95461],{"class":78,"line":97},[76,95458,94677],{"class":93},[76,95460,392],{"class":250},[76,95462,208],{"class":93},[76,95464,95465],{"class":78,"line":103},[76,95466,95467],{"class":93},"np.random.random()\n",[76,95469,95470],{"class":78,"line":1273},[76,95471,95472],{"class":82},"#生成一个随机的数目\n",[14,95474,95475],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95477,95478],{},"可以指定数组形状 size",[14,95480,95481],{},"①生成一维数组",[67,95483,95485],{"className":69,"code":95484,"language":71,"meta":58,"style":58},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[73,95486,95487,95492,95505,95510,95526],{"__ignoreMap":58},[76,95488,95489],{"class":78,"line":79},[76,95490,95491],{"class":82},"#random.random(size())\n",[76,95493,95494,95497,95499,95501,95503],{"class":78,"line":86},[76,95495,95496],{"class":93},"np.random.random(",[76,95498,31566],{"class":5288},[76,95500,247],{"class":89},[76,95502,520],{"class":250},[76,95504,208],{"class":93},[76,95506,95507],{"class":78,"line":97},[76,95508,95509],{"class":82},"#生成一位的五个元素\n",[76,95511,95512,95514,95516,95518,95520,95522,95524],{"class":78,"line":103},[76,95513,439],{"class":93},[76,95515,247],{"class":89},[76,95517,95496],{"class":93},[76,95519,31566],{"class":5288},[76,95521,247],{"class":89},[76,95523,494],{"class":250},[76,95525,208],{"class":93},[76,95527,95528,95531],{"class":78,"line":1273},[76,95529,95530],{"class":93},"a.shape ",[76,95532,95533],{"class":82},"#输出数组形状\n",[14,95535,95536],{},"②生成二维数组",[67,95538,95540],{"className":69,"code":95539,"language":71,"meta":58,"style":58},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[73,95541,95542,95546,95568],{"__ignoreMap":58},[76,95543,95544],{"class":78,"line":79},[76,95545,93371],{"class":82},[76,95547,95548,95550,95552,95554,95556,95558,95560,95562,95564,95566],{"class":78,"line":86},[76,95549,93376],{"class":93},[76,95551,247],{"class":89},[76,95553,95496],{"class":93},[76,95555,31566],{"class":5288},[76,95557,247],{"class":89},[76,95559,202],{"class":93},[76,95561,494],{"class":250},[76,95563,578],{"class":93},[76,95565,520],{"class":250},[76,95567,30567],{"class":93},[76,95569,95570],{"class":78,"line":97},[76,95571,95572],{"class":82},"#生成四行五列的数组\n",[14,95574,95575],{},"③生成三维数组",[67,95577,95579],{"className":69,"code":95578,"language":71,"meta":58,"style":58},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[73,95580,95581,95586,95613],{"__ignoreMap":58},[76,95582,95583],{"class":78,"line":79},[76,95584,95585],{"class":82},"#三维数组\n",[76,95587,95588,95591,95593,95595,95597,95599,95601,95603,95605,95607,95609,95611],{"class":78,"line":86},[76,95589,95590],{"class":93},"aaa",[76,95592,247],{"class":89},[76,95594,95496],{"class":93},[76,95596,31566],{"class":5288},[76,95598,247],{"class":89},[76,95600,202],{"class":93},[76,95602,278],{"class":250},[76,95604,578],{"class":93},[76,95606,272],{"class":250},[76,95608,578],{"class":93},[76,95610,494],{"class":250},[76,95612,30567],{"class":93},[76,95614,95615],{"class":78,"line":97},[76,95616,95617],{"class":93},"aaa.shape\n",[169,95619,95621],{"id":95620},"_222-randint语句","2.2.2 randint语句",[67,95623,95625],{"className":69,"code":95624,"language":71,"meta":58,"style":58},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[73,95626,95627,95632],{"__ignoreMap":58},[76,95628,95629],{"class":78,"line":79},[76,95630,95631],{"class":82},"#生成随机的整数 random.randint(low,high,size)\n",[76,95633,95634,95636,95638,95640],{"class":78,"line":86},[76,95635,93184],{"class":93},[76,95637,520],{"class":250},[76,95639,13786],{"class":93},[76,95641,95642],{"class":82},"#0~5中的随机一个数\n",[14,95644,95481],{},[67,95646,95648],{"className":69,"code":95647,"language":71,"meta":58,"style":58},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[73,95649,95650,95655,95677],{"__ignoreMap":58},[76,95651,95652],{"class":78,"line":79},[76,95653,95654],{"class":82},"#一维\n",[76,95656,95657,95659,95661,95663,95665,95667,95669,95671,95673,95675],{"class":78,"line":86},[76,95658,93184],{"class":93},[76,95660,418],{"class":250},[76,95662,578],{"class":93},[76,95664,672],{"class":250},[76,95666,578],{"class":93},[76,95668,31566],{"class":5288},[76,95670,247],{"class":89},[76,95672,202],{"class":93},[76,95674,646],{"class":250},[76,95676,30567],{"class":93},[76,95678,95679],{"class":78,"line":97},[76,95680,95681],{"class":82},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95683,95536],{},[14,95685,95686],{},[56,95687],{"alt":58,"src":95688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95690,95575],{},[14,95692,95693],{},[56,95694],{"alt":58,"src":95695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[169,95697,95699],{"id":95698},"_222-rand语句","2.2.2 rand语句",[14,95701,95702],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[67,95704,95706],{"className":69,"code":95705,"language":71,"meta":58,"style":58},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[73,95707,95708,95721,95726],{"__ignoreMap":58},[76,95709,95710,95713,95715,95717,95719],{"class":78,"line":79},[76,95711,95712],{"class":93},"np.random.rand(",[76,95714,512],{"class":250},[76,95716,578],{"class":93},[76,95718,646],{"class":250},[76,95720,208],{"class":93},[76,95722,95723],{"class":78,"line":86},[76,95724,95725],{"class":82},"#第一个参数100：行数，表示有100个样本\n",[76,95727,95728],{"class":78,"line":97},[76,95729,95730],{"class":82},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[140,95732,95734],{"id":95733},"_23-arange创建数组","2.3 arange()创建数组",[169,95736,95738],{"id":95737},"_231-函数语句","2.3.1 函数语句",[67,95740,95742],{"className":69,"code":95741,"language":71,"meta":58,"style":58},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[73,95743,95744,95758,95763,95768,95773,95778,95783,95788],{"__ignoreMap":58},[76,95745,95746,95749,95751,95753,95756],{"class":78,"line":79},[76,95747,95748],{"class":93},"numpy.arange([start,] stop[, step], ",[76,95750,93570],{"class":5288},[76,95752,247],{"class":89},[76,95754,95755],{"class":250},"None",[76,95757,208],{"class":93},[76,95759,95760],{"class":78,"line":86},[76,95761,95762],{"class":82},"#参数\n",[76,95764,95765],{"class":78,"line":97},[76,95766,95767],{"class":305},"\"\"\"\n",[76,95769,95770],{"class":78,"line":103},[76,95771,95772],{"class":305},"start:起始值，可选，默认从 0 开始。\n",[76,95774,95775],{"class":78,"line":1273},[76,95776,95777],{"class":305},"stop:结束值（不包含该值）。\n",[76,95779,95780],{"class":78,"line":1287},[76,95781,95782],{"class":305},"step:步长，可选，默认是 1。可以为浮点数。\n",[76,95784,95785],{"class":78,"line":1293},[76,95786,95787],{"class":305},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[76,95789,95790],{"class":78,"line":1384},[76,95791,95767],{"class":305},[169,95793,95795],{"id":95794},"_232-实例","2.3.2 实例",[67,95797,95799],{"className":69,"code":95798,"language":71,"meta":58,"style":58},"#创建一维数组\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",[73,95800,95801,95805,95829,95834,95839,95843,95866,95870,95874,95879,95884],{"__ignoreMap":58},[76,95802,95803],{"class":78,"line":79},[76,95804,93175],{"class":82},[76,95806,95807,95809,95811,95813,95815,95817,95819,95821,95823,95825,95827],{"class":78,"line":86},[76,95808,93072],{"class":93},[76,95810,418],{"class":250},[76,95812,578],{"class":93},[76,95814,924],{"class":250},[76,95816,578],{"class":93},[76,95818,418],{"class":250},[76,95820,578],{"class":93},[76,95822,93570],{"class":5288},[76,95824,247],{"class":89},[76,95826,205],{"class":250},[76,95828,208],{"class":93},[76,95830,95831],{"class":78,"line":97},[76,95832,95833],{"class":82},"#输出结果：\n",[76,95835,95836],{"class":78,"line":103},[76,95837,95838],{"class":82},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[76,95840,95841],{"class":78,"line":1273},[76,95842,94017],{"class":82},[76,95844,95845,95848,95850,95852,95854,95857,95859,95861,95863],{"class":78,"line":1287},[76,95846,95847],{"class":93},"np.array([np.arange(",[76,95849,418],{"class":250},[76,95851,578],{"class":93},[76,95853,494],{"class":250},[76,95855,95856],{"class":93},"),np.arange(",[76,95858,494],{"class":250},[76,95860,578],{"class":93},[76,95862,569],{"class":250},[76,95864,95865],{"class":93},")])\n",[76,95867,95868],{"class":78,"line":1293},[76,95869,93634],{"class":82},[76,95871,95872],{"class":78,"line":1384},[76,95873,95767],{"class":305},[76,95875,95876],{"class":78,"line":1390},[76,95877,95878],{"class":305},"array([[1, 2, 3],\n",[76,95880,95881],{"class":78,"line":1402},[76,95882,95883],{"class":305},"       [4, 5, 6]])\n",[76,95885,95886],{"class":78,"line":1684},[76,95887,95767],{"class":305},[140,95889,95891],{"id":95890},"_24-生态分布","2.4 生态分布",[169,95893,95895],{"id":95894},"_241-标准正态分布","2.4.1 标准正态分布",[14,95897,95898],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95900,95901],{},[56,95902],{"alt":58,"src":95903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[169,95905,95907],{"id":95906},"_242-常规正态分布","2.4.2 常规正态分布",[67,95909,95911],{"className":69,"code":95910,"language":71,"meta":58,"style":58},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[73,95912,95913,95918,95923,95928],{"__ignoreMap":58},[76,95914,95915],{"class":78,"line":79},[76,95916,95917],{"class":93},"random.normal(loc,scale,size)也可以生成正态分布\n",[76,95919,95920],{"class":78,"line":86},[76,95921,95922],{"class":82},"#loc:期望\n",[76,95924,95925],{"class":78,"line":97},[76,95926,95927],{"class":82},"#scale:方差\n",[76,95929,95930],{"class":78,"line":103},[76,95931,95932],{"class":82},"#size:用于确定是几维的数列\n",[14,95934,95935],{},[56,95936],{"alt":58,"src":95937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[140,95939,95941],{"id":95940},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95943,95944],{},"ndim:秩，维度个数",[14,95946,95947],{},"size:数组元素的个数",[14,95949,95950],{},"shape:数组的形状",[14,95952,95953],{},"dtype:数组元素的类型",[14,95955,95956],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95958,95959],{},"他们都是属性，通过数组.属性的形式来确定",[14,95961,95962],{},"如果需要输出多个可以通过以下方式：",[67,95964,95966],{"className":69,"code":95965,"language":71,"meta":58,"style":58},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[73,95967,95968],{"__ignoreMap":58},[76,95969,95970,95972],{"class":78,"line":79},[76,95971,30485],{"class":250},[76,95973,95974],{"class":93},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[140,95976,95978],{"id":95977},"_26-其他方式创建数组","2.6 其他方式创建数组",[169,95980,95982],{"id":95981},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95984,95985],{},"①创建一维数组",[67,95987,95989],{"className":69,"code":95988,"language":71,"meta":58,"style":58},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[73,95990,95991,96000,96004,96009,96014],{"__ignoreMap":58},[76,95992,95993,95996,95998],{"class":78,"line":79},[76,95994,95995],{"class":93},"np.zeros(",[76,95997,646],{"class":250},[76,95999,208],{"class":93},[76,96001,96002],{"class":78,"line":86},[76,96003,95767],{"class":305},[76,96005,96006],{"class":78,"line":97},[76,96007,96008],{"class":305},"输出结果：\n",[76,96010,96011],{"class":78,"line":103},[76,96012,96013],{"class":305},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[76,96015,96016],{"class":78,"line":1273},[76,96017,95767],{"class":305},[14,96019,96020],{},"上方代码等价于：",[67,96022,96024],{"className":69,"code":96023,"language":71,"meta":58,"style":58},"np.zeros(shape=(10))#创建10个元素的0数组\n",[73,96025,96026],{"__ignoreMap":58},[76,96027,96028,96030,96033,96035,96037,96039,96041],{"class":78,"line":79},[76,96029,95995],{"class":93},[76,96031,96032],{"class":5288},"shape",[76,96034,247],{"class":89},[76,96036,202],{"class":93},[76,96038,646],{"class":250},[76,96040,82841],{"class":93},[76,96042,96043],{"class":82},"#创建10个元素的0数组\n",[14,96045,96046],{},"也可以指定类型",[67,96048,96050],{"className":69,"code":96049,"language":71,"meta":58,"style":58},"#指定类型\nnp.zeros(5,dtype=int)\n",[73,96051,96052,96057],{"__ignoreMap":58},[76,96053,96054],{"class":78,"line":79},[76,96055,96056],{"class":82},"#指定类型\n",[76,96058,96059,96061,96063,96065,96067,96069,96071],{"class":78,"line":86},[76,96060,95995],{"class":93},[76,96062,520],{"class":250},[76,96064,578],{"class":93},[76,96066,93570],{"class":5288},[76,96068,247],{"class":89},[76,96070,205],{"class":250},[76,96072,208],{"class":93},[14,96074,96075],{},"②创建二维数组",[67,96077,96079],{"className":69,"code":96078,"language":71,"meta":58,"style":58},"np.zeros((3,4),dtype=int)\n",[73,96080,96081],{"__ignoreMap":58},[76,96082,96083,96086,96088,96090,96092,96094,96096,96098,96100],{"class":78,"line":79},[76,96084,96085],{"class":93},"np.zeros((",[76,96087,272],{"class":250},[76,96089,578],{"class":93},[76,96091,494],{"class":250},[76,96093,42326],{"class":93},[76,96095,93570],{"class":5288},[76,96097,247],{"class":89},[76,96099,205],{"class":250},[76,96101,208],{"class":93},[14,96103,96104],{},"③创建三维数组",[67,96106,96108],{"className":69,"code":96107,"language":71,"meta":58,"style":58},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[73,96109,96110,96115],{"__ignoreMap":58},[76,96111,96112],{"class":78,"line":79},[76,96113,96114],{"class":82},"#创建三维数组\n",[76,96116,96117,96119,96121,96123,96125,96127,96129,96131,96133,96135,96137],{"class":78,"line":86},[76,96118,96085],{"class":93},[76,96120,272],{"class":250},[76,96122,578],{"class":93},[76,96124,494],{"class":250},[76,96126,578],{"class":93},[76,96128,520],{"class":250},[76,96130,42326],{"class":93},[76,96132,93570],{"class":5288},[76,96134,247],{"class":89},[76,96136,205],{"class":250},[76,96138,208],{"class":93},[14,96140,96141],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[67,96143,96145],{"className":69,"code":96144,"language":71,"meta":58,"style":58},"#使用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",[73,96146,96147,96152,96167,96172,96177,96199],{"__ignoreMap":58},[76,96148,96149],{"class":78,"line":79},[76,96150,96151],{"class":82},"#使用zeros_like将创建的一维数组变成全0的数组\n",[76,96153,96154,96156,96158,96160,96162,96164],{"class":78,"line":86},[76,96155,439],{"class":93},[76,96157,247],{"class":89},[76,96159,93072],{"class":93},[76,96161,494],{"class":250},[76,96163,629],{"class":93},[76,96165,96166],{"class":82},"#这个得到的结果：一维数组0，1，2，3\n",[76,96168,96169],{"class":78,"line":97},[76,96170,96171],{"class":93},"np.zeros_like(a)\n",[76,96173,96174],{"class":78,"line":103},[76,96175,96176],{"class":82},"#使用zeros_like将创建的二维数组变成全0的数组\n",[76,96178,96179,96181,96183,96185,96187,96189,96191,96193,96195,96197],{"class":78,"line":1273},[76,96180,93376],{"class":93},[76,96182,247],{"class":89},[76,96184,95496],{"class":93},[76,96186,31566],{"class":5288},[76,96188,247],{"class":89},[76,96190,202],{"class":93},[76,96192,494],{"class":250},[76,96194,578],{"class":93},[76,96196,520],{"class":250},[76,96198,30567],{"class":93},[76,96200,96201],{"class":78,"line":1287},[76,96202,96203],{"class":93},"np.zeros_like(aa)\n",[169,96205,96207],{"id":96206},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96209,96210],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[169,96212,96214],{"id":96213},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96216,96217],{},"①empty()用法",[67,96219,96221],{"className":69,"code":96220,"language":71,"meta":58,"style":58},"numpy.empty(shape,dtype=float,order='c')\n",[73,96222,96223],{"__ignoreMap":58},[76,96224,96225,96228,96230,96232,96234,96236,96238,96240,96242],{"class":78,"line":79},[76,96226,96227],{"class":93},"numpy.empty(shape,",[76,96229,93570],{"class":5288},[76,96231,247],{"class":89},[76,96233,241],{"class":250},[76,96235,578],{"class":93},[76,96237,95366],{"class":5288},[76,96239,247],{"class":89},[76,96241,76098],{"class":305},[76,96243,208],{"class":93},[14,96245,96246],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96248,96249],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96251,96252],{},[56,96253],{"alt":58,"src":96254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96256,96257],{},"②empty()用法",[67,96259,96261],{"className":69,"code":96260,"language":71,"meta":58,"style":58},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[73,96262,96263,96284,96296,96317,96322],{"__ignoreMap":58},[76,96264,96265,96267,96269,96272,96274,96276,96278,96280,96282],{"class":78,"line":79},[76,96266,1044],{"class":93},[76,96268,247],{"class":89},[76,96270,96271],{"class":93},"np.empty(",[76,96273,646],{"class":250},[76,96275,578],{"class":93},[76,96277,93570],{"class":5288},[76,96279,247],{"class":89},[76,96281,205],{"class":250},[76,96283,208],{"class":93},[76,96285,96286,96288,96290,96292,96294],{"class":78,"line":86},[76,96287,1019],{"class":93},[76,96289,247],{"class":89},[76,96291,93072],{"class":93},[76,96293,520],{"class":250},[76,96295,208],{"class":93},[76,96297,96298,96301,96303,96306,96308,96310,96313,96315],{"class":78,"line":97},[76,96299,96300],{"class":93},"np.add(",[76,96302,278],{"class":250},[76,96304,96305],{"class":93},",x,",[76,96307,93124],{"class":5288},[76,96309,247],{"class":89},[76,96311,96312],{"class":93},"y[:",[76,96314,520],{"class":250},[76,96316,4729],{"class":93},[76,96318,96319],{"class":78,"line":103},[76,96320,96321],{"class":82},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[76,96323,96324],{"class":78,"line":1273},[76,96325,96326],{"class":93},"y\n",[14,96328,11586],{},[14,96330,96331],{},[56,96332],{"alt":58,"src":96333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[67,96335,96337],{"className":69,"code":96336,"language":71,"meta":58,"style":58},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[73,96338,96339,96355,96375,96390],{"__ignoreMap":58},[76,96340,96341,96343,96345,96347,96349,96351,96353],{"class":78,"line":79},[76,96342,1019],{"class":93},[76,96344,247],{"class":89},[76,96346,93072],{"class":93},[76,96348,418],{"class":250},[76,96350,578],{"class":93},[76,96352,544],{"class":250},[76,96354,208],{"class":93},[76,96356,96357,96359,96361,96363,96365,96367,96369,96371,96373],{"class":78,"line":86},[76,96358,1044],{"class":93},[76,96360,247],{"class":89},[76,96362,96271],{"class":93},[76,96364,520],{"class":250},[76,96366,578],{"class":93},[76,96368,93570],{"class":5288},[76,96370,247],{"class":89},[76,96372,205],{"class":250},[76,96374,208],{"class":93},[76,96376,96377,96380,96382,96384,96386,96388],{"class":78,"line":97},[76,96378,96379],{"class":93},"np.add(x,",[76,96381,278],{"class":250},[76,96383,578],{"class":93},[76,96385,93124],{"class":5288},[76,96387,247],{"class":89},[76,96389,93519],{"class":93},[76,96391,96392],{"class":78,"line":103},[76,96393,96394],{"class":82},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96396,96397],{},"③empty_like()",[14,96399,96400],{},[350,96401,96402,96403,96408],{},"创建一个",[350,96404,96405],{},[350,96406,96407],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96410,96411,96414],{},[73,96412,96413],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96416,96417],{},[56,96418],{"alt":58,"src":96419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[169,96421,96423],{"id":96422},"_264-用法","2.6.4 ？？用法",[14,96425,96426],{},"当想查看一个函数的参数时，可以通过？？来实现",[67,96428,96430],{"className":69,"code":96429,"language":71,"meta":58,"style":58},"np.full??\n",[73,96431,96432],{"__ignoreMap":58},[76,96433,96434,96437],{"class":78,"line":79},[76,96435,96436],{"class":93},"np.full",[76,96438,96439],{"class":77473},"??\n",[169,96441,96443],{"id":96442},"_265-full创建数组","2.6.5 full()创建数组",[67,96445,96447],{"className":69,"code":96446,"language":71,"meta":58,"style":58},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[73,96448,96449,96454],{"__ignoreMap":58},[76,96450,96451],{"class":78,"line":79},[76,96452,96453],{"class":93},"full(shape,fill_value)\n",[76,96455,96456],{"class":78,"line":86},[76,96457,96458],{"class":93},"创建全为某个指定值的数组\n",[14,96460,94600],{},[67,96462,96464],{"className":69,"code":96463,"language":71,"meta":58,"style":58},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[73,96465,96466,96471],{"__ignoreMap":58},[76,96467,96468],{"class":78,"line":79},[76,96469,96470],{"class":82},"#创建一个一维数组,以20进行填充\n",[76,96472,96473,96476,96478,96480,96482],{"class":78,"line":86},[76,96474,96475],{"class":93},"np.full(",[76,96477,646],{"class":250},[76,96479,578],{"class":93},[76,96481,899],{"class":250},[76,96483,208],{"class":93},[14,96485,93361],{},[67,96487,96489],{"className":69,"code":96488,"language":71,"meta":58,"style":58},"#创建二维数组\nnp.full((3,5),11)\n",[73,96490,96491,96495],{"__ignoreMap":58},[76,96492,96493],{"class":78,"line":79},[76,96494,94017],{"class":82},[76,96496,96497,96500,96502,96504,96506,96508,96510],{"class":78,"line":86},[76,96498,96499],{"class":93},"np.full((",[76,96501,272],{"class":250},[76,96503,578],{"class":93},[76,96505,520],{"class":250},[76,96507,42326],{"class":93},[76,96509,672],{"class":250},[76,96511,208],{"class":93},[14,96513,96514],{},"③full_like用法",[14,96516,96517],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96519,96520],{},"这里是指定填充而已",[67,96522,96524],{"className":69,"code":96523,"language":71,"meta":58,"style":58},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[73,96525,96526,96531,96555,96560],{"__ignoreMap":58},[76,96527,96528],{"class":78,"line":79},[76,96529,96530],{"class":82},"#创建一个指定形状数组\n",[76,96532,96533,96535,96537,96539,96541,96543,96545,96547,96549,96551,96553],{"class":78,"line":86},[76,96534,439],{"class":93},[76,96536,247],{"class":89},[76,96538,93072],{"class":93},[76,96540,418],{"class":250},[76,96542,578],{"class":93},[76,96544,526],{"class":250},[76,96546,93077],{"class":93},[76,96548,494],{"class":250},[76,96550,578],{"class":93},[76,96552,620],{"class":250},[76,96554,208],{"class":93},[76,96556,96557],{"class":78,"line":97},[76,96558,96559],{"class":82},"#进行指定填充\n",[76,96561,96562,96565,96567],{"class":78,"line":103},[76,96563,96564],{"class":93},"np.full_like(a,",[76,96566,646],{"class":250},[76,96568,208],{"class":93},[14,96570,11586],{},[14,96572,96573],{},[56,96574],{"alt":58,"src":96575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[169,96577,96579],{"id":96578},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22070,96581,96583],{"id":96582},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[67,96585,96587],{"className":69,"code":96586,"language":71,"meta":58,"style":58},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[73,96588,96589,96606],{"__ignoreMap":58},[76,96590,96591,96594,96596,96598,96600,96602,96604],{"class":78,"line":79},[76,96592,96593],{"class":93},"np.eye(",[76,96595,494],{"class":250},[76,96597,578],{"class":93},[76,96599,93570],{"class":5288},[76,96601,247],{"class":89},[76,96603,205],{"class":250},[76,96605,208],{"class":93},[76,96607,96608],{"class":78,"line":86},[76,96609,96610],{"class":82},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22070,96612,96614],{"id":96613},"_2662-法2identity","2.6.6.2 法2：identity()",[67,96616,96618],{"className":69,"code":96617,"language":71,"meta":58,"style":58},"#identity()\nnp.identity(5,dtype=int)\n",[73,96619,96620,96625],{"__ignoreMap":58},[76,96621,96622],{"class":78,"line":79},[76,96623,96624],{"class":82},"#identity()\n",[76,96626,96627,96630,96632,96634,96636,96638,96640],{"class":78,"line":86},[76,96628,96629],{"class":93},"np.identity(",[76,96631,520],{"class":250},[76,96633,578],{"class":93},[76,96635,93570],{"class":5288},[76,96637,247],{"class":89},[76,96639,205],{"class":250},[76,96641,208],{"class":93},[14,96643,96644],{},"两个函数是有区别的",[14,96646,96647],{},[56,96648],{"alt":58,"src":96649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96651,96652],{},[56,96653],{"alt":58,"src":96654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[67,96656,96658],{"className":69,"code":96657,"language":71,"meta":58,"style":58},"# 创建一个 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",[73,96659,96660,96665,96677,96682,96687,96692,96697,96701,96706,96726,96730,96735,96740],{"__ignoreMap":58},[76,96661,96662],{"class":78,"line":79},[76,96663,96664],{"class":82},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[76,96666,96667,96669,96671,96673,96675],{"class":78,"line":86},[76,96668,96593],{"class":93},[76,96670,272],{"class":250},[76,96672,12507],{"class":93},[76,96674,494],{"class":250},[76,96676,208],{"class":93},[76,96678,96679],{"class":78,"line":97},[76,96680,96681],{"class":82},"# 输出:\n",[76,96683,96684],{"class":78,"line":103},[76,96685,96686],{"class":82},"# [[1. 0. 0. 0.]\n",[76,96688,96689],{"class":78,"line":1273},[76,96690,96691],{"class":82},"#  [0. 1. 0. 0.]\n",[76,96693,96694],{"class":78,"line":1287},[76,96695,96696],{"class":82},"#  [0. 0. 1. 0.]]\n",[76,96698,96699],{"class":78,"line":1293},[76,96700,2472],{"emptyLinePlaceholder":125},[76,96702,96703],{"class":78,"line":1384},[76,96704,96705],{"class":82},"# 对角线向上偏移1\n",[76,96707,96708,96710,96712,96714,96716,96718,96720,96722,96724],{"class":78,"line":1390},[76,96709,96593],{"class":93},[76,96711,272],{"class":250},[76,96713,12507],{"class":93},[76,96715,494],{"class":250},[76,96717,12507],{"class":93},[76,96719,693],{"class":5288},[76,96721,247],{"class":89},[76,96723,418],{"class":250},[76,96725,208],{"class":93},[76,96727,96728],{"class":78,"line":1402},[76,96729,96681],{"class":82},[76,96731,96732],{"class":78,"line":1684},[76,96733,96734],{"class":82},"# [[0. 1. 0. 0.]\n",[76,96736,96737],{"class":78,"line":1689},[76,96738,96739],{"class":82},"#  [0. 0. 1. 0.]\n",[76,96741,96742],{"class":78,"line":1695},[76,96743,96744],{"class":82},"#  [0. 0. 0. 1.]]\n",[169,96746,96748],{"id":96747},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[67,96750,96752],{"className":69,"code":96751,"language":71,"meta":58,"style":58},"#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",[73,96753,96754,96759,96763,96768,96773,96778,96783,96788,96793,96798,96803],{"__ignoreMap":58},[76,96755,96756],{"class":78,"line":79},[76,96757,96758],{"class":82},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[76,96760,96761],{"class":78,"line":86},[76,96762,95767],{"class":305},[76,96764,96765],{"class":78,"line":97},[76,96766,96767],{"class":305},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[76,96769,96770],{"class":78,"line":103},[76,96771,96772],{"class":305},"参数介绍：\n",[76,96774,96775],{"class":78,"line":1273},[76,96776,96777],{"class":305},"start：序列的起始值\n",[76,96779,96780],{"class":78,"line":1287},[76,96781,96782],{"class":305},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[76,96784,96785],{"class":78,"line":1293},[76,96786,96787],{"class":305},"num：要生长的等步长的样本数量，默认为50\n",[76,96789,96790],{"class":78,"line":1384},[76,96791,96792],{"class":305},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[76,96794,96795],{"class":78,"line":1390},[76,96796,96797],{"class":305},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[76,96799,96800],{"class":78,"line":1402},[76,96801,96802],{"class":305},"dtype：ndarry的数据类型\n",[76,96804,96805],{"class":78,"line":1684},[76,96806,95767],{"class":305},[14,96808,96809],{},[56,96810],{"alt":58,"src":96811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96813,96814],{},"这里num=是可以省略的",[14,96816,96817],{},"也就是下方两行代码结果是一模一样的",[67,96819,96821],{"className":69,"code":96820,"language":71,"meta":58,"style":58},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[73,96822,96823,96840],{"__ignoreMap":58},[76,96824,96825,96828,96830,96832,96834,96836,96838],{"class":78,"line":79},[76,96826,96827],{"class":93},"np.linspace(",[76,96829,418],{"class":250},[76,96831,578],{"class":93},[76,96833,520],{"class":250},[76,96835,578],{"class":93},[76,96837,520],{"class":250},[76,96839,208],{"class":93},[76,96841,96842,96844,96846,96848,96850,96852,96854,96856,96858],{"class":78,"line":86},[76,96843,96827],{"class":93},[76,96845,418],{"class":250},[76,96847,578],{"class":93},[76,96849,520],{"class":250},[76,96851,578],{"class":93},[76,96853,1737],{"class":5288},[76,96855,247],{"class":89},[76,96857,520],{"class":250},[76,96859,208],{"class":93},[169,96861,96863],{"id":96862},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[67,96865,96867],{"className":69,"code":96866,"language":71,"meta":58,"style":58},"#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",[73,96868,96869,96874,96878,96883,96888,96893,96898,96902,96907,96912,96916],{"__ignoreMap":58},[76,96870,96871],{"class":78,"line":79},[76,96872,96873],{"class":82},"#logspace函数用于创建一个等比数列，格式如下：\n",[76,96875,96876],{"class":78,"line":86},[76,96877,95767],{"class":305},[76,96879,96880],{"class":78,"line":97},[76,96881,96882],{"class":305},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[76,96884,96885],{"class":78,"line":103},[76,96886,96887],{"class":305},"参数为：\n",[76,96889,96890],{"class":78,"line":1273},[76,96891,96892],{"class":305},"start:序列的起始位置为：base**start\n",[76,96894,96895],{"class":78,"line":1287},[76,96896,96897],{"class":305},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[76,96899,96900],{"class":78,"line":1293},[76,96901,96787],{"class":305},[76,96903,96904],{"class":78,"line":1384},[76,96905,96906],{"class":305},"endpoint：是否包含 stop 这个值，默认是 True\n",[76,96908,96909],{"class":78,"line":1390},[76,96910,96911],{"class":305},"base：对数的底数，默认是 10（常见对数）\n",[76,96913,96914],{"class":78,"line":1402},[76,96915,96802],{"class":305},[76,96917,96918],{"class":78,"line":1684},[76,96919,95767],{"class":305},[14,96921,96922],{},[56,96923],{"alt":58,"src":96924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96926,96927],{},"logspace()函数中的num参数也是可以不写num=的",[14,96929,96930],{},"endpoint是不可以省略的",[117,96932,96933],{},"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":58,"searchDepth":86,"depth":86,"links":96935},[96936,96940,96945,96949,96953,96954],{"id":95325,"depth":86,"text":95326,"children":96937},[96938,96939],{"id":95329,"depth":97,"text":95330},{"id":95402,"depth":97,"text":95403},{"id":95434,"depth":86,"text":95435,"children":96941},[96942,96943,96944],{"id":95438,"depth":97,"text":95439},{"id":95620,"depth":97,"text":95621},{"id":95698,"depth":97,"text":95699},{"id":95733,"depth":86,"text":95734,"children":96946},[96947,96948],{"id":95737,"depth":97,"text":95738},{"id":95794,"depth":97,"text":95795},{"id":95890,"depth":86,"text":95891,"children":96950},[96951,96952],{"id":95894,"depth":97,"text":95895},{"id":95906,"depth":97,"text":95907},{"id":95940,"depth":86,"text":95941},{"id":95977,"depth":86,"text":95978,"children":96955},[96956,96957,96958,96959,96960,96961,96962,96963],{"id":95981,"depth":97,"text":95982},{"id":96206,"depth":97,"text":96207},{"id":96213,"depth":97,"text":96214},{"id":96422,"depth":97,"text":96423},{"id":96442,"depth":97,"text":96443},{"id":96578,"depth":97,"text":96579},{"id":96747,"depth":97,"text":96748},{"id":96862,"depth":97,"text":96863},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95317,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":4,"title":5,"body":96970,"description":122,"extension":123,"meta":97040,"navigation":125,"path":126,"seo":97041,"stem":128,"__hash__":129},{"type":7,"value":96971,"toc":97038},[96972,96974,96976,96978,96980,96982,96984,96986,96988,96990,96992,96994,96996,96998,97000,97004,97006,97008,97036],[10,96973,5],{"id":12},[14,96975,16],{},[14,96977,19],{},[14,96979,22],{},[14,96981,25],{},[14,96983,28],{},[14,96985,31],{},[14,96987,34],{},[14,96989,37],{},[14,96991,40],{},[14,96993,43],{},[14,96995,46],{},[14,96997,49],{},[14,96999,52],{},[14,97001,97002],{},[56,97003],{"alt":58,"src":59},[14,97005,62],{},[14,97007,65],{},[67,97009,97010],{"className":69,"code":70,"language":71,"meta":58,"style":58},[73,97011,97012,97016,97022,97026],{"__ignoreMap":58},[76,97013,97014],{"class":78,"line":79},[76,97015,83],{"class":82},[76,97017,97018,97020],{"class":78,"line":86},[76,97019,90],{"class":89},[76,97021,94],{"class":93},[76,97023,97024],{"class":78,"line":97},[76,97025,100],{"class":93},[76,97027,97028,97030,97032,97034],{"class":78,"line":103},[76,97029,106],{"class":89},[76,97031,109],{"class":93},[76,97033,112],{"class":89},[76,97035,115],{"class":93},[117,97037,119],{},{"title":58,"searchDepth":86,"depth":86,"links":97039},[],{},{"title":5,"description":122},{"id":97043,"title":97044,"body":97045,"description":122,"extension":123,"meta":97062,"navigation":125,"path":97063,"seo":97064,"stem":97065,"__hash__":97066},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97046,"toc":97060},[97047,97050,97055],[10,97048,97044],{"id":97049},"_3一维数组的索引和切片",[14,97051,97052],{},[56,97053],{"alt":58,"src":97054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97056,97057],{},[56,97058],{"alt":58,"src":97059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":58,"searchDepth":86,"depth":86,"links":97061},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97044,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97068,"title":97069,"body":97070,"description":122,"extension":123,"meta":97553,"navigation":125,"path":97554,"seo":97555,"stem":97556,"__hash__":97557},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97071,"toc":97551},[97072,97075,97078,97083,97116,97119,97157,97160,97194,97197,97302,97305,97342,97345,97446,97449,97500,97503,97545,97548],[10,97073,97069],{"id":97074},"_4二维数组的索引与切片",[14,97076,97077],{},"①获取指定单个元素",[14,97079,97080],{},[56,97081],{"alt":58,"src":97082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[67,97084,97086],{"className":69,"code":97085,"language":71,"meta":58,"style":58},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[73,97087,97088,97093,97098,97103],{"__ignoreMap":58},[76,97089,97090],{"class":78,"line":79},[76,97091,97092],{"class":82},"#获取元素9\n",[76,97094,97095],{"class":78,"line":86},[76,97096,97097],{"class":82},"#先获取所在行，再获取所在列\n",[76,97099,97100],{"class":78,"line":97},[76,97101,97102],{"class":82},"#数组[行索引号，列索引号]\n",[76,97104,97105,97108,97110,97112,97114],{"class":78,"line":103},[76,97106,97107],{"class":93},"a[",[76,97109,418],{"class":250},[76,97111,578],{"class":93},[76,97113,278],{"class":250},[76,97115,33316],{"class":93},[14,97117,97118],{},"②获取整行元素",[67,97120,97122],{"className":69,"code":97121,"language":71,"meta":58,"style":58},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[73,97123,97124,97129,97134,97142,97147],{"__ignoreMap":58},[76,97125,97126],{"class":78,"line":79},[76,97127,97128],{"class":82},"#获取整行 数组[行索引号]\n",[76,97130,97131],{"class":78,"line":86},[76,97132,97133],{"class":82},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[76,97135,97136,97138,97140],{"class":78,"line":97},[76,97137,97107],{"class":93},[76,97139,278],{"class":250},[76,97141,33316],{"class":93},[76,97143,97144],{"class":78,"line":103},[76,97145,97146],{"class":82},"#也可以负索引获取一行\n",[76,97148,97149,97151,97153,97155],{"class":78,"line":1273},[76,97150,97107],{"class":93},[76,97152,112],{"class":89},[76,97154,418],{"class":250},[76,97156,33316],{"class":93},[14,97158,97159],{},"③获取整列元素",[67,97161,97163],{"className":69,"code":97162,"language":71,"meta":58,"style":58},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[73,97164,97165,97170,97179,97184],{"__ignoreMap":58},[76,97166,97167],{"class":78,"line":79},[76,97168,97169],{"class":82},"#获取整列 数组名[:,列索引]\n",[76,97171,97172,97175,97177],{"class":78,"line":86},[76,97173,97174],{"class":93},"a[:,",[76,97176,278],{"class":250},[76,97178,33316],{"class":93},[76,97180,97181],{"class":78,"line":97},[76,97182,97183],{"class":82},"#也可以负索引获取一列\n",[76,97185,97186,97188,97190,97192],{"class":78,"line":103},[76,97187,97174],{"class":93},[76,97189,112],{"class":89},[76,97191,418],{"class":250},[76,97193,33316],{"class":93},[14,97195,97196],{},"④部分行部分列的元素",[67,97198,97200],{"className":69,"code":97199,"language":71,"meta":58,"style":58},"#部分行部分列 数组名[行切片，列切片]\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",[73,97201,97202,97207,97217,97221,97225,97230,97235,97239,97251,97255,97259,97264,97269,97274,97279,97283,97288],{"__ignoreMap":58},[76,97203,97204],{"class":78,"line":79},[76,97205,97206],{"class":82},"#部分行部分列 数组名[行切片，列切片]\n",[76,97208,97209,97212,97214],{"class":78,"line":86},[76,97210,97211],{"class":93},"a[:",[76,97213,278],{"class":250},[76,97215,97216],{"class":93},",:]\n",[76,97218,97219],{"class":78,"line":97},[76,97220,93634],{"class":82},[76,97222,97223],{"class":78,"line":103},[76,97224,93998],{"class":305},[76,97226,97227],{"class":78,"line":1273},[76,97228,97229],{"class":305},"array([[ 1,  2,  3,  4,  5,  6],\n",[76,97231,97232],{"class":78,"line":1287},[76,97233,97234],{"class":305},"       [ 7,  8,  9, 10, 11, 12]])\n",[76,97236,97237],{"class":78,"line":1293},[76,97238,93998],{"class":305},[76,97240,97241,97243,97245,97247,97249],{"class":78,"line":1384},[76,97242,97174],{"class":93},[76,97244,418],{"class":250},[76,97246,1058],{"class":93},[76,97248,494],{"class":250},[76,97250,33316],{"class":93},[76,97252,97253],{"class":78,"line":1390},[76,97254,93634],{"class":82},[76,97256,97257],{"class":78,"line":1402},[76,97258,93998],{"class":305},[76,97260,97261],{"class":78,"line":1684},[76,97262,97263],{"class":305},"array([[ 2,  3,  4],\n",[76,97265,97266],{"class":78,"line":1689},[76,97267,97268],{"class":305},"       [ 8,  9, 10],\n",[76,97270,97271],{"class":78,"line":1695},[76,97272,97273],{"class":305},"       [14, 15, 16],\n",[76,97275,97276],{"class":78,"line":1700},[76,97277,97278],{"class":305},"       [20, 21, 22]])\n",[76,97280,97281],{"class":78,"line":1714},[76,97282,93998],{"class":305},[76,97284,97285],{"class":78,"line":1719},[76,97286,97287],{"class":82},"#对列行同时进行切片，使用了step参数\n",[76,97289,97290,97293,97295,97298,97300],{"class":78,"line":1725},[76,97291,97292],{"class":93},"a[::",[76,97294,278],{"class":250},[76,97296,97297],{"class":93},",::",[76,97299,278],{"class":250},[76,97301,33316],{"class":93},[14,97303,97304],{},"⑤同时获取两个元素",[67,97306,97308],{"className":69,"code":97307,"language":71,"meta":58,"style":58},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[73,97309,97310,97315,97320],{"__ignoreMap":58},[76,97311,97312],{"class":78,"line":79},[76,97313,97314],{"class":82},"#同时获取第三行第二列，第四行第一列\n",[76,97316,97317],{"class":78,"line":86},[76,97318,97319],{"class":82},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[76,97321,97322,97325,97327,97329,97331,97333,97335,97337,97339],{"class":78,"line":97},[76,97323,97324],{"class":93},"a[(",[76,97326,278],{"class":250},[76,97328,578],{"class":93},[76,97330,272],{"class":250},[76,97332,42317],{"class":93},[76,97334,418],{"class":250},[76,97336,578],{"class":93},[76,97338,392],{"class":250},[76,97340,97341],{"class":93},")]\n",[14,97343,97344],{},"⑥切片，对行进行反向获取",[67,97346,97348],{"className":69,"code":97347,"language":71,"meta":58,"style":58},"#切片 对所有行进行反向获取\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",[73,97349,97350,97355,97365,97369,97373,97378,97383,97388,97393,97397,97402,97418,97422,97427,97432,97437,97442],{"__ignoreMap":58},[76,97351,97352],{"class":78,"line":79},[76,97353,97354],{"class":82},"#切片 对所有行进行反向获取\n",[76,97356,97357,97359,97361,97363],{"class":78,"line":86},[76,97358,97292],{"class":93},[76,97360,112],{"class":89},[76,97362,418],{"class":250},[76,97364,33316],{"class":93},[76,97366,97367],{"class":78,"line":97},[76,97368,93634],{"class":82},[76,97370,97371],{"class":78,"line":103},[76,97372,93998],{"class":305},[76,97374,97375],{"class":78,"line":1273},[76,97376,97377],{"class":305},"array([[19, 20, 21, 22, 23, 24],\n",[76,97379,97380],{"class":78,"line":1287},[76,97381,97382],{"class":305},"       [13, 14, 15, 16, 17, 18],\n",[76,97384,97385],{"class":78,"line":1293},[76,97386,97387],{"class":305},"       [ 7,  8,  9, 10, 11, 12],\n",[76,97389,97390],{"class":78,"line":1384},[76,97391,97392],{"class":305},"       [ 1,  2,  3,  4,  5,  6]])\n",[76,97394,97395],{"class":78,"line":1390},[76,97396,93998],{"class":305},[76,97398,97399],{"class":78,"line":1402},[76,97400,97401],{"class":82},"#对行列都进行反向切片获取\n",[76,97403,97404,97406,97408,97410,97412,97414,97416],{"class":78,"line":1684},[76,97405,97292],{"class":93},[76,97407,112],{"class":89},[76,97409,418],{"class":250},[76,97411,97297],{"class":93},[76,97413,112],{"class":89},[76,97415,418],{"class":250},[76,97417,33316],{"class":93},[76,97419,97420],{"class":78,"line":1689},[76,97421,93998],{"class":305},[76,97423,97424],{"class":78,"line":1695},[76,97425,97426],{"class":305},"array([[24, 23, 22, 21, 20, 19],\n",[76,97428,97429],{"class":78,"line":1700},[76,97430,97431],{"class":305},"       [18, 17, 16, 15, 14, 13],\n",[76,97433,97434],{"class":78,"line":1714},[76,97435,97436],{"class":305},"       [12, 11, 10,  9,  8,  7],\n",[76,97438,97439],{"class":78,"line":1719},[76,97440,97441],{"class":305},"       [ 6,  5,  4,  3,  2,  1]])\n",[76,97443,97444],{"class":78,"line":1725},[76,97445,93998],{"class":305},[14,97447,97448],{},"⑦修改元素",[67,97450,97452],{"className":69,"code":97451,"language":71,"meta":58,"style":58},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[73,97453,97454,97459,97477,97482],{"__ignoreMap":58},[76,97455,97456],{"class":78,"line":79},[76,97457,97458],{"class":82},"#获取前两行和前两列\n",[76,97460,97461,97464,97466,97468,97470,97473,97475],{"class":78,"line":86},[76,97462,97463],{"class":93},"sub_a",[76,97465,247],{"class":89},[76,97467,97211],{"class":93},[76,97469,278],{"class":250},[76,97471,97472],{"class":93},",:",[76,97474,278],{"class":250},[76,97476,33316],{"class":93},[76,97478,97479],{"class":78,"line":97},[76,97480,97481],{"class":82},"#修改sub_a第一个元素的值\n",[76,97483,97484,97487,97489,97491,97493,97495,97497],{"class":78,"line":103},[76,97485,97486],{"class":93},"sub_a[",[76,97488,392],{"class":250},[76,97490,578],{"class":93},[76,97492,392],{"class":250},[76,97494,1139],{"class":93},[76,97496,247],{"class":89},[76,97498,97499],{"class":250},"100\n",[14,97501,97502],{},"⑧数组复制copy()",[67,97504,97506],{"className":69,"code":97505,"language":71,"meta":58,"style":58},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[73,97507,97508,97513,97523,97528],{"__ignoreMap":58},[76,97509,97510],{"class":78,"line":79},[76,97511,97512],{"class":82},"#数组复制\n",[76,97514,97515,97518,97520],{"class":78,"line":86},[76,97516,97517],{"class":93},"copy_a",[76,97519,247],{"class":89},[76,97521,97522],{"class":93},"np.copy(sub_a)\n",[76,97524,97525],{"class":78,"line":97},[76,97526,97527],{"class":82},"#修改copy_a后不影响原数组\n",[76,97529,97530,97533,97535,97537,97539,97541,97543],{"class":78,"line":103},[76,97531,97532],{"class":93},"copy_a[",[76,97534,392],{"class":250},[76,97536,578],{"class":93},[76,97538,392],{"class":250},[76,97540,1139],{"class":93},[76,97542,247],{"class":89},[76,97544,97499],{"class":250},[14,97546,97547],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[117,97549,97550],{},"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":58,"searchDepth":86,"depth":86,"links":97552},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97069,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97559,"title":97560,"body":97561,"description":122,"extension":123,"meta":98053,"navigation":125,"path":98054,"seo":98055,"stem":98056,"__hash__":98057},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97562,"toc":98045},[97563,97566,97570,97573,97576,97629,97632,97657,97660,97679,97699,97702,97718,97722,97768,97772,97814,97818,97821,97824,97827,97830,97833,97895,97955,97959,97962,98019,98023,98028,98037,98042],[10,97564,97560],{"id":97565},"_5改变数组的维度",[140,97567,97569],{"id":97568},"_51-使用reshape","5.1 使用reshape()",[14,97571,97572],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97574,97575],{},"①一维数组转换为二维数组",[67,97577,97579],{"className":69,"code":97578,"language":71,"meta":58,"style":58},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[73,97580,97581,97597,97602,97607,97612],{"__ignoreMap":58},[76,97582,97583,97585,97587,97589,97591,97593,97595],{"class":78,"line":79},[76,97584,439],{"class":93},[76,97586,247],{"class":89},[76,97588,93072],{"class":93},[76,97590,418],{"class":250},[76,97592,578],{"class":93},[76,97594,723],{"class":250},[76,97596,208],{"class":93},[76,97598,97599],{"class":78,"line":86},[76,97600,97601],{"class":82},"#将一维数组进行转换\n",[76,97603,97604],{"class":78,"line":97},[76,97605,97606],{"class":82},"#注意点：元素个数不可以变\n",[76,97608,97609],{"class":78,"line":103},[76,97610,97611],{"class":82},"#转换维度要保持一致，不一致就异常！！！\n",[76,97613,97614,97616,97618,97621,97623,97625,97627],{"class":78,"line":1273},[76,97615,93376],{"class":93},[76,97617,247],{"class":89},[76,97619,97620],{"class":93},"a.reshape(",[76,97622,278],{"class":250},[76,97624,578],{"class":93},[76,97626,544],{"class":250},[76,97628,208],{"class":93},[14,97630,97631],{},"②一维数组转换为三维数组",[67,97633,97635],{"className":69,"code":97634,"language":71,"meta":58,"style":58},"aaa=a.reshape(2,3,2)\n",[73,97636,97637],{"__ignoreMap":58},[76,97638,97639,97641,97643,97645,97647,97649,97651,97653,97655],{"class":78,"line":79},[76,97640,95590],{"class":93},[76,97642,247],{"class":89},[76,97644,97620],{"class":93},[76,97646,278],{"class":250},[76,97648,578],{"class":93},[76,97650,272],{"class":250},[76,97652,578],{"class":93},[76,97654,278],{"class":250},[76,97656,208],{"class":93},[14,97658,97659],{},"③二维数组转化为一维数组",[67,97661,97663],{"className":69,"code":97662,"language":71,"meta":58,"style":58},"#知道元素个数：\naa.reshape(12)\n",[73,97664,97665,97670],{"__ignoreMap":58},[76,97666,97667],{"class":78,"line":79},[76,97668,97669],{"class":82},"#知道元素个数：\n",[76,97671,97672,97675,97677],{"class":78,"line":86},[76,97673,97674],{"class":93},"aa.reshape(",[76,97676,698],{"class":250},[76,97678,208],{"class":93},[67,97680,97682],{"className":69,"code":97681,"language":71,"meta":58,"style":58},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[73,97683,97684,97689],{"__ignoreMap":58},[76,97685,97686],{"class":78,"line":79},[76,97687,97688],{"class":82},"#不知道元素个数，参数传递-1\n",[76,97690,97691,97693,97695,97697],{"class":78,"line":86},[76,97692,97674],{"class":93},[76,97694,112],{"class":89},[76,97696,418],{"class":250},[76,97698,208],{"class":93},[14,97700,97701],{},"④三维数组转换为一维数组",[67,97703,97705],{"className":69,"code":97704,"language":71,"meta":58,"style":58},"aaa.reshape(-1)\n",[73,97706,97707],{"__ignoreMap":58},[76,97708,97709,97712,97714,97716],{"class":78,"line":79},[76,97710,97711],{"class":93},"aaa.reshape(",[76,97713,112],{"class":89},[76,97715,418],{"class":250},[76,97717,208],{"class":93},[140,97719,97721],{"id":97720},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[67,97723,97725],{"className":69,"code":97724,"language":71,"meta":58,"style":58},"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",[73,97726,97727,97754,97759,97763],{"__ignoreMap":58},[76,97728,97729,97731,97733,97735,97737,97739,97741,97743,97745,97747,97749,97751],{"class":78,"line":79},[76,97730,93376],{"class":93},[76,97732,247],{"class":89},[76,97734,93072],{"class":93},[76,97736,418],{"class":250},[76,97738,578],{"class":93},[76,97740,723],{"class":250},[76,97742,93077],{"class":93},[76,97744,278],{"class":250},[76,97746,578],{"class":93},[76,97748,544],{"class":250},[76,97750,629],{"class":93},[76,97752,97753],{"class":82},"#转换为2行6列的数组\n",[76,97755,97756],{"class":78,"line":86},[76,97757,97758],{"class":93},"aa.revel()\n",[76,97760,97761],{"class":78,"line":97},[76,97762,93634],{"class":82},[76,97764,97765],{"class":78,"line":103},[76,97766,97767],{"class":82},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[140,97769,97771],{"id":97770},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[67,97773,97775],{"className":69,"code":97774,"language":71,"meta":58,"style":58},"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",[73,97776,97777,97801,97806,97810],{"__ignoreMap":58},[76,97778,97779,97781,97783,97785,97787,97789,97791,97793,97795,97797,97799],{"class":78,"line":79},[76,97780,93376],{"class":93},[76,97782,247],{"class":89},[76,97784,93072],{"class":93},[76,97786,418],{"class":250},[76,97788,578],{"class":93},[76,97790,723],{"class":250},[76,97792,93077],{"class":93},[76,97794,278],{"class":250},[76,97796,578],{"class":93},[76,97798,544],{"class":250},[76,97800,208],{"class":93},[76,97802,97803],{"class":78,"line":86},[76,97804,97805],{"class":93},"aa.flatten()\n",[76,97807,97808],{"class":78,"line":97},[76,97809,93634],{"class":82},[76,97811,97812],{"class":78,"line":103},[76,97813,97767],{"class":82},[140,97815,97817],{"id":97816},"_54-使用resize","5.4 使用resize()",[14,97819,97820],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97822,97823],{},"通过resize方法可以改变数组的维度",[14,97825,97826],{},"#resize修改数组维度",[14,97828,97829],{},"#以元组的形式指定形状",[14,97831,97832],{},"#改变的是原数组",[67,97834,97836],{"className":69,"code":97835,"language":71,"meta":58,"style":58},"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",[73,97837,97838,97854,97874,97887,97891],{"__ignoreMap":58},[76,97839,97840,97842,97844,97846,97848,97850,97852],{"class":78,"line":79},[76,97841,439],{"class":93},[76,97843,247],{"class":89},[76,97845,93072],{"class":93},[76,97847,418],{"class":250},[76,97849,578],{"class":93},[76,97851,723],{"class":250},[76,97853,208],{"class":93},[76,97855,97856,97859,97861,97863,97865,97867,97869,97871],{"class":78,"line":86},[76,97857,97858],{"class":93},"a.shape",[76,97860,247],{"class":89},[76,97862,202],{"class":93},[76,97864,278],{"class":250},[76,97866,578],{"class":93},[76,97868,544],{"class":250},[76,97870,629],{"class":93},[76,97872,97873],{"class":82},"#改变了原数组\n",[76,97875,97876,97878,97880,97883,97885],{"class":78,"line":97},[76,97877,439],{"class":93},[76,97879,247],{"class":89},[76,97881,97882],{"class":93},"resize((",[76,97884,698],{"class":250},[76,97886,30567],{"class":93},[76,97888,97889],{"class":78,"line":103},[76,97890,93634],{"class":82},[76,97892,97893],{"class":78,"line":1273},[76,97894,97767],{"class":82},[67,97896,97898],{"className":69,"code":97897,"language":71,"meta":58,"style":58},"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",[73,97899,97900,97913,97917,97921,97926,97931,97936,97941,97946,97951],{"__ignoreMap":58},[76,97901,97902,97905,97907,97909,97911],{"class":78,"line":79},[76,97903,97904],{"class":93},"a.resize((",[76,97906,544],{"class":250},[76,97908,578],{"class":93},[76,97910,278],{"class":250},[76,97912,30567],{"class":93},[76,97914,97915],{"class":78,"line":86},[76,97916,93634],{"class":82},[76,97918,97919],{"class":78,"line":97},[76,97920,93998],{"class":305},[76,97922,97923],{"class":78,"line":103},[76,97924,97925],{"class":305},"array([[ 1,  2],\n",[76,97927,97928],{"class":78,"line":1273},[76,97929,97930],{"class":305},"       [ 3,  4],\n",[76,97932,97933],{"class":78,"line":1287},[76,97934,97935],{"class":305},"       [ 5,  6],\n",[76,97937,97938],{"class":78,"line":1293},[76,97939,97940],{"class":305},"       [ 7,  8],\n",[76,97942,97943],{"class":78,"line":1384},[76,97944,97945],{"class":305},"       [ 9, 10],\n",[76,97947,97948],{"class":78,"line":1390},[76,97949,97950],{"class":305},"       [11, 12]])\n",[76,97952,97953],{"class":78,"line":1402},[76,97954,93998],{"class":305},[140,97956,97958],{"id":97957},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97960,97961],{},"改变了原数组",[67,97963,97965],{"className":69,"code":97964,"language":71,"meta":58,"style":58},"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",[73,97966,97967,97983,97999,98003,98007,98011,98015],{"__ignoreMap":58},[76,97968,97969,97971,97973,97975,97977,97979,97981],{"class":78,"line":79},[76,97970,439],{"class":93},[76,97972,247],{"class":89},[76,97974,93072],{"class":93},[76,97976,418],{"class":250},[76,97978,578],{"class":93},[76,97980,723],{"class":250},[76,97982,208],{"class":93},[76,97984,97985,97987,97989,97991,97993,97995,97997],{"class":78,"line":86},[76,97986,97858],{"class":93},[76,97988,247],{"class":89},[76,97990,202],{"class":93},[76,97992,278],{"class":250},[76,97994,578],{"class":93},[76,97996,544],{"class":250},[76,97998,208],{"class":93},[76,98000,98001],{"class":78,"line":97},[76,98002,93634],{"class":82},[76,98004,98005],{"class":78,"line":103},[76,98006,93998],{"class":305},[76,98008,98009],{"class":78,"line":1273},[76,98010,97229],{"class":305},[76,98012,98013],{"class":78,"line":1287},[76,98014,97234],{"class":305},[76,98016,98017],{"class":78,"line":1293},[76,98018,93998],{"class":305},[140,98020,98022],{"id":98021},"_56-重要比较","5.6 重要比较：",[14,98024,98025],{},[56,98026],{"alt":58,"src":98027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98029,98030,98031,98033,98034,98036],{},"口诀：NumPy 函数要么用 ",[73,98032,96032],{},"，要么用 ",[73,98035,31566],{},"，创建结构用 shape，造数据用 size",[14,98038,98039],{},[56,98040],{"alt":58,"src":98041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[117,98043,98044],{},"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":58,"searchDepth":86,"depth":86,"links":98046},[98047,98048,98049,98050,98051,98052],{"id":97568,"depth":86,"text":97569},{"id":97720,"depth":86,"text":97721},{"id":97770,"depth":86,"text":97771},{"id":97816,"depth":86,"text":97817},{"id":97957,"depth":86,"text":97958},{"id":98021,"depth":86,"text":98022},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97560,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98059,"title":98060,"body":98061,"description":122,"extension":123,"meta":99133,"navigation":125,"path":99134,"seo":99135,"stem":99136,"__hash__":99137},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98062,"toc":99127},[98063,98066,98070,98073,98076,98079,98144,98147,98187,98190,98272,98275,98280,98302,98304,98309,98314,98317,98320,98475,98478,98680,98684,98687,98690,98758,98760,98765,98768,98771,98851,98855,98858,98860,98933,98935,98940,98942,99022,99026,99029,99032,99035,99038,99041,99044,99124],[10,98064,98060],{"id":98065},"_6数组的拼接",[140,98067,98069],{"id":98068},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98071,98072],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98074,98075],{},"函数内部传两个数列构成的数列或者元组",[14,98077,98078],{},"①一维数组的拼接",[67,98080,98082],{"className":69,"code":98081,"language":71,"meta":58,"style":58},"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",[73,98083,98084,98104,98124,98129,98134,98139],{"__ignoreMap":58},[76,98085,98086,98088,98090,98092,98094,98096,98098,98100,98102],{"class":78,"line":79},[76,98087,439],{"class":93},[76,98089,247],{"class":89},[76,98091,93094],{"class":93},[76,98093,418],{"class":250},[76,98095,578],{"class":93},[76,98097,278],{"class":250},[76,98099,578],{"class":93},[76,98101,272],{"class":250},[76,98103,4729],{"class":93},[76,98105,98106,98108,98110,98112,98114,98116,98118,98120,98122],{"class":78,"line":86},[76,98107,464],{"class":93},[76,98109,247],{"class":89},[76,98111,93094],{"class":93},[76,98113,494],{"class":250},[76,98115,578],{"class":93},[76,98117,520],{"class":250},[76,98119,578],{"class":93},[76,98121,544],{"class":250},[76,98123,4729],{"class":93},[76,98125,98126],{"class":78,"line":97},[76,98127,98128],{"class":82},"#调用concatenate进行数组拼接\n",[76,98130,98131],{"class":78,"line":103},[76,98132,98133],{"class":93},"np.concatenate((a,b))\n",[76,98135,98136],{"class":78,"line":1273},[76,98137,98138],{"class":82},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[76,98140,98141],{"class":78,"line":1287},[76,98142,98143],{"class":82},"#np.concatenate([a,b])\n",[14,98145,98146],{},"②一维多个数组拼接",[67,98148,98150],{"className":69,"code":98149,"language":71,"meta":58,"style":58},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[73,98151,98152,98157,98177,98182],{"__ignoreMap":58},[76,98153,98154],{"class":78,"line":79},[76,98155,98156],{"class":82},"#也可以多个数组进行拼接\n",[76,98158,98159,98161,98163,98165,98167,98169,98171,98173,98175],{"class":78,"line":86},[76,98160,489],{"class":93},[76,98162,247],{"class":89},[76,98164,93094],{"class":93},[76,98166,646],{"class":250},[76,98168,578],{"class":93},[76,98170,672],{"class":250},[76,98172,578],{"class":93},[76,98174,723],{"class":250},[76,98176,4729],{"class":93},[76,98178,98179],{"class":78,"line":97},[76,98180,98181],{"class":93},"c\n",[76,98183,98184],{"class":78,"line":103},[76,98185,98186],{"class":93},"np.concatenate((a,b,c))\n",[14,98188,98189],{},"③二维数组拼接",[67,98191,98193],{"className":69,"code":98192,"language":71,"meta":58,"style":58},"#二维数组使用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",[73,98194,98195,98200,98224,98249,98254,98259],{"__ignoreMap":58},[76,98196,98197],{"class":78,"line":79},[76,98198,98199],{"class":82},"#二维数组使用concatenate进行拼接\n",[76,98201,98202,98204,98206,98208,98210,98212,98214,98216,98218,98220,98222],{"class":78,"line":86},[76,98203,93376],{"class":93},[76,98205,247],{"class":89},[76,98207,93072],{"class":93},[76,98209,418],{"class":250},[76,98211,578],{"class":93},[76,98213,723],{"class":250},[76,98215,93077],{"class":93},[76,98217,272],{"class":250},[76,98219,578],{"class":93},[76,98221,494],{"class":250},[76,98223,208],{"class":93},[76,98225,98226,98229,98231,98233,98235,98237,98239,98241,98243,98245,98247],{"class":78,"line":97},[76,98227,98228],{"class":93},"bb",[76,98230,247],{"class":89},[76,98232,93072],{"class":93},[76,98234,537],{"class":250},[76,98236,578],{"class":93},[76,98238,841],{"class":250},[76,98240,93077],{"class":93},[76,98242,272],{"class":250},[76,98244,578],{"class":93},[76,98246,494],{"class":250},[76,98248,208],{"class":93},[76,98250,98251],{"class":78,"line":103},[76,98252,98253],{"class":82},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[76,98255,98256],{"class":78,"line":1273},[76,98257,98258],{"class":82},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[76,98260,98261,98264,98266,98268,98270],{"class":78,"line":1287},[76,98262,98263],{"class":93},"np.concatenate((aa,bb),",[76,98265,47584],{"class":5288},[76,98267,247],{"class":89},[76,98269,392],{"class":250},[76,98271,208],{"class":93},[14,98273,98274],{},"结果：",[14,98276,98277],{},[56,98278],{"alt":58,"src":98279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[67,98281,98283],{"className":69,"code":98282,"language":71,"meta":58,"style":58},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[73,98284,98285,98290],{"__ignoreMap":58},[76,98286,98287],{"class":78,"line":79},[76,98288,98289],{"class":82},"#指定axis为1进行拼接\n",[76,98291,98292,98294,98296,98298,98300],{"class":78,"line":86},[76,98293,98263],{"class":93},[76,98295,47584],{"class":5288},[76,98297,247],{"class":89},[76,98299,418],{"class":250},[76,98301,208],{"class":93},[14,98303,98274],{},[14,98305,98306],{},[56,98307],{"alt":58,"src":98308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98310,98311],{},[350,98312,98313],{},"二维数组总结：0竖着方向，1横着方向",[14,98315,98316],{},"④三维数组拼接",[14,98318,98319],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[67,98321,98323],{"className":69,"code":98322,"language":71,"meta":58,"style":58},"#两个三行六列\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",[73,98324,98325,98330,98358,98388,98393,98410,98415,98420,98425,98442,98447,98452,98457,98470],{"__ignoreMap":58},[76,98326,98327],{"class":78,"line":79},[76,98328,98329],{"class":82},"#两个三行六列\n",[76,98331,98332,98334,98336,98338,98340,98342,98344,98346,98348,98350,98352,98354,98356],{"class":78,"line":86},[76,98333,95590],{"class":93},[76,98335,247],{"class":89},[76,98337,93072],{"class":93},[76,98339,418],{"class":250},[76,98341,578],{"class":93},[76,98343,526],{"class":250},[76,98345,93077],{"class":93},[76,98347,278],{"class":250},[76,98349,578],{"class":93},[76,98351,272],{"class":250},[76,98353,578],{"class":93},[76,98355,544],{"class":250},[76,98357,208],{"class":93},[76,98359,98360,98363,98365,98367,98369,98371,98374,98376,98378,98380,98382,98384,98386],{"class":78,"line":97},[76,98361,98362],{"class":93},"bbb",[76,98364,247],{"class":89},[76,98366,93072],{"class":93},[76,98368,537],{"class":250},[76,98370,578],{"class":93},[76,98372,98373],{"class":250},"137",[76,98375,93077],{"class":93},[76,98377,278],{"class":250},[76,98379,578],{"class":93},[76,98381,272],{"class":250},[76,98383,578],{"class":93},[76,98385,544],{"class":250},[76,98387,208],{"class":93},[76,98389,98390],{"class":78,"line":103},[76,98391,98392],{"class":82},"#axis=0\n",[76,98394,98395,98397,98399,98402,98404,98406,98408],{"class":78,"line":1273},[76,98396,894],{"class":93},[76,98398,247],{"class":89},[76,98400,98401],{"class":93},"np.concatenate((aaa,bbb),",[76,98403,47584],{"class":5288},[76,98405,247],{"class":89},[76,98407,392],{"class":250},[76,98409,208],{"class":93},[76,98411,98412],{"class":78,"line":1287},[76,98413,98414],{"class":93},"s.shape\n",[76,98416,98417],{"class":78,"line":1293},[76,98418,98419],{"class":82},"#输出：(4,3,6)\n",[76,98421,98422],{"class":78,"line":1384},[76,98423,98424],{"class":82},"#axis=1\n",[76,98426,98427,98430,98432,98434,98436,98438,98440],{"class":78,"line":1390},[76,98428,98429],{"class":93},"ss",[76,98431,247],{"class":89},[76,98433,98401],{"class":93},[76,98435,47584],{"class":5288},[76,98437,247],{"class":89},[76,98439,418],{"class":250},[76,98441,208],{"class":93},[76,98443,98444],{"class":78,"line":1402},[76,98445,98446],{"class":93},"ss.shape\n",[76,98448,98449],{"class":78,"line":1684},[76,98450,98451],{"class":82},"#输出：(2,6,6)\n",[76,98453,98454],{"class":78,"line":1689},[76,98455,98456],{"class":82},"#axis=2\n",[76,98458,98459,98461,98463,98465,98467],{"class":78,"line":1695},[76,98460,98401],{"class":93},[76,98462,47584],{"class":5288},[76,98464,247],{"class":89},[76,98466,278],{"class":250},[76,98468,98469],{"class":93},").shape\n",[76,98471,98472],{"class":78,"line":1700},[76,98473,98474],{"class":82},"#输出：（2，3，12）\n",[14,98476,98477],{},"⑤四维数组拼接",[67,98479,98481],{"className":69,"code":98480,"language":71,"meta":58,"style":58},"#两个三行六列\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",[73,98482,98483,98487,98515,98543,98568,98594,98598,98611,98616,98620,98632,98637,98641,98653,98658,98663,98675],{"__ignoreMap":58},[76,98484,98485],{"class":78,"line":79},[76,98486,98329],{"class":82},[76,98488,98489,98491,98493,98495,98497,98499,98501,98503,98505,98507,98509,98511,98513],{"class":78,"line":86},[76,98490,95590],{"class":93},[76,98492,247],{"class":89},[76,98494,93072],{"class":93},[76,98496,418],{"class":250},[76,98498,578],{"class":93},[76,98500,526],{"class":250},[76,98502,93077],{"class":93},[76,98504,278],{"class":250},[76,98506,578],{"class":93},[76,98508,272],{"class":250},[76,98510,578],{"class":93},[76,98512,544],{"class":250},[76,98514,208],{"class":93},[76,98516,98517,98519,98521,98523,98525,98527,98529,98531,98533,98535,98537,98539,98541],{"class":78,"line":97},[76,98518,98362],{"class":93},[76,98520,247],{"class":89},[76,98522,93072],{"class":93},[76,98524,537],{"class":250},[76,98526,578],{"class":93},[76,98528,98373],{"class":250},[76,98530,93077],{"class":93},[76,98532,278],{"class":250},[76,98534,578],{"class":93},[76,98536,272],{"class":250},[76,98538,578],{"class":93},[76,98540,544],{"class":250},[76,98542,208],{"class":93},[76,98544,98545,98548,98550,98552,98554,98556,98558,98560,98562,98564,98566],{"class":78,"line":103},[76,98546,98547],{"class":93},"aaaa",[76,98549,247],{"class":89},[76,98551,97711],{"class":93},[76,98553,278],{"class":250},[76,98555,578],{"class":93},[76,98557,272],{"class":250},[76,98559,578],{"class":93},[76,98561,272],{"class":250},[76,98563,578],{"class":93},[76,98565,278],{"class":250},[76,98567,208],{"class":93},[76,98569,98570,98573,98575,98578,98580,98582,98584,98586,98588,98590,98592],{"class":78,"line":1273},[76,98571,98572],{"class":93},"bbbb",[76,98574,247],{"class":89},[76,98576,98577],{"class":93},"bbb.reshape(",[76,98579,278],{"class":250},[76,98581,578],{"class":93},[76,98583,272],{"class":250},[76,98585,578],{"class":93},[76,98587,272],{"class":250},[76,98589,578],{"class":93},[76,98591,278],{"class":250},[76,98593,208],{"class":93},[76,98595,98596],{"class":78,"line":1287},[76,98597,98392],{"class":82},[76,98599,98600,98603,98605,98607,98609],{"class":78,"line":1293},[76,98601,98602],{"class":93},"np.concatenate((aaaa,bbbb),",[76,98604,47584],{"class":5288},[76,98606,247],{"class":89},[76,98608,392],{"class":250},[76,98610,98469],{"class":93},[76,98612,98613],{"class":78,"line":1384},[76,98614,98615],{"class":82},"#结果：（4，3，3，2）\n",[76,98617,98618],{"class":78,"line":1390},[76,98619,98424],{"class":82},[76,98621,98622,98624,98626,98628,98630],{"class":78,"line":1402},[76,98623,98602],{"class":93},[76,98625,47584],{"class":5288},[76,98627,247],{"class":89},[76,98629,418],{"class":250},[76,98631,98469],{"class":93},[76,98633,98634],{"class":78,"line":1684},[76,98635,98636],{"class":82},"#结果：（2，6，3，2）\n",[76,98638,98639],{"class":78,"line":1689},[76,98640,98456],{"class":82},[76,98642,98643,98645,98647,98649,98651],{"class":78,"line":1695},[76,98644,98602],{"class":93},[76,98646,47584],{"class":5288},[76,98648,247],{"class":89},[76,98650,278],{"class":250},[76,98652,98469],{"class":93},[76,98654,98655],{"class":78,"line":1700},[76,98656,98657],{"class":82},"#结果：（2，3，6，2）\n",[76,98659,98660],{"class":78,"line":1714},[76,98661,98662],{"class":82},"#axis=3\n",[76,98664,98665,98667,98669,98671,98673],{"class":78,"line":1719},[76,98666,98602],{"class":93},[76,98668,47584],{"class":5288},[76,98670,247],{"class":89},[76,98672,272],{"class":250},[76,98674,98469],{"class":93},[76,98676,98677],{"class":78,"line":1725},[76,98678,98679],{"class":82},"#结果：（2，3，3，4）\n",[140,98681,98683],{"id":98682},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98685,98686],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98688,98689],{},"①二维数组",[67,98691,98693],{"className":69,"code":98692,"language":71,"meta":58,"style":58},"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",[73,98694,98695,98719,98743,98748,98753],{"__ignoreMap":58},[76,98696,98697,98699,98701,98703,98705,98707,98709,98711,98713,98715,98717],{"class":78,"line":79},[76,98698,93376],{"class":93},[76,98700,247],{"class":89},[76,98702,93072],{"class":93},[76,98704,418],{"class":250},[76,98706,578],{"class":93},[76,98708,723],{"class":250},[76,98710,93077],{"class":93},[76,98712,272],{"class":250},[76,98714,578],{"class":93},[76,98716,494],{"class":250},[76,98718,208],{"class":93},[76,98720,98721,98723,98725,98727,98729,98731,98733,98735,98737,98739,98741],{"class":78,"line":86},[76,98722,98228],{"class":93},[76,98724,247],{"class":89},[76,98726,93072],{"class":93},[76,98728,537],{"class":250},[76,98730,578],{"class":93},[76,98732,841],{"class":250},[76,98734,93077],{"class":93},[76,98736,272],{"class":250},[76,98738,578],{"class":93},[76,98740,494],{"class":250},[76,98742,208],{"class":93},[76,98744,98745],{"class":78,"line":97},[76,98746,98747],{"class":93},"np.hstack((aa,bb))\n",[76,98749,98750],{"class":78,"line":103},[76,98751,98752],{"class":82},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[76,98754,98755],{"class":78,"line":1273},[76,98756,98757],{"class":82},"#np.hstack([aa,bb])\n",[14,98759,98274],{},[14,98761,98762],{},[56,98763],{"alt":58,"src":98764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98766,98767],{},"等效于concatenate()函数中axis=1时的情况",[14,98769,98770],{},"②三维数组",[67,98772,98774],{"className":69,"code":98773,"language":71,"meta":58,"style":58},"#两个三行六列\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",[73,98775,98776,98780,98808,98836,98841,98846],{"__ignoreMap":58},[76,98777,98778],{"class":78,"line":79},[76,98779,98329],{"class":82},[76,98781,98782,98784,98786,98788,98790,98792,98794,98796,98798,98800,98802,98804,98806],{"class":78,"line":86},[76,98783,95590],{"class":93},[76,98785,247],{"class":89},[76,98787,93072],{"class":93},[76,98789,418],{"class":250},[76,98791,578],{"class":93},[76,98793,526],{"class":250},[76,98795,93077],{"class":93},[76,98797,278],{"class":250},[76,98799,578],{"class":93},[76,98801,272],{"class":250},[76,98803,578],{"class":93},[76,98805,544],{"class":250},[76,98807,208],{"class":93},[76,98809,98810,98812,98814,98816,98818,98820,98822,98824,98826,98828,98830,98832,98834],{"class":78,"line":97},[76,98811,98362],{"class":93},[76,98813,247],{"class":89},[76,98815,93072],{"class":93},[76,98817,537],{"class":250},[76,98819,578],{"class":93},[76,98821,98373],{"class":250},[76,98823,93077],{"class":93},[76,98825,278],{"class":250},[76,98827,578],{"class":93},[76,98829,272],{"class":250},[76,98831,578],{"class":93},[76,98833,544],{"class":250},[76,98835,208],{"class":93},[76,98837,98838],{"class":78,"line":103},[76,98839,98840],{"class":82},"#使用hstack\n",[76,98842,98843],{"class":78,"line":1273},[76,98844,98845],{"class":93},"np.hstack((aaa,bbb)).shape\n",[76,98847,98848],{"class":78,"line":1287},[76,98849,98850],{"class":82},"#输出：（2，6，6）\n",[140,98852,98854],{"id":98853},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98856,98857],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98859,98689],{},[67,98861,98863],{"className":69,"code":98862,"language":71,"meta":58,"style":58},"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",[73,98864,98865,98889,98913,98918,98923,98928],{"__ignoreMap":58},[76,98866,98867,98869,98871,98873,98875,98877,98879,98881,98883,98885,98887],{"class":78,"line":79},[76,98868,93376],{"class":93},[76,98870,247],{"class":89},[76,98872,93072],{"class":93},[76,98874,418],{"class":250},[76,98876,578],{"class":93},[76,98878,723],{"class":250},[76,98880,93077],{"class":93},[76,98882,272],{"class":250},[76,98884,578],{"class":93},[76,98886,494],{"class":250},[76,98888,208],{"class":93},[76,98890,98891,98893,98895,98897,98899,98901,98903,98905,98907,98909,98911],{"class":78,"line":86},[76,98892,98228],{"class":93},[76,98894,247],{"class":89},[76,98896,93072],{"class":93},[76,98898,537],{"class":250},[76,98900,578],{"class":93},[76,98902,841],{"class":250},[76,98904,93077],{"class":93},[76,98906,272],{"class":250},[76,98908,578],{"class":93},[76,98910,494],{"class":250},[76,98912,208],{"class":93},[76,98914,98915],{"class":78,"line":97},[76,98916,98917],{"class":82},"#vstack 垂直方向进行堆叠\n",[76,98919,98920],{"class":78,"line":103},[76,98921,98922],{"class":93},"np.vstack((aa,bb))\n",[76,98924,98925],{"class":78,"line":1273},[76,98926,98927],{"class":82},"#与hstack传的参数类似，等价于：\n",[76,98929,98930],{"class":78,"line":1287},[76,98931,98932],{"class":93},"np.vstack([aa,bb])\n",[14,98934,98274],{},[14,98936,98937],{},[56,98938],{"alt":58,"src":98939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98941,98770],{},[67,98943,98945],{"className":69,"code":98944,"language":71,"meta":58,"style":58},"#两个三行六列\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",[73,98946,98947,98951,98979,99007,99012,99017],{"__ignoreMap":58},[76,98948,98949],{"class":78,"line":79},[76,98950,98329],{"class":82},[76,98952,98953,98955,98957,98959,98961,98963,98965,98967,98969,98971,98973,98975,98977],{"class":78,"line":86},[76,98954,95590],{"class":93},[76,98956,247],{"class":89},[76,98958,93072],{"class":93},[76,98960,418],{"class":250},[76,98962,578],{"class":93},[76,98964,526],{"class":250},[76,98966,93077],{"class":93},[76,98968,278],{"class":250},[76,98970,578],{"class":93},[76,98972,272],{"class":250},[76,98974,578],{"class":93},[76,98976,544],{"class":250},[76,98978,208],{"class":93},[76,98980,98981,98983,98985,98987,98989,98991,98993,98995,98997,98999,99001,99003,99005],{"class":78,"line":97},[76,98982,98362],{"class":93},[76,98984,247],{"class":89},[76,98986,93072],{"class":93},[76,98988,537],{"class":250},[76,98990,578],{"class":93},[76,98992,98373],{"class":250},[76,98994,93077],{"class":93},[76,98996,278],{"class":250},[76,98998,578],{"class":93},[76,99000,272],{"class":250},[76,99002,578],{"class":93},[76,99004,544],{"class":250},[76,99006,208],{"class":93},[76,99008,99009],{"class":78,"line":103},[76,99010,99011],{"class":82},"#使用vstack\n",[76,99013,99014],{"class":78,"line":1273},[76,99015,99016],{"class":93},"np.vstack((aaa,bbb)).shape\n",[76,99018,99019],{"class":78,"line":1287},[76,99020,99021],{"class":82},"#输出：（4，3，6）\n",[140,99023,99025],{"id":99024},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99027,99028],{},"该方法是三维数组特有的方法",[14,99030,99031],{},"也就是说",[14,99033,99034],{},"一维数组拼接方法用：concatenate()",[14,99036,99037],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99039,99040],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99042,99043],{},"四维数组及多维数组只能用concatenate进行拼接",[67,99045,99047],{"className":69,"code":99046,"language":71,"meta":58,"style":58},"#两个三行六列\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",[73,99048,99049,99053,99081,99109,99114,99119],{"__ignoreMap":58},[76,99050,99051],{"class":78,"line":79},[76,99052,98329],{"class":82},[76,99054,99055,99057,99059,99061,99063,99065,99067,99069,99071,99073,99075,99077,99079],{"class":78,"line":86},[76,99056,95590],{"class":93},[76,99058,247],{"class":89},[76,99060,93072],{"class":93},[76,99062,418],{"class":250},[76,99064,578],{"class":93},[76,99066,526],{"class":250},[76,99068,93077],{"class":93},[76,99070,278],{"class":250},[76,99072,578],{"class":93},[76,99074,272],{"class":250},[76,99076,578],{"class":93},[76,99078,544],{"class":250},[76,99080,208],{"class":93},[76,99082,99083,99085,99087,99089,99091,99093,99095,99097,99099,99101,99103,99105,99107],{"class":78,"line":97},[76,99084,98362],{"class":93},[76,99086,247],{"class":89},[76,99088,93072],{"class":93},[76,99090,537],{"class":250},[76,99092,578],{"class":93},[76,99094,98373],{"class":250},[76,99096,93077],{"class":93},[76,99098,278],{"class":250},[76,99100,578],{"class":93},[76,99102,272],{"class":250},[76,99104,578],{"class":93},[76,99106,544],{"class":250},[76,99108,208],{"class":93},[76,99110,99111],{"class":78,"line":103},[76,99112,99113],{"class":82},"#使用dstack\n",[76,99115,99116],{"class":78,"line":1273},[76,99117,99118],{"class":93},"np.dstack((aaa,bbb)).shape\n",[76,99120,99121],{"class":78,"line":1287},[76,99122,99123],{"class":82},"#结果：（2，3，12）\n",[117,99125,99126],{},"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":58,"searchDepth":86,"depth":86,"links":99128},[99129,99130,99131,99132],{"id":98068,"depth":86,"text":98069},{"id":98682,"depth":86,"text":98683},{"id":98853,"depth":86,"text":98854},{"id":99024,"depth":86,"text":99025},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98060,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99139,"title":99140,"body":99141,"description":122,"extension":123,"meta":99416,"navigation":125,"path":99417,"seo":99418,"stem":99419,"__hash__":99420},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99142,"toc":99414},[99143,99146,99149,99243,99246,99249,99252,99255,99258,99261,99264,99267,99411],[10,99144,99140],{"id":99145},"_7数组转置",[14,99147,99148],{},"使用transpose()函数",[67,99150,99152],{"className":69,"code":99151,"language":71,"meta":58,"style":58},"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",[73,99153,99154,99164,99188,99193,99198,99203,99208,99216,99220,99224,99229,99234,99239],{"__ignoreMap":58},[76,99155,99156,99158,99160,99162],{"class":78,"line":79},[76,99157,90],{"class":89},[76,99159,31450],{"class":93},[76,99161,31453],{"class":89},[76,99163,31456],{"class":93},[76,99165,99166,99168,99170,99172,99174,99176,99178,99180,99182,99184,99186],{"class":78,"line":86},[76,99167,439],{"class":93},[76,99169,247],{"class":89},[76,99171,31787],{"class":93},[76,99173,418],{"class":250},[76,99175,578],{"class":93},[76,99177,723],{"class":250},[76,99179,93077],{"class":93},[76,99181,494],{"class":250},[76,99183,578],{"class":93},[76,99185,272],{"class":250},[76,99187,208],{"class":93},[76,99189,99190],{"class":78,"line":97},[76,99191,99192],{"class":82},"#二维数组转置\n",[76,99194,99195],{"class":78,"line":103},[76,99196,99197],{"class":82},"#调用transpose()函数\n",[76,99199,99200],{"class":78,"line":1273},[76,99201,99202],{"class":93},"a.transpose()\n",[76,99204,99205],{"class":78,"line":1287},[76,99206,99207],{"class":82},"#对于二维数组也可以采用.T来实现\n",[76,99209,99210,99213],{"class":78,"line":1293},[76,99211,99212],{"class":93},"a.T",[76,99214,99215],{"class":82},"#与上述代码一样\n",[76,99217,99218],{"class":78,"line":1384},[76,99219,93634],{"class":82},[76,99221,99222],{"class":78,"line":1390},[76,99223,93998],{"class":305},[76,99225,99226],{"class":78,"line":1402},[76,99227,99228],{"class":305},"array([[ 1,  4,  7, 10],\n",[76,99230,99231],{"class":78,"line":1684},[76,99232,99233],{"class":305},"       [ 2,  5,  8, 11],\n",[76,99235,99236],{"class":78,"line":1689},[76,99237,99238],{"class":305},"       [ 3,  6,  9, 12]])\n",[76,99240,99241],{"class":78,"line":1695},[76,99242,93998],{"class":305},[14,99244,99245],{},"也可以使用np.transpose()的形式",[14,99247,99248],{},"#多维数组进行转置 np.transpose()",[14,99250,99251],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99253,99254],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99256,99257],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99259,99260],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99262,99263],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99265,99266],{},"四维及以上的数组也是一样的道理",[67,99268,99270],{"className":69,"code":99269,"language":71,"meta":58,"style":58},"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",[73,99271,99272,99300,99305,99310,99315,99333,99338,99370,99375,99380,99385,99406],{"__ignoreMap":58},[76,99273,99274,99276,99278,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298],{"class":78,"line":79},[76,99275,1019],{"class":93},[76,99277,247],{"class":89},[76,99279,93072],{"class":93},[76,99281,418],{"class":250},[76,99283,578],{"class":93},[76,99285,526],{"class":250},[76,99287,93077],{"class":93},[76,99289,272],{"class":250},[76,99291,578],{"class":93},[76,99293,544],{"class":250},[76,99295,578],{"class":93},[76,99297,278],{"class":250},[76,99299,208],{"class":93},[76,99301,99302],{"class":78,"line":86},[76,99303,99304],{"class":93},"x.shape\n",[76,99306,99307],{"class":78,"line":97},[76,99308,99309],{"class":82},"#结果：（3,6,2）\n",[76,99311,99312],{"class":78,"line":103},[76,99313,99314],{"class":82},"#使用np.transpose()进行转置 变为(2,6,3)\n",[76,99316,99317,99320,99322,99324,99326,99328,99330],{"class":78,"line":1273},[76,99318,99319],{"class":93},"np.transpose(x,(",[76,99321,278],{"class":250},[76,99323,578],{"class":93},[76,99325,418],{"class":250},[76,99327,578],{"class":93},[76,99329,392],{"class":250},[76,99331,99332],{"class":93},")).shape\n",[76,99334,99335],{"class":78,"line":1287},[76,99336,99337],{"class":82},"#结果：(2,6,3)\n",[76,99339,99340,99342,99344,99346,99348,99350,99352,99354,99356,99358,99360,99362,99364,99366,99368],{"class":78,"line":1293},[76,99341,98547],{"class":93},[76,99343,247],{"class":89},[76,99345,93072],{"class":93},[76,99347,418],{"class":250},[76,99349,578],{"class":93},[76,99351,526],{"class":250},[76,99353,93077],{"class":93},[76,99355,272],{"class":250},[76,99357,578],{"class":93},[76,99359,278],{"class":250},[76,99361,578],{"class":93},[76,99363,418],{"class":250},[76,99365,578],{"class":93},[76,99367,544],{"class":250},[76,99369,208],{"class":93},[76,99371,99372],{"class":78,"line":1384},[76,99373,99374],{"class":93},"aaaa.shape\n",[76,99376,99377],{"class":78,"line":1390},[76,99378,99379],{"class":82},"#结果：（3，2，1，6）\n",[76,99381,99382],{"class":78,"line":1402},[76,99383,99384],{"class":82},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[76,99386,99387,99390,99392,99394,99396,99398,99400,99402,99404],{"class":78,"line":1684},[76,99388,99389],{"class":93},"np.transpose(aaaa,(",[76,99391,418],{"class":250},[76,99393,578],{"class":93},[76,99395,278],{"class":250},[76,99397,578],{"class":93},[76,99399,392],{"class":250},[76,99401,578],{"class":93},[76,99403,272],{"class":250},[76,99405,99332],{"class":93},[76,99407,99408],{"class":78,"line":1689},[76,99409,99410],{"class":82},"#结果：(2,1,3,6)\n",[117,99412,99413],{},"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":58,"searchDepth":86,"depth":86,"links":99415},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99140,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99422,"title":99423,"body":99424,"description":122,"extension":123,"meta":100158,"navigation":125,"path":100159,"seo":100160,"stem":100161,"__hash__":100162},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99425,"toc":100156},[99426,99429,99432,99435,99438,99441,99444,99447,99450,99559,99562,99565,100153],[10,99427,99423],{"id":99428},"_8数组分割",[14,99430,99431],{},"split分割",[14,99433,99434],{},"numpy.split(ary,indics_or_sections,axis)",[14,99436,99437],{},"解释：",[14,99439,99440],{},"ary:被分割的数组",[14,99442,99443],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99445,99446],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99448,99449],{},"①一维数组的分割",[67,99451,99453],{"className":69,"code":99452,"language":71,"meta":58,"style":58},"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",[73,99454,99455,99471,99476,99485,99489,99494,99502,99506,99511,99516,99529,99533,99538,99550,99554],{"__ignoreMap":58},[76,99456,99457,99459,99461,99463,99465,99467,99469],{"class":78,"line":79},[76,99458,439],{"class":93},[76,99460,247],{"class":89},[76,99462,93072],{"class":93},[76,99464,418],{"class":250},[76,99466,578],{"class":93},[76,99468,620],{"class":250},[76,99470,208],{"class":93},[76,99472,99473],{"class":78,"line":86},[76,99474,99475],{"class":82},"#如果传入整数，必须能够平分，否则会报错\n",[76,99477,99478,99481,99483],{"class":78,"line":97},[76,99479,99480],{"class":93},"np.split(a,",[76,99482,278],{"class":250},[76,99484,208],{"class":93},[76,99486,99487],{"class":78,"line":103},[76,99488,93634],{"class":82},[76,99490,99491],{"class":78,"line":1273},[76,99492,99493],{"class":82},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[76,99495,99496,99498,99500],{"class":78,"line":1287},[76,99497,99480],{"class":93},[76,99499,494],{"class":250},[76,99501,208],{"class":93},[76,99503,99504],{"class":78,"line":1293},[76,99505,93634],{"class":82},[76,99507,99508],{"class":78,"line":1384},[76,99509,99510],{"class":82},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[76,99512,99513],{"class":78,"line":1390},[76,99514,99515],{"class":82},"#传入数组\n",[76,99517,99518,99521,99523,99525,99527],{"class":78,"line":1402},[76,99519,99520],{"class":93},"np.split(a,[",[76,99522,272],{"class":250},[76,99524,578],{"class":93},[76,99526,520],{"class":250},[76,99528,4729],{"class":93},[76,99530,99531],{"class":78,"line":1684},[76,99532,93634],{"class":82},[76,99534,99535],{"class":78,"line":1689},[76,99536,99537],{"class":82},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[76,99539,99540,99542,99544,99546,99548],{"class":78,"line":1695},[76,99541,99520],{"class":93},[76,99543,520],{"class":250},[76,99545,578],{"class":93},[76,99547,569],{"class":250},[76,99549,4729],{"class":93},[76,99551,99552],{"class":78,"line":1700},[76,99553,93634],{"class":82},[76,99555,99556],{"class":78,"line":1714},[76,99557,99558],{"class":82},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99560,99561],{},"②二维数组的分割",[14,99563,99564],{},"使用split()",[67,99566,99568],{"className":69,"code":99567,"language":71,"meta":58,"style":58},"#二维数组分割\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",[73,99569,99570,99575,99599,99604,99613,99617,99621,99626,99631,99636,99641,99646,99651,99656,99660,99673,99677,99681,99685,99689,99693,99698,99703,99708,99712,99717,99733,99737,99741,99746,99751,99756,99761,99766,99771,99776,99781,99786,99791,99796,99801,99806,99811,99816,99821,99826,99831,99835,99839,99859,99863,99867,99872,99877,99882,99887,99892,99897,99902,99907,99912,99917,99922,99927,99932,99937,99942,99947,99952,99957,99961,99966,99975,99979,99983,99987,99991,99995,99999,100003,100007,100011,100020,100024,100028,100032,100036,100040,100044,100048,100052,100056,100060,100064,100068,100072,100076,100080,100084,100088,100092,100096,100100,100104,100117,100121,100125,100129,100133,100137,100141,100145,100149],{"__ignoreMap":58},[76,99571,99572],{"class":78,"line":79},[76,99573,99574],{"class":82},"#二维数组分割\n",[76,99576,99577,99579,99581,99583,99585,99587,99589,99591,99593,99595,99597],{"class":78,"line":86},[76,99578,93376],{"class":93},[76,99580,247],{"class":89},[76,99582,93072],{"class":93},[76,99584,418],{"class":250},[76,99586,578],{"class":93},[76,99588,526],{"class":250},[76,99590,93077],{"class":93},[76,99592,544],{"class":250},[76,99594,578],{"class":93},[76,99596,544],{"class":250},[76,99598,208],{"class":93},[76,99600,99601],{"class":78,"line":97},[76,99602,99603],{"class":82},"#默认axis=0  传入整数平均分,按行来的\n",[76,99605,99606,99609,99611],{"class":78,"line":103},[76,99607,99608],{"class":93},"np.split(aa,",[76,99610,272],{"class":250},[76,99612,208],{"class":93},[76,99614,99615],{"class":78,"line":1273},[76,99616,95833],{"class":82},[76,99618,99619],{"class":78,"line":1287},[76,99620,93998],{"class":305},[76,99622,99623],{"class":78,"line":1293},[76,99624,99625],{"class":305},"[array([[ 1,  2,  3,  4,  5,  6],\n",[76,99627,99628],{"class":78,"line":1384},[76,99629,99630],{"class":305},"        [ 7,  8,  9, 10, 11, 12]]),\n",[76,99632,99633],{"class":78,"line":1390},[76,99634,99635],{"class":305}," array([[13, 14, 15, 16, 17, 18],\n",[76,99637,99638],{"class":78,"line":1402},[76,99639,99640],{"class":305},"        [19, 20, 21, 22, 23, 24]]),\n",[76,99642,99643],{"class":78,"line":1684},[76,99644,99645],{"class":305}," array([[25, 26, 27, 28, 29, 30],\n",[76,99647,99648],{"class":78,"line":1689},[76,99649,99650],{"class":305},"        [31, 32, 33, 34, 35, 36]])]\n",[76,99652,99653],{"class":78,"line":1695},[76,99654,99655],{"class":305}," '''\n",[76,99657,99658],{"class":78,"line":1700},[76,99659,99515],{"class":82},[76,99661,99662,99665,99667,99669,99671],{"class":78,"line":1714},[76,99663,99664],{"class":93},"np.split(aa,[",[76,99666,278],{"class":250},[76,99668,578],{"class":93},[76,99670,520],{"class":250},[76,99672,4729],{"class":93},[76,99674,99675],{"class":78,"line":1719},[76,99676,95833],{"class":82},[76,99678,99679],{"class":78,"line":1725},[76,99680,93998],{"class":305},[76,99682,99683],{"class":78,"line":1746},[76,99684,99625],{"class":305},[76,99686,99687],{"class":78,"line":1751},[76,99688,99630],{"class":305},[76,99690,99691],{"class":78,"line":1765},[76,99692,99635],{"class":305},[76,99694,99695],{"class":78,"line":1770},[76,99696,99697],{"class":305},"        [19, 20, 21, 22, 23, 24],\n",[76,99699,99700],{"class":78,"line":1799},[76,99701,99702],{"class":305},"        [25, 26, 27, 28, 29, 30]]),\n",[76,99704,99705],{"class":78,"line":1804},[76,99706,99707],{"class":305}," array([[31, 32, 33, 34, 35, 36]])]\n",[76,99709,99710],{"class":78,"line":1821},[76,99711,93998],{"class":305},[76,99713,99714],{"class":78,"line":1826},[76,99715,99716],{"class":82},"#axis=1 按照列来分\n",[76,99718,99719,99721,99723,99725,99727,99729,99731],{"class":78,"line":1831},[76,99720,99608],{"class":93},[76,99722,272],{"class":250},[76,99724,578],{"class":93},[76,99726,47584],{"class":5288},[76,99728,247],{"class":89},[76,99730,418],{"class":250},[76,99732,208],{"class":93},[76,99734,99735],{"class":78,"line":1836},[76,99736,95833],{"class":82},[76,99738,99739],{"class":78,"line":1850},[76,99740,93998],{"class":305},[76,99742,99743],{"class":78,"line":1855},[76,99744,99745],{"class":305},"[array([[ 1,  2],\n",[76,99747,99748],{"class":78,"line":2649},[76,99749,99750],{"class":305},"        [ 7,  8],\n",[76,99752,99753],{"class":78,"line":2663},[76,99754,99755],{"class":305},"        [13, 14],\n",[76,99757,99758],{"class":78,"line":2671},[76,99759,99760],{"class":305},"        [19, 20],\n",[76,99762,99763],{"class":78,"line":2676},[76,99764,99765],{"class":305},"        [25, 26],\n",[76,99767,99768],{"class":78,"line":2682},[76,99769,99770],{"class":305},"        [31, 32]]),\n",[76,99772,99773],{"class":78,"line":2688},[76,99774,99775],{"class":305}," array([[ 3,  4],\n",[76,99777,99778],{"class":78,"line":2693},[76,99779,99780],{"class":305},"        [ 9, 10],\n",[76,99782,99783],{"class":78,"line":8020},[76,99784,99785],{"class":305},"        [15, 16],\n",[76,99787,99788],{"class":78,"line":8044},[76,99789,99790],{"class":305},"        [21, 22],\n",[76,99792,99793],{"class":78,"line":8049},[76,99794,99795],{"class":305},"        [27, 28],\n",[76,99797,99798],{"class":78,"line":8055},[76,99799,99800],{"class":305},"        [33, 34]]),\n",[76,99802,99803],{"class":78,"line":8082},[76,99804,99805],{"class":305}," array([[ 5,  6],\n",[76,99807,99808],{"class":78,"line":8087},[76,99809,99810],{"class":305},"        [11, 12],\n",[76,99812,99813],{"class":78,"line":8093},[76,99814,99815],{"class":305},"        [17, 18],\n",[76,99817,99818],{"class":78,"line":8105},[76,99819,99820],{"class":305},"        [23, 24],\n",[76,99822,99823],{"class":78,"line":8117},[76,99824,99825],{"class":305},"        [29, 30],\n",[76,99827,99828],{"class":78,"line":8129},[76,99829,99830],{"class":305},"        [35, 36]])]\n",[76,99832,99833],{"class":78,"line":9788},[76,99834,99655],{"class":305},[76,99836,99837],{"class":78,"line":9813},[76,99838,99515],{"class":82},[76,99840,99841,99843,99845,99847,99849,99851,99853,99855,99857],{"class":78,"line":9836},[76,99842,99664],{"class":93},[76,99844,418],{"class":250},[76,99846,578],{"class":93},[76,99848,278],{"class":250},[76,99850,41679],{"class":93},[76,99852,47584],{"class":5288},[76,99854,247],{"class":89},[76,99856,418],{"class":250},[76,99858,208],{"class":93},[76,99860,99861],{"class":78,"line":9860},[76,99862,93634],{"class":82},[76,99864,99865],{"class":78,"line":9865},[76,99866,93998],{"class":305},[76,99868,99869],{"class":78,"line":9870},[76,99870,99871],{"class":305},"[array([[ 1],\n",[76,99873,99874],{"class":78,"line":9875},[76,99875,99876],{"class":305},"        [ 7],\n",[76,99878,99879],{"class":78,"line":9884},[76,99880,99881],{"class":305},"        [13],\n",[76,99883,99884],{"class":78,"line":9889},[76,99885,99886],{"class":305},"        [19],\n",[76,99888,99889],{"class":78,"line":9895},[76,99890,99891],{"class":305},"        [25],\n",[76,99893,99894],{"class":78,"line":9916},[76,99895,99896],{"class":305},"        [31]]),\n",[76,99898,99899],{"class":78,"line":9922},[76,99900,99901],{"class":305}," array([[ 2],\n",[76,99903,99904],{"class":78,"line":9936},[76,99905,99906],{"class":305},"        [ 8],\n",[76,99908,99909],{"class":78,"line":9942},[76,99910,99911],{"class":305},"        [14],\n",[76,99913,99914],{"class":78,"line":9969},[76,99915,99916],{"class":305},"        [20],\n",[76,99918,99919],{"class":78,"line":9978},[76,99920,99921],{"class":305},"        [26],\n",[76,99923,99924],{"class":78,"line":9984},[76,99925,99926],{"class":305},"        [32]]),\n",[76,99928,99929],{"class":78,"line":9992},[76,99930,99931],{"class":305}," array([[ 3,  4,  5,  6],\n",[76,99933,99934],{"class":78,"line":9997},[76,99935,99936],{"class":305},"        [ 9, 10, 11, 12],\n",[76,99938,99939],{"class":78,"line":16676},[76,99940,99941],{"class":305},"        [15, 16, 17, 18],\n",[76,99943,99944],{"class":78,"line":16682},[76,99945,99946],{"class":305},"        [21, 22, 23, 24],\n",[76,99948,99949],{"class":78,"line":16705},[76,99950,99951],{"class":305},"        [27, 28, 29, 30],\n",[76,99953,99954],{"class":78,"line":16711},[76,99955,99956],{"class":305},"        [33, 34, 35, 36]])]\n",[76,99958,99959],{"class":78,"line":16734},[76,99960,93998],{"class":305},[76,99962,99963],{"class":78,"line":16748},[76,99964,99965],{"class":82},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[76,99967,99968,99971,99973],{"class":78,"line":16768},[76,99969,99970],{"class":93},"np.vsplit(aa,",[76,99972,272],{"class":250},[76,99974,208],{"class":93},[76,99976,99977],{"class":78,"line":16774},[76,99978,93634],{"class":82},[76,99980,99981],{"class":78,"line":16785},[76,99982,93998],{"class":305},[76,99984,99985],{"class":78,"line":16808},[76,99986,99625],{"class":305},[76,99988,99989],{"class":78,"line":16830},[76,99990,99630],{"class":305},[76,99992,99993],{"class":78,"line":16835},[76,99994,99635],{"class":305},[76,99996,99997],{"class":78,"line":16841},[76,99998,99640],{"class":305},[76,100000,100001],{"class":78,"line":16855},[76,100002,99645],{"class":305},[76,100004,100005],{"class":78,"line":16868},[76,100006,99650],{"class":305},[76,100008,100009],{"class":78,"line":16873},[76,100010,93998],{"class":305},[76,100012,100013,100016,100018],{"class":78,"line":16887},[76,100014,100015],{"class":93},"np.hsplit(aa,",[76,100017,272],{"class":250},[76,100019,208],{"class":93},[76,100021,100022],{"class":78,"line":16892},[76,100023,93634],{"class":82},[76,100025,100026],{"class":78,"line":16898},[76,100027,93998],{"class":305},[76,100029,100030],{"class":78,"line":16903},[76,100031,99745],{"class":305},[76,100033,100034],{"class":78,"line":16917},[76,100035,99750],{"class":305},[76,100037,100038],{"class":78,"line":16922},[76,100039,99755],{"class":305},[76,100041,100042],{"class":78,"line":16927},[76,100043,99760],{"class":305},[76,100045,100046],{"class":78,"line":16941},[76,100047,99765],{"class":305},[76,100049,100050],{"class":78,"line":16953},[76,100051,99770],{"class":305},[76,100053,100054],{"class":78,"line":16958},[76,100055,99775],{"class":305},[76,100057,100058],{"class":78,"line":16971},[76,100059,99780],{"class":305},[76,100061,100062],{"class":78,"line":16976},[76,100063,99785],{"class":305},[76,100065,100066],{"class":78,"line":16981},[76,100067,99790],{"class":305},[76,100069,100070],{"class":78,"line":16986},[76,100071,99795],{"class":305},[76,100073,100074],{"class":78,"line":16999},[76,100075,99800],{"class":305},[76,100077,100078],{"class":78,"line":17004},[76,100079,99805],{"class":305},[76,100081,100082],{"class":78,"line":32703},[76,100083,99810],{"class":305},[76,100085,100086],{"class":78,"line":32709},[76,100087,99815],{"class":305},[76,100089,100090],{"class":78,"line":32715},[76,100091,99820],{"class":305},[76,100093,100094],{"class":78,"line":32721},[76,100095,99825],{"class":305},[76,100097,100098],{"class":78,"line":32727},[76,100099,99830],{"class":305},[76,100101,100102],{"class":78,"line":32738},[76,100103,93998],{"class":305},[76,100105,100106,100109,100111,100113,100115],{"class":78,"line":32744},[76,100107,100108],{"class":93},"np.vsplit(aa,[",[76,100110,278],{"class":250},[76,100112,578],{"class":93},[76,100114,520],{"class":250},[76,100116,4729],{"class":93},[76,100118,100119],{"class":78,"line":32764},[76,100120,93634],{"class":82},[76,100122,100123],{"class":78,"line":32770},[76,100124,93998],{"class":305},[76,100126,100127],{"class":78,"line":32781},[76,100128,99625],{"class":305},[76,100130,100131],{"class":78,"line":32787},[76,100132,99630],{"class":305},[76,100134,100135],{"class":78,"line":32793},[76,100136,99635],{"class":305},[76,100138,100139],{"class":78,"line":32799},[76,100140,99697],{"class":305},[76,100142,100143],{"class":78,"line":32805},[76,100144,99702],{"class":305},[76,100146,100147],{"class":78,"line":32811},[76,100148,99707],{"class":305},[76,100150,100151],{"class":78,"line":32817},[76,100152,99655],{"class":305},[117,100154,100155],{},"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":58,"searchDepth":86,"depth":86,"links":100157},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99423,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100164,"title":100165,"body":100166,"description":122,"extension":123,"meta":100660,"navigation":125,"path":100661,"seo":100662,"stem":100663,"__hash__":100664},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100167,"toc":100651},[100168,100171,100174,100199,100203,100262,100314,100318,100320,100356,100410,100412,100450,100521,100525,100530,100534,100537,100570,100573,100577,100580,100583,100586,100589,100594,100598,100601,100604,100607,100610,100615,100619,100624,100627,100648],[10,100169,100165],{"id":100170},"_9数学函数",[14,100172,100173],{},"补充回顾：python的列表推导式",[67,100175,100177],{"className":69,"code":100176,"language":71,"meta":58,"style":58},"[1\u002Fi for i in a]\n",[73,100178,100179],{"__ignoreMap":58},[76,100180,100181,100183,100185,100187,100190,100192,100194,100196],{"class":78,"line":79},[76,100182,1089],{"class":93},[76,100184,418],{"class":250},[76,100186,783],{"class":89},[76,100188,100189],{"class":93},"i ",[76,100191,3097],{"class":89},[76,100193,9510],{"class":93},[76,100195,26116],{"class":89},[76,100197,100198],{"class":93}," a]\n",[140,100200,100202],{"id":100201},"_91-求倒数","9.1 求倒数",[67,100204,100206],{"className":69,"code":100205,"language":71,"meta":58,"style":58},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[73,100207,100208,100213,100241,100253],{"__ignoreMap":58},[76,100209,100210],{"class":78,"line":79},[76,100211,100212],{"class":82},"#数组求倒数\n",[76,100214,100215,100217,100219,100221,100223,100225,100227,100229,100231,100233,100235,100237,100239],{"class":78,"line":86},[76,100216,439],{"class":93},[76,100218,247],{"class":89},[76,100220,1089],{"class":93},[76,100222,418],{"class":250},[76,100224,578],{"class":93},[76,100226,278],{"class":250},[76,100228,578],{"class":93},[76,100230,272],{"class":250},[76,100232,578],{"class":93},[76,100234,494],{"class":250},[76,100236,578],{"class":93},[76,100238,520],{"class":250},[76,100240,33316],{"class":93},[76,100242,100243,100245,100247,100250],{"class":78,"line":97},[76,100244,464],{"class":93},[76,100246,247],{"class":89},[76,100248,100249],{"class":93},"np.array(a)",[76,100251,100252],{"class":82},"#将列表转换为数组\n",[76,100254,100255,100257,100259],{"class":78,"line":103},[76,100256,418],{"class":250},[76,100258,783],{"class":89},[76,100260,100261],{"class":93},"b\n",[67,100263,100265],{"className":69,"code":100264,"language":71,"meta":58,"style":58},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[73,100266,100267,100295,100304,100309],{"__ignoreMap":58},[76,100268,100269,100271,100273,100275,100277,100279,100281,100283,100285,100287,100289,100291,100293],{"class":78,"line":79},[76,100270,439],{"class":93},[76,100272,247],{"class":89},[76,100274,1089],{"class":93},[76,100276,418],{"class":250},[76,100278,578],{"class":93},[76,100280,278],{"class":250},[76,100282,578],{"class":93},[76,100284,272],{"class":250},[76,100286,578],{"class":93},[76,100288,494],{"class":250},[76,100290,578],{"class":93},[76,100292,520],{"class":250},[76,100294,33316],{"class":93},[76,100296,100297,100299,100301],{"class":78,"line":86},[76,100298,464],{"class":93},[76,100300,247],{"class":89},[76,100302,100303],{"class":93},"np.array(a)\n",[76,100305,100306],{"class":78,"line":97},[76,100307,100308],{"class":82},"#调用numpy中的函数reciprocal()\n",[76,100310,100311],{"class":78,"line":103},[76,100312,100313],{"class":93},"np.reciprocal(b)\n",[140,100315,100317],{"id":100316},"_92-求平方","9.2 求平方",[14,100319,94600],{},[67,100321,100323],{"className":69,"code":100322,"language":71,"meta":58,"style":58},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[73,100324,100325,100330,100335,100351],{"__ignoreMap":58},[76,100326,100327],{"class":78,"line":79},[76,100328,100329],{"class":82},"#square()，求平方\n",[76,100331,100332],{"class":78,"line":86},[76,100333,100334],{"class":82},"#一维数组\n",[76,100336,100337,100339,100341,100343,100345,100347,100349],{"class":78,"line":97},[76,100338,439],{"class":93},[76,100340,247],{"class":89},[76,100342,93072],{"class":93},[76,100344,418],{"class":250},[76,100346,578],{"class":93},[76,100348,646],{"class":250},[76,100350,208],{"class":93},[76,100352,100353],{"class":78,"line":103},[76,100354,100355],{"class":93},"np.square(a)\n",[67,100357,100359],{"className":69,"code":100358,"language":71,"meta":58,"style":58},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[73,100360,100361,100366,100371,100392],{"__ignoreMap":58},[76,100362,100363],{"class":78,"line":79},[76,100364,100365],{"class":82},"#或者通过循环遍历的形式来计算\n",[76,100367,100368],{"class":78,"line":86},[76,100369,100370],{"class":82},"#这是一个列表\n",[76,100372,100373,100376,100378,100380,100382,100384,100386,100389],{"class":78,"line":97},[76,100374,100375],{"class":93},"[i",[76,100377,655],{"class":89},[76,100379,100189],{"class":93},[76,100381,3097],{"class":89},[76,100383,9510],{"class":93},[76,100385,26116],{"class":89},[76,100387,100388],{"class":93}," a]",[76,100390,100391],{"class":82},"#这个求完之后在数列当中\n",[76,100393,100394,100397,100399,100401,100403,100405,100407],{"class":78,"line":103},[76,100395,100396],{"class":93},"np.array([i",[76,100398,655],{"class":89},[76,100400,100189],{"class":93},[76,100402,3097],{"class":89},[76,100404,9510],{"class":93},[76,100406,26116],{"class":89},[76,100408,100409],{"class":93}," a])\n",[14,100411,93361],{},[67,100413,100415],{"className":69,"code":100414,"language":71,"meta":58,"style":58},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[73,100416,100417,100421,100445],{"__ignoreMap":58},[76,100418,100419],{"class":78,"line":79},[76,100420,93371],{"class":82},[76,100422,100423,100425,100427,100429,100431,100433,100435,100437,100439,100441,100443],{"class":78,"line":86},[76,100424,93376],{"class":93},[76,100426,247],{"class":89},[76,100428,93072],{"class":93},[76,100430,418],{"class":250},[76,100432,578],{"class":93},[76,100434,723],{"class":250},[76,100436,93077],{"class":93},[76,100438,494],{"class":250},[76,100440,578],{"class":93},[76,100442,272],{"class":250},[76,100444,208],{"class":93},[76,100446,100447],{"class":78,"line":97},[76,100448,100449],{"class":93},"np.square(aa)\n",[67,100451,100453],{"className":69,"code":100452,"language":71,"meta":58,"style":58},"#传统的方式\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",[73,100454,100455,100460,100469,100485,100501,100516],{"__ignoreMap":58},[76,100456,100457],{"class":78,"line":79},[76,100458,100459],{"class":82},"#传统的方式\n",[76,100461,100462,100464,100466],{"class":78,"line":86},[76,100463,98228],{"class":93},[76,100465,247],{"class":89},[76,100467,100468],{"class":93},"np.empty_like(aa)\n",[76,100470,100471,100473,100475,100477,100479,100481,100483],{"class":78,"line":97},[76,100472,3097],{"class":89},[76,100474,9510],{"class":93},[76,100476,26116],{"class":89},[76,100478,32513],{"class":250},[76,100480,202],{"class":93},[76,100482,494],{"class":250},[76,100484,30856],{"class":93},[76,100486,100487,100489,100491,100493,100495,100497,100499],{"class":78,"line":103},[76,100488,3273],{"class":89},[76,100490,9572],{"class":93},[76,100492,26116],{"class":89},[76,100494,32513],{"class":250},[76,100496,202],{"class":93},[76,100498,272],{"class":250},[76,100500,30856],{"class":93},[76,100502,100503,100506,100508,100511,100513],{"class":78,"line":1273},[76,100504,100505],{"class":93},"        bb[i,j]",[76,100507,247],{"class":89},[76,100509,100510],{"class":93},"aa[i,j]",[76,100512,655],{"class":89},[76,100514,100515],{"class":93},"aa[i,j]\n",[76,100517,100518],{"class":78,"line":1287},[76,100519,100520],{"class":93},"bb\n",[140,100522,100524],{"id":100523},"_93-求各元素的符号","9.3 求各元素的符号",[14,100526,100527],{},[56,100528],{"alt":58,"src":100529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[140,100531,100533],{"id":100532},"_94-modf函数","9.4 modf函数",[14,100535,100536],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[67,100538,100540],{"className":69,"code":100539,"language":71,"meta":58,"style":58},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[73,100541,100542,100565],{"__ignoreMap":58},[76,100543,100544,100546,100548,100550,100552,100554,100556,100558,100560,100563],{"class":78,"line":79},[76,100545,439],{"class":93},[76,100547,247],{"class":89},[76,100549,93072],{"class":93},[76,100551,112],{"class":89},[76,100553,646],{"class":250},[76,100555,578],{"class":93},[76,100557,646],{"class":250},[76,100559,578],{"class":93},[76,100561,100562],{"class":250},"0.3",[76,100564,208],{"class":93},[76,100566,100567],{"class":78,"line":86},[76,100568,100569],{"class":93},"np.modf(a)\n",[14,100571,100572],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[140,100574,100576],{"id":100575},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100578,100579],{},"np.cell()",[14,100581,100582],{},"np.floor()",[14,100584,100585],{},"np.rint()",[14,100587,100588],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100590,100591],{},[56,100592],{"alt":58,"src":100593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[140,100595,100597],{"id":100596},"_96-around函数","9.6 around()函数",[14,100599,100600],{},"around()函数也可以实现对数的小数位数进行操作",[14,100602,100603],{},"其中的参数：",[14,100605,100606],{},"1.要传的数组",[14,100608,100609],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100611,100612],{},[56,100613],{"alt":58,"src":100614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[140,100616,100618],{"id":100617},"_97-三角函数","9.7 三角函数",[14,100620,100621],{},[56,100622],{"alt":58,"src":100623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100625,100626],{},"引入图像模块非常重要",[67,100628,100630],{"className":69,"code":100629,"language":71,"meta":58,"style":58},"from matplotlib import pyplot as plt\n",[73,100631,100632],{"__ignoreMap":58},[76,100633,100634,100636,100639,100641,100644,100646],{"class":78,"line":79},[76,100635,30807],{"class":89},[76,100637,100638],{"class":93}," matplotlib ",[76,100640,90],{"class":89},[76,100642,100643],{"class":93}," pyplot ",[76,100645,31453],{"class":89},[76,100647,31507],{"class":93},[117,100649,100650],{},"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":58,"searchDepth":86,"depth":86,"links":100652},[100653,100654,100655,100656,100657,100658,100659],{"id":100201,"depth":86,"text":100202},{"id":100316,"depth":86,"text":100317},{"id":100523,"depth":86,"text":100524},{"id":100532,"depth":86,"text":100533},{"id":100575,"depth":86,"text":100576},{"id":100596,"depth":86,"text":100597},{"id":100617,"depth":86,"text":100618},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100165,"description":122},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100666,"title":100667,"body":100668,"description":122,"extension":123,"meta":100672,"navigation":125,"path":100673,"seo":100674,"stem":100675,"__hash__":100676},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100669,"toc":100670},[],{"title":58,"searchDepth":86,"depth":86,"links":100671},[],{"category":50490},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100667,"description":122},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100678,"title":100679,"body":100680,"description":58,"extension":123,"meta":102688,"navigation":125,"path":102689,"seo":102690,"stem":102691,"__hash__":102692},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100681,"toc":102664},[100682,100685,100689,100692,100695,100701,100704,100727,100730,100764,100767,100808,100812,100815,100908,100911,100955,100958,100975,100978,100992,100995,100998,101043,101046,101083,101087,101090,101096,101101,101121,101125,101128,101194,101197,101215,101219,101222,101251,101261,101267,101271,101274,101280,101291,101295,101298,101328,101331,101611,101614,101617,101628,101631,101634,101656,101663,101666,101684,101687,101690,101704,101712,101715,101741,101747,101750,101753,101763,101775,101795,101804,101824,101834,101858,101871,101885,101890,101931,101948,101973,101985,102005,102011,102056,102075,102092,102105,102121,102128,102140,102149,102184,102205,102230,102243,102267,102282,102307,102310,102331,102340,102343,102354,102358,102361,102367,102379,102386,102390,102393,102405,102408,102422,102425,102435,102445,102448,102488,102491,102495,102501,102504,102518,102522,102525,102558,102562,102565,102588,102596,102599,102605,102611,102614,102617,102645,102649,102652,102658,102661],[10,100683,100679],{"id":100684},"_1环境安装与第一个-mujoco-程序",[140,100686,100688],{"id":100687},"_1目标说明","1.目标说明",[14,100690,100691],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100693,100694],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[67,100696,100699],{"className":100697,"code":100698,"language":5259,"meta":58},[5257],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[73,100700,100698],{"__ignoreMap":58},[14,100702,100703],{},"需要掌握:",[152,100705,100706,100709,100712,100717,100722],{},[155,100707,100708],{},"Fedora 44 下 MuJoCo 的系统依赖",[155,100710,100711],{},"Python 虚拟环境创建",[155,100713,100714],{},[73,100715,100716],{},"mujoco.MjModel",[155,100718,100719],{},[73,100720,100721],{},"mujoco.MjData",[155,100723,100724],{},[73,100725,100726],{},"mujoco.mj_step(model, data)",[14,100728,100729],{},"MuJoCo 中最重要的两个对象:",[338,100731,100732,100742],{},[341,100733,100734],{},[344,100735,100736,100739],{},[347,100737,100738],{"align":23808},"对象",[347,100740,100741],{"align":23808},"含义",[385,100743,100744,100754],{},[344,100745,100746,100751],{},[390,100747,100748],{"align":23808},[73,100749,100750],{},"MjModel",[390,100752,100753],{"align":23808},"模型结构，来自 XML，基本不随时间变化",[344,100755,100756,100761],{},[390,100757,100758],{"align":23808},[73,100759,100760],{},"MjData",[390,100762,100763],{"align":23808},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100765,100766],{},"可以先用一个类比理解：",[338,100768,100769,100779],{},[341,100770,100771],{},[344,100772,100773,100776],{},[347,100774,100775],{"align":23808},"类比",[347,100777,100778],{"align":23808},"MuJoCo 对象",[385,100780,100781,100790,100799],{},[344,100782,100783,100786],{},[390,100784,100785],{"align":23808},"游戏地图和角色配置",[390,100787,100788],{"align":23808},[73,100789,100750],{},[344,100791,100792,100795],{},[390,100793,100794],{"align":23808},"游戏运行到当前帧的状态",[390,100796,100797],{"align":23808},[73,100798,100760],{},[344,100800,100801,100804],{},[390,100802,100803],{"align":23808},"前进一帧",[390,100805,100806],{"align":23808},[73,100807,100726],{},[140,100809,100811],{"id":100810},"_2环境与依赖安装","2.环境与依赖安装",[14,100813,100814],{},"Fedora 44 系统依赖:",[67,100816,100818],{"className":23894,"code":100817,"language":23896,"meta":58,"style":58},"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",[73,100819,100820,100832,100845,100858,100868,100878,100897],{"__ignoreMap":58},[76,100821,100822,100824,100826,100828,100830],{"class":78,"line":79},[76,100823,24649],{"class":2035},[76,100825,26388],{"class":305},[76,100827,23906],{"class":305},[76,100829,26473],{"class":250},[76,100831,24751],{"class":250},[76,100833,100834,100837,100840,100843],{"class":78,"line":86},[76,100835,100836],{"class":305},"  python3",[76,100838,100839],{"class":305}," python3-pip",[76,100841,100842],{"class":305}," python3-virtualenv",[76,100844,24751],{"class":250},[76,100846,100847,100850,100853,100856],{"class":78,"line":97},[76,100848,100849],{"class":305},"  mesa-libGL",[76,100851,100852],{"class":305}," mesa-libGLU",[76,100854,100855],{"class":305}," mesa-dri-drivers",[76,100857,24751],{"class":250},[76,100859,100860,100863,100866],{"class":78,"line":103},[76,100861,100862],{"class":305},"  libglvnd-glx",[76,100864,100865],{"class":305}," libglvnd-opengl",[76,100867,24751],{"class":250},[76,100869,100870,100873,100876],{"class":78,"line":1273},[76,100871,100872],{"class":305},"  glfw",[76,100874,100875],{"class":305}," glfw-devel",[76,100877,24751],{"class":250},[76,100879,100880,100883,100886,100889,100892,100895],{"class":78,"line":1287},[76,100881,100882],{"class":305},"  libX11",[76,100884,100885],{"class":305}," libXcursor",[76,100887,100888],{"class":305}," libXi",[76,100890,100891],{"class":305}," libXinerama",[76,100893,100894],{"class":305}," libXrandr",[76,100896,24751],{"class":250},[76,100898,100899,100902,100905],{"class":78,"line":1293},[76,100900,100901],{"class":305},"  gcc",[76,100903,100904],{"class":305}," gcc-c++",[76,100906,100907],{"class":305}," make\n",[14,100909,100910],{},"创建 Python 环境:",[67,100912,100914],{"className":23894,"code":100913,"language":23896,"meta":58,"style":58},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[73,100915,100916,100930,100938],{"__ignoreMap":58},[76,100917,100918,100921,100924,100927],{"class":78,"line":79},[76,100919,100920],{"class":2035},"python3",[76,100922,100923],{"class":250}," -m",[76,100925,100926],{"class":305}," venv",[76,100928,100929],{"class":305}," .venv\n",[76,100931,100932,100935],{"class":78,"line":86},[76,100933,100934],{"class":250},"source",[76,100936,100937],{"class":305}," .venv\u002Fbin\u002Factivate\n",[76,100939,100940,100942,100944,100947,100949,100952],{"class":78,"line":97},[76,100941,71],{"class":2035},[76,100943,100923],{"class":250},[76,100945,100946],{"class":305}," pip",[76,100948,23906],{"class":305},[76,100950,100951],{"class":250}," --upgrade",[76,100953,100954],{"class":305}," pip\n",[14,100956,100957],{},"pip 安装:",[67,100959,100961],{"className":23894,"code":100960,"language":23896,"meta":58,"style":58},"pip install \"mujoco>=2.3\" numpy\n",[73,100962,100963],{"__ignoreMap":58},[76,100964,100965,100967,100969,100972],{"class":78,"line":79},[76,100966,23903],{"class":2035},[76,100968,23906],{"class":305},[76,100970,100971],{"class":305}," \"mujoco>=2.3\"",[76,100973,100974],{"class":305}," numpy\n",[14,100976,100977],{},"安装完成后，先做最小检查：",[67,100979,100981],{"className":23894,"code":100980,"language":23896,"meta":58,"style":58},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[73,100982,100983],{"__ignoreMap":58},[76,100984,100985,100987,100989],{"class":78,"line":79},[76,100986,71],{"class":2035},[76,100988,30431],{"class":250},[76,100990,100991],{"class":305}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100993,100994],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100996,100997],{},"conda 安装:",[67,100999,101001],{"className":23894,"code":101000,"language":23896,"meta":58,"style":58},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[73,101002,101003,101023,101033],{"__ignoreMap":58},[76,101004,101005,101007,101009,101011,101014,101017,101020],{"class":78,"line":79},[76,101006,30403],{"class":2035},[76,101008,29249],{"class":305},[76,101010,25188],{"class":250},[76,101012,101013],{"class":305}," mujoco-study",[76,101015,101016],{"class":305}," python=",[76,101018,101019],{"class":250},"3.10",[76,101021,101022],{"class":250}," -y\n",[76,101024,101025,101027,101030],{"class":78,"line":86},[76,101026,30403],{"class":2035},[76,101028,101029],{"class":305}," activate",[76,101031,101032],{"class":305}," mujoco-study\n",[76,101034,101035,101037,101039,101041],{"class":78,"line":97},[76,101036,23903],{"class":2035},[76,101038,23906],{"class":305},[76,101040,100971],{"class":305},[76,101042,100974],{"class":305},[14,101044,101045],{},"版本冲突说明:",[152,101047,101048,101054,101064,101073],{},[155,101049,101050,101051,28458],{},"不要安装 ",[73,101052,101053],{},"mujoco-py",[155,101055,101056,101057,101059,101060,101063],{},"如果旧项目里同时安装了 ",[73,101058,101053],{}," 和 ",[73,101061,101062],{},"mujoco","，建议新建干净虚拟环境。",[155,101065,101066,101069,101070,28458],{},[73,101067,101068],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[73,101071,101072],{},"~\u002F.mujoco\u002Fmujoco210",[155,101074,101075,101076,82609,101079,101082],{},"离屏渲染可能涉及 OpenGL 后端，",[73,101077,101078],{},"MUJOCO_GL=egl",[73,101080,101081],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[140,101084,101086],{"id":101085},"_3核心概念解释","3.核心概念解释",[14,101088,101089],{},"MuJoCo 的基本执行流程:",[67,101091,101094],{"className":101092,"code":101093,"language":5259,"meta":58},[5257],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[73,101095,101093],{"__ignoreMap":58},[14,101097,101098,101100],{},[73,101099,100750],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101102,101103,101105,101106,413,101109,413,101112,413,101115,413,101118,28458],{},[73,101104,100760],{}," 存放仿真运行时状态，例如 ",[73,101107,101108],{},"data.time",[73,101110,101111],{},"data.qpos",[73,101113,101114],{},"data.qvel",[73,101116,101117],{},"data.ctrl",[73,101119,101120],{},"data.xpos",[169,101122,101124],{"id":101123},"xml-是什么","XML 是什么",[14,101126,101127],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[67,101129,101131],{"className":53137,"code":101130,"language":53139,"meta":58,"style":58},"\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",[73,101132,101133,101155,101186],{"__ignoreMap":58},[76,101134,101135,101137,101139,101141,101143,101145,101148,101150,101153],{"class":78,"line":79},[76,101136,1109],{"class":93},[76,101138,51870],{"class":51370},[76,101140,14992],{"class":2035},[76,101142,247],{"class":93},[76,101144,53561],{"class":305},[76,101146,101147],{"class":2035}," pos",[76,101149,247],{"class":93},[76,101151,101152],{"class":305},"\"0 0 1\"",[76,101154,51377],{"class":93},[76,101156,101157,101159,101162,101164,101166,101169,101171,101173,101175,101178,101180,101183],{"class":78,"line":86},[76,101158,52214],{"class":93},[76,101160,101161],{"class":51370},"geom",[76,101163,14992],{"class":2035},[76,101165,247],{"class":93},[76,101167,101168],{"class":305},"\"box_geom\"",[76,101170,53894],{"class":2035},[76,101172,247],{"class":93},[76,101174,53561],{"class":305},[76,101176,101177],{"class":2035}," size",[76,101179,247],{"class":93},[76,101181,101182],{"class":305},"\"0.1 0.1 0.1\"",[76,101184,101185],{"class":93},"\u002F>\n",[76,101187,101188,101190,101192],{"class":78,"line":97},[76,101189,51855],{"class":93},[76,101191,51870],{"class":51370},[76,101193,51377],{"class":93},[14,101195,101196],{},"这段意思是：",[152,101198,101199,101205,101212],{},[155,101200,101201,101202,101204],{},"创建一个叫 ",[73,101203,53784],{}," 的刚体。",[155,101206,101207,101208,101211],{},"它初始放在 ",[73,101209,101210],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[155,101213,101214],{},"它里面有一个盒子形状的几何体。",[169,101216,101218],{"id":101217},"timestep-是什么","timestep 是什么",[14,101220,101221],{},"XML 里的：",[67,101223,101225],{"className":53137,"code":101224,"language":53139,"meta":58,"style":58},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[73,101226,101227],{"__ignoreMap":58},[76,101228,101229,101231,101233,101236,101238,101241,101244,101246,101249],{"class":78,"line":79},[76,101230,1109],{"class":93},[76,101232,69236],{"class":51370},[76,101234,101235],{"class":2035}," timestep",[76,101237,247],{"class":93},[76,101239,101240],{"class":305},"\"0.01\"",[76,101242,101243],{"class":2035}," gravity",[76,101245,247],{"class":93},[76,101247,101248],{"class":305},"\"0 0 -9.81\"",[76,101250,101185],{"class":93},[14,101252,101253,101254,101257,101258,101260],{},"表示每调用一次 ",[73,101255,101256],{},"mj_step","，仿真时间前进 ",[73,101259,39056],{}," 秒。循环 100 次，大约就是 1 秒：",[67,101262,101265],{"className":101263,"code":101264,"language":5259,"meta":58},[5257],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[73,101266,101264],{"__ignoreMap":58},[169,101268,101270],{"id":101269},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101272,101273],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[67,101275,101278],{"className":101276,"code":101277,"language":5259,"meta":58},[5257],"x y z qw qx qy qz\n",[73,101279,101277],{"__ignoreMap":58},[14,101281,101282,101283,101286,101287,101290],{},"表示一个自由刚体的位置和姿态。其中 ",[73,101284,101285],{},"x y z"," 是位置，",[73,101288,101289],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[140,101292,101294],{"id":101293},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101296,101297],{},"新建文件:",[67,101299,101301],{"className":23894,"code":101300,"language":23896,"meta":58,"style":58},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[73,101302,101303,101313,101320],{"__ignoreMap":58},[76,101304,101305,101308,101310],{"class":78,"line":79},[76,101306,101307],{"class":2035},"mkdir",[76,101309,29289],{"class":250},[76,101311,101312],{"class":305}," mujoco_tutorial\n",[76,101314,101315,101318],{"class":78,"line":86},[76,101316,101317],{"class":250},"cd",[76,101319,101312],{"class":305},[76,101321,101322,101325],{"class":78,"line":97},[76,101323,101324],{"class":2035},"touch",[76,101326,101327],{"class":305}," ch1_first_sim.py\n",[14,101329,101330],{},"写入:",[67,101332,101334],{"className":69,"code":101333,"language":71,"meta":58,"style":58},"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",[73,101335,101336,101343,101347,101351,101361,101366,101371,101375,101380,101385,101389,101394,101399,101404,101409,101414,101419,101423,101427,101431,101444,101458,101468,101472,101484,101496,101508,101520,101532,101536,101553,101558,101562,101573,101584,101588,101592,101606],{"__ignoreMap":58},[76,101337,101338,101340],{"class":78,"line":79},[76,101339,90],{"class":89},[76,101341,101342],{"class":93}," mujoco\n",[76,101344,101345],{"class":78,"line":86},[76,101346,2472],{"emptyLinePlaceholder":125},[76,101348,101349],{"class":78,"line":97},[76,101350,2472],{"emptyLinePlaceholder":125},[76,101352,101353,101356,101358],{"class":78,"line":103},[76,101354,101355],{"class":250},"XML",[76,101357,13636],{"class":89},[76,101359,101360],{"class":305}," \"\"\"\n",[76,101362,101363],{"class":78,"line":1273},[76,101364,101365],{"class":305},"\u003Cmujoco model=\"first_sim\">\n",[76,101367,101368],{"class":78,"line":1287},[76,101369,101370],{"class":305},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[76,101372,101373],{"class":78,"line":1293},[76,101374,2472],{"emptyLinePlaceholder":125},[76,101376,101377],{"class":78,"line":1384},[76,101378,101379],{"class":305},"  \u003Cworldbody>\n",[76,101381,101382],{"class":78,"line":1390},[76,101383,101384],{"class":305},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[76,101386,101387],{"class":78,"line":1402},[76,101388,2472],{"emptyLinePlaceholder":125},[76,101390,101391],{"class":78,"line":1684},[76,101392,101393],{"class":305},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[76,101395,101396],{"class":78,"line":1689},[76,101397,101398],{"class":305},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[76,101400,101401],{"class":78,"line":1695},[76,101402,101403],{"class":305},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[76,101405,101406],{"class":78,"line":1700},[76,101407,101408],{"class":305},"    \u003C\u002Fbody>\n",[76,101410,101411],{"class":78,"line":1714},[76,101412,101413],{"class":305},"  \u003C\u002Fworldbody>\n",[76,101415,101416],{"class":78,"line":1719},[76,101417,101418],{"class":305},"\u003C\u002Fmujoco>\n",[76,101420,101421],{"class":78,"line":1725},[76,101422,95767],{"class":305},[76,101424,101425],{"class":78,"line":1746},[76,101426,2472],{"emptyLinePlaceholder":125},[76,101428,101429],{"class":78,"line":1751},[76,101430,2472],{"emptyLinePlaceholder":125},[76,101432,101433,101435,101437,101440,101442],{"class":78,"line":1765},[76,101434,32017],{"class":89},[76,101436,2045],{"class":2035},[76,101438,101439],{"class":93},"() -> ",[76,101441,95755],{"class":250},[76,101443,3811],{"class":93},[76,101445,101446,101449,101451,101454,101456],{"class":78,"line":1770},[76,101447,101448],{"class":93},"    model ",[76,101450,247],{"class":89},[76,101452,101453],{"class":93}," mujoco.MjModel.from_xml_string(",[76,101455,101355],{"class":250},[76,101457,208],{"class":93},[76,101459,101460,101463,101465],{"class":78,"line":1799},[76,101461,101462],{"class":93},"    data ",[76,101464,247],{"class":89},[76,101466,101467],{"class":93}," mujoco.MjData(model)\n",[76,101469,101470],{"class":78,"line":1804},[76,101471,2472],{"emptyLinePlaceholder":125},[76,101473,101474,101476,101478,101481],{"class":78,"line":1821},[76,101475,31369],{"class":250},[76,101477,202],{"class":93},[76,101479,101480],{"class":305},"\"nq:\"",[76,101482,101483],{"class":93},", model.nq)\n",[76,101485,101486,101488,101490,101493],{"class":78,"line":1826},[76,101487,31369],{"class":250},[76,101489,202],{"class":93},[76,101491,101492],{"class":305},"\"nv:\"",[76,101494,101495],{"class":93},", model.nv)\n",[76,101497,101498,101500,101502,101505],{"class":78,"line":1831},[76,101499,31369],{"class":250},[76,101501,202],{"class":93},[76,101503,101504],{"class":305},"\"nu:\"",[76,101506,101507],{"class":93},", model.nu)\n",[76,101509,101510,101512,101514,101517],{"class":78,"line":1836},[76,101511,31369],{"class":250},[76,101513,202],{"class":93},[76,101515,101516],{"class":305},"\"initial time:\"",[76,101518,101519],{"class":93},", data.time)\n",[76,101521,101522,101524,101526,101529],{"class":78,"line":1850},[76,101523,31369],{"class":250},[76,101525,202],{"class":93},[76,101527,101528],{"class":305},"\"initial qpos:\"",[76,101530,101531],{"class":93},", data.qpos.copy())\n",[76,101533,101534],{"class":78,"line":1855},[76,101535,2472],{"emptyLinePlaceholder":125},[76,101537,101538,101540,101543,101545,101547,101549,101551],{"class":78,"line":2649},[76,101539,3273],{"class":89},[76,101541,101542],{"class":93}," _ ",[76,101544,26116],{"class":89},[76,101546,32513],{"class":250},[76,101548,202],{"class":93},[76,101550,512],{"class":250},[76,101552,30856],{"class":93},[76,101554,101555],{"class":78,"line":2663},[76,101556,101557],{"class":93},"        mujoco.mj_step(model, data)\n",[76,101559,101560],{"class":78,"line":2671},[76,101561,2472],{"emptyLinePlaceholder":125},[76,101563,101564,101566,101568,101571],{"class":78,"line":2676},[76,101565,31369],{"class":250},[76,101567,202],{"class":93},[76,101569,101570],{"class":305},"\"final time:\"",[76,101572,101519],{"class":93},[76,101574,101575,101577,101579,101582],{"class":78,"line":2682},[76,101576,31369],{"class":250},[76,101578,202],{"class":93},[76,101580,101581],{"class":305},"\"final qpos:\"",[76,101583,101531],{"class":93},[76,101585,101586],{"class":78,"line":2688},[76,101587,2472],{"emptyLinePlaceholder":125},[76,101589,101590],{"class":78,"line":2693},[76,101591,2472],{"emptyLinePlaceholder":125},[76,101593,101594,101596,101598,101601,101604],{"class":78,"line":8020},[76,101595,1603],{"class":89},[76,101597,31290],{"class":250},[76,101599,101600],{"class":89}," ==",[76,101602,101603],{"class":305}," \"__main__\"",[76,101605,3811],{"class":93},[76,101607,101608],{"class":78,"line":8044},[76,101609,101610],{"class":93},"    main()\n",[169,101612,101613],{"id":101613},"代码逐段解释",[14,101615,101616],{},"导入库：",[67,101618,101620],{"className":69,"code":101619,"language":71,"meta":58,"style":58},"import mujoco\n",[73,101621,101622],{"__ignoreMap":58},[76,101623,101624,101626],{"class":78,"line":79},[76,101625,90],{"class":89},[76,101627,101342],{"class":93},[14,101629,101630],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101632,101633],{},"定义 XML：",[67,101635,101637],{"className":69,"code":101636,"language":71,"meta":58,"style":58},"XML = \"\"\"\n...\n\"\"\"\n",[73,101638,101639,101647,101652],{"__ignoreMap":58},[76,101640,101641,101643,101645],{"class":78,"line":79},[76,101642,101355],{"class":250},[76,101644,13636],{"class":89},[76,101646,101360],{"class":305},[76,101648,101649],{"class":78,"line":86},[76,101650,101651],{"class":305},"...\n",[76,101653,101654],{"class":78,"line":97},[76,101655,95767],{"class":305},[14,101657,101658,101659,101662],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[73,101660,101661],{},"freejoint"," 的方块。",[14,101664,101665],{},"编译模型：",[67,101667,101669],{"className":69,"code":101668,"language":71,"meta":58,"style":58},"model = mujoco.MjModel.from_xml_string(XML)\n",[73,101670,101671],{"__ignoreMap":58},[76,101672,101673,101676,101678,101680,101682],{"class":78,"line":79},[76,101674,101675],{"class":93},"model ",[76,101677,247],{"class":89},[76,101679,101453],{"class":93},[76,101681,101355],{"class":250},[76,101683,208],{"class":93},[14,101685,101686],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101688,101689],{},"创建数据：",[67,101691,101693],{"className":69,"code":101692,"language":71,"meta":58,"style":58},"data = mujoco.MjData(model)\n",[73,101694,101695],{"__ignoreMap":58},[76,101696,101697,101700,101702],{"class":78,"line":79},[76,101698,101699],{"class":93},"data ",[76,101701,247],{"class":89},[76,101703,101467],{"class":93},[14,101705,101706,101708,101709,101711],{},[73,101707,33471],{}," 会保存仿真当前状态。刚创建时，时间是 ",[73,101710,392],{},"，方块还在初始位置。",[14,101713,101714],{},"推进仿真：",[67,101716,101718],{"className":69,"code":101717,"language":71,"meta":58,"style":58},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[73,101719,101720,101736],{"__ignoreMap":58},[76,101721,101722,101724,101726,101728,101730,101732,101734],{"class":78,"line":79},[76,101723,3097],{"class":89},[76,101725,101542],{"class":93},[76,101727,26116],{"class":89},[76,101729,32513],{"class":250},[76,101731,202],{"class":93},[76,101733,512],{"class":250},[76,101735,30856],{"class":93},[76,101737,101738],{"class":78,"line":86},[76,101739,101740],{"class":93},"    mujoco.mj_step(model, data)\n",[14,101742,101743,101744,101746],{},"每次 ",[73,101745,101256],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[169,101748,101749],{"id":101749},"代码逐行细讲",[14,101751,101752],{},"下面把完整代码按新手视角拆开讲。",[67,101754,101755],{"className":69,"code":101619,"language":71,"meta":58,"style":58},[73,101756,101757],{"__ignoreMap":58},[76,101758,101759,101761],{"class":78,"line":79},[76,101760,90],{"class":89},[76,101762,101342],{"class":93},[14,101764,101765,101767,101768,413,101770,413,101772,28458],{},[73,101766,90],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[73,101769,100716],{},[73,101771,100721],{},[73,101773,101774],{},"mujoco.mj_step",[67,101776,101777],{"className":69,"code":101636,"language":71,"meta":58,"style":58},[73,101778,101779,101787,101791],{"__ignoreMap":58},[76,101780,101781,101783,101785],{"class":78,"line":79},[76,101782,101355],{"class":250},[76,101784,13636],{"class":89},[76,101786,101360],{"class":305},[76,101788,101789],{"class":78,"line":86},[76,101790,101651],{"class":305},[76,101792,101793],{"class":78,"line":97},[76,101794,95767],{"class":305},[14,101796,101797,101799,101800,101803],{},[73,101798,101355],{}," 是一个变量名。右边的三引号 ",[73,101801,101802],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[67,101805,101806],{"className":53137,"code":101365,"language":53139,"meta":58,"style":58},[73,101807,101808],{"__ignoreMap":58},[76,101809,101810,101812,101814,101817,101819,101822],{"class":78,"line":79},[76,101811,1109],{"class":93},[76,101813,101062],{"class":51370},[76,101815,101816],{"class":2035}," model",[76,101818,247],{"class":93},[76,101820,101821],{"class":305},"\"first_sim\"",[76,101823,51377],{"class":93},[14,101825,101826,101827,101830,101831,28458],{},"这是 XML 的根标签。",[73,101828,101829],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[73,101832,101833],{},"first_sim",[67,101835,101836],{"className":53137,"code":101224,"language":53139,"meta":58,"style":58},[73,101837,101838],{"__ignoreMap":58},[76,101839,101840,101842,101844,101846,101848,101850,101852,101854,101856],{"class":78,"line":79},[76,101841,1109],{"class":93},[76,101843,69236],{"class":51370},[76,101845,101235],{"class":2035},[76,101847,247],{"class":93},[76,101849,101240],{"class":305},[76,101851,101243],{"class":2035},[76,101853,247],{"class":93},[76,101855,101248],{"class":305},[76,101857,101185],{"class":93},[14,101859,101860,101862,101863,101866,101867,101870],{},[73,101861,69236],{}," 用来设置仿真参数。",[73,101864,101865],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[73,101868,101869],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[67,101872,101874],{"className":53137,"code":101873,"language":53139,"meta":58,"style":58},"\u003Cworldbody>\n",[73,101875,101876],{"__ignoreMap":58},[76,101877,101878,101880,101883],{"class":78,"line":79},[76,101879,1109],{"class":93},[76,101881,101882],{"class":51370},"worldbody",[76,101884,51377],{"class":93},[14,101886,101887,101889],{},[73,101888,101882],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[67,101891,101893],{"className":53137,"code":101892,"language":53139,"meta":58,"style":58},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[73,101894,101895],{"__ignoreMap":58},[76,101896,101897,101899,101901,101903,101905,101908,101910,101912,101915,101917,101919,101922,101924,101926,101929],{"class":78,"line":79},[76,101898,1109],{"class":93},[76,101900,101161],{"class":51370},[76,101902,14992],{"class":2035},[76,101904,247],{"class":93},[76,101906,101907],{"class":305},"\"floor\"",[76,101909,53894],{"class":2035},[76,101911,247],{"class":93},[76,101913,101914],{"class":305},"\"plane\"",[76,101916,101177],{"class":2035},[76,101918,247],{"class":93},[76,101920,101921],{"class":305},"\"2 2 0.1\"",[76,101923,78837],{"class":2035},[76,101925,247],{"class":93},[76,101927,101928],{"class":305},"\"0.8 0.8 0.8 1\"",[76,101930,101185],{"class":93},[14,101932,101933,101934,101936,101937,101940,101941,101944,101945,101947],{},"这行创建地面。",[73,101935,101161],{}," 是几何体。",[73,101938,101939],{},"name=\"floor\""," 是名字。",[73,101942,101943],{},"type=\"plane\""," 表示平面。",[73,101946,55180],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[67,101949,101951],{"className":53137,"code":101950,"language":53139,"meta":58,"style":58},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[73,101952,101953],{"__ignoreMap":58},[76,101954,101955,101957,101959,101961,101963,101965,101967,101969,101971],{"class":78,"line":79},[76,101956,1109],{"class":93},[76,101958,51870],{"class":51370},[76,101960,14992],{"class":2035},[76,101962,247],{"class":93},[76,101964,53561],{"class":305},[76,101966,101147],{"class":2035},[76,101968,247],{"class":93},[76,101970,101152],{"class":305},[76,101972,51377],{"class":93},[14,101974,101975,101976,28458,101978,101981,101982,101984],{},"这行创建一个刚体，名字叫 ",[73,101977,53784],{},[73,101979,101980],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[73,101983,101210],{},"，也就是离地面 1 米高。",[67,101986,101988],{"className":53137,"code":101987,"language":53139,"meta":58,"style":58},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[73,101989,101990],{"__ignoreMap":58},[76,101991,101992,101994,101996,101998,102000,102003],{"class":78,"line":79},[76,101993,1109],{"class":93},[76,101995,101661],{"class":51370},[76,101997,14992],{"class":2035},[76,101999,247],{"class":93},[76,102001,102002],{"class":305},"\"box_free\"",[76,102004,101185],{"class":93},[14,102006,102007,102008,102010],{},"这行很重要。",[73,102009,101661],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[67,102012,102014],{"className":53137,"code":102013,"language":53139,"meta":58,"style":58},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[73,102015,102016],{"__ignoreMap":58},[76,102017,102018,102020,102022,102024,102026,102028,102030,102032,102034,102036,102038,102040,102043,102045,102047,102049,102051,102054],{"class":78,"line":79},[76,102019,1109],{"class":93},[76,102021,101161],{"class":51370},[76,102023,14992],{"class":2035},[76,102025,247],{"class":93},[76,102027,101168],{"class":305},[76,102029,53894],{"class":2035},[76,102031,247],{"class":93},[76,102033,53561],{"class":305},[76,102035,101177],{"class":2035},[76,102037,247],{"class":93},[76,102039,101182],{"class":305},[76,102041,102042],{"class":2035}," mass",[76,102044,247],{"class":93},[76,102046,3750],{"class":305},[76,102048,78837],{"class":2035},[76,102050,247],{"class":93},[76,102052,102053],{"class":305},"\"1 0 0 1\"",[76,102055,101185],{"class":93},[14,102057,102058,102059,102062,102063,102066,102067,102070,102071,102074],{},"这行给 box body 添加一个盒子形状。",[73,102060,102061],{},"type=\"box\""," 表示形状是盒子。",[73,102064,102065],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[73,102068,102069],{},"mass=\"1\""," 表示质量是 1。",[73,102072,102073],{},"rgba=\"1 0 0 1\""," 表示红色。",[67,102076,102078],{"className":69,"code":102077,"language":71,"meta":58,"style":58},"def main() -> None:\n",[73,102079,102080],{"__ignoreMap":58},[76,102081,102082,102084,102086,102088,102090],{"class":78,"line":79},[76,102083,32017],{"class":89},[76,102085,2045],{"class":2035},[76,102087,101439],{"class":93},[76,102089,95755],{"class":250},[76,102091,3811],{"class":93},[14,102093,102094,102096,102097,102100,102101,102104],{},[73,102095,32017],{}," 用来定义函数。这里定义了一个叫 ",[73,102098,102099],{},"main"," 的函数。",[73,102102,102103],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[67,102106,102107],{"className":69,"code":101668,"language":71,"meta":58,"style":58},[73,102108,102109],{"__ignoreMap":58},[76,102110,102111,102113,102115,102117,102119],{"class":78,"line":79},[76,102112,101675],{"class":93},[76,102114,247],{"class":89},[76,102116,101453],{"class":93},[76,102118,101355],{"class":250},[76,102120,208],{"class":93},[14,102122,102123,102124,102127],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[73,102125,102126],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[67,102129,102130],{"className":69,"code":101692,"language":71,"meta":58,"style":58},[73,102131,102132],{"__ignoreMap":58},[76,102133,102134,102136,102138],{"class":78,"line":79},[76,102135,101699],{"class":93},[76,102137,247],{"class":89},[76,102139,101467],{"class":93},[14,102141,102142,102143,102145,102146,102148],{},"这行创建仿真数据。",[73,102144,33471],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[73,102147,33471],{}," 都会变化。",[67,102150,102152],{"className":69,"code":102151,"language":71,"meta":58,"style":58},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[73,102153,102154,102164,102174],{"__ignoreMap":58},[76,102155,102156,102158,102160,102162],{"class":78,"line":79},[76,102157,30485],{"class":250},[76,102159,202],{"class":93},[76,102161,101480],{"class":305},[76,102163,101483],{"class":93},[76,102165,102166,102168,102170,102172],{"class":78,"line":86},[76,102167,30485],{"class":250},[76,102169,202],{"class":93},[76,102171,101492],{"class":305},[76,102173,101495],{"class":93},[76,102175,102176,102178,102180,102182],{"class":78,"line":97},[76,102177,30485],{"class":250},[76,102179,202],{"class":93},[76,102181,101504],{"class":305},[76,102183,101507],{"class":93},[14,102185,102186,102188,102189,102192,102193,102196,102197,102200,102201,102204],{},[73,102187,30485],{}," 用来输出信息。",[73,102190,102191],{},"model.nq"," 是位置变量数量，",[73,102194,102195],{},"model.nv"," 是速度变量数量，",[73,102198,102199],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[73,102202,102203],{},"nu"," 是 0。",[67,102206,102208],{"className":69,"code":102207,"language":71,"meta":58,"style":58},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[73,102209,102210,102220],{"__ignoreMap":58},[76,102211,102212,102214,102216,102218],{"class":78,"line":79},[76,102213,30485],{"class":250},[76,102215,202],{"class":93},[76,102217,101516],{"class":305},[76,102219,101519],{"class":93},[76,102221,102222,102224,102226,102228],{"class":78,"line":86},[76,102223,30485],{"class":250},[76,102225,202],{"class":93},[76,102227,101528],{"class":305},[76,102229,101531],{"class":93},[14,102231,102232,102233,102235,102236,102238,102239,102242],{},"这里打印初始时间和初始位置。",[73,102234,101108],{}," 一开始是 0。",[73,102237,101111],{}," 是位置数组。",[73,102240,102241],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[67,102244,102245],{"className":69,"code":101717,"language":71,"meta":58,"style":58},[73,102246,102247,102263],{"__ignoreMap":58},[76,102248,102249,102251,102253,102255,102257,102259,102261],{"class":78,"line":79},[76,102250,3097],{"class":89},[76,102252,101542],{"class":93},[76,102254,26116],{"class":89},[76,102256,32513],{"class":250},[76,102258,202],{"class":93},[76,102260,512],{"class":250},[76,102262,30856],{"class":93},[76,102264,102265],{"class":78,"line":86},[76,102266,101740],{"class":93},[14,102268,102269,102271,102272,102275,102276,102278,102279,102281],{},[73,102270,3097],{}," 是循环。",[73,102273,102274],{},"range(100)"," 表示循环 100 次。",[73,102277,1191],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[73,102280,101256],{},"，仿真就前进一步。",[67,102283,102285],{"className":69,"code":102284,"language":71,"meta":58,"style":58},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[73,102286,102287,102297],{"__ignoreMap":58},[76,102288,102289,102291,102293,102295],{"class":78,"line":79},[76,102290,30485],{"class":250},[76,102292,202],{"class":93},[76,102294,101570],{"class":305},[76,102296,101519],{"class":93},[76,102298,102299,102301,102303,102305],{"class":78,"line":86},[76,102300,30485],{"class":250},[76,102302,202],{"class":93},[76,102304,101581],{"class":305},[76,102306,101531],{"class":93},[14,102308,102309],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[67,102311,102313],{"className":69,"code":102312,"language":71,"meta":58,"style":58},"if __name__ == \"__main__\":\n    main()\n",[73,102314,102315,102327],{"__ignoreMap":58},[76,102316,102317,102319,102321,102323,102325],{"class":78,"line":79},[76,102318,1603],{"class":89},[76,102320,31290],{"class":250},[76,102322,101600],{"class":89},[76,102324,101603],{"class":305},[76,102326,3811],{"class":93},[76,102328,102329],{"class":78,"line":86},[76,102330,101610],{"class":93},[14,102332,102333,102334,102337,102338,28458],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[73,102335,102336],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[73,102339,102336],{},[14,102341,102342],{},"运行:",[67,102344,102346],{"className":23894,"code":102345,"language":23896,"meta":58,"style":58},"python ch1_first_sim.py\n",[73,102347,102348],{"__ignoreMap":58},[76,102349,102350,102352],{"class":78,"line":79},[76,102351,71],{"class":2035},[76,102353,101327],{"class":305},[140,102355,102357],{"id":102356},"_5运行结果说明","5.运行结果说明",[14,102359,102360],{},"你应该看到类似输出:",[67,102362,102365],{"className":102363,"code":102364,"language":5259,"meta":58},[5257],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[73,102366,102364],{"__ignoreMap":58},[14,102368,102369,102371,102372,102375,102376,28458],{},[73,102370,101661],{}," 有 7 个位置变量: ",[73,102373,102374],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[73,102377,102378],{},"vx vy vz wx wy wz",[14,102380,102381,102382,102385],{},"你还会看到 ",[73,102383,102384],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[140,102387,102389],{"id":102388},"_6验证步骤","6.验证步骤",[14,102391,102392],{},"确认版本:",[67,102394,102395],{"className":23894,"code":100980,"language":23896,"meta":58,"style":58},[73,102396,102397],{"__ignoreMap":58},[76,102398,102399,102401,102403],{"class":78,"line":79},[76,102400,71],{"class":2035},[76,102402,30431],{"class":250},[76,102404,100991],{"class":305},[14,102406,102407],{},"确认导入的是官方 bindings:",[67,102409,102411],{"className":23894,"code":102410,"language":23896,"meta":58,"style":58},"python -c \"import mujoco; print(mujoco)\"\n",[73,102412,102413],{"__ignoreMap":58},[76,102414,102415,102417,102419],{"class":78,"line":79},[76,102416,71],{"class":2035},[76,102418,30431],{"class":250},[76,102420,102421],{"class":305}," \"import mujoco; print(mujoco)\"\n",[14,102423,102424],{},"运行程序:",[67,102426,102427],{"className":23894,"code":102345,"language":23896,"meta":58,"style":58},[73,102428,102429],{"__ignoreMap":58},[76,102430,102431,102433],{"class":78,"line":79},[76,102432,71],{"class":2035},[76,102434,101327],{"class":305},[14,102436,102437,102438,102441,102442,28458],{},"检查 ",[73,102439,102440],{},"final time"," 是否约等于 ",[73,102443,102444],{},"1.0",[14,102446,102447],{},"再做几个小实验：",[152,102449,102450,102460,102468,102481],{},[155,102451,102452,102453,102455,102456,102459],{},"把 ",[73,102454,101980],{}," 改成 ",[73,102457,102458],{},"pos=\"0 0 2\"","，观察初始高度变化。",[155,102461,102452,102462,102455,102464,102467],{},[73,102463,101869],{},[73,102465,102466],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[155,102469,102452,102470,102455,102472,102475,102476,102478,102479,28458],{},[73,102471,101865],{},[73,102473,102474],{},"timestep=\"0.005\"","，观察 100 步后的 ",[73,102477,102440],{}," 是否变成约 ",[73,102480,35399],{},[155,102482,102483,102484,102487],{},"删除 ",[73,102485,102486],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102489,102490],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[140,102492,102494],{"id":102493},"_7常见错误与解决方案","7.常见错误与解决方案",[169,102496,102498],{"id":102497},"modulenotfounderror-no-module-named-mujoco",[73,102499,102500],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102502,102503],{},"解决:",[67,102505,102507],{"className":23894,"code":102506,"language":23896,"meta":58,"style":58},"pip install \"mujoco>=2.3\"\n",[73,102508,102509],{"__ignoreMap":58},[76,102510,102511,102513,102515],{"class":78,"line":79},[76,102512,23903],{"class":2035},[76,102514,23906],{"class":305},[76,102516,102517],{"class":305}," \"mujoco>=2.3\"\n",[169,102519,102521],{"id":102520},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102523,102524],{},"先安装系统依赖:",[67,102526,102528],{"className":23894,"code":102527,"language":23896,"meta":58,"style":58},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[73,102529,102530],{"__ignoreMap":58},[76,102531,102532,102534,102536,102538,102540,102543,102545,102548,102550,102553,102555],{"class":78,"line":79},[76,102533,24649],{"class":2035},[76,102535,26388],{"class":305},[76,102537,23906],{"class":305},[76,102539,26473],{"class":250},[76,102541,102542],{"class":305}," mesa-libGL",[76,102544,100855],{"class":305},[76,102546,102547],{"class":305}," glfw",[76,102549,100875],{"class":305},[76,102551,102552],{"class":305}," libX11",[76,102554,100888],{"class":305},[76,102556,102557],{"class":305}," libXrandr\n",[169,102559,102561],{"id":102560},"xml-解析失败","XML 解析失败",[14,102563,102564],{},"检查:",[152,102566,102567,102570,102573,102579],{},[155,102568,102569],{},"标签是否闭合",[155,102571,102572],{},"属性是否带引号",[155,102574,102575,102576],{},"根节点是否是 ",[73,102577,102578],{},"\u003Cmujoco>",[155,102580,102581,102583,102584,102587],{},[73,102582,51870],{}," 是否放在 ",[73,102585,102586],{},"\u003Cworldbody>"," 内部",[169,102589,102591,102593,102594],{"id":102590},"final-time-不是严格等于-10",[73,102592,102440],{}," 不是严格等于 ",[73,102595,102444],{},[14,102597,102598],{},"这通常不是错误。浮点数计算可能得到：",[67,102600,102603],{"className":102601,"code":102602,"language":5259,"meta":58},[5257],"1.0000000000000007\n",[73,102604,102602],{"__ignoreMap":58},[14,102606,102607,102608,102610],{},"只要接近 ",[73,102609,102444],{}," 就正常。",[169,102612,102613],{"id":102613},"方块没有掉下来",[14,102615,102616],{},"检查：",[152,102618,102619,102625,102631,102636],{},[155,102620,102621,102622],{},"方块 body 里是否有 ",[73,102623,102624],{},"\u003Cfreejoint\u002F>",[155,102626,102627,102628],{},"重力是否是 ",[73,102629,102630],{},"0 0 -9.81",[155,102632,102633,102634],{},"是否真的调用了 ",[73,102635,100726],{},[155,102637,102638,102639,102641,102642],{},"你看的是否是 ",[73,102640,102384],{},"，不是 ",[73,102643,102644],{},"initial qpos",[140,102646,102648],{"id":102647},"_8本章小结","8.本章小结",[14,102650,102651],{},"本章你已经完成了 MuJoCo 的最小闭环：",[67,102653,102656],{"className":102654,"code":102655,"language":5259,"meta":58},[5257],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[73,102657,102655],{"__ignoreMap":58},[14,102659,102660],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[117,102662,102663],{},"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":58,"searchDepth":86,"depth":86,"links":102665},[102666,102667,102668,102673,102677,102678,102679,102687],{"id":100687,"depth":86,"text":100688},{"id":100810,"depth":86,"text":100811},{"id":101085,"depth":86,"text":101086,"children":102669},[102670,102671,102672],{"id":101123,"depth":97,"text":101124},{"id":101217,"depth":97,"text":101218},{"id":101269,"depth":97,"text":101270},{"id":101293,"depth":86,"text":101294,"children":102674},[102675,102676],{"id":101613,"depth":97,"text":101613},{"id":101749,"depth":97,"text":101749},{"id":102356,"depth":86,"text":102357},{"id":102388,"depth":86,"text":102389},{"id":102493,"depth":86,"text":102494,"children":102680},[102681,102682,102683,102684,102686],{"id":102497,"depth":97,"text":102500},{"id":102520,"depth":97,"text":102521},{"id":102560,"depth":97,"text":102561},{"id":102590,"depth":97,"text":102685},"final time 不是严格等于 1.0",{"id":102613,"depth":97,"text":102613},{"id":102647,"depth":86,"text":102648},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100679,"description":58},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102694,"title":102695,"body":102696,"description":58,"extension":123,"meta":104352,"navigation":125,"path":104353,"seo":104354,"stem":104355,"__hash__":104356},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102697,"toc":104328},[102698,102701,102703,102706,102709,102726,102821,102824,102830,102832,102834,102858,102861,102875,102878,102919,102921,102934,102936,102939,102987,102999,103002,103005,103011,103024,103091,103094,103113,103116,103119,103125,103127,103136,103139,103143,103152,103234,103243,103247,103253,103267,103277,103279,103609,103612,103624,103626,103637,103639,103642,103660,103663,103666,103684,103695,103698,103713,103723,103725,103746,103763,103783,103789,103829,103845,103861,103867,103870,103894,103910,103915,103945,103962,103987,103990,104005,104014,104029,104038,104053,104060,104062,104072,104085,104092,104095,104134,104141,104143,104195,104197,104203,104206,104213,104220,104223,104225,104243,104246,104249,104283,104295,104297,104300,104322,104325],[10,102699,102695],{"id":102700},"_2xml-与-mjcf-物理建模基础",[140,102702,100688],{"id":100687},[14,102704,102705],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102707,102708],{},"本章结束后，你应该能看懂一个简单模型里：",[152,102710,102711,102714,102717,102720,102723],{},[155,102712,102713],{},"地面在哪里。",[155,102715,102716],{},"物体初始位置在哪里。",[155,102718,102719],{},"几何体是什么形状。",[155,102721,102722],{},"哪些 body 可以自由运动。",[155,102724,102725],{},"如何用名字在 Python 里找到 XML 中的对象。",[338,102727,102728,102738],{},[341,102729,102730],{},[344,102731,102732,102735],{},[347,102733,102734],{"align":23808},"标签",[347,102736,102737],{"align":23808},"作用",[385,102739,102740,102749,102759,102768,102778,102788,102801,102811],{},[344,102741,102742,102746],{},[390,102743,102744],{"align":23808},[73,102745,102578],{},[390,102747,102748],{"align":23808},"根节点",[344,102750,102751,102756],{},[390,102752,102753],{"align":23808},[73,102754,102755],{},"\u003Coption>",[390,102757,102758],{"align":23808},"仿真参数",[344,102760,102761,102765],{},[390,102762,102763],{"align":23808},[73,102764,102586],{},[390,102766,102767],{"align":23808},"世界中的物体",[344,102769,102770,102775],{},[390,102771,102772],{"align":23808},[73,102773,102774],{},"\u003Cbody>",[390,102776,102777],{"align":23808},"刚体",[344,102779,102780,102785],{},[390,102781,102782],{"align":23808},[73,102783,102784],{},"\u003Cgeom>",[390,102786,102787],{"align":23808},"几何体、碰撞体、可视体",[344,102789,102790,102798],{},[390,102791,102792,25051,102795],{"align":23808},[73,102793,102794],{},"\u003Cjoint>",[73,102796,102797],{},"\u003Cfreejoint>",[390,102799,102800],{"align":23808},"关节",[344,102802,102803,102808],{},[390,102804,102805],{"align":23808},[73,102806,102807],{},"\u003Csite>",[390,102809,102810],{"align":23808},"标记点",[344,102812,102813,102818],{},[390,102814,102815],{"align":23808},[73,102816,102817],{},"\u003Cactuator>",[390,102819,102820],{"align":23808},"控制器",[14,102822,102823],{},"初学时可以先记住：",[67,102825,102828],{"className":102826,"code":102827,"language":5259,"meta":58},[5257],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[73,102829,102827],{"__ignoreMap":58},[140,102831,100811],{"id":100810},[14,102833,100814],{},[67,102835,102837],{"className":23894,"code":102836,"language":23896,"meta":58,"style":58},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[73,102838,102839],{"__ignoreMap":58},[76,102840,102841,102843,102845,102847,102849,102851,102853,102855],{"class":78,"line":79},[76,102842,24649],{"class":2035},[76,102844,26388],{"class":305},[76,102846,23906],{"class":305},[76,102848,26473],{"class":250},[76,102850,102542],{"class":305},[76,102852,100855],{"class":305},[76,102854,102547],{"class":305},[76,102856,102857],{"class":305}," glfw-devel\n",[14,102859,102860],{},"pip:",[67,102862,102863],{"className":23894,"code":100960,"language":23896,"meta":58,"style":58},[73,102864,102865],{"__ignoreMap":58},[76,102866,102867,102869,102871,102873],{"class":78,"line":79},[76,102868,23903],{"class":2035},[76,102870,23906],{"class":305},[76,102872,100971],{"class":305},[76,102874,100974],{"class":305},[14,102876,102877],{},"conda:",[67,102879,102881],{"className":23894,"code":102880,"language":23896,"meta":58,"style":58},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[73,102882,102883,102900,102909],{"__ignoreMap":58},[76,102884,102885,102887,102889,102891,102894,102896,102898],{"class":78,"line":79},[76,102886,30403],{"class":2035},[76,102888,29249],{"class":305},[76,102890,25188],{"class":250},[76,102892,102893],{"class":305}," mujoco-xml",[76,102895,101016],{"class":305},[76,102897,101019],{"class":250},[76,102899,101022],{"class":250},[76,102901,102902,102904,102906],{"class":78,"line":86},[76,102903,30403],{"class":2035},[76,102905,101029],{"class":305},[76,102907,102908],{"class":305}," mujoco-xml\n",[76,102910,102911,102913,102915,102917],{"class":78,"line":97},[76,102912,23903],{"class":2035},[76,102914,23906],{"class":305},[76,102916,100971],{"class":305},[76,102918,100974],{"class":305},[14,102920,101045],{},[152,102922,102923,102926,102931],{},[155,102924,102925],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[155,102927,102928,102929,28458],{},"本章使用基础标签，适用于 ",[73,102930,101068],{},[155,102932,102933],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[140,102935,101086],{"id":101085},[14,102937,102938],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[67,102940,102942],{"className":53137,"code":102941,"language":53139,"meta":58,"style":58},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[73,102943,102944,102958,102966,102971,102979],{"__ignoreMap":58},[76,102945,102946,102948,102950,102952,102954,102956],{"class":78,"line":79},[76,102947,1109],{"class":93},[76,102949,101062],{"class":51370},[76,102951,101816],{"class":2035},[76,102953,247],{"class":93},[76,102955,62749],{"class":305},[76,102957,51377],{"class":93},[76,102959,102960,102962,102964],{"class":78,"line":86},[76,102961,52214],{"class":93},[76,102963,101882],{"class":51370},[76,102965,51377],{"class":93},[76,102967,102968],{"class":78,"line":97},[76,102969,102970],{"class":93},"    ...\n",[76,102972,102973,102975,102977],{"class":78,"line":103},[76,102974,52487],{"class":93},[76,102976,101882],{"class":51370},[76,102978,51377],{"class":93},[76,102980,102981,102983,102985],{"class":78,"line":1273},[76,102982,51855],{"class":93},[76,102984,101062],{"class":51370},[76,102986,51377],{"class":93},[14,102988,102989,102991,102992,102994,102995,102998],{},[73,102990,51870],{}," 表示刚体。",[73,102993,101161],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[73,102996,102997],{},"joint"," 表示刚体相对父刚体如何运动。",[169,103000,103001],{"id":103001},"层级结构非常重要",[14,103003,103004],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[67,103006,103009],{"className":103007,"code":103008,"language":5259,"meta":58},[5257],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[73,103010,103008],{"__ignoreMap":58},[14,103012,103013,101059,103016,103019,103020,103023],{},[73,103014,103015],{},"red_box_geom",[73,103017,103018],{},"box_center"," 都属于 ",[73,103021,103022],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[67,103025,103027],{"className":53137,"code":103026,"language":53139,"meta":58,"style":58},"\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",[73,103028,103029,103049,103063,103083],{"__ignoreMap":58},[76,103030,103031,103033,103035,103037,103039,103041,103043,103045,103047],{"class":78,"line":79},[76,103032,1109],{"class":93},[76,103034,51870],{"class":51370},[76,103036,14992],{"class":2035},[76,103038,247],{"class":93},[76,103040,53561],{"class":305},[76,103042,101147],{"class":2035},[76,103044,247],{"class":93},[76,103046,101152],{"class":305},[76,103048,51377],{"class":93},[76,103050,103051,103053,103055,103057,103059,103061],{"class":78,"line":86},[76,103052,52214],{"class":93},[76,103054,101661],{"class":51370},[76,103056,14992],{"class":2035},[76,103058,247],{"class":93},[76,103060,102002],{"class":305},[76,103062,101185],{"class":93},[76,103064,103065,103067,103069,103071,103073,103075,103077,103079,103081],{"class":78,"line":97},[76,103066,52214],{"class":93},[76,103068,101161],{"class":51370},[76,103070,53894],{"class":2035},[76,103072,247],{"class":93},[76,103074,53561],{"class":305},[76,103076,101177],{"class":2035},[76,103078,247],{"class":93},[76,103080,101182],{"class":305},[76,103082,101185],{"class":93},[76,103084,103085,103087,103089],{"class":78,"line":103},[76,103086,51855],{"class":93},[76,103088,51870],{"class":51370},[76,103090,51377],{"class":93},[14,103092,103093],{},"含义:",[152,103095,103096,103102,103107,103110],{},[155,103097,103098,103099,103101],{},"创建名为 ",[73,103100,53784],{}," 的刚体",[155,103103,103104,103105],{},"初始位置在世界坐标 ",[73,103106,101210],{},[155,103108,103109],{},"它有一个自由关节",[155,103111,103112],{},"它有一个盒子几何体",[169,103114,103115],{"id":103115},"坐标怎么理解",[14,103117,103118],{},"MuJoCo 默认使用三维坐标：",[67,103120,103123],{"className":103121,"code":103122,"language":5259,"meta":58},[5257],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[73,103124,103122],{"__ignoreMap":58},[14,103126,14705],{},[67,103128,103130],{"className":53137,"code":103129,"language":53139,"meta":58,"style":58},"pos=\"0 0 1\"\n",[73,103131,103132],{"__ignoreMap":58},[76,103133,103134],{"class":78,"line":79},[76,103135,103129],{"class":93},[14,103137,103138],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[169,103140,103142],{"id":103141},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103144,103145,103146,82600,103149,103151],{},"不同 ",[73,103147,103148],{},"type",[73,103150,31566],{}," 含义不同：",[338,103153,103154,103169],{},[341,103155,103156],{},[344,103157,103158,103162,103167],{},[347,103159,103160],{"align":23808},[73,103161,103148],{},[347,103163,103164,103166],{"align":23808},[73,103165,31566],{}," 示例",[347,103168,100741],{"align":23808},[385,103170,103171,103185,103200,103219],{},[344,103172,103173,103177,103182],{},[390,103174,103175],{"align":23808},[73,103176,53784],{},[390,103178,103179],{"align":23808},[73,103180,103181],{},"size=\"0.1 0.2 0.3\"",[390,103183,103184],{"align":23808},"x\u002Fy\u002Fz 半边长，不是完整长度",[344,103186,103187,103192,103197],{},[390,103188,103189],{"align":23808},[73,103190,103191],{},"sphere",[390,103193,103194],{"align":23808},[73,103195,103196],{},"size=\"0.1\"",[390,103198,103199],{"align":23808},"球半径",[344,103201,103202,103207,103212],{},[390,103203,103204],{"align":23808},[73,103205,103206],{},"capsule",[390,103208,103209],{"align":23808},[73,103210,103211],{},"size=\"0.03\"",[390,103213,103214,103215,103218],{"align":23808},"胶囊半径，长度常用 ",[73,103216,103217],{},"fromto"," 指定",[344,103220,103221,103226,103231],{},[390,103222,103223],{"align":23808},[73,103224,103225],{},"plane",[390,103227,103228],{"align":23808},[73,103229,103230],{},"size=\"3 3 0.1\"",[390,103232,103233],{"align":23808},"可视平面大小，通常当地面",[14,103235,103236,103237,103239,103240,103242],{},"最容易踩坑的是 box：",[73,103238,102065],{}," 表示边长大约是 ",[73,103241,32107],{},"，因为 MuJoCo 用的是半边长。",[169,103244,103246],{"id":103245},"site-是什么","site 是什么",[14,103248,103249,103252],{},[73,103250,103251],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[152,103254,103255,103258,103261,103264],{},[155,103256,103257],{},"标记机械臂末端。",[155,103259,103260],{},"标记目标位置。",[155,103262,103263],{},"放传感器或相机参考点。",[155,103265,103266],{},"在 Python 中读取某个关键点的世界坐标。",[14,103268,103269,103270,101059,103273,103276],{},"在后面的 Reacher 任务中，",[73,103271,103272],{},"tip",[73,103274,103275],{},"target"," 就会用 site 表示。",[140,103278,101294],{"id":101293},[67,103280,103282],{"className":69,"code":103281,"language":71,"meta":58,"style":58},"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",[73,103283,103284,103290,103300,103304,103308,103316,103321,103325,103329,103333,103338,103342,103347,103352,103357,103362,103366,103370,103374,103378,103382,103386,103398,103410,103418,103422,103437,103452,103456,103469,103484,103497,103510,103514,103530,103534,103538,103549,103561,103573,103585,103589,103593,103605],{"__ignoreMap":58},[76,103285,103286,103288],{"class":78,"line":79},[76,103287,90],{"class":89},[76,103289,101342],{"class":93},[76,103291,103292,103294,103296,103298],{"class":78,"line":86},[76,103293,90],{"class":89},[76,103295,31450],{"class":93},[76,103297,31453],{"class":89},[76,103299,31456],{"class":93},[76,103301,103302],{"class":78,"line":97},[76,103303,2472],{"emptyLinePlaceholder":125},[76,103305,103306],{"class":78,"line":103},[76,103307,2472],{"emptyLinePlaceholder":125},[76,103309,103310,103312,103314],{"class":78,"line":1273},[76,103311,101355],{"class":250},[76,103313,13636],{"class":89},[76,103315,101360],{"class":305},[76,103317,103318],{"class":78,"line":1287},[76,103319,103320],{"class":305},"\u003Cmujoco model=\"xml_basic\">\n",[76,103322,103323],{"class":78,"line":1293},[76,103324,101370],{"class":305},[76,103326,103327],{"class":78,"line":1384},[76,103328,2472],{"emptyLinePlaceholder":125},[76,103330,103331],{"class":78,"line":1390},[76,103332,101379],{"class":305},[76,103334,103335],{"class":78,"line":1402},[76,103336,103337],{"class":305},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[76,103339,103340],{"class":78,"line":1684},[76,103341,2472],{"emptyLinePlaceholder":125},[76,103343,103344],{"class":78,"line":1689},[76,103345,103346],{"class":305},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[76,103348,103349],{"class":78,"line":1695},[76,103350,103351],{"class":305},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[76,103353,103354],{"class":78,"line":1700},[76,103355,103356],{"class":305},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[76,103358,103359],{"class":78,"line":1714},[76,103360,103361],{"class":305},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[76,103363,103364],{"class":78,"line":1719},[76,103365,101408],{"class":305},[76,103367,103368],{"class":78,"line":1725},[76,103369,101413],{"class":305},[76,103371,103372],{"class":78,"line":1746},[76,103373,101418],{"class":305},[76,103375,103376],{"class":78,"line":1751},[76,103377,95767],{"class":305},[76,103379,103380],{"class":78,"line":1765},[76,103381,2472],{"emptyLinePlaceholder":125},[76,103383,103384],{"class":78,"line":1770},[76,103385,2472],{"emptyLinePlaceholder":125},[76,103387,103388,103390,103392,103394,103396],{"class":78,"line":1799},[76,103389,32017],{"class":89},[76,103391,2045],{"class":2035},[76,103393,101439],{"class":93},[76,103395,95755],{"class":250},[76,103397,3811],{"class":93},[76,103399,103400,103402,103404,103406,103408],{"class":78,"line":1804},[76,103401,101448],{"class":93},[76,103403,247],{"class":89},[76,103405,101453],{"class":93},[76,103407,101355],{"class":250},[76,103409,208],{"class":93},[76,103411,103412,103414,103416],{"class":78,"line":1821},[76,103413,101462],{"class":93},[76,103415,247],{"class":89},[76,103417,101467],{"class":93},[76,103419,103420],{"class":78,"line":1826},[76,103421,2472],{"emptyLinePlaceholder":125},[76,103423,103424,103427,103429,103432,103435],{"class":78,"line":1831},[76,103425,103426],{"class":93},"    box_body_id ",[76,103428,247],{"class":89},[76,103430,103431],{"class":93}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[76,103433,103434],{"class":305},"\"red_box\"",[76,103436,208],{"class":93},[76,103438,103439,103442,103444,103447,103450],{"class":78,"line":1836},[76,103440,103441],{"class":93},"    site_id ",[76,103443,247],{"class":89},[76,103445,103446],{"class":93}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[76,103448,103449],{"class":305},"\"box_center\"",[76,103451,208],{"class":93},[76,103453,103454],{"class":78,"line":1850},[76,103455,2472],{"emptyLinePlaceholder":125},[76,103457,103458,103460,103463,103465,103467],{"class":78,"line":1855},[76,103459,3173],{"class":89},[76,103461,103462],{"class":93}," box_body_id ",[76,103464,1109],{"class":89},[76,103466,4165],{"class":250},[76,103468,3811],{"class":93},[76,103470,103471,103474,103477,103479,103482],{"class":78,"line":2649},[76,103472,103473],{"class":89},"        raise",[76,103475,103476],{"class":250}," RuntimeError",[76,103478,202],{"class":93},[76,103480,103481],{"class":305},"\"body red_box not found\"",[76,103483,208],{"class":93},[76,103485,103486,103488,103491,103493,103495],{"class":78,"line":2663},[76,103487,3173],{"class":89},[76,103489,103490],{"class":93}," site_id ",[76,103492,1109],{"class":89},[76,103494,4165],{"class":250},[76,103496,3811],{"class":93},[76,103498,103499,103501,103503,103505,103508],{"class":78,"line":2671},[76,103500,103473],{"class":89},[76,103502,103476],{"class":250},[76,103504,202],{"class":93},[76,103506,103507],{"class":305},"\"site box_center not found\"",[76,103509,208],{"class":93},[76,103511,103512],{"class":78,"line":2676},[76,103513,2472],{"emptyLinePlaceholder":125},[76,103515,103516,103518,103520,103522,103524,103526,103528],{"class":78,"line":2682},[76,103517,3273],{"class":89},[76,103519,101542],{"class":93},[76,103521,26116],{"class":89},[76,103523,32513],{"class":250},[76,103525,202],{"class":93},[76,103527,1794],{"class":250},[76,103529,30856],{"class":93},[76,103531,103532],{"class":78,"line":2688},[76,103533,101557],{"class":93},[76,103535,103536],{"class":78,"line":2693},[76,103537,2472],{"emptyLinePlaceholder":125},[76,103539,103540,103542,103544,103547],{"class":78,"line":8020},[76,103541,31369],{"class":250},[76,103543,202],{"class":93},[76,103545,103546],{"class":305},"\"simulation time:\"",[76,103548,101519],{"class":93},[76,103550,103551,103553,103555,103558],{"class":78,"line":8044},[76,103552,31369],{"class":250},[76,103554,202],{"class":93},[76,103556,103557],{"class":305},"\"box body position:\"",[76,103559,103560],{"class":93},", data.xpos[box_body_id].copy())\n",[76,103562,103563,103565,103567,103570],{"class":78,"line":8049},[76,103564,31369],{"class":250},[76,103566,202],{"class":93},[76,103568,103569],{"class":305},"\"site position:\"",[76,103571,103572],{"class":93},", data.site_xpos[site_id].copy())\n",[76,103574,103575,103577,103579,103582],{"class":78,"line":8055},[76,103576,31369],{"class":250},[76,103578,202],{"class":93},[76,103580,103581],{"class":305},"\"box qpos:\"",[76,103583,103584],{"class":93},", np.array(data.qpos))\n",[76,103586,103587],{"class":78,"line":8082},[76,103588,2472],{"emptyLinePlaceholder":125},[76,103590,103591],{"class":78,"line":8087},[76,103592,2472],{"emptyLinePlaceholder":125},[76,103594,103595,103597,103599,103601,103603],{"class":78,"line":8093},[76,103596,1603],{"class":89},[76,103598,31290],{"class":250},[76,103600,101600],{"class":89},[76,103602,101603],{"class":305},[76,103604,3811],{"class":93},[76,103606,103607],{"class":78,"line":8105},[76,103608,101610],{"class":93},[14,103610,103611],{},"保存为：",[67,103613,103615],{"className":23894,"code":103614,"language":23896,"meta":58,"style":58},"touch ch2_xml_basic.py\n",[73,103616,103617],{"__ignoreMap":58},[76,103618,103619,103621],{"class":78,"line":79},[76,103620,101324],{"class":2035},[76,103622,103623],{"class":305}," ch2_xml_basic.py\n",[14,103625,102342],{},[67,103627,103629],{"className":23894,"code":103628,"language":23896,"meta":58,"style":58},"python ch2_xml_basic.py\n",[73,103630,103631],{"__ignoreMap":58},[76,103632,103633,103635],{"class":78,"line":79},[76,103634,71],{"class":2035},[76,103636,103623],{"class":305},[169,103638,101613],{"id":101613},[14,103640,103641],{},"用名字查找 body：",[67,103643,103645],{"className":69,"code":103644,"language":71,"meta":58,"style":58},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[73,103646,103647],{"__ignoreMap":58},[76,103648,103649,103652,103654,103656,103658],{"class":78,"line":79},[76,103650,103651],{"class":93},"box_body_id ",[76,103653,247],{"class":89},[76,103655,103431],{"class":93},[76,103657,103434],{"class":305},[76,103659,208],{"class":93},[14,103661,103662],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103664,103665],{},"用名字查找 site：",[67,103667,103669],{"className":69,"code":103668,"language":71,"meta":58,"style":58},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[73,103670,103671],{"__ignoreMap":58},[76,103672,103673,103676,103678,103680,103682],{"class":78,"line":79},[76,103674,103675],{"class":93},"site_id ",[76,103677,247],{"class":89},[76,103679,103446],{"class":93},[76,103681,103449],{"class":305},[76,103683,208],{"class":93},[14,103685,103686,103687,103690,103691,103694],{},"注意第二个参数是对象类型。查 body 就用 ",[73,103688,103689],{},"mjOBJ_BODY","，查 site 就用 ",[73,103692,103693],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103696,103697],{},"读取世界坐标：",[67,103699,103701],{"className":69,"code":103700,"language":71,"meta":58,"style":58},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[73,103702,103703,103708],{"__ignoreMap":58},[76,103704,103705],{"class":78,"line":79},[76,103706,103707],{"class":93},"data.xpos[box_body_id]\n",[76,103709,103710],{"class":78,"line":86},[76,103711,103712],{"class":93},"data.site_xpos[site_id]\n",[14,103714,103715,103718,103719,103722],{},[73,103716,103717],{},"xpos"," 是 body 的世界坐标，",[73,103720,103721],{},"site_xpos"," 是 site 的世界坐标。",[169,103724,101749],{"id":101749},[67,103726,103728],{"className":69,"code":103727,"language":71,"meta":58,"style":58},"import mujoco\nimport numpy as np\n",[73,103729,103730,103736],{"__ignoreMap":58},[76,103731,103732,103734],{"class":78,"line":79},[76,103733,90],{"class":89},[76,103735,101342],{"class":93},[76,103737,103738,103740,103742,103744],{"class":78,"line":86},[76,103739,90],{"class":89},[76,103741,31450],{"class":93},[76,103743,31453],{"class":89},[76,103745,31456],{"class":93},[14,103747,103748,103749,103752,103753,103756,103757,413,103760,28458],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[73,103750,103751],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[73,103754,103755],{},"as np"," 是习惯写法，后面就可以写 ",[73,103758,103759],{},"np.array(...)",[73,103761,103762],{},"np.round(...)",[67,103764,103765],{"className":69,"code":101636,"language":71,"meta":58,"style":58},[73,103766,103767,103775,103779],{"__ignoreMap":58},[76,103768,103769,103771,103773],{"class":78,"line":79},[76,103770,101355],{"class":250},[76,103772,13636],{"class":89},[76,103774,101360],{"class":305},[76,103776,103777],{"class":78,"line":86},[76,103778,101651],{"class":305},[76,103780,103781],{"class":78,"line":97},[76,103782,95767],{"class":305},[14,103784,103785,103786,28458],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[73,103787,103788],{},"mujoco.MjModel.from_xml_string(XML)",[67,103790,103792],{"className":53137,"code":103791,"language":53139,"meta":58,"style":58},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[73,103793,103794],{"__ignoreMap":58},[76,103795,103796,103798,103800,103802,103804,103806,103808,103810,103813,103815,103817,103820,103822,103824,103827],{"class":78,"line":79},[76,103797,1109],{"class":93},[76,103799,103251],{"class":51370},[76,103801,14992],{"class":2035},[76,103803,247],{"class":93},[76,103805,103449],{"class":305},[76,103807,101147],{"class":2035},[76,103809,247],{"class":93},[76,103811,103812],{"class":305},"\"0 0 0\"",[76,103814,101177],{"class":2035},[76,103816,247],{"class":93},[76,103818,103819],{"class":305},"\"0.03\"",[76,103821,78837],{"class":2035},[76,103823,247],{"class":93},[76,103825,103826],{"class":305},"\"0 1 0 1\"",[76,103828,101185],{"class":93},[14,103830,103831,103833,103834,103837,103838,103840,103841,103844],{},[73,103832,103251],{}," 是标记点。",[73,103835,103836],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[73,103839,103211],{}," 表示显示出来的小球大小。",[73,103842,103843],{},"rgba=\"0 1 0 1\""," 表示绿色。",[67,103846,103847],{"className":69,"code":103644,"language":71,"meta":58,"style":58},[73,103848,103849],{"__ignoreMap":58},[76,103850,103851,103853,103855,103857,103859],{"class":78,"line":79},[76,103852,103651],{"class":93},[76,103854,247],{"class":89},[76,103856,103431],{"class":93},[76,103858,103434],{"class":305},[76,103860,208],{"class":93},[14,103862,103863,103864,103866],{},"这行的作用是：根据名字 ",[73,103865,103434],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103868,103869],{},"拆开看：",[152,103871,103872,103878,103883,103889],{},[155,103873,103874,103877],{},[73,103875,103876],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[155,103879,103880,103882],{},[73,103881,102126],{}," 是被查询的模型。",[155,103884,103885,103888],{},[73,103886,103887],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[155,103890,103891,103893],{},[73,103892,103434],{}," 是 XML 里写的名字。",[67,103895,103896],{"className":69,"code":103668,"language":71,"meta":58,"style":58},[73,103897,103898],{"__ignoreMap":58},[76,103899,103900,103902,103904,103906,103908],{"class":78,"line":79},[76,103901,103675],{"class":93},[76,103903,247],{"class":89},[76,103905,103446],{"class":93},[76,103907,103449],{"class":305},[76,103909,208],{"class":93},[14,103911,103912,103913,28458],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[73,103914,103449],{},[67,103916,103918],{"className":69,"code":103917,"language":71,"meta":58,"style":58},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[73,103919,103920,103932],{"__ignoreMap":58},[76,103921,103922,103924,103926,103928,103930],{"class":78,"line":79},[76,103923,1603],{"class":89},[76,103925,103462],{"class":93},[76,103927,1109],{"class":89},[76,103929,4165],{"class":250},[76,103931,3811],{"class":93},[76,103933,103934,103937,103939,103941,103943],{"class":78,"line":86},[76,103935,103936],{"class":89},"    raise",[76,103938,103476],{"class":250},[76,103940,202],{"class":93},[76,103942,103481],{"class":305},[76,103944,208],{"class":93},[14,103946,103947,103949,103950,103953,103954,103957,103958,103961],{},[73,103948,1603],{}," 是条件判断。",[73,103951,103952],{},"mj_name2id"," 找不到对象时会返回 ",[73,103955,103956],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[73,103959,103960],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[67,103963,103965],{"className":69,"code":103964,"language":71,"meta":58,"style":58},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[73,103966,103967,103983],{"__ignoreMap":58},[76,103968,103969,103971,103973,103975,103977,103979,103981],{"class":78,"line":79},[76,103970,3097],{"class":89},[76,103972,101542],{"class":93},[76,103974,26116],{"class":89},[76,103976,32513],{"class":250},[76,103978,202],{"class":93},[76,103980,1794],{"class":250},[76,103982,30856],{"class":93},[76,103984,103985],{"class":78,"line":86},[76,103986,101740],{"class":93},[14,103988,103989],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[67,103991,103993],{"className":69,"code":103992,"language":71,"meta":58,"style":58},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[73,103994,103995],{"__ignoreMap":58},[76,103996,103997,103999,104001,104003],{"class":78,"line":79},[76,103998,30485],{"class":250},[76,104000,202],{"class":93},[76,104002,103557],{"class":305},[76,104004,103560],{"class":93},[14,104006,104007,104009,104010,104013],{},[73,104008,101120],{}," 保存所有 body 的世界坐标。",[73,104011,104012],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[67,104015,104017],{"className":69,"code":104016,"language":71,"meta":58,"style":58},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[73,104018,104019],{"__ignoreMap":58},[76,104020,104021,104023,104025,104027],{"class":78,"line":79},[76,104022,30485],{"class":250},[76,104024,202],{"class":93},[76,104026,103569],{"class":305},[76,104028,103572],{"class":93},[14,104030,104031,104034,104035,104037],{},[73,104032,104033],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[73,104036,103018],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[67,104039,104041],{"className":69,"code":104040,"language":71,"meta":58,"style":58},"print(\"box qpos:\", np.array(data.qpos))\n",[73,104042,104043],{"__ignoreMap":58},[76,104044,104045,104047,104049,104051],{"class":78,"line":79},[76,104046,30485],{"class":250},[76,104048,202],{"class":93},[76,104050,103581],{"class":305},[76,104052,103584],{"class":93},[14,104054,104055,104056,104059],{},"这里打印广义位置数组。",[73,104057,104058],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[140,104061,102357],{"id":102356},[14,104063,104064,104065,104068,104069,28458],{},"程序会输出 ",[73,104066,104067],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[73,104070,104071],{},"qpos",[14,104073,104074,104076,104077,104080,104081,104084],{},[73,104075,104012],{}," 是 body 的世界坐标位置。",[73,104078,104079],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[73,104082,104083],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104086,82292,104087,82600,104089,104091],{},[73,104088,103018],{},[73,104090,103836],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104093,104094],{},"如果你把 site 改成：",[67,104096,104098],{"className":53137,"code":104097,"language":53139,"meta":58,"style":58},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[73,104099,104100],{"__ignoreMap":58},[76,104101,104102,104104,104106,104108,104110,104113,104115,104117,104120,104122,104124,104126,104128,104130,104132],{"class":78,"line":79},[76,104103,1109],{"class":93},[76,104105,103251],{"class":51370},[76,104107,14992],{"class":2035},[76,104109,247],{"class":93},[76,104111,104112],{"class":305},"\"box_top\"",[76,104114,101147],{"class":2035},[76,104116,247],{"class":93},[76,104118,104119],{"class":305},"\"0 0 0.15\"",[76,104121,101177],{"class":2035},[76,104123,247],{"class":93},[76,104125,103819],{"class":305},[76,104127,78837],{"class":2035},[76,104129,247],{"class":93},[76,104131,103826],{"class":305},[76,104133,101185],{"class":93},[14,104135,104136,104137,104140],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[73,104138,104139],{},"site position"," 就会比 body position 的 z 坐标更高。",[140,104142,102389],{"id":102388},[152,104144,104145,104154,104157,104164,104170,104181],{},[155,104146,102452,104147,104149,104150,102455,104152,28458],{},[73,104148,103022],{}," 的初始高度从 ",[73,104151,418],{},[73,104153,278],{},[155,104155,104156],{},"重新运行程序。",[155,104158,104159,104160,104163],{},"观察 ",[73,104161,104162],{},"box qpos"," 和最终位置是否变化。",[155,104165,104166,104167,104169],{},"故意把 ",[73,104168,103251],{}," 名称改错，确认程序能报错。",[155,104171,102452,104172,104174,104175,102455,104177,104180],{},[73,104173,101161],{}," 的颜色 ",[73,104176,102073],{},[73,104178,104179],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[155,104182,102452,104183,82600,104185,102455,104188,104191,104192,104194],{},[73,104184,103018],{},[73,104186,104187],{},"pos",[73,104189,104190],{},"0 0 0.2","，观察 ",[73,104193,104139],{}," 如何变化。",[140,104196,102494],{"id":102493},[169,104198,104200],{"id":104199},"xml-error-schema-violation",[73,104201,104202],{},"XML Error: Schema violation",[14,104204,104205],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[169,104207,104209,81360,104211],{"id":104208},"mj_name2id-返回-1",[73,104210,103952],{},[73,104212,103956],{},[14,104214,104215,104216,104219],{},"说明名字没有找到。检查 XML 中 ",[73,104217,104218],{},"name=\"...\"","，并确认对象类型正确。",[169,104221,104222],{"id":104222},"物体不下落",[14,104224,102564],{},[152,104226,104227,104232,104237],{},[155,104228,104229,104230],{},"body 是否有 ",[73,104231,101661],{},[155,104233,104234,104235],{},"gravity 是否为 ",[73,104236,102630],{},[155,104238,104239,104240,104242],{},"body 是否被固定在 ",[73,104241,101882],{}," 中",[169,104244,104245],{"id":104245},"坐标看起来不符合预期",[14,104247,104248],{},"先区分两种坐标：",[338,104250,104251,104260],{},[341,104252,104253],{},[344,104254,104255,104258],{},[347,104256,104257],{"align":23808},"坐标",[347,104259,100741],{"align":23808},[385,104261,104262,104272],{},[344,104263,104264,104269],{},[390,104265,104266,104267],{"align":23808},"XML 里的 ",[73,104268,104187],{},[390,104270,104271],{"align":23808},"相对父 body 的局部坐标",[344,104273,104274,104280],{},[390,104275,104276,25051,104278],{"align":23808},[73,104277,101120],{},[73,104279,104033],{},[390,104281,104282],{"align":23808},"仿真更新后的世界坐标",[14,104284,104285,104286,104288,104289,82609,104292,104294],{},"如果你修改了 ",[73,104287,101111],{},"，但还没调用 ",[73,104290,104291],{},"mj_forward",[73,104293,101256],{},"，世界坐标可能还没有更新。",[140,104296,102648],{"id":102647},[14,104298,104299],{},"MJCF 建模先掌握四件事：",[152,104301,104302,104307,104312,104317],{},[155,104303,104304,104306],{},[73,104305,51870],{}," 表示刚体层级。",[155,104308,104309,104311],{},[73,104310,101161],{}," 表示形状、碰撞和质量。",[155,104313,104314,104316],{},[73,104315,102997],{}," 决定 body 能不能动、怎么动。",[155,104318,104319,104321],{},[73,104320,103251],{}," 用来标记关键点，方便 Python 读取位置。",[14,104323,104324],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[117,104326,104327],{},"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":58,"searchDepth":86,"depth":86,"links":104329},[104330,104331,104332,104338,104342,104343,104344,104351],{"id":100687,"depth":86,"text":100688},{"id":100810,"depth":86,"text":100811},{"id":101085,"depth":86,"text":101086,"children":104333},[104334,104335,104336,104337],{"id":103001,"depth":97,"text":103001},{"id":103115,"depth":97,"text":103115},{"id":103141,"depth":97,"text":103142},{"id":103245,"depth":97,"text":103246},{"id":101293,"depth":86,"text":101294,"children":104339},[104340,104341],{"id":101613,"depth":97,"text":101613},{"id":101749,"depth":97,"text":101749},{"id":102356,"depth":86,"text":102357},{"id":102388,"depth":86,"text":102389},{"id":102493,"depth":86,"text":102494,"children":104345},[104346,104347,104349,104350],{"id":104199,"depth":97,"text":104202},{"id":104208,"depth":97,"text":104348},"mj_name2id 返回 -1",{"id":104222,"depth":97,"text":104222},{"id":104245,"depth":97,"text":104245},{"id":102647,"depth":86,"text":102648},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102695,"description":58},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104358,"title":104359,"body":104360,"description":58,"extension":123,"meta":105855,"navigation":125,"path":105856,"seo":105857,"stem":105858,"__hash__":105859},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104361,"toc":105827},[104362,104365,104367,104370,104373,104411,104414,104420,104423,104425,104427,104454,104456,104470,104472,104513,104515,104539,104541,104544,104553,104562,104565,104574,104582,104591,104594,104604,104607,104659,104666,104672,104680,104728,104731,104750,104753,104761,104765,104774,104807,104809,105157,105159,105171,105173,105184,105186,105189,105210,105216,105219,105244,105254,105257,105265,105268,105271,105292,105303,105305,105325,105328,105349,105358,105377,105383,105408,105411,105425,105432,105456,105459,105467,105476,105492,105504,105512,105521,105523,105526,105550,105555,105558,105580,105582,105621,105623,105630,105632,105640,105643,105646,105658,105699,105706,105717,105724,105727,105776,105779,105782,105788,105790,105795,105821,105824],[10,104363,104359],{"id":104364},"_3python-控制接口读取状态与推进仿真",[140,104366,100688],{"id":100687},[14,104368,104369],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104371,104372],{},"你将学习:",[152,104374,104375,104380,104385,104389,104394,104405],{},[155,104376,104377],{},[73,104378,104379],{},"MjModel.from_xml_string",[155,104381,104382],{},[73,104383,104384],{},"MjData(model)",[155,104386,104387],{},[73,104388,101256],{},[155,104390,104391],{},[73,104392,104393],{},"mj_resetData",[155,104395,104396,104397,413,104399,413,104402],{},"读取 ",[73,104398,104071],{},[73,104400,104401],{},"qvel",[73,104403,104404],{},"ctrl",[155,104406,104407,104408],{},"使用 ",[73,104409,104410],{},"model.opt.timestep",[14,104412,104413],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[67,104415,104418],{"className":104416,"code":104417,"language":5259,"meta":58},[5257],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[73,104419,104417],{"__ignoreMap":58},[14,104421,104422],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[140,104424,100811],{"id":100810},[14,104426,100814],{},[67,104428,104430],{"className":23894,"code":104429,"language":23896,"meta":58,"style":58},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[73,104431,104432],{"__ignoreMap":58},[76,104433,104434,104436,104438,104440,104442,104445,104447,104449,104451],{"class":78,"line":79},[76,104435,24649],{"class":2035},[76,104437,26388],{"class":305},[76,104439,23906],{"class":305},[76,104441,26473],{"class":250},[76,104443,104444],{"class":305}," python3",[76,104446,100839],{"class":305},[76,104448,102542],{"class":305},[76,104450,100855],{"class":305},[76,104452,104453],{"class":305}," glfw\n",[14,104455,102860],{},[67,104457,104458],{"className":23894,"code":100960,"language":23896,"meta":58,"style":58},[73,104459,104460],{"__ignoreMap":58},[76,104461,104462,104464,104466,104468],{"class":78,"line":79},[76,104463,23903],{"class":2035},[76,104465,23906],{"class":305},[76,104467,100971],{"class":305},[76,104469,100974],{"class":305},[14,104471,102877],{},[67,104473,104475],{"className":23894,"code":104474,"language":23896,"meta":58,"style":58},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[73,104476,104477,104494,104503],{"__ignoreMap":58},[76,104478,104479,104481,104483,104485,104488,104490,104492],{"class":78,"line":79},[76,104480,30403],{"class":2035},[76,104482,29249],{"class":305},[76,104484,25188],{"class":250},[76,104486,104487],{"class":305}," mujoco-python-api",[76,104489,101016],{"class":305},[76,104491,101019],{"class":250},[76,104493,101022],{"class":250},[76,104495,104496,104498,104500],{"class":78,"line":86},[76,104497,30403],{"class":2035},[76,104499,101029],{"class":305},[76,104501,104502],{"class":305}," mujoco-python-api\n",[76,104504,104505,104507,104509,104511],{"class":78,"line":97},[76,104506,23903],{"class":2035},[76,104508,23906],{"class":305},[76,104510,100971],{"class":305},[76,104512,100974],{"class":305},[14,104514,101045],{},[152,104516,104517,104524,104533],{},[155,104518,104519,101059,104521,104523],{},[73,104520,100716],{},[73,104522,100721],{}," 是官方 Python bindings 的类名。",[155,104525,104526,104527,104530,104531,28458],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[73,104528,104529],{},"mjModel"," 在 Python 中是 ",[73,104532,100750],{},[155,104534,104535,104536,28458],{},"不要使用 ",[73,104537,104538],{},"sim = mujoco_py.MjSim(...)",[140,104540,101086],{"id":101085},[14,104542,104543],{},"仿真推进核心代码:",[67,104545,104547],{"className":69,"code":104546,"language":71,"meta":58,"style":58},"mujoco.mj_step(model, data)\n",[73,104548,104549],{"__ignoreMap":58},[76,104550,104551],{"class":78,"line":79},[76,104552,104546],{"class":93},[14,104554,104555,104556,413,104558,413,104560,28458],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[73,104557,101111],{},[73,104559,101114],{},[73,104561,101108],{},[14,104563,104564],{},"重置仿真:",[67,104566,104568],{"className":69,"code":104567,"language":71,"meta":58,"style":58},"mujoco.mj_resetData(model, data)\n",[73,104569,104570],{"__ignoreMap":58},[76,104571,104572],{"class":78,"line":79},[76,104573,104567],{"class":93},[14,104575,104576,104577,82609,104579,104581],{},"如果手动修改了 ",[73,104578,101111],{},[73,104580,101114],{},"，通常应调用:",[67,104583,104585],{"className":69,"code":104584,"language":71,"meta":58,"style":58},"mujoco.mj_forward(model, data)\n",[73,104586,104587],{"__ignoreMap":58},[76,104588,104589],{"class":78,"line":79},[76,104590,104584],{"class":93},[14,104592,104593],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[169,104595,104597,413,104599,413,104601,104603],{"id":104596},"qposqvelctrl-是什么",[73,104598,104071],{},[73,104600,104401],{},[73,104602,104404],{}," 是什么",[14,104605,104606],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[338,104608,104609,104621],{},[341,104610,104611],{},[344,104612,104613,104616,104618],{},[347,104614,104615],{"align":23808},"字段",[347,104617,100741],{"align":23808},[347,104619,104620],{"align":23808},"谁来修改",[385,104622,104623,104635,104647],{},[344,104624,104625,104629,104632],{},[390,104626,104627],{"align":23808},[73,104628,101111],{},[390,104630,104631],{"align":23808},"广义位置，例如小车位置、关节角、自由物体位置姿态",[390,104633,104634],{"align":23808},"MuJoCo 更新，也可以手动设置初始状态",[344,104636,104637,104641,104644],{},[390,104638,104639],{"align":23808},[73,104640,101114],{},[390,104642,104643],{"align":23808},"广义速度，例如小车速度、关节角速度",[390,104645,104646],{"align":23808},"MuJoCo 更新，也可以手动清零",[344,104648,104649,104653,104656],{},[390,104650,104651],{"align":23808},[73,104652,101117],{},[390,104654,104655],{"align":23808},"actuator 的控制输入",[390,104657,104658],{"align":23808},"主要由你的控制代码写入",[14,104660,9097,104661,101059,104663,104665],{},[73,104662,104071],{},[73,104664,104401],{}," 不一定同维。自由刚体就是典型例子：",[67,104667,104670],{"className":104668,"code":104669,"language":5259,"meta":58},[5257],"freejoint: qpos 7 维，qvel 6 维\n",[73,104671,104669],{"__ignoreMap":58},[169,104673,104675,101059,104677,104679],{"id":104674},"mj_step-和-mj_forward-的区别",[73,104676,101256],{},[73,104678,104291],{}," 的区别",[338,104681,104682,104695],{},[341,104683,104684],{},[344,104685,104686,104689,104692],{},[347,104687,104688],{"align":23808},"函数",[347,104690,104691],{"align":23808},"是否推进时间",[347,104693,104694],{"align":23808},"什么时候用",[385,104696,104697,104710],{},[344,104698,104699,104704,104707],{},[390,104700,104701],{"align":23808},[73,104702,104703],{},"mj_step(model, data)",[390,104705,104706],{"align":23808},"是",[390,104708,104709],{"align":23808},"正常仿真循环，每调用一次前进一步",[344,104711,104712,104717,104720],{},[390,104713,104714],{"align":23808},[73,104715,104716],{},"mj_forward(model, data)",[390,104718,104719],{"align":23808},"否",[390,104721,104722,104723,413,104725,104727],{"align":23808},"手动改了 ",[73,104724,104071],{},[73,104726,104401],{}," 后，刷新派生量",[14,104729,104730],{},"例如你写：",[67,104732,104734],{"className":69,"code":104733,"language":71,"meta":58,"style":58},"data.qpos[2] = 2.0\n",[73,104735,104736],{"__ignoreMap":58},[76,104737,104738,104741,104743,104745,104747],{"class":78,"line":79},[76,104739,104740],{"class":93},"data.qpos[",[76,104742,278],{"class":250},[76,104744,4515],{"class":93},[76,104746,247],{"class":89},[76,104748,104749],{"class":250}," 2.0\n",[14,104751,104752],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[67,104754,104755],{"className":69,"code":104584,"language":71,"meta":58,"style":58},[73,104756,104757],{"__ignoreMap":58},[76,104758,104759],{"class":78,"line":79},[76,104760,104584],{"class":93},[169,104762,104764],{"id":104763},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104766,104767,104770,104771,104773],{},[73,104768,104769],{},"mujoco.mj_resetData(model, data)"," 会把 ",[73,104772,33471],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[67,104775,104777],{"className":69,"code":104776,"language":71,"meta":58,"style":58},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[73,104778,104779,104783,104793,104803],{"__ignoreMap":58},[76,104780,104781],{"class":78,"line":79},[76,104782,104567],{"class":93},[76,104784,104785,104788,104790],{"class":78,"line":86},[76,104786,104787],{"class":93},"data.qpos[:] ",[76,104789,247],{"class":89},[76,104791,104792],{"class":93}," random_qpos\n",[76,104794,104795,104798,104800],{"class":78,"line":97},[76,104796,104797],{"class":93},"data.qvel[:] ",[76,104799,247],{"class":89},[76,104801,104802],{"class":250}," 0.0\n",[76,104804,104805],{"class":78,"line":103},[76,104806,104584],{"class":93},[140,104808,101294],{"id":101293},[67,104810,104812],{"className":69,"code":104811,"language":71,"meta":58,"style":58},"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",[73,104813,104814,104820,104830,104834,104838,104846,104851,104855,104859,104863,104868,104872,104877,104882,104887,104891,104895,104899,104903,104907,104911,104930,104937,104949,104960,104976,104992,104996,105000,105012,105024,105032,105036,105047,105051,105067,105071,105075,105084,105088,105093,105102,105106,105119,105124,105133,105137,105141,105153],{"__ignoreMap":58},[76,104815,104816,104818],{"class":78,"line":79},[76,104817,90],{"class":89},[76,104819,101342],{"class":93},[76,104821,104822,104824,104826,104828],{"class":78,"line":86},[76,104823,90],{"class":89},[76,104825,31450],{"class":93},[76,104827,31453],{"class":89},[76,104829,31456],{"class":93},[76,104831,104832],{"class":78,"line":97},[76,104833,2472],{"emptyLinePlaceholder":125},[76,104835,104836],{"class":78,"line":103},[76,104837,2472],{"emptyLinePlaceholder":125},[76,104839,104840,104842,104844],{"class":78,"line":1273},[76,104841,101355],{"class":250},[76,104843,13636],{"class":89},[76,104845,101360],{"class":305},[76,104847,104848],{"class":78,"line":1287},[76,104849,104850],{"class":305},"\u003Cmujoco model=\"state_api\">\n",[76,104852,104853],{"class":78,"line":1293},[76,104854,101370],{"class":305},[76,104856,104857],{"class":78,"line":1384},[76,104858,2472],{"emptyLinePlaceholder":125},[76,104860,104861],{"class":78,"line":1390},[76,104862,101379],{"class":305},[76,104864,104865],{"class":78,"line":1402},[76,104866,104867],{"class":305},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[76,104869,104870],{"class":78,"line":1684},[76,104871,2472],{"emptyLinePlaceholder":125},[76,104873,104874],{"class":78,"line":1689},[76,104875,104876],{"class":305},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[76,104878,104879],{"class":78,"line":1695},[76,104880,104881],{"class":305},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[76,104883,104884],{"class":78,"line":1700},[76,104885,104886],{"class":305},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[76,104888,104889],{"class":78,"line":1714},[76,104890,101408],{"class":305},[76,104892,104893],{"class":78,"line":1719},[76,104894,101413],{"class":305},[76,104896,104897],{"class":78,"line":1725},[76,104898,101418],{"class":305},[76,104900,104901],{"class":78,"line":1746},[76,104902,95767],{"class":305},[76,104904,104905],{"class":78,"line":1751},[76,104906,2472],{"emptyLinePlaceholder":125},[76,104908,104909],{"class":78,"line":1765},[76,104910,2472],{"emptyLinePlaceholder":125},[76,104912,104913,104915,104918,104921,104923,104926,104928],{"class":78,"line":1770},[76,104914,32017],{"class":89},[76,104916,104917],{"class":2035}," print_state",[76,104919,104920],{"class":93},"(prefix: ",[76,104922,1372],{"class":250},[76,104924,104925],{"class":93},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[76,104927,95755],{"class":250},[76,104929,3811],{"class":93},[76,104931,104932,104934],{"class":78,"line":1799},[76,104933,31369],{"class":250},[76,104935,104936],{"class":93},"(prefix)\n",[76,104938,104939,104941,104943,104946],{"class":78,"line":1804},[76,104940,31369],{"class":250},[76,104942,202],{"class":93},[76,104944,104945],{"class":305},"\"  timestep:\"",[76,104947,104948],{"class":93},", model.opt.timestep)\n",[76,104950,104951,104953,104955,104958],{"class":78,"line":1821},[76,104952,31369],{"class":250},[76,104954,202],{"class":93},[76,104956,104957],{"class":305},"\"  time:\"",[76,104959,101519],{"class":93},[76,104961,104962,104964,104966,104969,104972,104974],{"class":78,"line":1826},[76,104963,31369],{"class":250},[76,104965,202],{"class":93},[76,104967,104968],{"class":305},"\"  qpos:\"",[76,104970,104971],{"class":93},", np.round(data.qpos.copy(), ",[76,104973,494],{"class":250},[76,104975,30567],{"class":93},[76,104977,104978,104980,104982,104985,104988,104990],{"class":78,"line":1831},[76,104979,31369],{"class":250},[76,104981,202],{"class":93},[76,104983,104984],{"class":305},"\"  qvel:\"",[76,104986,104987],{"class":93},", np.round(data.qvel.copy(), ",[76,104989,494],{"class":250},[76,104991,30567],{"class":93},[76,104993,104994],{"class":78,"line":1836},[76,104995,2472],{"emptyLinePlaceholder":125},[76,104997,104998],{"class":78,"line":1850},[76,104999,2472],{"emptyLinePlaceholder":125},[76,105001,105002,105004,105006,105008,105010],{"class":78,"line":1855},[76,105003,32017],{"class":89},[76,105005,2045],{"class":2035},[76,105007,101439],{"class":93},[76,105009,95755],{"class":250},[76,105011,3811],{"class":93},[76,105013,105014,105016,105018,105020,105022],{"class":78,"line":2649},[76,105015,101448],{"class":93},[76,105017,247],{"class":89},[76,105019,101453],{"class":93},[76,105021,101355],{"class":250},[76,105023,208],{"class":93},[76,105025,105026,105028,105030],{"class":78,"line":2663},[76,105027,101462],{"class":93},[76,105029,247],{"class":89},[76,105031,101467],{"class":93},[76,105033,105034],{"class":78,"line":2671},[76,105035,2472],{"emptyLinePlaceholder":125},[76,105037,105038,105041,105044],{"class":78,"line":2676},[76,105039,105040],{"class":93},"    print_state(",[76,105042,105043],{"class":305},"\"initial\"",[76,105045,105046],{"class":93},", model, data)\n",[76,105048,105049],{"class":78,"line":2682},[76,105050,2472],{"emptyLinePlaceholder":125},[76,105052,105053,105055,105057,105059,105061,105063,105065],{"class":78,"line":2688},[76,105054,3273],{"class":89},[76,105056,101542],{"class":93},[76,105058,26116],{"class":89},[76,105060,32513],{"class":250},[76,105062,202],{"class":93},[76,105064,855],{"class":250},[76,105066,30856],{"class":93},[76,105068,105069],{"class":78,"line":2693},[76,105070,101557],{"class":93},[76,105072,105073],{"class":78,"line":8020},[76,105074,2472],{"emptyLinePlaceholder":125},[76,105076,105077,105079,105082],{"class":78,"line":8044},[76,105078,105040],{"class":93},[76,105080,105081],{"class":305},"\"after 50 steps\"",[76,105083,105046],{"class":93},[76,105085,105086],{"class":78,"line":8049},[76,105087,2472],{"emptyLinePlaceholder":125},[76,105089,105090],{"class":78,"line":8055},[76,105091,105092],{"class":93},"    mujoco.mj_resetData(model, data)\n",[76,105094,105095,105097,105100],{"class":78,"line":8082},[76,105096,105040],{"class":93},[76,105098,105099],{"class":305},"\"after reset\"",[76,105101,105046],{"class":93},[76,105103,105104],{"class":78,"line":8087},[76,105105,2472],{"emptyLinePlaceholder":125},[76,105107,105108,105111,105113,105115,105117],{"class":78,"line":8093},[76,105109,105110],{"class":93},"    data.qpos[",[76,105112,278],{"class":250},[76,105114,4515],{"class":93},[76,105116,247],{"class":89},[76,105118,104749],{"class":250},[76,105120,105121],{"class":78,"line":8105},[76,105122,105123],{"class":93},"    mujoco.mj_forward(model, data)\n",[76,105125,105126,105128,105131],{"class":78,"line":8117},[76,105127,105040],{"class":93},[76,105129,105130],{"class":305},"\"after manual qpos edit\"",[76,105132,105046],{"class":93},[76,105134,105135],{"class":78,"line":8129},[76,105136,2472],{"emptyLinePlaceholder":125},[76,105138,105139],{"class":78,"line":9788},[76,105140,2472],{"emptyLinePlaceholder":125},[76,105142,105143,105145,105147,105149,105151],{"class":78,"line":9813},[76,105144,1603],{"class":89},[76,105146,31290],{"class":250},[76,105148,101600],{"class":89},[76,105150,101603],{"class":305},[76,105152,3811],{"class":93},[76,105154,105155],{"class":78,"line":9836},[76,105156,101610],{"class":93},[14,105158,103611],{},[67,105160,105162],{"className":23894,"code":105161,"language":23896,"meta":58,"style":58},"touch ch3_python_state.py\n",[73,105163,105164],{"__ignoreMap":58},[76,105165,105166,105168],{"class":78,"line":79},[76,105167,101324],{"class":2035},[76,105169,105170],{"class":305}," ch3_python_state.py\n",[14,105172,102342],{},[67,105174,105176],{"className":23894,"code":105175,"language":23896,"meta":58,"style":58},"python ch3_python_state.py\n",[73,105177,105178],{"__ignoreMap":58},[76,105179,105180,105182],{"class":78,"line":79},[76,105181,71],{"class":2035},[76,105183,105170],{"class":305},[169,105185,101613],{"id":101613},[14,105187,105188],{},"打印状态的函数：",[67,105190,105192],{"className":69,"code":105191,"language":71,"meta":58,"style":58},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[73,105193,105194],{"__ignoreMap":58},[76,105195,105196,105198,105200,105202,105204,105206,105208],{"class":78,"line":79},[76,105197,32017],{"class":89},[76,105199,104917],{"class":2035},[76,105201,104920],{"class":93},[76,105203,1372],{"class":250},[76,105205,104925],{"class":93},[76,105207,95755],{"class":250},[76,105209,3811],{"class":93},[14,105211,105212,105213,105215],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[73,105214,33471],{}," 里发生了什么。",[14,105217,105218],{},"推进 50 步：",[67,105220,105222],{"className":69,"code":105221,"language":71,"meta":58,"style":58},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[73,105223,105224,105240],{"__ignoreMap":58},[76,105225,105226,105228,105230,105232,105234,105236,105238],{"class":78,"line":79},[76,105227,3097],{"class":89},[76,105229,101542],{"class":93},[76,105231,26116],{"class":89},[76,105233,32513],{"class":250},[76,105235,202],{"class":93},[76,105237,855],{"class":250},[76,105239,30856],{"class":93},[76,105241,105242],{"class":78,"line":86},[76,105243,101740],{"class":93},[14,105245,105246,105247,105250,105251,105253],{},"由于 ",[73,105248,105249],{},"timestep=0.01","，所以 50 步后时间约为 ",[73,105252,35399],{}," 秒。",[14,105255,105256],{},"重置：",[67,105258,105259],{"className":69,"code":104567,"language":71,"meta":58,"style":58},[73,105260,105261],{"__ignoreMap":58},[76,105262,105263],{"class":78,"line":79},[76,105264,104567],{"class":93},[14,105266,105267],{},"这会把时间、位置、速度恢复到初始状态。",[14,105269,105270],{},"手动改高度：",[67,105272,105274],{"className":69,"code":105273,"language":71,"meta":58,"style":58},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[73,105275,105276,105288],{"__ignoreMap":58},[76,105277,105278,105280,105282,105284,105286],{"class":78,"line":79},[76,105279,104740],{"class":93},[76,105281,278],{"class":250},[76,105283,4515],{"class":93},[76,105285,247],{"class":89},[76,105287,104749],{"class":250},[76,105289,105290],{"class":78,"line":86},[76,105291,104584],{"class":93},[14,105293,105294,105295,105298,105299,105302],{},"这个例子里 ",[73,105296,105297],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[73,105300,105301],{},"2.0"," 表示把小球放到更高的位置。",[169,105304,101749],{"id":101749},[67,105306,105307],{"className":69,"code":105191,"language":71,"meta":58,"style":58},[73,105308,105309],{"__ignoreMap":58},[76,105310,105311,105313,105315,105317,105319,105321,105323],{"class":78,"line":79},[76,105312,32017],{"class":89},[76,105314,104917],{"class":2035},[76,105316,104920],{"class":93},[76,105318,1372],{"class":250},[76,105320,104925],{"class":93},[76,105322,95755],{"class":250},[76,105324,3811],{"class":93},[14,105326,105327],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[152,105329,105330,105339,105344],{},[155,105331,105332,105335,105336,105338],{},[73,105333,105334],{},"prefix","：一段文字，比如 ",[73,105337,105043],{},"，用来说明现在打印的是哪个阶段。",[155,105340,105341,105343],{},[73,105342,102126],{},"：MuJoCo 模型。",[155,105345,105346,105348],{},[73,105347,33471],{},"：MuJoCo 当前状态。",[14,105350,105351,413,105354,105357],{},[73,105352,105353],{},"prefix: str",[73,105355,105356],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[67,105359,105361],{"className":69,"code":105360,"language":71,"meta":58,"style":58},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[73,105362,105363],{"__ignoreMap":58},[76,105364,105365,105367,105369,105371,105373,105375],{"class":78,"line":79},[76,105366,30485],{"class":250},[76,105368,202],{"class":93},[76,105370,104968],{"class":305},[76,105372,104971],{"class":93},[76,105374,494],{"class":250},[76,105376,30567],{"class":93},[14,105378,105379,105382],{},[73,105380,105381],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[67,105384,105386],{"className":69,"code":105385,"language":71,"meta":58,"style":58},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[73,105387,105388,105400],{"__ignoreMap":58},[76,105389,105390,105392,105394,105396,105398],{"class":78,"line":79},[76,105391,101675],{"class":93},[76,105393,247],{"class":89},[76,105395,101453],{"class":93},[76,105397,101355],{"class":250},[76,105399,208],{"class":93},[76,105401,105402,105404,105406],{"class":78,"line":86},[76,105403,101699],{"class":93},[76,105405,247],{"class":89},[76,105407,101467],{"class":93},[14,105409,105410],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[67,105412,105414],{"className":69,"code":105413,"language":71,"meta":58,"style":58},"print_state(\"initial\", model, data)\n",[73,105415,105416],{"__ignoreMap":58},[76,105417,105418,105421,105423],{"class":78,"line":79},[76,105419,105420],{"class":93},"print_state(",[76,105422,105043],{"class":305},[76,105424,105046],{"class":93},[14,105426,105427,105428,105431],{},"调用刚才定义的 ",[73,105429,105430],{},"print_state"," 函数，打印初始状态。",[67,105433,105434],{"className":69,"code":105221,"language":71,"meta":58,"style":58},[73,105435,105436,105452],{"__ignoreMap":58},[76,105437,105438,105440,105442,105444,105446,105448,105450],{"class":78,"line":79},[76,105439,3097],{"class":89},[76,105441,101542],{"class":93},[76,105443,26116],{"class":89},[76,105445,32513],{"class":250},[76,105447,202],{"class":93},[76,105449,855],{"class":250},[76,105451,30856],{"class":93},[76,105453,105454],{"class":78,"line":86},[76,105455,101740],{"class":93},[14,105457,105458],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[67,105460,105461],{"className":69,"code":104567,"language":71,"meta":58,"style":58},[73,105462,105463],{"__ignoreMap":58},[76,105464,105465],{"class":78,"line":79},[76,105466,104567],{"class":93},[14,105468,105469,105470,105472,105473,105475],{},"重置 ",[73,105471,33471],{},"。注意它不会重新创建 ",[73,105474,102126],{},"，因为模型结构没有变，只是状态回到初始值。",[67,105477,105478],{"className":69,"code":104733,"language":71,"meta":58,"style":58},[73,105479,105480],{"__ignoreMap":58},[76,105481,105482,105484,105486,105488,105490],{"class":78,"line":79},[76,105483,104740],{"class":93},[76,105485,278],{"class":250},[76,105487,4515],{"class":93},[76,105489,247],{"class":89},[76,105491,104749],{"class":250},[14,105493,105494,105495,413,105498,413,105501,105503],{},"这行是“手动改状态”。在 freejoint 中，",[73,105496,105497],{},"qpos[0]",[73,105499,105500],{},"qpos[1]",[73,105502,105297],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[67,105505,105506],{"className":69,"code":104584,"language":71,"meta":58,"style":58},[73,105507,105508],{"__ignoreMap":58},[76,105509,105510],{"class":78,"line":79},[76,105511,104584],{"class":93},[14,105513,105514,105515,105517,105518,105520],{},"手动改完 ",[73,105516,104071],{}," 后，调用 ",[73,105519,104291],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[140,105522,102357],{"id":102356},[14,105524,105525],{},"你会看到:",[152,105527,105528,105533,105538,105541],{},[155,105529,105530,105531],{},"初始时间为 ",[73,105532,392],{},[155,105534,105535,105536],{},"50 步后时间约为 ",[73,105537,35399],{},[155,105539,105540],{},"reset 后状态恢复",[155,105542,105543,105544,105547,105548],{},"手动修改 ",[73,105545,105546],{},"data.qpos[2]"," 后，小球高度变为 ",[73,105549,105301],{},[14,105551,105552,105554],{},[73,105553,105297],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105556,105557],{},"输出里可以重点看三件事：",[152,105559,105560,105568,105573],{},[155,105561,105562,105564,105565,105567],{},[73,105563,2459],{}," 是否随着 ",[73,105566,101256],{}," 增加。",[155,105569,105570,105572],{},[73,105571,104071],{}," 的 z 坐标是否因为下落而变化。",[155,105574,105575,105577,105578,28458],{},[73,105576,104393],{}," 后时间是否回到 ",[73,105579,392],{},[140,105581,102389],{"id":102388},[152,105583,105584,105590,105596,105602,105605,105614],{},[155,105585,105586,105587,28458],{},"修改 timestep 为 ",[73,105588,105589],{},"0.005",[155,105591,105592,105593,28458],{},"重新运行，检查 50 步后时间是否约为 ",[73,105594,105595],{},"0.25",[155,105597,105598,105599,28458],{},"修改重力为 ",[73,105600,105601],{},"0 0 -1.0",[155,105603,105604],{},"观察小球下降速度是否变慢。",[155,105606,102452,105607,102455,105610,105613],{},[73,105608,105609],{},"data.qpos[2] = 2.0",[73,105611,105612],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[155,105615,105616,105617,105620],{},"注释掉 ",[73,105618,105619],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[140,105622,102494],{"id":102493},[169,105624,105626,105627,105629],{"id":105625},"修改-dataqpos-后位置没有更新","修改 ",[73,105628,101111],{}," 后位置没有更新",[14,105631,102503],{},[67,105633,105634],{"className":69,"code":104584,"language":71,"meta":58,"style":58},[73,105635,105636],{"__ignoreMap":58},[76,105637,105638],{"class":78,"line":79},[76,105639,104584],{"class":93},[169,105641,105642],{"id":105642},"数组维度看不懂",[14,105644,105645],{},"打印模型维度:",[67,105647,105649],{"className":69,"code":105648,"language":71,"meta":58,"style":58},"print(model.nq, model.nv, model.nu)\n",[73,105650,105651],{"__ignoreMap":58},[76,105652,105653,105655],{"class":78,"line":79},[76,105654,30485],{"class":250},[76,105656,105657],{"class":93},"(model.nq, model.nv, model.nu)\n",[338,105659,105660,105668],{},[341,105661,105662],{},[344,105663,105664,105666],{},[347,105665,104615],{"align":23808},[347,105667,100741],{"align":23808},[385,105669,105670,105680,105690],{},[344,105671,105672,105677],{},[390,105673,105674],{"align":23808},[73,105675,105676],{},"nq",[390,105678,105679],{"align":23808},"位置变量数量",[344,105681,105682,105687],{},[390,105683,105684],{"align":23808},[73,105685,105686],{},"nv",[390,105688,105689],{"align":23808},"速度变量数量",[344,105691,105692,105696],{},[390,105693,105694],{"align":23808},[73,105695,102203],{},[390,105697,105698],{"align":23808},"控制输入数量",[169,105700,105702,105703,105705],{"id":105701},"误以为-qpos-一定等于关节数","误以为 ",[73,105704,104071],{}," 一定等于关节数",[14,105707,105708,105709,82600,105711,105713,105714,105716],{},"不是。例如 ",[73,105710,101661],{},[73,105712,104071],{}," 是 7 维，但 ",[73,105715,104401],{}," 是 6 维。",[169,105718,105720,105721,105723],{"id":105719},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[73,105722,104071],{}," 的第几位",[14,105725,105726],{},"初学时可以先打印：",[67,105728,105730],{"className":69,"code":105729,"language":71,"meta":58,"style":58},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[73,105731,105732,105742,105752,105764],{"__ignoreMap":58},[76,105733,105734,105736,105738,105740],{"class":78,"line":79},[76,105735,30485],{"class":250},[76,105737,202],{"class":93},[76,105739,101480],{"class":305},[76,105741,101483],{"class":93},[76,105743,105744,105746,105748,105750],{"class":78,"line":86},[76,105745,30485],{"class":250},[76,105747,202],{"class":93},[76,105749,101492],{"class":305},[76,105751,101495],{"class":93},[76,105753,105754,105756,105758,105761],{"class":78,"line":97},[76,105755,30485],{"class":250},[76,105757,202],{"class":93},[76,105759,105760],{"class":305},"\"qpos:\"",[76,105762,105763],{"class":93},", data.qpos)\n",[76,105765,105766,105768,105770,105773],{"class":78,"line":103},[76,105767,30485],{"class":250},[76,105769,202],{"class":93},[76,105771,105772],{"class":305},"\"qvel:\"",[76,105774,105775],{"class":93},", data.qvel)\n",[14,105777,105778],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[169,105780,105781],{"id":105781},"仿真结果每次都一样",[14,105783,105784,105785,105787],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[73,105786,104071],{},"、目标点或控制输入。",[140,105789,102648],{"id":102647},[14,105791,105792,105793,24691],{},"Python 控制 MuJoCo 的核心就是读写 ",[73,105794,33471],{},[152,105796,105797,105805,105810,105815],{},[155,105798,105799,105800,101059,105802,105804],{},"用 ",[73,105801,101111],{},[73,105803,101114],{}," 读取状态。",[155,105806,105799,105807,105809],{},[73,105808,101117],{}," 写入控制。",[155,105811,105799,105812,105814],{},[73,105813,101256],{}," 推进时间。",[155,105816,105817,105818,105820],{},"手动改状态后用 ",[73,105819,104291],{}," 刷新派生量。",[14,105822,105823],{},"理解这一章后，就可以进入关节和 actuator 控制。",[117,105825,105826],{},"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":58,"searchDepth":86,"depth":86,"links":105828},[105829,105830,105831,105838,105842,105843,105844,105854],{"id":100687,"depth":86,"text":100688},{"id":100810,"depth":86,"text":100811},{"id":101085,"depth":86,"text":101086,"children":105832},[105833,105835,105837],{"id":104596,"depth":97,"text":105834},"qpos、qvel、ctrl 是什么",{"id":104674,"depth":97,"text":105836},"mj_step 和 mj_forward 的区别",{"id":104763,"depth":97,"text":104764},{"id":101293,"depth":86,"text":101294,"children":105839},[105840,105841],{"id":101613,"depth":97,"text":101613},{"id":101749,"depth":97,"text":101749},{"id":102356,"depth":86,"text":102357},{"id":102388,"depth":86,"text":102389},{"id":102493,"depth":86,"text":102494,"children":105845},[105846,105848,105849,105851,105853],{"id":105625,"depth":97,"text":105847},"修改 data.qpos 后位置没有更新",{"id":105642,"depth":97,"text":105642},{"id":105701,"depth":97,"text":105850},"误以为 qpos 一定等于关节数",{"id":105719,"depth":97,"text":105852},"不知道某个元素在 qpos 的第几位",{"id":105781,"depth":97,"text":105781},{"id":102647,"depth":86,"text":102648},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104359,"description":58},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105861,"title":105862,"body":105863,"description":58,"extension":123,"meta":107553,"navigation":125,"path":107554,"seo":107555,"stem":107556,"__hash__":107557},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105864,"toc":107529},[105865,105868,105870,105873,105875,105900,105903,105922,105925,105927,105929,105953,105955,105969,105971,106012,106014,106038,106040,106043,106077,106079,106092,106095,106163,106172,106176,106179,106213,106219,106222,106226,106265,106268,106288,106292,106335,106337,106366,106369,106375,106378,106380,106774,106776,106788,106790,106801,106803,106806,106835,106843,106846,106881,106884,106886,106894,106897,106899,106910,106920,106940,106943,106979,106991,107039,107058,107100,107113,107141,107146,107167,107177,107195,107198,107232,107235,107255,107258,107277,107283,107285,107288,107294,107300,107310,107313,107319,107328,107330,107376,107378,107384,107390,107393,107396,107416,107419,107425,107431,107433,107456,107459,107462,107471,107474,107512,107514,107517,107523,107526],[10,105866,105862],{"id":105867},"_4关节actuator-与力控制",[140,105869,100688],{"id":100687},[14,105871,105872],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105874,104372],{},[152,105876,105877,105883,105888,105892,105897],{},[155,105878,105879,105882],{},[73,105880,105881],{},"hinge"," 关节",[155,105884,105885],{},[73,105886,105887],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[155,105889,105890],{},[73,105891,101117],{},[155,105893,105894],{},[73,105895,105896],{},"ctrlrange",[155,105898,105899],{},"读取关节角和角速度",[14,105901,105902],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[67,105904,105906],{"className":69,"code":105905,"language":71,"meta":58,"style":58},"data.ctrl[0] = ...\n",[73,105907,105908],{"__ignoreMap":58},[76,105909,105910,105913,105915,105917,105919],{"class":78,"line":79},[76,105911,105912],{"class":93},"data.ctrl[",[76,105914,392],{"class":250},[76,105916,4515],{"class":93},[76,105918,247],{"class":89},[76,105920,105921],{"class":250}," ...\n",[14,105923,105924],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[140,105926,100811],{"id":100810},[14,105928,100814],{},[67,105930,105931],{"className":23894,"code":104429,"language":23896,"meta":58,"style":58},[73,105932,105933],{"__ignoreMap":58},[76,105934,105935,105937,105939,105941,105943,105945,105947,105949,105951],{"class":78,"line":79},[76,105936,24649],{"class":2035},[76,105938,26388],{"class":305},[76,105940,23906],{"class":305},[76,105942,26473],{"class":250},[76,105944,104444],{"class":305},[76,105946,100839],{"class":305},[76,105948,102542],{"class":305},[76,105950,100855],{"class":305},[76,105952,104453],{"class":305},[14,105954,102860],{},[67,105956,105957],{"className":23894,"code":100960,"language":23896,"meta":58,"style":58},[73,105958,105959],{"__ignoreMap":58},[76,105960,105961,105963,105965,105967],{"class":78,"line":79},[76,105962,23903],{"class":2035},[76,105964,23906],{"class":305},[76,105966,100971],{"class":305},[76,105968,100974],{"class":305},[14,105970,102877],{},[67,105972,105974],{"className":23894,"code":105973,"language":23896,"meta":58,"style":58},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[73,105975,105976,105993,106002],{"__ignoreMap":58},[76,105977,105978,105980,105982,105984,105987,105989,105991],{"class":78,"line":79},[76,105979,30403],{"class":2035},[76,105981,29249],{"class":305},[76,105983,25188],{"class":250},[76,105985,105986],{"class":305}," mujoco-control",[76,105988,101016],{"class":305},[76,105990,101019],{"class":250},[76,105992,101022],{"class":250},[76,105994,105995,105997,105999],{"class":78,"line":86},[76,105996,30403],{"class":2035},[76,105998,101029],{"class":305},[76,106000,106001],{"class":305}," mujoco-control\n",[76,106003,106004,106006,106008,106010],{"class":78,"line":97},[76,106005,23903],{"class":2035},[76,106007,23906],{"class":305},[76,106009,100971],{"class":305},[76,106011,100974],{"class":305},[14,106013,101045],{},[152,106015,106016,106022,106029,106035],{},[155,106017,106018,106021],{},[73,106019,106020],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[155,106023,106024,106026,106027,28458],{},[73,106025,101117],{}," 长度等于 ",[73,106028,102199],{},[155,106030,82292,106031,106034],{},[73,106032,106033],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[155,106036,106037],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[140,106039,101086],{"id":101085},[14,106041,106042],{},"关节决定 body 如何运动:",[67,106044,106046],{"className":53137,"code":106045,"language":53139,"meta":58,"style":58},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[73,106047,106048],{"__ignoreMap":58},[76,106049,106050,106052,106054,106056,106058,106061,106063,106065,106067,106070,106072,106075],{"class":78,"line":79},[76,106051,1109],{"class":93},[76,106053,102997],{"class":51370},[76,106055,14992],{"class":2035},[76,106057,247],{"class":93},[76,106059,106060],{"class":305},"\"hinge\"",[76,106062,53894],{"class":2035},[76,106064,247],{"class":93},[76,106066,106060],{"class":305},[76,106068,106069],{"class":2035}," axis",[76,106071,247],{"class":93},[76,106073,106074],{"class":305},"\"0 1 0\"",[76,106076,101185],{"class":93},[14,106078,103093],{},[152,106080,106081,106086,106089],{},[155,106082,106083,106084],{},"名字是 ",[73,106085,105881],{},[155,106087,106088],{},"类型是旋转关节",[155,106090,106091],{},"绕 y 轴旋转",[14,106093,106094],{},"actuator 决定如何施加控制:",[67,106096,106098],{"className":53137,"code":106097,"language":53139,"meta":58,"style":58},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[73,106099,106100,106109,106155],{"__ignoreMap":58},[76,106101,106102,106104,106107],{"class":78,"line":79},[76,106103,1109],{"class":93},[76,106105,106106],{"class":51370},"actuator",[76,106108,51377],{"class":93},[76,106110,106111,106113,106116,106118,106120,106123,106126,106128,106130,106133,106135,106137,106140,106142,106145,106148,106150,106153],{"class":78,"line":86},[76,106112,52214],{"class":93},[76,106114,106115],{"class":51370},"motor",[76,106117,14992],{"class":2035},[76,106119,247],{"class":93},[76,106121,106122],{"class":305},"\"hinge_motor\"",[76,106124,106125],{"class":2035}," joint",[76,106127,247],{"class":93},[76,106129,106060],{"class":305},[76,106131,106132],{"class":2035}," gear",[76,106134,247],{"class":93},[76,106136,3750],{"class":305},[76,106138,106139],{"class":2035}," ctrlrange",[76,106141,247],{"class":93},[76,106143,106144],{"class":305},"\"-2 2\"",[76,106146,106147],{"class":2035}," ctrllimited",[76,106149,247],{"class":93},[76,106151,106152],{"class":305},"\"true\"",[76,106154,101185],{"class":93},[76,106156,106157,106159,106161],{"class":78,"line":97},[76,106158,51855],{"class":93},[76,106160,106106],{"class":51370},[76,106162,51377],{"class":93},[14,106164,106165,106168,106169,28458],{},[73,106166,106167],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[73,106170,106171],{},"[-2, 2]",[169,106173,106175],{"id":106174},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106177,106178],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[338,106180,106181,106191],{},[341,106182,106183],{},[344,106184,106185,106187,106189],{},[347,106186,25826],{"align":23808},[347,106188,102737],{"align":23808},[347,106190,100775],{"align":23808},[385,106192,106193,106203],{},[344,106194,106195,106197,106200],{},[390,106196,102997],{"align":23808},[390,106198,106199],{"align":23808},"定义能怎么动",[390,106201,106202],{"align":23808},"门轴允许门旋转",[344,106204,106205,106207,106210],{},[390,106206,106106],{"align":23808},[390,106208,106209],{"align":23808},"定义怎么施力或控制",[390,106211,106212],{"align":23808},"人推门、马达带动门",[14,106214,106215,106216,106218],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[73,106217,101117],{}," 主动控制它。",[14,106220,106221],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[169,106223,106225],{"id":106224},"hinge-joint","hinge joint",[67,106227,106229],{"className":53137,"code":106228,"language":53139,"meta":58,"style":58},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[73,106230,106231],{"__ignoreMap":58},[76,106232,106233,106235,106237,106239,106241,106243,106245,106247,106249,106251,106253,106255,106258,106260,106263],{"class":78,"line":79},[76,106234,1109],{"class":93},[76,106236,102997],{"class":51370},[76,106238,14992],{"class":2035},[76,106240,247],{"class":93},[76,106242,106060],{"class":305},[76,106244,53894],{"class":2035},[76,106246,247],{"class":93},[76,106248,106060],{"class":305},[76,106250,106069],{"class":2035},[76,106252,247],{"class":93},[76,106254,106074],{"class":305},[76,106256,106257],{"class":2035}," damping",[76,106259,247],{"class":93},[76,106261,106262],{"class":305},"\"0.1\"",[76,106264,101185],{"class":93},[14,106266,106267],{},"含义：",[152,106269,106270,106276,106282],{},[155,106271,106272,106275],{},[73,106273,106274],{},"type=\"hinge\"","：只能绕一个轴旋转。",[155,106277,106278,106281],{},[73,106279,106280],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[155,106283,106284,106287],{},[73,106285,106286],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[169,106289,106291],{"id":106290},"motor-actuator","motor actuator",[67,106293,106295],{"className":53137,"code":106294,"language":53139,"meta":58,"style":58},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[73,106296,106297],{"__ignoreMap":58},[76,106298,106299,106301,106303,106305,106307,106309,106311,106313,106315,106317,106319,106321,106323,106325,106327,106329,106331,106333],{"class":78,"line":79},[76,106300,1109],{"class":93},[76,106302,106115],{"class":51370},[76,106304,14992],{"class":2035},[76,106306,247],{"class":93},[76,106308,106122],{"class":305},[76,106310,106125],{"class":2035},[76,106312,247],{"class":93},[76,106314,106060],{"class":305},[76,106316,106132],{"class":2035},[76,106318,247],{"class":93},[76,106320,3750],{"class":305},[76,106322,106139],{"class":2035},[76,106324,247],{"class":93},[76,106326,106144],{"class":305},[76,106328,106147],{"class":2035},[76,106330,247],{"class":93},[76,106332,106152],{"class":305},[76,106334,101185],{"class":93},[14,106336,106267],{},[152,106338,106339,106348,106354,106360],{},[155,106340,106341,106344,106345,106347],{},[73,106342,106343],{},"joint=\"hinge\"","：这个电机作用在名为 ",[73,106346,105881],{}," 的关节上。",[155,106349,106350,106353],{},[73,106351,106352],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[155,106355,106356,106359],{},[73,106357,106358],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[155,106361,106362,106365],{},[73,106363,106364],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106367,106368],{},"简单理解：",[67,106370,106373],{"className":106371,"code":106372,"language":5259,"meta":58},[5257],"实际施加效果 ≈ data.ctrl[0] * gear\n",[73,106374,106372],{"__ignoreMap":58},[14,106376,106377],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[140,106379,101294],{"id":101293},[67,106381,106383],{"className":69,"code":106382,"language":71,"meta":58,"style":58},"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",[73,106384,106385,106392,106396,106402,106412,106416,106420,106428,106433,106438,106442,106446,106451,106456,106460,106465,106470,106475,106480,106484,106488,106492,106497,106502,106507,106511,106515,106519,106523,106535,106547,106555,106559,106569,106579,106589,106593,106606,106619,106623,106640,106654,106689,106693,106697,106708,106723,106738,106750,106754,106758,106770],{"__ignoreMap":58},[76,106386,106387,106389],{"class":78,"line":79},[76,106388,90],{"class":89},[76,106390,106391],{"class":93}," math\n",[76,106393,106394],{"class":78,"line":86},[76,106395,2472],{"emptyLinePlaceholder":125},[76,106397,106398,106400],{"class":78,"line":97},[76,106399,90],{"class":89},[76,106401,101342],{"class":93},[76,106403,106404,106406,106408,106410],{"class":78,"line":103},[76,106405,90],{"class":89},[76,106407,31450],{"class":93},[76,106409,31453],{"class":89},[76,106411,31456],{"class":93},[76,106413,106414],{"class":78,"line":1273},[76,106415,2472],{"emptyLinePlaceholder":125},[76,106417,106418],{"class":78,"line":1287},[76,106419,2472],{"emptyLinePlaceholder":125},[76,106421,106422,106424,106426],{"class":78,"line":1293},[76,106423,101355],{"class":250},[76,106425,13636],{"class":89},[76,106427,101360],{"class":305},[76,106429,106430],{"class":78,"line":1384},[76,106431,106432],{"class":305},"\u003Cmujoco model=\"one_link_motor\">\n",[76,106434,106435],{"class":78,"line":1390},[76,106436,106437],{"class":305},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[76,106439,106440],{"class":78,"line":1402},[76,106441,2472],{"emptyLinePlaceholder":125},[76,106443,106444],{"class":78,"line":1684},[76,106445,101379],{"class":305},[76,106447,106448],{"class":78,"line":1689},[76,106449,106450],{"class":305},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[76,106452,106453],{"class":78,"line":1695},[76,106454,106455],{"class":305},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[76,106457,106458],{"class":78,"line":1700},[76,106459,2472],{"emptyLinePlaceholder":125},[76,106461,106462],{"class":78,"line":1714},[76,106463,106464],{"class":305},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[76,106466,106467],{"class":78,"line":1719},[76,106468,106469],{"class":305},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[76,106471,106472],{"class":78,"line":1725},[76,106473,106474],{"class":305},"        \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",[76,106476,106477],{"class":78,"line":1746},[76,106478,106479],{"class":305},"      \u003C\u002Fbody>\n",[76,106481,106482],{"class":78,"line":1751},[76,106483,101408],{"class":305},[76,106485,106486],{"class":78,"line":1765},[76,106487,101413],{"class":305},[76,106489,106490],{"class":78,"line":1770},[76,106491,2472],{"emptyLinePlaceholder":125},[76,106493,106494],{"class":78,"line":1799},[76,106495,106496],{"class":305},"  \u003Cactuator>\n",[76,106498,106499],{"class":78,"line":1804},[76,106500,106501],{"class":305},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[76,106503,106504],{"class":78,"line":1821},[76,106505,106506],{"class":305},"  \u003C\u002Factuator>\n",[76,106508,106509],{"class":78,"line":1826},[76,106510,101418],{"class":305},[76,106512,106513],{"class":78,"line":1831},[76,106514,95767],{"class":305},[76,106516,106517],{"class":78,"line":1836},[76,106518,2472],{"emptyLinePlaceholder":125},[76,106520,106521],{"class":78,"line":1850},[76,106522,2472],{"emptyLinePlaceholder":125},[76,106524,106525,106527,106529,106531,106533],{"class":78,"line":1855},[76,106526,32017],{"class":89},[76,106528,2045],{"class":2035},[76,106530,101439],{"class":93},[76,106532,95755],{"class":250},[76,106534,3811],{"class":93},[76,106536,106537,106539,106541,106543,106545],{"class":78,"line":2649},[76,106538,101448],{"class":93},[76,106540,247],{"class":89},[76,106542,101453],{"class":93},[76,106544,101355],{"class":250},[76,106546,208],{"class":93},[76,106548,106549,106551,106553],{"class":78,"line":2663},[76,106550,101462],{"class":93},[76,106552,247],{"class":89},[76,106554,101467],{"class":93},[76,106556,106557],{"class":78,"line":2671},[76,106558,2472],{"emptyLinePlaceholder":125},[76,106560,106561,106563,106565,106567],{"class":78,"line":2676},[76,106562,31369],{"class":250},[76,106564,202],{"class":93},[76,106566,101480],{"class":305},[76,106568,101483],{"class":93},[76,106570,106571,106573,106575,106577],{"class":78,"line":2682},[76,106572,31369],{"class":250},[76,106574,202],{"class":93},[76,106576,101492],{"class":305},[76,106578,101495],{"class":93},[76,106580,106581,106583,106585,106587],{"class":78,"line":2688},[76,106582,31369],{"class":250},[76,106584,202],{"class":93},[76,106586,101504],{"class":305},[76,106588,101507],{"class":93},[76,106590,106591],{"class":78,"line":2693},[76,106592,2472],{"emptyLinePlaceholder":125},[76,106594,106595,106597,106600,106602,106604],{"class":78,"line":8020},[76,106596,3173],{"class":89},[76,106598,106599],{"class":93}," model.nu ",[76,106601,21020],{"class":89},[76,106603,25191],{"class":250},[76,106605,3811],{"class":93},[76,106607,106608,106610,106612,106614,106617],{"class":78,"line":8044},[76,106609,103473],{"class":89},[76,106611,103476],{"class":250},[76,106613,202],{"class":93},[76,106615,106616],{"class":305},"\"expected exactly one actuator\"",[76,106618,208],{"class":93},[76,106620,106621],{"class":78,"line":8049},[76,106622,2472],{"emptyLinePlaceholder":125},[76,106624,106625,106627,106629,106631,106633,106635,106638],{"class":78,"line":8055},[76,106626,3273],{"class":89},[76,106628,31686],{"class":93},[76,106630,26116],{"class":89},[76,106632,32513],{"class":250},[76,106634,202],{"class":93},[76,106636,106637],{"class":250},"2000",[76,106639,30856],{"class":93},[76,106641,106642,106645,106647,106649,106651],{"class":78,"line":8082},[76,106643,106644],{"class":93},"        t ",[76,106646,247],{"class":89},[76,106648,31686],{"class":93},[76,106650,655],{"class":89},[76,106652,106653],{"class":93}," model.opt.timestep\n",[76,106655,106656,106659,106661,106663,106665,106668,106670,106673,106675,106677,106680,106682,106684,106686],{"class":78,"line":8087},[76,106657,106658],{"class":93},"        data.ctrl[",[76,106660,392],{"class":250},[76,106662,4515],{"class":93},[76,106664,247],{"class":89},[76,106666,106667],{"class":250}," 1.5",[76,106669,6590],{"class":89},[76,106671,106672],{"class":93}," math.sin(",[76,106674,105301],{"class":250},[76,106676,6590],{"class":89},[76,106678,106679],{"class":93}," math.pi ",[76,106681,655],{"class":89},[76,106683,61937],{"class":250},[76,106685,6590],{"class":89},[76,106687,106688],{"class":93}," t)\n",[76,106690,106691],{"class":78,"line":8093},[76,106692,101557],{"class":93},[76,106694,106695],{"class":78,"line":8105},[76,106696,2472],{"emptyLinePlaceholder":125},[76,106698,106699,106701,106703,106706],{"class":78,"line":8117},[76,106700,31369],{"class":250},[76,106702,202],{"class":93},[76,106704,106705],{"class":305},"\"time:\"",[76,106707,101519],{"class":93},[76,106709,106710,106712,106714,106717,106719,106721],{"class":78,"line":8129},[76,106711,31369],{"class":250},[76,106713,202],{"class":93},[76,106715,106716],{"class":305},"\"joint qpos:\"",[76,106718,104971],{"class":93},[76,106720,494],{"class":250},[76,106722,30567],{"class":93},[76,106724,106725,106727,106729,106732,106734,106736],{"class":78,"line":9788},[76,106726,31369],{"class":250},[76,106728,202],{"class":93},[76,106730,106731],{"class":305},"\"joint qvel:\"",[76,106733,104987],{"class":93},[76,106735,494],{"class":250},[76,106737,30567],{"class":93},[76,106739,106740,106742,106744,106747],{"class":78,"line":9813},[76,106741,31369],{"class":250},[76,106743,202],{"class":93},[76,106745,106746],{"class":305},"\"last ctrl:\"",[76,106748,106749],{"class":93},", data.ctrl.copy())\n",[76,106751,106752],{"class":78,"line":9836},[76,106753,2472],{"emptyLinePlaceholder":125},[76,106755,106756],{"class":78,"line":9860},[76,106757,2472],{"emptyLinePlaceholder":125},[76,106759,106760,106762,106764,106766,106768],{"class":78,"line":9865},[76,106761,1603],{"class":89},[76,106763,31290],{"class":250},[76,106765,101600],{"class":89},[76,106767,101603],{"class":305},[76,106769,3811],{"class":93},[76,106771,106772],{"class":78,"line":9870},[76,106773,101610],{"class":93},[14,106775,103611],{},[67,106777,106779],{"className":23894,"code":106778,"language":23896,"meta":58,"style":58},"touch ch4_joint_motor.py\n",[73,106780,106781],{"__ignoreMap":58},[76,106782,106783,106785],{"class":78,"line":79},[76,106784,101324],{"class":2035},[76,106786,106787],{"class":305}," ch4_joint_motor.py\n",[14,106789,102342],{},[67,106791,106793],{"className":23894,"code":106792,"language":23896,"meta":58,"style":58},"python ch4_joint_motor.py\n",[73,106794,106795],{"__ignoreMap":58},[76,106796,106797,106799],{"class":78,"line":79},[76,106798,71],{"class":2035},[76,106800,106787],{"class":305},[169,106802,101613],{"id":101613},[14,106804,106805],{},"检查 actuator 数量：",[67,106807,106809],{"className":69,"code":106808,"language":71,"meta":58,"style":58},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[73,106810,106811,106823],{"__ignoreMap":58},[76,106812,106813,106815,106817,106819,106821],{"class":78,"line":79},[76,106814,1603],{"class":89},[76,106816,106599],{"class":93},[76,106818,21020],{"class":89},[76,106820,25191],{"class":250},[76,106822,3811],{"class":93},[76,106824,106825,106827,106829,106831,106833],{"class":78,"line":86},[76,106826,103936],{"class":89},[76,106828,103476],{"class":250},[76,106830,202],{"class":93},[76,106832,106616],{"class":305},[76,106834,208],{"class":93},[14,106836,106837,106839,106840,106842],{},[73,106838,102199],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[73,106841,101117],{}," 长度应该是 1。",[14,106844,106845],{},"产生正弦控制信号：",[67,106847,106849],{"className":69,"code":106848,"language":71,"meta":58,"style":58},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[73,106850,106851],{"__ignoreMap":58},[76,106852,106853,106855,106857,106859,106861,106863,106865,106867,106869,106871,106873,106875,106877,106879],{"class":78,"line":79},[76,106854,105912],{"class":93},[76,106856,392],{"class":250},[76,106858,4515],{"class":93},[76,106860,247],{"class":89},[76,106862,106667],{"class":250},[76,106864,6590],{"class":89},[76,106866,106672],{"class":93},[76,106868,105301],{"class":250},[76,106870,6590],{"class":89},[76,106872,106679],{"class":93},[76,106874,655],{"class":89},[76,106876,61937],{"class":250},[76,106878,6590],{"class":89},[76,106880,106688],{"class":93},[14,106882,106883],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106885,101714],{},[67,106887,106888],{"className":69,"code":104546,"language":71,"meta":58,"style":58},[73,106889,106890],{"__ignoreMap":58},[76,106891,106892],{"class":78,"line":79},[76,106893,104546],{"class":93},[14,106895,106896],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[169,106898,101749],{"id":101749},[67,106900,106902],{"className":69,"code":106901,"language":71,"meta":58,"style":58},"import math\n",[73,106903,106904],{"__ignoreMap":58},[76,106905,106906,106908],{"class":78,"line":79},[76,106907,90],{"class":89},[76,106909,106391],{"class":93},[14,106911,106912,106913,101059,106916,106919],{},"导入 Python 标准库里的数学模块。后面要用 ",[73,106914,106915],{},"math.sin",[73,106917,106918],{},"math.pi"," 生成周期变化的控制信号。",[67,106921,106922],{"className":69,"code":103727,"language":71,"meta":58,"style":58},[73,106923,106924,106930],{"__ignoreMap":58},[76,106925,106926,106928],{"class":78,"line":79},[76,106927,90],{"class":89},[76,106929,101342],{"class":93},[76,106931,106932,106934,106936,106938],{"class":78,"line":86},[76,106933,90],{"class":89},[76,106935,31450],{"class":93},[76,106937,31453],{"class":89},[76,106939,31456],{"class":93},[14,106941,106942],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[67,106944,106945],{"className":53137,"code":106228,"language":53139,"meta":58,"style":58},[73,106946,106947],{"__ignoreMap":58},[76,106948,106949,106951,106953,106955,106957,106959,106961,106963,106965,106967,106969,106971,106973,106975,106977],{"class":78,"line":79},[76,106950,1109],{"class":93},[76,106952,102997],{"class":51370},[76,106954,14992],{"class":2035},[76,106956,247],{"class":93},[76,106958,106060],{"class":305},[76,106960,53894],{"class":2035},[76,106962,247],{"class":93},[76,106964,106060],{"class":305},[76,106966,106069],{"class":2035},[76,106968,247],{"class":93},[76,106970,106074],{"class":305},[76,106972,106257],{"class":2035},[76,106974,247],{"class":93},[76,106976,106262],{"class":305},[76,106978,101185],{"class":93},[14,106980,106981,106982,106984,106985,106987,106988,106990],{},"这行定义关节。",[73,106983,105881],{}," 表示旋转关节。",[73,106986,106280],{}," 表示绕 y 轴旋转。",[73,106989,106286],{}," 表示有一点阻尼，运动不会完全无损耗。",[67,106992,106994],{"className":53137,"code":106993,"language":53139,"meta":58,"style":58},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[73,106995,106996],{"__ignoreMap":58},[76,106997,106998,107000,107002,107004,107006,107009,107011,107013,107016,107019,107021,107024,107026,107028,107030,107032,107034,107037],{"class":78,"line":79},[76,106999,1109],{"class":93},[76,107001,101161],{"class":51370},[76,107003,14992],{"class":2035},[76,107005,247],{"class":93},[76,107007,107008],{"class":305},"\"link_geom\"",[76,107010,53894],{"class":2035},[76,107012,247],{"class":93},[76,107014,107015],{"class":305},"\"capsule\"",[76,107017,107018],{"class":2035}," fromto",[76,107020,247],{"class":93},[76,107022,107023],{"class":305},"\"0 0 0 0 0 0.5\"",[76,107025,101177],{"class":2035},[76,107027,247],{"class":93},[76,107029,103819],{"class":305},[76,107031,102042],{"class":2035},[76,107033,247],{"class":93},[76,107035,107036],{"class":305},"\"0.5\"",[76,107038,101185],{"class":93},[14,107040,107041,107042,107044,107045,107047,107048,107051,107052,28458,107055,107057],{},"这行定义摆杆的形状。",[73,107043,103206],{}," 是胶囊体，适合表示杆子。",[73,107046,103217],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[73,107049,107050],{},"(0,0,0)"," 延伸到 ",[73,107053,107054],{},"(0,0,0.5)",[73,107056,103211],{}," 是半径。",[67,107059,107060],{"className":53137,"code":106294,"language":53139,"meta":58,"style":58},[73,107061,107062],{"__ignoreMap":58},[76,107063,107064,107066,107068,107070,107072,107074,107076,107078,107080,107082,107084,107086,107088,107090,107092,107094,107096,107098],{"class":78,"line":79},[76,107065,1109],{"class":93},[76,107067,106115],{"class":51370},[76,107069,14992],{"class":2035},[76,107071,247],{"class":93},[76,107073,106122],{"class":305},[76,107075,106125],{"class":2035},[76,107077,247],{"class":93},[76,107079,106060],{"class":305},[76,107081,106132],{"class":2035},[76,107083,247],{"class":93},[76,107085,3750],{"class":305},[76,107087,106139],{"class":2035},[76,107089,247],{"class":93},[76,107091,106144],{"class":305},[76,107093,106147],{"class":2035},[76,107095,247],{"class":93},[76,107097,106152],{"class":305},[76,107099,101185],{"class":93},[14,107101,107102,107103,107105,107106,107109,107110,107112],{},"这行定义电机。它作用在 ",[73,107104,105881],{}," 关节上。",[73,107107,107108],{},"gear"," 可以理解成放大倍数。",[73,107111,105896],{}," 限制控制输入范围。",[67,107114,107115],{"className":69,"code":106808,"language":71,"meta":58,"style":58},[73,107116,107117,107129],{"__ignoreMap":58},[76,107118,107119,107121,107123,107125,107127],{"class":78,"line":79},[76,107120,1603],{"class":89},[76,107122,106599],{"class":93},[76,107124,21020],{"class":89},[76,107126,25191],{"class":250},[76,107128,3811],{"class":93},[76,107130,107131,107133,107135,107137,107139],{"class":78,"line":86},[76,107132,103936],{"class":89},[76,107134,103476],{"class":250},[76,107136,202],{"class":93},[76,107138,106616],{"class":305},[76,107140,208],{"class":93},[14,107142,107143,107145],{},[73,107144,102199],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[67,107147,107149],{"className":69,"code":107148,"language":71,"meta":58,"style":58},"for step in range(2000):\n",[73,107150,107151],{"__ignoreMap":58},[76,107152,107153,107155,107157,107159,107161,107163,107165],{"class":78,"line":79},[76,107154,3097],{"class":89},[76,107156,31686],{"class":93},[76,107158,26116],{"class":89},[76,107160,32513],{"class":250},[76,107162,202],{"class":93},[76,107164,106637],{"class":250},[76,107166,30856],{"class":93},[14,107168,107169,107170,107172,107173,107176],{},"循环 2000 步。这里没有用 ",[73,107171,1191],{},"，而是用 ",[73,107174,107175],{},"step","，因为后面要用当前步数计算时间。",[67,107178,107180],{"className":69,"code":107179,"language":71,"meta":58,"style":58},"t = step * model.opt.timestep\n",[73,107181,107182],{"__ignoreMap":58},[76,107183,107184,107187,107189,107191,107193],{"class":78,"line":79},[76,107185,107186],{"class":93},"t ",[76,107188,247],{"class":89},[76,107190,31686],{"class":93},[76,107192,655],{"class":89},[76,107194,106653],{"class":93},[14,107196,107197],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[67,107199,107200],{"className":69,"code":106848,"language":71,"meta":58,"style":58},[73,107201,107202],{"__ignoreMap":58},[76,107203,107204,107206,107208,107210,107212,107214,107216,107218,107220,107222,107224,107226,107228,107230],{"class":78,"line":79},[76,107205,105912],{"class":93},[76,107207,392],{"class":250},[76,107209,4515],{"class":93},[76,107211,247],{"class":89},[76,107213,106667],{"class":250},[76,107215,6590],{"class":89},[76,107217,106672],{"class":93},[76,107219,105301],{"class":250},[76,107221,6590],{"class":89},[76,107223,106679],{"class":93},[76,107225,655],{"class":89},[76,107227,61937],{"class":250},[76,107229,6590],{"class":89},[76,107231,106688],{"class":93},[14,107233,107234],{},"这行给电机输入一个正弦波。拆开看：",[152,107236,107237,107243,107249],{},[155,107238,107239,107242],{},[73,107240,107241],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[155,107244,107245,107248],{},[73,107246,107247],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[155,107250,107251,107254],{},[73,107252,107253],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107256,107257],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[67,107259,107261],{"className":69,"code":107260,"language":71,"meta":58,"style":58},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[73,107262,107263],{"__ignoreMap":58},[76,107264,107265,107267,107269,107271,107273,107275],{"class":78,"line":79},[76,107266,30485],{"class":250},[76,107268,202],{"class":93},[76,107270,106716],{"class":305},[76,107272,104971],{"class":93},[76,107274,494],{"class":250},[76,107276,30567],{"class":93},[14,107278,107279,107280,107282],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[73,107281,101111],{}," 只有一个数。",[140,107284,102357],{"id":102356},[14,107286,107287],{},"输出类似:",[67,107289,107292],{"className":107290,"code":107291,"language":5259,"meta":58},[5257],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[73,107293,107291],{"__ignoreMap":58},[14,107295,107296,107297,107299],{},"这里 ",[73,107298,106167],{}," 是电机输入。",[14,107301,107302,107305,107306,107309],{},[73,107303,107304],{},"joint qpos"," 是关节角度，单位通常是弧度。",[73,107307,107308],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107311,107312],{},"角度单位提示：",[67,107314,107317],{"className":107315,"code":107316,"language":5259,"meta":58},[5257],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[73,107318,107316],{"__ignoreMap":58},[14,107320,107321,107322,107324,107325,107327],{},"如果你看到 ",[73,107323,104071],{}," 是 ",[73,107326,35399],{},"，大约就是 28.6 度。",[140,107329,102389],{"id":102388},[152,107331,107332,107339,107342,107349,107352,107360,107368],{},[155,107333,102452,107334,102455,107336,28458],{},[73,107335,106352],{},[73,107337,107338],{},"gear=\"5\"",[155,107340,107341],{},"重新运行，观察关节运动是否更剧烈。",[155,107343,102452,107344,102455,107346,28458],{},[73,107345,105896],{},[73,107347,107348],{},"-0.2 0.2",[155,107350,107351],{},"重新运行，观察控制能力是否变弱。",[155,107353,107354,107355,107357,107358,28458],{},"去掉 actuator，确认 ",[73,107356,102199],{}," 变成 ",[73,107359,392],{},[155,107361,102452,107362,102455,107364,107367],{},[73,107363,106286],{},[73,107365,107366],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[155,107369,102452,107370,102455,107372,107375],{},[73,107371,106280],{},[73,107373,107374],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[140,107377,102494],{"id":102493},[169,107379,107381],{"id":107380},"indexerror-index-0-is-out-of-bounds",[73,107382,107383],{},"IndexError: index 0 is out of bounds",[14,107385,107386,107387,107389],{},"原因是 ",[73,107388,106033],{},"，没有 actuator。",[169,107391,107392],{"id":107392},"关节几乎不动",[14,107394,107395],{},"可能原因:",[152,107397,107398,107403,107407,107413],{},[155,107399,107400,107402],{},[73,107401,107108],{}," 太小",[155,107404,107405,107402],{},[73,107406,105896],{},[155,107408,107409,107412],{},[73,107410,107411],{},"damping"," 太大",[155,107414,107415],{},"重力方向导致运动不明显",[169,107417,107418],{"id":107418},"模型编译失败",[14,107420,107421,107422,107424],{},"检查 actuator 引用的 ",[73,107423,106343],{}," 是否存在，joint 名称是否拼写一致。",[169,107426,107428,107430],{"id":107427},"datactrl0-写了但没有效果",[73,107429,106167],{}," 写了但没有效果",[14,107432,102616],{},[152,107434,107435,107440,107443,107448,107453],{},[155,107436,107437,107439],{},[73,107438,102199],{}," 是否大于 0。",[155,107441,107442],{},"motor 是否引用了正确 joint。",[155,107444,107445,107447],{},[73,107446,107108],{}," 是否太小。",[155,107449,107450,107452],{},[73,107451,105896],{}," 是否把输入限制得太小。",[155,107454,107455],{},"body 是否真的有可动 joint。",[169,107457,107458],{"id":107458},"控制输入超过范围会怎样",[14,107460,107461],{},"如果设置了：",[67,107463,107465],{"className":53137,"code":107464,"language":53139,"meta":58,"style":58},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[73,107466,107467],{"__ignoreMap":58},[76,107468,107469],{"class":78,"line":79},[76,107470,107464],{"class":93},[14,107472,107473],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[67,107475,107477],{"className":69,"code":107476,"language":71,"meta":58,"style":58},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[73,107478,107479,107499],{"__ignoreMap":58},[76,107480,107481,107484,107486,107489,107491,107493,107495,107497],{"class":78,"line":79},[76,107482,107483],{"class":93},"action ",[76,107485,247],{"class":89},[76,107487,107488],{"class":93}," np.clip(action, ",[76,107490,112],{"class":89},[76,107492,105301],{"class":250},[76,107494,12507],{"class":93},[76,107496,105301],{"class":250},[76,107498,208],{"class":93},[76,107500,107501,107503,107505,107507,107509],{"class":78,"line":86},[76,107502,105912],{"class":93},[76,107504,392],{"class":250},[76,107506,4515],{"class":93},[76,107508,247],{"class":89},[76,107510,107511],{"class":93}," action\n",[140,107513,102648],{"id":102647},[14,107515,107516],{},"这一章建立了控制任务的基本形式：",[67,107518,107521],{"className":107519,"code":107520,"language":5259,"meta":58},[5257],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[73,107522,107520],{"__ignoreMap":58},[14,107524,107525],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[117,107527,107528],{},"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":58,"searchDepth":86,"depth":86,"links":107530},[107531,107532,107533,107538,107542,107543,107544,107552],{"id":100687,"depth":86,"text":100688},{"id":100810,"depth":86,"text":100811},{"id":101085,"depth":86,"text":101086,"children":107534},[107535,107536,107537],{"id":106174,"depth":97,"text":106175},{"id":106224,"depth":97,"text":106225},{"id":106290,"depth":97,"text":106291},{"id":101293,"depth":86,"text":101294,"children":107539},[107540,107541],{"id":101613,"depth":97,"text":101613},{"id":101749,"depth":97,"text":101749},{"id":102356,"depth":86,"text":102357},{"id":102388,"depth":86,"text":102389},{"id":102493,"depth":86,"text":102494,"children":107545},[107546,107547,107548,107549,107551],{"id":107380,"depth":97,"text":107383},{"id":107392,"depth":97,"text":107392},{"id":107418,"depth":97,"text":107418},{"id":107427,"depth":97,"text":107550},"data.ctrl[0] 写了但没有效果",{"id":107458,"depth":97,"text":107458},{"id":102647,"depth":86,"text":102648},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105862,"description":58},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107559,"title":107560,"body":107561,"description":58,"extension":123,"meta":109470,"navigation":125,"path":109471,"seo":109472,"stem":109473,"__hash__":109474},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107562,"toc":109446},[107563,107566,107568,107571,107579,107582,107599,107602,107627,107630,107676,107678,107680,107735,107737,107756,107758,107801,107804,107821,107824,107840,107850,107857,107859,107862,107865,107899,107902,107950,107954,107957,107971,107980,107984,107987,108012,108015,108019,108032,108035,108041,108044,108059,108061,108064,108324,108326,108338,108341,108653,108655,108667,108669,108672,108687,108692,108695,108717,108720,108723,108757,108760,108764,108775,108778,108795,108798,108812,108819,108839,108846,108860,108863,108875,108890,108910,108913,108935,108938,108942,108957,108968,108983,108986,109016,109032,109061,109069,109093,109096,109114,109124,109136,109143,109152,109158,109167,109170,109172,109181,109184,109199,109201,109204,109215,109218,109229,109232,109250,109252,109269,109272,109300,109302,109306,109309,109339,109345,109348,109352,109360,109363,109365,109386,109389,109392,109408,109411,109427,109429,109432,109443],[10,107564,107560],{"id":107565},"_5viewer-可视化与-renderer-离屏渲染",[140,107567,100688],{"id":100687},[14,107569,107570],{},"本章掌握两类可视化方式:",[152,107572,107573,107576],{},[155,107574,107575],{},"交互式 viewer: 适合人工观察仿真",[155,107577,107578],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107580,107581],{},"使用官方接口:",[67,107583,107585],{"className":69,"code":107584,"language":71,"meta":58,"style":58},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[73,107586,107587,107594],{"__ignoreMap":58},[76,107588,107589,107591],{"class":78,"line":79},[76,107590,90],{"class":89},[76,107592,107593],{"class":93}," mujoco.viewer\n",[76,107595,107596],{"class":78,"line":86},[76,107597,107598],{"class":93},"mujoco.viewer.launch_passive(model, data)\n",[14,107600,107601],{},"以及:",[67,107603,107605],{"className":69,"code":107604,"language":71,"meta":58,"style":58},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[73,107606,107607,107617],{"__ignoreMap":58},[76,107608,107609,107612,107614],{"class":78,"line":79},[76,107610,107611],{"class":93},"renderer ",[76,107613,247],{"class":89},[76,107615,107616],{"class":93}," mujoco.Renderer(model)\n",[76,107618,107619,107622,107624],{"class":78,"line":86},[76,107620,107621],{"class":93},"image ",[76,107623,247],{"class":89},[76,107625,107626],{"class":93}," renderer.render()\n",[14,107628,107629],{},"新手建议先理解二者区别：",[338,107631,107632,107648],{},[341,107633,107634],{},[344,107635,107636,107639,107642,107645],{},[347,107637,107638],{"align":23808},"工具",[347,107640,107641],{"align":23808},"用途",[347,107643,107644],{"align":23808},"是否打开窗口",[347,107646,107647],{"align":23808},"常见场景",[385,107649,107650,107663],{},[344,107651,107652,107655,107658,107660],{},[390,107653,107654],{"align":23808},"Viewer",[390,107656,107657],{"align":23808},"人眼实时观察仿真",[390,107659,104706],{"align":23808},[390,107661,107662],{"align":23808},"调试模型、看控制效果",[344,107664,107665,107668,107671,107673],{},[390,107666,107667],{"align":23808},"Renderer",[390,107669,107670],{"align":23808},"生成图像数组",[390,107672,104719],{"align":23808},[390,107674,107675],{"align":23808},"保存图片、训练视觉策略、服务器批量采集",[140,107677,100811],{"id":100810},[14,107679,100814],{},[67,107681,107683],{"className":23894,"code":107682,"language":23896,"meta":58,"style":58},"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",[73,107684,107685,107697,107707,107715,107723],{"__ignoreMap":58},[76,107686,107687,107689,107691,107693,107695],{"class":78,"line":79},[76,107688,24649],{"class":2035},[76,107690,26388],{"class":305},[76,107692,23906],{"class":305},[76,107694,26473],{"class":250},[76,107696,24751],{"class":250},[76,107698,107699,107701,107703,107705],{"class":78,"line":86},[76,107700,100849],{"class":305},[76,107702,100852],{"class":305},[76,107704,100855],{"class":305},[76,107706,24751],{"class":250},[76,107708,107709,107711,107713],{"class":78,"line":97},[76,107710,100862],{"class":305},[76,107712,100865],{"class":305},[76,107714,24751],{"class":250},[76,107716,107717,107719,107721],{"class":78,"line":103},[76,107718,100872],{"class":305},[76,107720,100875],{"class":305},[76,107722,24751],{"class":250},[76,107724,107725,107727,107729,107731,107733],{"class":78,"line":1273},[76,107726,100882],{"class":305},[76,107728,100885],{"class":305},[76,107730,100888],{"class":305},[76,107732,100891],{"class":305},[76,107734,102557],{"class":305},[14,107736,102860],{},[67,107738,107740],{"className":23894,"code":107739,"language":23896,"meta":58,"style":58},"pip install \"mujoco>=2.3\" numpy pillow\n",[73,107741,107742],{"__ignoreMap":58},[76,107743,107744,107746,107748,107750,107753],{"class":78,"line":79},[76,107745,23903],{"class":2035},[76,107747,23906],{"class":305},[76,107749,100971],{"class":305},[76,107751,107752],{"class":305}," numpy",[76,107754,107755],{"class":305}," pillow\n",[14,107757,102877],{},[67,107759,107761],{"className":23894,"code":107760,"language":23896,"meta":58,"style":58},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[73,107762,107763,107780,107789],{"__ignoreMap":58},[76,107764,107765,107767,107769,107771,107774,107776,107778],{"class":78,"line":79},[76,107766,30403],{"class":2035},[76,107768,29249],{"class":305},[76,107770,25188],{"class":250},[76,107772,107773],{"class":305}," mujoco-render",[76,107775,101016],{"class":305},[76,107777,101019],{"class":250},[76,107779,101022],{"class":250},[76,107781,107782,107784,107786],{"class":78,"line":86},[76,107783,30403],{"class":2035},[76,107785,101029],{"class":305},[76,107787,107788],{"class":305}," mujoco-render\n",[76,107790,107791,107793,107795,107797,107799],{"class":78,"line":97},[76,107792,23903],{"class":2035},[76,107794,23906],{"class":305},[76,107796,100971],{"class":305},[76,107798,107752],{"class":305},[76,107800,107755],{"class":305},[14,107802,107803],{},"离屏渲染后端:",[67,107805,107807],{"className":23894,"code":107806,"language":23896,"meta":58,"style":58},"export MUJOCO_GL=egl\n",[73,107808,107809],{"__ignoreMap":58},[76,107810,107811,107813,107816,107818],{"class":78,"line":79},[76,107812,25115],{"class":89},[76,107814,107815],{"class":93}," MUJOCO_GL",[76,107817,247],{"class":89},[76,107819,107820],{"class":93},"egl\n",[14,107822,107823],{},"或:",[67,107825,107827],{"className":23894,"code":107826,"language":23896,"meta":58,"style":58},"export MUJOCO_GL=osmesa\n",[73,107828,107829],{"__ignoreMap":58},[76,107830,107831,107833,107835,107837],{"class":78,"line":79},[76,107832,25115],{"class":89},[76,107834,107815],{"class":93},[76,107836,247],{"class":89},[76,107838,107839],{"class":93},"osmesa\n",[14,107841,107842,107843,107846,107847,28458],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[73,107844,107845],{},"egl"," 失败，再尝试 ",[73,107848,107849],{},"osmesa",[14,107851,107852,107853,107856],{},"如果你在本机桌面环境运行，通常先不要设置 ",[73,107854,107855],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[140,107858,101086],{"id":101085},[14,107860,107861],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107863,107864],{},"典型 viewer 流程:",[67,107866,107868],{"className":69,"code":107867,"language":71,"meta":58,"style":58},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[73,107869,107870,107883,107890,107894],{"__ignoreMap":58},[76,107871,107872,107875,107878,107880],{"class":78,"line":79},[76,107873,107874],{"class":89},"with",[76,107876,107877],{"class":93}," mujoco.viewer.launch_passive(model, data) ",[76,107879,31453],{"class":89},[76,107881,107882],{"class":93}," viewer:\n",[76,107884,107885,107887],{"class":78,"line":86},[76,107886,2323],{"class":89},[76,107888,107889],{"class":93}," viewer.is_running():\n",[76,107891,107892],{"class":78,"line":97},[76,107893,101557],{"class":93},[76,107895,107896],{"class":78,"line":103},[76,107897,107898],{"class":93},"        viewer.sync()\n",[14,107900,107901],{},"典型 renderer 流程:",[67,107903,107905],{"className":69,"code":107904,"language":71,"meta":58,"style":58},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[73,107906,107907,107933,107937,107942],{"__ignoreMap":58},[76,107908,107909,107911,107913,107916,107918,107920,107922,107924,107926,107928,107931],{"class":78,"line":79},[76,107910,107611],{"class":93},[76,107912,247],{"class":89},[76,107914,107915],{"class":93}," mujoco.Renderer(model, ",[76,107917,25054],{"class":5288},[76,107919,247],{"class":89},[76,107921,42412],{"class":250},[76,107923,12507],{"class":93},[76,107925,25050],{"class":5288},[76,107927,247],{"class":89},[76,107929,107930],{"class":250},"640",[76,107932,208],{"class":93},[76,107934,107935],{"class":78,"line":86},[76,107936,104546],{"class":93},[76,107938,107939],{"class":78,"line":97},[76,107940,107941],{"class":93},"renderer.update_scene(data)\n",[76,107943,107944,107946,107948],{"class":78,"line":103},[76,107945,107621],{"class":93},[76,107947,247],{"class":89},[76,107949,107626],{"class":93},[169,107951,107953],{"id":107952},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107955,107956],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[67,107958,107960],{"className":69,"code":107959,"language":71,"meta":58,"style":58},"mujoco.mj_step(model, data)\nviewer.sync()\n",[73,107961,107962,107966],{"__ignoreMap":58},[76,107963,107964],{"class":78,"line":79},[76,107965,104546],{"class":93},[76,107967,107968],{"class":78,"line":86},[76,107969,107970],{"class":93},"viewer.sync()\n",[14,107972,107973,107975,107976,107979],{},[73,107974,101256],{}," 负责算物理，",[73,107977,107978],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[169,107981,107983],{"id":107982},"为什么要-sleep","为什么要 sleep",[14,107985,107986],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[67,107988,107990],{"className":69,"code":107989,"language":71,"meta":58,"style":58},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[73,107991,107992],{"__ignoreMap":58},[76,107993,107994,107997,107999,108002,108004,108007,108009],{"class":78,"line":79},[76,107995,107996],{"class":93},"sleep_time ",[76,107998,247],{"class":89},[76,108000,108001],{"class":93}," model.opt.timestep ",[76,108003,112],{"class":89},[76,108005,108006],{"class":93}," (time.time() ",[76,108008,112],{"class":89},[76,108010,108011],{"class":93}," step_start)\n",[14,108013,108014],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[169,108016,108018],{"id":108017},"renderer-输出是什么","renderer 输出是什么",[67,108020,108022],{"className":69,"code":108021,"language":71,"meta":58,"style":58},"image = renderer.render()\n",[73,108023,108024],{"__ignoreMap":58},[76,108025,108026,108028,108030],{"class":78,"line":79},[76,108027,107621],{"class":93},[76,108029,247],{"class":89},[76,108031,107626],{"class":93},[14,108033,108034],{},"得到的是 NumPy 数组，形状通常是：",[67,108036,108039],{"className":108037,"code":108038,"language":5259,"meta":58},[5257],"(height, width, 3)\n",[73,108040,108038],{"__ignoreMap":58},[14,108042,108043],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[67,108045,108047],{"className":69,"code":108046,"language":71,"meta":58,"style":58},"Image.fromarray(image).save(\"render_output.png\")\n",[73,108048,108049],{"__ignoreMap":58},[76,108050,108051,108054,108057],{"class":78,"line":79},[76,108052,108053],{"class":93},"Image.fromarray(image).save(",[76,108055,108056],{"class":305},"\"render_output.png\"",[76,108058,208],{"class":93},[140,108060,101294],{"id":101293},[14,108062,108063],{},"交互式 Viewer:",[67,108065,108067],{"className":69,"code":108066,"language":71,"meta":58,"style":58},"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",[73,108068,108069,108075,108079,108085,108091,108095,108099,108107,108112,108116,108120,108124,108129,108134,108138,108142,108146,108151,108155,108159,108163,108167,108171,108175,108187,108199,108207,108211,108221,108241,108251,108256,108261,108265,108282,108295,108300,108304,108308,108320],{"__ignoreMap":58},[76,108070,108071,108073],{"class":78,"line":79},[76,108072,90],{"class":89},[76,108074,31899],{"class":93},[76,108076,108077],{"class":78,"line":86},[76,108078,2472],{"emptyLinePlaceholder":125},[76,108080,108081,108083],{"class":78,"line":97},[76,108082,90],{"class":89},[76,108084,101342],{"class":93},[76,108086,108087,108089],{"class":78,"line":103},[76,108088,90],{"class":89},[76,108090,107593],{"class":93},[76,108092,108093],{"class":78,"line":1273},[76,108094,2472],{"emptyLinePlaceholder":125},[76,108096,108097],{"class":78,"line":1287},[76,108098,2472],{"emptyLinePlaceholder":125},[76,108100,108101,108103,108105],{"class":78,"line":1293},[76,108102,101355],{"class":250},[76,108104,13636],{"class":89},[76,108106,101360],{"class":305},[76,108108,108109],{"class":78,"line":1384},[76,108110,108111],{"class":305},"\u003Cmujoco model=\"viewer_demo\">\n",[76,108113,108114],{"class":78,"line":1390},[76,108115,101370],{"class":305},[76,108117,108118],{"class":78,"line":1402},[76,108119,2472],{"emptyLinePlaceholder":125},[76,108121,108122],{"class":78,"line":1684},[76,108123,101379],{"class":305},[76,108125,108126],{"class":78,"line":1689},[76,108127,108128],{"class":305},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[76,108130,108131],{"class":78,"line":1695},[76,108132,108133],{"class":305},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[76,108135,108136],{"class":78,"line":1700},[76,108137,2472],{"emptyLinePlaceholder":125},[76,108139,108140],{"class":78,"line":1714},[76,108141,101393],{"class":305},[76,108143,108144],{"class":78,"line":1719},[76,108145,101398],{"class":305},[76,108147,108148],{"class":78,"line":1725},[76,108149,108150],{"class":305},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[76,108152,108153],{"class":78,"line":1746},[76,108154,101408],{"class":305},[76,108156,108157],{"class":78,"line":1751},[76,108158,101413],{"class":305},[76,108160,108161],{"class":78,"line":1765},[76,108162,101418],{"class":305},[76,108164,108165],{"class":78,"line":1770},[76,108166,95767],{"class":305},[76,108168,108169],{"class":78,"line":1799},[76,108170,2472],{"emptyLinePlaceholder":125},[76,108172,108173],{"class":78,"line":1804},[76,108174,2472],{"emptyLinePlaceholder":125},[76,108176,108177,108179,108181,108183,108185],{"class":78,"line":1821},[76,108178,32017],{"class":89},[76,108180,2045],{"class":2035},[76,108182,101439],{"class":93},[76,108184,95755],{"class":250},[76,108186,3811],{"class":93},[76,108188,108189,108191,108193,108195,108197],{"class":78,"line":1826},[76,108190,101448],{"class":93},[76,108192,247],{"class":89},[76,108194,101453],{"class":93},[76,108196,101355],{"class":250},[76,108198,208],{"class":93},[76,108200,108201,108203,108205],{"class":78,"line":1831},[76,108202,101462],{"class":93},[76,108204,247],{"class":89},[76,108206,101467],{"class":93},[76,108208,108209],{"class":78,"line":1836},[76,108210,2472],{"emptyLinePlaceholder":125},[76,108212,108213,108215,108217,108219],{"class":78,"line":1850},[76,108214,34248],{"class":89},[76,108216,107877],{"class":93},[76,108218,31453],{"class":89},[76,108220,107882],{"class":93},[76,108222,108223,108226,108229,108231,108234,108236,108239],{"class":78,"line":1855},[76,108224,108225],{"class":89},"        while",[76,108227,108228],{"class":93}," viewer.is_running() ",[76,108230,30532],{"class":89},[76,108232,108233],{"class":93}," data.time ",[76,108235,1109],{"class":89},[76,108237,108238],{"class":250}," 5.0",[76,108240,3811],{"class":93},[76,108242,108243,108246,108248],{"class":78,"line":2649},[76,108244,108245],{"class":93},"            step_start ",[76,108247,247],{"class":89},[76,108249,108250],{"class":93}," time.time()\n",[76,108252,108253],{"class":78,"line":2663},[76,108254,108255],{"class":93},"            mujoco.mj_step(model, data)\n",[76,108257,108258],{"class":78,"line":2671},[76,108259,108260],{"class":93},"            viewer.sync()\n",[76,108262,108263],{"class":78,"line":2676},[76,108264,2472],{"emptyLinePlaceholder":125},[76,108266,108267,108270,108272,108274,108276,108278,108280],{"class":78,"line":2682},[76,108268,108269],{"class":93},"            sleep_time ",[76,108271,247],{"class":89},[76,108273,108001],{"class":93},[76,108275,112],{"class":89},[76,108277,108006],{"class":93},[76,108279,112],{"class":89},[76,108281,108011],{"class":93},[76,108283,108284,108286,108289,108291,108293],{"class":78,"line":2688},[76,108285,4714],{"class":89},[76,108287,108288],{"class":93}," sleep_time ",[76,108290,1159],{"class":89},[76,108292,4165],{"class":250},[76,108294,3811],{"class":93},[76,108296,108297],{"class":78,"line":2693},[76,108298,108299],{"class":93},"                time.sleep(sleep_time)\n",[76,108301,108302],{"class":78,"line":8020},[76,108303,2472],{"emptyLinePlaceholder":125},[76,108305,108306],{"class":78,"line":8044},[76,108307,2472],{"emptyLinePlaceholder":125},[76,108309,108310,108312,108314,108316,108318],{"class":78,"line":8049},[76,108311,1603],{"class":89},[76,108313,31290],{"class":250},[76,108315,101600],{"class":89},[76,108317,101603],{"class":305},[76,108319,3811],{"class":93},[76,108321,108322],{"class":78,"line":8055},[76,108323,101610],{"class":93},[14,108325,103611],{},[67,108327,108329],{"className":23894,"code":108328,"language":23896,"meta":58,"style":58},"touch ch5_viewer.py\n",[73,108330,108331],{"__ignoreMap":58},[76,108332,108333,108335],{"class":78,"line":79},[76,108334,101324],{"class":2035},[76,108336,108337],{"class":305}," ch5_viewer.py\n",[14,108339,108340],{},"离屏 Renderer 保存图片:",[67,108342,108344],{"className":69,"code":108343,"language":71,"meta":58,"style":58},"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",[73,108345,108346,108358,108362,108368,108378,108382,108386,108394,108399,108403,108407,108411,108415,108420,108424,108428,108432,108436,108440,108444,108448,108452,108456,108460,108464,108476,108488,108496,108521,108525,108541,108545,108549,108564,108573,108577,108591,108596,108601,108605,108617,108629,108633,108637,108649],{"__ignoreMap":58},[76,108347,108348,108350,108353,108355],{"class":78,"line":79},[76,108349,30807],{"class":89},[76,108351,108352],{"class":93}," pathlib ",[76,108354,90],{"class":89},[76,108356,108357],{"class":93}," Path\n",[76,108359,108360],{"class":78,"line":86},[76,108361,2472],{"emptyLinePlaceholder":125},[76,108363,108364,108366],{"class":78,"line":97},[76,108365,90],{"class":89},[76,108367,101342],{"class":93},[76,108369,108370,108372,108374,108376],{"class":78,"line":103},[76,108371,30807],{"class":89},[76,108373,47333],{"class":250},[76,108375,47336],{"class":89},[76,108377,47339],{"class":93},[76,108379,108380],{"class":78,"line":1273},[76,108381,2472],{"emptyLinePlaceholder":125},[76,108383,108384],{"class":78,"line":1287},[76,108385,2472],{"emptyLinePlaceholder":125},[76,108387,108388,108390,108392],{"class":78,"line":1293},[76,108389,101355],{"class":250},[76,108391,13636],{"class":89},[76,108393,101360],{"class":305},[76,108395,108396],{"class":78,"line":1384},[76,108397,108398],{"class":305},"\u003Cmujoco model=\"renderer_demo\">\n",[76,108400,108401],{"class":78,"line":1390},[76,108402,101370],{"class":305},[76,108404,108405],{"class":78,"line":1402},[76,108406,2472],{"emptyLinePlaceholder":125},[76,108408,108409],{"class":78,"line":1684},[76,108410,101379],{"class":305},[76,108412,108413],{"class":78,"line":1689},[76,108414,108128],{"class":305},[76,108416,108417],{"class":78,"line":1695},[76,108418,108419],{"class":305},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[76,108421,108422],{"class":78,"line":1700},[76,108423,108133],{"class":305},[76,108425,108426],{"class":78,"line":1714},[76,108427,2472],{"emptyLinePlaceholder":125},[76,108429,108430],{"class":78,"line":1719},[76,108431,101393],{"class":305},[76,108433,108434],{"class":78,"line":1725},[76,108435,101398],{"class":305},[76,108437,108438],{"class":78,"line":1746},[76,108439,108150],{"class":305},[76,108441,108442],{"class":78,"line":1751},[76,108443,101408],{"class":305},[76,108445,108446],{"class":78,"line":1765},[76,108447,101413],{"class":305},[76,108449,108450],{"class":78,"line":1770},[76,108451,101418],{"class":305},[76,108453,108454],{"class":78,"line":1799},[76,108455,95767],{"class":305},[76,108457,108458],{"class":78,"line":1804},[76,108459,2472],{"emptyLinePlaceholder":125},[76,108461,108462],{"class":78,"line":1821},[76,108463,2472],{"emptyLinePlaceholder":125},[76,108465,108466,108468,108470,108472,108474],{"class":78,"line":1826},[76,108467,32017],{"class":89},[76,108469,2045],{"class":2035},[76,108471,101439],{"class":93},[76,108473,95755],{"class":250},[76,108475,3811],{"class":93},[76,108477,108478,108480,108482,108484,108486],{"class":78,"line":1831},[76,108479,101448],{"class":93},[76,108481,247],{"class":89},[76,108483,101453],{"class":93},[76,108485,101355],{"class":250},[76,108487,208],{"class":93},[76,108489,108490,108492,108494],{"class":78,"line":1836},[76,108491,101462],{"class":93},[76,108493,247],{"class":89},[76,108495,101467],{"class":93},[76,108497,108498,108501,108503,108505,108507,108509,108511,108513,108515,108517,108519],{"class":78,"line":1850},[76,108499,108500],{"class":93},"    renderer ",[76,108502,247],{"class":89},[76,108504,107915],{"class":93},[76,108506,25054],{"class":5288},[76,108508,247],{"class":89},[76,108510,42412],{"class":250},[76,108512,12507],{"class":93},[76,108514,25050],{"class":5288},[76,108516,247],{"class":89},[76,108518,107930],{"class":250},[76,108520,208],{"class":93},[76,108522,108523],{"class":78,"line":1855},[76,108524,2472],{"emptyLinePlaceholder":125},[76,108526,108527,108529,108531,108533,108535,108537,108539],{"class":78,"line":2649},[76,108528,3273],{"class":89},[76,108530,101542],{"class":93},[76,108532,26116],{"class":89},[76,108534,32513],{"class":250},[76,108536,202],{"class":93},[76,108538,512],{"class":250},[76,108540,30856],{"class":93},[76,108542,108543],{"class":78,"line":2663},[76,108544,101557],{"class":93},[76,108546,108547],{"class":78,"line":2671},[76,108548,2472],{"emptyLinePlaceholder":125},[76,108550,108551,108554,108557,108559,108562],{"class":78,"line":2676},[76,108552,108553],{"class":93},"    renderer.update_scene(data, ",[76,108555,108556],{"class":5288},"camera",[76,108558,247],{"class":89},[76,108560,108561],{"class":305},"\"fixed_camera\"",[76,108563,208],{"class":93},[76,108565,108566,108569,108571],{"class":78,"line":2682},[76,108567,108568],{"class":93},"    image ",[76,108570,247],{"class":89},[76,108572,107626],{"class":93},[76,108574,108575],{"class":78,"line":2688},[76,108576,2472],{"emptyLinePlaceholder":125},[76,108578,108579,108582,108584,108587,108589],{"class":78,"line":2693},[76,108580,108581],{"class":93},"    output_path ",[76,108583,247],{"class":89},[76,108585,108586],{"class":93}," Path(",[76,108588,108056],{"class":305},[76,108590,208],{"class":93},[76,108592,108593],{"class":78,"line":8020},[76,108594,108595],{"class":93},"    Image.fromarray(image).save(output_path)\n",[76,108597,108598],{"class":78,"line":8044},[76,108599,108600],{"class":93},"    renderer.close()\n",[76,108602,108603],{"class":78,"line":8049},[76,108604,2472],{"emptyLinePlaceholder":125},[76,108606,108607,108609,108611,108614],{"class":78,"line":8055},[76,108608,31369],{"class":250},[76,108610,202],{"class":93},[76,108612,108613],{"class":305},"\"saved:\"",[76,108615,108616],{"class":93},", output_path.resolve())\n",[76,108618,108619,108621,108623,108626],{"class":78,"line":8082},[76,108620,31369],{"class":250},[76,108622,202],{"class":93},[76,108624,108625],{"class":305},"\"image shape:\"",[76,108627,108628],{"class":93},", image.shape)\n",[76,108630,108631],{"class":78,"line":8087},[76,108632,2472],{"emptyLinePlaceholder":125},[76,108634,108635],{"class":78,"line":8093},[76,108636,2472],{"emptyLinePlaceholder":125},[76,108638,108639,108641,108643,108645,108647],{"class":78,"line":8105},[76,108640,1603],{"class":89},[76,108642,31290],{"class":250},[76,108644,101600],{"class":89},[76,108646,101603],{"class":305},[76,108648,3811],{"class":93},[76,108650,108651],{"class":78,"line":8117},[76,108652,101610],{"class":93},[14,108654,103611],{},[67,108656,108658],{"className":23894,"code":108657,"language":23896,"meta":58,"style":58},"touch ch5_renderer.py\n",[73,108659,108660],{"__ignoreMap":58},[76,108661,108662,108664],{"class":78,"line":79},[76,108663,101324],{"class":2035},[76,108665,108666],{"class":305}," ch5_renderer.py\n",[169,108668,101613],{"id":101613},[14,108670,108671],{},"viewer 上下文：",[67,108673,108675],{"className":69,"code":108674,"language":71,"meta":58,"style":58},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[73,108676,108677],{"__ignoreMap":58},[76,108678,108679,108681,108683,108685],{"class":78,"line":79},[76,108680,107874],{"class":89},[76,108682,107877],{"class":93},[76,108684,31453],{"class":89},[76,108686,107882],{"class":93},[14,108688,108689,108691],{},[73,108690,107874],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108693,108694],{},"窗口循环：",[67,108696,108698],{"className":69,"code":108697,"language":71,"meta":58,"style":58},"while viewer.is_running() and data.time \u003C 5.0:\n",[73,108699,108700],{"__ignoreMap":58},[76,108701,108702,108705,108707,108709,108711,108713,108715],{"class":78,"line":79},[76,108703,108704],{"class":89},"while",[76,108706,108228],{"class":93},[76,108708,30532],{"class":89},[76,108710,108233],{"class":93},[76,108712,1109],{"class":89},[76,108714,108238],{"class":250},[76,108716,3811],{"class":93},[14,108718,108719],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108721,108722],{},"固定相机：",[67,108724,108726],{"className":53137,"code":108725,"language":53139,"meta":58,"style":58},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[73,108727,108728],{"__ignoreMap":58},[76,108729,108730,108732,108734,108736,108738,108740,108742,108744,108747,108750,108752,108755],{"class":78,"line":79},[76,108731,1109],{"class":93},[76,108733,108556],{"class":51370},[76,108735,14992],{"class":2035},[76,108737,247],{"class":93},[76,108739,108561],{"class":305},[76,108741,101147],{"class":2035},[76,108743,247],{"class":93},[76,108745,108746],{"class":305},"\"1.5 -2.0 1.2\"",[76,108748,108749],{"class":2035}," xyaxes",[76,108751,247],{"class":93},[76,108753,108754],{"class":305},"\"1 0.75 0 0 0 1\"",[76,108756,101185],{"class":93},[14,108758,108759],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[169,108761,108763],{"id":108762},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[67,108765,108767],{"className":69,"code":108766,"language":71,"meta":58,"style":58},"import time\n",[73,108768,108769],{"__ignoreMap":58},[76,108770,108771,108773],{"class":78,"line":79},[76,108772,90],{"class":89},[76,108774,31899],{"class":93},[14,108776,108777],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[67,108779,108781],{"className":69,"code":108780,"language":71,"meta":58,"style":58},"import mujoco\nimport mujoco.viewer\n",[73,108782,108783,108789],{"__ignoreMap":58},[76,108784,108785,108787],{"class":78,"line":79},[76,108786,90],{"class":89},[76,108788,101342],{"class":93},[76,108790,108791,108793],{"class":78,"line":86},[76,108792,90],{"class":89},[76,108794,107593],{"class":93},[14,108796,108797],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[67,108799,108800],{"className":69,"code":108674,"language":71,"meta":58,"style":58},[73,108801,108802],{"__ignoreMap":58},[76,108803,108804,108806,108808,108810],{"class":78,"line":79},[76,108805,107874],{"class":89},[76,108807,107877],{"class":93},[76,108809,31453],{"class":89},[76,108811,107882],{"class":93},[14,108813,108814,108815,108818],{},"打开一个 viewer 窗口。",[73,108816,108817],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[67,108820,108821],{"className":69,"code":108697,"language":71,"meta":58,"style":58},[73,108822,108823],{"__ignoreMap":58},[76,108824,108825,108827,108829,108831,108833,108835,108837],{"class":78,"line":79},[76,108826,108704],{"class":89},[76,108828,108228],{"class":93},[76,108830,30532],{"class":89},[76,108832,108233],{"class":93},[76,108834,1109],{"class":89},[76,108836,108238],{"class":250},[76,108838,3811],{"class":93},[14,108840,108841,108842,108845],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[73,108843,108844],{},"viewer.is_running()"," 会变成 false，循环结束。",[67,108847,108849],{"className":69,"code":108848,"language":71,"meta":58,"style":58},"step_start = time.time()\n",[73,108850,108851],{"__ignoreMap":58},[76,108852,108853,108856,108858],{"class":78,"line":79},[76,108854,108855],{"class":93},"step_start ",[76,108857,247],{"class":89},[76,108859,108250],{"class":93},[14,108861,108862],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[67,108864,108865],{"className":69,"code":107959,"language":71,"meta":58,"style":58},[73,108866,108867,108871],{"__ignoreMap":58},[76,108868,108869],{"class":78,"line":79},[76,108870,104546],{"class":93},[76,108872,108873],{"class":78,"line":86},[76,108874,107970],{"class":93},[14,108876,108877,108879,108880,108882,108883,108885,108886,108889],{},[73,108878,101256],{}," 推进物理仿真。",[73,108881,107978],{}," 把最新的 ",[73,108884,33471],{}," 同步到窗口里显示。没有 ",[73,108887,108888],{},"sync()","，窗口可能看不到最新状态。",[67,108891,108892],{"className":69,"code":107989,"language":71,"meta":58,"style":58},[73,108893,108894],{"__ignoreMap":58},[76,108895,108896,108898,108900,108902,108904,108906,108908],{"class":78,"line":79},[76,108897,107996],{"class":93},[76,108899,247],{"class":89},[76,108901,108001],{"class":93},[76,108903,112],{"class":89},[76,108905,108006],{"class":93},[76,108907,112],{"class":89},[76,108909,108011],{"class":93},[14,108911,108912],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[67,108914,108916],{"className":69,"code":108915,"language":71,"meta":58,"style":58},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[73,108917,108918,108930],{"__ignoreMap":58},[76,108919,108920,108922,108924,108926,108928],{"class":78,"line":79},[76,108921,1603],{"class":89},[76,108923,108288],{"class":93},[76,108925,1159],{"class":89},[76,108927,4165],{"class":250},[76,108929,3811],{"class":93},[76,108931,108932],{"class":78,"line":86},[76,108933,108934],{"class":93},"    time.sleep(sleep_time)\n",[14,108936,108937],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[169,108939,108941],{"id":108940},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[67,108943,108945],{"className":69,"code":108944,"language":71,"meta":58,"style":58},"from pathlib import Path\n",[73,108946,108947],{"__ignoreMap":58},[76,108948,108949,108951,108953,108955],{"class":78,"line":79},[76,108950,30807],{"class":89},[76,108952,108352],{"class":93},[76,108954,90],{"class":89},[76,108956,108357],{"class":93},[14,108958,108959,108960,108963,108964,108967],{},"导入 ",[73,108961,108962],{},"Path","，用来处理文件路径。相比直接写字符串，",[73,108965,108966],{},"Path(\"render_output.png\")"," 更清晰。",[67,108969,108971],{"className":69,"code":108970,"language":71,"meta":58,"style":58},"from PIL import Image\n",[73,108972,108973],{"__ignoreMap":58},[76,108974,108975,108977,108979,108981],{"class":78,"line":79},[76,108976,30807],{"class":89},[76,108978,47333],{"class":250},[76,108980,47336],{"class":89},[76,108982,47339],{"class":93},[14,108984,108985],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[67,108987,108988],{"className":53137,"code":108725,"language":53139,"meta":58,"style":58},[73,108989,108990],{"__ignoreMap":58},[76,108991,108992,108994,108996,108998,109000,109002,109004,109006,109008,109010,109012,109014],{"class":78,"line":79},[76,108993,1109],{"class":93},[76,108995,108556],{"class":51370},[76,108997,14992],{"class":2035},[76,108999,247],{"class":93},[76,109001,108561],{"class":305},[76,109003,101147],{"class":2035},[76,109005,247],{"class":93},[76,109007,108746],{"class":305},[76,109009,108749],{"class":2035},[76,109011,247],{"class":93},[76,109013,108754],{"class":305},[76,109015,101185],{"class":93},[14,109017,109018,109019,109021,109022,109024,109025,109028,109029,109031],{},"定义一个相机。",[73,109020,79880],{}," 是相机名字。",[73,109023,104187],{}," 是相机在世界里的位置。",[73,109026,109027],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[73,109030,104187],{}," 来调视角。",[67,109033,109035],{"className":69,"code":109034,"language":71,"meta":58,"style":58},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[73,109036,109037],{"__ignoreMap":58},[76,109038,109039,109041,109043,109045,109047,109049,109051,109053,109055,109057,109059],{"class":78,"line":79},[76,109040,107611],{"class":93},[76,109042,247],{"class":89},[76,109044,107915],{"class":93},[76,109046,25054],{"class":5288},[76,109048,247],{"class":89},[76,109050,42412],{"class":250},[76,109052,12507],{"class":93},[76,109054,25050],{"class":5288},[76,109056,247],{"class":89},[76,109058,107930],{"class":250},[76,109060,208],{"class":93},[14,109062,109063,109064,101059,109066,109068],{},"创建离屏渲染器。",[73,109065,25054],{},[73,109067,25050],{}," 决定输出图片大小。",[67,109070,109071],{"className":69,"code":101717,"language":71,"meta":58,"style":58},[73,109072,109073,109089],{"__ignoreMap":58},[76,109074,109075,109077,109079,109081,109083,109085,109087],{"class":78,"line":79},[76,109076,3097],{"class":89},[76,109078,101542],{"class":93},[76,109080,26116],{"class":89},[76,109082,32513],{"class":250},[76,109084,202],{"class":93},[76,109086,512],{"class":250},[76,109088,30856],{"class":93},[76,109090,109091],{"class":78,"line":86},[76,109092,101740],{"class":93},[14,109094,109095],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[67,109097,109099],{"className":69,"code":109098,"language":71,"meta":58,"style":58},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[73,109100,109101],{"__ignoreMap":58},[76,109102,109103,109106,109108,109110,109112],{"class":78,"line":79},[76,109104,109105],{"class":93},"renderer.update_scene(data, ",[76,109107,108556],{"class":5288},[76,109109,247],{"class":89},[76,109111,108561],{"class":305},[76,109113,208],{"class":93},[14,109115,109116,109117,109119,109120,109123],{},"告诉 renderer：用当前 ",[73,109118,33471],{}," 的状态更新画面，并使用名为 ",[73,109121,109122],{},"fixed_camera"," 的相机视角。",[67,109125,109126],{"className":69,"code":108021,"language":71,"meta":58,"style":58},[73,109127,109128],{"__ignoreMap":58},[76,109129,109130,109132,109134],{"class":78,"line":79},[76,109131,107621],{"class":93},[76,109133,247],{"class":89},[76,109135,107626],{"class":93},[14,109137,109138,109139,109142],{},"真正渲染出图像。",[73,109140,109141],{},"image"," 是一个 NumPy 数组，不是文件。",[67,109144,109146],{"className":69,"code":109145,"language":71,"meta":58,"style":58},"Image.fromarray(image).save(output_path)\n",[73,109147,109148],{"__ignoreMap":58},[76,109149,109150],{"class":78,"line":79},[76,109151,109145],{"class":93},[14,109153,109154,109155,28458],{},"把数组转换成图片，并保存到 ",[73,109156,109157],{},"render_output.png",[67,109159,109161],{"className":69,"code":109160,"language":71,"meta":58,"style":58},"renderer.close()\n",[73,109162,109163],{"__ignoreMap":58},[76,109164,109165],{"class":78,"line":79},[76,109166,109160],{"class":93},[14,109168,109169],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[140,109171,102357],{"id":102356},[14,109173,109174,109175,109177,109178,28458],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[73,109176,109157],{},"，并输出图像数组形状，例如 ",[73,109179,109180],{},"(480, 640, 3)",[14,109182,109183],{},"如果图片里看不到方块，先检查：",[152,109185,109186,109189,109192],{},[155,109187,109188],{},"方块是否掉到相机视野外。",[155,109190,109191],{},"camera 位置是否合理。",[155,109193,109194,109195,109198],{},"是否在 ",[73,109196,109197],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[140,109200,102389],{"id":102388},[14,109202,109203],{},"运行 viewer:",[67,109205,109207],{"className":23894,"code":109206,"language":23896,"meta":58,"style":58},"python ch5_viewer.py\n",[73,109208,109209],{"__ignoreMap":58},[76,109210,109211,109213],{"class":78,"line":79},[76,109212,71],{"class":2035},[76,109214,108337],{"class":305},[14,109216,109217],{},"运行 renderer:",[67,109219,109221],{"className":23894,"code":109220,"language":23896,"meta":58,"style":58},"python ch5_renderer.py\n",[73,109222,109223],{"__ignoreMap":58},[76,109224,109225,109227],{"class":78,"line":79},[76,109226,71],{"class":2035},[76,109228,108666],{"class":305},[14,109230,109231],{},"如果在服务器上运行:",[67,109233,109235],{"className":23894,"code":109234,"language":23896,"meta":58,"style":58},"MUJOCO_GL=egl python ch5_renderer.py\n",[73,109236,109237],{"__ignoreMap":58},[76,109238,109239,109241,109243,109245,109248],{"class":78,"line":79},[76,109240,107855],{"class":93},[76,109242,247],{"class":89},[76,109244,107845],{"class":305},[76,109246,109247],{"class":2035}," python",[76,109249,108666],{"class":305},[14,109251,107823],{},[67,109253,109255],{"className":23894,"code":109254,"language":23896,"meta":58,"style":58},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[73,109256,109257],{"__ignoreMap":58},[76,109258,109259,109261,109263,109265,109267],{"class":78,"line":79},[76,109260,107855],{"class":93},[76,109262,247],{"class":89},[76,109264,107849],{"class":305},[76,109266,109247],{"class":2035},[76,109268,108666],{"class":305},[14,109270,109271],{},"再做几个练习：",[152,109273,109274,109281,109284,109290],{},[155,109275,109276,109277,109280],{},"把 renderer 分辨率改成 ",[73,109278,109279],{},"height=240, width=320","，观察输出 shape。",[155,109282,109283],{},"把方块颜色改成蓝色，重新保存图片。",[155,109285,109286,109287,109289],{},"把相机 ",[73,109288,104187],{}," 改远一点，观察画面中物体是否变小。",[155,109291,109292,109293,102455,109296,109299],{},"把 viewer 示例中的 ",[73,109294,109295],{},"data.time \u003C 5.0",[73,109297,109298],{},"data.time \u003C 20.0","，观察更长时间。",[140,109301,102494],{"id":102493},[169,109303,109305],{"id":109304},"viewer-窗口打不开","viewer 窗口打不开",[14,109307,109308],{},"安装:",[67,109310,109312],{"className":23894,"code":109311,"language":23896,"meta":58,"style":58},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[73,109313,109314],{"__ignoreMap":58},[76,109315,109316,109318,109320,109322,109324,109326,109328,109330,109332,109334,109336],{"class":78,"line":79},[76,109317,24649],{"class":2035},[76,109319,26388],{"class":305},[76,109321,23906],{"class":305},[76,109323,26473],{"class":250},[76,109325,102547],{"class":305},[76,109327,100875],{"class":305},[76,109329,102552],{"class":305},[76,109331,100888],{"class":305},[76,109333,100894],{"class":305},[76,109335,100885],{"class":305},[76,109337,109338],{"class":305}," libXinerama\n",[169,109340,109342],{"id":109341},"glfwerror",[73,109343,109344],{},"GLFWError",[14,109346,109347],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[169,109349,109351],{"id":109350},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109353,109354,109355,82609,109357,109359],{},"尝试 ",[73,109356,101078],{},[73,109358,101081],{},"。可能存在版本差异。",[169,109361,109362],{"id":109362},"保存图片是黑的",[14,109364,102616],{},[152,109366,109367,109370,109373,109383],{},[155,109368,109369],{},"XML 里是否有 light。",[155,109371,109372],{},"相机是否对着模型。",[155,109374,109375,109376,109379,109380,28458],{},"是否先 ",[73,109377,109378],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[73,109381,109382],{},"renderer.render()",[155,109384,109385],{},"物体是否已经掉出视野。",[169,109387,109388],{"id":109388},"远程服务器没有显示器",[14,109390,109391],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[67,109393,109394],{"className":23894,"code":109234,"language":23896,"meta":58,"style":58},[73,109395,109396],{"__ignoreMap":58},[76,109397,109398,109400,109402,109404,109406],{"class":78,"line":79},[76,109399,107855],{"class":93},[76,109401,247],{"class":89},[76,109403,107845],{"class":305},[76,109405,109247],{"class":2035},[76,109407,108666],{"class":305},[14,109409,109410],{},"如果 EGL 不可用，再尝试：",[67,109412,109413],{"className":23894,"code":109254,"language":23896,"meta":58,"style":58},[73,109414,109415],{"__ignoreMap":58},[76,109416,109417,109419,109421,109423,109425],{"class":78,"line":79},[76,109418,107855],{"class":93},[76,109420,247],{"class":89},[76,109422,107849],{"class":305},[76,109424,109247],{"class":2035},[76,109426,108666],{"class":305},[140,109428,102648],{"id":102647},[14,109430,109431],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[152,109433,109434,109437,109440],{},[155,109435,109436],{},"先用 viewer 看模型和控制是否正常。",[155,109438,109439],{},"再用 renderer 保存图片或构造视觉观测。",[155,109441,109442],{},"最后把状态、动作、图像、奖励组织成训练数据。",[117,109444,109445],{},"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":58,"searchDepth":86,"depth":86,"links":109447},[109448,109449,109450,109455,109460,109461,109462,109469],{"id":100687,"depth":86,"text":100688},{"id":100810,"depth":86,"text":100811},{"id":101085,"depth":86,"text":101086,"children":109451},[109452,109453,109454],{"id":107952,"depth":97,"text":107953},{"id":107982,"depth":97,"text":107983},{"id":108017,"depth":97,"text":108018},{"id":101293,"depth":86,"text":101294,"children":109456},[109457,109458,109459],{"id":101613,"depth":97,"text":101613},{"id":108762,"depth":97,"text":108763},{"id":108940,"depth":97,"text":108941},{"id":102356,"depth":86,"text":102357},{"id":102388,"depth":86,"text":102389},{"id":102493,"depth":86,"text":102494,"children":109463},[109464,109465,109466,109467,109468],{"id":109304,"depth":97,"text":109305},{"id":109341,"depth":97,"text":109344},{"id":109350,"depth":97,"text":109351},{"id":109362,"depth":97,"text":109362},{"id":109388,"depth":97,"text":109388},{"id":102647,"depth":86,"text":102648},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107560,"description":58},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109476,"title":109477,"body":109478,"description":58,"extension":123,"meta":111389,"navigation":125,"path":111390,"seo":111391,"stem":111392,"__hash__":111393},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109479,"toc":111365},[109480,109483,109485,109488,109490,109509,109512,109518,109521,109523,109525,109549,109551,109565,109567,109608,109610,109621,109623,109626,109632,109635,109669,109672,109704,109707,109739,109743,109746,109786,109789,109795,109798,109804,109808,109811,109817,109820,109824,109827,109867,109869,109882,109885,109887,110469,110471,110483,110486,110497,110499,110502,110521,110533,110536,110557,110560,110563,110606,110609,110612,110632,110639,110641,110659,110674,110677,110683,110686,110692,110709,110716,110747,110758,110792,110803,110820,110829,110837,110842,110856,110859,110880,110886,110900,110905,110935,110945,110970,110978,111001,111004,111020,111023,111031,111037,111059,111072,111093,111102,111141,111152,111154,111157,111163,111166,111169,111175,111178,111198,111201,111203,111242,111244,111247,111255,111258,111261,111288,111291,111301,111307,111310,111316,111318,111324,111328,111331,111333,111336,111360,111363],[10,109481,109477],{"id":109482},"_6控制任务cartpole",[140,109484,100688],{"id":100687},[14,109486,109487],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109489,104372],{},[152,109491,109492,109495,109497,109500,109503,109506],{},[155,109493,109494],{},"slide joint",[155,109496,106225],{},[155,109498,109499],{},"cart force actuator",[155,109501,109502],{},"状态观测",[155,109504,109505],{},"简单控制循环",[155,109507,109508],{},"reward 设计雏形",[14,109510,109511],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[67,109513,109516],{"className":109514,"code":109515,"language":5259,"meta":58},[5257],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[73,109517,109515],{"__ignoreMap":58},[14,109519,109520],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[140,109522,100811],{"id":100810},[14,109524,100814],{},[67,109526,109527],{"className":23894,"code":104429,"language":23896,"meta":58,"style":58},[73,109528,109529],{"__ignoreMap":58},[76,109530,109531,109533,109535,109537,109539,109541,109543,109545,109547],{"class":78,"line":79},[76,109532,24649],{"class":2035},[76,109534,26388],{"class":305},[76,109536,23906],{"class":305},[76,109538,26473],{"class":250},[76,109540,104444],{"class":305},[76,109542,100839],{"class":305},[76,109544,102542],{"class":305},[76,109546,100855],{"class":305},[76,109548,104453],{"class":305},[14,109550,102860],{},[67,109552,109553],{"className":23894,"code":100960,"language":23896,"meta":58,"style":58},[73,109554,109555],{"__ignoreMap":58},[76,109556,109557,109559,109561,109563],{"class":78,"line":79},[76,109558,23903],{"class":2035},[76,109560,23906],{"class":305},[76,109562,100971],{"class":305},[76,109564,100974],{"class":305},[14,109566,102877],{},[67,109568,109570],{"className":23894,"code":109569,"language":23896,"meta":58,"style":58},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[73,109571,109572,109589,109598],{"__ignoreMap":58},[76,109573,109574,109576,109578,109580,109583,109585,109587],{"class":78,"line":79},[76,109575,30403],{"class":2035},[76,109577,29249],{"class":305},[76,109579,25188],{"class":250},[76,109581,109582],{"class":305}," mujoco-cartpole",[76,109584,101016],{"class":305},[76,109586,101019],{"class":250},[76,109588,101022],{"class":250},[76,109590,109591,109593,109595],{"class":78,"line":86},[76,109592,30403],{"class":2035},[76,109594,101029],{"class":305},[76,109596,109597],{"class":305}," mujoco-cartpole\n",[76,109599,109600,109602,109604,109606],{"class":78,"line":97},[76,109601,23903],{"class":2035},[76,109603,23906],{"class":305},[76,109605,100971],{"class":305},[76,109607,100974],{"class":305},[14,109609,101045],{},[152,109611,109612,109615,109618],{},[155,109613,109614],{},"本章不依赖 Gymnasium。",[155,109616,109617],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[155,109619,109620],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[140,109622,101086],{"id":101085},[14,109624,109625],{},"Cartpole 的模型结构:",[67,109627,109630],{"className":109628,"code":109629,"language":5259,"meta":58},[5257],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[73,109631,109629],{"__ignoreMap":58},[14,109633,109634],{},"小车通过 slide joint 左右移动:",[67,109636,109638],{"className":53137,"code":109637,"language":53139,"meta":58,"style":58},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[73,109639,109640],{"__ignoreMap":58},[76,109641,109642,109644,109646,109648,109650,109653,109655,109657,109660,109662,109664,109667],{"class":78,"line":79},[76,109643,1109],{"class":93},[76,109645,102997],{"class":51370},[76,109647,14992],{"class":2035},[76,109649,247],{"class":93},[76,109651,109652],{"class":305},"\"cart_x\"",[76,109654,53894],{"class":2035},[76,109656,247],{"class":93},[76,109658,109659],{"class":305},"\"slide\"",[76,109661,106069],{"class":2035},[76,109663,247],{"class":93},[76,109665,109666],{"class":305},"\"1 0 0\"",[76,109668,101185],{"class":93},[14,109670,109671],{},"杆子通过 hinge joint 旋转:",[67,109673,109675],{"className":53137,"code":109674,"language":53139,"meta":58,"style":58},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[73,109676,109677],{"__ignoreMap":58},[76,109678,109679,109681,109683,109685,109687,109690,109692,109694,109696,109698,109700,109702],{"class":78,"line":79},[76,109680,1109],{"class":93},[76,109682,102997],{"class":51370},[76,109684,14992],{"class":2035},[76,109686,247],{"class":93},[76,109688,109689],{"class":305},"\"pole_hinge\"",[76,109691,53894],{"class":2035},[76,109693,247],{"class":93},[76,109695,106060],{"class":305},[76,109697,106069],{"class":2035},[76,109699,247],{"class":93},[76,109701,106074],{"class":305},[76,109703,101185],{"class":93},[14,109705,109706],{},"控制力作用在小车 slide joint 上:",[67,109708,109710],{"className":53137,"code":109709,"language":53139,"meta":58,"style":58},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[73,109711,109712],{"__ignoreMap":58},[76,109713,109714,109716,109718,109720,109722,109725,109727,109729,109731,109733,109735,109737],{"class":78,"line":79},[76,109715,1109],{"class":93},[76,109717,106115],{"class":51370},[76,109719,14992],{"class":2035},[76,109721,247],{"class":93},[76,109723,109724],{"class":305},"\"cart_motor\"",[76,109726,106125],{"class":2035},[76,109728,247],{"class":93},[76,109730,109652],{"class":305},[76,109732,106132],{"class":2035},[76,109734,247],{"class":93},[76,109736,54386],{"class":305},[76,109738,101185],{"class":93},[169,109740,109742],{"id":109741},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109744,109745],{},"这个简化模型有两个关节：",[338,109747,109748,109759],{},[341,109749,109750],{},[344,109751,109752,109754,109756],{},[347,109753,102800],{"align":23808},[347,109755,23809],{"align":23808},[347,109757,109758],{"align":23808},"对应状态",[385,109760,109761,109774],{},[344,109762,109763,109768,109771],{},[390,109764,109765],{"align":23808},[73,109766,109767],{},"cart_x",[390,109769,109770],{"align":23808},"slide",[390,109772,109773],{"align":23808},"小车 x 位置",[344,109775,109776,109781,109783],{},[390,109777,109778],{"align":23808},[73,109779,109780],{},"pole_hinge",[390,109782,105881],{"align":23808},[390,109784,109785],{"align":23808},"杆子角度",[14,109787,109788],{},"所以：",[67,109790,109793],{"className":109791,"code":109792,"language":5259,"meta":58},[5257],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[73,109794,109792],{"__ignoreMap":58},[14,109796,109797],{},"把它们拼起来就是观测：",[67,109799,109802],{"className":109800,"code":109801,"language":5259,"meta":58},[5257],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[73,109803,109801],{"__ignoreMap":58},[169,109805,109807],{"id":109806},"action-是什么","action 是什么",[14,109809,109810],{},"本章只有一个 actuator：",[67,109812,109815],{"className":109813,"code":109814,"language":5259,"meta":58},[5257],"data.ctrl[0] = action\n",[73,109816,109814],{"__ignoreMap":58},[14,109818,109819],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[169,109821,109823],{"id":109822},"reward-是什么","reward 是什么",[14,109825,109826],{},"奖励函数：",[67,109828,109830],{"className":69,"code":109829,"language":71,"meta":58,"style":58},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[73,109831,109832],{"__ignoreMap":58},[76,109833,109834,109836,109839,109841,109843,109845,109848,109850,109853,109855,109857,109859,109862,109864],{"class":78,"line":79},[76,109835,17118],{"class":89},[76,109837,109838],{"class":250}," float",[76,109840,202],{"class":93},[76,109842,102444],{"class":250},[76,109844,52341],{"class":89},[76,109846,109847],{"class":250}," 0.1",[76,109849,6590],{"class":89},[76,109851,109852],{"class":93}," cart_x ",[76,109854,655],{"class":89},[76,109856,109852],{"class":93},[76,109858,112],{"class":89},[76,109860,109861],{"class":93}," pole_angle ",[76,109863,655],{"class":89},[76,109865,109866],{"class":93}," pole_angle)\n",[14,109868,106267],{},[152,109870,109871,109876,109879],{},[155,109872,109873,109874,28458],{},"基础奖励是 ",[73,109875,102444],{},[155,109877,109878],{},"小车离中心越远，扣分越多。",[155,109880,109881],{},"杆子角度越大，扣分越多。",[14,109883,109884],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[140,109886,101294],{"id":101293},[67,109888,109890],{"className":69,"code":109889,"language":71,"meta":58,"style":58},"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",[73,109891,109892,109898,109908,109912,109916,109924,109929,109933,109937,109941,109946,109950,109955,109960,109965,109969,109974,109979,109984,109988,109992,109996,110000,110004,110009,110013,110017,110021,110025,110029,110039,110046,110050,110054,110068,110082,110095,110125,110129,110133,110145,110157,110165,110169,110182,110186,110190,110199,110203,110219,110229,110242,110255,110259,110282,110300,110304,110316,110320,110324,110334,110344,110348,110364,110405,110409,110429,110445,110449,110453,110465],{"__ignoreMap":58},[76,109893,109894,109896],{"class":78,"line":79},[76,109895,90],{"class":89},[76,109897,101342],{"class":93},[76,109899,109900,109902,109904,109906],{"class":78,"line":86},[76,109901,90],{"class":89},[76,109903,31450],{"class":93},[76,109905,31453],{"class":89},[76,109907,31456],{"class":93},[76,109909,109910],{"class":78,"line":97},[76,109911,2472],{"emptyLinePlaceholder":125},[76,109913,109914],{"class":78,"line":103},[76,109915,2472],{"emptyLinePlaceholder":125},[76,109917,109918,109920,109922],{"class":78,"line":1273},[76,109919,101355],{"class":250},[76,109921,13636],{"class":89},[76,109923,101360],{"class":305},[76,109925,109926],{"class":78,"line":1287},[76,109927,109928],{"class":305},"\u003Cmujoco model=\"cartpole\">\n",[76,109930,109931],{"class":78,"line":1293},[76,109932,101370],{"class":305},[76,109934,109935],{"class":78,"line":1384},[76,109936,2472],{"emptyLinePlaceholder":125},[76,109938,109939],{"class":78,"line":1390},[76,109940,101379],{"class":305},[76,109942,109943],{"class":78,"line":1402},[76,109944,109945],{"class":305},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[76,109947,109948],{"class":78,"line":1684},[76,109949,2472],{"emptyLinePlaceholder":125},[76,109951,109952],{"class":78,"line":1689},[76,109953,109954],{"class":305},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[76,109956,109957],{"class":78,"line":1695},[76,109958,109959],{"class":305},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[76,109961,109962],{"class":78,"line":1700},[76,109963,109964],{"class":305},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[76,109966,109967],{"class":78,"line":1714},[76,109968,2472],{"emptyLinePlaceholder":125},[76,109970,109971],{"class":78,"line":1719},[76,109972,109973],{"class":305},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[76,109975,109976],{"class":78,"line":1725},[76,109977,109978],{"class":305},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[76,109980,109981],{"class":78,"line":1746},[76,109982,109983],{"class":305},"        \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",[76,109985,109986],{"class":78,"line":1751},[76,109987,106479],{"class":305},[76,109989,109990],{"class":78,"line":1765},[76,109991,101408],{"class":305},[76,109993,109994],{"class":78,"line":1770},[76,109995,101413],{"class":305},[76,109997,109998],{"class":78,"line":1799},[76,109999,2472],{"emptyLinePlaceholder":125},[76,110001,110002],{"class":78,"line":1804},[76,110003,106496],{"class":305},[76,110005,110006],{"class":78,"line":1821},[76,110007,110008],{"class":305},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[76,110010,110011],{"class":78,"line":1826},[76,110012,106506],{"class":305},[76,110014,110015],{"class":78,"line":1831},[76,110016,101418],{"class":305},[76,110018,110019],{"class":78,"line":1836},[76,110020,95767],{"class":305},[76,110022,110023],{"class":78,"line":1850},[76,110024,2472],{"emptyLinePlaceholder":125},[76,110026,110027],{"class":78,"line":1855},[76,110028,2472],{"emptyLinePlaceholder":125},[76,110030,110031,110033,110036],{"class":78,"line":2649},[76,110032,32017],{"class":89},[76,110034,110035],{"class":2035}," get_observation",[76,110037,110038],{"class":93},"(data: mujoco.MjData) -> np.ndarray:\n",[76,110040,110041,110043],{"class":78,"line":2663},[76,110042,4162],{"class":89},[76,110044,110045],{"class":93}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[76,110047,110048],{"class":78,"line":2671},[76,110049,2472],{"emptyLinePlaceholder":125},[76,110051,110052],{"class":78,"line":2676},[76,110053,2472],{"emptyLinePlaceholder":125},[76,110055,110056,110058,110061,110064,110066],{"class":78,"line":2682},[76,110057,32017],{"class":89},[76,110059,110060],{"class":2035}," compute_reward",[76,110062,110063],{"class":93},"(obs: np.ndarray) -> ",[76,110065,241],{"class":250},[76,110067,3811],{"class":93},[76,110069,110070,110073,110075,110078,110080],{"class":78,"line":2688},[76,110071,110072],{"class":93},"    cart_x ",[76,110074,247],{"class":89},[76,110076,110077],{"class":93}," obs[",[76,110079,392],{"class":250},[76,110081,33316],{"class":93},[76,110083,110084,110087,110089,110091,110093],{"class":78,"line":2693},[76,110085,110086],{"class":93},"    pole_angle ",[76,110088,247],{"class":89},[76,110090,110077],{"class":93},[76,110092,418],{"class":250},[76,110094,33316],{"class":93},[76,110096,110097,110099,110101,110103,110105,110107,110109,110111,110113,110115,110117,110119,110121,110123],{"class":78,"line":8020},[76,110098,4162],{"class":89},[76,110100,109838],{"class":250},[76,110102,202],{"class":93},[76,110104,102444],{"class":250},[76,110106,52341],{"class":89},[76,110108,109847],{"class":250},[76,110110,6590],{"class":89},[76,110112,109852],{"class":93},[76,110114,655],{"class":89},[76,110116,109852],{"class":93},[76,110118,112],{"class":89},[76,110120,109861],{"class":93},[76,110122,655],{"class":89},[76,110124,109866],{"class":93},[76,110126,110127],{"class":78,"line":8044},[76,110128,2472],{"emptyLinePlaceholder":125},[76,110130,110131],{"class":78,"line":8049},[76,110132,2472],{"emptyLinePlaceholder":125},[76,110134,110135,110137,110139,110141,110143],{"class":78,"line":8055},[76,110136,32017],{"class":89},[76,110138,2045],{"class":2035},[76,110140,101439],{"class":93},[76,110142,95755],{"class":250},[76,110144,3811],{"class":93},[76,110146,110147,110149,110151,110153,110155],{"class":78,"line":8082},[76,110148,101448],{"class":93},[76,110150,247],{"class":89},[76,110152,101453],{"class":93},[76,110154,101355],{"class":250},[76,110156,208],{"class":93},[76,110158,110159,110161,110163],{"class":78,"line":8087},[76,110160,101462],{"class":93},[76,110162,247],{"class":89},[76,110164,101467],{"class":93},[76,110166,110167],{"class":78,"line":8093},[76,110168,2472],{"emptyLinePlaceholder":125},[76,110170,110171,110173,110175,110177,110179],{"class":78,"line":8105},[76,110172,105110],{"class":93},[76,110174,418],{"class":250},[76,110176,4515],{"class":93},[76,110178,247],{"class":89},[76,110180,110181],{"class":250}," 0.1\n",[76,110183,110184],{"class":78,"line":8117},[76,110185,105123],{"class":93},[76,110187,110188],{"class":78,"line":8129},[76,110189,2472],{"emptyLinePlaceholder":125},[76,110191,110192,110195,110197],{"class":78,"line":9788},[76,110193,110194],{"class":93},"    total_reward ",[76,110196,247],{"class":89},[76,110198,104802],{"class":250},[76,110200,110201],{"class":78,"line":9813},[76,110202,2472],{"emptyLinePlaceholder":125},[76,110204,110205,110207,110209,110211,110213,110215,110217],{"class":78,"line":9836},[76,110206,3273],{"class":89},[76,110208,31686],{"class":93},[76,110210,26116],{"class":89},[76,110212,32513],{"class":250},[76,110214,202],{"class":93},[76,110216,6482],{"class":250},[76,110218,30856],{"class":93},[76,110220,110221,110224,110226],{"class":78,"line":9860},[76,110222,110223],{"class":93},"        obs ",[76,110225,247],{"class":89},[76,110227,110228],{"class":93}," get_observation(data)\n",[76,110230,110231,110234,110236,110238,110240],{"class":78,"line":9865},[76,110232,110233],{"class":93},"        pole_angle ",[76,110235,247],{"class":89},[76,110237,110077],{"class":93},[76,110239,418],{"class":250},[76,110241,33316],{"class":93},[76,110243,110244,110247,110249,110251,110253],{"class":78,"line":9870},[76,110245,110246],{"class":93},"        pole_angular_velocity ",[76,110248,247],{"class":89},[76,110250,110077],{"class":93},[76,110252,272],{"class":250},[76,110254,33316],{"class":93},[76,110256,110257],{"class":78,"line":9875},[76,110258,2472],{"emptyLinePlaceholder":125},[76,110260,110261,110264,110266,110269,110271,110273,110275,110277,110279],{"class":78,"line":9884},[76,110262,110263],{"class":93},"        action ",[76,110265,247],{"class":89},[76,110267,110268],{"class":250}," 2.0",[76,110270,6590],{"class":89},[76,110272,109861],{"class":93},[76,110274,681],{"class":89},[76,110276,61937],{"class":250},[76,110278,6590],{"class":89},[76,110280,110281],{"class":93}," pole_angular_velocity\n",[76,110283,110284,110286,110288,110290,110292,110294,110296,110298],{"class":78,"line":9889},[76,110285,110263],{"class":93},[76,110287,247],{"class":89},[76,110289,107488],{"class":93},[76,110291,112],{"class":89},[76,110293,102444],{"class":250},[76,110295,12507],{"class":93},[76,110297,102444],{"class":250},[76,110299,208],{"class":93},[76,110301,110302],{"class":78,"line":9895},[76,110303,2472],{"emptyLinePlaceholder":125},[76,110305,110306,110308,110310,110312,110314],{"class":78,"line":9916},[76,110307,106658],{"class":93},[76,110309,392],{"class":250},[76,110311,4515],{"class":93},[76,110313,247],{"class":89},[76,110315,107511],{"class":93},[76,110317,110318],{"class":78,"line":9922},[76,110319,101557],{"class":93},[76,110321,110322],{"class":78,"line":9936},[76,110323,2472],{"emptyLinePlaceholder":125},[76,110325,110326,110329,110331],{"class":78,"line":9942},[76,110327,110328],{"class":93},"        reward ",[76,110330,247],{"class":89},[76,110332,110333],{"class":93}," compute_reward(get_observation(data))\n",[76,110335,110336,110339,110341],{"class":78,"line":9969},[76,110337,110338],{"class":93},"        total_reward ",[76,110340,9549],{"class":89},[76,110342,110343],{"class":93}," reward\n",[76,110345,110346],{"class":78,"line":9978},[76,110347,2472],{"emptyLinePlaceholder":125},[76,110349,110350,110352,110354,110356,110358,110360,110362],{"class":78,"line":9984},[76,110351,2569],{"class":89},[76,110353,31686],{"class":93},[76,110355,106],{"class":89},[76,110357,5826],{"class":250},[76,110359,101600],{"class":89},[76,110361,4165],{"class":250},[76,110363,3811],{"class":93},[76,110365,110366,110368,110370,110373,110376,110379,110382,110384,110387,110390,110392,110394,110396,110398,110401,110403],{"class":78,"line":9992},[76,110367,34720],{"class":250},[76,110369,202],{"class":93},[76,110371,110372],{"class":305},"\"step:\"",[76,110374,110375],{"class":93},", step, ",[76,110377,110378],{"class":305},"\"obs:\"",[76,110380,110381],{"class":93},", np.round(obs, ",[76,110383,272],{"class":250},[76,110385,110386],{"class":93},"), ",[76,110388,110389],{"class":305},"\"action:\"",[76,110391,12507],{"class":93},[76,110393,32088],{"class":250},[76,110395,202],{"class":93},[76,110397,241],{"class":250},[76,110399,110400],{"class":93},"(action), ",[76,110402,272],{"class":250},[76,110404,30567],{"class":93},[76,110406,110407],{"class":78,"line":9997},[76,110408,2472],{"emptyLinePlaceholder":125},[76,110410,110411,110413,110415,110418,110420,110422,110425,110427],{"class":78,"line":16676},[76,110412,31369],{"class":250},[76,110414,202],{"class":93},[76,110416,110417],{"class":305},"\"total_reward:\"",[76,110419,12507],{"class":93},[76,110421,32088],{"class":250},[76,110423,110424],{"class":93},"(total_reward, ",[76,110426,272],{"class":250},[76,110428,30567],{"class":93},[76,110430,110431,110433,110435,110438,110441,110443],{"class":78,"line":16682},[76,110432,31369],{"class":250},[76,110434,202],{"class":93},[76,110436,110437],{"class":305},"\"final obs:\"",[76,110439,110440],{"class":93},", np.round(get_observation(data), ",[76,110442,272],{"class":250},[76,110444,30567],{"class":93},[76,110446,110447],{"class":78,"line":16705},[76,110448,2472],{"emptyLinePlaceholder":125},[76,110450,110451],{"class":78,"line":16711},[76,110452,2472],{"emptyLinePlaceholder":125},[76,110454,110455,110457,110459,110461,110463],{"class":78,"line":16734},[76,110456,1603],{"class":89},[76,110458,31290],{"class":250},[76,110460,101600],{"class":89},[76,110462,101603],{"class":305},[76,110464,3811],{"class":93},[76,110466,110467],{"class":78,"line":16748},[76,110468,101610],{"class":93},[14,110470,103611],{},[67,110472,110474],{"className":23894,"code":110473,"language":23896,"meta":58,"style":58},"touch ch6_cartpole.py\n",[73,110475,110476],{"__ignoreMap":58},[76,110477,110478,110480],{"class":78,"line":79},[76,110479,101324],{"class":2035},[76,110481,110482],{"class":305}," ch6_cartpole.py\n",[14,110484,110485],{},"运行：",[67,110487,110489],{"className":23894,"code":110488,"language":23896,"meta":58,"style":58},"python ch6_cartpole.py\n",[73,110490,110491],{"__ignoreMap":58},[76,110492,110493,110495],{"class":78,"line":79},[76,110494,71],{"class":2035},[76,110496,110482],{"class":305},[169,110498,101613],{"id":101613},[14,110500,110501],{},"构造观测：",[67,110503,110505],{"className":69,"code":110504,"language":71,"meta":58,"style":58},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[73,110506,110507,110515],{"__ignoreMap":58},[76,110508,110509,110511,110513],{"class":78,"line":79},[76,110510,32017],{"class":89},[76,110512,110035],{"class":2035},[76,110514,110038],{"class":93},[76,110516,110517,110519],{"class":78,"line":86},[76,110518,4162],{"class":89},[76,110520,110045],{"class":93},[14,110522,110523,110526,110527,110529,110530,110532],{},[73,110524,110525],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[73,110528,104071],{}," 2 维，",[73,110531,104401],{}," 2 维，所以 obs 是 4 维。",[14,110534,110535],{},"设置初始角度：",[67,110537,110539],{"className":69,"code":110538,"language":71,"meta":58,"style":58},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[73,110540,110541,110553],{"__ignoreMap":58},[76,110542,110543,110545,110547,110549,110551],{"class":78,"line":79},[76,110544,104740],{"class":93},[76,110546,418],{"class":250},[76,110548,4515],{"class":93},[76,110550,247],{"class":89},[76,110552,110181],{"class":250},[76,110554,110555],{"class":78,"line":86},[76,110556,104584],{"class":93},[14,110558,110559],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110561,110562],{},"简单反馈控制：",[67,110564,110566],{"className":69,"code":110565,"language":71,"meta":58,"style":58},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[73,110567,110568,110588],{"__ignoreMap":58},[76,110569,110570,110572,110574,110576,110578,110580,110582,110584,110586],{"class":78,"line":79},[76,110571,107483],{"class":93},[76,110573,247],{"class":89},[76,110575,110268],{"class":250},[76,110577,6590],{"class":89},[76,110579,109861],{"class":93},[76,110581,681],{"class":89},[76,110583,61937],{"class":250},[76,110585,6590],{"class":89},[76,110587,110281],{"class":93},[76,110589,110590,110592,110594,110596,110598,110600,110602,110604],{"class":78,"line":86},[76,110591,107483],{"class":93},[76,110593,247],{"class":89},[76,110595,107488],{"class":93},[76,110597,112],{"class":89},[76,110599,102444],{"class":250},[76,110601,12507],{"class":93},[76,110603,102444],{"class":250},[76,110605,208],{"class":93},[14,110607,110608],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110610,110611],{},"限制动作：",[67,110613,110615],{"className":69,"code":110614,"language":71,"meta":58,"style":58},"np.clip(action, -1.0, 1.0)\n",[73,110616,110617],{"__ignoreMap":58},[76,110618,110619,110622,110624,110626,110628,110630],{"class":78,"line":79},[76,110620,110621],{"class":93},"np.clip(action, ",[76,110623,112],{"class":89},[76,110625,102444],{"class":250},[76,110627,12507],{"class":93},[76,110629,102444],{"class":250},[76,110631,208],{"class":93},[14,110633,110634,110635,110638],{},"因为 XML 里 ",[73,110636,110637],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[169,110640,101749],{"id":101749},[67,110642,110643],{"className":69,"code":110504,"language":71,"meta":58,"style":58},[73,110644,110645,110653],{"__ignoreMap":58},[76,110646,110647,110649,110651],{"class":78,"line":79},[76,110648,32017],{"class":89},[76,110650,110035],{"class":2035},[76,110652,110038],{"class":93},[76,110654,110655,110657],{"class":78,"line":86},[76,110656,4162],{"class":89},[76,110658,110045],{"class":93},[14,110660,110661,110662,110665,110666,110669,110670,110673],{},"这段定义了一个函数，用来获取当前观测。",[73,110663,110664],{},"data.qpos.copy()"," 是位置数组副本，",[73,110667,110668],{},"data.qvel.copy()"," 是速度数组副本。",[73,110671,110672],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110675,110676],{},"在本章模型里：",[67,110678,110681],{"className":110679,"code":110680,"language":5259,"meta":58},[5257],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[73,110682,110680],{"__ignoreMap":58},[14,110684,110685],{},"所以返回的 obs 是：",[67,110687,110690],{"className":110688,"code":110689,"language":5259,"meta":58},[5257],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[73,110691,110689],{"__ignoreMap":58},[67,110693,110695],{"className":69,"code":110694,"language":71,"meta":58,"style":58},"def compute_reward(obs: np.ndarray) -> float:\n",[73,110696,110697],{"__ignoreMap":58},[76,110698,110699,110701,110703,110705,110707],{"class":78,"line":79},[76,110700,32017],{"class":89},[76,110702,110060],{"class":2035},[76,110704,110063],{"class":93},[76,110706,241],{"class":250},[76,110708,3811],{"class":93},[14,110710,110711,110712,110715],{},"这行定义奖励函数。输入是观测 ",[73,110713,110714],{},"obs","，输出是一个浮点数奖励。",[67,110717,110719],{"className":69,"code":110718,"language":71,"meta":58,"style":58},"cart_x = obs[0]\npole_angle = obs[1]\n",[73,110720,110721,110734],{"__ignoreMap":58},[76,110722,110723,110726,110728,110730,110732],{"class":78,"line":79},[76,110724,110725],{"class":93},"cart_x ",[76,110727,247],{"class":89},[76,110729,110077],{"class":93},[76,110731,392],{"class":250},[76,110733,33316],{"class":93},[76,110735,110736,110739,110741,110743,110745],{"class":78,"line":86},[76,110737,110738],{"class":93},"pole_angle ",[76,110740,247],{"class":89},[76,110742,110077],{"class":93},[76,110744,418],{"class":250},[76,110746,33316],{"class":93},[14,110748,110749,110750,110753,110754,110757],{},"数组索引从 0 开始。",[73,110751,110752],{},"obs[0]"," 是第一个元素，也就是小车位置。",[73,110755,110756],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[67,110759,110760],{"className":69,"code":109829,"language":71,"meta":58,"style":58},[73,110761,110762],{"__ignoreMap":58},[76,110763,110764,110766,110768,110770,110772,110774,110776,110778,110780,110782,110784,110786,110788,110790],{"class":78,"line":79},[76,110765,17118],{"class":89},[76,110767,109838],{"class":250},[76,110769,202],{"class":93},[76,110771,102444],{"class":250},[76,110773,52341],{"class":89},[76,110775,109847],{"class":250},[76,110777,6590],{"class":89},[76,110779,109852],{"class":93},[76,110781,655],{"class":89},[76,110783,109852],{"class":93},[76,110785,112],{"class":89},[76,110787,109861],{"class":93},[76,110789,655],{"class":89},[76,110791,109866],{"class":93},[14,110793,110794,110795,110798,110799,110802],{},"这行计算奖励。",[73,110796,110797],{},"cart_x * cart_x"," 是小车位置的平方，",[73,110800,110801],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[67,110804,110806],{"className":69,"code":110805,"language":71,"meta":58,"style":58},"data.qpos[1] = 0.1\n",[73,110807,110808],{"__ignoreMap":58},[76,110809,110810,110812,110814,110816,110818],{"class":78,"line":79},[76,110811,104740],{"class":93},[76,110813,418],{"class":250},[76,110815,4515],{"class":93},[76,110817,247],{"class":89},[76,110819,110181],{"class":250},[14,110821,110822,110823,110825,110826,110828],{},"手动设置杆子的初始角度。因为 ",[73,110824,105497],{}," 是小车位置，",[73,110827,105500],{}," 是杆子角度，所以这里改的是杆子。",[67,110830,110831],{"className":69,"code":104584,"language":71,"meta":58,"style":58},[73,110832,110833],{"__ignoreMap":58},[76,110834,110835],{"class":78,"line":79},[76,110836,104584],{"class":93},[14,110838,105543,110839,110841],{},[73,110840,104071],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[67,110843,110845],{"className":69,"code":110844,"language":71,"meta":58,"style":58},"total_reward = 0.0\n",[73,110846,110847],{"__ignoreMap":58},[76,110848,110849,110852,110854],{"class":78,"line":79},[76,110850,110851],{"class":93},"total_reward ",[76,110853,247],{"class":89},[76,110855,104802],{"class":250},[14,110857,110858],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[67,110860,110862],{"className":69,"code":110861,"language":71,"meta":58,"style":58},"for step in range(1000):\n",[73,110863,110864],{"__ignoreMap":58},[76,110865,110866,110868,110870,110872,110874,110876,110878],{"class":78,"line":79},[76,110867,3097],{"class":89},[76,110869,31686],{"class":93},[76,110871,26116],{"class":89},[76,110873,32513],{"class":250},[76,110875,202],{"class":93},[76,110877,6482],{"class":250},[76,110879,30856],{"class":93},[14,110881,110882,110883,110885],{},"循环 1000 步。",[73,110884,107175],{}," 是当前步数，从 0 到 999。",[67,110887,110889],{"className":69,"code":110888,"language":71,"meta":58,"style":58},"obs = get_observation(data)\n",[73,110890,110891],{"__ignoreMap":58},[76,110892,110893,110896,110898],{"class":78,"line":79},[76,110894,110895],{"class":93},"obs ",[76,110897,247],{"class":89},[76,110899,110228],{"class":93},[14,110901,110902,110903,28458],{},"读取当前状态，保存到 ",[73,110904,110714],{},[67,110906,110908],{"className":69,"code":110907,"language":71,"meta":58,"style":58},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[73,110909,110910,110922],{"__ignoreMap":58},[76,110911,110912,110914,110916,110918,110920],{"class":78,"line":79},[76,110913,110738],{"class":93},[76,110915,247],{"class":89},[76,110917,110077],{"class":93},[76,110919,418],{"class":250},[76,110921,33316],{"class":93},[76,110923,110924,110927,110929,110931,110933],{"class":78,"line":86},[76,110925,110926],{"class":93},"pole_angular_velocity ",[76,110928,247],{"class":89},[76,110930,110077],{"class":93},[76,110932,272],{"class":250},[76,110934,33316],{"class":93},[14,110936,110937,110938,110941,110942,28458],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[73,110939,110940],{},"obs[3]","？因为 obs 的顺序是 ",[73,110943,110944],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[67,110946,110948],{"className":69,"code":110947,"language":71,"meta":58,"style":58},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[73,110949,110950],{"__ignoreMap":58},[76,110951,110952,110954,110956,110958,110960,110962,110964,110966,110968],{"class":78,"line":79},[76,110953,107483],{"class":93},[76,110955,247],{"class":89},[76,110957,110268],{"class":250},[76,110959,6590],{"class":89},[76,110961,109861],{"class":93},[76,110963,681],{"class":89},[76,110965,61937],{"class":250},[76,110967,6590],{"class":89},[76,110969,110281],{"class":93},[14,110971,110972,110973,101059,110975,110977],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[73,110974,105301],{},[73,110976,35399],{}," 是人为设置的系数，不是固定公式。",[67,110979,110981],{"className":69,"code":110980,"language":71,"meta":58,"style":58},"action = np.clip(action, -1.0, 1.0)\n",[73,110982,110983],{"__ignoreMap":58},[76,110984,110985,110987,110989,110991,110993,110995,110997,110999],{"class":78,"line":79},[76,110986,107483],{"class":93},[76,110988,247],{"class":89},[76,110990,107488],{"class":93},[76,110992,112],{"class":89},[76,110994,102444],{"class":250},[76,110996,12507],{"class":93},[76,110998,102444],{"class":250},[76,111000,208],{"class":93},[14,111002,111003],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[67,111005,111006],{"className":69,"code":109814,"language":71,"meta":58,"style":58},[73,111007,111008],{"__ignoreMap":58},[76,111009,111010,111012,111014,111016,111018],{"class":78,"line":79},[76,111011,105912],{"class":93},[76,111013,392],{"class":250},[76,111015,4515],{"class":93},[76,111017,247],{"class":89},[76,111019,107511],{"class":93},[14,111021,111022],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[67,111024,111025],{"className":69,"code":104546,"language":71,"meta":58,"style":58},[73,111026,111027],{"__ignoreMap":58},[76,111028,111029],{"class":78,"line":79},[76,111030,104546],{"class":93},[14,111032,111033,111034,111036],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[73,111035,106167],{}," 计算小车和杆子的下一刻状态。",[67,111038,111040],{"className":69,"code":111039,"language":71,"meta":58,"style":58},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[73,111041,111042,111051],{"__ignoreMap":58},[76,111043,111044,111047,111049],{"class":78,"line":79},[76,111045,111046],{"class":93},"reward ",[76,111048,247],{"class":89},[76,111050,110333],{"class":93},[76,111052,111053,111055,111057],{"class":78,"line":86},[76,111054,110851],{"class":93},[76,111056,9549],{"class":89},[76,111058,110343],{"class":93},[14,111060,111061,111062,111064,111065,111068,111069,28458],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[73,111063,9549],{}," 是简写，",[73,111066,111067],{},"total_reward += reward"," 等价于 ",[73,111070,111071],{},"total_reward = total_reward + reward",[67,111073,111075],{"className":69,"code":111074,"language":71,"meta":58,"style":58},"if step % 100 == 0:\n",[73,111076,111077],{"__ignoreMap":58},[76,111078,111079,111081,111083,111085,111087,111089,111091],{"class":78,"line":79},[76,111080,1603],{"class":89},[76,111082,31686],{"class":93},[76,111084,106],{"class":89},[76,111086,5826],{"class":250},[76,111088,101600],{"class":89},[76,111090,4165],{"class":250},[76,111092,3811],{"class":93},[14,111094,111095,111097,111098,111101],{},[73,111096,106],{}," 是取余数。",[73,111099,111100],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[67,111103,111105],{"className":69,"code":111104,"language":71,"meta":58,"style":58},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[73,111106,111107],{"__ignoreMap":58},[76,111108,111109,111111,111113,111115,111117,111119,111121,111123,111125,111127,111129,111131,111133,111135,111137,111139],{"class":78,"line":79},[76,111110,30485],{"class":250},[76,111112,202],{"class":93},[76,111114,110372],{"class":305},[76,111116,110375],{"class":93},[76,111118,110378],{"class":305},[76,111120,110381],{"class":93},[76,111122,272],{"class":250},[76,111124,110386],{"class":93},[76,111126,110389],{"class":305},[76,111128,12507],{"class":93},[76,111130,32088],{"class":250},[76,111132,202],{"class":93},[76,111134,241],{"class":250},[76,111136,110400],{"class":93},[76,111138,272],{"class":250},[76,111140,30567],{"class":93},[14,111142,111143,111144,111147,111148,111151],{},"打印当前步数、观测和动作。",[73,111145,111146],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[73,111149,111150],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[140,111153,102357],{"id":102356},[14,111155,111156],{},"观测向量:",[67,111158,111161],{"className":111159,"code":111160,"language":5259,"meta":58},[5257],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[73,111162,111160],{"__ignoreMap":58},[14,111164,111165],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111167,111168],{},"每隔 100 步会打印一次：",[67,111170,111173],{"className":111171,"code":111172,"language":5259,"meta":58},[5257],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[73,111174,111172],{"__ignoreMap":58},[14,111176,111177],{},"重点观察：",[152,111179,111180,111186,111191],{},[155,111181,111182,111185],{},[73,111183,111184],{},"pole_angle"," 是否越来越大。",[155,111187,111188,111190],{},[73,111189,109767],{}," 是否跑得太远。",[155,111192,111193,111194,82609,111196,28458],{},"action 是否经常被 clip 到 ",[73,111195,103956],{},[73,111197,418],{},[14,111199,111200],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[140,111202,102389],{"id":102388},[152,111204,111205,111211,111214,111220,111230,111236,111239],{},[155,111206,111207,111208,28458],{},"把初始角度改为 ",[73,111209,111210],{},"data.qpos[1] = 0.3",[155,111212,111213],{},"重新运行，观察控制是否变差。",[155,111215,111216,111217,111219],{},"把 actuator ",[73,111218,107108],{}," 改小。",[155,111221,111222,111223,111226,111227,28458],{},"打印 ",[73,111224,111225],{},"model.nq, model.nv, model.nu","，应为 ",[73,111228,111229],{},"2 2 1",[155,111231,111232,111233,111235],{},"把 reward 里的 ",[73,111234,110801],{}," 系数改大，观察总奖励变化。",[155,111237,111238],{},"把控制器改成反号，观察杆子是否更容易倒。",[155,111240,111241],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[140,111243,102494],{"id":102493},[169,111245,111246],{"id":111246},"杆子方向和预期不一致",[14,111248,102437,111249,111251,111252,111254],{},[73,111250,106280],{}," 和 capsule 的 ",[73,111253,103217],{},"，必要时用 viewer 可视化确认。",[169,111256,111257],{"id":111257},"控制器越控越倒",[14,111259,111260],{},"说明反馈符号可能反了，尝试:",[67,111262,111264],{"className":69,"code":111263,"language":71,"meta":58,"style":58},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[73,111265,111266],{"__ignoreMap":58},[76,111267,111268,111270,111272,111274,111276,111278,111280,111282,111284,111286],{"class":78,"line":79},[76,111269,107483],{"class":93},[76,111271,247],{"class":89},[76,111273,52341],{"class":89},[76,111275,105301],{"class":250},[76,111277,6590],{"class":89},[76,111279,109861],{"class":93},[76,111281,112],{"class":89},[76,111283,61937],{"class":250},[76,111285,6590],{"class":89},[76,111287,110281],{"class":93},[169,111289,111290],{"id":111290},"小车飞走",[14,111292,111293,111294,111296,111297,111300],{},"降低 ",[73,111295,107108],{}," 或缩小 ",[73,111298,111299],{},"action"," 的 clip 范围。",[169,111302,111304,111306],{"id":111303},"obs3-为什么是杆子角速度",[73,111305,110940],{}," 为什么是杆子角速度",[14,111308,111309],{},"因为这个模型里：",[67,111311,111314],{"className":111312,"code":111313,"language":5259,"meta":58},[5257],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[73,111315,111313],{"__ignoreMap":58},[14,111317,109788],{},[67,111319,111322],{"className":111320,"code":111321,"language":5259,"meta":58},[5257],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[73,111323,111321],{"__ignoreMap":58},[169,111325,111327],{"id":111326},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111329,111330],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[140,111332,102648],{"id":102647},[14,111334,111335],{},"一个控制任务通常包含：",[152,111337,111338,111341,111349,111354,111357],{},[155,111339,111340],{},"模型：Cartpole 的 body、joint、actuator。",[155,111342,111343,111344,413,111346,111348],{},"观测：从 ",[73,111345,104071],{},[73,111347,104401],{}," 里取状态。",[155,111350,111351,111352,28458],{},"动作：写入 ",[73,111353,101117],{},[155,111355,111356],{},"奖励：根据任务目标打分。",[155,111358,111359],{},"循环：obs -> action -> step -> reward。",[14,111361,111362],{},"这就是后面 Gymnasium 环境的基本骨架。",[117,111364,104327],{},{"title":58,"searchDepth":86,"depth":86,"links":111366},[111367,111368,111369,111374,111378,111379,111380,111388],{"id":100687,"depth":86,"text":100688},{"id":100810,"depth":86,"text":100811},{"id":101085,"depth":86,"text":101086,"children":111370},[111371,111372,111373],{"id":109741,"depth":97,"text":109742},{"id":109806,"depth":97,"text":109807},{"id":109822,"depth":97,"text":109823},{"id":101293,"depth":86,"text":101294,"children":111375},[111376,111377],{"id":101613,"depth":97,"text":101613},{"id":101749,"depth":97,"text":101749},{"id":102356,"depth":86,"text":102357},{"id":102388,"depth":86,"text":102389},{"id":102493,"depth":86,"text":102494,"children":111381},[111382,111383,111384,111385,111387],{"id":111246,"depth":97,"text":111246},{"id":111257,"depth":97,"text":111257},{"id":111290,"depth":97,"text":111290},{"id":111303,"depth":97,"text":111386},"obs[3] 为什么是杆子角速度",{"id":111326,"depth":97,"text":111327},{"id":102647,"depth":86,"text":102648},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109477,"description":58},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111395,"title":111396,"body":111397,"description":58,"extension":123,"meta":113411,"navigation":125,"path":113412,"seo":113413,"stem":113414,"__hash__":113415},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111398,"toc":113387},[111399,111402,111404,111407,111409,111426,111429,111432,111438,111441,111443,111445,111469,111471,111485,111487,111528,111530,111548,111550,111553,111559,111562,111590,111594,111600,111625,111628,111659,111666,111669,111672,111678,111681,111687,111690,111696,111700,111703,111728,111731,111733,112493,112495,112507,112509,112520,112522,112525,112542,112545,112547,112558,112561,112563,112609,112612,112625,112628,112710,112713,112715,112731,112741,112754,112757,112796,112806,112817,112827,112840,112843,112872,112875,112885,112888,112894,112911,112922,112924,112930,112947,112958,112979,112982,112994,112997,113018,113021,113029,113037,113054,113057,113126,113133,113141,113144,113157,113164,113166,113169,113175,113178,113181,113187,113193,113195,113235,113237,113243,113252,113255,113257,113277,113280,113283,113289,113293,113295,113322,113325,113328,113355,113361,113364,113367,113369,113372,113375,113381,113384],[10,111400,111396],{"id":111401},"_7控制任务reacher-机械臂到达目标",[140,111403,100688],{"id":100687},[14,111405,111406],{},"本章搭建一个二维两关节 reacher 任务。",[14,111408,104372],{},[152,111410,111411,111414,111417,111420,111423],{},[155,111412,111413],{},"两个 hinge joint",[155,111415,111416],{},"两个 motor actuator",[155,111418,111419],{},"site 作为末端点和目标点",[155,111421,111422],{},"根据末端和目标距离设计 reward",[155,111424,111425],{},"构造机械臂任务的基本形式",[14,111427,111428],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111430,111431],{},"Reacher 任务可以理解为：",[67,111433,111436],{"className":111434,"code":111435,"language":5259,"meta":58},[5257],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[73,111437,111435],{"__ignoreMap":58},[14,111439,111440],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[140,111442,100811],{"id":100810},[14,111444,100814],{},[67,111446,111447],{"className":23894,"code":104429,"language":23896,"meta":58,"style":58},[73,111448,111449],{"__ignoreMap":58},[76,111450,111451,111453,111455,111457,111459,111461,111463,111465,111467],{"class":78,"line":79},[76,111452,24649],{"class":2035},[76,111454,26388],{"class":305},[76,111456,23906],{"class":305},[76,111458,26473],{"class":250},[76,111460,104444],{"class":305},[76,111462,100839],{"class":305},[76,111464,102542],{"class":305},[76,111466,100855],{"class":305},[76,111468,104453],{"class":305},[14,111470,102860],{},[67,111472,111473],{"className":23894,"code":100960,"language":23896,"meta":58,"style":58},[73,111474,111475],{"__ignoreMap":58},[76,111476,111477,111479,111481,111483],{"class":78,"line":79},[76,111478,23903],{"class":2035},[76,111480,23906],{"class":305},[76,111482,100971],{"class":305},[76,111484,100974],{"class":305},[14,111486,102877],{},[67,111488,111490],{"className":23894,"code":111489,"language":23896,"meta":58,"style":58},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[73,111491,111492,111509,111518],{"__ignoreMap":58},[76,111493,111494,111496,111498,111500,111503,111505,111507],{"class":78,"line":79},[76,111495,30403],{"class":2035},[76,111497,29249],{"class":305},[76,111499,25188],{"class":250},[76,111501,111502],{"class":305}," mujoco-reacher",[76,111504,101016],{"class":305},[76,111506,101019],{"class":250},[76,111508,101022],{"class":250},[76,111510,111511,111513,111515],{"class":78,"line":86},[76,111512,30403],{"class":2035},[76,111514,101029],{"class":305},[76,111516,111517],{"class":305}," mujoco-reacher\n",[76,111519,111520,111522,111524,111526],{"class":78,"line":97},[76,111521,23903],{"class":2035},[76,111523,23906],{"class":305},[76,111525,100971],{"class":305},[76,111527,100974],{"class":305},[14,111529,101045],{},[152,111531,111532,111535,111538],{},[155,111533,111534],{},"本章使用低维状态，不使用图像输入。",[155,111536,111537],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[155,111539,111540,111541,413,111543,413,111545,111547],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[73,111542,104071],{},[73,111544,104401],{},[73,111546,103721],{}," 的方法一致。",[140,111549,101086],{"id":101085},[14,111551,111552],{},"Reacher 任务核心:",[67,111554,111557],{"className":111555,"code":111556,"language":5259,"meta":58},[5257],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[73,111558,111556],{"__ignoreMap":58},[14,111560,111561],{},"读取 site 世界坐标:",[67,111563,111565],{"className":69,"code":111564,"language":71,"meta":58,"style":58},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[73,111566,111567,111580],{"__ignoreMap":58},[76,111568,111569,111571,111573,111575,111578],{"class":78,"line":79},[76,111570,103675],{"class":93},[76,111572,247],{"class":89},[76,111574,103446],{"class":93},[76,111576,111577],{"class":305},"\"tip\"",[76,111579,208],{"class":93},[76,111581,111582,111585,111587],{"class":78,"line":86},[76,111583,111584],{"class":93},"tip_pos ",[76,111586,247],{"class":89},[76,111588,111589],{"class":93}," data.site_xpos[site_id]\n",[169,111591,111593],{"id":111592},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111595,111596,111597,111599],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[73,111598,104071],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[67,111601,111603],{"className":69,"code":111602,"language":71,"meta":58,"style":58},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[73,111604,111605,111615],{"__ignoreMap":58},[76,111606,111607,111610,111612],{"class":78,"line":79},[76,111608,111609],{"class":93},"tip ",[76,111611,247],{"class":89},[76,111613,111614],{"class":93}," data.site_xpos[tip_site_id]\n",[76,111616,111617,111620,111622],{"class":78,"line":86},[76,111618,111619],{"class":93},"target ",[76,111621,247],{"class":89},[76,111623,111624],{"class":93}," data.site_xpos[target_site_id]\n",[14,111626,111627],{},"这样 reward 就很容易写：",[67,111629,111631],{"className":69,"code":111630,"language":71,"meta":58,"style":58},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[73,111632,111633,111648],{"__ignoreMap":58},[76,111634,111635,111638,111640,111643,111645],{"class":78,"line":79},[76,111636,111637],{"class":93},"dist ",[76,111639,247],{"class":89},[76,111641,111642],{"class":93}," np.linalg.norm(tip ",[76,111644,112],{"class":89},[76,111646,111647],{"class":93}," target)\n",[76,111649,111650,111652,111654,111656],{"class":78,"line":86},[76,111651,111046],{"class":93},[76,111653,247],{"class":89},[76,111655,52341],{"class":89},[76,111657,111658],{"class":93},"dist\n",[14,111660,111661,111662,111665],{},"距离越小，",[73,111663,111664],{},"-dist"," 越接近 0，奖励越高。",[169,111667,111668],{"id":111668},"两关节机械臂的状态",[14,111670,111671],{},"这个模型有两个 hinge joint：",[67,111673,111676],{"className":111674,"code":111675,"language":5259,"meta":58},[5257],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[73,111677,111675],{"__ignoreMap":58},[14,111679,111680],{},"再加上末端和目标位置：",[67,111682,111685],{"className":111683,"code":111684,"language":5259,"meta":58},[5257],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[73,111686,111684],{"__ignoreMap":58},[14,111688,111689],{},"总维度：",[67,111691,111694],{"className":111692,"code":111693,"language":5259,"meta":58},[5257],"2 + 2 + 3 + 3 = 10\n",[73,111695,111693],{"__ignoreMap":58},[169,111697,111699],{"id":111698},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111701,111702],{},"本章把重力设为：",[67,111704,111706],{"className":53137,"code":111705,"language":53139,"meta":58,"style":58},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[73,111707,111708],{"__ignoreMap":58},[76,111709,111710,111712,111714,111716,111718,111720,111722,111724,111726],{"class":78,"line":79},[76,111711,1109],{"class":93},[76,111713,69236],{"class":51370},[76,111715,101235],{"class":2035},[76,111717,247],{"class":93},[76,111719,101240],{"class":305},[76,111721,101243],{"class":2035},[76,111723,247],{"class":93},[76,111725,103812],{"class":305},[76,111727,101185],{"class":93},[14,111729,111730],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[140,111732,101294],{"id":101293},[67,111734,111736],{"className":69,"code":111735,"language":71,"meta":58,"style":58},"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",[73,111737,111738,111744,111754,111758,111762,111770,111775,111780,111784,111788,111793,111798,111802,111807,111812,111817,111821,111826,111831,111836,111841,111845,111849,111853,111857,111861,111866,111871,111875,111879,111883,111887,111891,111906,111915,111927,111950,111957,111961,111965,111975,111989,112003,112010,112014,112018,112032,112044,112056,112069,112084,112101,112105,112109,112121,112133,112141,112149,112153,112169,112174,112187,112200,112215,112219,112254,112286,112290,112294,112303,112307,112323,112333,112344,112360,112376,112392,112408,112412,112430,112450,112469,112473,112477,112489],{"__ignoreMap":58},[76,111739,111740,111742],{"class":78,"line":79},[76,111741,90],{"class":89},[76,111743,101342],{"class":93},[76,111745,111746,111748,111750,111752],{"class":78,"line":86},[76,111747,90],{"class":89},[76,111749,31450],{"class":93},[76,111751,31453],{"class":89},[76,111753,31456],{"class":93},[76,111755,111756],{"class":78,"line":97},[76,111757,2472],{"emptyLinePlaceholder":125},[76,111759,111760],{"class":78,"line":103},[76,111761,2472],{"emptyLinePlaceholder":125},[76,111763,111764,111766,111768],{"class":78,"line":1273},[76,111765,101355],{"class":250},[76,111767,13636],{"class":89},[76,111769,101360],{"class":305},[76,111771,111772],{"class":78,"line":1287},[76,111773,111774],{"class":305},"\u003Cmujoco model=\"two_link_reacher\">\n",[76,111776,111777],{"class":78,"line":1293},[76,111778,111779],{"class":305},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[76,111781,111782],{"class":78,"line":1384},[76,111783,2472],{"emptyLinePlaceholder":125},[76,111785,111786],{"class":78,"line":1390},[76,111787,101379],{"class":305},[76,111789,111790],{"class":78,"line":1402},[76,111791,111792],{"class":305},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[76,111794,111795],{"class":78,"line":1684},[76,111796,111797],{"class":305},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[76,111799,111800],{"class":78,"line":1689},[76,111801,2472],{"emptyLinePlaceholder":125},[76,111803,111804],{"class":78,"line":1695},[76,111805,111806],{"class":305},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[76,111808,111809],{"class":78,"line":1700},[76,111810,111811],{"class":305},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[76,111813,111814],{"class":78,"line":1714},[76,111815,111816],{"class":305},"      \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",[76,111818,111819],{"class":78,"line":1719},[76,111820,2472],{"emptyLinePlaceholder":125},[76,111822,111823],{"class":78,"line":1725},[76,111824,111825],{"class":305},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[76,111827,111828],{"class":78,"line":1746},[76,111829,111830],{"class":305},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[76,111832,111833],{"class":78,"line":1751},[76,111834,111835],{"class":305},"        \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",[76,111837,111838],{"class":78,"line":1765},[76,111839,111840],{"class":305},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[76,111842,111843],{"class":78,"line":1770},[76,111844,106479],{"class":305},[76,111846,111847],{"class":78,"line":1799},[76,111848,101408],{"class":305},[76,111850,111851],{"class":78,"line":1804},[76,111852,101413],{"class":305},[76,111854,111855],{"class":78,"line":1821},[76,111856,2472],{"emptyLinePlaceholder":125},[76,111858,111859],{"class":78,"line":1826},[76,111860,106496],{"class":305},[76,111862,111863],{"class":78,"line":1831},[76,111864,111865],{"class":305},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[76,111867,111868],{"class":78,"line":1836},[76,111869,111870],{"class":305},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[76,111872,111873],{"class":78,"line":1850},[76,111874,106506],{"class":305},[76,111876,111877],{"class":78,"line":1855},[76,111878,101418],{"class":305},[76,111880,111881],{"class":78,"line":2649},[76,111882,95767],{"class":305},[76,111884,111885],{"class":78,"line":2663},[76,111886,2472],{"emptyLinePlaceholder":125},[76,111888,111889],{"class":78,"line":2671},[76,111890,2472],{"emptyLinePlaceholder":125},[76,111892,111893,111895,111898,111901,111903],{"class":78,"line":2676},[76,111894,32017],{"class":89},[76,111896,111897],{"class":2035}," site_position",[76,111899,111900],{"class":93},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[76,111902,1372],{"class":250},[76,111904,111905],{"class":93},") -> np.ndarray:\n",[76,111907,111908,111910,111912],{"class":78,"line":2682},[76,111909,103441],{"class":93},[76,111911,247],{"class":89},[76,111913,111914],{"class":93}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[76,111916,111917,111919,111921,111923,111925],{"class":78,"line":2688},[76,111918,3173],{"class":89},[76,111920,103490],{"class":93},[76,111922,1109],{"class":89},[76,111924,4165],{"class":250},[76,111926,3811],{"class":93},[76,111928,111929,111931,111933,111935,111937,111940,111942,111944,111946,111948],{"class":78,"line":2693},[76,111930,103473],{"class":89},[76,111932,103476],{"class":250},[76,111934,202],{"class":93},[76,111936,254],{"class":89},[76,111938,111939],{"class":305},"\"site not found: ",[76,111941,1095],{"class":250},[76,111943,79880],{"class":93},[76,111945,1145],{"class":250},[76,111947,452],{"class":305},[76,111949,208],{"class":93},[76,111951,111952,111954],{"class":78,"line":8020},[76,111953,4162],{"class":89},[76,111955,111956],{"class":93}," data.site_xpos[site_id].copy()\n",[76,111958,111959],{"class":78,"line":8044},[76,111960,2472],{"emptyLinePlaceholder":125},[76,111962,111963],{"class":78,"line":8049},[76,111964,2472],{"emptyLinePlaceholder":125},[76,111966,111967,111969,111972],{"class":78,"line":8055},[76,111968,32017],{"class":89},[76,111970,111971],{"class":2035}," get_obs",[76,111973,111974],{"class":93},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[76,111976,111977,111980,111982,111985,111987],{"class":78,"line":8082},[76,111978,111979],{"class":93},"    tip ",[76,111981,247],{"class":89},[76,111983,111984],{"class":93}," site_position(model, data, ",[76,111986,111577],{"class":305},[76,111988,208],{"class":93},[76,111990,111991,111994,111996,111998,112001],{"class":78,"line":8087},[76,111992,111993],{"class":93},"    target ",[76,111995,247],{"class":89},[76,111997,111984],{"class":93},[76,111999,112000],{"class":305},"\"target\"",[76,112002,208],{"class":93},[76,112004,112005,112007],{"class":78,"line":8093},[76,112006,4162],{"class":89},[76,112008,112009],{"class":93}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[76,112011,112012],{"class":78,"line":8105},[76,112013,2472],{"emptyLinePlaceholder":125},[76,112015,112016],{"class":78,"line":8117},[76,112017,2472],{"emptyLinePlaceholder":125},[76,112019,112020,112022,112025,112028,112030],{"class":78,"line":8129},[76,112021,32017],{"class":89},[76,112023,112024],{"class":2035}," reward",[76,112026,112027],{"class":93},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[76,112029,241],{"class":250},[76,112031,3811],{"class":93},[76,112033,112034,112036,112038,112040,112042],{"class":78,"line":9788},[76,112035,111979],{"class":93},[76,112037,247],{"class":89},[76,112039,111984],{"class":93},[76,112041,111577],{"class":305},[76,112043,208],{"class":93},[76,112045,112046,112048,112050,112052,112054],{"class":78,"line":9813},[76,112047,111993],{"class":93},[76,112049,247],{"class":89},[76,112051,111984],{"class":93},[76,112053,112000],{"class":305},[76,112055,208],{"class":93},[76,112057,112058,112061,112063,112065,112067],{"class":78,"line":9836},[76,112059,112060],{"class":93},"    dist ",[76,112062,247],{"class":89},[76,112064,111642],{"class":93},[76,112066,112],{"class":89},[76,112068,111647],{"class":93},[76,112070,112071,112074,112076,112079,112081],{"class":78,"line":9860},[76,112072,112073],{"class":93},"    control_cost ",[76,112075,247],{"class":89},[76,112077,112078],{"class":250}," 0.01",[76,112080,6590],{"class":89},[76,112082,112083],{"class":93}," np.sum(np.square(data.ctrl))\n",[76,112085,112086,112088,112090,112092,112094,112096,112098],{"class":78,"line":9865},[76,112087,4162],{"class":89},[76,112089,109838],{"class":250},[76,112091,202],{"class":93},[76,112093,112],{"class":89},[76,112095,111637],{"class":93},[76,112097,112],{"class":89},[76,112099,112100],{"class":93}," control_cost)\n",[76,112102,112103],{"class":78,"line":9870},[76,112104,2472],{"emptyLinePlaceholder":125},[76,112106,112107],{"class":78,"line":9875},[76,112108,2472],{"emptyLinePlaceholder":125},[76,112110,112111,112113,112115,112117,112119],{"class":78,"line":9884},[76,112112,32017],{"class":89},[76,112114,2045],{"class":2035},[76,112116,101439],{"class":93},[76,112118,95755],{"class":250},[76,112120,3811],{"class":93},[76,112122,112123,112125,112127,112129,112131],{"class":78,"line":9889},[76,112124,101448],{"class":93},[76,112126,247],{"class":89},[76,112128,101453],{"class":93},[76,112130,101355],{"class":250},[76,112132,208],{"class":93},[76,112134,112135,112137,112139],{"class":78,"line":9895},[76,112136,101462],{"class":93},[76,112138,247],{"class":89},[76,112140,101467],{"class":93},[76,112142,112143,112145,112147],{"class":78,"line":9916},[76,112144,110194],{"class":93},[76,112146,247],{"class":89},[76,112148,104802],{"class":250},[76,112150,112151],{"class":78,"line":9922},[76,112152,2472],{"emptyLinePlaceholder":125},[76,112154,112155,112157,112159,112161,112163,112165,112167],{"class":78,"line":9936},[76,112156,3273],{"class":89},[76,112158,31686],{"class":93},[76,112160,26116],{"class":89},[76,112162,32513],{"class":250},[76,112164,202],{"class":93},[76,112166,65144],{"class":250},[76,112168,30856],{"class":93},[76,112170,112171],{"class":78,"line":9942},[76,112172,112173],{"class":93},"        mujoco.mj_forward(model, data)\n",[76,112175,112176,112179,112181,112183,112185],{"class":78,"line":9969},[76,112177,112178],{"class":93},"        tip ",[76,112180,247],{"class":89},[76,112182,111984],{"class":93},[76,112184,111577],{"class":305},[76,112186,208],{"class":93},[76,112188,112189,112192,112194,112196,112198],{"class":78,"line":9978},[76,112190,112191],{"class":93},"        target ",[76,112193,247],{"class":89},[76,112195,111984],{"class":93},[76,112197,112000],{"class":305},[76,112199,208],{"class":93},[76,112201,112202,112205,112207,112210,112212],{"class":78,"line":9984},[76,112203,112204],{"class":93},"        error ",[76,112206,247],{"class":89},[76,112208,112209],{"class":93}," target ",[76,112211,112],{"class":89},[76,112213,112214],{"class":93}," tip\n",[76,112216,112217],{"class":78,"line":9992},[76,112218,2472],{"emptyLinePlaceholder":125},[76,112220,112221,112223,112225,112227,112229,112232,112234,112236,112239,112241,112244,112246,112248,112250,112252],{"class":78,"line":9997},[76,112222,106658],{"class":93},[76,112224,392],{"class":250},[76,112226,4515],{"class":93},[76,112228,247],{"class":89},[76,112230,112231],{"class":93}," np.clip(",[76,112233,105301],{"class":250},[76,112235,6590],{"class":89},[76,112237,112238],{"class":93}," error[",[76,112240,278],{"class":250},[76,112242,112243],{"class":93},"], ",[76,112245,112],{"class":89},[76,112247,102444],{"class":250},[76,112249,12507],{"class":93},[76,112251,102444],{"class":250},[76,112253,208],{"class":93},[76,112255,112256,112258,112260,112262,112264,112266,112268,112270,112272,112274,112276,112278,112280,112282,112284],{"class":78,"line":16676},[76,112257,106658],{"class":93},[76,112259,418],{"class":250},[76,112261,4515],{"class":93},[76,112263,247],{"class":89},[76,112265,112231],{"class":93},[76,112267,105301],{"class":250},[76,112269,6590],{"class":89},[76,112271,112238],{"class":93},[76,112273,392],{"class":250},[76,112275,112243],{"class":93},[76,112277,112],{"class":89},[76,112279,102444],{"class":250},[76,112281,12507],{"class":93},[76,112283,102444],{"class":250},[76,112285,208],{"class":93},[76,112287,112288],{"class":78,"line":16682},[76,112289,2472],{"emptyLinePlaceholder":125},[76,112291,112292],{"class":78,"line":16705},[76,112293,101557],{"class":93},[76,112295,112296,112298,112300],{"class":78,"line":16711},[76,112297,110338],{"class":93},[76,112299,9549],{"class":89},[76,112301,112302],{"class":93}," reward(model, data)\n",[76,112304,112305],{"class":78,"line":16734},[76,112306,2472],{"emptyLinePlaceholder":125},[76,112308,112309,112311,112313,112315,112317,112319,112321],{"class":78,"line":16748},[76,112310,2569],{"class":89},[76,112312,31686],{"class":93},[76,112314,106],{"class":89},[76,112316,5826],{"class":250},[76,112318,101600],{"class":89},[76,112320,4165],{"class":250},[76,112322,3811],{"class":93},[76,112324,112325,112328,112330],{"class":78,"line":16768},[76,112326,112327],{"class":93},"            obs ",[76,112329,247],{"class":89},[76,112331,112332],{"class":93}," get_obs(model, data)\n",[76,112334,112335,112337,112339,112341],{"class":78,"line":16774},[76,112336,34720],{"class":250},[76,112338,202],{"class":93},[76,112340,110372],{"class":305},[76,112342,112343],{"class":93},", step)\n",[76,112345,112346,112348,112350,112353,112356,112358],{"class":78,"line":16785},[76,112347,34720],{"class":250},[76,112349,202],{"class":93},[76,112351,112352],{"class":305},"\"  tip:\"",[76,112354,112355],{"class":93},", np.round(tip, ",[76,112357,272],{"class":250},[76,112359,30567],{"class":93},[76,112361,112362,112364,112366,112369,112372,112374],{"class":78,"line":16808},[76,112363,34720],{"class":250},[76,112365,202],{"class":93},[76,112367,112368],{"class":305},"\"  target:\"",[76,112370,112371],{"class":93},", np.round(target, ",[76,112373,272],{"class":250},[76,112375,30567],{"class":93},[76,112377,112378,112380,112382,112385,112388,112390],{"class":78,"line":16830},[76,112379,34720],{"class":250},[76,112381,202],{"class":93},[76,112383,112384],{"class":305},"\"  ctrl:\"",[76,112386,112387],{"class":93},", np.round(data.ctrl.copy(), ",[76,112389,272],{"class":250},[76,112391,30567],{"class":93},[76,112393,112394,112396,112398,112401,112404,112406],{"class":78,"line":16835},[76,112395,34720],{"class":250},[76,112397,202],{"class":93},[76,112399,112400],{"class":305},"\"  obs_dim:\"",[76,112402,112403],{"class":93},", obs.shape[",[76,112405,392],{"class":250},[76,112407,4729],{"class":93},[76,112409,112410],{"class":78,"line":16841},[76,112411,2472],{"emptyLinePlaceholder":125},[76,112413,112414,112416,112418,112420,112422,112424,112426,112428],{"class":78,"line":16855},[76,112415,31369],{"class":250},[76,112417,202],{"class":93},[76,112419,110417],{"class":305},[76,112421,12507],{"class":93},[76,112423,32088],{"class":250},[76,112425,110424],{"class":93},[76,112427,272],{"class":250},[76,112429,30567],{"class":93},[76,112431,112432,112434,112436,112439,112442,112444,112446,112448],{"class":78,"line":16868},[76,112433,31369],{"class":250},[76,112435,202],{"class":93},[76,112437,112438],{"class":305},"\"final tip:\"",[76,112440,112441],{"class":93},", np.round(site_position(model, data, ",[76,112443,111577],{"class":305},[76,112445,110386],{"class":93},[76,112447,272],{"class":250},[76,112449,30567],{"class":93},[76,112451,112452,112454,112456,112459,112461,112463,112465,112467],{"class":78,"line":16873},[76,112453,31369],{"class":250},[76,112455,202],{"class":93},[76,112457,112458],{"class":305},"\"target:\"",[76,112460,112441],{"class":93},[76,112462,112000],{"class":305},[76,112464,110386],{"class":93},[76,112466,272],{"class":250},[76,112468,30567],{"class":93},[76,112470,112471],{"class":78,"line":16887},[76,112472,2472],{"emptyLinePlaceholder":125},[76,112474,112475],{"class":78,"line":16892},[76,112476,2472],{"emptyLinePlaceholder":125},[76,112478,112479,112481,112483,112485,112487],{"class":78,"line":16898},[76,112480,1603],{"class":89},[76,112482,31290],{"class":250},[76,112484,101600],{"class":89},[76,112486,101603],{"class":305},[76,112488,3811],{"class":93},[76,112490,112491],{"class":78,"line":16903},[76,112492,101610],{"class":93},[14,112494,103611],{},[67,112496,112498],{"className":23894,"code":112497,"language":23896,"meta":58,"style":58},"touch ch7_reacher.py\n",[73,112499,112500],{"__ignoreMap":58},[76,112501,112502,112504],{"class":78,"line":79},[76,112503,101324],{"class":2035},[76,112505,112506],{"class":305}," ch7_reacher.py\n",[14,112508,110485],{},[67,112510,112512],{"className":23894,"code":112511,"language":23896,"meta":58,"style":58},"python ch7_reacher.py\n",[73,112513,112514],{"__ignoreMap":58},[76,112515,112516,112518],{"class":78,"line":79},[76,112517,71],{"class":2035},[76,112519,112506],{"class":305},[169,112521,101613],{"id":101613},[14,112523,112524],{},"读取 site 坐标：",[67,112526,112528],{"className":69,"code":112527,"language":71,"meta":58,"style":58},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[73,112529,112530],{"__ignoreMap":58},[76,112531,112532,112534,112536,112538,112540],{"class":78,"line":79},[76,112533,32017],{"class":89},[76,112535,111897],{"class":2035},[76,112537,111900],{"class":93},[76,112539,1372],{"class":250},[76,112541,111905],{"class":93},[14,112543,112544],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112546,110501],{},[67,112548,112550],{"className":69,"code":112549,"language":71,"meta":58,"style":58},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[73,112551,112552],{"__ignoreMap":58},[76,112553,112554,112556],{"class":78,"line":79},[76,112555,17118],{"class":89},[76,112557,112009],{"class":93},[14,112559,112560],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112562,109826],{},[67,112564,112566],{"className":69,"code":112565,"language":71,"meta":58,"style":58},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[73,112567,112568,112580,112593],{"__ignoreMap":58},[76,112569,112570,112572,112574,112576,112578],{"class":78,"line":79},[76,112571,111637],{"class":93},[76,112573,247],{"class":89},[76,112575,111642],{"class":93},[76,112577,112],{"class":89},[76,112579,111647],{"class":93},[76,112581,112582,112585,112587,112589,112591],{"class":78,"line":86},[76,112583,112584],{"class":93},"control_cost ",[76,112586,247],{"class":89},[76,112588,112078],{"class":250},[76,112590,6590],{"class":89},[76,112592,112083],{"class":93},[76,112594,112595,112597,112599,112601,112603,112605,112607],{"class":78,"line":97},[76,112596,17118],{"class":89},[76,112598,109838],{"class":250},[76,112600,202],{"class":93},[76,112602,112],{"class":89},[76,112604,111637],{"class":93},[76,112606,112],{"class":89},[76,112608,112100],{"class":93},[14,112610,112611],{},"奖励由两部分组成：",[152,112613,112614,112619],{},[155,112615,112616,112618],{},[73,112617,111664],{},"：末端离目标越远，奖励越低。",[155,112620,112621,112624],{},[73,112622,112623],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112626,112627],{},"简单控制器：",[67,112629,112631],{"className":69,"code":112630,"language":71,"meta":58,"style":58},"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",[73,112632,112633,112646,112678],{"__ignoreMap":58},[76,112634,112635,112638,112640,112642,112644],{"class":78,"line":79},[76,112636,112637],{"class":93},"error ",[76,112639,247],{"class":89},[76,112641,112209],{"class":93},[76,112643,112],{"class":89},[76,112645,112214],{"class":93},[76,112647,112648,112650,112652,112654,112656,112658,112660,112662,112664,112666,112668,112670,112672,112674,112676],{"class":78,"line":86},[76,112649,105912],{"class":93},[76,112651,392],{"class":250},[76,112653,4515],{"class":93},[76,112655,247],{"class":89},[76,112657,112231],{"class":93},[76,112659,105301],{"class":250},[76,112661,6590],{"class":89},[76,112663,112238],{"class":93},[76,112665,278],{"class":250},[76,112667,112243],{"class":93},[76,112669,112],{"class":89},[76,112671,102444],{"class":250},[76,112673,12507],{"class":93},[76,112675,102444],{"class":250},[76,112677,208],{"class":93},[76,112679,112680,112682,112684,112686,112688,112690,112692,112694,112696,112698,112700,112702,112704,112706,112708],{"class":78,"line":97},[76,112681,105912],{"class":93},[76,112683,418],{"class":250},[76,112685,4515],{"class":93},[76,112687,247],{"class":89},[76,112689,112231],{"class":93},[76,112691,105301],{"class":250},[76,112693,6590],{"class":89},[76,112695,112238],{"class":93},[76,112697,392],{"class":250},[76,112699,112243],{"class":93},[76,112701,112],{"class":89},[76,112703,102444],{"class":250},[76,112705,12507],{"class":93},[76,112707,102444],{"class":250},[76,112709,208],{"class":93},[14,112711,112712],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[169,112714,101749],{"id":101749},[67,112716,112717],{"className":69,"code":112527,"language":71,"meta":58,"style":58},[73,112718,112719],{"__ignoreMap":58},[76,112720,112721,112723,112725,112727,112729],{"class":78,"line":79},[76,112722,32017],{"class":89},[76,112724,111897],{"class":2035},[76,112726,111900],{"class":93},[76,112728,1372],{"class":250},[76,112730,111905],{"class":93},[14,112732,112733,112734,112736,112737,82609,112739,28458],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[73,112735,79880],{}," 是 site 的名字，比如 ",[73,112738,111577],{},[73,112740,112000],{},[67,112742,112744],{"className":69,"code":112743,"language":71,"meta":58,"style":58},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[73,112745,112746],{"__ignoreMap":58},[76,112747,112748,112750,112752],{"class":78,"line":79},[76,112749,103675],{"class":93},[76,112751,247],{"class":89},[76,112753,111914],{"class":93},[14,112755,112756],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[67,112758,112760],{"className":69,"code":112759,"language":71,"meta":58,"style":58},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[73,112761,112762,112774],{"__ignoreMap":58},[76,112763,112764,112766,112768,112770,112772],{"class":78,"line":79},[76,112765,1603],{"class":89},[76,112767,103490],{"class":93},[76,112769,1109],{"class":89},[76,112771,4165],{"class":250},[76,112773,3811],{"class":93},[76,112775,112776,112778,112780,112782,112784,112786,112788,112790,112792,112794],{"class":78,"line":86},[76,112777,103936],{"class":89},[76,112779,103476],{"class":250},[76,112781,202],{"class":93},[76,112783,254],{"class":89},[76,112785,111939],{"class":305},[76,112787,1095],{"class":250},[76,112789,79880],{"class":93},[76,112791,1145],{"class":250},[76,112793,452],{"class":305},[76,112795,208],{"class":93},[14,112797,112798,112799,112802,112803,112805],{},"如果 site 没找到，就主动报错。",[73,112800,112801],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[73,112804,79880],{}," 的值放进字符串里。",[67,112807,112809],{"className":69,"code":112808,"language":71,"meta":58,"style":58},"return data.site_xpos[site_id].copy()\n",[73,112810,112811],{"__ignoreMap":58},[76,112812,112813,112815],{"class":78,"line":79},[76,112814,17118],{"class":89},[76,112816,111956],{"class":93},[14,112818,112819,112820,112822,112823,112826],{},"返回这个 site 的世界坐标。",[73,112821,103721],{}," 里的每一行都是一个 site 的 ",[73,112824,112825],{},"(x, y, z)"," 坐标。",[67,112828,112830],{"className":69,"code":112829,"language":71,"meta":58,"style":58},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[73,112831,112832],{"__ignoreMap":58},[76,112833,112834,112836,112838],{"class":78,"line":79},[76,112835,32017],{"class":89},[76,112837,111971],{"class":2035},[76,112839,111974],{"class":93},[14,112841,112842],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[67,112844,112846],{"className":69,"code":112845,"language":71,"meta":58,"style":58},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[73,112847,112848,112860],{"__ignoreMap":58},[76,112849,112850,112852,112854,112856,112858],{"class":78,"line":79},[76,112851,111609],{"class":93},[76,112853,247],{"class":89},[76,112855,111984],{"class":93},[76,112857,111577],{"class":305},[76,112859,208],{"class":93},[76,112861,112862,112864,112866,112868,112870],{"class":78,"line":86},[76,112863,111619],{"class":93},[76,112865,247],{"class":89},[76,112867,111984],{"class":93},[76,112869,112000],{"class":305},[76,112871,208],{"class":93},[14,112873,112874],{},"分别读取末端点和目标点的世界坐标。",[67,112876,112877],{"className":69,"code":112549,"language":71,"meta":58,"style":58},[73,112878,112879],{"__ignoreMap":58},[76,112880,112881,112883],{"class":78,"line":79},[76,112882,17118],{"class":89},[76,112884,112009],{"class":93},[14,112886,112887],{},"把四部分拼成一个观测数组：",[67,112889,112892],{"className":112890,"code":112891,"language":5259,"meta":58},[5257],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[73,112893,112891],{"__ignoreMap":58},[67,112895,112897],{"className":69,"code":112896,"language":71,"meta":58,"style":58},"dist = np.linalg.norm(tip - target)\n",[73,112898,112899],{"__ignoreMap":58},[76,112900,112901,112903,112905,112907,112909],{"class":78,"line":79},[76,112902,111637],{"class":93},[76,112904,247],{"class":89},[76,112906,111642],{"class":93},[76,112908,112],{"class":89},[76,112910,111647],{"class":93},[14,112912,112913,112914,112917,112918,112921],{},"计算 tip 到 target 的距离。",[73,112915,112916],{},"tip - target"," 得到一个三维向量，",[73,112919,112920],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112923,14705],{},[67,112925,112928],{"className":112926,"code":112927,"language":5259,"meta":58},[5257],"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",[73,112929,112927],{"__ignoreMap":58},[67,112931,112933],{"className":69,"code":112932,"language":71,"meta":58,"style":58},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[73,112934,112935],{"__ignoreMap":58},[76,112936,112937,112939,112941,112943,112945],{"class":78,"line":79},[76,112938,112584],{"class":93},[76,112940,247],{"class":89},[76,112942,112078],{"class":250},[76,112944,6590],{"class":89},[76,112946,112083],{"class":93},[14,112948,112949,112950,112953,112954,112957],{},"计算动作惩罚。",[73,112951,112952],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[73,112955,112956],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[67,112959,112961],{"className":69,"code":112960,"language":71,"meta":58,"style":58},"return float(-dist - control_cost)\n",[73,112962,112963],{"__ignoreMap":58},[76,112964,112965,112967,112969,112971,112973,112975,112977],{"class":78,"line":79},[76,112966,17118],{"class":89},[76,112968,109838],{"class":250},[76,112970,202],{"class":93},[76,112972,112],{"class":89},[76,112974,111637],{"class":93},[76,112976,112],{"class":89},[76,112978,112100],{"class":93},[14,112980,112981],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[67,112983,112984],{"className":69,"code":110844,"language":71,"meta":58,"style":58},[73,112985,112986],{"__ignoreMap":58},[76,112987,112988,112990,112992],{"class":78,"line":79},[76,112989,110851],{"class":93},[76,112991,247],{"class":89},[76,112993,104802],{"class":250},[14,112995,112996],{},"累计奖励变量，记录整个运行过程的总分。",[67,112998,113000],{"className":69,"code":112999,"language":71,"meta":58,"style":58},"for step in range(500):\n",[73,113001,113002],{"__ignoreMap":58},[76,113003,113004,113006,113008,113010,113012,113014,113016],{"class":78,"line":79},[76,113005,3097],{"class":89},[76,113007,31686],{"class":93},[76,113009,26116],{"class":89},[76,113011,32513],{"class":250},[76,113013,202],{"class":93},[76,113015,65144],{"class":250},[76,113017,30856],{"class":93},[14,113019,113020],{},"运行 500 个控制步。",[67,113022,113023],{"className":69,"code":104584,"language":71,"meta":58,"style":58},[73,113024,113025],{"__ignoreMap":58},[76,113026,113027],{"class":78,"line":79},[76,113028,104584],{"class":93},[14,113030,113031,113032,101059,113034,113036],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[73,113033,103272],{},[73,113035,103275],{}," 是当前状态下的坐标。",[67,113038,113040],{"className":69,"code":113039,"language":71,"meta":58,"style":58},"error = target - tip\n",[73,113041,113042],{"__ignoreMap":58},[76,113043,113044,113046,113048,113050,113052],{"class":78,"line":79},[76,113045,112637],{"class":93},[76,113047,247],{"class":89},[76,113049,112209],{"class":93},[76,113051,112],{"class":89},[76,113053,112214],{"class":93},[14,113055,113056],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[67,113058,113060],{"className":69,"code":113059,"language":71,"meta":58,"style":58},"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",[73,113061,113062,113094],{"__ignoreMap":58},[76,113063,113064,113066,113068,113070,113072,113074,113076,113078,113080,113082,113084,113086,113088,113090,113092],{"class":78,"line":79},[76,113065,105912],{"class":93},[76,113067,392],{"class":250},[76,113069,4515],{"class":93},[76,113071,247],{"class":89},[76,113073,112231],{"class":93},[76,113075,105301],{"class":250},[76,113077,6590],{"class":89},[76,113079,112238],{"class":93},[76,113081,278],{"class":250},[76,113083,112243],{"class":93},[76,113085,112],{"class":89},[76,113087,102444],{"class":250},[76,113089,12507],{"class":93},[76,113091,102444],{"class":250},[76,113093,208],{"class":93},[76,113095,113096,113098,113100,113102,113104,113106,113108,113110,113112,113114,113116,113118,113120,113122,113124],{"class":78,"line":86},[76,113097,105912],{"class":93},[76,113099,418],{"class":250},[76,113101,4515],{"class":93},[76,113103,247],{"class":89},[76,113105,112231],{"class":93},[76,113107,105301],{"class":250},[76,113109,6590],{"class":89},[76,113111,112238],{"class":93},[76,113113,392],{"class":250},[76,113115,112243],{"class":93},[76,113117,112],{"class":89},[76,113119,102444],{"class":250},[76,113121,12507],{"class":93},[76,113123,102444],{"class":250},[76,113125,208],{"class":93},[14,113127,113128,113129,113132],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[73,113130,113131],{},"error -> ctrl -> step"," 的流程。",[67,113134,113135],{"className":69,"code":104546,"language":71,"meta":58,"style":58},[73,113136,113137],{"__ignoreMap":58},[76,113138,113139],{"class":78,"line":79},[76,113140,104546],{"class":93},[14,113142,113143],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[67,113145,113147],{"className":69,"code":113146,"language":71,"meta":58,"style":58},"obs = get_obs(model, data)\n",[73,113148,113149],{"__ignoreMap":58},[76,113150,113151,113153,113155],{"class":78,"line":79},[76,113152,110895],{"class":93},[76,113154,247],{"class":89},[76,113156,112332],{"class":93},[14,113158,113159,113160,113163],{},"读取最新观测。后面打印 ",[73,113161,113162],{},"obs.shape[0]","，用来确认观测维度是 10。",[140,113165,102357],{"id":102356},[14,113167,113168],{},"观测维度为:",[67,113170,113173],{"className":113171,"code":113172,"language":5259,"meta":58},[5257],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[73,113174,113172],{"__ignoreMap":58},[14,113176,113177],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113179,113180],{},"程序每 100 步打印：",[67,113182,113185],{"className":113183,"code":113184,"language":5259,"meta":58},[5257],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[73,113186,113184],{"__ignoreMap":58},[14,113188,113189,113190,113192],{},"如果控制有效，你应该看到最终 ",[73,113191,103272],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[140,113194,102389],{"id":102388},[152,113196,113197,113200,113203,113209,113215,113222,113232],{},[155,113198,113199],{},"修改目标点位置。",[155,113201,113202],{},"重新运行，观察最终 tip 是否变化。",[155,113204,113205,113206,113208],{},"把 gravity 改成 ",[73,113207,102630],{},"，观察控制是否变差。",[155,113210,111222,113211,111226,113213,28458],{},[73,113212,102199],{},[73,113214,278],{},[155,113216,102452,113217,102455,113219,113221],{},[73,113218,110637],{},[73,113220,107348],{},"，观察机械臂是否更难移动。",[155,113223,102452,113224,82600,113226,102455,113228,113231],{},[73,113225,103275],{},[73,113227,104187],{},[73,113229,113230],{},"0.2 0 0.6","，观察 reward 和 final tip。",[155,113233,113234],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[140,113236,102494],{"id":102493},[169,113238,113240],{"id":113239},"site-not-found",[73,113241,113242],{},"site not found",[14,113244,113245,113246,101059,113249,28458],{},"检查 XML 中是否有 ",[73,113247,113248],{},"site name=\"tip\"",[73,113250,113251],{},"site name=\"target\"",[169,113253,113254],{"id":113254},"机械臂完全不动",[14,113256,102564],{},[152,113258,113259,113264,113267,113272],{},[155,113260,113261,113263],{},[73,113262,102199],{}," 是否为 2",[155,113265,113266],{},"actuator 是否引用正确 joint",[155,113268,113269,113271],{},[73,113270,101117],{}," 是否被赋值",[155,113273,113274,113275],{},"是否执行了 ",[73,113276,100726],{},[169,113278,113279],{"id":113279},"控制效果不好",[14,113281,113282],{},"正常。本章重点不是控制器最优，而是任务结构:",[67,113284,113287],{"className":113285,"code":113286,"language":5259,"meta":58},[5257],"obs → action → mj_step → reward → next_obs\n",[73,113288,113286],{"__ignoreMap":58},[169,113290,113292],{"id":113291},"tip-坐标不变化","tip 坐标不变化",[14,113294,102616],{},[152,113296,113297,113302,113310,113319],{},[155,113298,113299,113300,28458],{},"是否每步调用了 ",[73,113301,100726],{},[155,113303,113304,113305,101059,113307,28458],{},"是否写入了 ",[73,113306,106167],{},[73,113308,113309],{},"data.ctrl[1]",[155,113311,113312,113313,413,113316,28458],{},"actuator 是否正确引用 ",[73,113314,113315],{},"joint1",[73,113317,113318],{},"joint2",[155,113320,113321],{},"控制输入是否太小。",[169,113323,113324],{"id":113324},"目标点不会动",[14,113326,113327],{},"本章的 target 是固定 site：",[67,113329,113331],{"className":53137,"code":113330,"language":53139,"meta":58,"style":58},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[73,113332,113333],{"__ignoreMap":58},[76,113334,113335,113337,113339,113341,113343,113345,113347,113349,113352],{"class":78,"line":79},[76,113336,1109],{"class":93},[76,113338,103251],{"class":51370},[76,113340,14992],{"class":2035},[76,113342,247],{"class":93},[76,113344,112000],{"class":305},[76,113346,101147],{"class":2035},[76,113348,247],{"class":93},[76,113350,113351],{"class":305},"\"0.5 0 0.4\"",[76,113353,113354],{"class":93}," ...\u002F>\n",[14,113356,113357,113358,113360],{},"它直接挂在 ",[73,113359,101882],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[169,113362,113363],{"id":113363},"机械臂不像真实机械臂",[14,113365,113366],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[140,113368,102648],{"id":102647},[14,113370,113371],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113373,113374],{},"核心公式：",[67,113376,113379],{"className":113377,"code":113378,"language":5259,"meta":58},[5257],"distance = ||tip - target||\nreward = -distance - action_cost\n",[73,113380,113378],{"__ignoreMap":58},[14,113382,113383],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[117,113385,113386],{},"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":58,"searchDepth":86,"depth":86,"links":113388},[113389,113390,113391,113396,113400,113401,113402,113410],{"id":100687,"depth":86,"text":100688},{"id":100810,"depth":86,"text":100811},{"id":101085,"depth":86,"text":101086,"children":113392},[113393,113394,113395],{"id":111592,"depth":97,"text":111593},{"id":111668,"depth":97,"text":111668},{"id":111698,"depth":97,"text":111699},{"id":101293,"depth":86,"text":101294,"children":113397},[113398,113399],{"id":101613,"depth":97,"text":101613},{"id":101749,"depth":97,"text":101749},{"id":102356,"depth":86,"text":102357},{"id":102388,"depth":86,"text":102389},{"id":102493,"depth":86,"text":102494,"children":113403},[113404,113405,113406,113407,113408,113409],{"id":113239,"depth":97,"text":113242},{"id":113254,"depth":97,"text":113254},{"id":113279,"depth":97,"text":113279},{"id":113291,"depth":97,"text":113292},{"id":113324,"depth":97,"text":113324},{"id":113363,"depth":97,"text":113363},{"id":102647,"depth":86,"text":102648},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111396,"description":58},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113417,"title":113418,"body":113419,"description":58,"extension":123,"meta":116881,"navigation":125,"path":116882,"seo":116883,"stem":116884,"__hash__":116885},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113420,"toc":116852},[113421,113424,113426,113429,113432,113457,113460,113466,113469,113475,113477,113479,113503,113505,113523,113525,113568,113570,113597,113599,113602,113654,113657,113663,113672,113675,113713,113716,113755,113758,113766,113773,113776,113782,113784,113838,113845,113890,113893,113897,113913,113923,113925,115186,115188,115200,115202,115213,115215,115218,115239,115242,115245,115278,115284,115287,115320,115323,115326,115367,115372,115386,115389,115402,115407,115430,115432,115447,115457,115472,115479,115499,115514,115532,115535,115552,115560,115576,115582,115614,115627,115659,115669,115704,115718,115764,115778,115820,115831,115844,115850,115883,115886,115913,115923,115963,115973,115990,115997,116015,116018,116059,116072,116087,116090,116113,116116,116128,116131,116150,116155,116176,116179,116194,116197,116231,116243,116258,116261,116286,116289,116308,116311,116343,116346,116370,116376,116406,116413,116426,116429,116431,116433,116439,116442,116445,116457,116460,116462,116516,116518,116522,116528,116537,116540,116547,116549,116572,116575,116579,116581,116599,116605,116607,116640,116643,116649,116653,116656,116676,116681,116685,116692,116712,116717,116721,116724,116744,116747,116833,116837,116840,116846,116849],[10,113422,113418],{"id":113423},"_8gymnasium-风格强化学习接口基础",[140,113425,100688],{"id":100687},[14,113427,113428],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113430,113431],{},"你将实现:",[67,113433,113435],{"className":69,"code":113434,"language":71,"meta":58,"style":58},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[73,113436,113437,113447],{"__ignoreMap":58},[76,113438,113439,113442,113444],{"class":78,"line":79},[76,113440,113441],{"class":93},"obs, info ",[76,113443,247],{"class":89},[76,113445,113446],{"class":93}," env.reset()\n",[76,113448,113449,113452,113454],{"class":78,"line":86},[76,113450,113451],{"class":93},"obs, reward, terminated, truncated, info ",[76,113453,247],{"class":89},[76,113455,113456],{"class":93}," env.step(action)\n",[14,113458,113459],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113461,113462,113463,113465],{},"前面章节的代码都是“脚本式”的：在 ",[73,113464,102336],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113467,113468],{},"可以先记住 Gymnasium 环境的核心交互：",[67,113470,113473],{"className":113471,"code":113472,"language":5259,"meta":58},[5257],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[73,113474,113472],{"__ignoreMap":58},[140,113476,100811],{"id":100810},[14,113478,100814],{},[67,113480,113481],{"className":23894,"code":104429,"language":23896,"meta":58,"style":58},[73,113482,113483],{"__ignoreMap":58},[76,113484,113485,113487,113489,113491,113493,113495,113497,113499,113501],{"class":78,"line":79},[76,113486,24649],{"class":2035},[76,113488,26388],{"class":305},[76,113490,23906],{"class":305},[76,113492,26473],{"class":250},[76,113494,104444],{"class":305},[76,113496,100839],{"class":305},[76,113498,102542],{"class":305},[76,113500,100855],{"class":305},[76,113502,104453],{"class":305},[14,113504,102860],{},[67,113506,113508],{"className":23894,"code":113507,"language":23896,"meta":58,"style":58},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[73,113509,113510],{"__ignoreMap":58},[76,113511,113512,113514,113516,113518,113520],{"class":78,"line":79},[76,113513,23903],{"class":2035},[76,113515,23906],{"class":305},[76,113517,100971],{"class":305},[76,113519,107752],{"class":305},[76,113521,113522],{"class":305}," gymnasium\n",[14,113524,102877],{},[67,113526,113528],{"className":23894,"code":113527,"language":23896,"meta":58,"style":58},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[73,113529,113530,113547,113556],{"__ignoreMap":58},[76,113531,113532,113534,113536,113538,113541,113543,113545],{"class":78,"line":79},[76,113533,30403],{"class":2035},[76,113535,29249],{"class":305},[76,113537,25188],{"class":250},[76,113539,113540],{"class":305}," mujoco-gym-api",[76,113542,101016],{"class":305},[76,113544,101019],{"class":250},[76,113546,101022],{"class":250},[76,113548,113549,113551,113553],{"class":78,"line":86},[76,113550,30403],{"class":2035},[76,113552,101029],{"class":305},[76,113554,113555],{"class":305}," mujoco-gym-api\n",[76,113557,113558,113560,113562,113564,113566],{"class":78,"line":97},[76,113559,23903],{"class":2035},[76,113561,23906],{"class":305},[76,113563,100971],{"class":305},[76,113565,107752],{"class":305},[76,113567,113522],{"class":305},[14,113569,101045],{},[152,113571,113572,113582,113585,113591],{},[155,113573,113574,113575,113578,113579,28458],{},"本章使用 ",[73,113576,113577],{},"gymnasium","，不是旧版 ",[73,113580,113581],{},"gym",[155,113583,113584],{},"Gymnasium API 与旧 Gym API 有差异。",[155,113586,113587,113588,28458],{},"旧 Gym 常见返回值是 4 个: ",[73,113589,113590],{},"obs, reward, done, info",[155,113592,113593,113594,28458],{},"Gymnasium 返回值是 5 个: ",[73,113595,113596],{},"obs, reward, terminated, truncated, info",[140,113598,101086],{"id":101085},[14,113600,113601],{},"强化学习环境接口包含:",[338,113603,113604,113613],{},[341,113605,113606],{},[344,113607,113608,113611],{},[347,113609,113610],{"align":23808},"方法",[347,113612,102737],{"align":23808},[385,113614,113615,113625,113635,113645],{},[344,113616,113617,113622],{},[390,113618,113619],{"align":23808},[73,113620,113621],{},"reset()",[390,113623,113624],{"align":23808},"重置环境",[344,113626,113627,113632],{},[390,113628,113629],{"align":23808},[73,113630,113631],{},"step(action)",[390,113633,113634],{"align":23808},"执行动作",[344,113636,113637,113642],{},[390,113638,113639],{"align":23808},[73,113640,113641],{},"observation_space",[390,113643,113644],{"align":23808},"观测空间",[344,113646,113647,113652],{},[390,113648,113649],{"align":23808},[73,113650,113651],{},"action_space",[390,113653,23726],{"align":23808},[14,113655,113656],{},"一个最小环境需要完成:",[67,113658,113661],{"className":113659,"code":113660,"language":5259,"meta":58},[5257],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[73,113662,113660],{"__ignoreMap":58},[169,113664,113666,101059,113669,104679],{"id":113665},"terminated-和-truncated-的区别",[73,113667,113668],{},"terminated",[73,113670,113671],{},"truncated",[14,113673,113674],{},"Gymnasium 把“结束”拆成两个概念：",[338,113676,113677,113687],{},[341,113678,113679],{},[344,113680,113681,113683,113685],{},[347,113682,104615],{"align":23808},[347,113684,100741],{"align":23808},[347,113686,21259],{"align":23808},[385,113688,113689,113701],{},[344,113690,113691,113695,113698],{},[390,113692,113693],{"align":23808},[73,113694,113668],{},[390,113696,113697],{"align":23808},"任务自然结束",[390,113699,113700],{"align":23808},"机械臂到达目标、机器人摔倒",[344,113702,113703,113707,113710],{},[390,113704,113705],{"align":23808},[73,113706,113671],{},[390,113708,113709],{"align":23808},"因外部限制截断",[390,113711,113712],{"align":23808},"达到最大步数、时间限制",[14,113714,113715],{},"本章中：",[67,113717,113719],{"className":69,"code":113718,"language":71,"meta":58,"style":58},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[73,113720,113721,113736],{"__ignoreMap":58},[76,113722,113723,113726,113728,113731,113733],{"class":78,"line":79},[76,113724,113725],{"class":93},"terminated ",[76,113727,247],{"class":89},[76,113729,113730],{"class":93}," dist ",[76,113732,1109],{"class":89},[76,113734,113735],{"class":250}," 0.05\n",[76,113737,113738,113741,113743,113745,113748,113750,113752],{"class":78,"line":86},[76,113739,113740],{"class":93},"truncated ",[76,113742,247],{"class":89},[76,113744,38943],{"class":250},[76,113746,113747],{"class":93},".steps ",[76,113749,1782],{"class":89},[76,113751,38943],{"class":250},[76,113753,113754],{"class":93},".max_steps\n",[14,113756,113757],{},"也就是：",[152,113759,113760,113763],{},[155,113761,113762],{},"末端距离目标小于 0.05，任务成功结束。",[155,113764,113765],{},"步数超过上限，episode 被截断。",[169,113767,113769,101059,113771],{"id":113768},"observation_space-和-action_space",[73,113770,113641],{},[73,113772,113651],{},[14,113774,113775],{},"这两个对象告诉算法：",[67,113777,113780],{"className":113778,"code":113779,"language":5259,"meta":58},[5257],"观测长什么样\n动作允许多大\n",[73,113781,113779],{"__ignoreMap":58},[14,113783,14705],{},[67,113785,113787],{"className":69,"code":113786,"language":71,"meta":58,"style":58},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[73,113788,113789],{"__ignoreMap":58},[76,113790,113791,113793,113796,113798,113801,113804,113807,113809,113811,113814,113816,113818,113820,113822,113824,113826,113828,113831,113833,113835],{"class":78,"line":79},[76,113792,30893],{"class":250},[76,113794,113795],{"class":93},".action_space ",[76,113797,247],{"class":89},[76,113799,113800],{"class":93}," spaces.Box(",[76,113802,113803],{"class":5288},"low",[76,113805,113806],{"class":89},"=-",[76,113808,102444],{"class":250},[76,113810,12507],{"class":93},[76,113812,113813],{"class":5288},"high",[76,113815,247],{"class":89},[76,113817,102444],{"class":250},[76,113819,12507],{"class":93},[76,113821,96032],{"class":5288},[76,113823,247],{"class":89},[76,113825,202],{"class":93},[76,113827,278],{"class":250},[76,113829,113830],{"class":93},",), ",[76,113832,93570],{"class":5288},[76,113834,247],{"class":89},[76,113836,113837],{"class":93},"np.float32)\n",[14,113839,113840,113841,113844],{},"表示动作是 2 维数组，每个值都在 ",[73,113842,113843],{},"[-1, 1]"," 范围内。",[67,113846,113848],{"className":69,"code":113847,"language":71,"meta":58,"style":58},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[73,113849,113850],{"__ignoreMap":58},[76,113851,113852,113854,113857,113859,113861,113863,113865,113868,113870,113872,113874,113876,113878,113880,113882,113884,113886,113888],{"class":78,"line":79},[76,113853,30893],{"class":250},[76,113855,113856],{"class":93},".observation_space ",[76,113858,247],{"class":89},[76,113860,113800],{"class":93},[76,113862,113803],{"class":5288},[76,113864,113806],{"class":89},[76,113866,113867],{"class":93},"np.inf, ",[76,113869,113813],{"class":5288},[76,113871,247],{"class":89},[76,113873,113867],{"class":93},[76,113875,96032],{"class":5288},[76,113877,247],{"class":89},[76,113879,202],{"class":93},[76,113881,646],{"class":250},[76,113883,113830],{"class":93},[76,113885,93570],{"class":5288},[76,113887,247],{"class":89},[76,113889,113837],{"class":93},[14,113891,113892],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[169,113894,113896],{"id":113895},"frame_skip-是什么","frame_skip 是什么",[67,113898,113900],{"className":69,"code":113899,"language":71,"meta":58,"style":58},"self.frame_skip = 5\n",[73,113901,113902],{"__ignoreMap":58},[76,113903,113904,113906,113909,113911],{"class":78,"line":79},[76,113905,30893],{"class":250},[76,113907,113908],{"class":93},".frame_skip ",[76,113910,247],{"class":89},[76,113912,54497],{"class":250},[14,113914,113915,113916,113919,113920,113922],{},"表示外部调用一次 ",[73,113917,113918],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[73,113921,101256],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[140,113924,101294],{"id":101293},[67,113926,113928],{"className":69,"code":113927,"language":71,"meta":58,"style":58},"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",[73,113929,113930,113942,113948,113958,113969,113973,113977,113985,113990,113994,113998,114002,114006,114010,114014,114018,114023,114027,114031,114035,114040,114044,114048,114052,114056,114060,114064,114068,114072,114076,114080,114084,114088,114092,114110,114125,114129,114142,114152,114167,114184,114188,114209,114228,114253,114267,114271,114281,114293,114303,114307,114349,114387,114391,114401,114417,114432,114451,114458,114462,114475,114490,114505,114518,114537,114553,114557,114598,114613,114628,114632,114671,114682,114695,114699,114709,114718,114722,114732,114747,114765,114769,114780,114797,114810,114814,114824,114828,114839,114850,114854,114868,114882,114898,114902,114915,114932,114947,114954,114958,114962,114974,114984,115002,115014,115026,115030,115038,115054,115063,115072,115080,115122,115135,115140,115144,115162,115166,115170,115182],{"__ignoreMap":58},[76,113931,113932,113934,113937,113939],{"class":78,"line":79},[76,113933,90],{"class":89},[76,113935,113936],{"class":93}," gymnasium ",[76,113938,31453],{"class":89},[76,113940,113941],{"class":93}," gym\n",[76,113943,113944,113946],{"class":78,"line":86},[76,113945,90],{"class":89},[76,113947,101342],{"class":93},[76,113949,113950,113952,113954,113956],{"class":78,"line":97},[76,113951,90],{"class":89},[76,113953,31450],{"class":93},[76,113955,31453],{"class":89},[76,113957,31456],{"class":93},[76,113959,113960,113962,113964,113966],{"class":78,"line":103},[76,113961,30807],{"class":89},[76,113963,113936],{"class":93},[76,113965,90],{"class":89},[76,113967,113968],{"class":93}," spaces\n",[76,113970,113971],{"class":78,"line":1273},[76,113972,2472],{"emptyLinePlaceholder":125},[76,113974,113975],{"class":78,"line":1287},[76,113976,2472],{"emptyLinePlaceholder":125},[76,113978,113979,113981,113983],{"class":78,"line":1293},[76,113980,101355],{"class":250},[76,113982,13636],{"class":89},[76,113984,101360],{"class":305},[76,113986,113987],{"class":78,"line":1384},[76,113988,113989],{"class":305},"\u003Cmujoco model=\"gym_reacher\">\n",[76,113991,113992],{"class":78,"line":1390},[76,113993,111779],{"class":305},[76,113995,113996],{"class":78,"line":1402},[76,113997,2472],{"emptyLinePlaceholder":125},[76,113999,114000],{"class":78,"line":1684},[76,114001,101379],{"class":305},[76,114003,114004],{"class":78,"line":1689},[76,114005,111797],{"class":305},[76,114007,114008],{"class":78,"line":1695},[76,114009,2472],{"emptyLinePlaceholder":125},[76,114011,114012],{"class":78,"line":1700},[76,114013,111806],{"class":305},[76,114015,114016],{"class":78,"line":1714},[76,114017,111811],{"class":305},[76,114019,114020],{"class":78,"line":1719},[76,114021,114022],{"class":305},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[76,114024,114025],{"class":78,"line":1725},[76,114026,2472],{"emptyLinePlaceholder":125},[76,114028,114029],{"class":78,"line":1746},[76,114030,111825],{"class":305},[76,114032,114033],{"class":78,"line":1751},[76,114034,111830],{"class":305},[76,114036,114037],{"class":78,"line":1765},[76,114038,114039],{"class":305},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[76,114041,114042],{"class":78,"line":1770},[76,114043,111840],{"class":305},[76,114045,114046],{"class":78,"line":1799},[76,114047,106479],{"class":305},[76,114049,114050],{"class":78,"line":1804},[76,114051,101408],{"class":305},[76,114053,114054],{"class":78,"line":1821},[76,114055,101413],{"class":305},[76,114057,114058],{"class":78,"line":1826},[76,114059,2472],{"emptyLinePlaceholder":125},[76,114061,114062],{"class":78,"line":1831},[76,114063,106496],{"class":305},[76,114065,114066],{"class":78,"line":1836},[76,114067,111865],{"class":305},[76,114069,114070],{"class":78,"line":1850},[76,114071,111870],{"class":305},[76,114073,114074],{"class":78,"line":1855},[76,114075,106506],{"class":305},[76,114077,114078],{"class":78,"line":2649},[76,114079,101418],{"class":305},[76,114081,114082],{"class":78,"line":2663},[76,114083,95767],{"class":305},[76,114085,114086],{"class":78,"line":2671},[76,114087,2472],{"emptyLinePlaceholder":125},[76,114089,114090],{"class":78,"line":2676},[76,114091,2472],{"emptyLinePlaceholder":125},[76,114093,114094,114096,114099,114101,114103,114105,114108],{"class":78,"line":2682},[76,114095,14766],{"class":89},[76,114097,114098],{"class":2035}," ReacherEnv",[76,114100,202],{"class":93},[76,114102,113581],{"class":2035},[76,114104,757],{"class":93},[76,114106,114107],{"class":2035},"Env",[76,114109,30856],{"class":93},[76,114111,114112,114115,114117,114119,114122],{"class":78,"line":2688},[76,114113,114114],{"class":93},"    metadata ",[76,114116,247],{"class":89},[76,114118,4520],{"class":93},[76,114120,114121],{"class":305},"\"render_modes\"",[76,114123,114124],{"class":93},": []}\n",[76,114126,114127],{"class":78,"line":2693},[76,114128,2472],{"emptyLinePlaceholder":125},[76,114130,114131,114133,114135,114138,114140],{"class":78,"line":8020},[76,114132,30871],{"class":89},[76,114134,30874],{"class":250},[76,114136,114137],{"class":93},"(self) -> ",[76,114139,95755],{"class":250},[76,114141,3811],{"class":93},[76,114143,114144,114146,114148,114150],{"class":78,"line":8044},[76,114145,30887],{"class":250},[76,114147,17333],{"class":93},[76,114149,30899],{"class":250},[76,114151,2048],{"class":93},[76,114153,114154,114156,114159,114161,114163,114165],{"class":78,"line":8049},[76,114155,30915],{"class":250},[76,114157,114158],{"class":93},".model ",[76,114160,247],{"class":89},[76,114162,101453],{"class":93},[76,114164,101355],{"class":250},[76,114166,208],{"class":93},[76,114168,114169,114171,114174,114176,114179,114181],{"class":78,"line":8055},[76,114170,30915],{"class":250},[76,114172,114173],{"class":93},".data ",[76,114175,247],{"class":89},[76,114177,114178],{"class":93}," mujoco.MjData(",[76,114180,30893],{"class":250},[76,114182,114183],{"class":93},".model)\n",[76,114185,114186],{"class":78,"line":8082},[76,114187,2472],{"emptyLinePlaceholder":125},[76,114189,114190,114192,114195,114197,114200,114202,114205,114207],{"class":78,"line":8087},[76,114191,30915],{"class":250},[76,114193,114194],{"class":93},".tip_site_id ",[76,114196,247],{"class":89},[76,114198,114199],{"class":93}," mujoco.mj_name2id(",[76,114201,30893],{"class":250},[76,114203,114204],{"class":93},".model, mujoco.mjtObj.mjOBJ_SITE, ",[76,114206,111577],{"class":305},[76,114208,208],{"class":93},[76,114210,114211,114213,114216,114218,114220,114222,114224,114226],{"class":78,"line":8093},[76,114212,30915],{"class":250},[76,114214,114215],{"class":93},".target_site_id ",[76,114217,247],{"class":89},[76,114219,114199],{"class":93},[76,114221,30893],{"class":250},[76,114223,114204],{"class":93},[76,114225,112000],{"class":305},[76,114227,208],{"class":93},[76,114229,114230,114232,114234,114236,114238,114240,114243,114245,114247,114249,114251],{"class":78,"line":8105},[76,114231,2569],{"class":89},[76,114233,38943],{"class":250},[76,114235,114194],{"class":93},[76,114237,1109],{"class":89},[76,114239,4165],{"class":250},[76,114241,114242],{"class":89}," or",[76,114244,38943],{"class":250},[76,114246,114215],{"class":93},[76,114248,1109],{"class":89},[76,114250,4165],{"class":250},[76,114252,3811],{"class":93},[76,114254,114255,114258,114260,114262,114265],{"class":78,"line":8117},[76,114256,114257],{"class":89},"            raise",[76,114259,103476],{"class":250},[76,114261,202],{"class":93},[76,114263,114264],{"class":305},"\"required sites not found\"",[76,114266,208],{"class":93},[76,114268,114269],{"class":78,"line":8129},[76,114270,2472],{"emptyLinePlaceholder":125},[76,114272,114273,114275,114277,114279],{"class":78,"line":9788},[76,114274,30915],{"class":250},[76,114276,113908],{"class":93},[76,114278,247],{"class":89},[76,114280,54497],{"class":250},[76,114282,114283,114285,114288,114290],{"class":78,"line":9813},[76,114284,30915],{"class":250},[76,114286,114287],{"class":93},".max_steps ",[76,114289,247],{"class":89},[76,114291,114292],{"class":250}," 200\n",[76,114294,114295,114297,114299,114301],{"class":78,"line":9836},[76,114296,30915],{"class":250},[76,114298,113747],{"class":93},[76,114300,247],{"class":89},[76,114302,47403],{"class":250},[76,114304,114305],{"class":78,"line":9860},[76,114306,2472],{"emptyLinePlaceholder":125},[76,114308,114309,114311,114313,114315,114317,114319,114321,114323,114325,114327,114329,114331,114333,114335,114337,114339,114341,114343,114345,114347],{"class":78,"line":9865},[76,114310,30915],{"class":250},[76,114312,113795],{"class":93},[76,114314,247],{"class":89},[76,114316,113800],{"class":93},[76,114318,113803],{"class":5288},[76,114320,113806],{"class":89},[76,114322,102444],{"class":250},[76,114324,12507],{"class":93},[76,114326,113813],{"class":5288},[76,114328,247],{"class":89},[76,114330,102444],{"class":250},[76,114332,12507],{"class":93},[76,114334,96032],{"class":5288},[76,114336,247],{"class":89},[76,114338,202],{"class":93},[76,114340,278],{"class":250},[76,114342,113830],{"class":93},[76,114344,93570],{"class":5288},[76,114346,247],{"class":89},[76,114348,113837],{"class":93},[76,114350,114351,114353,114355,114357,114359,114361,114363,114365,114367,114369,114371,114373,114375,114377,114379,114381,114383,114385],{"class":78,"line":9870},[76,114352,30915],{"class":250},[76,114354,113856],{"class":93},[76,114356,247],{"class":89},[76,114358,113800],{"class":93},[76,114360,113803],{"class":5288},[76,114362,113806],{"class":89},[76,114364,113867],{"class":93},[76,114366,113813],{"class":5288},[76,114368,247],{"class":89},[76,114370,113867],{"class":93},[76,114372,96032],{"class":5288},[76,114374,247],{"class":89},[76,114376,202],{"class":93},[76,114378,646],{"class":250},[76,114380,113830],{"class":93},[76,114382,93570],{"class":5288},[76,114384,247],{"class":89},[76,114386,113837],{"class":93},[76,114388,114389],{"class":78,"line":9875},[76,114390,2472],{"emptyLinePlaceholder":125},[76,114392,114393,114395,114398],{"class":78,"line":9884},[76,114394,30871],{"class":89},[76,114396,114397],{"class":2035}," _get_obs",[76,114399,114400],{"class":93},"(self) -> np.ndarray:\n",[76,114402,114403,114405,114407,114409,114412,114414],{"class":78,"line":9889},[76,114404,112178],{"class":93},[76,114406,247],{"class":89},[76,114408,38943],{"class":250},[76,114410,114411],{"class":93},".data.site_xpos[",[76,114413,30893],{"class":250},[76,114415,114416],{"class":93},".tip_site_id].copy()\n",[76,114418,114419,114421,114423,114425,114427,114429],{"class":78,"line":9895},[76,114420,112191],{"class":93},[76,114422,247],{"class":89},[76,114424,38943],{"class":250},[76,114426,114411],{"class":93},[76,114428,30893],{"class":250},[76,114430,114431],{"class":93},".target_site_id].copy()\n",[76,114433,114434,114436,114438,114441,114443,114446,114448],{"class":78,"line":9916},[76,114435,110223],{"class":93},[76,114437,247],{"class":89},[76,114439,114440],{"class":93}," np.concatenate([",[76,114442,30893],{"class":250},[76,114444,114445],{"class":93},".data.qpos.copy(), ",[76,114447,30893],{"class":250},[76,114449,114450],{"class":93},".data.qvel.copy(), tip, target])\n",[76,114452,114453,114455],{"class":78,"line":9922},[76,114454,14824],{"class":89},[76,114456,114457],{"class":93}," obs.astype(np.float32)\n",[76,114459,114460],{"class":78,"line":9936},[76,114461,2472],{"emptyLinePlaceholder":125},[76,114463,114464,114466,114469,114471,114473],{"class":78,"line":9942},[76,114465,30871],{"class":89},[76,114467,114468],{"class":2035}," _get_reward",[76,114470,114137],{"class":93},[76,114472,241],{"class":250},[76,114474,3811],{"class":93},[76,114476,114477,114479,114481,114483,114485,114487],{"class":78,"line":9969},[76,114478,112178],{"class":93},[76,114480,247],{"class":89},[76,114482,38943],{"class":250},[76,114484,114411],{"class":93},[76,114486,30893],{"class":250},[76,114488,114489],{"class":93},".tip_site_id]\n",[76,114491,114492,114494,114496,114498,114500,114502],{"class":78,"line":9978},[76,114493,112191],{"class":93},[76,114495,247],{"class":89},[76,114497,38943],{"class":250},[76,114499,114411],{"class":93},[76,114501,30893],{"class":250},[76,114503,114504],{"class":93},".target_site_id]\n",[76,114506,114507,114510,114512,114514,114516],{"class":78,"line":9984},[76,114508,114509],{"class":93},"        dist ",[76,114511,247],{"class":89},[76,114513,111642],{"class":93},[76,114515,112],{"class":89},[76,114517,111647],{"class":93},[76,114519,114520,114523,114525,114527,114529,114532,114534],{"class":78,"line":9992},[76,114521,114522],{"class":93},"        control_cost ",[76,114524,247],{"class":89},[76,114526,112078],{"class":250},[76,114528,6590],{"class":89},[76,114530,114531],{"class":93}," np.sum(np.square(",[76,114533,30893],{"class":250},[76,114535,114536],{"class":93},".data.ctrl))\n",[76,114538,114539,114541,114543,114545,114547,114549,114551],{"class":78,"line":9997},[76,114540,14824],{"class":89},[76,114542,109838],{"class":250},[76,114544,202],{"class":93},[76,114546,112],{"class":89},[76,114548,111637],{"class":93},[76,114550,112],{"class":89},[76,114552,112100],{"class":93},[76,114554,114555],{"class":78,"line":16676},[76,114556,2472],{"emptyLinePlaceholder":125},[76,114558,114559,114561,114564,114567,114569,114572,114574,114576,114578,114580,114582,114585,114588,114590,114592,114594,114596],{"class":78,"line":16682},[76,114560,30871],{"class":89},[76,114562,114563],{"class":2035}," reset",[76,114565,114566],{"class":93},"(self, ",[76,114568,655],{"class":89},[76,114570,114571],{"class":93},", seed: ",[76,114573,205],{"class":250},[76,114575,25182],{"class":89},[76,114577,39003],{"class":250},[76,114579,13636],{"class":89},[76,114581,39003],{"class":250},[76,114583,114584],{"class":93},", options: ",[76,114586,114587],{"class":250},"dict",[76,114589,25182],{"class":89},[76,114591,39003],{"class":250},[76,114593,13636],{"class":89},[76,114595,39003],{"class":250},[76,114597,30856],{"class":93},[76,114599,114600,114602,114605,114608,114610],{"class":78,"line":16705},[76,114601,30887],{"class":250},[76,114603,114604],{"class":93},"().reset(",[76,114606,114607],{"class":5288},"seed",[76,114609,247],{"class":89},[76,114611,114612],{"class":93},"seed)\n",[76,114614,114615,114618,114620,114623,114625],{"class":78,"line":16711},[76,114616,114617],{"class":93},"        mujoco.mj_resetData(",[76,114619,30893],{"class":250},[76,114621,114622],{"class":93},".model, ",[76,114624,30893],{"class":250},[76,114626,114627],{"class":93},".data)\n",[76,114629,114630],{"class":78,"line":16734},[76,114631,2472],{"emptyLinePlaceholder":125},[76,114633,114634,114636,114639,114641,114643,114646,114648,114650,114652,114654,114656,114658,114660,114662,114664,114666,114668],{"class":78,"line":16748},[76,114635,30915],{"class":250},[76,114637,114638],{"class":93},".data.qpos[:] ",[76,114640,247],{"class":89},[76,114642,38943],{"class":250},[76,114644,114645],{"class":93},".np_random.uniform(",[76,114647,113803],{"class":5288},[76,114649,113806],{"class":89},[76,114651,86280],{"class":250},[76,114653,12507],{"class":93},[76,114655,113813],{"class":5288},[76,114657,247],{"class":89},[76,114659,86280],{"class":250},[76,114661,12507],{"class":93},[76,114663,31566],{"class":5288},[76,114665,247],{"class":89},[76,114667,30893],{"class":250},[76,114669,114670],{"class":93},".model.nq)\n",[76,114672,114673,114675,114678,114680],{"class":78,"line":16768},[76,114674,30915],{"class":250},[76,114676,114677],{"class":93},".data.qvel[:] ",[76,114679,247],{"class":89},[76,114681,104802],{"class":250},[76,114683,114684,114687,114689,114691,114693],{"class":78,"line":16774},[76,114685,114686],{"class":93},"        mujoco.mj_forward(",[76,114688,30893],{"class":250},[76,114690,114622],{"class":93},[76,114692,30893],{"class":250},[76,114694,114627],{"class":93},[76,114696,114697],{"class":78,"line":16785},[76,114698,2472],{"emptyLinePlaceholder":125},[76,114700,114701,114703,114705,114707],{"class":78,"line":16808},[76,114702,30915],{"class":250},[76,114704,113747],{"class":93},[76,114706,247],{"class":89},[76,114708,47403],{"class":250},[76,114710,114711,114713,114715],{"class":78,"line":16830},[76,114712,14824],{"class":89},[76,114714,38943],{"class":250},[76,114716,114717],{"class":93},"._get_obs(), {}\n",[76,114719,114720],{"class":78,"line":16835},[76,114721,2472],{"emptyLinePlaceholder":125},[76,114723,114724,114726,114729],{"class":78,"line":16841},[76,114725,30871],{"class":89},[76,114727,114728],{"class":2035}," step",[76,114730,114731],{"class":93},"(self, action):\n",[76,114733,114734,114736,114738,114741,114743,114745],{"class":78,"line":16855},[76,114735,110263],{"class":93},[76,114737,247],{"class":89},[76,114739,114740],{"class":93}," np.asarray(action, ",[76,114742,93570],{"class":5288},[76,114744,247],{"class":89},[76,114746,113837],{"class":93},[76,114748,114749,114751,114753,114755,114757,114760,114762],{"class":78,"line":16868},[76,114750,110263],{"class":93},[76,114752,247],{"class":89},[76,114754,107488],{"class":93},[76,114756,30893],{"class":250},[76,114758,114759],{"class":93},".action_space.low, ",[76,114761,30893],{"class":250},[76,114763,114764],{"class":93},".action_space.high)\n",[76,114766,114767],{"class":78,"line":16873},[76,114768,2472],{"emptyLinePlaceholder":125},[76,114770,114771,114773,114776,114778],{"class":78,"line":16887},[76,114772,30915],{"class":250},[76,114774,114775],{"class":93},".data.ctrl[:] ",[76,114777,247],{"class":89},[76,114779,107511],{"class":93},[76,114781,114782,114784,114786,114788,114790,114792,114794],{"class":78,"line":16892},[76,114783,3475],{"class":89},[76,114785,101542],{"class":93},[76,114787,26116],{"class":89},[76,114789,32513],{"class":250},[76,114791,202],{"class":93},[76,114793,30893],{"class":250},[76,114795,114796],{"class":93},".frame_skip):\n",[76,114798,114799,114802,114804,114806,114808],{"class":78,"line":16898},[76,114800,114801],{"class":93},"            mujoco.mj_step(",[76,114803,30893],{"class":250},[76,114805,114622],{"class":93},[76,114807,30893],{"class":250},[76,114809,114627],{"class":93},[76,114811,114812],{"class":78,"line":16903},[76,114813,2472],{"emptyLinePlaceholder":125},[76,114815,114816,114818,114820,114822],{"class":78,"line":16917},[76,114817,30915],{"class":250},[76,114819,113747],{"class":93},[76,114821,9549],{"class":89},[76,114823,55769],{"class":250},[76,114825,114826],{"class":78,"line":16922},[76,114827,2472],{"emptyLinePlaceholder":125},[76,114829,114830,114832,114834,114836],{"class":78,"line":16927},[76,114831,110223],{"class":93},[76,114833,247],{"class":89},[76,114835,38943],{"class":250},[76,114837,114838],{"class":93},"._get_obs()\n",[76,114840,114841,114843,114845,114847],{"class":78,"line":16941},[76,114842,110328],{"class":93},[76,114844,247],{"class":89},[76,114846,38943],{"class":250},[76,114848,114849],{"class":93},"._get_reward()\n",[76,114851,114852],{"class":78,"line":16953},[76,114853,2472],{"emptyLinePlaceholder":125},[76,114855,114856,114858,114860,114862,114864,114866],{"class":78,"line":16958},[76,114857,112178],{"class":93},[76,114859,247],{"class":89},[76,114861,38943],{"class":250},[76,114863,114411],{"class":93},[76,114865,30893],{"class":250},[76,114867,114489],{"class":93},[76,114869,114870,114872,114874,114876,114878,114880],{"class":78,"line":16971},[76,114871,112191],{"class":93},[76,114873,247],{"class":89},[76,114875,38943],{"class":250},[76,114877,114411],{"class":93},[76,114879,30893],{"class":250},[76,114881,114504],{"class":93},[76,114883,114884,114886,114888,114890,114893,114895],{"class":78,"line":16976},[76,114885,114509],{"class":93},[76,114887,247],{"class":89},[76,114889,109838],{"class":250},[76,114891,114892],{"class":93},"(np.linalg.norm(tip ",[76,114894,112],{"class":89},[76,114896,114897],{"class":93}," target))\n",[76,114899,114900],{"class":78,"line":16981},[76,114901,2472],{"emptyLinePlaceholder":125},[76,114903,114904,114907,114909,114911,114913],{"class":78,"line":16986},[76,114905,114906],{"class":93},"        terminated ",[76,114908,247],{"class":89},[76,114910,113730],{"class":93},[76,114912,1109],{"class":89},[76,114914,113735],{"class":250},[76,114916,114917,114920,114922,114924,114926,114928,114930],{"class":78,"line":16999},[76,114918,114919],{"class":93},"        truncated ",[76,114921,247],{"class":89},[76,114923,38943],{"class":250},[76,114925,113747],{"class":93},[76,114927,1782],{"class":89},[76,114929,38943],{"class":250},[76,114931,113754],{"class":93},[76,114933,114934,114937,114939,114941,114944],{"class":78,"line":17004},[76,114935,114936],{"class":93},"        info ",[76,114938,247],{"class":89},[76,114940,4520],{"class":93},[76,114942,114943],{"class":305},"\"distance\"",[76,114945,114946],{"class":93},": dist}\n",[76,114948,114949,114951],{"class":78,"line":32703},[76,114950,14824],{"class":89},[76,114952,114953],{"class":93}," obs, reward, terminated, truncated, info\n",[76,114955,114956],{"class":78,"line":32709},[76,114957,2472],{"emptyLinePlaceholder":125},[76,114959,114960],{"class":78,"line":32715},[76,114961,2472],{"emptyLinePlaceholder":125},[76,114963,114964,114966,114968,114970,114972],{"class":78,"line":32721},[76,114965,32017],{"class":89},[76,114967,2045],{"class":2035},[76,114969,101439],{"class":93},[76,114971,95755],{"class":250},[76,114973,3811],{"class":93},[76,114975,114976,114979,114981],{"class":78,"line":32727},[76,114977,114978],{"class":93},"    env ",[76,114980,247],{"class":89},[76,114982,114983],{"class":93}," ReacherEnv()\n",[76,114985,114986,114989,114991,114994,114996,114998,115000],{"class":78,"line":32738},[76,114987,114988],{"class":93},"    obs, info ",[76,114990,247],{"class":89},[76,114992,114993],{"class":93}," env.reset(",[76,114995,114607],{"class":5288},[76,114997,247],{"class":89},[76,114999,392],{"class":250},[76,115001,208],{"class":93},[76,115003,115004,115006,115008,115011],{"class":78,"line":32744},[76,115005,31369],{"class":250},[76,115007,202],{"class":93},[76,115009,115010],{"class":305},"\"initial obs shape:\"",[76,115012,115013],{"class":93},", obs.shape)\n",[76,115015,115016,115018,115020,115023],{"class":78,"line":32764},[76,115017,31369],{"class":250},[76,115019,202],{"class":93},[76,115021,115022],{"class":305},"\"initial info:\"",[76,115024,115025],{"class":93},", info)\n",[76,115027,115028],{"class":78,"line":32770},[76,115029,2472],{"emptyLinePlaceholder":125},[76,115031,115032,115034,115036],{"class":78,"line":32781},[76,115033,110194],{"class":93},[76,115035,247],{"class":89},[76,115037,104802],{"class":250},[76,115039,115040,115042,115044,115046,115048,115050,115052],{"class":78,"line":32787},[76,115041,3273],{"class":89},[76,115043,31686],{"class":93},[76,115045,26116],{"class":89},[76,115047,32513],{"class":250},[76,115049,202],{"class":93},[76,115051,899],{"class":250},[76,115053,30856],{"class":93},[76,115055,115056,115058,115060],{"class":78,"line":32793},[76,115057,110263],{"class":93},[76,115059,247],{"class":89},[76,115061,115062],{"class":93}," env.action_space.sample()\n",[76,115064,115065,115068,115070],{"class":78,"line":32799},[76,115066,115067],{"class":93},"        obs, reward, terminated, truncated, info ",[76,115069,247],{"class":89},[76,115071,113456],{"class":93},[76,115073,115074,115076,115078],{"class":78,"line":32805},[76,115075,110338],{"class":93},[76,115077,9549],{"class":89},[76,115079,110343],{"class":93},[76,115081,115082,115084,115086,115088,115090,115093,115095,115097,115100,115102,115104,115107,115109,115111,115114,115116,115118,115120],{"class":78,"line":32811},[76,115083,32521],{"class":250},[76,115085,202],{"class":93},[76,115087,110372],{"class":305},[76,115089,110375],{"class":93},[76,115091,115092],{"class":305},"\"reward:\"",[76,115094,12507],{"class":93},[76,115096,32088],{"class":250},[76,115098,115099],{"class":93},"(reward, ",[76,115101,272],{"class":250},[76,115103,110386],{"class":93},[76,115105,115106],{"class":305},"\"distance:\"",[76,115108,12507],{"class":93},[76,115110,32088],{"class":250},[76,115112,115113],{"class":93},"(info[",[76,115115,114943],{"class":305},[76,115117,112243],{"class":93},[76,115119,272],{"class":250},[76,115121,30567],{"class":93},[76,115123,115124,115126,115129,115132],{"class":78,"line":32817},[76,115125,2569],{"class":89},[76,115127,115128],{"class":93}," terminated ",[76,115130,115131],{"class":89},"or",[76,115133,115134],{"class":93}," truncated:\n",[76,115136,115137],{"class":78,"line":32823},[76,115138,115139],{"class":89},"            break\n",[76,115141,115142],{"class":78,"line":32843},[76,115143,2472],{"emptyLinePlaceholder":125},[76,115145,115146,115148,115150,115152,115154,115156,115158,115160],{"class":78,"line":32849},[76,115147,31369],{"class":250},[76,115149,202],{"class":93},[76,115151,110417],{"class":305},[76,115153,12507],{"class":93},[76,115155,32088],{"class":250},[76,115157,110424],{"class":93},[76,115159,272],{"class":250},[76,115161,30567],{"class":93},[76,115163,115164],{"class":78,"line":32865},[76,115165,2472],{"emptyLinePlaceholder":125},[76,115167,115168],{"class":78,"line":32871},[76,115169,2472],{"emptyLinePlaceholder":125},[76,115171,115172,115174,115176,115178,115180],{"class":78,"line":32885},[76,115173,1603],{"class":89},[76,115175,31290],{"class":250},[76,115177,101600],{"class":89},[76,115179,101603],{"class":305},[76,115181,3811],{"class":93},[76,115183,115184],{"class":78,"line":32891},[76,115185,101610],{"class":93},[14,115187,103611],{},[67,115189,115191],{"className":23894,"code":115190,"language":23896,"meta":58,"style":58},"touch ch8_gym_env.py\n",[73,115192,115193],{"__ignoreMap":58},[76,115194,115195,115197],{"class":78,"line":79},[76,115196,101324],{"class":2035},[76,115198,115199],{"class":305}," ch8_gym_env.py\n",[14,115201,110485],{},[67,115203,115205],{"className":23894,"code":115204,"language":23896,"meta":58,"style":58},"python ch8_gym_env.py\n",[73,115206,115207],{"__ignoreMap":58},[76,115208,115209,115211],{"class":78,"line":79},[76,115210,71],{"class":2035},[76,115212,115199],{"class":305},[169,115214,101613],{"id":101613},[14,115216,115217],{},"继承 Gymnasium 环境：",[67,115219,115221],{"className":69,"code":115220,"language":71,"meta":58,"style":58},"class ReacherEnv(gym.Env):\n",[73,115222,115223],{"__ignoreMap":58},[76,115224,115225,115227,115229,115231,115233,115235,115237],{"class":78,"line":79},[76,115226,14766],{"class":89},[76,115228,114098],{"class":2035},[76,115230,202],{"class":93},[76,115232,113581],{"class":2035},[76,115234,757],{"class":93},[76,115236,114107],{"class":2035},[76,115238,30856],{"class":93},[14,115240,115241],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115243,115244],{},"初始化模型：",[67,115246,115248],{"className":69,"code":115247,"language":71,"meta":58,"style":58},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[73,115249,115250,115264],{"__ignoreMap":58},[76,115251,115252,115254,115256,115258,115260,115262],{"class":78,"line":79},[76,115253,30893],{"class":250},[76,115255,114158],{"class":93},[76,115257,247],{"class":89},[76,115259,101453],{"class":93},[76,115261,101355],{"class":250},[76,115263,208],{"class":93},[76,115265,115266,115268,115270,115272,115274,115276],{"class":78,"line":86},[76,115267,30893],{"class":250},[76,115269,114173],{"class":93},[76,115271,247],{"class":89},[76,115273,114178],{"class":93},[76,115275,30893],{"class":250},[76,115277,114183],{"class":93},[14,115279,115280,115281,115283],{},"这和前面章节一样，只是现在放到了类的 ",[73,115282,30899],{}," 里。",[14,115285,115286],{},"缓存 site ID：",[67,115288,115290],{"className":69,"code":115289,"language":71,"meta":58,"style":58},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[73,115291,115292,115306],{"__ignoreMap":58},[76,115293,115294,115296,115298,115300,115302,115304],{"class":78,"line":79},[76,115295,30893],{"class":250},[76,115297,114194],{"class":93},[76,115299,247],{"class":89},[76,115301,114199],{"class":93},[76,115303,89624],{"class":250},[76,115305,208],{"class":93},[76,115307,115308,115310,115312,115314,115316,115318],{"class":78,"line":86},[76,115309,30893],{"class":250},[76,115311,114215],{"class":93},[76,115313,247],{"class":89},[76,115315,114199],{"class":93},[76,115317,89624],{"class":250},[76,115319,208],{"class":93},[14,115321,115322],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115324,115325],{},"reset：",[67,115327,115329],{"className":69,"code":115328,"language":71,"meta":58,"style":58},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[73,115330,115331],{"__ignoreMap":58},[76,115332,115333,115335,115337,115339,115341,115343,115345,115347,115349,115351,115353,115355,115357,115359,115361,115363,115365],{"class":78,"line":79},[76,115334,32017],{"class":89},[76,115336,114563],{"class":2035},[76,115338,114566],{"class":93},[76,115340,655],{"class":89},[76,115342,114571],{"class":93},[76,115344,205],{"class":250},[76,115346,25182],{"class":89},[76,115348,39003],{"class":250},[76,115350,13636],{"class":89},[76,115352,39003],{"class":250},[76,115354,114584],{"class":93},[76,115356,114587],{"class":250},[76,115358,25182],{"class":89},[76,115360,39003],{"class":250},[76,115362,13636],{"class":89},[76,115364,39003],{"class":250},[76,115366,30856],{"class":93},[14,115368,115369,115371],{},[73,115370,70126],{}," 做四件事：",[152,115373,115374,115377,115380,115383],{},[155,115375,115376],{},"设置随机种子。",[155,115378,115379],{},"重置 MuJoCo data。",[155,115381,115382],{},"随机初始化关节角。",[155,115384,115385],{},"返回初始观测和 info。",[14,115387,115388],{},"step：",[67,115390,115392],{"className":69,"code":115391,"language":71,"meta":58,"style":58},"def step(self, action):\n",[73,115393,115394],{"__ignoreMap":58},[76,115395,115396,115398,115400],{"class":78,"line":79},[76,115397,32017],{"class":89},[76,115399,114728],{"class":2035},[76,115401,114731],{"class":93},[14,115403,115404,115406],{},[73,115405,107175],{}," 做六件事：",[152,115408,115409,115412,115418,115421,115424,115427],{},[155,115410,115411],{},"检查并裁剪 action。",[155,115413,115414,115415,28458],{},"写入 ",[73,115416,115417],{},"self.data.ctrl",[155,115419,115420],{},"连续推进若干个 MuJoCo 物理步。",[155,115422,115423],{},"计算新观测。",[155,115425,115426],{},"计算奖励和结束条件。",[155,115428,115429],{},"返回 Gymnasium 标准五元组。",[169,115431,101749],{"id":101749},[67,115433,115435],{"className":69,"code":115434,"language":71,"meta":58,"style":58},"import gymnasium as gym\n",[73,115436,115437],{"__ignoreMap":58},[76,115438,115439,115441,115443,115445],{"class":78,"line":79},[76,115440,90],{"class":89},[76,115442,113936],{"class":93},[76,115444,31453],{"class":89},[76,115446,113941],{"class":93},[14,115448,115449,115450,115452,115453,115456],{},"导入 Gymnasium，并起别名 ",[73,115451,113581],{},"。后面写 ",[73,115454,115455],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[67,115458,115460],{"className":69,"code":115459,"language":71,"meta":58,"style":58},"from gymnasium import spaces\n",[73,115461,115462],{"__ignoreMap":58},[76,115463,115464,115466,115468,115470],{"class":78,"line":79},[76,115465,30807],{"class":89},[76,115467,113936],{"class":93},[76,115469,90],{"class":89},[76,115471,113968],{"class":93},[14,115473,115474,115475,115478],{},"导入空间定义工具。",[73,115476,115477],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[67,115480,115481],{"className":69,"code":115220,"language":71,"meta":58,"style":58},[73,115482,115483],{"__ignoreMap":58},[76,115484,115485,115487,115489,115491,115493,115495,115497],{"class":78,"line":79},[76,115486,14766],{"class":89},[76,115488,114098],{"class":2035},[76,115490,202],{"class":93},[76,115492,113581],{"class":2035},[76,115494,757],{"class":93},[76,115496,114107],{"class":2035},[76,115498,30856],{"class":93},[14,115500,115501,115502,115505,115506,115508,115509,101059,115511,115513],{},"定义一个类，名字叫 ",[73,115503,115504],{},"ReacherEnv","。括号里的 ",[73,115507,115455],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[73,115510,70126],{},[73,115512,107175],{}," 这两个核心方法。",[67,115515,115517],{"className":69,"code":115516,"language":71,"meta":58,"style":58},"metadata = {\"render_modes\": []}\n",[73,115518,115519],{"__ignoreMap":58},[76,115520,115521,115524,115526,115528,115530],{"class":78,"line":79},[76,115522,115523],{"class":93},"metadata ",[76,115525,247],{"class":89},[76,115527,4520],{"class":93},[76,115529,114121],{"class":305},[76,115531,114124],{"class":93},[14,115533,115534],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[67,115536,115538],{"className":69,"code":115537,"language":71,"meta":58,"style":58},"def __init__(self) -> None:\n",[73,115539,115540],{"__ignoreMap":58},[76,115541,115542,115544,115546,115548,115550],{"class":78,"line":79},[76,115543,32017],{"class":89},[76,115545,30874],{"class":250},[76,115547,114137],{"class":93},[76,115549,95755],{"class":250},[76,115551,3811],{"class":93},[14,115553,115554,115556,115557,28458],{},[73,115555,30899],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[73,115558,115559],{},"env = ReacherEnv()",[67,115561,115563],{"className":69,"code":115562,"language":71,"meta":58,"style":58},"super().__init__()\n",[73,115564,115565],{"__ignoreMap":58},[76,115566,115567,115570,115572,115574],{"class":78,"line":79},[76,115568,115569],{"class":250},"super",[76,115571,17333],{"class":93},[76,115573,30899],{"class":250},[76,115575,2048],{"class":93},[14,115577,115578,115579,115581],{},"调用父类 ",[73,115580,115455],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[67,115583,115584],{"className":69,"code":115247,"language":71,"meta":58,"style":58},[73,115585,115586,115600],{"__ignoreMap":58},[76,115587,115588,115590,115592,115594,115596,115598],{"class":78,"line":79},[76,115589,30893],{"class":250},[76,115591,114158],{"class":93},[76,115593,247],{"class":89},[76,115595,101453],{"class":93},[76,115597,101355],{"class":250},[76,115599,208],{"class":93},[76,115601,115602,115604,115606,115608,115610,115612],{"class":78,"line":86},[76,115603,30893],{"class":250},[76,115605,114173],{"class":93},[76,115607,247],{"class":89},[76,115609,114178],{"class":93},[76,115611,30893],{"class":250},[76,115613,114183],{"class":93},[14,115615,115616,115617,115619,115620,101059,115623,115626],{},"把 MuJoCo 模型和状态保存到 ",[73,115618,30893],{}," 上。",[73,115621,115622],{},"self.model",[73,115624,115625],{},"self.data"," 表示这个环境对象自己的模型和状态。",[67,115628,115629],{"className":69,"code":115289,"language":71,"meta":58,"style":58},[73,115630,115631,115645],{"__ignoreMap":58},[76,115632,115633,115635,115637,115639,115641,115643],{"class":78,"line":79},[76,115634,30893],{"class":250},[76,115636,114194],{"class":93},[76,115638,247],{"class":89},[76,115640,114199],{"class":93},[76,115642,89624],{"class":250},[76,115644,208],{"class":93},[76,115646,115647,115649,115651,115653,115655,115657],{"class":78,"line":86},[76,115648,30893],{"class":250},[76,115650,114215],{"class":93},[76,115652,247],{"class":89},[76,115654,114199],{"class":93},[76,115656,89624],{"class":250},[76,115658,208],{"class":93},[14,115660,115661,115662,101059,115665,115668],{},"提前查好 tip 和 target 的 site ID。这样 ",[73,115663,115664],{},"_get_obs",[73,115666,115667],{},"_get_reward"," 里就不用每次按名字查找。",[67,115670,115672],{"className":69,"code":115671,"language":71,"meta":58,"style":58},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[73,115673,115674,115684,115694],{"__ignoreMap":58},[76,115675,115676,115678,115680,115682],{"class":78,"line":79},[76,115677,30893],{"class":250},[76,115679,113908],{"class":93},[76,115681,247],{"class":89},[76,115683,54497],{"class":250},[76,115685,115686,115688,115690,115692],{"class":78,"line":86},[76,115687,30893],{"class":250},[76,115689,114287],{"class":93},[76,115691,247],{"class":89},[76,115693,114292],{"class":250},[76,115695,115696,115698,115700,115702],{"class":78,"line":97},[76,115697,30893],{"class":250},[76,115699,113747],{"class":93},[76,115701,247],{"class":89},[76,115703,47403],{"class":250},[14,115705,115706,115709,115710,115713,115714,115717],{},[73,115707,115708],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[73,115711,115712],{},"max_steps"," 是一个 episode 最多运行多少步。",[73,115715,115716],{},"steps"," 记录当前 episode 已经走了多少步。",[67,115719,115720],{"className":69,"code":113786,"language":71,"meta":58,"style":58},[73,115721,115722],{"__ignoreMap":58},[76,115723,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762],{"class":78,"line":79},[76,115725,30893],{"class":250},[76,115727,113795],{"class":93},[76,115729,247],{"class":89},[76,115731,113800],{"class":93},[76,115733,113803],{"class":5288},[76,115735,113806],{"class":89},[76,115737,102444],{"class":250},[76,115739,12507],{"class":93},[76,115741,113813],{"class":5288},[76,115743,247],{"class":89},[76,115745,102444],{"class":250},[76,115747,12507],{"class":93},[76,115749,96032],{"class":5288},[76,115751,247],{"class":89},[76,115753,202],{"class":93},[76,115755,278],{"class":250},[76,115757,113830],{"class":93},[76,115759,93570],{"class":5288},[76,115761,247],{"class":89},[76,115763,113837],{"class":93},[14,115765,115766,115767,115770,115771,101059,115774,115777],{},"定义动作空间。",[73,115768,115769],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[73,115772,115773],{},"low=-1.0",[73,115775,115776],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[67,115779,115780],{"className":69,"code":113847,"language":71,"meta":58,"style":58},[73,115781,115782],{"__ignoreMap":58},[76,115783,115784,115786,115788,115790,115792,115794,115796,115798,115800,115802,115804,115806,115808,115810,115812,115814,115816,115818],{"class":78,"line":79},[76,115785,30893],{"class":250},[76,115787,113856],{"class":93},[76,115789,247],{"class":89},[76,115791,113800],{"class":93},[76,115793,113803],{"class":5288},[76,115795,113806],{"class":89},[76,115797,113867],{"class":93},[76,115799,113813],{"class":5288},[76,115801,247],{"class":89},[76,115803,113867],{"class":93},[76,115805,96032],{"class":5288},[76,115807,247],{"class":89},[76,115809,202],{"class":93},[76,115811,646],{"class":250},[76,115813,113830],{"class":93},[76,115815,93570],{"class":5288},[76,115817,247],{"class":89},[76,115819,113837],{"class":93},[14,115821,115822,115823,115826,115827,115830],{},"定义观测空间。",[73,115824,115825],{},"shape=(10,)"," 表示观测是 10 个数。",[73,115828,115829],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[67,115832,115834],{"className":69,"code":115833,"language":71,"meta":58,"style":58},"def _get_obs(self) -> np.ndarray:\n",[73,115835,115836],{"__ignoreMap":58},[76,115837,115838,115840,115842],{"class":78,"line":79},[76,115839,32017],{"class":89},[76,115841,114397],{"class":2035},[76,115843,114400],{"class":93},[14,115845,115846,115847,115849],{},"定义内部函数，用来生成观测。函数名前面的 ",[73,115848,1191],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[67,115851,115853],{"className":69,"code":115852,"language":71,"meta":58,"style":58},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[73,115854,115855,115869],{"__ignoreMap":58},[76,115856,115857,115859,115861,115863,115865,115867],{"class":78,"line":79},[76,115858,111609],{"class":93},[76,115860,247],{"class":89},[76,115862,38943],{"class":250},[76,115864,114411],{"class":93},[76,115866,30893],{"class":250},[76,115868,114416],{"class":93},[76,115870,115871,115873,115875,115877,115879,115881],{"class":78,"line":86},[76,115872,111619],{"class":93},[76,115874,247],{"class":89},[76,115876,38943],{"class":250},[76,115878,114411],{"class":93},[76,115880,30893],{"class":250},[76,115882,114431],{"class":93},[14,115884,115885],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[67,115887,115889],{"className":69,"code":115888,"language":71,"meta":58,"style":58},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[73,115890,115891,115907],{"__ignoreMap":58},[76,115892,115893,115895,115897,115899,115901,115903,115905],{"class":78,"line":79},[76,115894,110895],{"class":93},[76,115896,247],{"class":89},[76,115898,114440],{"class":93},[76,115900,30893],{"class":250},[76,115902,114445],{"class":93},[76,115904,30893],{"class":250},[76,115906,114450],{"class":93},[76,115908,115909,115911],{"class":78,"line":86},[76,115910,17118],{"class":89},[76,115912,114457],{"class":93},[14,115914,115915,115916,115919,115920,115922],{},"拼接观测，并转换成 ",[73,115917,115918],{},"float32","。很多强化学习库默认使用 ",[73,115921,115918],{},"，所以这里主动转换。",[67,115924,115925],{"className":69,"code":115328,"language":71,"meta":58,"style":58},[73,115926,115927],{"__ignoreMap":58},[76,115928,115929,115931,115933,115935,115937,115939,115941,115943,115945,115947,115949,115951,115953,115955,115957,115959,115961],{"class":78,"line":79},[76,115930,32017],{"class":89},[76,115932,114563],{"class":2035},[76,115934,114566],{"class":93},[76,115936,655],{"class":89},[76,115938,114571],{"class":93},[76,115940,205],{"class":250},[76,115942,25182],{"class":89},[76,115944,39003],{"class":250},[76,115946,13636],{"class":89},[76,115948,39003],{"class":250},[76,115950,114584],{"class":93},[76,115952,114587],{"class":250},[76,115954,25182],{"class":89},[76,115956,39003],{"class":250},[76,115958,13636],{"class":89},[76,115960,39003],{"class":250},[76,115962,30856],{"class":93},[14,115964,115965,115966,115968,115969,115972],{},"定义 reset。",[73,115967,114607],{}," 用来控制随机数，保证实验可以复现。",[73,115970,115971],{},"options"," 用来接收额外配置，本章暂时不用。",[67,115974,115976],{"className":69,"code":115975,"language":71,"meta":58,"style":58},"super().reset(seed=seed)\n",[73,115977,115978],{"__ignoreMap":58},[76,115979,115980,115982,115984,115986,115988],{"class":78,"line":79},[76,115981,115569],{"class":250},[76,115983,114604],{"class":93},[76,115985,114607],{"class":5288},[76,115987,247],{"class":89},[76,115989,114612],{"class":93},[14,115991,115992,115993,115996],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[73,115994,115995],{},"self.np_random"," 生成可复现的随机数。",[67,115998,116000],{"className":69,"code":115999,"language":71,"meta":58,"style":58},"mujoco.mj_resetData(self.model, self.data)\n",[73,116001,116002],{"__ignoreMap":58},[76,116003,116004,116007,116009,116011,116013],{"class":78,"line":79},[76,116005,116006],{"class":93},"mujoco.mj_resetData(",[76,116008,30893],{"class":250},[76,116010,114622],{"class":93},[76,116012,30893],{"class":250},[76,116014,114627],{"class":93},[14,116016,116017],{},"把 MuJoCo 状态重置到默认状态。",[67,116019,116021],{"className":69,"code":116020,"language":71,"meta":58,"style":58},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[73,116022,116023],{"__ignoreMap":58},[76,116024,116025,116027,116029,116031,116033,116035,116037,116039,116041,116043,116045,116047,116049,116051,116053,116055,116057],{"class":78,"line":79},[76,116026,30893],{"class":250},[76,116028,114638],{"class":93},[76,116030,247],{"class":89},[76,116032,38943],{"class":250},[76,116034,114645],{"class":93},[76,116036,113803],{"class":5288},[76,116038,113806],{"class":89},[76,116040,86280],{"class":250},[76,116042,12507],{"class":93},[76,116044,113813],{"class":5288},[76,116046,247],{"class":89},[76,116048,86280],{"class":250},[76,116050,12507],{"class":93},[76,116052,31566],{"class":5288},[76,116054,247],{"class":89},[76,116056,30893],{"class":250},[76,116058,114670],{"class":93},[14,116060,115382,116061,116064,116065,116068,116069,116071],{},[73,116062,116063],{},"[:]"," 表示修改整个数组。",[73,116066,116067],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[73,116070,102191],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[67,116073,116075],{"className":69,"code":116074,"language":71,"meta":58,"style":58},"self.data.qvel[:] = 0.0\n",[73,116076,116077],{"__ignoreMap":58},[76,116078,116079,116081,116083,116085],{"class":78,"line":79},[76,116080,30893],{"class":250},[76,116082,114677],{"class":93},[76,116084,247],{"class":89},[76,116086,104802],{"class":250},[14,116088,116089],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[67,116091,116093],{"className":69,"code":116092,"language":71,"meta":58,"style":58},"self.steps = 0\nreturn self._get_obs(), {}\n",[73,116094,116095,116105],{"__ignoreMap":58},[76,116096,116097,116099,116101,116103],{"class":78,"line":79},[76,116098,30893],{"class":250},[76,116100,113747],{"class":93},[76,116102,247],{"class":89},[76,116104,47403],{"class":250},[76,116106,116107,116109,116111],{"class":78,"line":86},[76,116108,17118],{"class":89},[76,116110,38943],{"class":250},[76,116112,114717],{"class":93},[14,116114,116115],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[67,116117,116118],{"className":69,"code":115391,"language":71,"meta":58,"style":58},[73,116119,116120],{"__ignoreMap":58},[76,116121,116122,116124,116126],{"class":78,"line":79},[76,116123,32017],{"class":89},[76,116125,114728],{"class":2035},[76,116127,114731],{"class":93},[14,116129,116130],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[67,116132,116134],{"className":69,"code":116133,"language":71,"meta":58,"style":58},"action = np.asarray(action, dtype=np.float32)\n",[73,116135,116136],{"__ignoreMap":58},[76,116137,116138,116140,116142,116144,116146,116148],{"class":78,"line":79},[76,116139,107483],{"class":93},[76,116141,247],{"class":89},[76,116143,114740],{"class":93},[76,116145,93570],{"class":5288},[76,116147,247],{"class":89},[76,116149,113837],{"class":93},[14,116151,116152,116153,28458],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[73,116154,115918],{},[67,116156,116158],{"className":69,"code":116157,"language":71,"meta":58,"style":58},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[73,116159,116160],{"__ignoreMap":58},[76,116161,116162,116164,116166,116168,116170,116172,116174],{"class":78,"line":79},[76,116163,107483],{"class":93},[76,116165,247],{"class":89},[76,116167,107488],{"class":93},[76,116169,30893],{"class":250},[76,116171,114759],{"class":93},[76,116173,30893],{"class":250},[76,116175,114764],{"class":93},[14,116177,116178],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[67,116180,116182],{"className":69,"code":116181,"language":71,"meta":58,"style":58},"self.data.ctrl[:] = action\n",[73,116183,116184],{"__ignoreMap":58},[76,116185,116186,116188,116190,116192],{"class":78,"line":79},[76,116187,30893],{"class":250},[76,116189,114775],{"class":93},[76,116191,247],{"class":89},[76,116193,107511],{"class":93},[14,116195,116196],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[67,116198,116200],{"className":69,"code":116199,"language":71,"meta":58,"style":58},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[73,116201,116202,116218],{"__ignoreMap":58},[76,116203,116204,116206,116208,116210,116212,116214,116216],{"class":78,"line":79},[76,116205,3097],{"class":89},[76,116207,101542],{"class":93},[76,116209,26116],{"class":89},[76,116211,32513],{"class":250},[76,116213,202],{"class":93},[76,116215,30893],{"class":250},[76,116217,114796],{"class":93},[76,116219,116220,116223,116225,116227,116229],{"class":78,"line":86},[76,116221,116222],{"class":93},"    mujoco.mj_step(",[76,116224,30893],{"class":250},[76,116226,114622],{"class":93},[76,116228,30893],{"class":250},[76,116230,114627],{"class":93},[14,116232,116233,116234,116237,116238,116240,116241,28458],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[73,116235,116236],{},"frame_skip=5","，所以外部调用一次 ",[73,116239,113918],{},"，内部实际执行 5 次 ",[73,116242,101256],{},[67,116244,116246],{"className":69,"code":116245,"language":71,"meta":58,"style":58},"self.steps += 1\n",[73,116247,116248],{"__ignoreMap":58},[76,116249,116250,116252,116254,116256],{"class":78,"line":79},[76,116251,30893],{"class":250},[76,116253,113747],{"class":93},[76,116255,9549],{"class":89},[76,116257,55769],{"class":250},[14,116259,116260],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[67,116262,116264],{"className":69,"code":116263,"language":71,"meta":58,"style":58},"obs = self._get_obs()\nreward = self._get_reward()\n",[73,116265,116266,116276],{"__ignoreMap":58},[76,116267,116268,116270,116272,116274],{"class":78,"line":79},[76,116269,110895],{"class":93},[76,116271,247],{"class":89},[76,116273,38943],{"class":250},[76,116275,114838],{"class":93},[76,116277,116278,116280,116282,116284],{"class":78,"line":86},[76,116279,111046],{"class":93},[76,116281,247],{"class":89},[76,116283,38943],{"class":250},[76,116285,114849],{"class":93},[14,116287,116288],{},"计算新的观测和奖励。",[67,116290,116292],{"className":69,"code":116291,"language":71,"meta":58,"style":58},"dist = float(np.linalg.norm(tip - target))\n",[73,116293,116294],{"__ignoreMap":58},[76,116295,116296,116298,116300,116302,116304,116306],{"class":78,"line":79},[76,116297,111637],{"class":93},[76,116299,247],{"class":89},[76,116301,109838],{"class":250},[76,116303,114892],{"class":93},[76,116305,112],{"class":89},[76,116307,114897],{"class":93},[14,116309,116310],{},"计算末端到目标的距离，并转换成 Python float。",[67,116312,116313],{"className":69,"code":113718,"language":71,"meta":58,"style":58},[73,116314,116315,116327],{"__ignoreMap":58},[76,116316,116317,116319,116321,116323,116325],{"class":78,"line":79},[76,116318,113725],{"class":93},[76,116320,247],{"class":89},[76,116322,113730],{"class":93},[76,116324,1109],{"class":89},[76,116326,113735],{"class":250},[76,116328,116329,116331,116333,116335,116337,116339,116341],{"class":78,"line":86},[76,116330,113740],{"class":93},[76,116332,247],{"class":89},[76,116334,38943],{"class":250},[76,116336,113747],{"class":93},[76,116338,1782],{"class":89},[76,116340,38943],{"class":250},[76,116342,113754],{"class":93},[14,116344,116345],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[67,116347,116349],{"className":69,"code":116348,"language":71,"meta":58,"style":58},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[73,116350,116351,116364],{"__ignoreMap":58},[76,116352,116353,116356,116358,116360,116362],{"class":78,"line":79},[76,116354,116355],{"class":93},"info ",[76,116357,247],{"class":89},[76,116359,4520],{"class":93},[76,116361,114943],{"class":305},[76,116363,114946],{"class":93},[76,116365,116366,116368],{"class":78,"line":86},[76,116367,17118],{"class":89},[76,116369,114953],{"class":93},[14,116371,116372,116375],{},[73,116373,116374],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[67,116377,116379],{"className":69,"code":116378,"language":71,"meta":58,"style":58},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[73,116380,116381,116390],{"__ignoreMap":58},[76,116382,116383,116386,116388],{"class":78,"line":79},[76,116384,116385],{"class":93},"env ",[76,116387,247],{"class":89},[76,116389,114983],{"class":93},[76,116391,116392,116394,116396,116398,116400,116402,116404],{"class":78,"line":86},[76,116393,113441],{"class":93},[76,116395,247],{"class":89},[76,116397,114993],{"class":93},[76,116399,114607],{"class":5288},[76,116401,247],{"class":89},[76,116403,392],{"class":250},[76,116405,208],{"class":93},[14,116407,116408,116409,116412],{},"创建环境并重置。",[73,116410,116411],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[67,116414,116416],{"className":69,"code":116415,"language":71,"meta":58,"style":58},"action = env.action_space.sample()\n",[73,116417,116418],{"__ignoreMap":58},[76,116419,116420,116422,116424],{"class":78,"line":79},[76,116421,107483],{"class":93},[76,116423,247],{"class":89},[76,116425,115062],{"class":93},[14,116427,116428],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[140,116430,102357],{"id":102356},[14,116432,105525],{},[67,116434,116437],{"className":116435,"code":116436,"language":5259,"meta":58},[5257],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[73,116438,116436],{"__ignoreMap":58},[14,116440,116441],{},"这个环境已经具备强化学习环境的基本结构。",[14,116443,116444],{},"主函数里使用随机动作：",[67,116446,116447],{"className":69,"code":116415,"language":71,"meta":58,"style":58},[73,116448,116449],{"__ignoreMap":58},[76,116450,116451,116453,116455],{"class":78,"line":79},[76,116452,107483],{"class":93},[76,116454,247],{"class":89},[76,116456,115062],{"class":93},[14,116458,116459],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[140,116461,102389],{"id":102388},[152,116463,116464,116467,116473,116482,116491,116500,116506],{},[155,116465,116466],{},"运行程序。",[155,116468,116469,116470,28458],{},"确认 ",[73,116471,116472],{},"obs.shape == (10,)",[155,116474,111222,116475,116478,116479,28458],{},[73,116476,116477],{},"env.action_space","，应类似 ",[73,116480,116481],{},"Box(-1.0, 1.0, (2,), float32)",[155,116483,105626,116484,116487,116488,28458],{},[73,116485,116486],{},"self.max_steps = 10","，确认环境会更快 ",[73,116489,116490],{},"truncated=True",[155,116492,102452,116493,102455,116496,116499],{},[73,116494,116495],{},"terminated = dist \u003C 0.05",[73,116497,116498],{},"dist \u003C 0.2","，观察是否更容易结束。",[155,116501,102452,116502,116505],{},[73,116503,116504],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[155,116507,116508,116509,116511,116512,116515],{},"在 ",[73,116510,116374],{}," 里加入 ",[73,116513,116514],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[140,116517,102494],{"id":102493},[169,116519,116521],{"id":116520},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116523,116524,116525,116527],{},"Gymnasium 的 ",[73,116526,107175],{}," 返回 5 个值:",[67,116529,116531],{"className":69,"code":116530,"language":71,"meta":58,"style":58},"obs, reward, terminated, truncated, info\n",[73,116532,116533],{"__ignoreMap":58},[76,116534,116535],{"class":78,"line":79},[76,116536,116530],{"class":93},[14,116538,116539],{},"不是旧 Gym 的 4 个值。",[169,116541,116543,116546],{"id":116542},"datactrl-action-维度错误",[73,116544,116545],{},"data.ctrl[:] = action"," 维度错误",[14,116548,102564],{},[67,116550,116552],{"className":69,"code":116551,"language":71,"meta":58,"style":58},"print(self.model.nu)\nprint(action.shape)\n",[73,116553,116554,116565],{"__ignoreMap":58},[76,116555,116556,116558,116560,116562],{"class":78,"line":79},[76,116557,30485],{"class":250},[76,116559,202],{"class":93},[76,116561,30893],{"class":250},[76,116563,116564],{"class":93},".model.nu)\n",[76,116566,116567,116569],{"class":78,"line":86},[76,116568,30485],{"class":250},[76,116570,116571],{"class":93},"(action.shape)\n",[14,116573,116574],{},"两者必须匹配。",[169,116576,116578],{"id":116577},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116580,102503],{},[67,116582,116584],{"className":69,"code":116583,"language":71,"meta":58,"style":58},"mujoco.mj_forward(self.model, self.data)\n",[73,116585,116586],{"__ignoreMap":58},[76,116587,116588,116591,116593,116595,116597],{"class":78,"line":79},[76,116589,116590],{"class":93},"mujoco.mj_forward(",[76,116592,30893],{"class":250},[76,116594,114622],{"class":93},[76,116596,30893],{"class":250},[76,116598,114627],{"class":93},[169,116600,116602,116604],{"id":116601},"observation_space-维度和-obs-不一致",[73,116603,113641],{}," 维度和 obs 不一致",[14,116606,102616],{},[67,116608,116610],{"className":69,"code":116609,"language":71,"meta":58,"style":58},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[73,116611,116612,116622,116629],{"__ignoreMap":58},[76,116613,116614,116616,116618,116620],{"class":78,"line":79},[76,116615,110895],{"class":93},[76,116617,247],{"class":89},[76,116619,38943],{"class":250},[76,116621,114838],{"class":93},[76,116623,116624,116626],{"class":78,"line":86},[76,116625,30485],{"class":250},[76,116627,116628],{"class":93},"(obs.shape)\n",[76,116630,116631,116633,116635,116637],{"class":78,"line":97},[76,116632,30485],{"class":250},[76,116634,202],{"class":93},[76,116636,30893],{"class":250},[76,116638,116639],{"class":93},".observation_space.shape)\n",[14,116641,116642],{},"两者必须一致。本章观测是：",[67,116644,116647],{"className":116645,"code":116646,"language":5259,"meta":58},[5257],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[73,116648,116646],{"__ignoreMap":58},[169,116650,116652],{"id":116651},"action-超过范围","action 超过范围",[14,116654,116655],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[67,116657,116658],{"className":69,"code":116157,"language":71,"meta":58,"style":58},[73,116659,116660],{"__ignoreMap":58},[76,116661,116662,116664,116666,116668,116670,116672,116674],{"class":78,"line":79},[76,116663,107483],{"class":93},[76,116665,247],{"class":89},[76,116667,107488],{"class":93},[76,116669,30893],{"class":250},[76,116671,114759],{"class":93},[76,116673,30893],{"class":250},[76,116675,114764],{"class":93},[14,116677,116678,116679,28458],{},"这能避免无效动作直接写入 ",[73,116680,101117],{},[169,116682,116684],{"id":116683},"忘记返回-info","忘记返回 info",[14,116686,116524,116687,101059,116689,116691],{},[73,116688,70126],{},[73,116690,107175],{}," 都会返回 info：",[67,116693,116694],{"className":69,"code":113434,"language":71,"meta":58,"style":58},[73,116695,116696,116704],{"__ignoreMap":58},[76,116697,116698,116700,116702],{"class":78,"line":79},[76,116699,113441],{"class":93},[76,116701,247],{"class":89},[76,116703,113446],{"class":93},[76,116705,116706,116708,116710],{"class":78,"line":86},[76,116707,113451],{"class":93},[76,116709,247],{"class":89},[76,116711,113456],{"class":93},[14,116713,116714,116715,28458],{},"即使暂时没有额外信息，也返回 ",[73,116716,32529],{},[140,116718,116720],{"id":116719},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116722,116723],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[152,116725,116726,116729,116732,116735,116738,116741],{},[155,116727,116728],{},"更稳定的 reward。",[155,116730,116731],{},"合理的 episode 长度。",[155,116733,116734],{},"可重复的随机目标采样。",[155,116736,116737],{},"render 接口。",[155,116739,116740],{},"环境注册代码。",[155,116742,116743],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116745,116746],{},"如果只是自己写训练循环，最小形式是：",[67,116748,116750],{"className":69,"code":116749,"language":71,"meta":58,"style":58},"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",[73,116751,116752,116760,116776,116780,116796,116805,116814,116824],{"__ignoreMap":58},[76,116753,116754,116756,116758],{"class":78,"line":79},[76,116755,116385],{"class":93},[76,116757,247],{"class":89},[76,116759,114983],{"class":93},[76,116761,116762,116764,116766,116768,116770,116772,116774],{"class":78,"line":86},[76,116763,113441],{"class":93},[76,116765,247],{"class":89},[76,116767,114993],{"class":93},[76,116769,114607],{"class":5288},[76,116771,247],{"class":89},[76,116773,392],{"class":250},[76,116775,208],{"class":93},[76,116777,116778],{"class":78,"line":97},[76,116779,2472],{"emptyLinePlaceholder":125},[76,116781,116782,116784,116786,116788,116790,116792,116794],{"class":78,"line":103},[76,116783,3097],{"class":89},[76,116785,101542],{"class":93},[76,116787,26116],{"class":89},[76,116789,32513],{"class":250},[76,116791,202],{"class":93},[76,116793,6482],{"class":250},[76,116795,30856],{"class":93},[76,116797,116798,116801,116803],{"class":78,"line":1273},[76,116799,116800],{"class":93},"    action ",[76,116802,247],{"class":89},[76,116804,115062],{"class":93},[76,116806,116807,116810,116812],{"class":78,"line":1287},[76,116808,116809],{"class":93},"    obs, reward, terminated, truncated, info ",[76,116811,247],{"class":89},[76,116813,113456],{"class":93},[76,116815,116816,116818,116820,116822],{"class":78,"line":1293},[76,116817,3173],{"class":89},[76,116819,115128],{"class":93},[76,116821,115131],{"class":89},[76,116823,115134],{"class":93},[76,116825,116826,116829,116831],{"class":78,"line":1384},[76,116827,116828],{"class":93},"        obs, info ",[76,116830,247],{"class":89},[76,116832,113446],{"class":93},[140,116834,116836],{"id":116835},"_9本章小结","9.本章小结",[14,116838,116839],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[67,116841,116844],{"className":116842,"code":116843,"language":5259,"meta":58},[5257],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[73,116845,116843],{"__ignoreMap":58},[14,116847,116848],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[117,116850,116851],{},"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":58,"searchDepth":86,"depth":86,"links":116853},[116854,116855,116856,116863,116867,116868,116869,116879,116880],{"id":100687,"depth":86,"text":100688},{"id":100810,"depth":86,"text":100811},{"id":101085,"depth":86,"text":101086,"children":116857},[116858,116860,116862],{"id":113665,"depth":97,"text":116859},"terminated 和 truncated 的区别",{"id":113768,"depth":97,"text":116861},"observation_space 和 action_space",{"id":113895,"depth":97,"text":113896},{"id":101293,"depth":86,"text":101294,"children":116864},[116865,116866],{"id":101613,"depth":97,"text":101613},{"id":101749,"depth":97,"text":101749},{"id":102356,"depth":86,"text":102357},{"id":102388,"depth":86,"text":102389},{"id":102493,"depth":86,"text":102494,"children":116870},[116871,116872,116874,116875,116877,116878],{"id":116520,"depth":97,"text":116521},{"id":116542,"depth":97,"text":116873},"data.ctrl[:] = action 维度错误",{"id":116577,"depth":97,"text":116578},{"id":116601,"depth":97,"text":116876},"observation_space 维度和 obs 不一致",{"id":116651,"depth":97,"text":116652},{"id":116683,"depth":97,"text":116684},{"id":116719,"depth":86,"text":116720},{"id":116835,"depth":86,"text":116836},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113418,"description":58},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116887,"title":116888,"body":116889,"description":117312,"extension":123,"meta":117313,"navigation":125,"path":117314,"seo":117315,"stem":117316,"__hash__":117317},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116890,"toc":117302},[116891,116895,116898,116901,116921,116927,116933,116943,116946,116949,116969,116972,116976,116979,116985,116988,117002,117005,117008,117082,117085,117091,117094,117117,117120,117170,117173,117179,117182,117185,117188,117207,117210,117216,117219,117222,117225,117245,117248,117251,117254,117299],[10,116892,116894],{"id":116893},"mujoco-学习","MuJoCo 学习",[14,116896,116897],{},"初版",[14,116899,116900],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[152,116902,116903,116906,116909,116918],{},[155,116904,116905],{},"MuJoCo 模型文件在描述什么。",[155,116907,116908],{},"Python 代码怎样读取和推进仿真。",[155,116910,116911,413,116913,413,116915,116917],{},[73,116912,104071],{},[73,116914,104401],{},[73,116916,104404],{}," 这些数组为什么重要。",[155,116919,116920],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116922,116923,116924,116926],{},"默认环境为 Fedora 44、Python >= 3.10、",[73,116925,101068],{}," 官方 Python bindings。",[14,116928,116929,116930,116932],{},"注意：本文禁止使用 ",[73,116931,101053],{},"。所有示例均使用：",[67,116934,116935],{"className":69,"code":101619,"language":71,"meta":58,"style":58},[73,116936,116937],{"__ignoreMap":58},[76,116938,116939,116941],{"class":78,"line":79},[76,116940,90],{"class":89},[76,116942,101342],{"class":93},[140,116944,116945],{"id":116945},"适合谁阅读",[14,116947,116948],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[152,116950,116951,116954,116957,116960],{},[155,116952,116953],{},"没学过 MuJoCo，只会一点 Python。",[155,116955,116956],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[155,116958,116959],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[155,116961,116962,116963,116965,116966,116968],{},"以前接触过 ",[73,116964,101053],{},"，现在想迁移到官方 ",[73,116967,101062],{}," Python bindings。",[14,116970,116971],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[140,116973,116975],{"id":116974},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116977,116978],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[67,116980,116983],{"className":116981,"code":116982,"language":5259,"meta":58},[5257],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[73,116984,116982],{"__ignoreMap":58},[14,116986,116987],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[152,116989,116990,116993,116996,116999],{},[155,116991,116992],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[155,116994,116995],{},"快速测试控制算法，不必一开始就上真实机器人。",[155,116997,116998],{},"生成强化学习环境。",[155,117000,117001],{},"采集状态、动作、图像、奖励等训练数据。",[140,117003,117004],{"id":117004},"学习前的心智模型",[14,117006,117007],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[338,117009,117010,117022],{},[341,117011,117012],{},[344,117013,117014,117017,117020],{},[347,117015,117016],{"align":23808},"部分",[347,117018,117019],{"align":23808},"负责什么",[347,117021,21259],{"align":23808},[385,117023,117024,117035,117047,117059,117071],{},[344,117025,117026,117029,117032],{},[390,117027,117028],{"align":23808},"MJCF XML",[390,117030,117031],{"align":23808},"定义世界和机器人结构",[390,117033,117034],{"align":23808},"地面、盒子、关节、电机、摄像头",[344,117036,117037,117041,117044],{},[390,117038,117039],{"align":23808},[73,117040,100750],{},[390,117042,117043],{"align":23808},"编译后的静态模型",[390,117045,117046],{"align":23808},"有几个关节、有几个电机、时间步长是多少",[344,117048,117049,117053,117056],{},[390,117050,117051],{"align":23808},[73,117052,100760],{},[390,117054,117055],{"align":23808},"运行中的动态状态",[390,117057,117058],{"align":23808},"当前时间、位置、速度、电机输入",[344,117060,117061,117065,117068],{},[390,117062,117063],{"align":23808},[73,117064,101256],{},[390,117066,117067],{"align":23808},"推进一步物理仿真",[390,117069,117070],{"align":23808},"根据重力、力、碰撞更新状态",[344,117072,117073,117076,117079],{},[390,117074,117075],{"align":23808},"Viewer \u002F Renderer",[390,117077,117078],{"align":23808},"把仿真显示出来",[390,117080,117081],{"align":23808},"打开窗口或保存图片",[14,117083,117084],{},"一句话总结：",[67,117086,117089],{"className":117087,"code":117088,"language":5259,"meta":58},[5257],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[73,117090,117088],{"__ignoreMap":58},[14,117092,117093],{},"参考来源：",[1206,117095,117096,117103,117110],{},[155,117097,117098,117099],{},"MuJoCo Python 官方文档：",[439,117100,117101],{"href":117101,"rel":117102},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23937],[155,117104,117105,117106],{},"MuJoCo XML Reference：",[439,117107,117108],{"href":117108,"rel":117109},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23937],[155,117111,117112,117113],{},"MuJoCo Overview：",[439,117114,117115],{"href":117115,"rel":117116},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23937],[140,117118,117119],{"id":117119},"章节目录",[152,117121,117122,117128,117134,117140,117146,117152,117158,117164],{},[155,117123,117124],{},[439,117125,117127],{"href":117126},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[155,117129,117130],{},[439,117131,117133],{"href":117132},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[155,117135,117136],{},[439,117137,117139],{"href":117138},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[155,117141,117142],{},[439,117143,117145],{"href":117144},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[155,117147,117148],{},[439,117149,117151],{"href":117150},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[155,117153,117154],{},[439,117155,117157],{"href":117156},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[155,117159,117160],{},[439,117161,117163],{"href":117162},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[155,117165,117166],{},[439,117167,117169],{"href":117168},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[140,117171,117172],{"id":117172},"推荐学习路线",[67,117174,117177],{"className":117175,"code":117176,"language":5259,"meta":58},[5257],"环境安装\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",[73,117178,117176],{"__ignoreMap":58},[14,117180,117181],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[140,117183,117184],{"id":117184},"建议的目录结构",[14,117186,117187],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[67,117189,117191],{"className":23894,"code":117190,"language":23896,"meta":58,"style":58},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[73,117192,117193,117201],{"__ignoreMap":58},[76,117194,117195,117197,117199],{"class":78,"line":79},[76,117196,101307],{"class":2035},[76,117198,29289],{"class":250},[76,117200,101312],{"class":305},[76,117202,117203,117205],{"class":78,"line":86},[76,117204,101317],{"class":250},[76,117206,101312],{"class":305},[14,117208,117209],{},"每一章的代码都单独保存：",[67,117211,117214],{"className":117212,"code":117213,"language":5259,"meta":58},[5257],"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",[73,117215,117213],{"__ignoreMap":58},[14,117217,117218],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[140,117220,117221],{"id":117221},"学习方法",[14,117223,117224],{},"每章建议按这个顺序操作：",[152,117226,117227,117230,117233,117236,117239,117242],{},[155,117228,117229],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[155,117231,117232],{},"复制最小可运行代码，保存成指定文件。",[155,117234,117235],{},"运行代码，确认没有报错。",[155,117237,117238],{},"对照“运行结果说明”理解输出。",[155,117240,117241],{},"做“验证步骤”，主动改一两个参数。",[155,117243,117244],{},"遇到报错先看“常见错误与解决方案”。",[14,117246,117247],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[140,117249,117250],{"id":117250},"全局排错顺序",[14,117252,117253],{},"遇到问题时，按下面顺序查：",[152,117255,117256,117262,117268,117273,117276,117279,117286,117296],{},[155,117257,117258,117259],{},"Python 环境是否激活：",[73,117260,117261],{},"which python",[155,117263,117264,117265],{},"MuJoCo 是否能导入：",[73,117266,117267],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[155,117269,117270,117271],{},"是否误装了 ",[73,117272,101053],{},[155,117274,117275],{},"XML 标签是否闭合、属性是否拼写正确",[155,117277,117278],{},"actuator 引用的 joint 名字是否存在",[155,117280,117281,117283,117284],{},[73,117282,101117],{}," 的长度是否等于 ",[73,117285,102199],{},[155,117287,105626,117288,82609,117290,117292,117293],{},[73,117289,104071],{},[73,117291,104401],{}," 后是否调用了 ",[73,117294,117295],{},"mujoco.mj_forward",[155,117297,117298],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[117,117300,117301],{},"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":58,"searchDepth":86,"depth":86,"links":117303},[117304,117305,117306,117307,117308,117309,117310,117311],{"id":116945,"depth":86,"text":116945},{"id":116974,"depth":86,"text":116975},{"id":117004,"depth":86,"text":117004},{"id":117119,"depth":86,"text":117119},{"id":117172,"depth":86,"text":117172},{"id":117184,"depth":86,"text":117184},{"id":117221,"depth":86,"text":117221},{"id":117250,"depth":86,"text":117250},"仿真搭建。",{"category":23450},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116888,"description":117312},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117319,"title":117320,"body":117321,"description":122,"extension":123,"meta":117776,"navigation":125,"path":117777,"seo":117778,"stem":117779,"__hash__":117780},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117322,"toc":117774},[117323,117326,117329,117335,117771],[10,117324,117320],{"id":117325},"_1-最常用的基本操作更新",[14,117327,117328],{},"装linux系统教程：",[14,117330,117331],{},[439,117332,117333],{"href":117333,"rel":117334},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23937],[67,117336,117340],{"className":117337,"code":117338,"language":117339,"meta":58,"style":58},"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",[73,117341,117342,117347,117352,117361,117366,117375,117380,117400,117405,117416,117421,117430,117435,117463,117468,117487,117492,117511,117515,117520,117536,117540,117545,117575,117579,117584,117600,117604,117609,117624,117628,117633,117649,117653,117658,117670,117682,117686,117691,117708,117712,117717,117735,117739,117744,117753,117757,117762],{"__ignoreMap":58},[76,117343,117344],{"class":78,"line":79},[76,117345,117346],{"class":82},"#更新相关的知识\n",[76,117348,117349],{"class":78,"line":86},[76,117350,117351],{"class":82},"# 更新软件包列表（从服务器获取最新软件信息）\n",[76,117353,117354,117356,117359],{"class":78,"line":97},[76,117355,24649],{"class":2035},[76,117357,117358],{"class":305}," apt",[76,117360,26315],{"class":305},[76,117362,117363],{"class":78,"line":103},[76,117364,117365],{"class":82},"# 升级所有可更新的软件包（不删除旧包）\n",[76,117367,117368,117370,117372],{"class":78,"line":1273},[76,117369,24649],{"class":2035},[76,117371,117358],{"class":305},[76,117373,117374],{"class":305}," upgrade\n",[76,117376,117377],{"class":78,"line":1287},[76,117378,117379],{"class":82},"#更新和升级软件包\n",[76,117381,117382,117384,117386,117389,117391,117393,117395,117398],{"class":78,"line":1293},[76,117383,24649],{"class":2035},[76,117385,117358],{"class":305},[76,117387,117388],{"class":305}," update",[76,117390,26263],{"class":93},[76,117392,24649],{"class":2035},[76,117394,117358],{"class":305},[76,117396,117397],{"class":305}," upgrade",[76,117399,101022],{"class":250},[76,117401,117402],{"class":78,"line":1384},[76,117403,117404],{"class":82},"#列出可更新的软件包及版本信息\n",[76,117406,117407,117410,117413],{"class":78,"line":1390},[76,117408,117409],{"class":2035},"apt",[76,117411,117412],{"class":305}," list",[76,117414,117415],{"class":250}," --upgradable\n",[76,117417,117418],{"class":78,"line":1402},[76,117419,117420],{"class":82},"#彻底升级（处理依赖关系，可能删除旧包）\n",[76,117422,117423,117425,117427],{"class":78,"line":1684},[76,117424,24649],{"class":2035},[76,117426,117358],{"class":305},[76,117428,117429],{"class":305}," full-upgrade\n",[76,117431,117432],{"class":78,"line":1689},[76,117433,117434],{"class":82},"#设置指定版本\n",[76,117436,117437,117439,117441,117443,117445,117448,117450,117452,117454,117456,117459,117461],{"class":78,"line":1695},[76,117438,24649],{"class":2035},[76,117440,117358],{"class":305},[76,117442,23906],{"class":305},[76,117444,28975],{"class":89},[76,117446,117447],{"class":305},"package_nam",[76,117449,275],{"class":93},[76,117451,1159],{"class":89},[76,117453,247],{"class":305},[76,117455,1109],{"class":89},[76,117457,117458],{"class":305},"version_numbe",[76,117460,869],{"class":93},[76,117462,51377],{"class":89},[76,117464,117465],{"class":78,"line":1700},[76,117466,117467],{"class":82},"#只安装软件包不升级\n",[76,117469,117470,117472,117474,117476,117478,117480,117482,117484],{"class":78,"line":1714},[76,117471,24649],{"class":2035},[76,117473,117358],{"class":305},[76,117475,23906],{"class":305},[76,117477,28975],{"class":89},[76,117479,117447],{"class":305},[76,117481,275],{"class":93},[76,117483,1159],{"class":89},[76,117485,117486],{"class":250}," --no-upgrade\n",[76,117488,117489],{"class":78,"line":1719},[76,117490,117491],{"class":82},"#只升级，不存在就不安装\n",[76,117493,117494,117496,117498,117500,117502,117504,117506,117508],{"class":78,"line":1725},[76,117495,24649],{"class":2035},[76,117497,117358],{"class":305},[76,117499,23906],{"class":305},[76,117501,28975],{"class":89},[76,117503,117447],{"class":305},[76,117505,275],{"class":93},[76,117507,1159],{"class":89},[76,117509,117510],{"class":250}," --only-upgrade\n",[76,117512,117513],{"class":78,"line":1746},[76,117514,2472],{"emptyLinePlaceholder":125},[76,117516,117517],{"class":78,"line":1751},[76,117518,117519],{"class":82},"#安装指定的软件命令\n",[76,117521,117522,117524,117526,117528,117530,117532,117534],{"class":78,"line":1765},[76,117523,24649],{"class":2035},[76,117525,117358],{"class":305},[76,117527,23906],{"class":305},[76,117529,28975],{"class":89},[76,117531,117447],{"class":305},[76,117533,275],{"class":93},[76,117535,51377],{"class":89},[76,117537,117538],{"class":78,"line":1770},[76,117539,2472],{"emptyLinePlaceholder":125},[76,117541,117542],{"class":78,"line":1799},[76,117543,117544],{"class":82},"#安装多个软件包\n",[76,117546,117547,117549,117551,117553,117555,117558,117561,117563,117565,117568,117570,117572],{"class":78,"line":1804},[76,117548,24649],{"class":2035},[76,117550,117358],{"class":305},[76,117552,23906],{"class":305},[76,117554,28975],{"class":89},[76,117556,117557],{"class":305},"package_",[76,117559,117560],{"class":89},"1>",[76,117562,28975],{"class":89},[76,117564,117557],{"class":305},[76,117566,117567],{"class":89},"2>",[76,117569,28975],{"class":89},[76,117571,117557],{"class":305},[76,117573,117574],{"class":89},"3>\n",[76,117576,117577],{"class":78,"line":1821},[76,117578,2472],{"emptyLinePlaceholder":125},[76,117580,117581],{"class":78,"line":1826},[76,117582,117583],{"class":82},"#更新指定的软件命令\n",[76,117585,117586,117588,117590,117592,117594,117596,117598],{"class":78,"line":1831},[76,117587,24649],{"class":2035},[76,117589,117358],{"class":305},[76,117591,117388],{"class":305},[76,117593,28975],{"class":89},[76,117595,117447],{"class":305},[76,117597,275],{"class":93},[76,117599,51377],{"class":89},[76,117601,117602],{"class":78,"line":1836},[76,117603,2472],{"emptyLinePlaceholder":125},[76,117605,117606],{"class":78,"line":1850},[76,117607,117608],{"class":82},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[76,117610,117611,117613,117616,117618,117620,117622],{"class":78,"line":1855},[76,117612,117409],{"class":2035},[76,117614,117615],{"class":305}," show",[76,117617,28975],{"class":89},[76,117619,117447],{"class":305},[76,117621,275],{"class":93},[76,117623,51377],{"class":89},[76,117625,117626],{"class":78,"line":2649},[76,117627,2472],{"emptyLinePlaceholder":125},[76,117629,117630],{"class":78,"line":2663},[76,117631,117632],{"class":82},"#删除软件包命令\n",[76,117634,117635,117637,117639,117641,117643,117645,117647],{"class":78,"line":2671},[76,117636,24649],{"class":2035},[76,117638,117358],{"class":305},[76,117640,26152],{"class":305},[76,117642,28975],{"class":89},[76,117644,117447],{"class":305},[76,117646,275],{"class":93},[76,117648,51377],{"class":89},[76,117650,117651],{"class":78,"line":2676},[76,117652,2472],{"emptyLinePlaceholder":125},[76,117654,117655],{"class":78,"line":2682},[76,117656,117657],{"class":82},"# 清理旧版本和缓存（释放磁盘空间）\n",[76,117659,117660,117662,117664,117667],{"class":78,"line":2688},[76,117661,24649],{"class":2035},[76,117663,117358],{"class":305},[76,117665,117666],{"class":305}," autoremove",[76,117668,117669],{"class":82},"  # 删除不再需要的依赖和库文件\n",[76,117671,117672,117674,117676,117679],{"class":78,"line":2693},[76,117673,24649],{"class":2035},[76,117675,117358],{"class":305},[76,117677,117678],{"class":305}," clean",[76,117680,117681],{"class":82},"       # 清理下载的缓存包\n",[76,117683,117684],{"class":78,"line":8020},[76,117685,2472],{"emptyLinePlaceholder":125},[76,117687,117688],{"class":78,"line":8044},[76,117689,117690],{"class":82},"#移除软件包及配置文件\n",[76,117692,117693,117695,117697,117700,117702,117704,117706],{"class":78,"line":8049},[76,117694,24649],{"class":2035},[76,117696,117358],{"class":305},[76,117698,117699],{"class":305}," purge",[76,117701,28975],{"class":89},[76,117703,117447],{"class":305},[76,117705,275],{"class":93},[76,117707,51377],{"class":89},[76,117709,117710],{"class":78,"line":8055},[76,117711,2472],{"emptyLinePlaceholder":125},[76,117713,117714],{"class":78,"line":8082},[76,117715,117716],{"class":82},"#查找软件包命令\n",[76,117718,117719,117721,117723,117726,117728,117731,117733],{"class":78,"line":8087},[76,117720,24649],{"class":2035},[76,117722,117358],{"class":305},[76,117724,117725],{"class":305}," search",[76,117727,28975],{"class":89},[76,117729,117730],{"class":305},"keywor",[76,117732,515],{"class":93},[76,117734,51377],{"class":89},[76,117736,117737],{"class":78,"line":8093},[76,117738,2472],{"emptyLinePlaceholder":125},[76,117740,117741],{"class":78,"line":8105},[76,117742,117743],{"class":82},"#列出所有已安装的包\n",[76,117745,117746,117748,117750],{"class":78,"line":8117},[76,117747,117409],{"class":2035},[76,117749,117412],{"class":305},[76,117751,117752],{"class":250}," --installed\n",[76,117754,117755],{"class":78,"line":8129},[76,117756,2472],{"emptyLinePlaceholder":125},[76,117758,117759],{"class":78,"line":9788},[76,117760,117761],{"class":82},"#列出所有已安装的包的版本信息\n",[76,117763,117764,117766,117768],{"class":78,"line":9813},[76,117765,117409],{"class":2035},[76,117767,117412],{"class":305},[76,117769,117770],{"class":250}," --all-versions\n",[117,117772,117773],{},"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":58,"searchDepth":86,"depth":86,"links":117775},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117320,"description":122},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117782,"title":117783,"body":117784,"description":122,"extension":123,"meta":118525,"navigation":125,"path":118526,"seo":118527,"stem":118528,"__hash__":118529},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117785,"toc":118512},[117786,117789,117793,117796,117802,117806,117810,117816,117821,117826,117831,117836,117841,117844,117847,117850,117853,117857,117860,117865,117868,117873,117876,117881,117888,117891,117894,117897,117900,117903,117914,117918,117922,117927,117932,117936,117941,117945,117950,117954,117958,117963,117966,118011,118016,118020,118024,118029,118035,118040,118050,118055,118065,118070,118075,118102,118106,118109,118114,118117,118142,118146,118151,118154,118159,118164,118184,118189,118192,118207,118211,118264,118267,118272,118276,118279,118294,118297,118300,118305,118309,118313,118316,118320,118324,118327,118332,118337,118341,118348,118356,118359,118366,118371,118376,118379,118384,118391,118396,118403,118407,118409,118414,118418,118421,118424,118429,118432,118437,118440,118445,118450,118455,118459,118464,118468,118509],[10,117787,117783],{"id":117788},"_2-linux装机教程",[140,117790,117792],{"id":117791},"_21-实体机","2.1 实体机",[14,117794,117795],{},"使用清华源：（Ubuntu24.04）",[14,117797,117798],{},[439,117799,117800],{"href":117800,"rel":117801},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23937],[140,117803,117805],{"id":117804},"_22-普通虚拟机","2.2 普通虚拟机",[169,117807,117809],{"id":117808},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117811,117812],{},[439,117813,117814],{"href":117814,"rel":117815},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23937],[14,117817,117818],{},[56,117819],{"alt":58,"src":117820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117822,117823],{},[56,117824],{"alt":58,"src":117825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117827,117828],{},[56,117829],{"alt":58,"src":117830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117832,117833],{},[56,117834],{"alt":58,"src":117835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117837,117838],{},[56,117839],{"alt":58,"src":117840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117842,117843],{},"内存4G（4096MB）；",[14,117845,117846],{},"CPU给4个核；",[14,117848,117849],{},"硬盘动态分配60G；",[14,117851,117852],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[169,117854,117856],{"id":117855},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117858,117859],{},"按照1.1的步骤下载Ubuntu",[14,117861,117862],{},[56,117863],{"alt":58,"src":117864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117866,117867],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117869,117870],{},[56,117871],{"alt":58,"src":117872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117874,117875],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117877,117878],{},[56,117879],{"alt":58,"src":117880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117882,117883,117884,117887],{},"选择“正常安装”(找不到都用Alt+F7)， ",[350,117885,117886],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117889,117890],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117892,117893],{},"将改动写入磁盘吗 继续",[14,117895,117896],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117898,117899],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117901,117902],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117904,117905,117906,117909,117910,117913],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[350,117907,117908],{},"除了"," 选不发送系统信息与不升级之外， ",[350,117911,117912],{},"其它"," 都跳过或前进）",[169,117915,117917],{"id":117916},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22070,117919,117921],{"id":117920},"_2231-全屏","2.2.3.1 全屏",[14,117923,117924],{},[56,117925],{"alt":58,"src":117926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117928,117929],{},[56,117930],{"alt":58,"src":117931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22070,117933,117935],{"id":117934},"_2232-文件交换","2.2.3.2 文件交换",[14,117937,117938],{},[56,117939],{"alt":58,"src":117940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22070,117942,117944],{"id":117943},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117946,117947],{},[56,117948],{"alt":58,"src":117949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[140,117951,117953],{"id":117952},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[169,117955,117957],{"id":117956},"_231-简介与优缺点","2.3.1 简介与优缺点",[152,117959,117960],{},[155,117961,117962],{},"什么情况下推荐？",[14,117964,117965],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[152,117967,117968],{"start":86},[155,117969,117970,117971],{},"优缺点：",[152,117972,117973,118003],{},[155,117974,117975,117976],{},"优点：",[152,117977,117978,117981,117988,117991,117994,117997,118000],{},[155,117979,117980],{},"WSL2是最好的Linux发行版;(bushi)",[155,117982,117983,117984,117987],{},"性能损耗极低。且比在Windows上跑深度性能 ",[350,117985,117986],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[155,117989,117990],{},"非常方便调用USB设备，可以USB直通;",[155,117992,117993],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[155,117995,117996],{},"非常方便Win与WSL2互相传文件等协同操作;",[155,117998,117999],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[155,118001,118002],{},"非常方便使用Windows的VScode远程开发;",[155,118004,118005,118006],{},"缺点：",[152,118007,118008],{},[155,118009,118010],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118012,118013],{},[56,118014],{"alt":58,"src":118015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[169,118017,118019],{"id":118018},"_232-安装教程","2.3.2 安装教程",[22070,118021,118023],{"id":118022},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[152,118025,118026],{},[155,118027,118028],{},"方法一(图形界面)",[14,118030,118031,118032,24691],{},"用Win+R输入",[73,118033,118034],{},"appwiz.cpl",[14,118036,118037],{},[56,118038],{"alt":58,"src":118039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118041,118042,118043,118046,118047,26546],{},"点击OK进入 ",[350,118044,118045],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[350,118048,118049],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118051,118052],{},[56,118053],{"alt":58,"src":118054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118056,118057,118058,101059,118061,118064],{},"选择 ",[350,118059,118060],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[350,118062,118063],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118066,118067],{},[56,118068],{"alt":58,"src":118069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[152,118071,118072],{"start":86},[155,118073,118074],{},"方法二(命令行)",[67,118076,118080],{"className":118077,"code":118078,"language":118079,"meta":58,"style":58},"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",[73,118081,118082,118087,118092,118097],{"__ignoreMap":58},[76,118083,118084],{"class":78,"line":79},[76,118085,118086],{},"# 开启 Linux 子系统\n",[76,118088,118089],{"class":78,"line":86},[76,118090,118091],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[76,118093,118094],{"class":78,"line":97},[76,118095,118096],{},"# 开启虚拟机平台\n",[76,118098,118099],{"class":78,"line":103},[76,118100,118101],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22070,118103,118105],{"id":118104},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118107,118108],{},"用管理员权限打开powershell",[14,118110,118111],{},[56,118112],{"alt":58,"src":118113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118115,118116],{},"升级WSL并设置默认版本为WSL2",[67,118118,118120],{"className":118077,"code":118119,"language":118079,"meta":58,"style":58},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[73,118121,118122,118127,118132,118137],{"__ignoreMap":58},[76,118123,118124],{"class":78,"line":79},[76,118125,118126],{},"# 更新 wsl\n",[76,118128,118129],{"class":78,"line":86},[76,118130,118131],{},"wsl --update\n",[76,118133,118134],{"class":78,"line":97},[76,118135,118136],{},"# 将 wsl 版本设置为 wsl2\n",[76,118138,118139],{"class":78,"line":103},[76,118140,118141],{},"wsl --set-default-version 2\n",[22070,118143,118145],{"id":118144},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[152,118147,118148],{},[155,118149,118150],{},"方式一(商店下载)",[14,118152,118153],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118155,118156],{},[56,118157],{"alt":58,"src":118158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[152,118160,118161],{"start":86},[155,118162,118163],{},"方式二(命令行安装)",[67,118165,118167],{"className":118077,"code":118166,"language":118079,"meta":58,"style":58},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[73,118168,118169,118174,118179],{"__ignoreMap":58},[76,118170,118171],{"class":78,"line":79},[76,118172,118173],{},"# 列出可安装的 Linux 版本\n",[76,118175,118176],{"class":78,"line":86},[76,118177,118178],{},"#（需要科学手段）\n",[76,118180,118181],{"class":78,"line":97},[76,118182,118183],{},"wsl --list --online\n",[14,118185,118186],{},[56,118187],{"alt":58,"src":118188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118190,118191],{},"选择对应发行版并安装",[67,118193,118195],{"className":118077,"code":118194,"language":118079,"meta":58,"style":58},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[73,118196,118197,118202],{"__ignoreMap":58},[76,118198,118199],{"class":78,"line":79},[76,118200,118201],{},"# Ubuntu安装完毕后需要重启系统\n",[76,118203,118204],{"class":78,"line":86},[76,118205,118206],{},"wsl --install -d Ubuntu-24.04\n",[22070,118208,118210],{"id":118209},"_2324-查看系统状态","2.3.2.4 查看系统状态",[67,118212,118214],{"className":118077,"code":118213,"language":118079,"meta":58,"style":58},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[73,118215,118216,118221,118226,118231,118236,118240,118244,118249,118254,118259],{"__ignoreMap":58},[76,118217,118218],{"class":78,"line":79},[76,118219,118220],{},"# 查看 wsl\n",[76,118222,118223],{"class":78,"line":86},[76,118224,118225],{},"wsl -l\n",[76,118227,118228],{"class":78,"line":97},[76,118229,118230],{},"# 查看 wsl 运行版本或模式\n",[76,118232,118233],{"class":78,"line":103},[76,118234,118235],{},"wsl -l -v\n",[76,118237,118238],{"class":78,"line":1273},[76,118239,2472],{"emptyLinePlaceholder":125},[76,118241,118242],{"class":78,"line":1287},[76,118243,2472],{"emptyLinePlaceholder":125},[76,118245,118246],{"class":78,"line":1293},[76,118247,118248],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[76,118250,118251],{"class":78,"line":1384},[76,118252,118253],{},"wsl --set-version \u003Cdistro> 2\n",[76,118255,118256],{"class":78,"line":1390},[76,118257,118258],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[76,118260,118261],{"class":78,"line":1402},[76,118262,118263],{},"wsl --unregister \u003Cdistro>\n",[14,118265,118266],{},"输出Version为2即正常",[14,118268,118269],{},[56,118270],{"alt":58,"src":118271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22070,118273,118275],{"id":118274},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118277,118278],{},"直接在Powershell里输入wsl命令进入子系统",[67,118280,118282],{"className":118077,"code":118281,"language":118079,"meta":58,"style":58},"# 进入子系统\nwsl\n",[73,118283,118284,118289],{"__ignoreMap":58},[76,118285,118286],{"class":78,"line":79},[76,118287,118288],{},"# 进入子系统\n",[76,118290,118291],{"class":78,"line":86},[76,118292,118293],{},"wsl\n",[14,118295,118296],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118298,118299],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118301,118302],{},[56,118303],{"alt":58,"src":118304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[169,118306,118308],{"id":118307},"_233-配置各种环境","2.3.3 配置各种环境",[22070,118310,118312],{"id":118311},"_2331-换源","2.3.3.1 换源",[14,118314,118315],{},"(同实体机LINUX，往下找教程)",[22070,118317,118319],{"id":118318},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22982,118321,118323],{"id":118322},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118325,118326],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118328,118329],{},[56,118330],{"alt":58,"src":118331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118333,118334],{},[56,118335],{"alt":58,"src":118336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22982,118338,118340],{"id":118339},"_23322-cuda","2.3.3.2.2 CUDA",[14,118342,118343,118344],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[439,118345,118346],{"href":118346,"rel":118347},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23937],[14,118349,118350,118353],{},[56,118351],{"alt":58,"src":118352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[56,118354],{"alt":58,"src":118355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118357,118358],{},"在下方的网站，选择合适的版本。",[14,118360,118361,118362],{},"WSL2 专属 CUDA 指南：",[439,118363,118364],{"href":118364,"rel":118365},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23937],[14,118367,118368],{},[350,118369,118370],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118372,118373],{},[56,118374],{"alt":58,"src":118375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118377,118378],{},"挨行敲一遍",[14,118380,118381],{},[56,118382],{"alt":58,"src":118383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118385,118386,118387,118390],{},"敲完后，输入",[73,118388,118389],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118392,118393],{},[56,118394],{"alt":58,"src":118395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118397,118398,118399,118402],{},"（请详看下方教程的",[350,118400,118401],{},"安装CUDA的配置环境来看","如何配置环境）",[22982,118404,118406],{"id":118405},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118408,118315],{},[14,118410,118411],{},[56,118412],{"alt":58,"src":118413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22070,118415,118417],{"id":118416},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118419,118420],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118422,118423],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118425,118426],{},[56,118427],{"alt":58,"src":118428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118430,118431],{},"连接WSL2",[14,118433,118434],{},[56,118435],{"alt":58,"src":118436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118438,118439],{},"远程开发成功。",[14,118441,118442],{},[56,118443],{"alt":58,"src":118444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118446,118447],{},[56,118448],{"alt":58,"src":118449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118451,118452],{},[56,118453],{"alt":58,"src":118454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22070,118456,118458],{"id":118457},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118460,118461],{},[56,118462],{"alt":58,"src":118463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22070,118465,118467],{"id":118466},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[67,118469,118471],{"className":117337,"code":118470,"language":117339,"meta":58,"style":58},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[73,118472,118473,118481,118489,118500,118504],{"__ignoreMap":58},[76,118474,118475,118477,118479],{"class":78,"line":79},[76,118476,24649],{"class":2035},[76,118478,117358],{"class":305},[76,118480,26315],{"class":305},[76,118482,118483,118485,118487],{"class":78,"line":86},[76,118484,24649],{"class":2035},[76,118486,117358],{"class":305},[76,118488,117374],{"class":305},[76,118490,118491,118493,118495,118497],{"class":78,"line":97},[76,118492,24649],{"class":2035},[76,118494,117358],{"class":305},[76,118496,23906],{"class":305},[76,118498,118499],{"class":305}," mesa-utils\n",[76,118501,118502],{"class":78,"line":103},[76,118503,2472],{"emptyLinePlaceholder":125},[76,118505,118506],{"class":78,"line":1273},[76,118507,118508],{"class":82},"#然后重启wsl2即可\n",[117,118510,118511],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":58,"searchDepth":86,"depth":86,"links":118513},[118514,118515,118520],{"id":117791,"depth":86,"text":117792},{"id":117804,"depth":86,"text":117805,"children":118516},[118517,118518,118519],{"id":117808,"depth":97,"text":117809},{"id":117855,"depth":97,"text":117856},{"id":117916,"depth":97,"text":117917},{"id":117952,"depth":86,"text":117953,"children":118521},[118522,118523,118524],{"id":117956,"depth":97,"text":117957},{"id":118018,"depth":97,"text":118019},{"id":118307,"depth":97,"text":118308},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117783,"description":122},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118531,"title":118532,"body":118533,"description":122,"extension":123,"meta":121469,"navigation":125,"path":121470,"seo":121471,"stem":121472,"__hash__":121473},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118534,"toc":121441},[118535,118538,118542,118548,118552,118558,118562,118750,118753,118758,118762,118766,118769,118772,118778,118783,118786,118789,118794,118827,118832,118836,118913,118916,118921,118925,118928,118967,118970,118979,118997,119002,119009,119126,119131,119134,119161,119166,119170,119179,119229,119236,119240,119243,119257,119264,119298,119303,119307,119330,119333,119338,119342,119345,119348,119351,119393,119397,119400,119403,119444,119448,119452,119455,119460,119465,119468,119491,119494,119502,119507,119510,119515,119520,119523,119528,119532,119537,119560,119565,119627,119635,119640,119645,119648,119653,119656,119661,119666,119684,119689,119695,119700,119714,119718,119721,119724,119727,119770,119773,119778,119879,119882,119887,119891,119895,119932,119936,119940,119944,119990,119994,120039,120043,120050,120058,120113,120116,120193,120196,120219,120223,120226,120231,120236,120244,120247,120252,120257,120262,120265,120270,120279,120282,120287,120290,120361,120366,120369,120374,120377,120382,120385,120390,120393,120398,120403,120406,120481,120484,120497,120502,120505,120519,120522,120551,120556,120585,120588,120593,120597,120602,120611,120614,120619,120622,120627,120630,120633,120638,120641,120646,120651,120654,120659,120662,120787,120792,120822,120825,120830,120835,120852,120855,120898,120901,120928,120933,120946,121089,121093,121098,121112,121115,121166,121169,121199,121202,121218,121223,121237,121240,121307,121312,121321,121326,121329,121341,121346,121353,121377,121380,121385,121388,121407,121412,121419,121431,121438],[10,118536,118532],{"id":118537},"_3-安装必备配置",[140,118539,118541],{"id":118540},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[67,118543,118546],{"className":118544,"code":118545,"language":5259},[5257],"  打开下方网站（注意，该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",[73,118547,118545],{"__ignoreMap":58},[169,118549,118551],{"id":118550},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[67,118553,118556],{"className":118554,"code":118555,"language":5259},[5257],"  输入以下命令\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",[73,118557,118555],{"__ignoreMap":58},[169,118559,118561],{"id":118560},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[67,118563,118567],{"className":118564,"code":118565,"language":118566,"meta":58,"style":58},"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",[73,118568,118569,118577,118588,118600,118614,118618,118628,118633,118637,118641,118646,118650,118662,118666,118671,118675,118686,118690,118706,118710,118721,118725,118730,118734,118742],{"__ignoreMap":58},[76,118570,118571,118573,118575],{"class":78,"line":79},[76,118572,24649],{"class":2035},[76,118574,117358],{"class":305},[76,118576,26315],{"class":305},[76,118578,118579,118581,118583,118585],{"class":78,"line":86},[76,118580,24649],{"class":2035},[76,118582,117358],{"class":305},[76,118584,23906],{"class":305},[76,118586,118587],{"class":305}," vim\n",[76,118589,118590,118592,118595,118597],{"class":78,"line":97},[76,118591,24649],{"class":2035},[76,118593,118594],{"class":305}," rm",[76,118596,25398],{"class":250},[76,118598,118599],{"class":305}," \u002Fetc\u002Fapt\u002Fsources.list\n",[76,118601,118602,118604,118606,118608,118611],{"class":78,"line":103},[76,118603,24649],{"class":2035},[76,118605,118594],{"class":305},[76,118607,25398],{"class":250},[76,118609,118610],{"class":305}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[76,118612,118613],{"class":250},"**\n",[76,118615,118616],{"class":78,"line":1273},[76,118617,2472],{"emptyLinePlaceholder":125},[76,118619,118620,118622,118625],{"class":78,"line":1287},[76,118621,24649],{"class":2035},[76,118623,118624],{"class":305}," vim",[76,118626,118627],{"class":305}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[76,118629,118630],{"class":78,"line":1293},[76,118631,118632],{"class":305},"```\n",[76,118634,118635],{"class":78,"line":1384},[76,118636,2472],{"emptyLinePlaceholder":125},[76,118638,118639],{"class":78,"line":1390},[76,118640,2472],{"emptyLinePlaceholder":125},[76,118642,118643],{"class":78,"line":1402},[76,118644,118645],{"class":2035},"选择好Ubuntu版本后，复制下方的内容。\n",[76,118647,118648],{"class":78,"line":1684},[76,118649,2472],{"emptyLinePlaceholder":125},[76,118651,118652,118654,118657,118660],{"class":78,"line":1689},[76,118653,427],{"class":89},[76,118655,118656],{"class":305},"[](",[76,118658,118659],{"class":2035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[76,118661,208],{"class":305},[76,118663,118664],{"class":78,"line":1695},[76,118665,2472],{"emptyLinePlaceholder":125},[76,118667,118668],{"class":78,"line":1700},[76,118669,118670],{"class":2035},"粘贴进去\n",[76,118672,118673],{"class":78,"line":1714},[76,118674,2472],{"emptyLinePlaceholder":125},[76,118676,118677,118679,118681,118684],{"class":78,"line":1719},[76,118678,427],{"class":89},[76,118680,118656],{"class":305},[76,118682,118683],{"class":2035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[76,118685,208],{"class":305},[76,118687,118688],{"class":78,"line":1725},[76,118689,2472],{"emptyLinePlaceholder":125},[76,118691,118692,118695,118698,118701,118703],{"class":78,"line":1746},[76,118693,118694],{"class":2035},"按一下ESC，然后英文冒号，输入",[76,118696,118697],{"class":305}," `",[76,118699,118700],{"class":2035},":wq!",[76,118702,1171],{"class":305},[76,118704,118705],{"class":2035},"然后回车\n",[76,118707,118708],{"class":78,"line":1751},[76,118709,2472],{"emptyLinePlaceholder":125},[76,118711,118712,118714,118716,118719],{"class":78,"line":1765},[76,118713,427],{"class":89},[76,118715,118656],{"class":305},[76,118717,118718],{"class":2035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[76,118720,208],{"class":305},[76,118722,118723],{"class":78,"line":1770},[76,118724,2472],{"emptyLinePlaceholder":125},[76,118726,118727],{"class":78,"line":1799},[76,118728,118729],{"class":2035},"输入以下命令\n",[76,118731,118732],{"class":78,"line":1804},[76,118733,2472],{"emptyLinePlaceholder":125},[76,118735,118736,118739],{"class":78,"line":1821},[76,118737,118738],{"class":305},"```",[76,118740,118741],{"class":2035},"Bash\n",[76,118743,118744,118746,118748],{"class":78,"line":1826},[76,118745,24649],{"class":2035},[76,118747,117358],{"class":305},[76,118749,26315],{"class":305},[14,118751,118752],{},"这里被替换成对应学校则成功",[14,118754,118755],{},[56,118756],{"alt":58,"src":118757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[140,118759,118761],{"id":118760},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[169,118763,118765],{"id":118764},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118767,118768],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118770,118771],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118773,118774],{},[439,118775,118776],{"href":118776,"rel":118777},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23937],[14,118779,118780],{},[56,118781],{"alt":58,"src":118782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118784,118785],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118787,118788],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118790,118791],{},[56,118792],{"alt":58,"src":118793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[67,118795,118797],{"className":117337,"code":118796,"language":117339,"meta":58,"style":58},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[73,118798,118799,118804,118811,118816],{"__ignoreMap":58},[76,118800,118801],{"class":78,"line":79},[76,118802,118803],{"class":82},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[76,118805,118806,118808],{"class":78,"line":86},[76,118807,101317],{"class":250},[76,118809,118810],{"class":305}," ~\u002FDownloads\n",[76,118812,118813],{"class":78,"line":97},[76,118814,118815],{"class":82},"#下方chrome安装包名不一定是这个，根据名字来看\n",[76,118817,118818,118820,118822,118824],{"class":78,"line":103},[76,118819,24649],{"class":2035},[76,118821,117358],{"class":305},[76,118823,23906],{"class":305},[76,118825,118826],{"class":305}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118828,118829],{},[56,118830],{"alt":58,"src":118831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[169,118833,118835],{"id":118834},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[67,118837,118839],{"className":117337,"code":118838,"language":117339,"meta":58,"style":58},"# 老版\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",[73,118840,118841,118846,118854,118865,118870,118874,118879,118889,118897,118908],{"__ignoreMap":58},[76,118842,118843],{"class":78,"line":79},[76,118844,118845],{"class":82},"# 老版\n",[76,118847,118848,118850,118852],{"class":78,"line":86},[76,118849,24649],{"class":2035},[76,118851,117358],{"class":305},[76,118853,26315],{"class":305},[76,118855,118856,118858,118860,118862],{"class":78,"line":97},[76,118857,24649],{"class":2035},[76,118859,117358],{"class":305},[76,118861,23906],{"class":305},[76,118863,118864],{"class":305}," neofetch\n",[76,118866,118867],{"class":78,"line":103},[76,118868,118869],{"class":2035},"neofetch\n",[76,118871,118872],{"class":78,"line":1273},[76,118873,2472],{"emptyLinePlaceholder":125},[76,118875,118876],{"class":78,"line":1287},[76,118877,118878],{"class":82},"# 新版\n",[76,118880,118881,118883,118886],{"class":78,"line":1293},[76,118882,24649],{"class":2035},[76,118884,118885],{"class":305}," add-apt-repository",[76,118887,118888],{"class":305}," ppa:zhangsongcui3371\u002Ffastfetch\n",[76,118890,118891,118893,118895],{"class":78,"line":1384},[76,118892,24649],{"class":2035},[76,118894,117358],{"class":305},[76,118896,26315],{"class":305},[76,118898,118899,118901,118903,118905],{"class":78,"line":1390},[76,118900,24649],{"class":2035},[76,118902,117358],{"class":305},[76,118904,23906],{"class":305},[76,118906,118907],{"class":305}," fastfetch\n",[76,118909,118910],{"class":78,"line":1402},[76,118911,118912],{"class":2035},"fastfetch\n",[14,118914,118915],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118917,118918],{},[56,118919],{"alt":58,"src":118920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[169,118922,118924],{"id":118923},"_323-移除snap应用","3.2.3 移除snap应用",[14,118926,118927],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[67,118929,118931],{"className":117337,"code":118930,"language":117339,"meta":58,"style":58},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[73,118932,118933,118945,118956],{"__ignoreMap":58},[76,118934,118935,118937,118939,118942],{"class":78,"line":79},[76,118936,24649],{"class":2035},[76,118938,26586],{"class":305},[76,118940,118941],{"class":305}," disable",[76,118943,118944],{"class":305}," snapd.service\n",[76,118946,118947,118949,118951,118953],{"class":78,"line":86},[76,118948,24649],{"class":2035},[76,118950,26586],{"class":305},[76,118952,118941],{"class":305},[76,118954,118955],{"class":305}," snapd.socket\n",[76,118957,118958,118960,118962,118964],{"class":78,"line":97},[76,118959,24649],{"class":2035},[76,118961,26586],{"class":305},[76,118963,118941],{"class":305},[76,118965,118966],{"class":305}," snapd.seeded.service\n",[14,118968,118969],{},"然后查看snap应用列表",[14,118971,118972,118973,118978],{},"根据你安装的选择不同（最小安装或普通安装），有",[439,118974,118977],{"href":118975,"rel":118976},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23937],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[67,118980,118982],{"className":117337,"code":118981,"language":117339,"meta":58,"style":58},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[73,118983,118984,118989],{"__ignoreMap":58},[76,118985,118986],{"class":78,"line":79},[76,118987,118988],{"class":82},"# 查询当前系统上snap安装了哪些app\n",[76,118990,118991,118994],{"class":78,"line":86},[76,118992,118993],{"class":2035},"snap",[76,118995,118996],{"class":305}," list\n",[14,118998,118999],{},[56,119000],{"alt":58,"src":119001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119003,119004,119005,119008],{},"卸载掉图中所有应用，按照 ",[350,119006,119007],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[67,119010,119012],{"className":117337,"code":119011,"language":117339,"meta":58,"style":58},"#移除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",[73,119013,119014,119019,119031,119036,119047,119052,119063,119068,119079,119084,119088,119093,119104,119115],{"__ignoreMap":58},[76,119015,119016],{"class":78,"line":79},[76,119017,119018],{"class":82},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[76,119020,119021,119023,119026,119028],{"class":78,"line":86},[76,119022,24649],{"class":2035},[76,119024,119025],{"class":305}," snap",[76,119027,26152],{"class":305},[76,119029,119030],{"class":305}," snap-store\n",[76,119032,119033],{"class":78,"line":97},[76,119034,119035],{"class":82},"#移除firefox浏览器\n",[76,119037,119038,119040,119042,119044],{"class":78,"line":103},[76,119039,24649],{"class":2035},[76,119041,119025],{"class":305},[76,119043,26152],{"class":305},[76,119045,119046],{"class":305}," firefox\n",[76,119048,119049],{"class":78,"line":1273},[76,119050,119051],{"class":82},"#移除gnome-42-2204\n",[76,119053,119054,119056,119058,119060],{"class":78,"line":1287},[76,119055,24649],{"class":2035},[76,119057,119025],{"class":305},[76,119059,26152],{"class":305},[76,119061,119062],{"class":305}," gnome-42-2204\n",[76,119064,119065],{"class":78,"line":1293},[76,119066,119067],{"class":82},"#移除gtk-common-themes\n",[76,119069,119070,119072,119074,119076],{"class":78,"line":1384},[76,119071,24649],{"class":2035},[76,119073,119025],{"class":305},[76,119075,26152],{"class":305},[76,119077,119078],{"class":305}," gtk-common-themes\n",[76,119080,119081],{"class":78,"line":1390},[76,119082,119083],{"class":82},"#移除其它...\n",[76,119085,119086],{"class":78,"line":1402},[76,119087,2746],{"class":93},[76,119089,119090],{"class":78,"line":1684},[76,119091,119092],{"class":82},"#移除core22,bare以及snapd\n",[76,119094,119095,119097,119099,119101],{"class":78,"line":1689},[76,119096,24649],{"class":2035},[76,119098,119025],{"class":305},[76,119100,26152],{"class":305},[76,119102,119103],{"class":305}," core22\n",[76,119105,119106,119108,119110,119112],{"class":78,"line":1695},[76,119107,24649],{"class":2035},[76,119109,119025],{"class":305},[76,119111,26152],{"class":305},[76,119113,119114],{"class":305}," bare\n",[76,119116,119117,119119,119121,119123],{"class":78,"line":1700},[76,119118,24649],{"class":2035},[76,119120,119025],{"class":305},[76,119122,26152],{"class":305},[76,119124,119125],{"class":305}," snapd\n",[14,119127,119128],{},[56,119129],{"alt":58,"src":119130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119132,119133],{},"输入以下命令查看是否还有snap包",[67,119135,119137],{"className":117337,"code":119136,"language":117339,"meta":58,"style":58},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[73,119138,119139,119145,119149,119153,119157],{"__ignoreMap":58},[76,119140,119141,119143],{"class":78,"line":79},[76,119142,118993],{"class":2035},[76,119144,118996],{"class":305},[76,119146,119147],{"class":78,"line":86},[76,119148,118845],{"class":82},[76,119150,119151],{"class":78,"line":97},[76,119152,118869],{"class":2035},[76,119154,119155],{"class":78,"line":103},[76,119156,118878],{"class":82},[76,119158,119159],{"class":78,"line":1273},[76,119160,118912],{"class":2035},[14,119162,119163],{},[56,119164],{"alt":58,"src":119165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[169,119167,119169],{"id":119168},"_324-移除snap","3.2.4 移除snap",[14,119171,119172,119173,119178],{},"在删除掉",[439,119174,119177],{"href":119175,"rel":119176},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23937],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[67,119180,119182],{"className":117337,"code":119181,"language":117339,"meta":58,"style":58}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[73,119183,119184,119189,119202,119207,119218],{"__ignoreMap":58},[76,119185,119186],{"class":78,"line":79},[76,119187,119188],{"class":82}," #使用apt移除掉snap\n",[76,119190,119191,119193,119195,119197,119200],{"class":78,"line":86},[76,119192,24649],{"class":2035},[76,119194,117358],{"class":305},[76,119196,117666],{"class":305},[76,119198,119199],{"class":250}," --purge",[76,119201,119125],{"class":305},[76,119203,119204],{"class":78,"line":97},[76,119205,119206],{"class":82},"#移除snapd的一些目录\n",[76,119208,119209,119211,119213,119215],{"class":78,"line":103},[76,119210,24649],{"class":2035},[76,119212,118594],{"class":305},[76,119214,25398],{"class":250},[76,119216,119217],{"class":305}," \u002Fvar\u002Fcache\u002Fsnapd\n",[76,119219,119220,119222,119224,119226],{"class":78,"line":1273},[76,119221,24649],{"class":2035},[76,119223,118594],{"class":305},[76,119225,25398],{"class":250},[76,119227,119228],{"class":305}," ~\u002Fsnap\n",[14,119230,119231,119232,119235],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[73,119233,119234],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[169,119237,119239],{"id":119238},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119241,119242],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[67,119244,119246],{"className":117337,"code":119245,"language":117339,"meta":58,"style":58},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[73,119247,119248],{"__ignoreMap":58},[76,119249,119250,119252,119254],{"class":78,"line":79},[76,119251,24649],{"class":2035},[76,119253,118624],{"class":305},[76,119255,119256],{"class":305}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119258,119259,119260,119263],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[73,119261,119262],{},":wq"," 回车",[67,119265,119267],{"className":117337,"code":119266,"language":117339,"meta":58,"style":58},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[73,119268,119269,119276,119290],{"__ignoreMap":58},[76,119270,119271,119274],{"class":78,"line":79},[76,119272,119273],{"class":2035},"Package:",[76,119275,119125],{"class":305},[76,119277,119278,119281,119284,119287],{"class":78,"line":86},[76,119279,119280],{"class":2035},"Pin:",[76,119282,119283],{"class":305}," release",[76,119285,119286],{"class":305}," a=",[76,119288,119289],{"class":250},"*\n",[76,119291,119292,119295],{"class":78,"line":97},[76,119293,119294],{"class":2035},"Pin-Priority:",[76,119296,119297],{"class":250}," -10\n",[14,119299,119300],{},[56,119301],{"alt":58,"src":119302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[169,119304,119306],{"id":119305},"_326-测试是否成功","3.2.6 测试是否成功",[67,119308,119310],{"className":117337,"code":119309,"language":117339,"meta":58,"style":58},"sudo apt update\nsudo apt install firefox\n",[73,119311,119312,119320],{"__ignoreMap":58},[76,119313,119314,119316,119318],{"class":78,"line":79},[76,119315,24649],{"class":2035},[76,119317,117358],{"class":305},[76,119319,26315],{"class":305},[76,119321,119322,119324,119326,119328],{"class":78,"line":86},[76,119323,24649],{"class":2035},[76,119325,117358],{"class":305},[76,119327,23906],{"class":305},[76,119329,119046],{"class":305},[14,119331,119332],{},"这里提示snapd无法被安装，就证明成功了",[14,119334,119335],{},[56,119336],{"alt":58,"src":119337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[169,119339,119341],{"id":119340},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119343,119344],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119346,119347],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119349,119350],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[67,119352,119354],{"className":117337,"code":119353,"language":117339,"meta":58,"style":58},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[73,119355,119356,119361,119370,119375,119383],{"__ignoreMap":58},[76,119357,119358],{"class":78,"line":79},[76,119359,119360],{"class":82},"# 添加Mozilla提供的源\n",[76,119362,119363,119365,119367],{"class":78,"line":86},[76,119364,24649],{"class":2035},[76,119366,118885],{"class":305},[76,119368,119369],{"class":305}," ppa:mozillateam\u002Fppa\n",[76,119371,119372],{"class":78,"line":97},[76,119373,119374],{"class":82},"# 安装Firefox\n",[76,119376,119377,119379,119381],{"class":78,"line":103},[76,119378,24649],{"class":2035},[76,119380,117358],{"class":305},[76,119382,26315],{"class":305},[76,119384,119385,119387,119389,119391],{"class":78,"line":1273},[76,119386,24649],{"class":2035},[76,119388,117358],{"class":305},[76,119390,23906],{"class":305},[76,119392,119046],{"class":305},[169,119394,119396],{"id":119395},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119398,119399],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119401,119402],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[67,119404,119406],{"className":117337,"code":119405,"language":117339,"meta":58,"style":58},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[73,119407,119408,119413,119423,119431,119435],{"__ignoreMap":58},[76,119409,119410],{"class":78,"line":79},[76,119411,119412],{"class":82},"#删掉禁止安装snap的配置文件\n",[76,119414,119415,119417,119419,119421],{"class":78,"line":86},[76,119416,24649],{"class":2035},[76,119418,118594],{"class":305},[76,119420,25398],{"class":250},[76,119422,119256],{"class":305},[76,119424,119425,119427,119429],{"class":78,"line":97},[76,119426,24649],{"class":2035},[76,119428,117358],{"class":305},[76,119430,26315],{"class":305},[76,119432,119433],{"class":78,"line":103},[76,119434,2472],{"emptyLinePlaceholder":125},[76,119436,119437,119439,119441],{"class":78,"line":1273},[76,119438,24649],{"class":2035},[76,119440,117358],{"class":305},[76,119442,119443],{"class":305}," dist-update\n",[140,119445,119447],{"id":119446},"_33-中文输入法","3.3 中文输入法",[169,119449,119451],{"id":119450},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119453,119454],{},"官网下载搜狗输入法",[14,119456,119457],{},[56,119458],{"alt":58,"src":119459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119461,119462],{},[56,119463],{"alt":58,"src":119464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119466,119467],{},"打开终端输入如下",[67,119469,119471],{"className":117337,"code":119470,"language":117339,"meta":58,"style":58},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[73,119472,119473,119480],{"__ignoreMap":58},[76,119474,119475,119477],{"class":78,"line":79},[76,119476,101317],{"class":250},[76,119478,119479],{"class":305}," ~\u002FDownloads\u002F\n",[76,119481,119482,119484,119486,119488],{"class":78,"line":86},[76,119483,24649],{"class":2035},[76,119485,117358],{"class":305},[76,119487,23906],{"class":305},[76,119489,119490],{"class":305}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119492,119493],{},"打开Fcitx",[14,119495,119496,119499],{},[56,119497],{"alt":58,"src":119498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[56,119500],{"alt":58,"src":119501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119503,119504],{},[56,119505],{"alt":58,"src":119506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119508,119509],{},"添加搜狗输入法",[14,119511,119512],{},[56,119513],{"alt":58,"src":119514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119516,119517],{},[56,119518],{"alt":58,"src":119519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119521,119522],{},"将搜狗输入法设置为唯一输入法",[14,119524,119525],{},[56,119526],{"alt":58,"src":119527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[169,119529,119531],{"id":119530},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[152,119533,119534],{},[155,119535,119536],{},"卸载旧输入法",[67,119538,119540],{"className":118564,"code":119539,"language":118566,"meta":58,"style":58},"sudo apt purge fcitx* ibus*\n",[73,119541,119542],{"__ignoreMap":58},[76,119543,119544,119546,119548,119550,119553,119555,119558],{"class":78,"line":79},[76,119545,24649],{"class":2035},[76,119547,117358],{"class":305},[76,119549,117699],{"class":305},[76,119551,119552],{"class":305}," fcitx",[76,119554,655],{"class":250},[76,119556,119557],{"class":305}," ibus",[76,119559,119289],{"class":250},[152,119561,119562],{"start":86},[155,119563,119564],{},"安装Fcitx5",[67,119566,119568],{"className":117337,"code":119567,"language":117339,"meta":58,"style":58},"# 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",[73,119569,119570,119575,119589,119593,119598,119607,119615],{"__ignoreMap":58},[76,119571,119572],{"class":78,"line":79},[76,119573,119574],{"class":82},"# Ubuntu22.04及以上、Debian12及以上\n",[76,119576,119577,119579,119581,119583,119586],{"class":78,"line":86},[76,119578,24649],{"class":2035},[76,119580,117358],{"class":305},[76,119582,23906],{"class":305},[76,119584,119585],{"class":305}," fcitx5",[76,119587,119588],{"class":305}," fcitx5-chinese-addons\n",[76,119590,119591],{"class":78,"line":97},[76,119592,2472],{"emptyLinePlaceholder":125},[76,119594,119595],{"class":78,"line":103},[76,119596,119597],{"class":82},"# Ubuntu20.04\n",[76,119599,119600,119602,119604],{"class":78,"line":1273},[76,119601,24649],{"class":2035},[76,119603,118885],{"class":305},[76,119605,119606],{"class":305}," ppa:zhsj\u002Ffcitx5\n",[76,119608,119609,119611,119613],{"class":78,"line":1287},[76,119610,24649],{"class":2035},[76,119612,117358],{"class":305},[76,119614,26315],{"class":305},[76,119616,119617,119619,119621,119623,119625],{"class":78,"line":1293},[76,119618,24649],{"class":2035},[76,119620,117358],{"class":305},[76,119622,23906],{"class":305},[76,119624,119585],{"class":305},[76,119626,119588],{"class":305},[152,119628,119629,119632],{"start":97},[155,119630,119631],{},"Reboot System",[155,119633,119634],{},"启动Fcitx5",[14,119636,119637],{},[56,119638],{"alt":58,"src":119639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[152,119641,119642],{"start":1273},[155,119643,119644],{},"修改一些设置",[14,119646,119647],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119649,119650],{},[56,119651],{"alt":58,"src":119652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119654,119655],{},"添加快捷键以便于更好切换中英文",[14,119657,119658],{},[56,119659],{"alt":58,"src":119660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[152,119662,119663],{"start":1287},[155,119664,119665],{},"重启",[67,119667,119669],{"className":118564,"code":119668,"language":118566,"meta":58,"style":58},"sudo shutdown -r now\n",[73,119670,119671],{"__ignoreMap":58},[76,119672,119673,119675,119678,119681],{"class":78,"line":79},[76,119674,24649],{"class":2035},[76,119676,119677],{"class":305}," shutdown",[76,119679,119680],{"class":250}," -r",[76,119682,119683],{"class":305}," now\n",[152,119685,119686],{"start":1293},[155,119687,119688],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119690,119691],{},[439,119692,119693],{"href":119693,"rel":119694},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23937],[152,119696,119697],{"start":1384},[155,119698,119699],{},"再重启",[67,119701,119702],{"className":118564,"code":119668,"language":118566,"meta":58,"style":58},[73,119703,119704],{"__ignoreMap":58},[76,119705,119706,119708,119710,119712],{"class":78,"line":79},[76,119707,24649],{"class":2035},[76,119709,119677],{"class":305},[76,119711,119680],{"class":250},[76,119713,119683],{"class":305},[140,119715,119717],{"id":119716},"_34-pip3源替换","3.4 pip3源替换",[14,119719,119720],{},"非Debian系发行版需要做。",[14,119722,119723],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119725,119726],{},"使用dnf的系统也可能不用做。",[67,119728,119730],{"className":117337,"code":119729,"language":117339,"meta":58,"style":58},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[73,119731,119732,119737,119744,119749,119754],{"__ignoreMap":58},[76,119733,119734],{"class":78,"line":79},[76,119735,119736],{"class":82},"# 检查是否已安装 pip\n",[76,119738,119739,119742],{"class":78,"line":86},[76,119740,119741],{"class":2035},"pip3",[76,119743,26366],{"class":250},[76,119745,119746],{"class":78,"line":97},[76,119747,119748],{"class":82},"# 如果未安装，先安装 pip3（见下方）\n",[76,119750,119751],{"class":78,"line":103},[76,119752,119753],{"class":82},"# 配置 pip 使用清华源\n",[76,119755,119756,119758,119761,119764,119767],{"class":78,"line":1273},[76,119757,119741],{"class":2035},[76,119759,119760],{"class":305}," config",[76,119762,119763],{"class":305}," set",[76,119765,119766],{"class":305}," global.index-url",[76,119768,119769],{"class":305}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119771,119772],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119774,119775],{},[56,119776],{"alt":58,"src":119777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[67,119779,119781],{"className":117337,"code":119780,"language":117339,"meta":58,"style":58},"#安装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",[73,119782,119783,119788,119796,119807,119811,119816,119835,119839,119844,119856,119860,119865],{"__ignoreMap":58},[76,119784,119785],{"class":78,"line":79},[76,119786,119787],{"class":82},"#安装pip3\n",[76,119789,119790,119792,119794],{"class":78,"line":86},[76,119791,24649],{"class":2035},[76,119793,117358],{"class":305},[76,119795,26315],{"class":305},[76,119797,119798,119800,119802,119804],{"class":78,"line":97},[76,119799,24649],{"class":2035},[76,119801,26149],{"class":305},[76,119803,23906],{"class":305},[76,119805,119806],{"class":305}," python3-pip\n",[76,119808,119809],{"class":78,"line":103},[76,119810,2472],{"emptyLinePlaceholder":125},[76,119812,119813],{"class":78,"line":1273},[76,119814,119815],{"class":82},"#更新pip3\n",[76,119817,119818,119820,119822,119824,119826,119828,119831,119833],{"class":78,"line":1287},[76,119819,100920],{"class":2035},[76,119821,100923],{"class":250},[76,119823,100946],{"class":305},[76,119825,23906],{"class":305},[76,119827,26503],{"class":250},[76,119829,119830],{"class":305}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[76,119832,100951],{"class":250},[76,119834,100954],{"class":305},[76,119836,119837],{"class":78,"line":1293},[76,119838,2472],{"emptyLinePlaceholder":125},[76,119840,119841],{"class":78,"line":1384},[76,119842,119843],{"class":82},"#设置pip源为清华源\n",[76,119845,119846,119848,119850,119852,119854],{"class":78,"line":1390},[76,119847,119741],{"class":2035},[76,119849,119760],{"class":305},[76,119851,119763],{"class":305},[76,119853,119766],{"class":305},[76,119855,119769],{"class":305},[76,119857,119858],{"class":78,"line":1402},[76,119859,2472],{"emptyLinePlaceholder":125},[76,119861,119862],{"class":78,"line":1684},[76,119863,119864],{"class":82},"#测试\n",[76,119866,119867,119869,119871,119873,119875,119877],{"class":78,"line":1689},[76,119868,100920],{"class":2035},[76,119870,100923],{"class":250},[76,119872,100946],{"class":305},[76,119874,23906],{"class":305},[76,119876,100951],{"class":250},[76,119878,100954],{"class":305},[14,119880,119881],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119883,119884],{},[56,119885],{"alt":58,"src":119886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[140,119888,119890],{"id":119889},"_35-显卡驱动安装","3.5 显卡驱动安装",[169,119892,119894],{"id":119893},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[67,119896,119898],{"className":118564,"code":119897,"language":118566,"meta":58,"style":58},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[73,119899,119900,119905,119920,119925],{"__ignoreMap":58},[76,119901,119902],{"class":78,"line":79},[76,119903,119904],{"class":82},"# 如果是使用apt安装的驱动\n",[76,119906,119907,119909,119911,119913,119915,119918],{"class":78,"line":86},[76,119908,24649],{"class":2035},[76,119910,26149],{"class":305},[76,119912,26152],{"class":305},[76,119914,119199],{"class":250},[76,119916,119917],{"class":305}," nvidia",[76,119919,119289],{"class":250},[76,119921,119922],{"class":78,"line":97},[76,119923,119924],{"class":82},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[76,119926,119927,119929],{"class":78,"line":103},[76,119928,24649],{"class":2035},[76,119930,119931],{"class":305}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[169,119933,119935],{"id":119934},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22070,119937,119939],{"id":119938},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22982,119941,119943],{"id":119942},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[67,119945,119947],{"className":118564,"code":119946,"language":118566,"meta":58,"style":58},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[73,119948,119949,119954,119965,119970,119980,119985],{"__ignoreMap":58},[76,119950,119951],{"class":78,"line":79},[76,119952,119953],{"class":82},"# 安装英伟达驱动\n",[76,119955,119956,119958,119960,119962],{"class":78,"line":86},[76,119957,24649],{"class":2035},[76,119959,117358],{"class":305},[76,119961,23906],{"class":305},[76,119963,119964],{"class":305}," nvidia-driver-版本号\n",[76,119966,119967],{"class":78,"line":97},[76,119968,119969],{"class":82},"# 重启 \n",[76,119971,119972,119974,119976,119978],{"class":78,"line":103},[76,119973,24649],{"class":2035},[76,119975,119677],{"class":305},[76,119977,119680],{"class":250},[76,119979,119683],{"class":305},[76,119981,119982],{"class":78,"line":1273},[76,119983,119984],{"class":82},"# 检查驱动是否安装成功\n",[76,119986,119987],{"class":78,"line":1287},[76,119988,119989],{"class":2035},"nvidia-smi\n",[22982,119991,119993],{"id":119992},"_35212-debian","3.5.2.1.2 Debian",[67,119995,119997],{"className":118564,"code":119996,"language":118566,"meta":58,"style":58},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[73,119998,119999,120003,120017,120021,120031,120035],{"__ignoreMap":58},[76,120000,120001],{"class":78,"line":79},[76,120002,119953],{"class":82},[76,120004,120005,120007,120009,120011,120014],{"class":78,"line":86},[76,120006,24649],{"class":2035},[76,120008,117358],{"class":305},[76,120010,23906],{"class":305},[76,120012,120013],{"class":305}," nvidia-driver",[76,120015,120016],{"class":305}," nvidia-settings\n",[76,120018,120019],{"class":78,"line":97},[76,120020,119969],{"class":82},[76,120022,120023,120025,120027,120029],{"class":78,"line":103},[76,120024,24649],{"class":2035},[76,120026,119677],{"class":305},[76,120028,119680],{"class":250},[76,120030,119683],{"class":305},[76,120032,120033],{"class":78,"line":1273},[76,120034,119984],{"class":82},[76,120036,120037],{"class":78,"line":1287},[76,120038,119989],{"class":2035},[22070,120040,120042],{"id":120041},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120044,120045,120046,120049],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[350,120047,120048],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120051,120052,120053],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23625,120054,120055],{},[350,120056,120057],{},"（也可以不禁用桌面环境，直接进行下一步。）",[67,120059,120061],{"className":118564,"code":120060,"language":118566,"meta":58,"style":58},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[73,120062,120063,120068,120078,120083,120096,120101],{"__ignoreMap":58},[76,120064,120065],{"class":78,"line":79},[76,120066,120067],{"class":82},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[76,120069,120070,120072,120075],{"class":78,"line":86},[76,120071,24649],{"class":2035},[76,120073,120074],{"class":305}," telinit",[76,120076,120077],{"class":250}," 3\n",[76,120079,120080],{"class":78,"line":97},[76,120081,120082],{"class":82},"# ubuntu 使用下方命令\n",[76,120084,120085,120087,120090,120093],{"class":78,"line":103},[76,120086,24649],{"class":2035},[76,120088,120089],{"class":305}," service",[76,120091,120092],{"class":305}," lightdm",[76,120094,120095],{"class":305}," stop\n",[76,120097,120098],{"class":78,"line":1273},[76,120099,120100],{"class":82},"# Fedora 使用下方命令\n",[76,120102,120103,120105,120107,120110],{"class":78,"line":1287},[76,120104,24649],{"class":2035},[76,120106,26586],{"class":305},[76,120108,120109],{"class":305}," isolate",[76,120111,120112],{"class":305}," multi-user.target\n",[14,120114,120115],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[67,120117,120119],{"className":118564,"code":120118,"language":118566,"meta":58,"style":58},"# 编译环境+准备工作\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",[73,120120,120121,120126,120137,120142,120149,120154,120166,120171,120178,120183],{"__ignoreMap":58},[76,120122,120123],{"class":78,"line":79},[76,120124,120125],{"class":82},"# 编译环境+准备工作\n",[76,120127,120128,120130,120132,120134],{"class":78,"line":86},[76,120129,24649],{"class":2035},[76,120131,117358],{"class":305},[76,120133,23906],{"class":305},[76,120135,120136],{"class":305}," build-essential\n",[76,120138,120139],{"class":78,"line":97},[76,120140,120141],{"class":82},"# 进入到.run目录中\n",[76,120143,120144,120146],{"class":78,"line":103},[76,120145,101317],{"class":250},[76,120147,120148],{"class":305}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[76,120150,120151],{"class":78,"line":1273},[76,120152,120153],{"class":82},"# 给驱动文件增加可执行权限：\n",[76,120155,120156,120158,120160,120163],{"class":78,"line":1287},[76,120157,24649],{"class":2035},[76,120159,24652],{"class":305},[76,120161,120162],{"class":305}," a+x",[76,120164,120165],{"class":305}," NVIDIA-Linux-x86_64-550.107.02.run\n",[76,120167,120168],{"class":78,"line":1293},[76,120169,120170],{"class":82},"# 然后执行安装：\n",[76,120172,120173,120175],{"class":78,"line":1384},[76,120174,24649],{"class":2035},[76,120176,120177],{"class":305}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[76,120179,120180],{"class":78,"line":1390},[76,120181,120182],{"class":82},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[76,120184,120185,120187,120190],{"class":78,"line":1402},[76,120186,24649],{"class":2035},[76,120188,120189],{"class":305}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[76,120191,120192],{"class":250},"  --no-opengl-files\n",[14,120194,120195],{},"安装完毕重启即可",[67,120197,120199],{"className":118564,"code":120198,"language":118566,"meta":58,"style":58},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[73,120200,120201,120205,120211,120215],{"__ignoreMap":58},[76,120202,120203],{"class":78,"line":79},[76,120204,119969],{"class":82},[76,120206,120207,120209],{"class":78,"line":86},[76,120208,24649],{"class":2035},[76,120210,26720],{"class":305},[76,120212,120213],{"class":78,"line":97},[76,120214,119984],{"class":82},[76,120216,120217],{"class":78,"line":103},[76,120218,119989],{"class":2035},[169,120220,120222],{"id":120221},"_353-安装cuda","3.5.3 安装CUDA",[14,120224,120225],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120227,120228],{},[56,120229],{"alt":58,"src":120230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[152,120232,120233],{},[155,120234,120235],{},"先查看显卡驱动所支持的最高CUDA版本",[67,120237,120238],{"className":118564,"code":119989,"language":118566,"meta":58,"style":58},[73,120239,120240],{"__ignoreMap":58},[76,120241,120242],{"class":78,"line":79},[76,120243,119989],{"class":2035},[14,120245,120246],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120248,120249],{},[56,120250],{"alt":58,"src":120251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[152,120253,120254],{"start":86},[155,120255,120256],{},"下载CUDA并安装CUDA",[14,120258,118343,120259],{},[439,120260,118346],{"href":118346,"rel":120261},[23937],[14,120263,120264],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120266,120267],{},[56,120268],{"alt":58,"src":120269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120271,120272,120273,120278],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[439,120274,120277],{"href":120275,"rel":120276},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23937],"Vinci机器人队单片机教程","）",[14,120280,120281],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120283,120284],{},[56,120285],{"alt":58,"src":120286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120288,120289],{},"将最下方框框里的命令敲入终端",[67,120291,120293],{"className":118564,"code":120292,"language":118566,"meta":58,"style":58},"# 在当前文件夹下创建一个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",[73,120294,120295,120300,120309,120314,120321,120326,120334,120339,120350,120355],{"__ignoreMap":58},[76,120296,120297],{"class":78,"line":79},[76,120298,120299],{"class":82},"# 在当前文件夹下创建一个ttt的子文件夹\n",[76,120301,120302,120304,120306],{"class":78,"line":86},[76,120303,101307],{"class":2035},[76,120305,29289],{"class":250},[76,120307,120308],{"class":305}," .\u002Fttt\n",[76,120310,120311],{"class":78,"line":97},[76,120312,120313],{"class":82},"# 进入ttt文件夹\n",[76,120315,120316,120318],{"class":78,"line":103},[76,120317,101317],{"class":250},[76,120319,120320],{"class":305}," ttt\n",[76,120322,120323],{"class":78,"line":1273},[76,120324,120325],{"class":82},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[76,120327,120328,120331],{"class":78,"line":1287},[76,120329,120330],{"class":2035},"wget",[76,120332,120333],{"class":305}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[76,120335,120336],{"class":78,"line":1293},[76,120337,120338],{"class":82},"# 给予权限\n",[76,120340,120341,120343,120345,120347],{"class":78,"line":1384},[76,120342,24649],{"class":2035},[76,120344,24652],{"class":305},[76,120346,120162],{"class":305},[76,120348,120349],{"class":305}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[76,120351,120352],{"class":78,"line":1390},[76,120353,120354],{"class":82},"# 运行脚本\n",[76,120356,120357,120359],{"class":78,"line":1402},[76,120358,24649],{"class":2035},[76,120360,120349],{"class":305},[14,120362,120363],{},[56,120364],{"alt":58,"src":120365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120367,120368],{},"正在安装中：",[14,120370,120371],{},[56,120372],{"alt":58,"src":120373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120375,120376],{},"输入accept接受即可",[14,120378,120379],{},[56,120380],{"alt":58,"src":120381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120383,120384],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120386,120387],{},[56,120388],{"alt":58,"src":120389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120391,120392],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120394,120395],{},[56,120396],{"alt":58,"src":120397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[152,120399,120400],{"start":97},[155,120401,120402],{},"配置环境",[14,120404,120405],{},"根据上方确认一下路径，比如我上面红色框起来的为",[67,120407,120409],{"className":118564,"code":120408,"language":118566,"meta":58,"style":58},"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",[73,120410,120411,120427,120442],{"__ignoreMap":58},[76,120412,120413,120416,120419,120422,120425],{"class":78,"line":79},[76,120414,120415],{"class":2035},"Please",[76,120417,120418],{"class":305}," make",[76,120420,120421],{"class":305}," sure",[76,120423,120424],{"class":305}," that",[76,120426,2746],{"class":93},[76,120428,120429,120431,120434,120437,120440],{"class":78,"line":86},[76,120430,52341],{"class":2035},[76,120432,120433],{"class":305},"   PATH",[76,120435,120436],{"class":305}," includes",[76,120438,120439],{"class":305}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[76,120441,2746],{"class":93},[76,120443,120444,120446,120449,120451,120454,120457,120459,120462,120465,120468,120471,120473,120476,120478],{"class":78,"line":97},[76,120445,52341],{"class":2035},[76,120447,120448],{"class":305},"   LD_LIBRARY_PATH",[76,120450,120436],{"class":305},[76,120452,120453],{"class":305}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[76,120455,120456],{"class":305}," or,",[76,120458,5281],{"class":305},[76,120460,120461],{"class":305}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[76,120463,120464],{"class":305}," to",[76,120466,120467],{"class":305}," \u002Fetc\u002Fld.so.conf",[76,120469,120470],{"class":305}," and",[76,120472,27303],{"class":305},[76,120474,120475],{"class":305}," ldconfig",[76,120477,64674],{"class":305},[76,120479,120480],{"class":305}," root\n",[14,120482,120483],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[67,120485,120487],{"className":118564,"code":120486,"language":118566,"meta":58,"style":58},"which nvcc\n",[73,120488,120489],{"__ignoreMap":58},[76,120490,120491,120494],{"class":78,"line":79},[76,120492,120493],{"class":250},"which",[76,120495,120496],{"class":305}," nvcc\n",[14,120498,120499],{},[56,120500],{"alt":58,"src":120501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120503,120504],{},"所以我进行以下操作：",[67,120506,120508],{"className":118564,"code":120507,"language":118566,"meta":58,"style":58},"sudo vim ~\u002F.bashrc\n",[73,120509,120510],{"__ignoreMap":58},[76,120511,120512,120514,120516],{"class":78,"line":79},[76,120513,24649],{"class":2035},[76,120515,118624],{"class":305},[76,120517,120518],{"class":305}," ~\u002F.bashrc\n",[14,120520,120521],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[67,120523,120525],{"className":118564,"code":120524,"language":118566,"meta":58,"style":58},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[73,120526,120527,120539],{"__ignoreMap":58},[76,120528,120529,120531,120534,120536],{"class":78,"line":79},[76,120530,25115],{"class":89},[76,120532,120533],{"class":93}," PATH",[76,120535,247],{"class":89},[76,120537,120538],{"class":93},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[76,120540,120541,120543,120546,120548],{"class":78,"line":86},[76,120542,25115],{"class":89},[76,120544,120545],{"class":93}," LD_LIBRARY_PATH",[76,120547,247],{"class":89},[76,120549,120550],{"class":93},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120552,120553],{},[56,120554],{"alt":58,"src":120555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[67,120557,120559],{"className":118564,"code":120558,"language":118566,"meta":58,"style":58},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[73,120560,120561,120566,120572,120577],{"__ignoreMap":58},[76,120562,120563],{"class":78,"line":79},[76,120564,120565],{"class":82},"# 刷新当前终端的环境变量\n",[76,120567,120568,120570],{"class":78,"line":86},[76,120569,100934],{"class":250},[76,120571,120518],{"class":305},[76,120573,120574],{"class":78,"line":97},[76,120575,120576],{"class":82},"# 验证CUDA是否安装成功\n",[76,120578,120579,120582],{"class":78,"line":103},[76,120580,120581],{"class":2035},"nvcc",[76,120583,120584],{"class":250}," -V\n",[14,120586,120587],{},"出现下图这种则安装成功。",[14,120589,120590],{},[56,120591],{"alt":58,"src":120592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[169,120594,120596],{"id":120595},"_354-安装cudnn","3.5.4 安装cuDNN",[152,120598,120599],{},[155,120600,120601],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120603,120604,120605,120610],{},"前往 NVIDIA cuDNN 下载页面：",[439,120606,120609],{"href":120607,"rel":120608},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23937],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120612,120613],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120615,120616],{},[56,120617],{"alt":58,"src":120618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120620,120621],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120623,120624],{},[56,120625],{"alt":58,"src":120626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120628,120629],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120631,120632],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120634,120635],{},[350,120636,120637],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120639,120640],{},"下载好的：",[14,120642,120643],{},[56,120644],{"alt":58,"src":120645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[152,120647,120648],{"start":86},[155,120649,120650],{},"安装cuDNN",[14,120652,120653],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120655,120656],{},[56,120657],{"alt":58,"src":120658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120660,120661],{},"解压文件，并复制到对应位置完成安装",[67,120663,120665],{"className":118564,"code":120664,"language":118566,"meta":58,"style":58},"# 解压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",[73,120666,120667,120672,120683,120688,120695,120700,120716,120730,120735,120746,120755,120759,120775],{"__ignoreMap":58},[76,120668,120669],{"class":78,"line":79},[76,120670,120671],{"class":82},"# 解压cuDNN文件\n",[76,120673,120674,120677,120680],{"class":78,"line":86},[76,120675,120676],{"class":2035},"tar",[76,120678,120679],{"class":250}," -xvf",[76,120681,120682],{"class":305}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[76,120684,120685],{"class":78,"line":97},[76,120686,120687],{"class":82},"# cd进文件夹\n",[76,120689,120690,120692],{"class":78,"line":103},[76,120691,101317],{"class":250},[76,120693,120694],{"class":305}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[76,120696,120697],{"class":78,"line":1273},[76,120698,120699],{"class":82},"# 复制cuDNN文件到CUDA目录\n",[76,120701,120702,120704,120706,120709,120711,120714],{"class":78,"line":1287},[76,120703,24649],{"class":2035},[76,120705,27934],{"class":305},[76,120707,120708],{"class":305}," include\u002Fcudnn",[76,120710,655],{"class":250},[76,120712,120713],{"class":305},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[76,120715,2746],{"class":93},[76,120717,120718,120720,120722,120725,120727],{"class":78,"line":1293},[76,120719,24649],{"class":2035},[76,120721,27934],{"class":305},[76,120723,120724],{"class":305}," lib\u002Flibcudnn",[76,120726,655],{"class":250},[76,120728,120729],{"class":305},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[76,120731,120732],{"class":78,"line":1384},[76,120733,120734],{"class":82},"# 对比一下有没有缺文件\n",[76,120736,120737,120739,120742,120744],{"class":78,"line":1390},[76,120738,26834],{"class":2035},[76,120740,120741],{"class":305}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[76,120743,655],{"class":250},[76,120745,2746],{"class":93},[76,120747,120748,120750,120753],{"class":78,"line":1402},[76,120749,26834],{"class":2035},[76,120751,120752],{"class":305}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[76,120754,119289],{"class":250},[76,120756,120757],{"class":78,"line":1684},[76,120758,120338],{"class":82},[76,120760,120761,120763,120765,120768,120770,120772],{"class":78,"line":1689},[76,120762,24649],{"class":2035},[76,120764,24652],{"class":305},[76,120766,120767],{"class":305}," a+r",[76,120769,120741],{"class":305},[76,120771,655],{"class":250},[76,120773,120774],{"class":93},"   \n",[76,120776,120777,120779,120781,120783,120785],{"class":78,"line":1695},[76,120778,24649],{"class":2035},[76,120780,24652],{"class":305},[76,120782,120767],{"class":305},[76,120784,120752],{"class":305},[76,120786,119289],{"class":250},[152,120788,120789],{"start":97},[155,120790,120791],{},"检查是否安装成功",[67,120793,120795],{"className":118564,"code":120794,"language":118566,"meta":58,"style":58},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[73,120796,120797,120802],{"__ignoreMap":58},[76,120798,120799],{"class":78,"line":79},[76,120800,120801],{"class":82},"# 检查cuDNN版本命令\n",[76,120803,120804,120807,120810,120812,120814,120817,120820],{"class":78,"line":86},[76,120805,120806],{"class":2035},"cat",[76,120808,120809],{"class":305}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[76,120811,25182],{"class":89},[76,120813,30309],{"class":2035},[76,120815,120816],{"class":305}," CUDNN_MAJOR",[76,120818,120819],{"class":250}," -A",[76,120821,47793],{"class":250},[14,120823,120824],{},"出现下图这样的就是安装成功了",[14,120826,120827],{},[56,120828],{"alt":58,"src":120829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[152,120831,120832],{"start":103},[155,120833,120834],{},"软链接(一般不需要)",[67,120836,120838],{"className":118564,"code":120837,"language":118566,"meta":58,"style":58},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[73,120839,120840,120845],{"__ignoreMap":58},[76,120841,120842],{"class":78,"line":79},[76,120843,120844],{"class":82},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[76,120846,120847,120849],{"class":78,"line":86},[76,120848,24649],{"class":2035},[76,120850,120851],{"class":305}," ldconfig\n",[14,120853,120854],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[67,120856,120861],{"className":120857,"code":120858,"language":120859,"meta":120860,"style":58},"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",[73,120862,120863,120868,120873,120878,120883,120888,120893],{"__ignoreMap":58},[76,120864,120865],{"class":78,"line":79},[76,120866,120867],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[76,120869,120870],{"class":78,"line":86},[76,120871,120872],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[76,120874,120875],{"class":78,"line":97},[76,120876,120877],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[76,120879,120880],{"class":78,"line":103},[76,120881,120882],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[76,120884,120885],{"class":78,"line":1273},[76,120886,120887],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[76,120889,120890],{"class":78,"line":1287},[76,120891,120892],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[76,120894,120895],{"class":78,"line":1293},[76,120896,120897],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120899,120900],{},"运行下方的命令",[67,120902,120904],{"className":118564,"code":120903,"language":118566,"meta":58,"style":58},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[73,120905,120906,120911,120918,120923],{"__ignoreMap":58},[76,120907,120908],{"class":78,"line":79},[76,120909,120910],{"class":82},"# cd进入CUDA路径\n",[76,120912,120913,120915],{"class":78,"line":86},[76,120914,101317],{"class":250},[76,120916,120917],{"class":305}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[76,120919,120920],{"class":78,"line":97},[76,120921,120922],{"class":82}," # 查看本路径下的需要软链接的文件名\n",[76,120924,120925],{"class":78,"line":103},[76,120926,120927],{"class":2035}," ls\n",[14,120929,120930],{},[56,120931],{"alt":58,"src":120932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120934,120935,120936,18482,120939,18482,120942,120945],{},"如上图，我需要将",[73,120937,120938],{},"libcudnn_xxx_xxxxx.so.8.9.7",[73,120940,120941],{},"libcudnn_xxx_xxxxx.so.8",[73,120943,120944],{},"libcudnn_xxx_xxxxx.so","软链接",[67,120947,120949],{"className":118564,"code":120948,"language":118566,"meta":58,"style":58},"# 创建符号链接。对于每个 .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",[73,120950,120951,120956,120972,120986,121000,121014,121028,121042,121056,121061,121067,121072],{"__ignoreMap":58},[76,120952,120953],{"class":78,"line":79},[76,120954,120955],{"class":82},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[76,120957,120958,120960,120963,120966,120969],{"class":78,"line":86},[76,120959,24649],{"class":2035},[76,120961,120962],{"class":305}," ln",[76,120964,120965],{"class":250}," -sf",[76,120967,120968],{"class":305}," libcudnn_cnn_train.so.8.9.7",[76,120970,120971],{"class":305}," libcudnn_cnn_train.so.8\n",[76,120973,120974,120976,120978,120980,120983],{"class":78,"line":97},[76,120975,24649],{"class":2035},[76,120977,120962],{"class":305},[76,120979,120965],{"class":250},[76,120981,120982],{"class":305}," libcudnn_adv_infer.so.8.9.7",[76,120984,120985],{"class":305}," libcudnn_adv_infer.so.8\n",[76,120987,120988,120990,120992,120994,120997],{"class":78,"line":103},[76,120989,24649],{"class":2035},[76,120991,120962],{"class":305},[76,120993,120965],{"class":250},[76,120995,120996],{"class":305}," libcudnn_adv_train.so.8.9.7",[76,120998,120999],{"class":305}," libcudnn_adv_train.so.8\n",[76,121001,121002,121004,121006,121008,121011],{"class":78,"line":1273},[76,121003,24649],{"class":2035},[76,121005,120962],{"class":305},[76,121007,120965],{"class":250},[76,121009,121010],{"class":305}," libcudnn_cnn_infer.so.8.9.7",[76,121012,121013],{"class":305}," libcudnn_cnn_infer.so.8\n",[76,121015,121016,121018,121020,121022,121025],{"class":78,"line":1287},[76,121017,24649],{"class":2035},[76,121019,120962],{"class":305},[76,121021,120965],{"class":250},[76,121023,121024],{"class":305}," libcudnn.so.8.9.7",[76,121026,121027],{"class":305}," libcudnn.so.8\n",[76,121029,121030,121032,121034,121036,121039],{"class":78,"line":1293},[76,121031,24649],{"class":2035},[76,121033,120962],{"class":305},[76,121035,120965],{"class":250},[76,121037,121038],{"class":305}," libcudnn_ops_infer.so.8.9.7",[76,121040,121041],{"class":305}," libcudnn_ops_infer.so.8\n",[76,121043,121044,121046,121048,121050,121053],{"class":78,"line":1384},[76,121045,24649],{"class":2035},[76,121047,120962],{"class":305},[76,121049,120965],{"class":250},[76,121051,121052],{"class":305}," libcudnn_ops_train.so.8.9.7",[76,121054,121055],{"class":305}," libcudnn_ops_train.so.8\n",[76,121057,121058],{"class":78,"line":1390},[76,121059,121060],{"class":82},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[76,121062,121063,121065],{"class":78,"line":1402},[76,121064,24649],{"class":2035},[76,121066,120851],{"class":305},[76,121068,121069],{"class":78,"line":1684},[76,121070,121071],{"class":82},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[76,121073,121074,121076,121079,121082,121084,121087],{"class":78,"line":1689},[76,121075,26834],{"class":2035},[76,121077,121078],{"class":250}," -l",[76,121080,121081],{"class":305}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[76,121083,655],{"class":250},[76,121085,121086],{"class":305},".so",[76,121088,119289],{"class":250},[169,121090,121092],{"id":121091},"_355-常见问题","3.5.5 常见问题",[152,121094,121095],{},[155,121096,121097],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[67,121099,121101],{"className":118564,"code":121100,"language":118566,"meta":58,"style":58},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[73,121102,121103],{"__ignoreMap":58},[76,121104,121105,121107,121109],{"class":78,"line":79},[76,121106,24649],{"class":2035},[76,121108,118624],{"class":305},[76,121110,121111],{"class":305}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121113,121114],{},"blacklist-nouveau.conf文件内容如下：",[67,121116,121118],{"className":118564,"code":121117,"language":118566,"meta":58,"style":58},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[73,121119,121120,121128,121135,121147,121157],{"__ignoreMap":58},[76,121121,121122,121125],{"class":78,"line":79},[76,121123,121124],{"class":2035},"blacklist",[76,121126,121127],{"class":305}," nouveau\n",[76,121129,121130,121132],{"class":78,"line":86},[76,121131,121124],{"class":2035},[76,121133,121134],{"class":305}," lbm-nouveau\n",[76,121136,121137,121139,121142,121145],{"class":78,"line":97},[76,121138,115971],{"class":2035},[76,121140,121141],{"class":305}," nouveau",[76,121143,121144],{"class":305}," modeset=",[76,121146,3157],{"class":250},[76,121148,121149,121152,121154],{"class":78,"line":103},[76,121150,121151],{"class":250},"alias",[76,121153,121141],{"class":305},[76,121155,121156],{"class":305}," off\n",[76,121158,121159,121161,121164],{"class":78,"line":1273},[76,121160,121151],{"class":250},[76,121162,121163],{"class":305}," lbm-nouveau",[76,121165,121156],{"class":305},[14,121167,121168],{},"接着运行下方命令",[67,121170,121172],{"className":118564,"code":121171,"language":118566,"meta":58,"style":58},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[73,121173,121174,121184,121189],{"__ignoreMap":58},[76,121175,121176,121178,121181],{"class":78,"line":79},[76,121177,24649],{"class":2035},[76,121179,121180],{"class":305}," update-initramfs",[76,121182,121183],{"class":250}," -u\n",[76,121185,121186],{"class":78,"line":86},[76,121187,121188],{"class":2035},"或者\n",[76,121190,121191,121193,121196],{"class":78,"line":97},[76,121192,24649],{"class":2035},[76,121194,121195],{"class":305}," dracut",[76,121197,121198],{"class":250}," --force\n",[14,121200,121201],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[67,121203,121205],{"className":118564,"code":121204,"language":118566,"meta":58,"style":58},"lsmod | grep nouveau\n",[73,121206,121207],{"__ignoreMap":58},[76,121208,121209,121212,121214,121216],{"class":78,"line":79},[76,121210,121211],{"class":2035},"lsmod",[76,121213,25182],{"class":89},[76,121215,30309],{"class":2035},[76,121217,121127],{"class":305},[152,121219,121220],{"start":86},[155,121221,121222],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[67,121224,121226],{"className":118564,"code":121225,"language":118566,"meta":58,"style":58},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[73,121227,121228],{"__ignoreMap":58},[76,121229,121230,121232,121234],{"class":78,"line":79},[76,121231,24649],{"class":2035},[76,121233,118624],{"class":305},[76,121235,121236],{"class":305}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121238,121239],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[67,121241,121243],{"className":118564,"code":121242,"language":118566,"meta":58,"style":58},"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",[73,121244,121245,121253,121261,121269,121276,121284,121294,121302],{"__ignoreMap":58},[76,121246,121247,121250],{"class":78,"line":79},[76,121248,121249],{"class":2035},"Section",[76,121251,121252],{"class":305}," \"OutputClass\"\n",[76,121254,121255,121258],{"class":78,"line":86},[76,121256,121257],{"class":2035},"   Identifier",[76,121259,121260],{"class":305}," \"nvidia\"\n",[76,121262,121263,121266],{"class":78,"line":97},[76,121264,121265],{"class":2035},"   MatchDriver",[76,121267,121268],{"class":305}," \"nvidia-drm\"\n",[76,121270,121271,121274],{"class":78,"line":103},[76,121272,121273],{"class":2035},"   Driver",[76,121275,121260],{"class":305},[76,121277,121278,121281],{"class":78,"line":1273},[76,121279,121280],{"class":2035},"   Option",[76,121282,121283],{"class":305}," \"AllowEmptyInitialConfiguration\"\n",[76,121285,121286,121288,121291],{"class":78,"line":1287},[76,121287,121280],{"class":2035},[76,121289,121290],{"class":305}," \"PrimaryGPU\"",[76,121292,121293],{"class":305}," \"yes\"\n",[76,121295,121296,121299],{"class":78,"line":1293},[76,121297,121298],{"class":2035},"   ModulePath",[76,121300,121301],{"class":305}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[76,121303,121304],{"class":78,"line":1384},[76,121305,121306],{"class":2035},"EndSection\n",[152,121308,121309],{"start":97},[155,121310,121311],{},"安装N卡驱动提示错误",[67,121313,121315],{"className":120857,"code":121314,"language":120859,"meta":120860,"style":58},"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",[73,121316,121317],{"__ignoreMap":58},[76,121318,121319],{"class":78,"line":79},[76,121320,121314],{},[152,121322,121323],{},[155,121324,121325],{},"检查当前运行的内核版本：",[14,121327,121328],{},"运行以下命令以查看你当前正在使用的内核版本：",[67,121330,121332],{"className":117337,"code":121331,"language":117339,"meta":58,"style":58},"uname -r\n",[73,121333,121334],{"__ignoreMap":58},[76,121335,121336,121338],{"class":78,"line":79},[76,121337,70274],{"class":2035},[76,121339,121340],{"class":250}," -r\n",[152,121342,121343],{"start":86},[155,121344,121345],{},"安装内核开发文件：",[14,121347,121348,121349,121352],{},"确保你已经安装了与当前内核版本相匹配的 ",[73,121350,121351],{},"kernel-devel"," 包。运行以下命令来安装：",[67,121354,121356],{"className":117337,"code":121355,"language":117339,"meta":58,"style":58},"sudo dnf install kernel-devel-$(uname -r)\n",[73,121357,121358],{"__ignoreMap":58},[76,121359,121360,121362,121364,121366,121369,121371,121373,121375],{"class":78,"line":79},[76,121361,24649],{"class":2035},[76,121363,26388],{"class":305},[76,121365,23906],{"class":305},[76,121367,121368],{"class":305}," kernel-devel-",[76,121370,25172],{"class":93},[76,121372,70274],{"class":2035},[76,121374,119680],{"class":250},[76,121376,208],{"class":93},[14,121378,121379],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[152,121381,121382],{"start":97},[155,121383,121384],{},"安装内核源代码（如果需要）：",[14,121386,121387],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[67,121389,121391],{"className":117337,"code":121390,"language":117339,"meta":58,"style":58},"sudo dnf install kernel-headers kernel-source\n",[73,121392,121393],{"__ignoreMap":58},[76,121394,121395,121397,121399,121401,121404],{"class":78,"line":79},[76,121396,24649],{"class":2035},[76,121398,26388],{"class":305},[76,121400,23906],{"class":305},[76,121402,121403],{"class":305}," kernel-headers",[76,121405,121406],{"class":305}," kernel-source\n",[152,121408,121409],{"start":103},[155,121410,121411],{},"检查安装：",[14,121413,121414,121415,121418],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[73,121416,121417],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[67,121420,121422],{"className":117337,"code":121421,"language":117339,"meta":58,"style":58},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[73,121423,121424],{"__ignoreMap":58},[76,121425,121426,121428],{"class":78,"line":79},[76,121427,26834],{"class":2035},[76,121429,121430],{"class":305}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121432,121433,121434,121437],{},"如果仍然遇到问题，可以通过 ",[73,121435,121436],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[117,121439,121440],{},"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":58,"searchDepth":86,"depth":86,"links":121442},[121443,121447,121457,121461,121462],{"id":118540,"depth":86,"text":118541,"children":121444},[121445,121446],{"id":118550,"depth":97,"text":118551},{"id":118560,"depth":97,"text":118561},{"id":118760,"depth":86,"text":118761,"children":121448},[121449,121450,121451,121452,121453,121454,121455,121456],{"id":118764,"depth":97,"text":118765},{"id":118834,"depth":97,"text":118835},{"id":118923,"depth":97,"text":118924},{"id":119168,"depth":97,"text":119169},{"id":119238,"depth":97,"text":119239},{"id":119305,"depth":97,"text":119306},{"id":119340,"depth":97,"text":119341},{"id":119395,"depth":97,"text":119396},{"id":119446,"depth":86,"text":119447,"children":121458},[121459,121460],{"id":119450,"depth":97,"text":119451},{"id":119530,"depth":97,"text":119531},{"id":119716,"depth":86,"text":119717},{"id":119889,"depth":86,"text":119890,"children":121463},[121464,121465,121466,121467,121468],{"id":119893,"depth":97,"text":119894},{"id":119934,"depth":97,"text":119935},{"id":120221,"depth":97,"text":120222},{"id":120595,"depth":97,"text":120596},{"id":121091,"depth":97,"text":121092},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118532,"description":122},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121475,"title":121476,"body":121477,"description":122,"extension":123,"meta":121817,"navigation":125,"path":121818,"seo":121819,"stem":121820,"__hash__":121821},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121478,"toc":121815},[121479,121482,121487,121490,121736,121741,121744,121780,121783,121812],[10,121480,121476],{"id":121481},"_4-命令教程长期积累",[152,121483,121484],{},[155,121485,121486],{},"大多数命令",[14,121488,121489],{},"常用 Linux 命令速查：",[67,121491,121493],{"className":117337,"code":121492,"language":117339,"meta":58,"style":58},"# 文件与目录\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",[73,121494,121495,121500,121507,121514,121522,121529,121536,121544,121552,121559,121566,121574,121578,121583,121590,121598,121605,121609,121614,121621,121629,121637,121645,121653,121657,121662,121670,121677,121684,121692,121700,121704,121709,121718,121727],{"__ignoreMap":58},[76,121496,121497],{"class":78,"line":79},[76,121498,121499],{"class":82},"# 文件与目录\n",[76,121501,121502,121504],{"class":78,"line":86},[76,121503,26834],{"class":2035},[76,121505,121506],{"class":82},"        # 列出目录内容\n",[76,121508,121509,121511],{"class":78,"line":97},[76,121510,101317],{"class":250},[76,121512,121513],{"class":82},"        # 切换目录\n",[76,121515,121516,121519],{"class":78,"line":103},[76,121517,121518],{"class":250},"pwd",[76,121520,121521],{"class":82},"       # 显示当前路径\n",[76,121523,121524,121526],{"class":78,"line":1273},[76,121525,101307],{"class":2035},[76,121527,121528],{"class":82},"     # 创建目录\n",[76,121530,121531,121533],{"class":78,"line":1287},[76,121532,25395],{"class":2035},[76,121534,121535],{"class":82},"        # 删除文件或目录\n",[76,121537,121538,121541],{"class":78,"line":1293},[76,121539,121540],{"class":2035},"cp",[76,121542,121543],{"class":82},"        # 复制文件或目录\n",[76,121545,121546,121549],{"class":78,"line":1384},[76,121547,121548],{"class":2035},"mv",[76,121550,121551],{"class":82},"        # 移动\u002F重命名文件或目录\n",[76,121553,121554,121556],{"class":78,"line":1390},[76,121555,101324],{"class":2035},[76,121557,121558],{"class":82},"     # 创建空文件\n",[76,121560,121561,121563],{"class":78,"line":1402},[76,121562,120806],{"class":2035},[76,121564,121565],{"class":82},"       # 查看文件内容\n",[76,121567,121568,121571],{"class":78,"line":1684},[76,121569,121570],{"class":2035},"head\u002Ftail",[76,121572,121573],{"class":82}," # 查看文件头部\u002F尾部\n",[76,121575,121576],{"class":78,"line":1689},[76,121577,2472],{"emptyLinePlaceholder":125},[76,121579,121580],{"class":78,"line":1695},[76,121581,121582],{"class":82},"# 权限管理\n",[76,121584,121585,121587],{"class":78,"line":1700},[76,121586,24684],{"class":2035},[76,121588,121589],{"class":82},"     # 修改文件权限\n",[76,121591,121592,121595],{"class":78,"line":1714},[76,121593,121594],{"class":2035},"chown",[76,121596,121597],{"class":82},"     # 修改文件所有者\n",[76,121599,121600,121602],{"class":78,"line":1719},[76,121601,24649],{"class":2035},[76,121603,121604],{"class":82},"      # 以管理员身份执行\n",[76,121606,121607],{"class":78,"line":1725},[76,121608,2472],{"emptyLinePlaceholder":125},[76,121610,121611],{"class":78,"line":1746},[76,121612,121613],{"class":82},"# 系统信息\n",[76,121615,121616,121618],{"class":78,"line":1751},[76,121617,70274],{"class":2035},[76,121619,121620],{"class":82},"     # 系统信息\n",[76,121622,121623,121626],{"class":78,"line":1765},[76,121624,121625],{"class":2035},"df",[76,121627,121628],{"class":82},"        # 磁盘使用情况\n",[76,121630,121631,121634],{"class":78,"line":1770},[76,121632,121633],{"class":2035},"free",[76,121635,121636],{"class":82},"      # 内存使用情况\n",[76,121638,121639,121642],{"class":78,"line":1799},[76,121640,121641],{"class":2035},"top\u002Fhtop",[76,121643,121644],{"class":82},"  # 进程监控\n",[76,121646,121647,121650],{"class":78,"line":1804},[76,121648,121649],{"class":2035},"ps",[76,121651,121652],{"class":82},"        # 查看进程\n",[76,121654,121655],{"class":78,"line":1821},[76,121656,2472],{"emptyLinePlaceholder":125},[76,121658,121659],{"class":78,"line":1826},[76,121660,121661],{"class":82},"# 网络\n",[76,121663,121664,121667],{"class":78,"line":1831},[76,121665,121666],{"class":2035},"ping",[76,121668,121669],{"class":82},"      # 测试网络连通性\n",[76,121671,121672,121674],{"class":78,"line":1836},[76,121673,26922],{"class":2035},[76,121675,121676],{"class":82},"      # 发送 HTTP 请求\n",[76,121678,121679,121681],{"class":78,"line":1850},[76,121680,120330],{"class":2035},[76,121682,121683],{"class":82},"      # 下载文件\n",[76,121685,121686,121689],{"class":78,"line":1855},[76,121687,121688],{"class":2035},"ssh",[76,121690,121691],{"class":82},"       # 远程登录\n",[76,121693,121694,121697],{"class":78,"line":2649},[76,121695,121696],{"class":2035},"scp",[76,121698,121699],{"class":82},"       # 远程文件传输\n",[76,121701,121702],{"class":78,"line":2663},[76,121703,2472],{"emptyLinePlaceholder":125},[76,121705,121706],{"class":78,"line":2671},[76,121707,121708],{"class":82},"# 包管理（Debian\u002FUbuntu）\n",[76,121710,121711,121713,121715],{"class":78,"line":2676},[76,121712,117409],{"class":2035},[76,121714,117388],{"class":305},[76,121716,121717],{"class":82},"   # 更新软件源\n",[76,121719,121720,121722,121724],{"class":78,"line":2682},[76,121721,117409],{"class":2035},[76,121723,23906],{"class":305},[76,121725,121726],{"class":82},"  # 安装软件包\n",[76,121728,121729,121731,121733],{"class":78,"line":2688},[76,121730,117409],{"class":2035},[76,121732,26152],{"class":305},[76,121734,121735],{"class":82},"   # 卸载软件包\n",[152,121737,121738],{"start":86},[155,121739,121740],{},"KDE Dolphin 以root打开",[14,121742,121743],{},"kde5",[67,121745,121747],{"className":117337,"code":121746,"language":117339,"meta":58,"style":58},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[73,121748,121749],{"__ignoreMap":58},[76,121750,121751,121754,121757,121760,121762,121764,121767,121770,121772,121775,121777],{"class":78,"line":79},[76,121752,121753],{"class":2035},"pkexec",[76,121755,121756],{"class":305}," env",[76,121758,121759],{"class":305}," DISPLAY=",[76,121761,28216],{"class":93},[76,121763,28274],{"class":305},[76,121765,121766],{"class":93},"$XAUTHORITY ",[76,121768,121769],{"class":305},"KDE_SESSION_VERSION=",[76,121771,520],{"class":250},[76,121773,121774],{"class":305}," KDE_FULL_SESSION=",[76,121776,1435],{"class":250},[76,121778,121779],{"class":305}," dolphin\n",[14,121781,121782],{},"kde6",[67,121784,121786],{"className":117337,"code":121785,"language":117339,"meta":58,"style":58},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[73,121787,121788],{"__ignoreMap":58},[76,121789,121790,121792,121794,121796,121798,121800,121802,121804,121806,121808,121810],{"class":78,"line":79},[76,121791,121753],{"class":2035},[76,121793,121756],{"class":305},[76,121795,121759],{"class":305},[76,121797,28216],{"class":93},[76,121799,28274],{"class":305},[76,121801,121766],{"class":93},[76,121803,121769],{"class":305},[76,121805,544],{"class":250},[76,121807,121774],{"class":305},[76,121809,1435],{"class":250},[76,121811,121779],{"class":305},[117,121813,121814],{},"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":58,"searchDepth":86,"depth":86,"links":121816},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121476,"description":122},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121823,"title":121824,"body":121825,"description":122,"extension":123,"meta":121839,"navigation":125,"path":121840,"seo":121841,"stem":121842,"__hash__":121843},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121826,"toc":121837},[121827,121830],[10,121828,121824],{"id":121829},"_5-各种环境配置",[14,121831,121832],{},[439,121833,121836],{"href":121834,"rel":121835},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23937],"电控组环境搭建大全",{"title":58,"searchDepth":86,"depth":86,"links":121838},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121824,"description":122},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121845,"title":121846,"body":121847,"description":122,"extension":123,"meta":122195,"navigation":125,"path":122196,"seo":122197,"stem":122198,"__hash__":122199},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121848,"toc":122187},[121849,121852,121856,121860,121864,121869,121876,121880,122173,122177,122184],[10,121850,121846],{"id":121851},"_6-拓展功能",[140,121853,121855],{"id":121854},"_61-wine","6.1 Wine",[140,121857,121859],{"id":121858},"_62-android","6.2 Android",[169,121861,121863],{"id":121862},"_621-i卡a卡","6.2.1 I卡、A卡",[152,121865,121866],{},[155,121867,121868],{},"Wayland-Waydroid(体验超级好)",[14,121870,121871,121872],{},"Waydroid 官网与安装指南：",[439,121873,121874],{"href":121874,"rel":121875},"https:\u002F\u002Fwaydro.id\u002F",[23937],[169,121877,121879],{"id":121878},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[152,121881,121882],{},[155,121883,121884,121885,121887,121888,121892,121894,121897,121902,122099],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53786,121886],{},"BlissOS 官网下载：",[439,121889,121890],{"href":121890,"rel":121891},"https:\u002F\u002Fblissos.org\u002F",[23937],[53786,121893],{},[56,121895],{"alt":58,"src":121896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[152,121898,121899],{"start":97},[155,121900,121901],{},"比较推荐的配置",[67,121903,121905],{"className":117337,"code":121904,"language":117339,"meta":58,"style":58},"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",[73,121906,121907,121914,121924,121934,121944,121956,121966,121973,121983,121992,122001,122011,122021,122030,122040,122050,122062,122072,122081,122091],{"__ignoreMap":58},[76,121908,121909,121912],{"class":78,"line":79},[76,121910,121911],{"class":2035},"qemu-system-x86_64",[76,121913,24751],{"class":250},[76,121915,121916,121919,121922],{"class":78,"line":86},[76,121917,121918],{"class":250},"        -M",[76,121920,121921],{"class":305}," q35,vmport=off",[76,121923,24751],{"class":250},[76,121925,121926,121929,121932],{"class":78,"line":97},[76,121927,121928],{"class":250},"        -accel",[76,121930,121931],{"class":305}," kvm",[76,121933,24751],{"class":250},[76,121935,121936,121939,121942],{"class":78,"line":103},[76,121937,121938],{"class":250},"        -cpu",[76,121940,121941],{"class":305}," qemu64,+sse3,+sse4.2",[76,121943,24751],{"class":250},[76,121945,121946,121949,121952,121954],{"class":78,"line":1273},[76,121947,121948],{"class":250},"        -smp",[76,121950,121951],{"class":305}," 8,cores=",[76,121953,494],{"class":250},[76,121955,24751],{"class":250},[76,121957,121958,121961,121964],{"class":78,"line":1287},[76,121959,121960],{"class":250},"        -m",[76,121962,121963],{"class":305}," 6G",[76,121965,24751],{"class":250},[76,121967,121968,121971],{"class":78,"line":1293},[76,121969,121970],{"class":250},"        -usb",[76,121972,24751],{"class":250},[76,121974,121975,121978,121981],{"class":78,"line":1384},[76,121976,121977],{"class":250},"        -device",[76,121979,121980],{"class":305}," virtio-tablet",[76,121982,24751],{"class":250},[76,121984,121985,121987,121990],{"class":78,"line":1390},[76,121986,121977],{"class":250},[76,121988,121989],{"class":305}," virtio-keyboard",[76,121991,24751],{"class":250},[76,121993,121994,121996,121999],{"class":78,"line":1402},[76,121995,121977],{"class":250},[76,121997,121998],{"class":305}," usb-tablet",[76,122000,24751],{"class":250},[76,122002,122003,122006,122009],{"class":78,"line":1684},[76,122004,122005],{"class":250},"        -bios",[76,122007,122008],{"class":305}," OVMF-pure-efi64.fd",[76,122010,24751],{"class":250},[76,122012,122013,122016,122019],{"class":78,"line":1689},[76,122014,122015],{"class":250},"        -net",[76,122017,122018],{"class":305}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[76,122020,24751],{"class":250},[76,122022,122023,122025,122028],{"class":78,"line":1695},[76,122024,122015],{"class":250},[76,122026,122027],{"class":305}," nic,model=virtio",[76,122029,24751],{"class":250},[76,122031,122032,122035,122038],{"class":78,"line":1700},[76,122033,122034],{"class":250},"        -audio",[76,122036,122037],{"class":305}," sdl,model=hda",[76,122039,24751],{"class":250},[76,122041,122042,122045,122048],{"class":78,"line":1714},[76,122043,122044],{"class":250},"        -display",[76,122046,122047],{"class":305}," sdl,gl=on,show-cursor=on",[76,122049,24751],{"class":250},[76,122051,122052,122054,122057,122060],{"class":78,"line":1719},[76,122053,121977],{"class":250},[76,122055,122056],{"class":305}," virtio-vga-gl,xres=1920,yres=",[76,122058,122059],{"class":250},"1080",[76,122061,24751],{"class":250},[76,122063,122064,122067,122070],{"class":78,"line":1725},[76,122065,122066],{"class":250},"        -drive",[76,122068,122069],{"class":305}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[76,122071,24751],{"class":250},[76,122073,122074,122076,122079],{"class":78,"line":1746},[76,122075,122066],{"class":250},[76,122077,122078],{"class":305}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[76,122080,24751],{"class":250},[76,122082,122083,122086,122089],{"class":78,"line":1751},[76,122084,122085],{"class":250},"        -monitor",[76,122087,122088],{"class":305}," stdio",[76,122090,24751],{"class":250},[76,122092,122093,122096],{"class":78,"line":1765},[76,122094,122095],{"class":250},"        -serial",[76,122097,122098],{"class":305}," none\n",[152,122100,122101],{"start":1273},[155,122102,122103,122104],{},"常用操作：",[152,122105,122106,122109,122165],{},[155,122107,122108],{},"全屏：Ctrl+Alt+F",[155,122110,122111,122112,122117],{},"adb调试",[152,122113,122114],{},[155,122115,122116],{},"使Linux与Android用ADB连接。",[67,122118,122120],{"className":117337,"code":122119,"language":117339,"meta":58,"style":58},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[73,122121,122122,122127,122138,122143,122155,122160],{"__ignoreMap":58},[76,122123,122124],{"class":78,"line":79},[76,122125,122126],{"class":82},"# 连接安卓\n",[76,122128,122129,122132,122135],{"class":78,"line":86},[76,122130,122131],{"class":2035},"adb",[76,122133,122134],{"class":305}," connect",[76,122136,122137],{"class":250}," 127.0.0.1\n",[76,122139,122140],{"class":78,"line":97},[76,122141,122142],{"class":82},"# 打开shell\n",[76,122144,122145,122147,122149,122152],{"class":78,"line":103},[76,122146,122131],{"class":2035},[76,122148,26956],{"class":250},[76,122150,122151],{"class":305}," 127.0.0.1:5555",[76,122153,122154],{"class":305}," shell\n",[76,122156,122157],{"class":78,"line":1273},[76,122158,122159],{"class":82},"# 使用root权限\n",[76,122161,122162],{"class":78,"line":1287},[76,122163,122164],{"class":2035},"su\n",[155,122166,122167,122168],{},"中文输入法",[152,122169,122170],{},[155,122171,122172],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[140,122174,122176],{"id":122175},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122178,122179,122180],{},"rEFInd 官网与文档：",[439,122181,122182],{"href":122182,"rel":122183},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23937],[117,122185,122186],{},"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":58,"searchDepth":86,"depth":86,"links":122188},[122189,122190,122194],{"id":121854,"depth":86,"text":121855},{"id":121858,"depth":86,"text":121859,"children":122191},[122192,122193],{"id":121862,"depth":97,"text":121863},{"id":121878,"depth":97,"text":121879},{"id":122175,"depth":86,"text":122176},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121846,"description":122},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122201,"title":122202,"body":122203,"description":122,"extension":123,"meta":125502,"navigation":125,"path":125503,"seo":125504,"stem":125505,"__hash__":125506},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122204,"toc":125476},[122205,122208,122212,122215,122222,122472,122475,122547,122550,122554,122558,122563,122566,122569,122572,122577,122580,122583,122586,122591,122594,122599,122602,122605,122610,122613,122618,122621,122625,122629,122632,122637,122640,122654,122657,122660,122669,122672,122681,122684,122687,122696,122699,122708,122711,122714,122723,122726,122729,122744,122747,122750,122759,122764,122767,122770,122779,122782,122791,122794,122803,122806,122815,122820,122823,122831,122836,122839,122848,122851,122859,122864,122867,122876,122879,122882,122886,122889,122894,122897,122902,122916,122921,122926,122937,122942,122948,122953,122968,122973,122976,122981,122986,122991,122999,123004,123011,123016,123027,123032,123035,123039,123042,123045,123050,123053,123072,123077,123080,123089,123094,123097,123119,123122,123152,123155,123160,123163,123177,123182,123201,123204,123207,123212,123224,123229,123234,123237,123242,123245,123260,123263,123268,123273,123277,123282,123322,123325,123329,123335,123341,123346,123349,123356,123361,123368,123371,123374,123381,123395,123398,123458,123461,123475,123487,123490,123493,123496,123560,123563,123566,123569,123589,123592,123597,123604,123608,123611,123615,123620,123625,123629,123632,123635,123677,123682,123685,123707,123722,123724,123729,123741,123801,123803,123805,123859,123861,123863,123869,123874,123877,123882,123886,123889,123951,123956,123959,123961,123965,123977,124059,124061,124063,124117,124123,124125,124129,124134,124136,124141,124145,124165,124200,124204,124207,124210,124213,124220,124223,124235,124238,124253,124256,124275,124323,124326,124343,124346,124360,124365,124368,124377,124392,124404,124442,124447,124456,124461,124466,124492,124501,124505,124509,124514,124517,124521,124525,124530,124533,124538,124541,124546,124549,124554,124557,124561,124566,124569,124574,124577,124581,124586,124589,124594,124597,124602,124605,124609,124614,124617,124622,124625,124630,124633,124637,124642,124645,124650,124653,124658,124661,124666,124669,124674,124677,124682,124685,124689,124694,124697,124702,124709,124713,124718,124721,124726,124729,124733,124738,124741,124744,124747,124750,124753,124757,124760,124770,124775,124780,124802,124807,124812,124819,124823,124828,124831,124834,124839,124842,124845,124848,124851,124854,124857,124860,124863,124866,124869,124872,124875,124880,124885,124890,124895,124900,124905,124910,124913,124917,124920,124924,124929,124934,124939,124944,124948,124954,124962,124967,124970,124975,124990,124993,124998,125032,125047,125050,125105,125131,125143,125146,125155,125158,125173,125178,125181,125187,125192,125195,125200,125203,125208,125213,125220,125223,125238,125241,125276,125281,125289,125327,125330,125333,125338,125341,125346,125357,125391,125396,125399,125408,125413,125419,125422,125427,125436,125441,125444,125447,125452,125460,125463,125468,125473],[10,122206,122202],{"id":122207},"_7-其他操作",[140,122209,122211],{"id":122210},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122213,122214],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122216,122217,122218,122221],{},"进入工控机的硬盘目录，进入",[73,122219,122220],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[67,122223,122227],{"className":122224,"code":122225,"language":122226,"meta":58,"style":58},"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",[73,122228,122229,122237,122248,122255,122262,122274,122281,122293,122304,122315,122322,122329,122336,122348,122360,122367,122379,122391,122398,122410,122422,122434,122445,122452,122463],{"__ignoreMap":58},[76,122230,122231,122234],{"class":78,"line":79},[76,122232,122233],{"class":51370},"network",[76,122235,122236],{"class":93},": \n",[76,122238,122239,122242,122244,122246],{"class":78,"line":86},[76,122240,122241],{"class":51370},"  version",[76,122243,51507],{"class":93},[76,122245,278],{"class":250},[76,122247,2746],{"class":93},[76,122249,122250,122253],{"class":78,"line":97},[76,122251,122252],{"class":51370},"  wifis",[76,122254,122236],{"class":93},[76,122256,122257,122260],{"class":78,"line":103},[76,122258,122259],{"class":51370},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[76,122261,122236],{"class":93},[76,122263,122264,122267,122269,122272],{"class":78,"line":1273},[76,122265,122266],{"class":51370},"      renderer",[76,122268,51507],{"class":93},[76,122270,122271],{"class":305},"NetworkManager",[76,122273,2746],{"class":93},[76,122275,122276,122279],{"class":78,"line":1287},[76,122277,122278],{"class":51370},"      match",[76,122280,122236],{"class":93},[76,122282,122283,122286,122288,122291],{"class":78,"line":1293},[76,122284,122285],{"class":51370},"        name",[76,122287,51507],{"class":93},[76,122289,122290],{"class":305},"\"wlan0\"",[76,122292,2746],{"class":93},[76,122294,122295,122298,122300,122302],{"class":78,"line":1384},[76,122296,122297],{"class":51370},"      dhcp4",[76,122299,51507],{"class":93},[76,122301,1435],{"class":250},[76,122303,2746],{"class":93},[76,122305,122306,122309,122311,122313],{"class":78,"line":1390},[76,122307,122308],{"class":51370},"      dhcp6",[76,122310,51507],{"class":93},[76,122312,1435],{"class":250},[76,122314,2746],{"class":93},[76,122316,122317,122320],{"class":78,"line":1402},[76,122318,122319],{"class":51370},"      access-points",[76,122321,122236],{"class":93},[76,122323,122324,122327],{"class":78,"line":1684},[76,122325,122326],{"class":305},"        \"EMIS_Vinci_Robocon_5G\"",[76,122328,122236],{"class":93},[76,122330,122331,122334],{"class":78,"line":1689},[76,122332,122333],{"class":51370},"          auth",[76,122335,122236],{"class":93},[76,122337,122338,122341,122343,122346],{"class":78,"line":1695},[76,122339,122340],{"class":51370},"            key-management",[76,122342,51507],{"class":93},[76,122344,122345],{"class":305},"\"psk\"",[76,122347,2746],{"class":93},[76,122349,122350,122353,122355,122358],{"class":78,"line":1700},[76,122351,122352],{"class":51370},"            password",[76,122354,51507],{"class":93},[76,122356,122357],{"class":305},"\"vinci666\"",[76,122359,2746],{"class":93},[76,122361,122362,122365],{"class":78,"line":1714},[76,122363,122364],{"class":51370},"          networkmanager",[76,122366,122236],{"class":93},[76,122368,122369,122372,122374,122377],{"class":78,"line":1719},[76,122370,122371],{"class":51370},"            uuid",[76,122373,51507],{"class":93},[76,122375,122376],{"class":305},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[76,122378,2746],{"class":93},[76,122380,122381,122384,122386,122389],{"class":78,"line":1725},[76,122382,122383],{"class":51370},"            name",[76,122385,51507],{"class":93},[76,122387,122388],{"class":305},"\"EMIS_Vinci_Robocon_5G\"",[76,122390,2746],{"class":93},[76,122392,122393,122396],{"class":78,"line":1746},[76,122394,122395],{"class":51370},"            passthrough",[76,122397,122236],{"class":93},[76,122399,122400,122403,122405,122408],{"class":78,"line":1751},[76,122401,122402],{"class":51370},"              wifi-security.auth-alg",[76,122404,51507],{"class":93},[76,122406,122407],{"class":305},"\"open\"",[76,122409,2746],{"class":93},[76,122411,122412,122415,122417,122420],{"class":78,"line":1765},[76,122413,122414],{"class":51370},"              ipv6.addr-gen-mode",[76,122416,51507],{"class":93},[76,122418,122419],{"class":305},"\"default\"",[76,122421,2746],{"class":93},[76,122423,122424,122427,122429,122432],{"class":78,"line":1770},[76,122425,122426],{"class":51370},"              ipv6.ip6-privacy",[76,122428,51507],{"class":93},[76,122430,122431],{"class":305},"\"-1\"",[76,122433,2746],{"class":93},[76,122435,122436,122439,122441,122443],{"class":78,"line":1799},[76,122437,122438],{"class":51370},"              proxy._",[76,122440,51507],{"class":93},[76,122442,7724],{"class":305},[76,122444,2746],{"class":93},[76,122446,122447,122450],{"class":78,"line":1804},[76,122448,122449],{"class":51370},"      networkmanager",[76,122451,122236],{"class":93},[76,122453,122454,122457,122459,122461],{"class":78,"line":1821},[76,122455,122456],{"class":51370},"        uuid",[76,122458,51507],{"class":93},[76,122460,122376],{"class":305},[76,122462,2746],{"class":93},[76,122464,122465,122467,122469],{"class":78,"line":1826},[76,122466,122285],{"class":51370},[76,122468,51507],{"class":93},[76,122470,122471],{"class":305},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122473,122474],{},"将其改为新wifi的名和密码：",[67,122476,122478],{"className":122224,"code":122477,"language":122226,"meta":58,"style":58},"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",[73,122479,122480,122486,122495,122501,122508,122517,122525,122531,122537],{"__ignoreMap":58},[76,122481,122482,122484],{"class":78,"line":79},[76,122483,122233],{"class":51370},[76,122485,3811],{"class":93},[76,122487,122488,122490,122492],{"class":78,"line":86},[76,122489,122241],{"class":51370},[76,122491,51507],{"class":93},[76,122493,122494],{"class":250},"2\n",[76,122496,122497,122499],{"class":78,"line":97},[76,122498,122252],{"class":51370},[76,122500,3811],{"class":93},[76,122502,122503,122506],{"class":78,"line":103},[76,122504,122505],{"class":51370},"    wlan0",[76,122507,3811],{"class":93},[76,122509,122510,122512,122514],{"class":78,"line":1273},[76,122511,122297],{"class":51370},[76,122513,51507],{"class":93},[76,122515,122516],{"class":250},"true\n",[76,122518,122519,122521,122523],{"class":78,"line":1287},[76,122520,122308],{"class":51370},[76,122522,51507],{"class":93},[76,122524,122516],{"class":250},[76,122526,122527,122529],{"class":78,"line":1293},[76,122528,122319],{"class":51370},[76,122530,3811],{"class":93},[76,122532,122533,122535],{"class":78,"line":1384},[76,122534,122326],{"class":305},[76,122536,3811],{"class":93},[76,122538,122539,122542,122544],{"class":78,"line":1390},[76,122540,122541],{"class":51370},"          password",[76,122543,51507],{"class":93},[76,122545,122546],{"class":305},"\"vinci666\"\n",[14,122548,122549],{},"工控机开机即可连上网。",[140,122551,122553],{"id":122552},"_72-ssh远程开发","7.2 SSH远程开发",[169,122555,122557],{"id":122556},"_721-环境准备","7.2.1 环境准备",[14,122559,122560],{},[350,122561,122562],{},"1.硬件准备",[14,122564,122565],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122567,122568],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122570,122571],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122573,122574],{},[350,122575,122576],{},"2.设置固定IP",[14,122578,122579],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122581,122582],{},"1.进入设置界面",[14,122584,122585],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122587,122588],{},[56,122589],{"alt":58,"src":122590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122592,122593],{},"2.配置所连接的网络",[14,122595,122596],{},[56,122597],{"alt":58,"src":122598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122600,122601],{},"3.设置固定IP",[14,122603,122604],{},"查看当前IP地址。",[14,122606,122607],{},[56,122608],{"alt":58,"src":122609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122611,122612],{},"设置固定IP。",[14,122614,122615],{},[56,122616],{"alt":58,"src":122617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122619,122620],{},"至此，IP配置完毕。",[169,122622,122624],{"id":122623},"_722-环境搭建","7.2.2 环境搭建",[14,122626,122627],{},[350,122628,25826],{},[14,122630,122631],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122633,122634],{},[350,122635,122636],{},"实现",[14,122638,122639],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[152,122641,122642,122645,122648,122651],{},[155,122643,122644],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[155,122646,122647],{},"远程主机启动SSH服务；",[155,122649,122650],{},"本地主机登陆远程主机；",[155,122652,122653],{},"实现数据传输。",[14,122655,122656],{},"1.安装SSH客户端与服务端",[14,122658,122659],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[67,122661,122663],{"className":120857,"code":122662,"language":120859,"meta":120860,"style":58}," sudo apt install openssh-server\n",[73,122664,122665],{"__ignoreMap":58},[76,122666,122667],{"class":78,"line":79},[76,122668,122662],{},[14,122670,122671],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[67,122673,122675],{"className":120857,"code":122674,"language":120859,"meta":120860,"style":58},"sudo apt install openssh-client\n",[73,122676,122677],{"__ignoreMap":58},[76,122678,122679],{"class":78,"line":79},[76,122680,122674],{},[14,122682,122683],{},"2.远程主机启动SSH服务",[14,122685,122686],{},"远程主机启动 ssh 服务命令如下：",[67,122688,122690],{"className":120857,"code":122689,"language":120859,"meta":120860,"style":58},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[73,122691,122692],{"__ignoreMap":58},[76,122693,122694],{"class":78,"line":79},[76,122695,122689],{},[14,122697,122698],{},"启动后可使用如下命令查看服务是否正常运行：",[67,122700,122702],{"className":120857,"code":122701,"language":120859,"meta":120860,"style":58},"ps -e | grep ssh\n",[73,122703,122704],{"__ignoreMap":58},[76,122705,122706],{"class":78,"line":79},[76,122707,122701],{},[14,122709,122710],{},"如果启动成功，会包含 sshd 程序。",[14,122712,122713],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[67,122715,122717],{"className":120857,"code":122716,"language":120859,"meta":120860,"style":58},"sudo systemctl enable ssh\n",[73,122718,122719],{"__ignoreMap":58},[76,122720,122721],{"class":78,"line":79},[76,122722,122716],{},[14,122724,122725],{},"3.本地远程登录",[14,122727,122728],{},"登录远程主机可以调用如下命令:",[67,122730,122732],{"className":117337,"code":122731,"language":117339,"meta":58,"style":58},"ssh -X 用户名@ip地址\n",[73,122733,122734],{"__ignoreMap":58},[76,122735,122736,122738,122741],{"class":78,"line":79},[76,122737,121688],{"class":2035},[76,122739,122740],{"class":250}," -X",[76,122742,122743],{"class":305}," 用户名@ip地址\n",[14,122745,122746],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122748,122749],{},"如果退出，可以调用exit命令：",[67,122751,122753],{"className":120857,"code":122752,"language":120859,"meta":120860,"style":58},"exit\n",[73,122754,122755],{"__ignoreMap":58},[76,122756,122757],{"class":78,"line":79},[76,122758,122752],{},[14,122760,122761],{},[350,122762,122763],{},"4.实现数据传输",[14,122765,122766],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122768,122769],{},"上传文件指令格式如下：",[67,122771,122773],{"className":120857,"code":122772,"language":120859,"meta":120860,"style":58},"scp 本地文件路径 账号@ip:路径\n",[73,122774,122775],{"__ignoreMap":58},[76,122776,122777],{"class":78,"line":79},[76,122778,122772],{},[14,122780,122781],{},"上传文件夹指令格式如下：",[67,122783,122785],{"className":120857,"code":122784,"language":120859,"meta":120860,"style":58},"scp -r 本地文件夹路径 账号@ip:路径\n",[73,122786,122787],{"__ignoreMap":58},[76,122788,122789],{"class":78,"line":79},[76,122790,122784],{},[14,122792,122793],{},"下载文件指令格式如下：",[67,122795,122797],{"className":120857,"code":122796,"language":120859,"meta":120860,"style":58},"scp 账号@ip:路径 本地文件夹路径\n",[73,122798,122799],{"__ignoreMap":58},[76,122800,122801],{"class":78,"line":79},[76,122802,122796],{},[14,122804,122805],{},"下载文件夹指令格式如下：",[67,122807,122809],{"className":120857,"code":122808,"language":120859,"meta":120860,"style":58},"scp -r 账号@ip:路径 本地文件夹路径\n",[73,122810,122811],{"__ignoreMap":58},[76,122812,122813],{"class":78,"line":79},[76,122814,122808],{},[14,122816,122817],{},[350,122818,122819],{},"优化",[14,122821,122822],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[152,122824,122825,122828],{},[155,122826,122827],{},"本地生成密钥对；",[155,122829,122830],{},"将公钥上传至远程主机。",[14,122832,122833],{},[350,122834,122835],{},"1.生成密钥对",[14,122837,122838],{},"本地客户端生成公私钥：（一路回车默认即可）",[67,122840,122842],{"className":120857,"code":122841,"language":120859,"meta":120860,"style":58},"ssh-keygen\n",[73,122843,122844],{"__ignoreMap":58},[76,122845,122846],{"class":78,"line":79},[76,122847,122841],{},[14,122849,122850],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[152,122852,122853,122856],{},[155,122854,122855],{},"id_rsa （私钥）；",[155,122857,122858],{},"id_rsa.pub (公钥)。",[14,122860,122861],{},[350,122862,122863],{},"2.公钥上传",[14,122865,122866],{},"上传指令如下：",[67,122868,122870],{"className":120857,"code":122869,"language":120859,"meta":120860,"style":58},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[73,122871,122872],{"__ignoreMap":58},[76,122873,122874],{"class":78,"line":79},[76,122875,122869],{},[14,122877,122878],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122880,122881],{},"以后再远程登录就无需录入密码了。",[169,122883,122885],{"id":122884},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122887,122888],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122890,122891],{},[350,122892,122893],{},"1.准备工作",[14,122895,122896],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122898,122899],{},[350,122900,122901],{},"2.为VScode安装远程开发插件",[14,122903,122904,122905,122908,122909,122912,122913,28458],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[73,122906,122907],{},"扩展：商店","的搜索栏输入",[73,122910,122911],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[73,122914,122915],{},"安装",[14,122917,122918],{},[56,122919],{"alt":58,"src":122920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122922,122923],{},[350,122924,122925],{},"3.配置远程连接",[14,122927,122928,122929,122932,122933,122936],{},"步骤1：使用快捷键",[73,122930,122931],{},"ctrl + shift + p","打开命令输入窗口，并输入",[73,122934,122935],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122938,122939],{},[56,122940],{"alt":58,"src":122941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122943,122944,122945,28458],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[73,122946,122947],{},"Add New SSH Host",[14,122949,122950],{},[56,122951],{"alt":58,"src":122952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122954,122955,122956,122959,122960,122963,122964,122967],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[73,122957,122958],{},"ssh +X ubuntu@192.168.43.164","，其中，",[73,122961,122962],{},"ubuntu","需要替换为你的登录用户名，",[73,122965,122966],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122969,122970],{},[56,122971],{"alt":58,"src":122972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122974,122975],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122977,122978],{},[56,122979],{"alt":58,"src":122980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122982,122983],{},[56,122984],{"alt":58,"src":122985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122987,122988],{},[350,122989,122990],{},"4.使用",[14,122992,122993,122994,122932,122996,122998],{},"步骤1：继续使用快捷键",[73,122995,122931],{},[73,122997,122935],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123000,123001],{},[56,123002],{"alt":58,"src":123003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123005,123006,123007,123010],{},"或者，也可以点击侧边栏的",[73,123008,123009],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123012,123013],{},[56,123014],{"alt":58,"src":123015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123017,123018,123019,123022,123023,123026],{},"步骤2：选择菜单栏的",[73,123020,123021],{},"文件","下的",[73,123024,123025],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123028,123029],{},[56,123030],{"alt":58,"src":123031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123033,123034],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[140,123036,123038],{"id":123037},"_73-远程桌面","7.3 远程桌面",[14,123040,123041],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123043,123044],{},"我们选择使用VNC来看。",[152,123046,123047],{},[155,123048,123049],{},"安装VNC服务器：",[14,123051,123052],{},"这里以TigerVNC为例进行安装：",[67,123054,123056],{"className":117337,"code":123055,"language":117339,"meta":58,"style":58},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[73,123057,123058],{"__ignoreMap":58},[76,123059,123060,123062,123064,123066,123069],{"class":78,"line":79},[76,123061,24649],{"class":2035},[76,123063,117358],{"class":305},[76,123065,23906],{"class":305},[76,123067,123068],{"class":305}," tigervnc-standalone-server",[76,123070,123071],{"class":305}," tigervnc-common\n",[152,123073,123074],{"start":86},[155,123075,123076],{},"设置VNC密码：",[14,123078,123079],{},"为VNC用户设置密码，运行以下命令：",[67,123081,123083],{"className":117337,"code":123082,"language":117339,"meta":58,"style":58},"vncpasswd\n",[73,123084,123085],{"__ignoreMap":58},[76,123086,123087],{"class":78,"line":79},[76,123088,123082],{"class":2035},[152,123090,123091],{"start":97},[155,123092,123093],{},"配置VNC启动脚本:",[14,123095,123096],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[67,123098,123100],{"className":117337,"code":123099,"language":117339,"meta":58,"style":58},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[73,123101,123102,123111],{"__ignoreMap":58},[76,123103,123104,123106,123108],{"class":78,"line":79},[76,123105,101307],{"class":2035},[76,123107,29289],{"class":250},[76,123109,123110],{"class":305}," ~\u002F.vnc\n",[76,123112,123113,123116],{"class":78,"line":86},[76,123114,123115],{"class":2035},"nano",[76,123117,123118],{"class":305}," ~\u002F.vnc\u002Fxstartup\n",[14,123120,123121],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[67,123123,123125],{"className":117337,"code":123124,"language":117339,"meta":58,"style":58},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[73,123126,123127,123132,123140,123147],{"__ignoreMap":58},[76,123128,123129],{"class":78,"line":79},[76,123130,123131],{"class":82},"#!\u002Fbin\u002Fsh\n",[76,123133,123134,123137],{"class":78,"line":86},[76,123135,123136],{"class":250},"unset",[76,123138,123139],{"class":305}," SESSION_MANAGER\n",[76,123141,123142,123144],{"class":78,"line":97},[76,123143,123136],{"class":250},[76,123145,123146],{"class":305}," DBUS_SESSION_BUS_ADDRESS\n",[76,123148,123149],{"class":78,"line":103},[76,123150,123151],{"class":2035},"gnome-session\n",[14,123153,123154],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[152,123156,123157],{"start":103},[155,123158,123159],{},"给予执行权限：",[14,123161,123162],{},"为xstartup文件设置执行权限：",[67,123164,123166],{"className":117337,"code":123165,"language":117339,"meta":58,"style":58},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[73,123167,123168],{"__ignoreMap":58},[76,123169,123170,123172,123175],{"class":78,"line":79},[76,123171,24684],{"class":2035},[76,123173,123174],{"class":305}," +x",[76,123176,123118],{"class":305},[152,123178,123179],{"start":1273},[155,123180,123181],{},"启动VNC服务器：",[67,123183,123185],{"className":117337,"code":123184,"language":117339,"meta":58,"style":58},"vncserver -geometry 1920x1080 -localhost=0\n",[73,123186,123187],{"__ignoreMap":58},[76,123188,123189,123192,123195,123198],{"class":78,"line":79},[76,123190,123191],{"class":2035},"vncserver",[76,123193,123194],{"class":250}," -geometry",[76,123196,123197],{"class":305}," 1920x1080",[76,123199,123200],{"class":250}," -localhost=0\n",[14,123202,123203],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123205,123206],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[152,123208,123209],{"start":1287},[155,123210,123211],{},"查看已开启的VNC服务器：",[67,123213,123215],{"className":117337,"code":123214,"language":117339,"meta":58,"style":58},"vncserver -list\n",[73,123216,123217],{"__ignoreMap":58},[76,123218,123219,123221],{"class":78,"line":79},[76,123220,123191],{"class":2035},[76,123222,123223],{"class":250}," -list\n",[14,123225,123226],{},[56,123227],{"alt":58,"src":123228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[152,123230,123231],{"start":1293},[155,123232,123233],{},"连接到VNC服务器：",[14,123235,123236],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[152,123238,123239],{"start":1384},[155,123240,123241],{},"停止VNC服务器：",[14,123243,123244],{},"如果需要停止VNC服务器，可以使用以下命令：",[67,123246,123248],{"className":117337,"code":123247,"language":117339,"meta":58,"style":58},"vncserver -kill :1\n",[73,123249,123250],{"__ignoreMap":58},[76,123251,123252,123254,123257],{"class":78,"line":79},[76,123253,123191],{"class":2035},[76,123255,123256],{"class":250}," -kill",[76,123258,123259],{"class":305}," :1\n",[14,123261,123262],{},"将:1替换为你实际使用的显示编号。",[14,123264,123265],{},[56,123266],{"alt":58,"src":123267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123269,123270],{},[56,123271],{"alt":58,"src":123272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[140,123274,123276],{"id":123275},"_74-usb端口设置","7.4 USB端口设置",[14,123278,123279],{},[350,123280,123281],{},"首先先配置好权限",[67,123283,123285],{"className":117337,"code":123284,"language":117339,"meta":58,"style":58},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[73,123286,123287,123292,123305,123312,123317],{"__ignoreMap":58},[76,123288,123289],{"class":78,"line":79},[76,123290,123291],{"class":82},"# 将用户权限提高\n",[76,123293,123294,123296,123298,123300,123303],{"class":78,"line":86},[76,123295,24649],{"class":2035},[76,123297,26647],{"class":305},[76,123299,26650],{"class":250},[76,123301,123302],{"class":305}," dialout",[76,123304,26655],{"class":93},[76,123306,123307,123309],{"class":78,"line":97},[76,123308,26674],{"class":2035},[76,123310,123311],{"class":305}," dialout\n",[76,123313,123314],{"class":78,"line":103},[76,123315,123316],{"class":82},"# 查看下面命令是否输出dialout（若输出才正常）\n",[76,123318,123319],{"class":78,"line":1273},[76,123320,123321],{"class":2035},"groups\n",[14,123323,123324],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[169,123326,123328],{"id":123327},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123330,123331,123334],{},[350,123332,123333],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123336,123337,123340],{},[350,123338,123339],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123342,123343],{},[350,123344,123345],{},"流程如下：",[14,123347,123348],{},"（1）.查找设备idVendor和idProduct",[14,123350,123351,123352,123355],{},"接入两个USB设备，在终端调用指令",[73,123353,123354],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123357,123358],{},[56,123359],{"alt":58,"src":123360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123362,123363,123364,123367],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[73,123365,123366],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123369,123370],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123372,123373],{},"（2）.编写映射规则",[14,123375,123376,123377,123380],{},"在",[73,123378,123379],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[67,123382,123384],{"className":117337,"code":123383,"language":117339,"meta":58,"style":58},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[73,123385,123386],{"__ignoreMap":58},[76,123387,123388,123390,123392],{"class":78,"line":79},[76,123389,24649],{"class":2035},[76,123391,118624],{"class":305},[76,123393,123394],{"class":305}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123396,123397],{},"输入如下内容：",[67,123399,123401],{"className":117337,"code":123400,"language":117339,"meta":58,"style":58},"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",[73,123402,123403,123433],{"__ignoreMap":58},[76,123404,123405,123408,123410,123413,123416,123419,123422,123424,123427,123430],{"class":78,"line":79},[76,123406,123407],{"class":93},"KERNEL",[76,123409,247],{"class":89},[76,123411,123412],{"class":305},"=\"ttyUSB*\",",[76,123414,123415],{"class":2035}," ATTRS",[76,123417,123418],{"class":305},"{idVendor}==",[76,123420,123421],{"class":2035},"\"10c4\"",[76,123423,578],{"class":2035},[76,123425,123426],{"class":305}," ATTRS{idProduct}==\"ea60\",",[76,123428,123429],{"class":305}," MODE:=\"0777\",",[76,123431,123432],{"class":305}," SYMLINK+=\"mylidar\"\n",[76,123434,123435,123437,123439,123441,123443,123445,123448,123450,123453,123455],{"class":78,"line":86},[76,123436,123407],{"class":93},[76,123438,247],{"class":89},[76,123440,123412],{"class":305},[76,123442,123415],{"class":2035},[76,123444,123418],{"class":305},[76,123446,123447],{"class":2035},"\"1a86\"",[76,123449,578],{"class":2035},[76,123451,123452],{"class":305}," ATTRS{idProduct}==\"7523\",",[76,123454,123429],{"class":305},[76,123456,123457],{"class":305}," SYMLINK+=\"mycar\"\n",[14,123459,123460],{},"代码解释：",[1206,123462,123463,123466,123469,123472],{},[155,123464,123465],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[155,123467,123468],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[155,123470,123471],{},"SYMLINK是符号连接，即绑定的别名；",[155,123473,123474],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123476,123477,123478,123481,123484],{},"***小提示：***",[23625,123479,123480],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[73,123482,123483],{},"\u002Fetc\u002Fudev\u002Frule.d",[23625,123485,123486],{},"目录即可。",[14,123488,123489],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123491,123492],{},"（3）.使规则生效",[14,123494,123495],{},"在终端下输入如下指令：",[67,123497,123499],{"className":117337,"code":123498,"language":117339,"meta":58,"style":58},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[73,123500,123501,123506,123518,123529,123533,123538,123551],{"__ignoreMap":58},[76,123502,123503],{"class":78,"line":79},[76,123504,123505],{"class":82},"# Ubuntu用下方命令\n",[76,123507,123508,123510,123512,123515],{"class":78,"line":86},[76,123509,24649],{"class":2035},[76,123511,120089],{"class":305},[76,123513,123514],{"class":305}," udev",[76,123516,123517],{"class":305}," reload\n",[76,123519,123520,123522,123524,123526],{"class":78,"line":97},[76,123521,24649],{"class":2035},[76,123523,120089],{"class":305},[76,123525,123514],{"class":305},[76,123527,123528],{"class":305}," restart\n",[76,123530,123531],{"class":78,"line":103},[76,123532,2472],{"emptyLinePlaceholder":125},[76,123534,123535],{"class":78,"line":1273},[76,123536,123537],{"class":82},"#Fedora用下方命令\n",[76,123539,123540,123542,123545,123548],{"class":78,"line":1287},[76,123541,24649],{"class":2035},[76,123543,123544],{"class":305}," udevadm",[76,123546,123547],{"class":305}," control",[76,123549,123550],{"class":250}," --reload\n",[76,123552,123553,123555,123557],{"class":78,"line":1293},[76,123554,24649],{"class":2035},[76,123556,123544],{"class":305},[76,123558,123559],{"class":305}," trigger\n",[14,123561,123562],{},"再重新插拔设备即可。",[14,123564,123565],{},"（4）.测试",[14,123567,123568],{},"终端下输入如下指令",[67,123570,123572],{"className":117337,"code":123571,"language":117339,"meta":58,"style":58},"ll \u002Fdev | grep ttyUSB\n",[73,123573,123574],{"__ignoreMap":58},[76,123575,123576,123579,123582,123584,123586],{"class":78,"line":79},[76,123577,123578],{"class":2035},"ll",[76,123580,123581],{"class":305}," \u002Fdev",[76,123583,25182],{"class":89},[76,123585,30309],{"class":2035},[76,123587,123588],{"class":305}," ttyUSB\n",[14,123590,123591],{},"运行结果如下：",[14,123593,123594],{},[56,123595],{"alt":58,"src":123596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123598,123599,123600,123603],{},"也可以多次插拔USB设备，会发现设备端口",[73,123601,123602],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123605,123606],{},[350,123607,118005],{},[14,123609,123610],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[169,123612,123614],{"id":123613},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123616,123617,123619],{},[350,123618,123333],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123621,123622,123624],{},[350,123623,123339],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123626,123627],{},[350,123628,123345],{},[14,123630,123631],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123633,123634],{},"调用如下指令查看第一台雷达的USB信息：",[67,123636,123638],{"className":117337,"code":123637,"language":117339,"meta":58,"style":58},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[73,123639,123640,123660],{"__ignoreMap":58},[76,123641,123642,123645,123647,123650,123653,123655,123657],{"class":78,"line":79},[76,123643,123644],{"class":2035},"udevadm",[76,123646,69891],{"class":305},[76,123648,123649],{"class":250}," --attribute-walk",[76,123651,123652],{"class":250}," --name=\u002Fdev\u002FttyUSB0",[76,123654,25182],{"class":89},[76,123656,30309],{"class":2035},[76,123658,123659],{"class":305}," KERNELS\n",[76,123661,123662,123664,123666,123668,123671,123673,123675],{"class":78,"line":86},[76,123663,123644],{"class":2035},[76,123665,69891],{"class":305},[76,123667,123649],{"class":250},[76,123669,123670],{"class":250}," --name=\u002Fdev\u002FttyACM0",[76,123672,25182],{"class":89},[76,123674,30309],{"class":2035},[76,123676,123659],{"class":305},[14,123678,123679],{},[56,123680],{"alt":58,"src":123681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123683,123684],{},"调用如下指令查看第二台雷达的USB信息：",[67,123686,123688],{"className":117337,"code":123687,"language":117339,"meta":58,"style":58},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[73,123689,123690],{"__ignoreMap":58},[76,123691,123692,123694,123696,123698,123701,123703,123705],{"class":78,"line":79},[76,123693,123644],{"class":2035},[76,123695,69891],{"class":305},[76,123697,123649],{"class":250},[76,123699,123700],{"class":250}," --name=\u002Fdev\u002FttyUSB1",[76,123702,25182],{"class":89},[76,123704,30309],{"class":2035},[76,123706,123659],{"class":305},[14,123708,123709,123710,123713,123714,123717,123718,123721],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[73,123711,123712],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[73,123715,123716],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[350,123719,123720],{},"唯一性标识","”。",[14,123723,123373],{},[14,123725,123376,123726,123728],{},[73,123727,123379],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[67,123730,123731],{"className":117337,"code":123383,"language":117339,"meta":58,"style":58},[73,123732,123733],{"__ignoreMap":58},[76,123734,123735,123737,123739],{"class":78,"line":79},[76,123736,24649],{"class":2035},[76,123738,118624],{"class":305},[76,123740,123394],{"class":305},[67,123742,123744],{"className":117337,"code":123743,"language":117339,"meta":58,"style":58},"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",[73,123745,123746,123775],{"__ignoreMap":58},[76,123747,123748,123750,123752,123754,123757,123759,123762,123765,123767,123770,123772],{"class":78,"line":79},[76,123749,123407],{"class":93},[76,123751,247],{"class":89},[76,123753,123412],{"class":305},[76,123755,123756],{"class":93}," KERNELS",[76,123758,247],{"class":89},[76,123760,123761],{"class":305},"=\"1-1.3:1.0\",",[76,123763,123764],{"class":2035}," MODE:",[76,123766,247],{"class":305},[76,123768,123769],{"class":2035},"\"0777\"",[76,123771,578],{"class":2035},[76,123773,123774],{"class":305}," SYMLINK+=\"rplidar_front\"\n",[76,123776,123777,123779,123781,123783,123785,123787,123790,123792,123794,123796,123798],{"class":78,"line":86},[76,123778,123407],{"class":93},[76,123780,247],{"class":89},[76,123782,123412],{"class":305},[76,123784,123756],{"class":93},[76,123786,247],{"class":89},[76,123788,123789],{"class":305},"=\"1-1.4:1.0\",",[76,123791,123764],{"class":2035},[76,123793,247],{"class":305},[76,123795,123769],{"class":2035},[76,123797,578],{"class":2035},[76,123799,123800],{"class":305}," SYMLINK+=\"rplidar_back\"\n",[14,123802,123492],{},[14,123804,123495],{},[67,123806,123807],{"className":117337,"code":123498,"language":117339,"meta":58,"style":58},[73,123808,123809,123813,123823,123833,123837,123841,123851],{"__ignoreMap":58},[76,123810,123811],{"class":78,"line":79},[76,123812,123505],{"class":82},[76,123814,123815,123817,123819,123821],{"class":78,"line":86},[76,123816,24649],{"class":2035},[76,123818,120089],{"class":305},[76,123820,123514],{"class":305},[76,123822,123517],{"class":305},[76,123824,123825,123827,123829,123831],{"class":78,"line":97},[76,123826,24649],{"class":2035},[76,123828,120089],{"class":305},[76,123830,123514],{"class":305},[76,123832,123528],{"class":305},[76,123834,123835],{"class":78,"line":103},[76,123836,2472],{"emptyLinePlaceholder":125},[76,123838,123839],{"class":78,"line":1273},[76,123840,123537],{"class":82},[76,123842,123843,123845,123847,123849],{"class":78,"line":1287},[76,123844,24649],{"class":2035},[76,123846,123544],{"class":305},[76,123848,123547],{"class":305},[76,123850,123550],{"class":250},[76,123852,123853,123855,123857],{"class":78,"line":1293},[76,123854,24649],{"class":2035},[76,123856,123544],{"class":305},[76,123858,123559],{"class":305},[14,123860,123562],{},[14,123862,123565],{},[14,123864,123568,123865,123868],{},[73,123866,123867],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123870,123871],{},[56,123872],{"alt":58,"src":123873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123875,123876],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123878,123879,123881],{},[350,123880,118005],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[169,123883,123885],{"id":123884},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123887,123888],{},"（1）.查看所连接的主机USB接口的信息",[67,123890,123892],{"className":117337,"code":123891,"language":117339,"meta":58,"style":58},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[73,123893,123894,123924],{"__ignoreMap":58},[76,123895,123896,123898,123900,123903,123905,123907,123909,123911,123914,123917,123919,123922],{"class":78,"line":79},[76,123897,123644],{"class":2035},[76,123899,69891],{"class":305},[76,123901,123902],{"class":250}," -a",[76,123904,29289],{"class":250},[76,123906,28495],{"class":93},[76,123908,123644],{"class":2035},[76,123910,69891],{"class":305},[76,123912,123913],{"class":250}," -q",[76,123915,123916],{"class":305}," path",[76,123918,25188],{"class":250},[76,123920,123921],{"class":305}," \u002Fdev\u002FttyACM0",[76,123923,208],{"class":93},[76,123925,123926,123928,123930,123932,123934,123936,123938,123940,123942,123944,123946,123949],{"class":78,"line":86},[76,123927,123644],{"class":2035},[76,123929,69891],{"class":305},[76,123931,123902],{"class":250},[76,123933,29289],{"class":250},[76,123935,28495],{"class":93},[76,123937,123644],{"class":2035},[76,123939,69891],{"class":305},[76,123941,123913],{"class":250},[76,123943,123916],{"class":305},[76,123945,25188],{"class":250},[76,123947,123948],{"class":305}," \u002Fdev\u002FttyUSB0",[76,123950,208],{"class":93},[14,123952,123953],{},[56,123954],{"alt":58,"src":123955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123957,123958],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123960,123373],{},[14,123962,123376,123963,123728],{},[73,123964,123379],{},[67,123966,123967],{"className":117337,"code":123383,"language":117339,"meta":58,"style":58},[73,123968,123969],{"__ignoreMap":58},[76,123970,123971,123973,123975],{"class":78,"line":79},[76,123972,24649],{"class":2035},[76,123974,118624],{"class":305},[76,123976,123394],{"class":305},[67,123978,123980],{"className":117337,"code":123979,"language":117339,"meta":58,"style":58},"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",[73,123981,123982,124010,124036],{"__ignoreMap":58},[76,123983,123984,123986,123988,123991,123993,123995,123997,123999,124002,124005,124007],{"class":78,"line":79},[76,123985,123407],{"class":93},[76,123987,247],{"class":89},[76,123989,123990],{"class":305},"=\"ttyACM*\",",[76,123992,123415],{"class":2035},[76,123994,123418],{"class":305},[76,123996,123447],{"class":2035},[76,123998,578],{"class":2035},[76,124000,124001],{"class":305}," ATTRS{idProduct}==\"55d4\",",[76,124003,124004],{"class":305}," ATTRS{serial}==\"0001\",",[76,124006,123429],{"class":305},[76,124008,124009],{"class":305}," SYMLINK+=\"ttyACM_MCU\"\n",[76,124011,124012,124014,124016,124018,124020,124022,124024,124026,124028,124031,124033],{"class":78,"line":86},[76,124013,123407],{"class":93},[76,124015,247],{"class":89},[76,124017,123990],{"class":305},[76,124019,123415],{"class":2035},[76,124021,123418],{"class":305},[76,124023,123447],{"class":2035},[76,124025,578],{"class":2035},[76,124027,124001],{"class":305},[76,124029,124030],{"class":305}," ATTRS{serial}==\"0002\",",[76,124032,123429],{"class":305},[76,124034,124035],{"class":305}," SYMLINK+=\"ttyACM_Lidar\"\n",[76,124037,124038,124040,124042,124044,124046,124048,124050,124052,124054,124056],{"class":78,"line":97},[76,124039,123407],{"class":93},[76,124041,247],{"class":89},[76,124043,123412],{"class":305},[76,124045,123415],{"class":2035},[76,124047,123418],{"class":305},[76,124049,123447],{"class":2035},[76,124051,578],{"class":2035},[76,124053,123452],{"class":305},[76,124055,123429],{"class":305},[76,124057,124058],{"class":305}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124060,123492],{},[14,124062,123495],{},[67,124064,124065],{"className":117337,"code":123498,"language":117339,"meta":58,"style":58},[73,124066,124067,124071,124081,124091,124095,124099,124109],{"__ignoreMap":58},[76,124068,124069],{"class":78,"line":79},[76,124070,123505],{"class":82},[76,124072,124073,124075,124077,124079],{"class":78,"line":86},[76,124074,24649],{"class":2035},[76,124076,120089],{"class":305},[76,124078,123514],{"class":305},[76,124080,123517],{"class":305},[76,124082,124083,124085,124087,124089],{"class":78,"line":97},[76,124084,24649],{"class":2035},[76,124086,120089],{"class":305},[76,124088,123514],{"class":305},[76,124090,123528],{"class":305},[76,124092,124093],{"class":78,"line":103},[76,124094,2472],{"emptyLinePlaceholder":125},[76,124096,124097],{"class":78,"line":1273},[76,124098,123537],{"class":82},[76,124100,124101,124103,124105,124107],{"class":78,"line":1287},[76,124102,24649],{"class":2035},[76,124104,123544],{"class":305},[76,124106,123547],{"class":305},[76,124108,123550],{"class":250},[76,124110,124111,124113,124115],{"class":78,"line":1293},[76,124112,24649],{"class":2035},[76,124114,123544],{"class":305},[76,124116,123559],{"class":305},[14,124118,124119,124120],{},"再重新插拔设备即可，或者 ",[350,124121,124122],{},"直接重启系统。",[14,124124,123565],{},[14,124126,123568,124127,123868],{},[73,124128,123867],{},[14,124130,124131],{},[56,124132],{"alt":58,"src":124133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124135,123876],{},[14,124137,124138,124140],{},[350,124139,118005],{}," 一些设备可能没有串口号等。",[169,124142,124144],{"id":124143},"_744-其他注意事项","7.4.4 其他注意事项",[14,124146,124147,124148,124150,124151,124154,124155,18482,124158,124161,124162,124164],{},"并非所有的USB设备端口号都是",[73,124149,123602],{},"的格式，比如Arduino的端口号可能是",[73,124152,124153],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[73,124156,124157],{},"videon",[73,124159,124160],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[73,124163,124157],{},"端口，绑定时需要关联的也是该接口。",[14,124166,124167,124168,124171,124172,124175,124176,124178,124179,124182,124183,124186,124187,124190,124191,124190,124194,124190,124197,28458],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[73,124169,124170],{},"KERNEL==\"ttyUSB*\"","修改为",[73,124173,124174],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[73,124177,124170],{},"修改为类似于",[73,124180,124181],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[73,124184,124185],{},"video[0,2,4,6]","表示可以绑定的端口为",[73,124188,124189],{},"video0","或",[73,124192,124193],{},"video2",[73,124195,124196],{},"video4",[73,124198,124199],{},"video6",[140,124201,124203],{"id":124202},"_75-挂载内网网页","7.5 挂载内网网页",[14,124205,124206],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124208,124209],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124211,124212],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124214,124215,124216],{},"Termux 下载地址（F-Droid）：",[439,124217,124218],{"href":124218,"rel":124219},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23937],[14,124221,124222],{},"首先打开app后，先更新软件缓存：",[67,124224,124226],{"className":117337,"code":124225,"language":117339,"meta":58,"style":58},"pkg update\n",[73,124227,124228],{"__ignoreMap":58},[76,124229,124230,124233],{"class":78,"line":79},[76,124231,124232],{"class":2035},"pkg",[76,124234,26315],{"class":305},[14,124236,124237],{},"然后换源",[67,124239,124241],{"className":117337,"code":124240,"language":117339,"meta":58,"style":58},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[73,124242,124243],{"__ignoreMap":58},[76,124244,124245,124247,124250],{"class":78,"line":79},[76,124246,123115],{"class":2035},[76,124248,124249],{"class":93}," $PREFIX",[76,124251,124252],{"class":305},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124254,124255],{},"将该文件内容替换为下面：",[67,124257,124259],{"className":117337,"code":124258,"language":117339,"meta":58,"style":58},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[73,124260,124261],{"__ignoreMap":58},[76,124262,124263,124266,124269,124272],{"class":78,"line":79},[76,124264,124265],{"class":2035},"deb",[76,124267,124268],{"class":305}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[76,124270,124271],{"class":305}," stable",[76,124273,124274],{"class":305}," main\n",[1206,124276,124277,124304],{},[155,124278,124279,124280,124282,124283],{},"如果你使用的是",[73,124281,123115],{},"编辑器：",[1206,124284,124285,124292,124298],{},[155,124286,124287,124288,124291],{},"按 ",[73,124289,124290],{},"Ctrl+O"," 保存文件。",[155,124293,124287,124294,124297],{},[73,124295,124296],{},"Enter"," 确认文件名。",[155,124299,124287,124300,124303],{},[73,124301,124302],{},"Ctrl+X"," 退出编辑器。",[155,124305,124279,124306,124282,124309],{},[73,124307,124308],{},"vim",[1206,124310,124311,124317],{},[155,124312,124287,124313,124316],{},[73,124314,124315],{},"Esc"," 退出编辑模式。",[155,124318,124319,124320,124322],{},"输入 ",[73,124321,119262],{}," 保存并退出。",[14,124324,124325],{},"接下来重新更新软件源：",[67,124327,124329],{"className":117337,"code":124328,"language":117339,"meta":58,"style":58},"pkg update && pkg upgrade\n",[73,124330,124331],{"__ignoreMap":58},[76,124332,124333,124335,124337,124339,124341],{"class":78,"line":79},[76,124334,124232],{"class":2035},[76,124336,117388],{"class":305},[76,124338,26263],{"class":93},[76,124340,124232],{"class":2035},[76,124342,117374],{"class":305},[14,124344,124345],{},"安装python：",[67,124347,124349],{"className":117337,"code":124348,"language":117339,"meta":58,"style":58},"pkg install python\n",[73,124350,124351],{"__ignoreMap":58},[76,124352,124353,124355,124357],{"class":78,"line":79},[76,124354,124232],{"class":2035},[76,124356,23906],{"class":305},[76,124358,124359],{"class":305}," python\n",[14,124361,124362,26546],{},[350,124363,124364],{},"通过Termux访问设备存储",[14,124366,124367],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[67,124369,124371],{"className":117337,"code":124370,"language":117339,"meta":58,"style":58},"termux-setup-storage\n",[73,124372,124373],{"__ignoreMap":58},[76,124374,124375],{"class":78,"line":79},[76,124376,124370],{"class":2035},[152,124378,124379],{},[155,124380,124381,26546,124384],{},[350,124382,124383],{},"进入HTML文件所在的目录",[152,124385,124386],{},[155,124387,124388,124389,124391],{},"使用",[73,124390,101317],{},"命令进入HTML文件所在的目录：",[67,124393,124395],{"className":117337,"code":124394,"language":117339,"meta":58,"style":58},"cd ~\u002Fyour_html_folder\n",[73,124396,124397],{"__ignoreMap":58},[76,124398,124399,124401],{"class":78,"line":79},[76,124400,101317],{"class":250},[76,124402,124403],{"class":305}," ~\u002Fyour_html_folder\n",[152,124405,124406],{"start":86},[155,124407,124408,26546,124411,124416,124433],{},[350,124409,124410],{},"启动Python HTTP服务器",[152,124412,124413],{},[155,124414,124415],{},"运行以下命令启动一个简单的HTTP服务器：",[67,124417,124419],{"className":117337,"code":124418,"language":117339,"meta":58,"style":58},"python -m http.server 8000\n",[73,124420,124421],{"__ignoreMap":58},[76,124422,124423,124425,124427,124430],{"class":78,"line":79},[76,124424,71],{"class":2035},[76,124426,100923],{"class":250},[76,124428,124429],{"class":305}," http.server",[76,124431,124432],{"class":250}," 8000\n",[152,124434,124435],{"start":97},[155,124436,124437,124438,124441],{},"这会在端口",[73,124439,124440],{},"8000","上启动一个Web服务器。",[1206,124443,124444],{},[155,124445,124446],{},"启动服务器后，Termux会显示日志信息，例如：",[67,124448,124450],{"className":120857,"code":124449,"language":120859,"meta":120860,"style":58},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[73,124451,124452],{"__ignoreMap":58},[76,124453,124454],{"class":78,"line":79},[76,124455,124449],{},[1206,124457,124458],{},[155,124459,124460],{},"这表示服务器已成功启动。",[14,124462,124463],{},[350,124464,124465],{},"在浏览器中访问HTML文件",[152,124467,124468],{},[155,124469,124470,26546,124473,124478],{},[350,124471,124472],{},"在同一设备上访问",[152,124474,124475],{},[155,124476,124477],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[67,124479,124482],{"className":124480,"code":124481,"language":71734,"meta":58,"style":58},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[73,124483,124484],{"__ignoreMap":58},[76,124485,124486,124489],{"class":78,"line":79},[76,124487,124488],{"class":93},"http:",[76,124490,124491],{"class":82},"\u002F\u002Flocalhost:8000\n",[1206,124493,124494],{},[155,124495,124496,124497,124500],{},"如果HTML文件中有",[73,124498,124499],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[140,124502,124504],{"id":124503},"_76-linux重点知识","7.6 Linux重点知识",[169,124506,124508],{"id":124507},"_761-关于点的说明","7.6.1 关于点的说明",[14,124510,124511],{},[56,124512],{"alt":58,"src":124513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124515,124516],{},"一点本目录，两点上目录",[169,124518,124520],{"id":124519},"_762-目录","7.6.2 目录",[22070,124522,124524],{"id":124523},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124526,124527],{},[350,124528,124529],{},"\u002Fboot:",[14,124531,124532],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124534,124535],{},[350,124536,124537],{},"\u002Fetc:",[14,124539,124540],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124542,124543],{},[350,124544,124545],{},"\u002Flib：",[14,124547,124548],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124550,124551],{},[350,124552,124553],{},"\u002Fsys:",[14,124555,124556],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22070,124558,124560],{"id":124559},"_7622-指令集合","7.6.2.2 指令集合",[14,124562,124563],{},[350,124564,124565],{},"\u002Fbin:",[14,124567,124568],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124570,124571],{},[350,124572,124573],{},"\u002Fsbin:",[14,124575,124576],{},"只有系统管理员才能使用的程序和指令",[22070,124578,124580],{"id":124579},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124582,124583],{},[350,124584,124585],{},"\u002Fdev:",[14,124587,124588],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124590,124591],{},[350,124592,124593],{},"\u002Fmedia:",[14,124595,124596],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124598,124599],{},[350,124600,124601],{},"\u002Fmnt:",[14,124603,124604],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22070,124606,124608],{"id":124607},"_7624-临时文件","7.6.2.4 临时文件",[14,124610,124611],{},[350,124612,124613],{},"\u002Frun:",[14,124615,124616],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124618,124619],{},[350,124620,124621],{},"\u002Flost+found:",[14,124623,124624],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124626,124627],{},[350,124628,124629],{},"\u002Ftmp:",[14,124631,124632],{},"这个目录是用来存放一些临时文件的",[22070,124634,124636],{"id":124635},"_7625-账户","7.6.2.5 账户",[14,124638,124639],{},[350,124640,124641],{},"\u002Froot：",[14,124643,124644],{},"系统管理员的用户主目录",[14,124646,124647,26546],{},[350,124648,124649],{},"\u002Fhome",[14,124651,124652],{},"用户的主目录，以用户的账号命名的",[14,124654,124655,26546],{},[350,124656,124657],{},"\u002Fusr",[14,124659,124660],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124662,124663],{},[350,124664,124665],{},"\u002Fusr\u002Fbin：",[14,124667,124668],{},"系统用户使用的应用程序与指令",[14,124670,124671],{},[350,124672,124673],{},"\u002Fusr\u002Fsbin：",[14,124675,124676],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124678,124679],{},[350,124680,124681],{},"\u002Fusr\u002Fsrc：",[14,124683,124684],{},"内核源代码默认的放置目录",[22070,124686,124688],{"id":124687},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124690,124691],{},[350,124692,124693],{},"\u002Fvar：",[14,124695,124696],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124698,124699],{},[350,124700,124701],{},"\u002Fproc:",[14,124703,124704,124705,124708],{},"管理 ",[350,124706,124707],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22070,124710,124712],{"id":124711},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124714,124715],{},[350,124716,124717],{},"\u002Fopt:",[14,124719,124720],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124722,124723],{},[350,124724,124725],{},"\u002Fsrv:",[14,124727,124728],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[169,124730,124732],{"id":124731},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124734,124735],{},[56,124736],{"alt":58,"src":124737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124739,124740],{},"windows-->linux:",[14,124742,124743],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124745,124746],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124748,124749],{},"linux传输文件到windows",[14,124751,124752],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[169,124754,124756],{"id":124755},"_764-易忘知识","7.6.4 易忘知识",[14,124758,124759],{},"操作系统内核查看",[67,124761,124762],{"className":117337,"code":121331,"language":117339,"meta":58,"style":58},[73,124763,124764],{"__ignoreMap":58},[76,124765,124766,124768],{"class":78,"line":79},[76,124767,70274],{"class":2035},[76,124769,121340],{"class":250},[14,124771,124772],{},[56,124773],{"alt":58,"src":124774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124776,124777],{},[56,124778],{"alt":58,"src":124779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[67,124781,124783],{"className":117337,"code":124782,"language":117339,"meta":58,"style":58},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[73,124784,124785,124797],{"__ignoreMap":58},[76,124786,124787,124789,124792,124795],{"class":78,"line":79},[76,124788,121548],{"class":2035},[76,124790,124791],{"class":305}," mvtest",[76,124793,124794],{"class":305}," mvtest2",[76,124796,2746],{"class":93},[76,124798,124799],{"class":78,"line":86},[76,124800,124801],{"class":2035},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124803,124804],{},[56,124805],{"alt":58,"src":124806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124808,124809],{},[56,124810],{"alt":58,"src":124811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124813,124814,124815,124818],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[73,124816,124817],{},"du -a"," 可以快速查看磁盘使用细节。",[169,124820,124822],{"id":124821},"_765-vim","7.6.5 Vim",[14,124824,124825],{},[56,124826],{"alt":58,"src":124827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124829,124830],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124832,124833],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124835,124836],{},[350,124837,124838],{},"1.命令模式：",[14,124840,124841],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124843,124844],{},"x 删除当前光标所在处的字符",[14,124846,124847],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124849,124850],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124852,124853],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124855,124856],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124858,124859],{},"dd 剪切当前行",[14,124861,124862],{},"yy 复制当前行",[14,124864,124865],{},"p 粘贴剪贴板内容到光标下方",[14,124867,124868],{},"P 粘贴剪贴板内容到光标上方",[14,124870,124871],{},"u 撤销上一次操作",[14,124873,124874],{},"ctrl+r 重做上一次操作",[14,124876,124877,124879],{},[994,124878],{}," 保存文件",[14,124881,124882,124884],{},[844,124883],{}," 退出Vim编辑器",[14,124886,124887,124889],{},[844,124888],{},"! 强制退出Vim编辑器，不保存修改",[14,124891,124892],{},[350,124893,124894],{},"2.输入模式：",[14,124896,124897],{},[56,124898],{"alt":58,"src":124899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124901,124902],{},[350,124903,124904],{},"3.底线命令模式：",[14,124906,124907],{},[56,124908],{"alt":58,"src":124909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124911,124912],{},"按下esc可以退出底线命令模式",[169,124914,124916],{"id":124915},"_766-apt","7.6.6 apt",[14,124918,124919],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[169,124921,124923],{"id":124922},"_767-home与root的区别","7.6.7 home与root的区别",[14,124925,124926],{},[56,124927],{"alt":58,"src":124928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124930,124931],{},[56,124932],{"alt":58,"src":124933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124935,124936],{},[56,124937],{"alt":58,"src":124938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124940,124941],{},[56,124942],{"alt":58,"src":124943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[169,124945,124947],{"id":124946},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124949,124950],{},[439,124951,124952],{"href":124952,"rel":124953},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23937],[152,124955,124956,124959],{},[155,124957,124958],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[155,124960,124961],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124963,124964],{},[56,124965],{"alt":58,"src":124966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124968,124969],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124971,124972],{},[56,124973],{"alt":58,"src":124974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[67,124976,124978],{"className":120857,"code":124977,"language":120859,"meta":120860,"style":58},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[73,124979,124980,124985],{"__ignoreMap":58},[76,124981,124982],{"class":78,"line":79},[76,124983,124984],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[76,124986,124987],{"class":78,"line":86},[76,124988,124989],{},".\u002Fpycharm.sh\n",[14,124991,124992],{},"3️⃣创建.desktop文件",[14,124994,124995],{},[350,124996,124997],{},"原理：",[1206,124999,125000,125010],{},[155,125001,125002,125003,125009],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[350,125004,125005,125008],{},[73,125006,125007],{},".desktop"," 文件"," 来识别应用。",[155,125011,125012,125014,125015],{},[73,125013,125007],{}," 文件相当于一个“应用注册表”，告诉系统：",[1206,125016,125017,125020,125023,125026,125029],{},[155,125018,125019],{},"应用名字（Name）",[155,125021,125022],{},"图标（Icon）",[155,125024,125025],{},"执行命令（Exec）",[155,125027,125028],{},"分类（Categories）",[155,125030,125031],{},"是否需要终端（Terminal）",[67,125033,125035],{"className":120857,"code":125034,"language":120859,"meta":120860,"style":58},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[73,125036,125037,125042],{"__ignoreMap":58},[76,125038,125039],{"class":78,"line":79},[76,125040,125041],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[76,125043,125044],{"class":78,"line":86},[76,125045,125046],{},"nano pycharm.desktop\n",[14,125048,125049],{},"nano是一个命令行下的编辑器，也可以使用vim",[67,125051,125053],{"className":120857,"code":125052,"language":120859,"meta":120860,"style":58},"[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",[73,125054,125055,125060,125065,125070,125075,125080,125085,125090,125095,125100],{"__ignoreMap":58},[76,125056,125057],{"class":78,"line":79},[76,125058,125059],{},"[Desktop Entry]\n",[76,125061,125062],{"class":78,"line":86},[76,125063,125064],{},"Version=1.0\n",[76,125066,125067],{"class":78,"line":97},[76,125068,125069],{},"Type=Application\n",[76,125071,125072],{"class":78,"line":103},[76,125073,125074],{},"Name=PyCharm\n",[76,125076,125077],{"class":78,"line":1273},[76,125078,125079],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[76,125081,125082],{"class":78,"line":1287},[76,125083,125084],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[76,125086,125087],{"class":78,"line":1293},[76,125088,125089],{},"Comment=JetBrains PyCharm IDE\n",[76,125091,125092],{"class":78,"line":1384},[76,125093,125094],{},"Categories=Development;IDE;\n",[76,125096,125097],{"class":78,"line":1390},[76,125098,125099],{},"Terminal=false\n",[76,125101,125102],{"class":78,"line":1402},[76,125103,125104],{},"StartupWMClass=jetbrains-pycharm\n",[1206,125106,125107,125113,125119,125125],{},[155,125108,125109,125112],{},[73,125110,125111],{},"Exec"," → 点击图标时执行的命令",[155,125114,125115,125118],{},[73,125116,125117],{},"Icon"," → 显示在菜单和桌面上的图标",[155,125120,125121,125124],{},[73,125122,125123],{},"Terminal=false"," → 不打开终端",[155,125126,125127,125130],{},[73,125128,125129],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125132,125133,125134],"blockquote",{},[14,125135,125136,125137,125139,125140],{},"可以理解成 ",[73,125138,125007],{}," 文件是 Linux 的 ",[350,125141,125142],{},"快捷方式配置文件",[14,125144,125145],{},"4️⃣设置可执行权限",[67,125147,125149],{"className":120857,"code":125148,"language":120859,"meta":120860,"style":58},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[73,125150,125151],{"__ignoreMap":58},[76,125152,125153],{"class":78,"line":79},[76,125154,125148],{},[14,125156,125157],{},"5️⃣桌面图标启动的话如下：",[67,125159,125161],{"className":120857,"code":125160,"language":120859,"meta":120860,"style":58},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[73,125162,125163,125168],{"__ignoreMap":58},[76,125164,125165],{"class":78,"line":79},[76,125166,125167],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[76,125169,125170],{"class":78,"line":86},[76,125171,125172],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[152,125174,125175],{"start":97},[155,125176,125177],{},"下载Appimage文件实现软件的安装",[14,125179,125180],{},"1️⃣先下载appimage",[14,125182,125183],{},[439,125184,125185],{"href":125185,"rel":125186},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23937],[14,125188,125189],{},[56,125190],{"alt":58,"src":125191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125193,125194],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125196,125197],{},[56,125198],{"alt":58,"src":125199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125201,125202],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125204,125205],{},[56,125206],{"alt":58,"src":125207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125209,125210],{},[56,125211],{"alt":58,"src":125212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125214,125215,125216,125219],{},"3️⃣给他们放在",[73,125217,125218],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125221,125222],{},"4️⃣给软件执行权限",[67,125224,125226],{"className":120857,"code":125225,"language":120859,"meta":120860,"style":58},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[73,125227,125228,125233],{"__ignoreMap":58},[76,125229,125230],{"class":78,"line":79},[76,125231,125232],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[76,125234,125235],{"class":78,"line":86},[76,125236,125237],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125239,125240],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[67,125242,125244],{"className":117337,"code":125243,"language":117339,"meta":58,"style":58},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[73,125245,125246,125253,125260,125266],{"__ignoreMap":58},[76,125247,125248,125250],{"class":78,"line":79},[76,125249,101317],{"class":250},[76,125251,125252],{"class":305}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[76,125254,125255,125257],{"class":78,"line":86},[76,125256,101324],{"class":2035},[76,125258,125259],{"class":305}," .\u002Fqqmusic.desktop\n",[76,125261,125262,125264],{"class":78,"line":97},[76,125263,124308],{"class":2035},[76,125265,125259],{"class":305},[76,125267,125268,125270,125272,125274],{"class":78,"line":103},[76,125269,24649],{"class":2035},[76,125271,24652],{"class":305},[76,125273,123174],{"class":305},[76,125275,125259],{"class":305},[14,125277,125278,125280],{},[73,125279,101324],{},"：一个 Linux 命令，主要功能是：",[1206,125282,125283,125286],{},[155,125284,125285],{},"如果文件不存在，就创建一个新的空文件",[155,125287,125288],{},"如果文件已存在，就更新该文件的最后修改时间",[67,125290,125292],{"className":120857,"code":125291,"language":120859,"meta":120860,"style":58},"[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",[73,125293,125294,125298,125303,125308,125313,125317,125322],{"__ignoreMap":58},[76,125295,125296],{"class":78,"line":79},[76,125297,125059],{},[76,125299,125300],{"class":78,"line":86},[76,125301,125302],{},"Name=QQ音乐\n",[76,125304,125305],{"class":78,"line":97},[76,125306,125307],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[76,125309,125310],{"class":78,"line":103},[76,125311,125312],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[76,125314,125315],{"class":78,"line":1273},[76,125316,125069],{},[76,125318,125319],{"class":78,"line":1287},[76,125320,125321],{},"Categories=Audio;Music;Player;\n",[76,125323,125324],{"class":78,"line":1293},[76,125325,125326],{},"Comment=QQ Music Client for Linux\n",[14,125328,125329],{},"将文件复制进去",[14,125331,125332],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125334,125335],{},[56,125336],{"alt":58,"src":125337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125339,125340],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125342,125343],{},[56,125344],{"alt":58,"src":125345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125347,125348,125349,125352,125353,125356],{},"如果你用的不是KDE，那么也可以直接修改",[73,125350,125351],{},"qqmuic.desktop","：在exec的末尾加上",[73,125354,125355],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[67,125358,125360],{"className":120857,"code":125359,"language":120859,"meta":120860,"style":58},"[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",[73,125361,125362,125366,125370,125375,125379,125383,125387],{"__ignoreMap":58},[76,125363,125364],{"class":78,"line":79},[76,125365,125059],{},[76,125367,125368],{"class":78,"line":86},[76,125369,125302],{},[76,125371,125372],{"class":78,"line":97},[76,125373,125374],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[76,125376,125377],{"class":78,"line":103},[76,125378,125312],{},[76,125380,125381],{"class":78,"line":1273},[76,125382,125069],{},[76,125384,125385],{"class":78,"line":1287},[76,125386,125321],{},[76,125388,125389],{"class":78,"line":1293},[76,125390,125326],{},[14,125392,125393],{},[56,125394],{"alt":58,"src":125395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125397,125398],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[67,125400,125402],{"className":120857,"code":125401,"language":120859,"meta":120860,"style":58},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[73,125403,125404],{"__ignoreMap":58},[76,125405,125406],{"class":78,"line":79},[76,125407,125401],{},[152,125409,125410],{"start":103},[155,125411,125412],{},"去Flathub上安装软件",[14,125414,125415],{},[439,125416,125417],{"href":125417,"rel":125418},"https:\u002F\u002Fflathub.org\u002F",[23937],[14,125420,125421],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125423,125424],{},[56,125425],{"alt":58,"src":125426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[67,125428,125430],{"className":120857,"code":125429,"language":120859,"meta":120860,"style":58},"flatpak install flathub com.obsproject.Studio\n",[73,125431,125432],{"__ignoreMap":58},[76,125433,125434],{"class":78,"line":79},[76,125435,125429],{},[14,125437,125438],{},[56,125439],{"alt":58,"src":125440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125442,125443],{},"2️⃣运行软件",[14,125445,125446],{},"a.官方方式：",[14,125448,125449],{},[56,125450],{"alt":58,"src":125451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[67,125453,125454],{"className":120857,"code":125429,"language":120859,"meta":120860,"style":58},[73,125455,125456],{"__ignoreMap":58},[76,125457,125458],{"class":78,"line":79},[76,125459,125429],{},[14,125461,125462],{},"b.当普通软件运行：",[14,125464,125465],{},[56,125466],{"alt":58,"src":125467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125469,125470],{},[56,125471],{"alt":58,"src":125472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[117,125474,125475],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":58,"searchDepth":86,"depth":86,"links":125477},[125478,125479,125484,125485,125491,125492],{"id":122210,"depth":86,"text":122211},{"id":122552,"depth":86,"text":122553,"children":125480},[125481,125482,125483],{"id":122556,"depth":97,"text":122557},{"id":122623,"depth":97,"text":122624},{"id":122884,"depth":97,"text":122885},{"id":123037,"depth":86,"text":123038},{"id":123275,"depth":86,"text":123276,"children":125486},[125487,125488,125489,125490],{"id":123327,"depth":97,"text":123328},{"id":123613,"depth":97,"text":123614},{"id":123884,"depth":97,"text":123885},{"id":124143,"depth":97,"text":124144},{"id":124202,"depth":86,"text":124203},{"id":124503,"depth":86,"text":124504,"children":125493},[125494,125495,125496,125497,125498,125499,125500,125501],{"id":124507,"depth":97,"text":124508},{"id":124519,"depth":97,"text":124520},{"id":124731,"depth":97,"text":124732},{"id":124755,"depth":97,"text":124756},{"id":124821,"depth":97,"text":124822},{"id":124915,"depth":97,"text":124916},{"id":124922,"depth":97,"text":124923},{"id":124946,"depth":97,"text":124947},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122202,"description":122},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125508,"title":125509,"body":125510,"description":122,"extension":123,"meta":125514,"navigation":125,"path":125515,"seo":125516,"stem":125517,"__hash__":125518},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125511,"toc":125512},[],{"title":58,"searchDepth":86,"depth":86,"links":125513},[],{"category":30336},"\u002Fwiki\u002F2025-01-27-linux",{"title":125509,"description":122},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125520,"title":125521,"body":125522,"description":125526,"extension":123,"meta":125917,"navigation":125,"path":125918,"seo":125919,"stem":125920,"__hash__":125921},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125523,"toc":125915},[125524,125527,125531,125548,125551,125604,125608,125610,125650,125659,125663,125666,125907,125912],[14,125525,125526],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125528,125530],{"id":125529},"_1ubuntu环境配置","1.Ubuntu环境配置",[152,125532,125533,125536,125539,125542,125545],{},[155,125534,125535],{},"ubuntu环境换源",[155,125537,125538],{},"安装cuda",[155,125540,125541],{},"安装miniconda",[155,125543,125544],{},"安装pytorch",[155,125546,125547],{},"安装genesis",[14,125549,125550],{},"参考链接：",[67,125552,125554],{"className":23894,"code":125553,"language":23896,"meta":58,"style":58},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[73,125555,125556],{"__ignoreMap":58},[76,125557,125558,125561,125564,125567,125569,125572,125575,125577,125580,125583,125585,125588,125591,125593,125596,125599,125601],{"class":78,"line":79},[76,125559,125560],{"class":2035},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[76,125562,125563],{"class":305},"=blogdetail",[76,125565,125566],{"class":93},"&sharetype",[76,125568,247],{"class":89},[76,125570,125571],{"class":305},"blogdetail",[76,125573,125574],{"class":93},"&sharerId",[76,125576,247],{"class":89},[76,125578,125579],{"class":305},"144728092",[76,125581,125582],{"class":93},"&sharerefer",[76,125584,247],{"class":89},[76,125586,125587],{"class":305},"PC",[76,125589,125590],{"class":93},"&sharesource",[76,125592,247],{"class":89},[76,125594,125595],{"class":305},"qq_69379513",[76,125597,125598],{"class":93},"&sharefrom",[76,125600,247],{"class":89},[76,125602,125603],{"class":305},"from_link\n",[10,125605,125607],{"id":125606},"_2genesis-报错issue","2.Genesis 报错issue",[14,125609,125550],{},[67,125611,125612],{"className":23894,"code":125553,"language":23896,"meta":58,"style":58},[73,125613,125614],{"__ignoreMap":58},[76,125615,125616,125618,125620,125622,125624,125626,125628,125630,125632,125634,125636,125638,125640,125642,125644,125646,125648],{"class":78,"line":79},[76,125617,125560],{"class":2035},[76,125619,125563],{"class":305},[76,125621,125566],{"class":93},[76,125623,247],{"class":89},[76,125625,125571],{"class":305},[76,125627,125574],{"class":93},[76,125629,247],{"class":89},[76,125631,125579],{"class":305},[76,125633,125582],{"class":93},[76,125635,247],{"class":89},[76,125637,125587],{"class":305},[76,125639,125590],{"class":93},[76,125641,247],{"class":89},[76,125643,125595],{"class":305},[76,125645,125598],{"class":93},[76,125647,247],{"class":89},[76,125649,125603],{"class":305},[67,125651,125653],{"className":23894,"code":125652,"language":23896,"meta":58,"style":58},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[73,125654,125655],{"__ignoreMap":58},[76,125656,125657],{"class":78,"line":79},[76,125658,125652],{"class":2035},[10,125660,125662],{"id":125661},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125664,125665],{},"hello_robot.py",[67,125667,125669],{"className":69,"code":125668,"language":71,"meta":58,"style":58},"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",[73,125670,125671,125677,125692,125696,125708,125720,125724,125737,125741,125760,125770,125780,125794,125798,125802,125807,125811,125821,125828,125842,125849,125859,125864,125868,125886,125891,125895,125902],{"__ignoreMap":58},[76,125672,125673,125675],{"class":78,"line":79},[76,125674,90],{"class":89},[76,125676,45375],{"class":93},[76,125678,125679,125682,125685,125687,125689],{"class":78,"line":86},[76,125680,125681],{"class":93},"os.environ[",[76,125683,125684],{"class":305},"'PYOPENGL_PLATFORM'",[76,125686,4515],{"class":93},[76,125688,247],{"class":89},[76,125690,125691],{"class":305}," 'glx'\n",[76,125693,125694],{"class":78,"line":97},[76,125695,2472],{"emptyLinePlaceholder":125},[76,125697,125698,125700,125703,125705],{"class":78,"line":103},[76,125699,90],{"class":89},[76,125701,125702],{"class":93}," genesis ",[76,125704,31453],{"class":89},[76,125706,125707],{"class":93}," gs\n",[76,125709,125710,125712,125715,125717],{"class":78,"line":1273},[76,125711,30807],{"class":89},[76,125713,125714],{"class":93}," pynput ",[76,125716,90],{"class":89},[76,125718,125719],{"class":93}," keyboard\n",[76,125721,125722],{"class":78,"line":1287},[76,125723,2472],{"emptyLinePlaceholder":125},[76,125725,125726,125729,125732,125734],{"class":78,"line":1293},[76,125727,125728],{"class":93},"gs.init(",[76,125730,125731],{"class":5288},"backend",[76,125733,247],{"class":89},[76,125735,125736],{"class":93},"gs.gpu)\n",[76,125738,125739],{"class":78,"line":1384},[76,125740,2472],{"emptyLinePlaceholder":125},[76,125742,125743,125746,125748,125751,125754,125756,125758],{"class":78,"line":1390},[76,125744,125745],{"class":93},"scene ",[76,125747,247],{"class":89},[76,125749,125750],{"class":93}," gs.Scene(",[76,125752,125753],{"class":5288},"show_viewer",[76,125755,247],{"class":89},[76,125757,31546],{"class":250},[76,125759,208],{"class":93},[76,125761,125762,125765,125767],{"class":78,"line":1402},[76,125763,125764],{"class":93},"plane ",[76,125766,247],{"class":89},[76,125768,125769],{"class":93}," scene.add_entity(gs.morphs.Plane())\n",[76,125771,125772,125775,125777],{"class":78,"line":1684},[76,125773,125774],{"class":93},"franka ",[76,125776,247],{"class":89},[76,125778,125779],{"class":93}," scene.add_entity(\n",[76,125781,125782,125785,125787,125789,125792],{"class":78,"line":1689},[76,125783,125784],{"class":93},"    gs.morphs.MJCF(",[76,125786,45424],{"class":5288},[76,125788,247],{"class":89},[76,125790,125791],{"class":305},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[76,125793,38117],{"class":93},[76,125795,125796],{"class":78,"line":1695},[76,125797,208],{"class":93},[76,125799,125800],{"class":78,"line":1700},[76,125801,2472],{"emptyLinePlaceholder":125},[76,125803,125804],{"class":78,"line":1714},[76,125805,125806],{"class":93},"scene.build()\n",[76,125808,125809],{"class":78,"line":1719},[76,125810,2472],{"emptyLinePlaceholder":125},[76,125812,125813,125815,125818],{"class":78,"line":1725},[76,125814,32017],{"class":89},[76,125816,125817],{"class":2035}," on_press",[76,125819,125820],{"class":93},"(key):\n",[76,125822,125823,125826],{"class":78,"line":1746},[76,125824,125825],{"class":89},"    try",[76,125827,3811],{"class":93},[76,125829,125830,125832,125835,125837,125840],{"class":78,"line":1751},[76,125831,2569],{"class":89},[76,125833,125834],{"class":93}," key.char ",[76,125836,3021],{"class":89},[76,125838,125839],{"class":305}," 'q'",[76,125841,3811],{"class":93},[76,125843,125844,125846],{"class":78,"line":1765},[76,125845,15804],{"class":89},[76,125847,125848],{"class":250}," False\n",[76,125850,125851,125854,125857],{"class":78,"line":1770},[76,125852,125853],{"class":89},"    except",[76,125855,125856],{"class":250}," AttributeError",[76,125858,3811],{"class":93},[76,125860,125861],{"class":78,"line":1799},[76,125862,125863],{"class":89},"        pass\n",[76,125865,125866],{"class":78,"line":1804},[76,125867,2472],{"emptyLinePlaceholder":125},[76,125869,125870,125873,125875,125878,125881,125883],{"class":78,"line":1821},[76,125871,125872],{"class":93},"listener ",[76,125874,247],{"class":89},[76,125876,125877],{"class":93}," keyboard.Listener(",[76,125879,125880],{"class":5288},"on_press",[76,125882,247],{"class":89},[76,125884,125885],{"class":93},"on_press)\n",[76,125887,125888],{"class":78,"line":1826},[76,125889,125890],{"class":93},"listener.start()\n",[76,125892,125893],{"class":78,"line":1831},[76,125894,2472],{"emptyLinePlaceholder":125},[76,125896,125897,125899],{"class":78,"line":1836},[76,125898,108704],{"class":89},[76,125900,125901],{"class":93}," listener.running:\n",[76,125903,125904],{"class":78,"line":1850},[76,125905,125906],{"class":93},"    scene.step()\n",[14,125908,125909],{},[56,125910],{"alt":58,"src":125911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[117,125913,125914],{},"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":58,"searchDepth":86,"depth":86,"links":125916},[],{"category":23450},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125521,"description":125526},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125923,"title":125924,"body":125925,"description":122,"extension":123,"meta":125940,"navigation":125,"path":125941,"seo":125942,"stem":125943,"__hash__":125944},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125926,"toc":125937},[125927,125930,125934],[10,125928,125924],{"id":125929},"_1-基础知识",[140,125931,125933],{"id":125932},"_11-js的组成","1.1 js的组成",[14,125935,125936],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":58,"searchDepth":86,"depth":86,"links":125938},[125939],{"id":125932,"depth":86,"text":125933},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125924,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125946,"title":125947,"body":125948,"description":122,"extension":123,"meta":126087,"navigation":125,"path":126088,"seo":126089,"stem":126090,"__hash__":126091},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125949,"toc":126075},[125950,125953,125957,125960,125964,125974,125978,125981,125984,125987,125991,125998,126004,126008,126014,126025,126029,126032,126036,126039,126043,126046,126050,126053,126057,126060,126063,126066,126069,126072],[10,125951,125947],{"id":125952},"_2-vscode必备内容",[140,125954,125956],{"id":125955},"_21-标签分类","2.1 标签分类",[14,125958,125959],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[140,125961,125963],{"id":125962},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125965,125966,125967,125969,125970,125973],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[73,125968,427],{}," 然后按 ",[73,125971,125972],{},"Tab","，快速自动生成基本结构。",[140,125975,125977],{"id":125976},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125979,125980],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125982,125983],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125985,125986],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[140,125988,125990],{"id":125989},"_24-视图缩放","2.4 视图缩放",[14,125992,125993,125994,125997],{},"缩放视图 ",[73,125995,125996],{},"ctrl+"," 可实现代码增大。",[14,125999,126000,126003],{},[73,126001,126002],{},"ctrl-"," 可实现代码减小。",[140,126005,126007],{"id":126006},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126009,126010,126011,28458],{},"VSCode 新建文件快捷键为 ",[73,126012,126013],{},"ctrl+N",[14,126015,126016,126017,126020,126021,126024],{},"保存快捷键为 ",[73,126018,126019],{},"ctrl+S","，将文本保存为 ",[73,126022,126023],{},".html"," 文件。",[140,126026,126028],{"id":126027},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126030,126031],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[140,126033,126035],{"id":126034},"_27-vscode-icons","2.7 vscode-icons",[14,126037,126038],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[140,126040,126042],{"id":126041},"_28-easy-less","2.8 Easy LESS",[14,126044,126045],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[140,126047,126049],{"id":126048},"_29-会了吧插件","2.9 会了吧插件",[14,126051,126052],{},"会了吧插件可以展示代码中英语单词的意思。",[140,126054,126056],{"id":126055},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126058,126059],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126061,126062],{},"②选定多个相同的单词:ctrl+D",[14,126064,126065],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126067,126068],{},"④全局替换某些单词:ctrl+h",[14,126070,126071],{},"⑤快速定位到某一行:ctrl+g",[14,126073,126074],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":58,"searchDepth":86,"depth":86,"links":126076},[126077,126078,126079,126080,126081,126082,126083,126084,126085,126086],{"id":125955,"depth":86,"text":125956},{"id":125962,"depth":86,"text":125963},{"id":125976,"depth":86,"text":125977},{"id":125989,"depth":86,"text":125990},{"id":126006,"depth":86,"text":126007},{"id":126027,"depth":86,"text":126028},{"id":126034,"depth":86,"text":126035},{"id":126041,"depth":86,"text":126042},{"id":126048,"depth":86,"text":126049},{"id":126055,"depth":86,"text":126056},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125947,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126093,"title":126094,"body":126095,"description":122,"extension":123,"meta":126254,"navigation":125,"path":126255,"seo":126256,"stem":126257,"__hash__":126258},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126096,"toc":126246},[126097,126100,126104,126114,126120,126126,126130,126139,126143,126148,126151,126154,126158,126161,126171,126180,126189,126198,126208,126215,126220,126225,126238],[10,126098,126094],{"id":126099},"_3-html文本与容器标签",[140,126101,126103],{"id":126102},"_31-标题标签","3.1 标题标签",[14,126105,126106,126109,126110,126113],{},[73,126107,126108],{},"\u003Ch1>","我是一级标签",[73,126111,126112],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126115,126116,126109,126118],{},[73,126117,126108],{},[73,126119,126112],{},[14,126121,123376,126122,126125],{},[73,126123,126124],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[140,126127,126129],{"id":126128},"_32-段落标签","3.2 段落标签",[14,126131,126132,126135,126136],{},[73,126133,126134],{},"\u003Cp>","....",[73,126137,126138],{},"\u003C\u002Fp>",[140,126140,126142],{"id":126141},"_33-换行标签","3.3 换行标签",[14,126144,126145],{},[73,126146,126147],{},"\u003Cbr \u002F>",[14,126149,126150],{},"具有强制换行的作用",[14,126152,126153],{},"单标签",[140,126155,126157],{"id":126156},"_34-文本格式化标签","3.4 文本格式化标签",[14,126159,126160],{},"提供粗体、斜体和下划线等效果",[14,126162,126163,126164,82609,126167,126170],{},"加粗：",[73,126165,126166],{},"\u003Cstrong>...\u003C\u002Fstrong>",[73,126168,126169],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126172,126173,126174,82609,126177,126170],{},"斜体：",[73,126175,126176],{},"\u003Cem>...\u003C\u002Fem>",[73,126178,126179],{},"\u003Ci>...\u003C\u002Fi>",[14,126181,126182,126183,82609,126186,126170],{},"删除线：",[73,126184,126185],{},"\u003Cdel>...\u003C\u002Fdel>",[73,126187,126188],{},"\u003Cs>...\u003C\u002Fs>",[14,126190,126191,126192,82609,126195,126170],{},"下划线：",[73,126193,126194],{},"\u003Cins>...\u003C\u002Fins>",[73,126196,126197],{},"\u003Cu>...\u003C\u002Fu>",[140,126199,126201,126202,18482,126205,102734],{"id":126200},"_35-div和span标签","3.5 ",[73,126203,126204],{},"\u003Cdiv>",[73,126206,126207],{},"\u003Cspan>",[14,126209,126210,101059,126212,126214],{},[73,126211,126204],{},[73,126213,126207],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126216,126217],{},[73,126218,126219],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126221,126222],{},[73,126223,126224],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126226,126227,126228,126230,126231,126233,126234,126237],{},"两者特点：①",[73,126229,126204],{}," 标签用来布局，但一行通常只放一个 ",[73,126232,126204],{},"。可以理解为一个大盒子，独占一行，在 ",[73,126235,126236],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126239,77319,126240,126242,126243,126245],{},[73,126241,126207],{}," 标签也可用于布局，一行可以放多个 ",[73,126244,126207],{},"，可理解为小盒子。",{"title":58,"searchDepth":86,"depth":86,"links":126247},[126248,126249,126250,126251,126252],{"id":126102,"depth":86,"text":126103},{"id":126128,"depth":86,"text":126129},{"id":126141,"depth":86,"text":126142},{"id":126156,"depth":86,"text":126157},{"id":126200,"depth":86,"text":126253},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126094,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126260,"title":126261,"body":126262,"description":122,"extension":123,"meta":126459,"navigation":125,"path":126460,"seo":126461,"stem":126462,"__hash__":126463},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126263,"toc":126451},[126264,126267,126271,126274,126280,126287,126293,126299,126302,126305,126308,126311,126314,126317,126320,126324,126327,126330,126333,126339,126345,126351,126358,126362,126368,126374,126377,126380,126386,126392,126398,126401,126404,126408,126411,126421,126427,126431,126440,126444,126447],[10,126265,126261],{"id":126266},"_4-html图像与链接",[140,126268,126270],{"id":126269},"_41-图像标签","4.1 图像标签",[14,126272,126273],{},"（1）标签",[14,126275,126276,126279],{},[73,126277,126278],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126281,126282,126283,126286],{},"src是",[73,126284,126285],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126288,126289,126290],{},"alt:文本，替换文本。图像不能显示的文字 ",[73,126291,126292],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126294,126295,126296],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[73,126297,126298],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126300,126301],{},"width:像素，设置图像的宽度",[14,126303,126304],{},"height:像素，设置图像的高度",[14,126306,126307],{},"border：像素，设置图像的边框粗细",[14,126309,126310],{},"（2）图像标签属性的注意点：",[14,126312,126313],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126315,126316],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126318,126319],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[140,126321,126323],{"id":126322},"_42-路径注意要点","4.2 路径注意要点：",[14,126325,126326],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126328,126329],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126331,126332],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126334,126335,126336],{},"①同一级路径：图像文件位于HTML文件同一级，如",[73,126337,126338],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126340,126341,126342],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[73,126343,126344],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126346,126347,126348],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[73,126349,126350],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126352,126353,126354,452],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[439,126355,126356],{"href":126356,"rel":126357},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23937],[140,126359,126361],{"id":126360},"_43-超链接标签","4.3 超链接标签",[14,126363,126364,126367],{},[73,126365,126366],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126369,126370,126371],{},"①语法格式：",[73,126372,126373],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126375,126376],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126378,126379],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126381,126382,126383],{},"③链接分类：外部链接：",[73,126384,126385],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126387,126388,126389],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[73,126390,126391],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126393,126394,126395],{},"空链接：如果当时没有确定链接目标时，",[73,126396,126397],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126399,126400],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126402,126403],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[140,126405,126407],{"id":126406},"_44-锚点链接","4.4 锚点链接",[14,126409,126410],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126412,126413,126414,126417,126418],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[73,126415,126416],{},"\u003Ca href=\"#two\">","第二级",[73,126419,126420],{},"\u003C\u002Fa>",[14,126422,126423,126424],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[73,126425,126426],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[140,126428,126430],{"id":126429},"_45-注释标签","4.5 注释标签",[14,126432,126433,126436,126437],{},[73,126434,126435],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[73,126438,126439],{},"ctrl+\u002F",[140,126441,126443],{"id":126442},"_46-特殊字符","4.6 特殊字符",[14,126445,126446],{},"可以实现添加多个空格",[56,126448],{"style":126449,"src":126450},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":58,"searchDepth":86,"depth":86,"links":126452},[126453,126454,126455,126456,126457,126458],{"id":126269,"depth":86,"text":126270},{"id":126322,"depth":86,"text":126323},{"id":126360,"depth":86,"text":126361},{"id":126406,"depth":86,"text":126407},{"id":126429,"depth":86,"text":126430},{"id":126442,"depth":86,"text":126443},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126261,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126465,"title":126466,"body":126467,"description":122,"extension":123,"meta":126760,"navigation":125,"path":126761,"seo":126762,"stem":126763,"__hash__":126764},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126468,"toc":126751},[126469,126472,126476,126479,126482,126485,126488,126491,126494,126497,126500,126503,126523,126529,126533,126536,126539,126542,126545,126548,126551,126555,126558,126561,126564,126567,126580,126585,126588,126591,126606,126609,126612,126615,126618,126621,126625,126628,126635,126638,126641,126644,126647,126650,126656,126659,126662,126668,126671,126674,126677,126683,126686,126689,126703,126710,126713,126716,126723,126732,126735,126738,126741,126745,126748],[10,126470,126466],{"id":126471},"_5-html表格列表与表单",[140,126473,126475],{"id":126474},"_51-表格标签","5.1 表格标签",[14,126477,126478],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126480,126481],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126483,126484],{},"②表格基本语法：",[56,126486],{"style":126449,"src":126487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126489,126490],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[56,126492],{"style":126449,"src":126493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126495,126496],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[56,126498],{"style":126449,"src":126499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126501,126502],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126504,126505,126508,126509,126511,126512,126515,126516,126518,126519,126522],{},[73,126506,126507],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[73,126510,126507],{},"内部必须拥有",[73,126513,126514],{},"\u003Ctr>","标签，一般位于第一行，",[73,126517,126507],{},"比",[73,126520,126521],{},"\u003Cth>","范围广",[14,126524,126525,126528],{},[73,126526,126527],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[140,126530,126532],{"id":126531},"_52-合并单元格","5.2 合并单元格",[14,126534,126535],{},"（1）合并单元格方式：",[14,126537,126538],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126540,126541],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126543,126544],{},"（2）目标单元格：",[14,126546,126547],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126549,126550],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[140,126552,126554],{"id":126553},"_53-列表标签","5.3 列表标签",[14,126556,126557],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126559,126560],{},"①无序列表：",[56,126562],{"style":126449,"src":126563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126565,126566],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126568,126569,126572,126573,126576,126577,126579],{},[73,126570,126571],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[73,126574,126575],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[73,126578,126571],{},"中输入其他标签或文字是不对的",[14,126581,126582,126584],{},[73,126583,126575],{},"之间相当于一个容器，可以容纳所有元素",[14,126586,126587],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126589,126590],{},"在css中去除前边的小圆点采用如下代码:",[67,126592,126596],{"className":126593,"code":126594,"language":126595,"meta":58,"style":58},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[73,126597,126598],{"__ignoreMap":58},[76,126599,126600,126603],{"class":78,"line":79},[76,126601,126602],{"class":51370},"list-style",[76,126604,126605],{"class":93},": none;\n",[14,126607,126608],{},"②有序列表：",[56,126610],{"style":126449,"src":126611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126613,126614],{},"③自定义列表：",[56,126616],{"style":126449,"src":126617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[56,126619],{"style":126449,"src":126620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[140,126622,126624],{"id":126623},"_54-表单标签","5.4 表单标签",[14,126626,126627],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126629,126630,126631,126634],{},"（1）表单域：包含单元素的区域，",[73,126632,126633],{},"\u003Cform>","标签可以实现信息的收集和传递。",[56,126636],{"style":126449,"src":126637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126639,126640],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126642,126643],{},"表单元素提交必须有name属性",[14,126645,126646],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126648,126649],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126651,77296,126652,126655],{},[73,126653,126654],{},"\u003Cinput>","输入表单元素",[56,126657],{"style":126449,"src":126658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[56,126660],{"style":126449,"src":126661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126663,126664,126665],{},"单选按钮：",[73,126666,126667],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[56,126669],{"style":126449,"src":126670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126672,126673],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[56,126675],{"style":126449,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126678,126679,126682],{},[350,126680,126681],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126684,126685],{},"②select下拉表单元素：可以节约页面控件",[56,126687],{"style":126449,"src":126688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126690,126691,13867,126693,126696,126697,126699,126700,126702],{},[350,126692,231],{},[73,126694,126695],{},"\u003Cselect>","中至少包含一对",[73,126698,102755],{},"；在",[73,126701,102755],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126704,126705,126706,126709],{},"③",[73,126707,126708],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[56,126711],{"style":126449,"src":126712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126714,126715],{},"3行20列",[140,126717,126719,126720,102734],{"id":126718},"_55-lable标签","5.5 ",[73,126721,126722],{},"\u003Clable>",[14,126724,126725,126726,126728,126729,126731],{},"它不是表单标签，但常常与表单标签搭配使用，",[73,126727,126722],{},"标签用于绑定一个表单标签，当点击",[73,126730,126722],{},"标签内的文本",[14,126733,126734],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[56,126736],{"style":126449,"src":126737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[56,126739],{"style":126449,"src":126740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[140,126742,126744],{"id":126743},"_56-实例","5.6 实例",[56,126746],{"style":126449,"src":126747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[117,126749,126750],{},"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":58,"searchDepth":86,"depth":86,"links":126752},[126753,126754,126755,126756,126757,126759],{"id":126474,"depth":86,"text":126475},{"id":126531,"depth":86,"text":126532},{"id":126553,"depth":86,"text":126554},{"id":126623,"depth":86,"text":126624},{"id":126718,"depth":86,"text":126758},"5.5 \u003Clable>标签",{"id":126743,"depth":86,"text":126744},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126466,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126766,"title":126767,"body":126768,"description":122,"extension":123,"meta":127317,"navigation":125,"path":127318,"seo":127319,"stem":127320,"__hash__":127321},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126769,"toc":127292},[126770,126773,126777,126780,126783,126787,126790,126793,126796,126799,126802,126805,126808,126812,126815,126819,126822,126825,126828,126832,126835,126838,126841,126847,126850,126853,126856,126859,126862,126865,126868,126901,126905,126908,126911,126914,126918,126921,126924,126927,126930,126933,126937,126940,126943,126946,126950,126953,126957,126960,126964,126967,126972,126976,126979,126983,126986,126989,126992,126995,127022,127025,127029,127032,127035,127040,127043,127046,127050,127053,127058,127061,127064,127067,127071,127074,127077,127080,127084,127087,127090,127093,127097,127101,127104,127144,127147,127151,127158,127161,127165,127168,127214,127218,127221,127224,127227,127255,127259,127262,127289],[10,126771,126767],{"id":126772},"_6-css语法与文本样式",[140,126774,126776],{"id":126775},"_61-css语法规范","6.1 css语法规范",[14,126778,126779],{},"由两部分组成，选择器及一条或多条声明",[56,126781],{"style":126449,"src":126782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126784,126785],{},[350,126786,231],{},[14,126788,126789],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126791,126792],{},"②属性与属性值以“键值对”的形式出现",[14,126794,126795],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126797,126798],{},"④属性和属性值之间用英文“;”分开",[56,126800],{"style":126449,"src":126801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[56,126803],{"style":126449,"src":126804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[56,126806],{"style":126449,"src":126807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[140,126809,126811],{"id":126810},"_62-css选择器","6.2 css选择器",[14,126813,126814],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[169,126816,126818],{"id":126817},"_621-标签选择器","6.2.1 标签选择器",[14,126820,126821],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126823,126824],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[56,126826],{"style":126449,"src":126827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[169,126829,126831],{"id":126830},"_622-类选择器","6.2.2 类选择器",[14,126833,126834],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126836,126837],{},"②样例",[56,126839],{"style":126449,"src":126840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126842,126843,126844,126846],{},"③ ",[350,126845,126681],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126848,126849],{},"可以理解为给这个标签起了个名字，来表示；",[14,126851,126852],{},"长名称或词组可以使用横线来为选择器命名；",[14,126854,126855],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126857,126858],{},"命名要有意义；",[56,126860],{"style":126449,"src":126861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126863,126864],{},"类选择器也可以指定特殊的元素p.center{}",[14,126866,126867],{},"p.center和.center都对",[67,126869,126871],{"className":126593,"code":126870,"language":126595,"meta":58,"style":58},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[73,126872,126873,126878,126887,126897],{"__ignoreMap":58},[76,126874,126875],{"class":78,"line":79},[76,126876,126877],{"class":82},"\u002F* 类选择器指定特殊元素 *\u002F\n",[76,126879,126880,126882,126885],{"class":78,"line":86},[76,126881,14],{"class":51370},[76,126883,126884],{"class":2035},".center",[76,126886,15644],{"class":93},[76,126888,126889,126891,126893,126895],{"class":78,"line":97},[76,126890,70596],{"class":250},[76,126892,51507],{"class":93},[76,126894,51662],{"class":250},[76,126896,1363],{"class":93},[76,126898,126899],{"class":78,"line":103},[76,126900,1637],{"class":93},[169,126902,126904],{"id":126903},"_623-多类名使用","6.2.3 多类名使用",[14,126906,126907],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[56,126909],{"style":126449,"src":126910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126912,126913],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[169,126915,126917],{"id":126916},"_624-id选择器","6.2.4 id选择器",[14,126919,126920],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126922,126923],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[56,126925],{"style":126449,"src":126926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126928,126929],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126931,126932],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[169,126934,126936],{"id":126935},"_625-通配符选择器","6.2.5 通配符选择器",[14,126938,126939],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126941,126942],{},"* {",[14,126944,126945],{},"color=\"red\"}",[169,126947,126949],{"id":126948},"_626-总结","6.2.6 总结",[56,126951],{"style":126449,"src":126952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[140,126954,126956],{"id":126955},"_63-css字体属性","6.3 css字体属性",[14,126958,126959],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[169,126961,126963],{"id":126962},"_631-字体系列","6.3.1 字体系列",[14,126965,126966],{},"font-family: '宋体';",[14,126968,126969,126971],{},[350,126970,231],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[169,126973,126975],{"id":126974},"_632-字体大小","6.3.2 字体大小",[14,126977,126978],{},"font-size: 20px",[14,126980,126981,26546],{},[350,126982,126681],{},[14,126984,126985],{},"①px（像素）大小是网页的最常用单位",[14,126987,126988],{},"②谷歌浏览器默认为16px",[14,126990,126991],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126993,126994],{},"④可以给body指定整个页面的大小：会自动引用",[67,126996,126998],{"className":126593,"code":126997,"language":126595,"meta":58,"style":58},"body {\n  font-size: 16px;\n}\n",[73,126999,127000,127006,127018],{"__ignoreMap":58},[76,127001,127002,127004],{"class":78,"line":79},[76,127003,51870],{"class":51370},[76,127005,15644],{"class":93},[76,127007,127008,127010,127012,127014,127016],{"class":78,"line":86},[76,127009,70696],{"class":250},[76,127011,51507],{"class":93},[76,127013,800],{"class":250},[76,127015,51562],{"class":89},[76,127017,1363],{"class":93},[76,127019,127020],{"class":78,"line":97},[76,127021,1637],{"class":93},[14,127023,127024],{},"⑤标题标签比较特殊，需要单独指定大小",[169,127026,127028],{"id":127027},"_633-字体粗细","6.3.3 字体粗细",[14,127030,127031],{},"font-weight: bold;",[14,127033,127034],{},"font-weight: 100；",[14,127036,127037,127039],{},[350,127038,231],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127041,127042],{},"font-weight= 400;",[14,127044,127045],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[169,127047,127049],{"id":127048},"_634-文字样式","6.3.4 文字样式",[14,127051,127052],{},"font-style: normal；",[14,127054,127055,26546],{},[350,127056,127057],{},"属性值",[14,127059,127060],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127062,127063],{},"②italic：浏览器会显示斜体的字体样式",[56,127065],{"style":126449,"src":127066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[169,127068,127070],{"id":127069},"_635-字体符合属性","6.3.5 字体符合属性",[56,127072],{"style":126449,"src":127073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[56,127075],{"style":126449,"src":127076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127078,127079],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127081,127082,26546],{},[350,127083,126681],{},[14,127085,127086],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127088,127089],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127091,127092],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[140,127094,127096],{"id":127095},"_64-css-test文本属性","6.4 css test文本属性",[169,127098,127100],{"id":127099},"_641-文本颜色","6.4.1 文本颜色",[14,127102,127103],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[67,127105,127107],{"className":126593,"code":127106,"language":126595,"meta":58,"style":58},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[73,127108,127109,127114,127120,127130,127135,127140],{"__ignoreMap":58},[76,127110,127111],{"class":78,"line":79},[76,127112,127113],{"class":82},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[76,127115,127116,127118],{"class":78,"line":86},[76,127117,14],{"class":51370},[76,127119,15644],{"class":93},[76,127121,127122,127124,127126,127128],{"class":78,"line":97},[76,127123,70975],{"class":250},[76,127125,51507],{"class":93},[76,127127,57491],{"class":250},[76,127129,1363],{"class":93},[76,127131,127132],{"class":78,"line":103},[76,127133,127134],{"class":82},"  \u002F* color: #ff0000; *\u002F\n",[76,127136,127137],{"class":78,"line":1273},[76,127138,127139],{"class":82},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[76,127141,127142],{"class":78,"line":1287},[76,127143,1637],{"class":93},[56,127145],{"style":126449,"src":127146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[169,127148,127150],{"id":127149},"_642-对齐文本","6.4.2 对齐文本",[14,127152,127153,127154,127157],{},"text-align属于用于设置元素内文本内容的 ",[350,127155,127156],{},"水平对齐"," 方式",[14,127159,127160],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[169,127162,127164],{"id":127163},"_643-装饰文本","6.4.3 装饰文本",[14,127166,127167],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[67,127169,127171],{"className":126593,"code":127170,"language":126595,"meta":58,"style":58},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[73,127172,127173,127179,127189,127193,127199,127210],{"__ignoreMap":58},[76,127174,127175,127177],{"class":78,"line":79},[76,127176,439],{"class":51370},[76,127178,15644],{"class":93},[76,127180,127181,127183,127185,127187],{"class":78,"line":86},[76,127182,70572],{"class":250},[76,127184,51507],{"class":93},[76,127186,54807],{"class":250},[76,127188,1363],{"class":93},[76,127190,127191],{"class":78,"line":97},[76,127192,1637],{"class":93},[76,127194,127195,127197],{"class":78,"line":103},[76,127196,14],{"class":51370},[76,127198,15644],{"class":93},[76,127200,127201,127203,127205,127208],{"class":78,"line":1273},[76,127202,70572],{"class":250},[76,127204,51507],{"class":93},[76,127206,127207],{"class":250},"underline",[76,127209,1363],{"class":93},[76,127211,127212],{"class":78,"line":1287},[76,127213,1637],{"class":93},[169,127215,127217],{"id":127216},"_644-文本缩进","6.4.4 文本缩进",[14,127219,127220],{},"实现文本的第一行首行缩进自己指定的距离",[14,127222,127223],{},"20px往右边走；-20px往左边走",[14,127225,127226],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[67,127228,127230],{"className":126593,"code":127229,"language":126595,"meta":58,"style":58},"p {\n  text-indent: 2em;\n}\n",[73,127231,127232,127238,127251],{"__ignoreMap":58},[76,127233,127234,127236],{"class":78,"line":79},[76,127235,14],{"class":51370},[76,127237,15644],{"class":93},[76,127239,127240,127243,127245,127247,127249],{"class":78,"line":86},[76,127241,127242],{"class":250},"  text-indent",[76,127244,51507],{"class":93},[76,127246,278],{"class":250},[76,127248,23625],{"class":89},[76,127250,1363],{"class":93},[76,127252,127253],{"class":78,"line":97},[76,127254,1637],{"class":93},[169,127256,127258],{"id":127257},"_645-行间距","6.4.5 行间距",[14,127260,127261],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[67,127263,127265],{"className":126593,"code":127264,"language":126595,"meta":58,"style":58},"p {\n  line-height: 1.6;\n}\n",[73,127266,127267,127273,127285],{"__ignoreMap":58},[76,127268,127269,127271],{"class":78,"line":79},[76,127270,14],{"class":51370},[76,127272,15644],{"class":93},[76,127274,127275,127278,127280,127283],{"class":78,"line":86},[76,127276,127277],{"class":250},"  line-height",[76,127279,51507],{"class":93},[76,127281,127282],{"class":250},"1.6",[76,127284,1363],{"class":93},[76,127286,127287],{"class":78,"line":97},[76,127288,1637],{"class":93},[117,127290,127291],{},"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":58,"searchDepth":86,"depth":86,"links":127293},[127294,127295,127303,127310],{"id":126775,"depth":86,"text":126776},{"id":126810,"depth":86,"text":126811,"children":127296},[127297,127298,127299,127300,127301,127302],{"id":126817,"depth":97,"text":126818},{"id":126830,"depth":97,"text":126831},{"id":126903,"depth":97,"text":126904},{"id":126916,"depth":97,"text":126917},{"id":126935,"depth":97,"text":126936},{"id":126948,"depth":97,"text":126949},{"id":126955,"depth":86,"text":126956,"children":127304},[127305,127306,127307,127308,127309],{"id":126962,"depth":97,"text":126963},{"id":126974,"depth":97,"text":126975},{"id":127027,"depth":97,"text":127028},{"id":127048,"depth":97,"text":127049},{"id":127069,"depth":97,"text":127070},{"id":127095,"depth":86,"text":127096,"children":127311},[127312,127313,127314,127315,127316],{"id":127099,"depth":97,"text":127100},{"id":127149,"depth":97,"text":127150},{"id":127163,"depth":97,"text":127164},{"id":127216,"depth":97,"text":127217},{"id":127257,"depth":97,"text":127258},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126767,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127323,"title":127324,"body":127325,"description":122,"extension":123,"meta":127974,"navigation":125,"path":127975,"seo":127976,"stem":127977,"__hash__":127978},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127326,"toc":127955},[127327,127330,127334,127338,127398,127402,127412,127415,127418,127422,127447,127451,127454,127457,127460,127463,127466,127470,127473,127476,127518,127521,127547,127553,127556,127560,127564,127570,127573,127576,127579,127582,127585,127588,127633,127637,127640,127643,127647,127651,127680,127683,127688,127691,127694,127697,127700,127704,127708,127711,127713,127716,127720,127723,127727,127730,127733,127736,127740,127744,127750,127760,127763,127766,127769,127772,127775,127898,127906,127914,127952],[10,127328,127324],{"id":127329},"_7-css引入方式与选择器进阶",[140,127331,127333],{"id":127332},"_71-css引入方式","7.1 css引入方式",[169,127335,127337],{"id":127336},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[67,127339,127343],{"className":127340,"code":127341,"language":127342,"meta":58,"style":58},"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",[73,127344,127345,127353,127360,127372,127385,127390],{"__ignoreMap":58},[76,127346,127347,127349,127351],{"class":78,"line":79},[76,127348,1109],{"class":93},[76,127350,117],{"class":51370},[76,127352,51377],{"class":93},[76,127354,127355,127358],{"class":78,"line":86},[76,127356,127357],{"class":51370},"  h1",[76,127359,15644],{"class":93},[76,127361,127362,127365,127367,127370],{"class":78,"line":97},[76,127363,127364],{"class":250},"    color",[76,127366,51507],{"class":93},[76,127368,127369],{"class":250},"blue",[76,127371,1363],{"class":93},[76,127373,127374,127377,127379,127381,127383],{"class":78,"line":103},[76,127375,127376],{"class":250},"    font-size",[76,127378,51507],{"class":93},[76,127380,999],{"class":250},[76,127382,51562],{"class":89},[76,127384,1363],{"class":93},[76,127386,127387],{"class":78,"line":1273},[76,127388,127389],{"class":93},"  }\n",[76,127391,127392,127394,127396],{"class":78,"line":1287},[76,127393,51855],{"class":93},[76,127395,117],{"class":51370},[76,127397,51377],{"class":93},[14,127399,127400,26546],{},[350,127401,126681],{},[14,127403,77296,127404,127407,127408,127411],{},[73,127405,127406],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[73,127409,127410],{},"\u003Chead>","标签中",[14,127413,127414],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127416,127417],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[169,127419,127421],{"id":127420},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[67,127423,127425],{"className":127340,"code":127424,"language":127342,"meta":58,"style":58},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[73,127426,127427],{"__ignoreMap":58},[76,127428,127429,127431,127433,127435,127437,127440,127443,127445],{"class":78,"line":79},[76,127430,1109],{"class":93},[76,127432,14],{"class":51370},[76,127434,62696],{"class":2035},[76,127436,247],{"class":93},[76,127438,127439],{"class":305},"\"color: red; font-size: 16px;\"",[76,127441,127442],{"class":93},">这是一个段落\u003C\u002F",[76,127444,14],{"class":51370},[76,127446,51377],{"class":93},[14,127448,127449,26546],{},[350,127450,126681],{},[14,127452,127453],{},"①style其实就是标签的属性",[14,127455,127456],{},"②在双引号中间，写法要符合css规范",[14,127458,127459],{},"③可以控制当前的标签设置样式",[14,127461,127462],{},"④书写繁琐，简单时才用",[14,127464,127465],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[169,127467,127469],{"id":127468},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127471,127472],{},"使用最多，单独建一个css文件，然后html引用",[14,127474,127475],{},"①css文件部分： style.css",[67,127477,127479],{"className":126593,"code":127478,"language":126595,"meta":58,"style":58},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[73,127480,127481,127486,127492,127502,127514],{"__ignoreMap":58},[76,127482,127483],{"class":78,"line":79},[76,127484,127485],{"class":82},"\u002F* style.css *\u002F\n",[76,127487,127488,127490],{"class":78,"line":86},[76,127489,10],{"class":51370},[76,127491,15644],{"class":93},[76,127493,127494,127496,127498,127500],{"class":78,"line":97},[76,127495,70975],{"class":250},[76,127497,51507],{"class":93},[76,127499,127369],{"class":250},[76,127501,1363],{"class":93},[76,127503,127504,127506,127508,127510,127512],{"class":78,"line":103},[76,127505,70696],{"class":250},[76,127507,51507],{"class":93},[76,127509,999],{"class":250},[76,127511,51562],{"class":89},[76,127513,1363],{"class":93},[76,127515,127516],{"class":78,"line":1273},[76,127517,1637],{"class":93},[14,127519,127520],{},"②html部分",[67,127522,127524],{"className":127340,"code":127523,"language":127342,"meta":58,"style":58},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[73,127525,127526],{"__ignoreMap":58},[76,127527,127528,127530,127532,127534,127536,127538,127540,127542,127545],{"class":78,"line":79},[76,127529,1109],{"class":93},[76,127531,69075],{"class":51370},[76,127533,69078],{"class":2035},[76,127535,247],{"class":93},[76,127537,69083],{"class":305},[76,127539,61127],{"class":2035},[76,127541,247],{"class":93},[76,127543,127544],{"class":305},"\"style.css\"",[76,127546,51377],{"class":93},[14,127548,127549,127552],{},[73,127550,127551],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127554,127555],{},"ctrl+0回到页面原来大小",[140,127557,127559],{"id":127558},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[169,127561,127563],{"id":127562},"_721-快速生成html","7.2.1 快速生成html",[14,127565,127566,127567],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[73,127568,127569],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127571,127572],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127574,127575],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127577,127578],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127580,127581],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127583,127584],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127586,127587],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[67,127589,127591],{"className":127340,"code":127590,"language":127342,"meta":58,"style":58},"\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",[73,127592,127593,127598,127603,127608,127613,127618,127623,127628],{"__ignoreMap":58},[76,127594,127595],{"class":78,"line":79},[76,127596,127597],{"class":82},"\u003C!-- Emmet 语法示例 -->\n",[76,127599,127600],{"class":78,"line":86},[76,127601,127602],{"class":82},"\u003C!-- div*3        → 生成3个div -->\n",[76,127604,127605],{"class":78,"line":97},[76,127606,127607],{"class":82},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[76,127609,127610],{"class":78,"line":103},[76,127611,127612],{"class":82},"\u003C!-- div+p        → 兄弟div和p -->\n",[76,127614,127615],{"class":78,"line":1273},[76,127616,127617],{"class":82},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[76,127619,127620],{"class":78,"line":1287},[76,127621,127622],{"class":82},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[76,127624,127625],{"class":78,"line":1293},[76,127626,127627],{"class":82},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[76,127629,127630],{"class":78,"line":1384},[76,127631,127632],{"class":82},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[169,127634,127636],{"id":127635},"_722-快速生成css","7.2.2 快速生成css",[14,127638,127639],{},"简写开头",[14,127641,127642],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[140,127644,127646],{"id":127645},"_73-css复合选择器","7.3 css复合选择器",[169,127648,127650],{"id":127649},"_731-后代选择器","7.3.1 后代选择器",[67,127652,127654],{"className":126593,"code":127653,"language":126595,"meta":58,"style":58},".parent .child {\n  color: blue;\n}\n",[73,127655,127656,127666,127676],{"__ignoreMap":58},[76,127657,127658,127661,127664],{"class":78,"line":79},[76,127659,127660],{"class":2035},".parent",[76,127662,127663],{"class":2035}," .child",[76,127665,15644],{"class":93},[76,127667,127668,127670,127672,127674],{"class":78,"line":86},[76,127669,70975],{"class":250},[76,127671,51507],{"class":93},[76,127673,127369],{"class":250},[76,127675,1363],{"class":93},[76,127677,127678],{"class":78,"line":97},[76,127679,1637],{"class":93},[14,127681,127682],{},"元素1 元素2 {样式声明}",[14,127684,127685],{},[350,127686,127687],{},"注意点:",[14,127689,127690],{},"①元素1和元素2中间用空格隔开",[14,127692,127693],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127695,127696],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127698,127699],{},"④元素1和元素2可以是任意基础选择器",[169,127701,127703],{"id":127702},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127705,127706],{},[350,127707,127687],{},[14,127709,127710],{},"①元素1和元素2中间用大于号隔开",[14,127712,127693],{},[14,127714,127715],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[169,127717,127719],{"id":127718},"_733-并集选择器","7.3.3 并集选择器",[14,127721,127722],{},"元素1，元素2 {样式声明}",[14,127724,127725],{},[350,127726,127687],{},[14,127728,127729],{},"①元素1和元素2中间用逗号隔开",[14,127731,127732],{},"②逗号可以理解为和的意思",[14,127734,127735],{},"③并集选择器通常用于集体声明",[169,127737,127739],{"id":127738},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127741,127742],{},[350,127743,127687],{},[14,127745,127746,127747,127749],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69075,127748],{},"－:visited－:hover－:active。",[14,127751,127752,127753,127756,127757,25813],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127754,127755],"hover",{}," 、 ",[127758,127759],"first-child",{},[14,127761,127762],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127764,127765],{},"link对没访问的进行设置",[14,127767,127768],{},"vistied对已访问的进行改变",[14,127770,127771],{},"hover鼠标经过就会变",[14,127773,127774],{},"active常按(点)就会变",[67,127776,127778],{"className":126593,"code":127777,"language":126595,"meta":58,"style":58},"\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",[73,127779,127780,127785,127794,127804,127814,127818,127827,127838,127842,127850,127860,127870,127874,127883,127894],{"__ignoreMap":58},[76,127781,127782],{"class":78,"line":79},[76,127783,127784],{"class":82},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[76,127786,127787,127789,127792],{"class":78,"line":86},[76,127788,439],{"class":51370},[76,127790,127791],{"class":2035},":link",[76,127793,15644],{"class":93},[76,127795,127796,127798,127800,127802],{"class":78,"line":97},[76,127797,70975],{"class":250},[76,127799,51507],{"class":93},[76,127801,62439],{"class":250},[76,127803,1363],{"class":93},[76,127805,127806,127808,127810,127812],{"class":78,"line":103},[76,127807,70572],{"class":250},[76,127809,51507],{"class":93},[76,127811,54807],{"class":250},[76,127813,1363],{"class":93},[76,127815,127816],{"class":78,"line":1273},[76,127817,1637],{"class":93},[76,127819,127820,127822,127825],{"class":78,"line":1287},[76,127821,439],{"class":51370},[76,127823,127824],{"class":2035},":visited",[76,127826,15644],{"class":93},[76,127828,127829,127831,127833,127836],{"class":78,"line":1293},[76,127830,70975],{"class":250},[76,127832,51507],{"class":93},[76,127834,127835],{"class":250},"purple",[76,127837,1363],{"class":93},[76,127839,127840],{"class":78,"line":1384},[76,127841,1637],{"class":93},[76,127843,127844,127846,127848],{"class":78,"line":1390},[76,127845,439],{"class":51370},[76,127847,61010],{"class":2035},[76,127849,15644],{"class":93},[76,127851,127852,127854,127856,127858],{"class":78,"line":1402},[76,127853,70975],{"class":250},[76,127855,51507],{"class":93},[76,127857,54959],{"class":250},[76,127859,1363],{"class":93},[76,127861,127862,127864,127866,127868],{"class":78,"line":1684},[76,127863,70572],{"class":250},[76,127865,51507],{"class":93},[76,127867,127207],{"class":250},[76,127869,1363],{"class":93},[76,127871,127872],{"class":78,"line":1689},[76,127873,1637],{"class":93},[76,127875,127876,127878,127881],{"class":78,"line":1695},[76,127877,439],{"class":51370},[76,127879,127880],{"class":2035},":active",[76,127882,15644],{"class":93},[76,127884,127885,127887,127889,127892],{"class":78,"line":1700},[76,127886,70975],{"class":250},[76,127888,51507],{"class":93},[76,127890,127891],{"class":250},"green",[76,127893,1363],{"class":93},[76,127895,127896],{"class":78,"line":1714},[76,127897,1637],{"class":93},[169,127899,127901,127902,127905],{"id":127900},"_735-伪类选择器","7.3.5 ",[127903,127904],"focus",{},"伪类选择器",[14,127907,127908,127910,127911,127913],{},[127903,127909],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[73,127912,126654],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[67,127915,127917],{"className":126593,"code":127916,"language":126595,"meta":58,"style":58},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[73,127918,127919,127927,127938,127948],{"__ignoreMap":58},[76,127920,127921,127923,127925],{"class":78,"line":79},[76,127922,53891],{"class":51370},[76,127924,61970],{"class":2035},[76,127926,15644],{"class":93},[76,127928,127929,127932,127934,127936],{"class":78,"line":86},[76,127930,127931],{"class":250},"  border-color",[76,127933,51507],{"class":93},[76,127935,54959],{"class":250},[76,127937,1363],{"class":93},[76,127939,127940,127942,127944,127946],{"class":78,"line":97},[76,127941,70868],{"class":250},[76,127943,51507],{"class":93},[76,127945,54807],{"class":250},[76,127947,1363],{"class":93},[76,127949,127950],{"class":78,"line":103},[76,127951,1637],{"class":93},[117,127953,127954],{},"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":58,"searchDepth":86,"depth":86,"links":127956},[127957,127962,127966],{"id":127332,"depth":86,"text":127333,"children":127958},[127959,127960,127961],{"id":127336,"depth":97,"text":127337},{"id":127420,"depth":97,"text":127421},{"id":127468,"depth":97,"text":127469},{"id":127558,"depth":86,"text":127559,"children":127963},[127964,127965],{"id":127562,"depth":97,"text":127563},{"id":127635,"depth":97,"text":127636},{"id":127645,"depth":86,"text":127646,"children":127967},[127968,127969,127970,127971,127972],{"id":127649,"depth":97,"text":127650},{"id":127702,"depth":97,"text":127703},{"id":127718,"depth":97,"text":127719},{"id":127738,"depth":97,"text":127739},{"id":127900,"depth":97,"text":127973},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127324,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127980,"title":127981,"body":127982,"description":122,"extension":123,"meta":129905,"navigation":125,"path":129906,"seo":129907,"stem":129908,"__hash__":129909},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127983,"toc":129879},[127984,127987,127991,128000,128004,128030,128035,128038,128041,128044,128047,128051,128054,128064,128072,128076,128111,128116,128119,128122,128125,128128,128132,128135,128144,128148,128161,128166,128169,128172,128175,128179,128182,128186,128189,128244,128247,128278,128281,128335,128339,128342,128508,128631,128634,128637,128640,128643,128647,128650,128654,128657,128660,128664,128667,128698,128725,128753,128756,128760,128786,128829,128833,128927,128930,128957,128960,128963,128966,128969,128972,128975,128978,128981,128984,128988,129045,129072,129076,129124,129128,129169,129171,129174,129177,129180,129183,129187,129279,129282,129285,129288,129292,129415,129616,129620,129624,129627,129630,129633,129637,129640,129643,129668,129671,129674,129677,129680,129683,129687,129695,129757,129760,129818,129821,129824,129827,129830,129833,129836,129839,129876],[10,127985,127981],{"id":127986},"_8-css显示模式与背景特性",[140,127988,127990],{"id":127989},"_81-css元素显示模式","8.1 css元素显示模式",[14,127992,127993,127994,127996,127997,127999],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[73,127995,126204],{},"自己占一行，比如一行可以放多个",[73,127998,126207],{},"，HTML 元素一般分为块元素和行内元素两种类型",[169,128001,128003],{"id":128002},"_811-块元素","8.1.1 块元素",[14,128005,128006,128007,128009,128010,413,128013,413,128015,413,128017,413,128020,413,128023,128026,128027,128029],{},"常见的块元素有",[73,128008,126108],{},"~",[73,128011,128012],{},"\u003Ch6>",[73,128014,126134],{},[73,128016,126204],{},[73,128018,128019],{},"\u003Cul>",[73,128021,128022],{},"\u003Col>",[73,128024,128025],{},"\u003Cli>","等，其中 ",[73,128028,126204],{}," 标签是最典型的块元素",[14,128031,128032],{},[350,128033,128034],{},"块级元素的特点：",[14,128036,128037],{},"① 比较霸道，自己独占一行。",[14,128039,128040],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128042,128043],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128045,128046],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128048,128049],{},[350,128050,231],{},[14,128052,128053],{},"①文字类的元素内不能使用块级元素",[14,128055,77319,128056,128058,128059,128061,128062],{},[73,128057,126134],{}," 标签主要用于存放文字，因此 ",[73,128060,126134],{}," 里面不能放块级元素，特别是不能放",[73,128063,126204],{},[14,128065,128066,128067,128009,128069,128071],{},"⑥同理， ",[73,128068,126108],{},[73,128070,128012],{},"等都是文字类块级标签，里面也不能放其他块级元素",[169,128073,128075],{"id":128074},"_812-行内元素","8.1.2 行内元素",[14,128077,128078,128079,413,128081,413,128084,413,128087,413,128090,413,128093,413,128096,413,128099,413,128102,413,128105,128107,128108,128110],{},"常见的行内元素有 ",[73,128080,126366],{},[73,128082,128083],{},"\u003Cstrong>",[73,128085,128086],{},"\u003Cb>",[73,128088,128089],{},"\u003Cem>",[73,128091,128092],{},"\u003Ci>",[73,128094,128095],{},"\u003Cdel>",[73,128097,128098],{},"\u003Cs>",[73,128100,128101],{},"\u003Cins>",[73,128103,128104],{},"\u003Cu>",[73,128106,126207],{}," 等，其中 ",[73,128109,126207],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128112,128113],{},[350,128114,128115],{},"特点：",[14,128117,128118],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128120,128121],{},"② 高、宽直接设置是无效的。",[14,128123,128124],{},"③ 默认宽度就是它本身内容的宽度。",[14,128126,128127],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128129,128130],{},[350,128131,231],{},[14,128133,128134],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128136,128137,128138,128140,128141,128143],{},"②特殊情况链接 ",[73,128139,126366],{}," 里面可以放块级元素，但是给 ",[73,128142,126366],{}," 转换一下块级模式最安全",[169,128145,128147],{"id":128146},"_813-行内块元素","8.1.3 行内块元素",[14,128149,128150,128151,413,128154,413,128157,128160],{},"在行内元素中有几个特殊的标签 —— ",[73,128152,128153],{},"\u003Cimg \u002F>",[73,128155,128156],{},"\u003Cinput \u002F>",[73,128158,128159],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128162,128163],{},[350,128164,128165],{},"行内块元素的特点：",[14,128167,128168],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128170,128171],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128173,128174],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[169,128176,128178],{"id":128177},"_814-总结","8.1.4 总结",[56,128180],{"style":126449,"src":128181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[169,128183,128185],{"id":128184},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128187,128188],{},"①转换为块元素：display:block;",[67,128190,128192],{"className":126593,"code":128191,"language":126595,"meta":58,"style":58},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[73,128193,128194,128199,128205,128216,128228,128240],{"__ignoreMap":58},[76,128195,128196],{"class":78,"line":79},[76,128197,128198],{"class":82},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[76,128200,128201,128203],{"class":78,"line":86},[76,128202,439],{"class":51370},[76,128204,15644],{"class":93},[76,128206,128207,128210,128212,128214],{"class":78,"line":97},[76,128208,128209],{"class":250},"  display",[76,128211,51507],{"class":93},[76,128213,60939],{"class":250},[76,128215,1363],{"class":93},[76,128217,128218,128220,128222,128224,128226],{"class":78,"line":103},[76,128219,70638],{"class":250},[76,128221,51507],{"class":93},[76,128223,512],{"class":250},[76,128225,51562],{"class":89},[76,128227,1363],{"class":93},[76,128229,128230,128232,128234,128236,128238],{"class":78,"line":1273},[76,128231,70858],{"class":250},[76,128233,51507],{"class":93},[76,128235,601],{"class":250},[76,128237,51562],{"class":89},[76,128239,1363],{"class":93},[76,128241,128242],{"class":78,"line":1287},[76,128243,1637],{"class":93},[14,128245,128246],{},"②转换为行内元素：display:inline;",[67,128248,128250],{"className":126593,"code":128249,"language":126595,"meta":58,"style":58},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[73,128251,128252,128257,128263,128274],{"__ignoreMap":58},[76,128253,128254],{"class":78,"line":79},[76,128255,128256],{"class":82},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[76,128258,128259,128261],{"class":78,"line":86},[76,128260,51681],{"class":51370},[76,128262,15644],{"class":93},[76,128264,128265,128267,128269,128272],{"class":78,"line":97},[76,128266,128209],{"class":250},[76,128268,51507],{"class":93},[76,128270,128271],{"class":250},"inline",[76,128273,1363],{"class":93},[76,128275,128276],{"class":78,"line":103},[76,128277,1637],{"class":93},[14,128279,128280],{},"③转换为行内块：display:inline-block;",[67,128282,128284],{"className":126593,"code":128283,"language":126595,"meta":58,"style":58},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[73,128285,128286,128291,128297,128307,128319,128331],{"__ignoreMap":58},[76,128287,128288],{"class":78,"line":79},[76,128289,128290],{"class":82},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[76,128292,128293,128295],{"class":78,"line":86},[76,128294,76],{"class":51370},[76,128296,15644],{"class":93},[76,128298,128299,128301,128303,128305],{"class":78,"line":97},[76,128300,128209],{"class":250},[76,128302,51507],{"class":93},[76,128304,72453],{"class":250},[76,128306,1363],{"class":93},[76,128308,128309,128311,128313,128315,128317],{"class":78,"line":103},[76,128310,70638],{"class":250},[76,128312,51507],{"class":93},[76,128314,811],{"class":250},[76,128316,51562],{"class":89},[76,128318,1363],{"class":93},[76,128320,128321,128323,128325,128327,128329],{"class":78,"line":1273},[76,128322,70858],{"class":250},[76,128324,51507],{"class":93},[76,128326,1150],{"class":250},[76,128328,51562],{"class":89},[76,128330,1363],{"class":93},[76,128332,128333],{"class":78,"line":1287},[76,128334,1637],{"class":93},[169,128336,128338],{"id":128337},"_816-小米侧边栏","8.1.6 小米侧边栏",[56,128340],{"style":126449,"src":128341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[67,128343,128345],{"className":127340,"code":128344,"language":127342,"meta":58,"style":58},"\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",[73,128346,128347,128352,128367,128386,128405,128424,128443,128462,128481,128500],{"__ignoreMap":58},[76,128348,128349],{"class":78,"line":79},[76,128350,128351],{"class":82},"\u003C!-- 小米侧边栏案例 -->\n",[76,128353,128354,128356,128358,128360,128362,128365],{"class":78,"line":86},[76,128355,1109],{"class":93},[76,128357,51681],{"class":51370},[76,128359,53556],{"class":2035},[76,128361,247],{"class":93},[76,128363,128364],{"class":305},"\"sidebar\"",[76,128366,51377],{"class":93},[76,128368,128369,128371,128373,128375,128377,128379,128382,128384],{"class":78,"line":97},[76,128370,52214],{"class":93},[76,128372,439],{"class":51370},[76,128374,61127],{"class":2035},[76,128376,247],{"class":93},[76,128378,61132],{"class":305},[76,128380,128381],{"class":93},">手机 电话卡\u003C\u002F",[76,128383,439],{"class":51370},[76,128385,51377],{"class":93},[76,128387,128388,128390,128392,128394,128396,128398,128401,128403],{"class":78,"line":103},[76,128389,52214],{"class":93},[76,128391,439],{"class":51370},[76,128393,61127],{"class":2035},[76,128395,247],{"class":93},[76,128397,61132],{"class":305},[76,128399,128400],{"class":93},">电视 盒子\u003C\u002F",[76,128402,439],{"class":51370},[76,128404,51377],{"class":93},[76,128406,128407,128409,128411,128413,128415,128417,128420,128422],{"class":78,"line":1273},[76,128408,52214],{"class":93},[76,128410,439],{"class":51370},[76,128412,61127],{"class":2035},[76,128414,247],{"class":93},[76,128416,61132],{"class":305},[76,128418,128419],{"class":93},">笔记本 平板\u003C\u002F",[76,128421,439],{"class":51370},[76,128423,51377],{"class":93},[76,128425,128426,128428,128430,128432,128434,128436,128439,128441],{"class":78,"line":1287},[76,128427,52214],{"class":93},[76,128429,439],{"class":51370},[76,128431,61127],{"class":2035},[76,128433,247],{"class":93},[76,128435,61132],{"class":305},[76,128437,128438],{"class":93},">出行 穿戴\u003C\u002F",[76,128440,439],{"class":51370},[76,128442,51377],{"class":93},[76,128444,128445,128447,128449,128451,128453,128455,128458,128460],{"class":78,"line":1293},[76,128446,52214],{"class":93},[76,128448,439],{"class":51370},[76,128450,61127],{"class":2035},[76,128452,247],{"class":93},[76,128454,61132],{"class":305},[76,128456,128457],{"class":93},">智能 路由器\u003C\u002F",[76,128459,439],{"class":51370},[76,128461,51377],{"class":93},[76,128463,128464,128466,128468,128470,128472,128474,128477,128479],{"class":78,"line":1384},[76,128465,52214],{"class":93},[76,128467,439],{"class":51370},[76,128469,61127],{"class":2035},[76,128471,247],{"class":93},[76,128473,61132],{"class":305},[76,128475,128476],{"class":93},">健康 儿童\u003C\u002F",[76,128478,439],{"class":51370},[76,128480,51377],{"class":93},[76,128482,128483,128485,128487,128489,128491,128493,128496,128498],{"class":78,"line":1390},[76,128484,52214],{"class":93},[76,128486,439],{"class":51370},[76,128488,61127],{"class":2035},[76,128490,247],{"class":93},[76,128492,61132],{"class":305},[76,128494,128495],{"class":93},">耳机 音响\u003C\u002F",[76,128497,439],{"class":51370},[76,128499,51377],{"class":93},[76,128501,128502,128504,128506],{"class":78,"line":1402},[76,128503,51855],{"class":93},[76,128505,51681],{"class":51370},[76,128507,51377],{"class":93},[67,128509,128511],{"className":126593,"code":128510,"language":126595,"meta":58,"style":58},".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",[73,128512,128513,128522,128532,128545,128557,128569,128581,128591,128602,128606,128616,128627],{"__ignoreMap":58},[76,128514,128515,128518,128520],{"class":78,"line":79},[76,128516,128517],{"class":2035},".sidebar",[76,128519,1471],{"class":51370},[76,128521,15644],{"class":93},[76,128523,128524,128526,128528,128530],{"class":78,"line":86},[76,128525,128209],{"class":250},[76,128527,51507],{"class":93},[76,128529,60939],{"class":250},[76,128531,1363],{"class":93},[76,128533,128534,128536,128538,128541,128543],{"class":78,"line":97},[76,128535,70638],{"class":250},[76,128537,51507],{"class":93},[76,128539,128540],{"class":250},"234",[76,128542,51562],{"class":89},[76,128544,1363],{"class":93},[76,128546,128547,128549,128551,128553,128555],{"class":78,"line":103},[76,128548,70858],{"class":250},[76,128550,51507],{"class":93},[76,128552,652],{"class":250},[76,128554,51562],{"class":89},[76,128556,1363],{"class":93},[76,128558,128559,128561,128563,128565,128567],{"class":78,"line":1273},[76,128560,127277],{"class":250},[76,128562,51507],{"class":93},[76,128564,652],{"class":250},[76,128566,51562],{"class":89},[76,128568,1363],{"class":93},[76,128570,128571,128573,128575,128577,128579],{"class":78,"line":1287},[76,128572,70893],{"class":250},[76,128574,51507],{"class":93},[76,128576,1150],{"class":250},[76,128578,51562],{"class":89},[76,128580,1363],{"class":93},[76,128582,128583,128585,128587,128589],{"class":78,"line":1293},[76,128584,70975],{"class":250},[76,128586,51507],{"class":93},[76,128588,60912],{"class":250},[76,128590,1363],{"class":93},[76,128592,128593,128595,128597,128600],{"class":78,"line":1384},[76,128594,70948],{"class":250},[76,128596,51507],{"class":93},[76,128598,128599],{"class":250},"#55585a",[76,128601,1363],{"class":93},[76,128603,128604],{"class":78,"line":1390},[76,128605,1637],{"class":93},[76,128607,128608,128610,128612,128614],{"class":78,"line":1402},[76,128609,128517],{"class":2035},[76,128611,1471],{"class":51370},[76,128613,61010],{"class":2035},[76,128615,15644],{"class":93},[76,128617,128618,128620,128622,128625],{"class":78,"line":1684},[76,128619,70948],{"class":250},[76,128621,51507],{"class":93},[76,128623,128624],{"class":250},"#ff6700",[76,128626,1363],{"class":93},[76,128628,128629],{"class":78,"line":1689},[76,128630,1637],{"class":93},[56,128632],{"style":126449,"src":128633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128635,128636],{},"行高=盒子高度：实现文字的垂直居中",[14,128638,128639],{},"原理讲解：",[56,128641],{"style":126449,"src":128642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[140,128644,128646],{"id":128645},"_82-css背景","8.2 css背景",[14,128648,128649],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[169,128651,128653],{"id":128652},"_821-背景颜色","8.2.1 背景颜色",[14,128655,128656],{},"background-color:颜色值;",[14,128658,128659],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[169,128661,128663],{"id":128662},"_822-背景图片","8.2.2 背景图片",[14,128665,128666],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[67,128668,128670],{"className":126593,"code":128669,"language":126595,"meta":58,"style":58},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[73,128671,128672,128678,128694],{"__ignoreMap":58},[76,128673,128674,128676],{"class":78,"line":79},[76,128675,51681],{"class":51370},[76,128677,15644],{"class":93},[76,128679,128680,128683,128685,128687,128689,128692],{"class":78,"line":86},[76,128681,128682],{"class":250},"  background-image",[76,128684,51507],{"class":93},[76,128686,61796],{"class":250},[76,128688,202],{"class":93},[76,128690,128691],{"class":5288},"images\u002Fbg.png",[76,128693,2791],{"class":93},[76,128695,128696],{"class":78,"line":97},[76,128697,1637],{"class":93},[338,128699,128700,128709],{},[341,128701,128702],{},[344,128703,128704,128707],{},[347,128705,128706],{"align":23808},"参数值",[347,128708,102737],{"align":23808},[385,128710,128711,128718],{},[344,128712,128713,128715],{},[390,128714,54807],{"align":23808},[390,128716,128717],{"align":23808},"无背景图（默认的）",[344,128719,128720,128722],{},[390,128721,61796],{"align":23808},[390,128723,128724],{"align":23808},"使用绝对或相对地址指定背景图像",[67,128726,128727],{"className":126593,"code":128669,"language":126595,"meta":58,"style":58},[73,128728,128729,128735,128749],{"__ignoreMap":58},[76,128730,128731,128733],{"class":78,"line":79},[76,128732,51681],{"class":51370},[76,128734,15644],{"class":93},[76,128736,128737,128739,128741,128743,128745,128747],{"class":78,"line":86},[76,128738,128682],{"class":250},[76,128740,51507],{"class":93},[76,128742,61796],{"class":250},[76,128744,202],{"class":93},[76,128746,128691],{"class":5288},[76,128748,2791],{"class":93},[76,128750,128751],{"class":78,"line":97},[76,128752,1637],{"class":93},[14,128754,128755],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[169,128757,128759],{"id":128758},"_823-背景平铺","8.2.3 背景平铺",[67,128761,128763],{"className":126593,"code":128762,"language":126595,"meta":58,"style":58},"div {\n  background-repeat: no-repeat;\n}\n",[73,128764,128765,128771,128782],{"__ignoreMap":58},[76,128766,128767,128769],{"class":78,"line":79},[76,128768,51681],{"class":51370},[76,128770,15644],{"class":93},[76,128772,128773,128776,128778,128780],{"class":78,"line":86},[76,128774,128775],{"class":250},"  background-repeat",[76,128777,51507],{"class":93},[76,128779,61806],{"class":250},[76,128781,1363],{"class":93},[76,128783,128784],{"class":78,"line":97},[76,128785,1637],{"class":93},[338,128787,128788,128796],{},[341,128789,128790],{},[344,128791,128792,128794],{},[347,128793,128706],{"align":23808},[347,128795,102737],{"align":23808},[385,128797,128798,128806,128813,128821],{},[344,128799,128800,128803],{},[390,128801,128802],{"align":23808},"repeat",[390,128804,128805],{"align":23808},"背景图像在纵向和横向上平铺（默认的）",[344,128807,128808,128810],{},[390,128809,61806],{"align":23808},[390,128811,128812],{"align":23808},"背景图像不平铺",[344,128814,128815,128818],{},[390,128816,128817],{"align":23808},"repeat-x",[390,128819,128820],{"align":23808},"背景图像在横向上平铺",[344,128822,128823,128826],{},[390,128824,128825],{"align":23808},"repeat-y",[390,128827,128828],{"align":23808},"背景图像在纵向平铺",[169,128830,128832],{"id":128831},"_824-背景图片位置","8.2.4 背景图片位置",[67,128834,128836],{"className":126593,"code":128835,"language":126595,"meta":58,"style":58},"\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",[73,128837,128838,128843,128849,128863,128867,128872,128878,128894,128898,128903,128909,128923],{"__ignoreMap":58},[76,128839,128840],{"class":78,"line":79},[76,128841,128842],{"class":82},"\u002F* 方位名词 *\u002F\n",[76,128844,128845,128847],{"class":78,"line":86},[76,128846,51681],{"class":51370},[76,128848,15644],{"class":93},[76,128850,128851,128854,128856,128858,128861],{"class":78,"line":97},[76,128852,128853],{"class":250},"  background-position",[76,128855,51507],{"class":93},[76,128857,51662],{"class":250},[76,128859,128860],{"class":250}," top",[76,128862,1363],{"class":93},[76,128864,128865],{"class":78,"line":103},[76,128866,1637],{"class":93},[76,128868,128869],{"class":78,"line":1273},[76,128870,128871],{"class":82},"\u002F* 精确单位 *\u002F\n",[76,128873,128874,128876],{"class":78,"line":1287},[76,128875,51681],{"class":51370},[76,128877,15644],{"class":93},[76,128879,128880,128882,128884,128886,128888,128890,128892],{"class":78,"line":1293},[76,128881,128853],{"class":250},[76,128883,51507],{"class":93},[76,128885,899],{"class":250},[76,128887,51562],{"class":89},[76,128889,57574],{"class":250},[76,128891,51562],{"class":89},[76,128893,1363],{"class":93},[76,128895,128896],{"class":78,"line":1384},[76,128897,1637],{"class":93},[76,128899,128900],{"class":78,"line":1390},[76,128901,128902],{"class":82},"\u002F* 混合单位 *\u002F\n",[76,128904,128905,128907],{"class":78,"line":1402},[76,128906,51681],{"class":51370},[76,128908,15644],{"class":93},[76,128910,128911,128913,128915,128917,128919,128921],{"class":78,"line":1684},[76,128912,128853],{"class":250},[76,128914,51507],{"class":93},[76,128916,899],{"class":250},[76,128918,51562],{"class":89},[76,128920,17216],{"class":250},[76,128922,1363],{"class":93},[76,128924,128925],{"class":78,"line":1689},[76,128926,1637],{"class":93},[14,128928,128929],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[338,128931,128932,128940],{},[341,128933,128934],{},[344,128935,128936,128938],{},[347,128937,128706],{"align":23808},[347,128939,25942],{"align":23808},[385,128941,128942,128949],{},[344,128943,128944,128946],{},[390,128945,52038],{"align":23808},[390,128947,128948],{"align":23808},"百分数|由浮点数和单位标识符组成的长度值",[344,128950,128951,128954],{},[390,128952,128953],{"align":23808},"position",[390,128955,128956],{"align":23808},"top|center|bottom|left|center|right 方位名词",[14,128958,128959],{},"其他说明：",[14,128961,128962],{},"①参数是方位名词",[14,128964,128965],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128967,128968],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128970,128971],{},"②参数是精确单位",[14,128973,128974],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128976,128977],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128979,128980],{},"③参数是混合单位",[14,128982,128983],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[169,128985,128987],{"id":128986},"_825-背景图片固定","8.2.5 背景图片固定",[67,128989,128991],{"className":126593,"code":128990,"language":126595,"meta":58,"style":58},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[73,128992,128993,128998,129004,129016,129020,129025,129031,129041],{"__ignoreMap":58},[76,128994,128995],{"class":78,"line":79},[76,128996,128997],{"class":82},"\u002F* 背景滚动（默认） *\u002F\n",[76,128999,129000,129002],{"class":78,"line":86},[76,129001,51681],{"class":51370},[76,129003,15644],{"class":93},[76,129005,129006,129009,129011,129014],{"class":78,"line":97},[76,129007,129008],{"class":250},"  background-attachment",[76,129010,51507],{"class":93},[76,129012,129013],{"class":250},"scroll",[76,129015,1363],{"class":93},[76,129017,129018],{"class":78,"line":103},[76,129019,1637],{"class":93},[76,129021,129022],{"class":78,"line":1273},[76,129023,129024],{"class":82},"\u002F* 背景固定 *\u002F\n",[76,129026,129027,129029],{"class":78,"line":1287},[76,129028,51681],{"class":51370},[76,129030,15644],{"class":93},[76,129032,129033,129035,129037,129039],{"class":78,"line":1293},[76,129034,129008],{"class":250},[76,129036,51507],{"class":93},[76,129038,86303],{"class":250},[76,129040,1363],{"class":93},[76,129042,129043],{"class":78,"line":1384},[76,129044,1637],{"class":93},[338,129046,129047,129056],{},[341,129048,129049],{},[344,129050,129051,129054],{},[347,129052,129053],{"align":23808},"参数",[347,129055,102737],{"align":23808},[385,129057,129058,129065],{},[344,129059,129060,129062],{},[390,129061,129013],{"align":23808},[390,129063,129064],{"align":23808},"背景图像是随对象内容滚动",[344,129066,129067,129069],{},[390,129068,86303],{"align":23808},[390,129070,129071],{"align":23808},"背景图像固定",[169,129073,129075],{"id":129074},"_826-背景样式合写","8.2.6 背景样式合写",[67,129077,129079],{"className":126593,"code":129078,"language":126595,"meta":58,"style":58},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[73,129080,129081,129086,129092,129120],{"__ignoreMap":58},[76,129082,129083],{"class":78,"line":79},[76,129084,129085],{"class":82},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[76,129087,129088,129090],{"class":78,"line":86},[76,129089,51681],{"class":51370},[76,129091,15644],{"class":93},[76,129093,129094,129096,129098,129100,129103,129105,129107,129109,129111,129114,129116,129118],{"class":78,"line":97},[76,129095,70681],{"class":250},[76,129097,51507],{"class":93},[76,129099,60912],{"class":250},[76,129101,129102],{"class":250}," url",[76,129104,202],{"class":93},[76,129106,128691],{"class":5288},[76,129108,13786],{"class":93},[76,129110,61806],{"class":250},[76,129112,129113],{"class":250}," fixed",[76,129115,17216],{"class":250},[76,129117,128860],{"class":250},[76,129119,1363],{"class":93},[76,129121,129122],{"class":78,"line":103},[76,129123,1637],{"class":93},[169,129125,129127],{"id":129126},"_827-背景色半透明","8.2.7 背景色半透明",[67,129129,129131],{"className":126593,"code":129130,"language":126595,"meta":58,"style":58},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[73,129132,129133,129139,129165],{"__ignoreMap":58},[76,129134,129135,129137],{"class":78,"line":79},[76,129136,51681],{"class":51370},[76,129138,15644],{"class":93},[76,129140,129141,129143,129145,129147,129149,129151,129153,129155,129157,129159,129161,129163],{"class":78,"line":86},[76,129142,70681],{"class":250},[76,129144,51507],{"class":93},[76,129146,55180],{"class":250},[76,129148,202],{"class":93},[76,129150,392],{"class":250},[76,129152,12507],{"class":93},[76,129154,392],{"class":250},[76,129156,12507],{"class":93},[76,129158,392],{"class":250},[76,129160,12507],{"class":93},[76,129162,100562],{"class":250},[76,129164,2791],{"class":93},[76,129166,129167],{"class":78,"line":97},[76,129168,1637],{"class":93},[14,129170,99437],{},[14,129172,129173],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129175,129176],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129178,129179],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129181,129182],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[169,129184,129186],{"id":129185},"_828-总结","8.2.8 总结",[338,129188,129189,129200],{},[341,129190,129191],{},[344,129192,129193,129196,129198],{},[347,129194,129195],{"align":23808},"属性",[347,129197,102737],{"align":23808},[347,129199,353],{"align":23808},[385,129201,129202,129213,129224,129235,129246,129257,129268],{},[344,129203,129204,129207,129210],{},[390,129205,129206],{"align":23808},"background-color",[390,129208,129209],{"align":23808},"背景颜色",[390,129211,129212],{"align":23808},"预定义的颜色值\u002F十六进制\u002FRGB代码",[344,129214,129215,129218,129221],{},[390,129216,129217],{"align":23808},"background-image",[390,129219,129220],{"align":23808},"背景图片",[390,129222,129223],{"align":23808},"url(图片路径)",[344,129225,129226,129229,129232],{},[390,129227,129228],{"align":23808},"background-repeat",[390,129230,129231],{"align":23808},"是否平铺",[390,129233,129234],{"align":23808},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[344,129236,129237,129240,129243],{},[390,129238,129239],{"align":23808},"background-position",[390,129241,129242],{"align":23808},"背景位置",[390,129244,129245],{"align":23808},"length\u002Fposition 分别是x和y坐标",[344,129247,129248,129251,129254],{},[390,129249,129250],{"align":23808},"background-attachment",[390,129252,129253],{"align":23808},"背景附着",[390,129255,129256],{"align":23808},"scroll(背景滚动) \u002Ffixed (背景固定)",[344,129258,129259,129262,129265],{},[390,129260,129261],{"align":23808},"背景简写",[390,129263,129264],{"align":23808},"书写更简单",[390,129266,129267],{"align":23808},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[344,129269,129270,129273,129276],{},[390,129271,129272],{"align":23808},"背景半透明",[390,129274,129275],{"align":23808},"背景颜色半透明",[390,129277,129278],{"align":23808},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129280,129281],{},"颜色渐变：",[56,129283],{"style":126449,"src":129284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[56,129286],{"style":126449,"src":129287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[169,129289,129291],{"id":129290},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[67,129293,129295],{"className":127340,"code":129294,"language":127342,"meta":58,"style":58},"\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",[73,129296,129297,129312,129331,129350,129369,129388,129407],{"__ignoreMap":58},[76,129298,129299,129301,129303,129305,129307,129310],{"class":78,"line":79},[76,129300,1109],{"class":93},[76,129302,51681],{"class":51370},[76,129304,53556],{"class":2035},[76,129306,247],{"class":93},[76,129308,129309],{"class":305},"\"nav\"",[76,129311,51377],{"class":93},[76,129313,129314,129316,129318,129320,129322,129324,129327,129329],{"class":78,"line":86},[76,129315,52214],{"class":93},[76,129317,439],{"class":51370},[76,129319,61127],{"class":2035},[76,129321,247],{"class":93},[76,129323,61132],{"class":305},[76,129325,129326],{"class":93},">五彩导航1\u003C\u002F",[76,129328,439],{"class":51370},[76,129330,51377],{"class":93},[76,129332,129333,129335,129337,129339,129341,129343,129346,129348],{"class":78,"line":97},[76,129334,52214],{"class":93},[76,129336,439],{"class":51370},[76,129338,61127],{"class":2035},[76,129340,247],{"class":93},[76,129342,61132],{"class":305},[76,129344,129345],{"class":93},">五彩导航2\u003C\u002F",[76,129347,439],{"class":51370},[76,129349,51377],{"class":93},[76,129351,129352,129354,129356,129358,129360,129362,129365,129367],{"class":78,"line":103},[76,129353,52214],{"class":93},[76,129355,439],{"class":51370},[76,129357,61127],{"class":2035},[76,129359,247],{"class":93},[76,129361,61132],{"class":305},[76,129363,129364],{"class":93},">五彩导航3\u003C\u002F",[76,129366,439],{"class":51370},[76,129368,51377],{"class":93},[76,129370,129371,129373,129375,129377,129379,129381,129384,129386],{"class":78,"line":1273},[76,129372,52214],{"class":93},[76,129374,439],{"class":51370},[76,129376,61127],{"class":2035},[76,129378,247],{"class":93},[76,129380,61132],{"class":305},[76,129382,129383],{"class":93},">五彩导航4\u003C\u002F",[76,129385,439],{"class":51370},[76,129387,51377],{"class":93},[76,129389,129390,129392,129394,129396,129398,129400,129403,129405],{"class":78,"line":1287},[76,129391,52214],{"class":93},[76,129393,439],{"class":51370},[76,129395,61127],{"class":2035},[76,129397,247],{"class":93},[76,129399,61132],{"class":305},[76,129401,129402],{"class":93},">五彩导航5\u003C\u002F",[76,129404,439],{"class":51370},[76,129406,51377],{"class":93},[76,129408,129409,129411,129413],{"class":78,"line":1293},[76,129410,51855],{"class":93},[76,129412,51681],{"class":51370},[76,129414,51377],{"class":93},[67,129416,129418],{"className":126593,"code":129417,"language":126595,"meta":58,"style":58},".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",[73,129419,129420,129429,129439,129451,129463,129473,129485,129495,129499,129524,129547,129570,129593],{"__ignoreMap":58},[76,129421,129422,129425,129427],{"class":78,"line":79},[76,129423,129424],{"class":2035},".nav",[76,129426,1471],{"class":51370},[76,129428,15644],{"class":93},[76,129430,129431,129433,129435,129437],{"class":78,"line":86},[76,129432,128209],{"class":250},[76,129434,51507],{"class":93},[76,129436,72453],{"class":250},[76,129438,1363],{"class":93},[76,129440,129441,129443,129445,129447,129449],{"class":78,"line":97},[76,129442,70638],{"class":250},[76,129444,51507],{"class":93},[76,129446,1016],{"class":250},[76,129448,51562],{"class":89},[76,129450,1363],{"class":93},[76,129452,129453,129455,129457,129459,129461],{"class":78,"line":103},[76,129454,70858],{"class":250},[76,129456,51507],{"class":93},[76,129458,1055],{"class":250},[76,129460,51562],{"class":89},[76,129462,1363],{"class":93},[76,129464,129465,129467,129469,129471],{"class":78,"line":1273},[76,129466,70596],{"class":250},[76,129468,51507],{"class":93},[76,129470,51662],{"class":250},[76,129472,1363],{"class":93},[76,129474,129475,129477,129479,129481,129483],{"class":78,"line":1287},[76,129476,127277],{"class":250},[76,129478,51507],{"class":93},[76,129480,1055],{"class":250},[76,129482,51562],{"class":89},[76,129484,1363],{"class":93},[76,129486,129487,129489,129491,129493],{"class":78,"line":1293},[76,129488,70975],{"class":250},[76,129490,51507],{"class":93},[76,129492,60912],{"class":250},[76,129494,1363],{"class":93},[76,129496,129497],{"class":78,"line":1384},[76,129498,1637],{"class":93},[76,129500,129501,129503,129505,129508,129510,129512,129515,129517,129519,129521],{"class":78,"line":1390},[76,129502,129424],{"class":2035},[76,129504,1471],{"class":51370},[76,129506,129507],{"class":2035},":nth-child",[76,129509,202],{"class":93},[76,129511,418],{"class":250},[76,129513,129514],{"class":93},") { ",[76,129516,129206],{"class":250},[76,129518,51507],{"class":93},[76,129520,128624],{"class":250},[76,129522,129523],{"class":93},"; }\n",[76,129525,129526,129528,129530,129532,129534,129536,129538,129540,129542,129545],{"class":78,"line":1402},[76,129527,129424],{"class":2035},[76,129529,1471],{"class":51370},[76,129531,129507],{"class":2035},[76,129533,202],{"class":93},[76,129535,278],{"class":250},[76,129537,129514],{"class":93},[76,129539,129206],{"class":250},[76,129541,51507],{"class":93},[76,129543,129544],{"class":250},"#ff0000",[76,129546,129523],{"class":93},[76,129548,129549,129551,129553,129555,129557,129559,129561,129563,129565,129568],{"class":78,"line":1684},[76,129550,129424],{"class":2035},[76,129552,1471],{"class":51370},[76,129554,129507],{"class":2035},[76,129556,202],{"class":93},[76,129558,272],{"class":250},[76,129560,129514],{"class":93},[76,129562,129206],{"class":250},[76,129564,51507],{"class":93},[76,129566,129567],{"class":250},"#00a4ff",[76,129569,129523],{"class":93},[76,129571,129572,129574,129576,129578,129580,129582,129584,129586,129588,129591],{"class":78,"line":1689},[76,129573,129424],{"class":2035},[76,129575,1471],{"class":51370},[76,129577,129507],{"class":2035},[76,129579,202],{"class":93},[76,129581,494],{"class":250},[76,129583,129514],{"class":93},[76,129585,129206],{"class":250},[76,129587,51507],{"class":93},[76,129589,129590],{"class":250},"#ff00ff",[76,129592,129523],{"class":93},[76,129594,129595,129597,129599,129601,129603,129605,129607,129609,129611,129614],{"class":78,"line":1695},[76,129596,129424],{"class":2035},[76,129598,1471],{"class":51370},[76,129600,129507],{"class":2035},[76,129602,202],{"class":93},[76,129604,520],{"class":250},[76,129606,129514],{"class":93},[76,129608,129206],{"class":250},[76,129610,51507],{"class":93},[76,129612,129613],{"class":250},"#00ff00",[76,129615,129523],{"class":93},[140,129617,129619],{"id":129618},"_83-css三大特性","8.3 css三大特性",[169,129621,129623],{"id":129622},"_831-层叠性","8.3.1 层叠性",[14,129625,129626],{},"为了解决样式冲突问题",[14,129628,129629],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129631,129632],{},"   ②样式不冲突，不会层叠",[169,129634,129636],{"id":129635},"_832-继承性","8.3.2 继承性",[14,129638,129639],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129641,129642],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[67,129644,129646],{"className":126593,"code":129645,"language":126595,"meta":58,"style":58},"p {\n  color: #333;\n}\n",[73,129647,129648,129654,129664],{"__ignoreMap":58},[76,129649,129650,129652],{"class":78,"line":79},[76,129651,14],{"class":51370},[76,129653,15644],{"class":93},[76,129655,129656,129658,129660,129662],{"class":78,"line":86},[76,129657,70975],{"class":250},[76,129659,51507],{"class":93},[76,129661,62439],{"class":250},[76,129663,1363],{"class":93},[76,129665,129666],{"class":78,"line":97},[76,129667,1637],{"class":93},[56,129669],{"style":126449,"src":129670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129672,129673],{},"解释：①行高可以跟单位也可以不跟单位",[14,129675,129676],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129678,129679],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129681,129682],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[169,129684,129686],{"id":129685},"_833-优先级","8.3.3 优先级",[152,129688,129689,129692],{},[155,129690,129691],{},"选择器相同，则执行层叠性",[155,129693,129694],{},"选择器不同，则根据选择器权重执行",[338,129696,129697,129707],{},[341,129698,129699],{},[344,129700,129701,129704],{},[347,129702,129703],{"align":23808},"选择器",[347,129705,129706],{"align":23808},"选择器权重",[385,129708,129709,129717,129725,129733,129741,129749],{},[344,129710,129711,129714],{},[390,129712,129713],{"align":23808},"继承 或者*",[390,129715,129716],{"align":23808},"0，0，0，0",[344,129718,129719,129722],{},[390,129720,129721],{"align":23808},"标签选择器",[390,129723,129724],{"align":23808},"0，0，0，1",[344,129726,129727,129730],{},[390,129728,129729],{"align":23808},"类选择器，伪类选择器",[390,129731,129732],{"align":23808},"0，0，1，0",[344,129734,129735,129738],{},[390,129736,129737],{"align":23808},"ID选择器",[390,129739,129740],{"align":23808},"0，1，0，0",[344,129742,129743,129746],{},[390,129744,129745],{"align":23808},"行内样式",[390,129747,129748],{"align":23808},"1，0，0，0",[344,129750,129751,129754],{},[390,129752,129753],{"align":23808},"！important",[390,129755,129756],{"align":23808},"无穷大",[14,129758,129759],{},"! important用法：",[67,129761,129763],{"className":126593,"code":129762,"language":126595,"meta":58,"style":58},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[73,129764,129765,129770,129776,129789,129793,129798,129804,129814],{"__ignoreMap":58},[76,129766,129767],{"class":78,"line":79},[76,129768,129769],{"class":82},"\u002F* !important 拥有最高优先级 *\u002F\n",[76,129771,129772,129774],{"class":78,"line":86},[76,129773,51681],{"class":51370},[76,129775,15644],{"class":93},[76,129777,129778,129780,129782,129784,129787],{"class":78,"line":97},[76,129779,70975],{"class":250},[76,129781,51507],{"class":93},[76,129783,51715],{"class":250},[76,129785,129786],{"class":89}," !important",[76,129788,1363],{"class":93},[76,129790,129791],{"class":78,"line":103},[76,129792,1637],{"class":93},[76,129794,129795],{"class":78,"line":1273},[76,129796,129797],{"class":82},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[76,129799,129800,129802],{"class":78,"line":1287},[76,129801,51681],{"class":51370},[76,129803,15644],{"class":93},[76,129805,129806,129808,129810,129812],{"class":78,"line":1293},[76,129807,70975],{"class":250},[76,129809,51507],{"class":93},[76,129811,57491],{"class":250},[76,129813,1363],{"class":93},[76,129815,129816],{"class":78,"line":1384},[76,129817,1637],{"class":93},[14,129819,129820],{},"优先级注意点：",[14,129822,129823],{},"①权重是有4组数字组成,但是不会有进位",[14,129825,129826],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129828,129829],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129831,129832],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129834,129835],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129837,129838],{},"⑥复合选择器",[338,129840,129841,129851],{},[341,129842,129843],{},[344,129844,129845,129848],{},[347,129846,129847],{"align":23808},"div ul li",[347,129849,129850],{"align":23808},"0,0,0,3",[385,129852,129853,129861,129869],{},[344,129854,129855,129858],{},[390,129856,129857],{"align":23808},".nav ul li",[390,129859,129860],{"align":23808},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[344,129862,129863,129866],{},[390,129864,129865],{"align":23808},"a:hover",[390,129867,129868],{"align":23808},"0,0,1,1",[344,129870,129871,129874],{},[390,129872,129873],{"align":23808},".nav a",[390,129875,129868],{"align":23808},[117,129877,129878],{},"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":58,"searchDepth":86,"depth":86,"links":129880},[129881,129889,129900],{"id":127989,"depth":86,"text":127990,"children":129882},[129883,129884,129885,129886,129887,129888],{"id":128002,"depth":97,"text":128003},{"id":128074,"depth":97,"text":128075},{"id":128146,"depth":97,"text":128147},{"id":128177,"depth":97,"text":128178},{"id":128184,"depth":97,"text":128185},{"id":128337,"depth":97,"text":128338},{"id":128645,"depth":86,"text":128646,"children":129890},[129891,129892,129893,129894,129895,129896,129897,129898,129899],{"id":128652,"depth":97,"text":128653},{"id":128662,"depth":97,"text":128663},{"id":128758,"depth":97,"text":128759},{"id":128831,"depth":97,"text":128832},{"id":128986,"depth":97,"text":128987},{"id":129074,"depth":97,"text":129075},{"id":129126,"depth":97,"text":129127},{"id":129185,"depth":97,"text":129186},{"id":129290,"depth":97,"text":129291},{"id":129618,"depth":86,"text":129619,"children":129901},[129902,129903,129904],{"id":129622,"depth":97,"text":129623},{"id":129635,"depth":97,"text":129636},{"id":129685,"depth":97,"text":129686},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127981,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129911,"title":129912,"body":129913,"description":122,"extension":123,"meta":131503,"navigation":125,"path":131504,"seo":131505,"stem":131506,"__hash__":131507},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129914,"toc":131482},[129915,129918,129922,129925,129928,129931,129934,129937,129940,129943,129947,129955,129992,130028,130031,130045,130050,130084,130087,130180,130185,130188,130218,130221,130226,130234,130238,130245,130291,130335,130340,130343,130346,130349,130352,130355,130358,130360,130363,130367,130372,130416,130421,130424,130427,130464,130469,130472,130475,130478,130481,130513,130516,130519,130522,130554,130557,130560,130563,130567,130570,130602,130605,130609,130629,130632,130640,130643,130647,130652,130655,130687,130692,130695,130733,130737,130742,130745,130748,130779,130782,130799,130804,130856,130916,130921,130975,131013,131017,131021,131024,131028,131036,131039,131041,131052,131057,131105,131139,131142,131145,131148,131151,131195,131198,131201,131204,131207,131210,131213,131257,131260,131263,131266,131269,131272,131275,131281,131284,131328,131331,131334,131337,131340,131343,131387,131390,131392,131395,131399,131403,131441,131445,131448,131451,131455,131463,131467,131470,131473,131476,131479],[10,129916,129912],{"id":129917},"_9-css盒模型浮动与切图",[140,129919,129921],{"id":129920},"_91-盒子模型","9.1 盒子模型",[14,129923,129924],{},"利用盒子来设计网页",[14,129926,129927],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129929,129930],{},"网页布局设置：",[14,129932,129933],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129935,129936],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129938,129939],{},"③往盒子里装内容",[56,129941],{"style":126449,"src":129942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[169,129944,129946],{"id":129945},"_911-边框border","9.1.1 边框（border）",[152,129948,129949,129952],{},[155,129950,129951],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[155,129953,129954],{},"语法",[67,129956,129958],{"className":126593,"code":129957,"language":126595,"meta":58,"style":58},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[73,129959,129960,129965,129971,129988],{"__ignoreMap":58},[76,129961,129962],{"class":78,"line":79},[76,129963,129964],{"class":82},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[76,129966,129967,129969],{"class":78,"line":86},[76,129968,51681],{"class":51370},[76,129970,15644],{"class":93},[76,129972,129973,129975,129977,129979,129981,129983,129986],{"class":78,"line":97},[76,129974,70966],{"class":250},[76,129976,51507],{"class":93},[76,129978,418],{"class":250},[76,129980,51562],{"class":89},[76,129982,51591],{"class":250},[76,129984,129985],{"class":250}," #ccc",[76,129987,1363],{"class":93},[76,129989,129990],{"class":78,"line":103},[76,129991,1637],{"class":93},[338,129993,129994,130002],{},[341,129995,129996],{},[344,129997,129998,130000],{},[347,129999,129195],{"align":23808},[347,130001,102737],{"align":23808},[385,130003,130004,130012,130020],{},[344,130005,130006,130009],{},[390,130007,130008],{"align":23808},"border-width",[390,130010,130011],{"align":23808},"定义边框粗细，单位是px",[344,130013,130014,130017],{},[390,130015,130016],{"align":23808},"border-style",[390,130018,130019],{"align":23808},"边框的样式",[344,130021,130022,130025],{},[390,130023,130024],{"align":23808},"border-color",[390,130026,130027],{"align":23808},"边框的颜色",[14,130029,130030],{},"边框样式 border-style 可以设置如下值：",[1206,130032,130033,130036,130039,130042],{},[155,130034,130035],{},"none：没有边框即忽略所有边框的宽度（默认值）",[155,130037,130038],{},"solid：边框为单实线(最为常用的)",[155,130040,130041],{},"dashed：边框为虚线",[155,130043,130044],{},"dotted：边框为点线",[152,130046,130047],{"start":97},[155,130048,130049],{},"边框的合写分写",[67,130051,130052],{"className":126593,"code":129957,"language":126595,"meta":58,"style":58},[73,130053,130054,130058,130064,130080],{"__ignoreMap":58},[76,130055,130056],{"class":78,"line":79},[76,130057,129964],{"class":82},[76,130059,130060,130062],{"class":78,"line":86},[76,130061,51681],{"class":51370},[76,130063,15644],{"class":93},[76,130065,130066,130068,130070,130072,130074,130076,130078],{"class":78,"line":97},[76,130067,70966],{"class":250},[76,130069,51507],{"class":93},[76,130071,418],{"class":250},[76,130073,51562],{"class":89},[76,130075,51591],{"class":250},[76,130077,129985],{"class":250},[76,130079,1363],{"class":93},[76,130081,130082],{"class":78,"line":103},[76,130083,1637],{"class":93},[14,130085,130086],{},"边框分开写法：",[67,130088,130090],{"className":126593,"code":130089,"language":126595,"meta":58,"style":58},"\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",[73,130091,130092,130097,130103,130121,130139,130158,130176],{"__ignoreMap":58},[76,130093,130094],{"class":78,"line":79},[76,130095,130096],{"class":82},"\u002F* 边框分开写法 *\u002F\n",[76,130098,130099,130101],{"class":78,"line":86},[76,130100,51681],{"class":51370},[76,130102,15644],{"class":93},[76,130104,130105,130108,130110,130112,130114,130116,130119],{"class":78,"line":97},[76,130106,130107],{"class":250},"  border-top",[76,130109,51507],{"class":93},[76,130111,418],{"class":250},[76,130113,51562],{"class":89},[76,130115,51591],{"class":250},[76,130117,130118],{"class":250}," #000",[76,130120,1363],{"class":93},[76,130122,130123,130126,130128,130130,130132,130134,130137],{"class":78,"line":103},[76,130124,130125],{"class":250},"  border-right",[76,130127,51507],{"class":93},[76,130129,278],{"class":250},[76,130131,51562],{"class":89},[76,130133,62311],{"class":250},[76,130135,130136],{"class":250}," #333",[76,130138,1363],{"class":93},[76,130140,130141,130144,130146,130148,130150,130153,130156],{"class":78,"line":1273},[76,130142,130143],{"class":250},"  border-bottom",[76,130145,51507],{"class":93},[76,130147,272],{"class":250},[76,130149,51562],{"class":89},[76,130151,130152],{"class":250}," dotted",[76,130154,130155],{"class":250}," #666",[76,130157,1363],{"class":93},[76,130159,130160,130163,130165,130167,130169,130171,130174],{"class":78,"line":1287},[76,130161,130162],{"class":250},"  border-left",[76,130164,51507],{"class":93},[76,130166,418],{"class":250},[76,130168,51562],{"class":89},[76,130170,51591],{"class":250},[76,130172,130173],{"class":250}," #999",[76,130175,1363],{"class":93},[76,130177,130178],{"class":78,"line":1293},[76,130179,1637],{"class":93},[152,130181,130182],{"start":103},[155,130183,130184],{},"表格的细线边框",[14,130186,130187],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[67,130189,130191],{"className":126593,"code":130190,"language":126595,"meta":58,"style":58},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[73,130192,130193,130198,130204,130214],{"__ignoreMap":58},[76,130194,130195],{"class":78,"line":79},[76,130196,130197],{"class":82},"\u002F* 表格细线边框合并 *\u002F\n",[76,130199,130200,130202],{"class":78,"line":86},[76,130201,338],{"class":51370},[76,130203,15644],{"class":93},[76,130205,130206,130208,130210,130212],{"class":78,"line":97},[76,130207,70648],{"class":250},[76,130209,51507],{"class":93},[76,130211,65105],{"class":250},[76,130213,1363],{"class":93},[76,130215,130216],{"class":78,"line":103},[76,130217,1637],{"class":93},[14,130219,130220],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[152,130222,130223],{"start":1273},[155,130224,130225],{},"解决边框额外增加盒子的实际大小的方法：",[1206,130227,130228,130231],{},[155,130229,130230],{},"测量盒子大小的时候,不量边框",[155,130232,130233],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[169,130235,130237],{"id":130236},"_912-内边距","9.1.2 内边距",[152,130239,130240,130243],{},[155,130241,130242],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[155,130244,129954],{},[338,130246,130247,130257],{},[341,130248,130249],{},[344,130250,130251,130254],{},[347,130252,130253],{"align":23808},"值的个数",[347,130255,130256],{"align":23808},"表达意思",[385,130258,130259,130267,130275,130283],{},[344,130260,130261,130264],{},[390,130262,130263],{"align":23808},"padding: 5px;",[390,130265,130266],{"align":23808},"1个值，代表上下左右都有5个元素",[344,130268,130269,130272],{},[390,130270,130271],{"align":23808},"padding: 5px 10px;",[390,130273,130274],{"align":23808},"2个值，代表上下内边距为5像素，左右内边距为10像素",[344,130276,130277,130280],{},[390,130278,130279],{"align":23808},"padding: 5px 10px 20px;",[390,130281,130282],{"align":23808},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[344,130284,130285,130288],{},[390,130286,130287],{"align":23808},"padding: 5px 10px 20px 30px;",[390,130289,130290],{"align":23808},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[338,130292,130293,130301],{},[341,130294,130295],{},[344,130296,130297,130299],{},[347,130298,129195],{"align":23808},[347,130300,102737],{"align":23808},[385,130302,130303,130311,130319,130327],{},[344,130304,130305,130308],{},[390,130306,130307],{"align":23808},"padding-left",[390,130309,130310],{"align":23808},"左内边距",[344,130312,130313,130316],{},[390,130314,130315],{"align":23808},"padding-right",[390,130317,130318],{"align":23808},"右内边距",[344,130320,130321,130324],{},[390,130322,130323],{"align":23808},"padding-top",[390,130325,130326],{"align":23808},"上内边距",[344,130328,130329,130332],{},[390,130330,130331],{"align":23808},"padding-bottom",[390,130333,130334],{"align":23808},"下内边距",[152,130336,130337],{"start":97},[155,130338,130339],{},"内边距会影响盒子的实际大小",[14,130341,130342],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130344,130345],{},"①内容和边框有了距离，添加了内边距",[14,130347,130348],{},"②padding影响了盒子实际大小",[14,130350,130351],{},"内边距对盒子大小的影响：",[14,130353,130354],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130356,130357],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130359,95289],{},[14,130361,130362],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[169,130364,130366],{"id":130365},"_913-外边距","9.1.3 外边距",[152,130368,130369],{},[155,130370,130371],{},"控制盒子与盒子之间的距离",[338,130373,130374,130382],{},[341,130375,130376],{},[344,130377,130378,130380],{},[347,130379,129195],{"align":23808},[347,130381,102737],{"align":23808},[385,130383,130384,130392,130400,130408],{},[344,130385,130386,130389],{},[390,130387,130388],{"align":23808},"margin-left",[390,130390,130391],{"align":23808},"左外边距",[344,130393,130394,130397],{},[390,130395,130396],{"align":23808},"margin-right",[390,130398,130399],{"align":23808},"右外边距",[344,130401,130402,130405],{},[390,130403,130404],{"align":23808},"margin-top",[390,130406,130407],{"align":23808},"上外边距",[344,130409,130410,130413],{},[390,130411,130412],{"align":23808},"margin-bottom",[390,130414,130415],{"align":23808},"下外边距",[152,130417,130418],{"start":86},[155,130419,130420],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130422,130423],{},"①盒子必须指定了宽度（width）",[14,130425,130426],{},"②盒子左右的外边距都设置为 auto",[67,130428,130430],{"className":126593,"code":130429,"language":126595,"meta":58,"style":58},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[73,130431,130432,130437,130444,130460],{"__ignoreMap":58},[76,130433,130434],{"class":78,"line":79},[76,130435,130436],{"class":82},"\u002F* margin 复合写法（同上） *\u002F\n",[76,130438,130439,130442],{"class":78,"line":86},[76,130440,130441],{"class":2035},".box",[76,130443,15644],{"class":93},[76,130445,130446,130448,130450,130452,130454,130457],{"class":78,"line":97},[76,130447,70540],{"class":250},[76,130449,51507],{"class":93},[76,130451,392],{"class":250},[76,130453,51626],{"class":250},[76,130455,130456],{"class":93},";  ",[76,130458,130459],{"class":82},"\u002F* 块级盒子水平居中 *\u002F\n",[76,130461,130462],{"class":78,"line":103},[76,130463,1637],{"class":93},[152,130465,130466],{"start":97},[155,130467,130468],{},"外边距塌陷问题",[14,130470,130471],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[56,130473],{"style":126449,"src":130474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130476,130477],{},"解决方案：",[14,130479,130480],{},"①可以为父亲元素定义上边距",[67,130482,130483],{"className":126593,"code":130429,"language":126595,"meta":58,"style":58},[73,130484,130485,130489,130495,130509],{"__ignoreMap":58},[76,130486,130487],{"class":78,"line":79},[76,130488,130436],{"class":82},[76,130490,130491,130493],{"class":78,"line":86},[76,130492,130441],{"class":2035},[76,130494,15644],{"class":93},[76,130496,130497,130499,130501,130503,130505,130507],{"class":78,"line":97},[76,130498,70540],{"class":250},[76,130500,51507],{"class":93},[76,130502,392],{"class":250},[76,130504,51626],{"class":250},[76,130506,130456],{"class":93},[76,130508,130459],{"class":82},[76,130510,130511],{"class":78,"line":103},[76,130512,1637],{"class":93},[14,130514,130515],{},"②可以为父亲元素定义上内边距",[14,130517,130518],{},"③可以为父亲元素添加overflow:hidden",[56,130520],{"style":126449,"src":130521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[67,130523,130524],{"className":126593,"code":130429,"language":126595,"meta":58,"style":58},[73,130525,130526,130530,130536,130550],{"__ignoreMap":58},[76,130527,130528],{"class":78,"line":79},[76,130529,130436],{"class":82},[76,130531,130532,130534],{"class":78,"line":86},[76,130533,130441],{"class":2035},[76,130535,15644],{"class":93},[76,130537,130538,130540,130542,130544,130546,130548],{"class":78,"line":97},[76,130539,70540],{"class":250},[76,130541,51507],{"class":93},[76,130543,392],{"class":250},[76,130545,51626],{"class":250},[76,130547,130456],{"class":93},[76,130549,130459],{"class":82},[76,130551,130552],{"class":78,"line":103},[76,130553,1637],{"class":93},[56,130555],{"style":126449,"src":130556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130558,130559],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130561,130562],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[169,130564,130566],{"id":130565},"_914-清除内外边距","9.1.4 清除内外边距",[14,130568,130569],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[67,130571,130572],{"className":126593,"code":130429,"language":126595,"meta":58,"style":58},[73,130573,130574,130578,130584,130598],{"__ignoreMap":58},[76,130575,130576],{"class":78,"line":79},[76,130577,130436],{"class":82},[76,130579,130580,130582],{"class":78,"line":86},[76,130581,130441],{"class":2035},[76,130583,15644],{"class":93},[76,130585,130586,130588,130590,130592,130594,130596],{"class":78,"line":97},[76,130587,70540],{"class":250},[76,130589,51507],{"class":93},[76,130591,392],{"class":250},[76,130593,51626],{"class":250},[76,130595,130456],{"class":93},[76,130597,130459],{"class":82},[76,130599,130600],{"class":78,"line":103},[76,130601,1637],{"class":93},[14,130603,130604],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[169,130606,130608],{"id":130607},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1206,130610,130611,130614,130617,130620,130623,130626],{},[155,130612,130613],{},"文件→打开 ：可以打开我们要测量的图片",[155,130615,130616],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[155,130618,130619],{},"右击标尺，把里面的单位改为像素",[155,130621,130622],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[155,130624,130625],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[155,130627,130628],{},"用选区拖动 可以测量大小",[56,130630],{"style":126449,"src":130631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1206,130633,130634,130637],{},[155,130635,130636],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[155,130638,130639],{},"吸管取色工具",[56,130641],{"style":126449,"src":130642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[169,130644,130646],{"id":130645},"_916-案例","9.1.6 案例",[152,130648,130649],{},[155,130650,130651],{},"小米商品",[56,130653],{"style":126449,"src":130654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[67,130656,130657],{"className":126593,"code":130429,"language":126595,"meta":58,"style":58},[73,130658,130659,130663,130669,130683],{"__ignoreMap":58},[76,130660,130661],{"class":78,"line":79},[76,130662,130436],{"class":82},[76,130664,130665,130667],{"class":78,"line":86},[76,130666,130441],{"class":2035},[76,130668,15644],{"class":93},[76,130670,130671,130673,130675,130677,130679,130681],{"class":78,"line":97},[76,130672,70540],{"class":250},[76,130674,51507],{"class":93},[76,130676,392],{"class":250},[76,130678,51626],{"class":250},[76,130680,130456],{"class":93},[76,130682,130459],{"class":82},[76,130684,130685],{"class":78,"line":103},[76,130686,1637],{"class":93},[152,130688,130689],{"start":86},[155,130690,130691],{},"快报模块",[56,130693],{"style":126449,"src":130694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[67,130696,130698],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[73,130699,130700,130705,130720,130725],{"__ignoreMap":58},[76,130701,130702],{"class":78,"line":79},[76,130703,130704],{"class":82},"\u003C!-- HTML 代码示例 -->\n",[76,130706,130707,130709,130711,130713,130715,130718],{"class":78,"line":86},[76,130708,1109],{"class":93},[76,130710,51681],{"class":51370},[76,130712,53556],{"class":2035},[76,130714,247],{"class":93},[76,130716,130717],{"class":305},"\"example\"",[76,130719,51377],{"class":93},[76,130721,130722],{"class":78,"line":97},[76,130723,130724],{"class":93},"  示例内容\n",[76,130726,130727,130729,130731],{"class":78,"line":103},[76,130728,51855],{"class":93},[76,130730,51681],{"class":51370},[76,130732,51377],{"class":93},[169,130734,130736],{"id":130735},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[152,130738,130739],{},[155,130740,130741],{},"圆角边框",[14,130743,130744],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[56,130746],{"style":126449,"src":130747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[67,130749,130751],{"className":126593,"code":130750,"language":126595,"meta":58,"style":58},"div {\n  border: 1px solid #ccc;\n}\n",[73,130752,130753,130759,130775],{"__ignoreMap":58},[76,130754,130755,130757],{"class":78,"line":79},[76,130756,51681],{"class":51370},[76,130758,15644],{"class":93},[76,130760,130761,130763,130765,130767,130769,130771,130773],{"class":78,"line":86},[76,130762,70966],{"class":250},[76,130764,51507],{"class":93},[76,130766,418],{"class":250},[76,130768,51562],{"class":89},[76,130770,51591],{"class":250},[76,130772,129985],{"class":250},[76,130774,1363],{"class":93},[76,130776,130777],{"class":78,"line":97},[76,130778,1637],{"class":93},[14,130780,130781],{},"解释:",[1206,130783,130784,130787,130790,130793,130796],{},[155,130785,130786],{},"参数值可以为数值或百分比的形式",[155,130788,130789],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[155,130791,130792],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[155,130794,130795],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[155,130797,130798],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[152,130800,130801],{"start":86},[155,130802,130803],{},"盒子阴影",[67,130805,130807],{"className":126593,"code":130806,"language":126595,"meta":58,"style":58},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[73,130808,130809,130815,130852],{"__ignoreMap":58},[76,130810,130811,130813],{"class":78,"line":79},[76,130812,51681],{"class":51370},[76,130814,15644],{"class":93},[76,130816,130817,130820,130822,130824,130826,130828,130830,130832,130834,130836,130838,130840,130842,130844,130846,130848,130850],{"class":78,"line":86},[76,130818,130819],{"class":250},"  box-shadow",[76,130821,51507],{"class":93},[76,130823,392],{"class":250},[76,130825,14827],{"class":250},[76,130827,51562],{"class":89},[76,130829,2110],{"class":250},[76,130831,51562],{"class":89},[76,130833,78837],{"class":250},[76,130835,202],{"class":93},[76,130837,392],{"class":250},[76,130839,12507],{"class":93},[76,130841,392],{"class":250},[76,130843,12507],{"class":93},[76,130845,392],{"class":250},[76,130847,12507],{"class":93},[76,130849,86280],{"class":250},[76,130851,2791],{"class":93},[76,130853,130854],{"class":78,"line":97},[76,130855,1637],{"class":93},[338,130857,130858,130866],{},[341,130859,130860],{},[344,130861,130862,130864],{},[347,130863,353],{"align":23808},[347,130865,27562],{"align":23808},[385,130867,130868,130876,130884,130892,130900,130908],{},[344,130869,130870,130873],{},[390,130871,130872],{"align":23808},"h-shadow",[390,130874,130875],{"align":23808},"必需,水平阴影的位置,允许负值",[344,130877,130878,130881],{},[390,130879,130880],{"align":23808},"v-shadow",[390,130882,130883],{"align":23808},"必需,垂直阴影的位置,允许负值",[344,130885,130886,130889],{},[390,130887,130888],{"align":23808},"blur",[390,130890,130891],{"align":23808},"可选,模糊距离,就是影子的虚实",[344,130893,130894,130897],{},[390,130895,130896],{"align":23808},"spread",[390,130898,130899],{"align":23808},"可选,阴影尺寸",[344,130901,130902,130905],{},[390,130903,130904],{"align":23808},"color",[390,130906,130907],{"align":23808},"可选,阴影的颜色",[344,130909,130910,130913],{},[390,130911,130912],{"align":23808},"inset",[390,130914,130915],{"align":23808},"可选,将外部阴影(outset)改为内部阴影",[152,130917,130918],{"start":97},[155,130919,130920],{},"文字阴影",[67,130922,130924],{"className":126593,"code":130923,"language":126595,"meta":58,"style":58},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[73,130925,130926,130932,130971],{"__ignoreMap":58},[76,130927,130928,130930],{"class":78,"line":79},[76,130929,14],{"class":51370},[76,130931,15644],{"class":93},[76,130933,130934,130937,130939,130941,130943,130945,130947,130949,130951,130953,130955,130957,130959,130961,130963,130965,130967,130969],{"class":78,"line":86},[76,130935,130936],{"class":250},"  text-shadow",[76,130938,51507],{"class":93},[76,130940,418],{"class":250},[76,130942,51562],{"class":89},[76,130944,25191],{"class":250},[76,130946,51562],{"class":89},[76,130948,14827],{"class":250},[76,130950,51562],{"class":89},[76,130952,78837],{"class":250},[76,130954,202],{"class":93},[76,130956,392],{"class":250},[76,130958,12507],{"class":93},[76,130960,392],{"class":250},[76,130962,12507],{"class":93},[76,130964,392],{"class":250},[76,130966,12507],{"class":93},[76,130968,100562],{"class":250},[76,130970,2791],{"class":93},[76,130972,130973],{"class":78,"line":97},[76,130974,1637],{"class":93},[338,130976,130977,130985],{},[341,130978,130979],{},[344,130980,130981,130983],{},[347,130982,353],{"align":23808},[347,130984,27562],{"align":23808},[385,130986,130987,130993,131000,131007],{},[344,130988,130989,130991],{},[390,130990,130872],{"align":23808},[390,130992,130875],{"align":23808},[344,130994,130995,130997],{},[390,130996,130880],{"align":23808},[390,130998,130999],{"align":23808},"必需,垂直阴影位置,允许负值",[344,131001,131002,131004],{},[390,131003,130888],{"align":23808},[390,131005,131006],{"align":23808},"可选,模糊的距离",[344,131008,131009,131011],{},[390,131010,130904],{"align":23808},[390,131012,130907],{"align":23808},[140,131014,131016],{"id":131015},"_92-浮动","9.2 浮动",[169,131018,131020],{"id":131019},"_921-浮动介绍","9.2.1 浮动介绍",[14,131022,131023],{},"在16.2中详细介绍",[169,131025,131027],{"id":131026},"_922-清除浮动","9.2.2 清除浮动",[152,131029,131030,131033],{},[155,131031,131032],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[155,131034,131035],{},"清除浮动的本质",[14,131037,131038],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131040,9097],{},[1206,131042,131043,131046,131049],{},[155,131044,131045],{},"如果父盒子本身有高度，则不需要清除浮动",[155,131047,131048],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[155,131050,131051],{},"父级有了高度，就不会影响下面的标准流了",[152,131053,131054],{"start":97},[155,131055,131056],{},"清除浮动样式",[67,131058,131060],{"className":126593,"code":131059,"language":126595,"meta":58,"style":58},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[73,131061,131062,131069,131080,131084,131091,131101],{"__ignoreMap":58},[76,131063,131064,131067],{"class":78,"line":79},[76,131065,131066],{"class":2035},".left",[76,131068,15644],{"class":93},[76,131070,131071,131074,131076,131078],{"class":78,"line":86},[76,131072,131073],{"class":250},"  float",[76,131075,51507],{"class":93},[76,131077,23808],{"class":250},[76,131079,1363],{"class":93},[76,131081,131082],{"class":78,"line":97},[76,131083,1637],{"class":93},[76,131085,131086,131089],{"class":78,"line":103},[76,131087,131088],{"class":2035},".right",[76,131090,15644],{"class":93},[76,131092,131093,131095,131097,131099],{"class":78,"line":1273},[76,131094,131073],{"class":250},[76,131096,51507],{"class":93},[76,131098,72592],{"class":250},[76,131100,1363],{"class":93},[76,131102,131103],{"class":78,"line":1287},[76,131104,1637],{"class":93},[338,131106,131107,131115],{},[341,131108,131109],{},[344,131110,131111,131113],{},[347,131112,127057],{"align":23808},[347,131114,27562],{"align":23808},[385,131116,131117,131124,131131],{},[344,131118,131119,131121],{},[390,131120,23808],{"align":23808},[390,131122,131123],{"align":23808},"不允许左侧有浮动元素（清除左侧浮动的影响）",[344,131125,131126,131128],{},[390,131127,72592],{"align":23808},[390,131129,131130],{"align":23808},"不允许右侧有浮动元素（清除右侧浮动的影响）",[344,131132,131133,131136],{},[390,131134,131135],{"align":23808},"both",[390,131137,131138],{"align":23808},"同时清除左右侧浮动的影响",[14,131140,131141],{},"法一",[14,131143,131144],{},"额外标签法也称为隔墙法",[14,131146,131147],{},"使用方式：",[14,131149,131150],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[67,131152,131153],{"className":126593,"code":131059,"language":126595,"meta":58,"style":58},[73,131154,131155,131161,131171,131175,131181,131191],{"__ignoreMap":58},[76,131156,131157,131159],{"class":78,"line":79},[76,131158,131066],{"class":2035},[76,131160,15644],{"class":93},[76,131162,131163,131165,131167,131169],{"class":78,"line":86},[76,131164,131073],{"class":250},[76,131166,51507],{"class":93},[76,131168,23808],{"class":250},[76,131170,1363],{"class":93},[76,131172,131173],{"class":78,"line":97},[76,131174,1637],{"class":93},[76,131176,131177,131179],{"class":78,"line":103},[76,131178,131088],{"class":2035},[76,131180,15644],{"class":93},[76,131182,131183,131185,131187,131189],{"class":78,"line":1273},[76,131184,131073],{"class":250},[76,131186,51507],{"class":93},[76,131188,72592],{"class":250},[76,131190,1363],{"class":93},[76,131192,131193],{"class":78,"line":1287},[76,131194,1637],{"class":93},[14,131196,131197],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131199,131200],{},"优点： 通俗易懂，书写方便",[14,131202,131203],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131205,131206],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131208,131209],{},"法二",[14,131211,131212],{},"父级添加overflow属性",[67,131214,131215],{"className":126593,"code":131059,"language":126595,"meta":58,"style":58},[73,131216,131217,131223,131233,131237,131243,131253],{"__ignoreMap":58},[76,131218,131219,131221],{"class":78,"line":79},[76,131220,131066],{"class":2035},[76,131222,15644],{"class":93},[76,131224,131225,131227,131229,131231],{"class":78,"line":86},[76,131226,131073],{"class":250},[76,131228,51507],{"class":93},[76,131230,23808],{"class":250},[76,131232,1363],{"class":93},[76,131234,131235],{"class":78,"line":97},[76,131236,1637],{"class":93},[76,131238,131239,131241],{"class":78,"line":103},[76,131240,131088],{"class":2035},[76,131242,15644],{"class":93},[76,131244,131245,131247,131249,131251],{"class":78,"line":1273},[76,131246,131073],{"class":250},[76,131248,51507],{"class":93},[76,131250,72592],{"class":250},[76,131252,1363],{"class":93},[76,131254,131255],{"class":78,"line":1287},[76,131256,1637],{"class":93},[14,131258,131259],{},"overflow: hidden;",[14,131261,131262],{},"优点：代码简洁",[14,131264,131265],{},"缺点：无法显示溢出的部分",[14,131267,131268],{},"注意：是给父元素添加代码",[14,131270,131271],{},"法三",[14,131273,131274],{},"父级添加after伪元素",[14,131276,131277,131280],{},[131278,131279],"after",{}," 方式是额外标签法的升级版",[14,131282,131283],{},"使用的时候复制就可以",[67,131285,131286],{"className":126593,"code":131059,"language":126595,"meta":58,"style":58},[73,131287,131288,131294,131304,131308,131314,131324],{"__ignoreMap":58},[76,131289,131290,131292],{"class":78,"line":79},[76,131291,131066],{"class":2035},[76,131293,15644],{"class":93},[76,131295,131296,131298,131300,131302],{"class":78,"line":86},[76,131297,131073],{"class":250},[76,131299,51507],{"class":93},[76,131301,23808],{"class":250},[76,131303,1363],{"class":93},[76,131305,131306],{"class":78,"line":97},[76,131307,1637],{"class":93},[76,131309,131310,131312],{"class":78,"line":103},[76,131311,131088],{"class":2035},[76,131313,15644],{"class":93},[76,131315,131316,131318,131320,131322],{"class":78,"line":1273},[76,131317,131073],{"class":250},[76,131319,51507],{"class":93},[76,131321,72592],{"class":250},[76,131323,1363],{"class":93},[76,131325,131326],{"class":78,"line":1287},[76,131327,1637],{"class":93},[14,131329,131330],{},"优点：没有增加标签，结构更简单",[14,131332,131333],{},"缺点：照顾低版本浏览器",[14,131335,131336],{},"代表网站： 百度、淘宝网、网易等",[14,131338,131339],{},"法四",[14,131341,131342],{},"父级添加双伪元素",[67,131344,131345],{"className":126593,"code":131059,"language":126595,"meta":58,"style":58},[73,131346,131347,131353,131363,131367,131373,131383],{"__ignoreMap":58},[76,131348,131349,131351],{"class":78,"line":79},[76,131350,131066],{"class":2035},[76,131352,15644],{"class":93},[76,131354,131355,131357,131359,131361],{"class":78,"line":86},[76,131356,131073],{"class":250},[76,131358,51507],{"class":93},[76,131360,23808],{"class":250},[76,131362,1363],{"class":93},[76,131364,131365],{"class":78,"line":97},[76,131366,1637],{"class":93},[76,131368,131369,131371],{"class":78,"line":103},[76,131370,131088],{"class":2035},[76,131372,15644],{"class":93},[76,131374,131375,131377,131379,131381],{"class":78,"line":1273},[76,131376,131073],{"class":250},[76,131378,51507],{"class":93},[76,131380,72592],{"class":250},[76,131382,1363],{"class":93},[76,131384,131385],{"class":78,"line":1287},[76,131386,1637],{"class":93},[14,131388,131389],{},"优点：代码更简洁",[14,131391,131333],{},[14,131393,131394],{},"代表网站：小米、腾讯等",[140,131396,131398],{"id":131397},"_93-ps切图","9.3 PS切图",[169,131400,131402],{"id":131401},"_931-常见图片格式","9.3.1 常见图片格式",[338,131404,131405,131415],{},[341,131406,131407],{},[344,131408,131409,131412],{},[347,131410,131411],{"align":23808},"jpg图像格式",[347,131413,131414],{"align":23808},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[385,131416,131417,131425,131433],{},[344,131418,131419,131422],{},[390,131420,131421],{"align":23808},"gif图像格式",[390,131423,131424],{"align":23808},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[344,131426,131427,131430],{},[390,131428,131429],{"align":23808},"png图像格式",[390,131431,131432],{"align":23808},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[344,131434,131435,131438],{},[390,131436,131437],{"align":23808},"PSD图像格式",[390,131439,131440],{"align":23808},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[169,131442,131444],{"id":131443},"_932-图层切图","9.3.2 图层切图",[14,131446,131447],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131449,131450],{},"按住shift选中两个图层->图层菜单->合并图层",[169,131452,131454],{"id":131453},"_933-切片切图","9.3.3 切片切图",[1206,131456,131457,131460],{},[155,131458,131459],{},"利用切片工具手动划出",[155,131461,131462],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[169,131464,131466],{"id":131465},"_934-切图步骤","9.3.4 切图步骤",[14,131468,131469],{},"用切片工具选中：",[56,131471],{"style":126449,"src":131472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131474,131475],{},"文件 -> 导出",[56,131477],{"style":126449,"src":131478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[117,131480,131481],{},"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":58,"searchDepth":86,"depth":86,"links":131483},[131484,131493,131497],{"id":129920,"depth":86,"text":129921,"children":131485},[131486,131487,131488,131489,131490,131491,131492],{"id":129945,"depth":97,"text":129946},{"id":130236,"depth":97,"text":130237},{"id":130365,"depth":97,"text":130366},{"id":130565,"depth":97,"text":130566},{"id":130607,"depth":97,"text":130608},{"id":130645,"depth":97,"text":130646},{"id":130735,"depth":97,"text":130736},{"id":131015,"depth":86,"text":131016,"children":131494},[131495,131496],{"id":131019,"depth":97,"text":131020},{"id":131026,"depth":97,"text":131027},{"id":131397,"depth":86,"text":131398,"children":131498},[131499,131500,131501,131502],{"id":131401,"depth":97,"text":131402},{"id":131443,"depth":97,"text":131444},{"id":131453,"depth":97,"text":131454},{"id":131465,"depth":97,"text":131466},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129912,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131509,"title":131510,"body":131511,"description":122,"extension":123,"meta":132152,"navigation":125,"path":132153,"seo":132154,"stem":132155,"__hash__":132156},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131512,"toc":132140},[131513,131516,131520,131546,131580,131584,131588,131591,131633,131640,131650,131658,131660,131663,131666,131669,131676,131690,131694,131697,131726,131730,131733,131747,131751,131754,131782,131786,131789,131815,131819,131824,131857,131862,131890,131894,131911,131957,131962,132006,132023,132130,132138],[10,131514,131510],{"id":131515},"_10-css规范与学成在线案例",[140,131517,131519],{"id":131518},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[152,131521,131522,131528,131534,131540],{},[155,131523,131524,131527],{},[350,131525,131526],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[155,131529,131530,131533],{},[350,131531,131532],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[155,131535,131536,131539],{},[350,131537,131538],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[155,131541,131542,131545],{},[350,131543,131544],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[67,131547,131548],{"className":126593,"code":129957,"language":126595,"meta":58,"style":58},[73,131549,131550,131554,131560,131576],{"__ignoreMap":58},[76,131551,131552],{"class":78,"line":79},[76,131553,129964],{"class":82},[76,131555,131556,131558],{"class":78,"line":86},[76,131557,51681],{"class":51370},[76,131559,15644],{"class":93},[76,131561,131562,131564,131566,131568,131570,131572,131574],{"class":78,"line":97},[76,131563,70966],{"class":250},[76,131565,51507],{"class":93},[76,131567,418],{"class":250},[76,131569,51562],{"class":89},[76,131571,51591],{"class":250},[76,131573,129985],{"class":250},[76,131575,1363],{"class":93},[76,131577,131578],{"class":78,"line":103},[76,131579,1637],{"class":93},[140,131581,131583],{"id":131582},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[169,131585,131587],{"id":131586},"_1021-header头部制作","10.2.1 header头部制作",[56,131589],{"style":126449,"src":131590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1206,131592,131593,131600,131607,131613,131620,131627],{},[155,131594,131595,131596,131599],{},"1号是版心盒子 ",[350,131597,131598],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[155,131601,131602,131603,131606],{},"版心盒子 里面包含 2号盒子 ",[350,131604,131605],{},"logo"," 图标",[155,131608,131609,131610,131612],{},"版心盒子 里面包含 3号盒子 ",[350,131611,53783],{}," 导航栏",[155,131614,131615,131616,131619],{},"版心盒子 里面包含 4号盒子 ",[350,131617,131618],{},"search"," 搜索框",[155,131621,131622,131623,131626],{},"版心盒子 里面包含 5号盒子 ",[350,131624,131625],{},"user"," 个人信息",[155,131628,131629,131630],{},"注意，要求里面的 ",[350,131631,131632],{},"4个子盒子 必须都浮动",[152,131634,131635],{},[155,131636,131637],{},[350,131638,131639],{},"导航栏注意点:",[14,131641,131642,131643,131646,131647],{},"实际开发中， ",[350,131644,131645],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[350,131648,131649],{},"用 li 包含链接(li+a)的做法",[1206,131651,131652,131655],{},[155,131653,131654],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[155,131656,131657],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131659,9097],{},[14,131661,131662],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131664,131665],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131667,131668],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[152,131670,131671],{"start":86},[155,131672,131673],{},[350,131674,131675],{},"4号盒子search的细节：",[1206,131677,131678,131681,131684],{},[155,131679,131680],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[155,131682,131683],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[155,131685,131686,131689],{},[73,131687,131688],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[169,131691,131693],{"id":131692},"_1022-banner制作","10.2.2 banner制作",[56,131695],{"style":126449,"src":131696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1206,131698,131699,131706,131712,131719],{},[155,131700,131701,131702,131705],{},"1号盒子是通栏的大盒子 ",[350,131703,131704],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[155,131707,131708,131709,131711],{},"2号盒子是版心 ",[350,131710,994],{}," ， 要水平居中对齐",[155,131713,131714,131715,131718],{},"3号盒子版心内，左对齐 ",[350,131716,131717],{},"subnav"," 侧导航栏",[155,131720,131721,131722,131725],{},"4号盒子版心内，右对齐 ",[350,131723,131724],{},"course"," 课程",[169,131727,131729],{"id":131728},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[56,131731],{"style":126449,"src":131732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1206,131734,131735,131738,131741,131744],{},[155,131736,131737],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[155,131739,131740],{},"1号盒子是标题 H3 左侧浮动",[155,131742,131743],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[155,131745,131746],{},"3号盒子 右浮动 mod 修改",[169,131748,131750],{"id":131749},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[56,131752],{"style":126449,"src":131753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1206,131755,131756,131762,131769,131776,131779],{},[155,131757,131758,131759,131761],{},"1号盒子为最大的盒子 ",[350,131760,53784],{}," 版心水平居中对齐",[155,131763,131764,131765,131768],{},"2号盒子为上面部分 ",[350,131766,131767],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[155,131770,131771,131772,131775],{},"3号盒子为底下部分 ",[350,131773,131774],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[155,131777,131778],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[155,131780,131781],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[169,131783,131785],{"id":131784},"_1025-底部模块制作","10.2.5 底部模块制作",[56,131787],{"style":126449,"src":131788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1206,131790,131791,131798,131801,131808],{},[155,131792,131793,131794,131797],{},"1号盒子通栏大盒子 底部 ",[350,131795,131796],{},"footer"," 给高度 底色是白色",[155,131799,131800],{},"2号盒子版心水平居中",[155,131802,131803,131804,131807],{},"3号盒子版权 ",[350,131805,131806],{},"copyright"," 左对齐",[155,131809,131810,131811,131814],{},"4号盒子 链接组 ",[350,131812,131813],{},"links"," 右对齐",[169,131816,131818],{"id":131817},"_1026-代码模块","10.2.6 代码模块",[152,131820,131821],{},[155,131822,131823],{},"html部分",[67,131825,131827],{"className":127340,"code":131826,"language":127342,"meta":58,"style":58},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[73,131828,131829],{"__ignoreMap":58},[76,131830,131831,131833,131835,131837,131839,131842,131845,131847,131850,131853,131855],{"class":78,"line":79},[76,131832,1109],{"class":93},[76,131834,439],{"class":51370},[76,131836,61127],{"class":2035},[76,131838,247],{"class":93},[76,131840,131841],{"class":305},"\"https:\u002F\u002Fexample.com\"",[76,131843,131844],{"class":2035}," target",[76,131846,247],{"class":93},[76,131848,131849],{"class":305},"\"_blank\"",[76,131851,131852],{"class":93},">链接文字\u003C\u002F",[76,131854,439],{"class":51370},[76,131856,51377],{"class":93},[152,131858,131859],{"start":86},[155,131860,131861],{},"css部分",[67,131863,131864],{"className":127340,"code":131826,"language":127342,"meta":58,"style":58},[73,131865,131866],{"__ignoreMap":58},[76,131867,131868,131870,131872,131874,131876,131878,131880,131882,131884,131886,131888],{"class":78,"line":79},[76,131869,1109],{"class":93},[76,131871,439],{"class":51370},[76,131873,61127],{"class":2035},[76,131875,247],{"class":93},[76,131877,131841],{"class":305},[76,131879,131844],{"class":2035},[76,131881,247],{"class":93},[76,131883,131849],{"class":305},[76,131885,131852],{"class":93},[76,131887,439],{"class":51370},[76,131889,51377],{"class":93},[169,131891,131893],{"id":131892},"_1027-收获","10.2.7 收获",[152,131895,131896,131899,131902,131905,131908],{},[155,131897,131898],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[155,131900,131901],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[155,131903,131904],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[155,131906,131907],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[155,131909,131910],{},"遗忘代码",[67,131912,131914],{"className":126593,"code":131913,"language":126595,"meta":58,"style":58},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[73,131915,131916,131938,131943,131953],{"__ignoreMap":58},[76,131917,131918,131920,131922,131924,131926,131928,131930,131932,131934,131936],{"class":78,"line":79},[76,131919,51681],{"class":51370},[76,131921,12507],{"class":93},[76,131923,14],{"class":51370},[76,131925,12507],{"class":93},[76,131927,10],{"class":51370},[76,131929,12507],{"class":93},[76,131931,1206],{"class":51370},[76,131933,12507],{"class":93},[76,131935,155],{"class":51370},[76,131937,15644],{"class":93},[76,131939,131940],{"class":78,"line":86},[76,131941,131942],{"class":82},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[76,131944,131945,131947,131949,131951],{"class":78,"line":97},[76,131946,128209],{"class":250},[76,131948,51507],{"class":93},[76,131950,60939],{"class":250},[76,131952,1363],{"class":93},[76,131954,131955],{"class":78,"line":103},[76,131956,1637],{"class":93},[152,131958,131959],{"start":1287},[155,131960,131961],{},"html引css的程序",[67,131963,131964],{"className":126593,"code":131913,"language":126595,"meta":58,"style":58},[73,131965,131966,131988,131992,132002],{"__ignoreMap":58},[76,131967,131968,131970,131972,131974,131976,131978,131980,131982,131984,131986],{"class":78,"line":79},[76,131969,51681],{"class":51370},[76,131971,12507],{"class":93},[76,131973,14],{"class":51370},[76,131975,12507],{"class":93},[76,131977,10],{"class":51370},[76,131979,12507],{"class":93},[76,131981,1206],{"class":51370},[76,131983,12507],{"class":93},[76,131985,155],{"class":51370},[76,131987,15644],{"class":93},[76,131989,131990],{"class":78,"line":86},[76,131991,131942],{"class":82},[76,131993,131994,131996,131998,132000],{"class":78,"line":97},[76,131995,128209],{"class":250},[76,131997,51507],{"class":93},[76,131999,60939],{"class":250},[76,132001,1363],{"class":93},[76,132003,132004],{"class":78,"line":103},[76,132005,1637],{"class":93},[152,132007,132008,132011,132014,132017,132020],{"start":1293},[155,132009,132010],{},"浮动的盒子不会有外边距合并问题",[155,132012,132013],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[155,132015,132016],{},"ctrl+g快速定位行；shift+alt多个光标",[155,132018,132019],{},"学习上方各个模块的选择器起名方法，以后就这样用",[155,132021,132022],{},"在写选择器时尽量写全一些，例如",[67,132024,132026],{"className":126593,"code":132025,"language":126595,"meta":58,"style":58},"\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",[73,132027,132028,132033,132049,132054,132069,132074,132089,132094,132109,132114],{"__ignoreMap":58},[76,132029,132030],{"class":78,"line":79},[76,132031,132032],{"class":82},"\u002F* 静态定位（默认） *\u002F\n",[76,132034,132035,132038,132040,132042,132044,132047],{"class":78,"line":86},[76,132036,132037],{"class":2035},".static",[76,132039,79877],{"class":93},[76,132041,128953],{"class":250},[76,132043,51507],{"class":93},[76,132045,132046],{"class":250},"static",[76,132048,129523],{"class":93},[76,132050,132051],{"class":78,"line":97},[76,132052,132053],{"class":82},"\u002F* 相对定位 *\u002F\n",[76,132055,132056,132059,132061,132063,132065,132067],{"class":78,"line":103},[76,132057,132058],{"class":2035},".relative",[76,132060,79877],{"class":93},[76,132062,128953],{"class":250},[76,132064,51507],{"class":93},[76,132066,54834],{"class":250},[76,132068,129523],{"class":93},[76,132070,132071],{"class":78,"line":1273},[76,132072,132073],{"class":82},"\u002F* 绝对定位 *\u002F\n",[76,132075,132076,132079,132081,132083,132085,132087],{"class":78,"line":1287},[76,132077,132078],{"class":2035},".absolute",[76,132080,79877],{"class":93},[76,132082,128953],{"class":250},[76,132084,51507],{"class":93},[76,132086,54901],{"class":250},[76,132088,129523],{"class":93},[76,132090,132091],{"class":78,"line":1293},[76,132092,132093],{"class":82},"\u002F* 固定定位 *\u002F\n",[76,132095,132096,132099,132101,132103,132105,132107],{"class":78,"line":1384},[76,132097,132098],{"class":2035},".fixed",[76,132100,79877],{"class":93},[76,132102,128953],{"class":250},[76,132104,51507],{"class":93},[76,132106,86303],{"class":250},[76,132108,129523],{"class":93},[76,132110,132111],{"class":78,"line":1390},[76,132112,132113],{"class":82},"\u002F* 粘性定位 *\u002F\n",[76,132115,132116,132119,132121,132123,132125,132128],{"class":78,"line":1402},[76,132117,132118],{"class":2035},".sticky",[76,132120,79877],{"class":93},[76,132122,128953],{"class":250},[76,132124,51507],{"class":93},[76,132126,132127],{"class":250},"sticky",[76,132129,129523],{"class":93},[152,132131,132132,132135],{"start":1689},[155,132133,132134],{},"一定要用好注释",[155,132136,132137],{},"浮动的盒子不会有外边距合并的问题",[117,132139,131481],{},{"title":58,"searchDepth":86,"depth":86,"links":132141},[132142,132143],{"id":131518,"depth":86,"text":131519},{"id":131582,"depth":86,"text":131583,"children":132144},[132145,132146,132147,132148,132149,132150,132151],{"id":131586,"depth":97,"text":131587},{"id":131692,"depth":97,"text":131693},{"id":131728,"depth":97,"text":131729},{"id":131749,"depth":97,"text":131750},{"id":131784,"depth":97,"text":131785},{"id":131817,"depth":97,"text":131818},{"id":131892,"depth":97,"text":131893},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131510,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132158,"title":132159,"body":132160,"description":122,"extension":123,"meta":133646,"navigation":125,"path":133647,"seo":133648,"stem":133649,"__hash__":133650},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132161,"toc":133638},[132162,132165,132169,132173,132184,132188,132205,132249,132282,132285,132302,132305,132308,132352,132356,132360,132363,132366,132370,132373,132384,132447,132488,132491,132506,132560,132568,132571,132582,132636,132662,132665,132678,132732,132764,132818,132841,132895,132898,132901,132908,132962,132983,133037,133040,133043,133128,133136,133193,133216,133220,133223,133241,133245,133264,133318,133356,133360,133363,133366,133388,133392,133400,133403,133408,133419,133422,133426,133440,133484,133487,133491,133494,133499,133525,133530,133607,133610,133614,133617,133620,133623,133626,133629,133632,133635],[10,132163,132159],{"id":132164},"_11-传统布局与定位体系",[140,132166,132168],{"id":132167},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[169,132170,132172],{"id":132171},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1206,132174,132175,132178,132181],{},[155,132176,132177],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[155,132179,132180],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[155,132182,132183],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[169,132185,132187],{"id":132186},"_1112-浮动","11.1.2 浮动",[1206,132189,132190,132193,132196,132199,132202],{},[155,132191,132192],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[155,132194,132195],{},"浮动可以改变元素标签默认的排列方式",[155,132197,132198],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[155,132200,132201],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[155,132203,132204],{},"在使用行内块转换时盒子之间是有空隙的",[67,132206,132207],{"className":126593,"code":131059,"language":126595,"meta":58,"style":58},[73,132208,132209,132215,132225,132229,132235,132245],{"__ignoreMap":58},[76,132210,132211,132213],{"class":78,"line":79},[76,132212,131066],{"class":2035},[76,132214,15644],{"class":93},[76,132216,132217,132219,132221,132223],{"class":78,"line":86},[76,132218,131073],{"class":250},[76,132220,51507],{"class":93},[76,132222,23808],{"class":250},[76,132224,1363],{"class":93},[76,132226,132227],{"class":78,"line":97},[76,132228,1637],{"class":93},[76,132230,132231,132233],{"class":78,"line":103},[76,132232,131088],{"class":2035},[76,132234,15644],{"class":93},[76,132236,132237,132239,132241,132243],{"class":78,"line":1273},[76,132238,131073],{"class":250},[76,132240,51507],{"class":93},[76,132242,72592],{"class":250},[76,132244,1363],{"class":93},[76,132246,132247],{"class":78,"line":1287},[76,132248,1637],{"class":93},[338,132250,132251,132259],{},[341,132252,132253],{},[344,132254,132255,132257],{},[347,132256,127057],{"align":23808},[347,132258,27562],{"align":23808},[385,132260,132261,132268,132275],{},[344,132262,132263,132265],{},[390,132264,54807],{"align":23808},[390,132266,132267],{"align":23808},"元素不浮动（默认值）",[344,132269,132270,132272],{},[390,132271,23808],{"align":23808},[390,132273,132274],{"align":23808},"元素向左浮动",[344,132276,132277,132279],{},[390,132278,72592],{"align":23808},[390,132280,132281],{"align":23808},"元素向右浮动",[14,132283,132284],{},"浮动重点：",[1206,132286,132287,132290,132293,132296,132299],{},[155,132288,132289],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[155,132291,132292],{},"浮动的元素会一行内显示并且元素顶部对齐",[155,132294,132295],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[155,132297,132298],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[155,132300,132301],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132303,132304],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132306,132307],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[67,132309,132310],{"className":126593,"code":131059,"language":126595,"meta":58,"style":58},[73,132311,132312,132318,132328,132332,132338,132348],{"__ignoreMap":58},[76,132313,132314,132316],{"class":78,"line":79},[76,132315,131066],{"class":2035},[76,132317,15644],{"class":93},[76,132319,132320,132322,132324,132326],{"class":78,"line":86},[76,132321,131073],{"class":250},[76,132323,51507],{"class":93},[76,132325,23808],{"class":250},[76,132327,1363],{"class":93},[76,132329,132330],{"class":78,"line":97},[76,132331,1637],{"class":93},[76,132333,132334,132336],{"class":78,"line":103},[76,132335,131088],{"class":2035},[76,132337,15644],{"class":93},[76,132339,132340,132342,132344,132346],{"class":78,"line":1273},[76,132341,131073],{"class":250},[76,132343,51507],{"class":93},[76,132345,72592],{"class":250},[76,132347,1363],{"class":93},[76,132349,132350],{"class":78,"line":1287},[76,132351,1637],{"class":93},[169,132353,132355],{"id":132354},"_1113-定位","11.1.3 定位",[22070,132357,132359],{"id":132358},"_11131-使用场景","11.1.3.1 使用场景",[14,132361,132362],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132364,132365],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22070,132367,132369],{"id":132368},"_11132-定位组成","11.1.3.2 定位组成",[14,132371,132372],{},"定位 = 定位模式 + 边偏移",[152,132374,132375],{},[155,132376,132377,132380,132381],{},[350,132378,132379],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[350,132382,132383],{},"定位模式",[67,132385,132387],{"className":126593,"code":132386,"language":126595,"meta":58,"style":58},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[73,132388,132389,132395,132409,132426,132443],{"__ignoreMap":58},[76,132390,132391,132393],{"class":78,"line":79},[76,132392,130441],{"class":2035},[76,132394,15644],{"class":93},[76,132396,132397,132400,132402,132404,132406],{"class":78,"line":86},[76,132398,132399],{"class":250},"  position",[76,132401,51507],{"class":93},[76,132403,54834],{"class":250},[76,132405,130456],{"class":93},[76,132407,132408],{"class":82},"\u002F* 定位模式 *\u002F\n",[76,132410,132411,132414,132416,132418,132420,132423],{"class":78,"line":97},[76,132412,132413],{"class":250},"  top",[76,132415,51507],{"class":93},[76,132417,646],{"class":250},[76,132419,51562],{"class":89},[76,132421,132422],{"class":93},";           ",[76,132424,132425],{"class":82},"\u002F* 边偏移：上 *\u002F\n",[76,132427,132428,132431,132433,132435,132437,132440],{"class":78,"line":103},[76,132429,132430],{"class":250},"  left",[76,132432,51507],{"class":93},[76,132434,899],{"class":250},[76,132436,51562],{"class":89},[76,132438,132439],{"class":93},";          ",[76,132441,132442],{"class":82},"\u002F* 边偏移：左 *\u002F\n",[76,132444,132445],{"class":78,"line":1273},[76,132446,1637],{"class":93},[338,132448,132449,132458],{},[341,132450,132451],{},[344,132452,132453,132455],{},[347,132454,353],{"align":23808},[347,132456,132457],{"align":23808},"语义",[385,132459,132460,132467,132474,132481],{},[344,132461,132462,132464],{},[390,132463,132046],{"align":23808},[390,132465,132466],{"align":23808},"静态定位",[344,132468,132469,132471],{},[390,132470,54834],{"align":23808},[390,132472,132473],{"align":23808},"相对定位",[344,132475,132476,132478],{},[390,132477,54901],{"align":23808},[390,132479,132480],{"align":23808},"绝对定位",[344,132482,132483,132485],{},[390,132484,86303],{"align":23808},[390,132486,132487],{"align":23808},"固定定位",[14,132489,132490],{},"（1）静态定位：",[1206,132492,132493,132504],{},[155,132494,132495,132496,132499,132500,132503],{},"静态定位是元素的 ",[350,132497,132498],{},"默认定位方式"," ， ",[350,132501,132502],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[155,132505,5253],{},[67,132507,132508],{"className":126593,"code":132386,"language":126595,"meta":58,"style":58},[73,132509,132510,132516,132528,132542,132556],{"__ignoreMap":58},[76,132511,132512,132514],{"class":78,"line":79},[76,132513,130441],{"class":2035},[76,132515,15644],{"class":93},[76,132517,132518,132520,132522,132524,132526],{"class":78,"line":86},[76,132519,132399],{"class":250},[76,132521,51507],{"class":93},[76,132523,54834],{"class":250},[76,132525,130456],{"class":93},[76,132527,132408],{"class":82},[76,132529,132530,132532,132534,132536,132538,132540],{"class":78,"line":97},[76,132531,132413],{"class":250},[76,132533,51507],{"class":93},[76,132535,646],{"class":250},[76,132537,51562],{"class":89},[76,132539,132422],{"class":93},[76,132541,132425],{"class":82},[76,132543,132544,132546,132548,132550,132552,132554],{"class":78,"line":103},[76,132545,132430],{"class":250},[76,132547,51507],{"class":93},[76,132549,899],{"class":250},[76,132551,51562],{"class":89},[76,132553,132439],{"class":93},[76,132555,132442],{"class":82},[76,132557,132558],{"class":78,"line":1273},[76,132559,1637],{"class":93},[1206,132561,132562,132565],{},[155,132563,132564],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[155,132566,132567],{},"静态定位在布局时我们几乎不用的",[14,132569,132570],{},"（2）相对定位",[1206,132572,132573,132580],{},[155,132574,132575,132576,132579],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[350,132577,132578],{},"原来的位置"," 来说的（自恋型）",[155,132581,5253],{},[67,132583,132584],{"className":126593,"code":132386,"language":126595,"meta":58,"style":58},[73,132585,132586,132592,132604,132618,132632],{"__ignoreMap":58},[76,132587,132588,132590],{"class":78,"line":79},[76,132589,130441],{"class":2035},[76,132591,15644],{"class":93},[76,132593,132594,132596,132598,132600,132602],{"class":78,"line":86},[76,132595,132399],{"class":250},[76,132597,51507],{"class":93},[76,132599,54834],{"class":250},[76,132601,130456],{"class":93},[76,132603,132408],{"class":82},[76,132605,132606,132608,132610,132612,132614,132616],{"class":78,"line":97},[76,132607,132413],{"class":250},[76,132609,51507],{"class":93},[76,132611,646],{"class":250},[76,132613,51562],{"class":89},[76,132615,132422],{"class":93},[76,132617,132425],{"class":82},[76,132619,132620,132622,132624,132626,132628,132630],{"class":78,"line":103},[76,132621,132430],{"class":250},[76,132623,51507],{"class":93},[76,132625,899],{"class":250},[76,132627,51562],{"class":89},[76,132629,132439],{"class":93},[76,132631,132442],{"class":82},[76,132633,132634],{"class":78,"line":1273},[76,132635,1637],{"class":93},[1206,132637,132638],{},[155,132639,132640,132641,132643,132644,132646,132647,132650,132651,132654,132655,132657,132658,132661],{},"相对定位的特点：",[53786,132642],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53786,132645],{},"  ② ",[350,132648,132649],{},"原来"," 在标准流的 ",[350,132652,132653],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53786,132656],{},"  ③因此， ",[350,132659,132660],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132663,132664],{},"（3）绝对定位",[1206,132666,132667,132676],{},[155,132668,132669,132671,132672,132675],{},[350,132670,132480],{}," 是元素在移动位置的时候，是相对于它 ",[350,132673,132674],{},"祖先元素"," 来说的（拼爹型）",[155,132677,5253],{},[67,132679,132680],{"className":126593,"code":132386,"language":126595,"meta":58,"style":58},[73,132681,132682,132688,132700,132714,132728],{"__ignoreMap":58},[76,132683,132684,132686],{"class":78,"line":79},[76,132685,130441],{"class":2035},[76,132687,15644],{"class":93},[76,132689,132690,132692,132694,132696,132698],{"class":78,"line":86},[76,132691,132399],{"class":250},[76,132693,51507],{"class":93},[76,132695,54834],{"class":250},[76,132697,130456],{"class":93},[76,132699,132408],{"class":82},[76,132701,132702,132704,132706,132708,132710,132712],{"class":78,"line":97},[76,132703,132413],{"class":250},[76,132705,51507],{"class":93},[76,132707,646],{"class":250},[76,132709,51562],{"class":89},[76,132711,132422],{"class":93},[76,132713,132425],{"class":82},[76,132715,132716,132718,132720,132722,132724,132726],{"class":78,"line":103},[76,132717,132430],{"class":250},[76,132719,51507],{"class":93},[76,132721,899],{"class":250},[76,132723,51562],{"class":89},[76,132725,132439],{"class":93},[76,132727,132442],{"class":82},[76,132729,132730],{"class":78,"line":1273},[76,132731,1637],{"class":93},[1206,132733,132734,132749,132758,132761],{},[155,132735,132736,132737,132739,132740,132742,132743,132745,132746,132748],{},"绝对定位的特点：",[53786,132738],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53786,132741],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53786,132744],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53786,132747],{},"  (4)固定定位",[155,132750,132751,132753,132754,132757],{},[350,132752,132487],{}," 是元素 ",[350,132755,132756],{},"固定于浏览器可视区的位置"," 。（认死理型）",[155,132759,132760],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[155,132762,132763],{},"语法:",[67,132765,132766],{"className":126593,"code":132386,"language":126595,"meta":58,"style":58},[73,132767,132768,132774,132786,132800,132814],{"__ignoreMap":58},[76,132769,132770,132772],{"class":78,"line":79},[76,132771,130441],{"class":2035},[76,132773,15644],{"class":93},[76,132775,132776,132778,132780,132782,132784],{"class":78,"line":86},[76,132777,132399],{"class":250},[76,132779,51507],{"class":93},[76,132781,54834],{"class":250},[76,132783,130456],{"class":93},[76,132785,132408],{"class":82},[76,132787,132788,132790,132792,132794,132796,132798],{"class":78,"line":97},[76,132789,132413],{"class":250},[76,132791,51507],{"class":93},[76,132793,646],{"class":250},[76,132795,51562],{"class":89},[76,132797,132422],{"class":93},[76,132799,132425],{"class":82},[76,132801,132802,132804,132806,132808,132810,132812],{"class":78,"line":103},[76,132803,132430],{"class":250},[76,132805,51507],{"class":93},[76,132807,899],{"class":250},[76,132809,51562],{"class":89},[76,132811,132439],{"class":93},[76,132813,132442],{"class":82},[76,132815,132816],{"class":78,"line":1273},[76,132817,1637],{"class":93},[1206,132819,132820,132829],{},[155,132821,132822,132823,132825,132826,132828],{},"特点:",[53786,132824],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53786,132827],{},"  ②固定定位不再占有原先的位置,完全脱标",[155,132830,132831,132832,132834,132835,132837,132838,132840],{},"固定在版心位置的方法:",[53786,132833],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53786,132836],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53786,132839],{},"  实例：",[67,132842,132843],{"className":126593,"code":132386,"language":126595,"meta":58,"style":58},[73,132844,132845,132851,132863,132877,132891],{"__ignoreMap":58},[76,132846,132847,132849],{"class":78,"line":79},[76,132848,130441],{"class":2035},[76,132850,15644],{"class":93},[76,132852,132853,132855,132857,132859,132861],{"class":78,"line":86},[76,132854,132399],{"class":250},[76,132856,51507],{"class":93},[76,132858,54834],{"class":250},[76,132860,130456],{"class":93},[76,132862,132408],{"class":82},[76,132864,132865,132867,132869,132871,132873,132875],{"class":78,"line":97},[76,132866,132413],{"class":250},[76,132868,51507],{"class":93},[76,132870,646],{"class":250},[76,132872,51562],{"class":89},[76,132874,132422],{"class":93},[76,132876,132425],{"class":82},[76,132878,132879,132881,132883,132885,132887,132889],{"class":78,"line":103},[76,132880,132430],{"class":250},[76,132882,51507],{"class":93},[76,132884,899],{"class":250},[76,132886,51562],{"class":89},[76,132888,132439],{"class":93},[76,132890,132442],{"class":82},[76,132892,132893],{"class":78,"line":1273},[76,132894,1637],{"class":93},[56,132896],{"style":126449,"src":132897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132899,132900],{},"(5)粘性定位",[1206,132902,132903,132906],{},[155,132904,132905],{},"粘性定位可以被认为是相对定位和固定定位的混合",[155,132907,5253],{},[67,132909,132910],{"className":126593,"code":132386,"language":126595,"meta":58,"style":58},[73,132911,132912,132918,132930,132944,132958],{"__ignoreMap":58},[76,132913,132914,132916],{"class":78,"line":79},[76,132915,130441],{"class":2035},[76,132917,15644],{"class":93},[76,132919,132920,132922,132924,132926,132928],{"class":78,"line":86},[76,132921,132399],{"class":250},[76,132923,51507],{"class":93},[76,132925,54834],{"class":250},[76,132927,130456],{"class":93},[76,132929,132408],{"class":82},[76,132931,132932,132934,132936,132938,132940,132942],{"class":78,"line":97},[76,132933,132413],{"class":250},[76,132935,51507],{"class":93},[76,132937,646],{"class":250},[76,132939,51562],{"class":89},[76,132941,132422],{"class":93},[76,132943,132425],{"class":82},[76,132945,132946,132948,132950,132952,132954,132956],{"class":78,"line":103},[76,132947,132430],{"class":250},[76,132949,51507],{"class":93},[76,132951,899],{"class":250},[76,132953,51562],{"class":89},[76,132955,132439],{"class":93},[76,132957,132442],{"class":82},[76,132959,132960],{"class":78,"line":1273},[76,132961,1637],{"class":93},[1206,132963,132964],{},[155,132965,132966,132967,132969,132970,132972,132973,132975,132976,132979,132980,132982],{},"粘性定位的特点：",[53786,132968],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53786,132971],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53786,132974],{},"  ③必须添加 top 、left、right、bottom ",[350,132977,132978],{},"其中一个"," 才有效",[53786,132981],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[67,132984,132985],{"className":126593,"code":132386,"language":126595,"meta":58,"style":58},[73,132986,132987,132993,133005,133019,133033],{"__ignoreMap":58},[76,132988,132989,132991],{"class":78,"line":79},[76,132990,130441],{"class":2035},[76,132992,15644],{"class":93},[76,132994,132995,132997,132999,133001,133003],{"class":78,"line":86},[76,132996,132399],{"class":250},[76,132998,51507],{"class":93},[76,133000,54834],{"class":250},[76,133002,130456],{"class":93},[76,133004,132408],{"class":82},[76,133006,133007,133009,133011,133013,133015,133017],{"class":78,"line":97},[76,133008,132413],{"class":250},[76,133010,51507],{"class":93},[76,133012,646],{"class":250},[76,133014,51562],{"class":89},[76,133016,132422],{"class":93},[76,133018,132425],{"class":82},[76,133020,133021,133023,133025,133027,133029,133031],{"class":78,"line":103},[76,133022,132430],{"class":250},[76,133024,51507],{"class":93},[76,133026,899],{"class":250},[76,133028,51562],{"class":89},[76,133030,132439],{"class":93},[76,133032,132442],{"class":82},[76,133034,133035],{"class":78,"line":1273},[76,133036,1637],{"class":93},[56,133038],{"style":126449,"src":133039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133041,133042],{},"(6)总结",[338,133044,133045,133060],{},[341,133046,133047],{},[344,133048,133049,133051,133054,133057],{},[347,133050,132383],{"align":23808},[347,133052,133053],{"align":23808},"是否脱标",[347,133055,133056],{"align":23808},"移动位置",[347,133058,133059],{"align":23808},"是否常用",[385,133061,133062,133075,133089,133103,133116],{},[344,133063,133064,133067,133069,133072],{},[390,133065,133066],{"align":23808},"Static 静态定位",[390,133068,104719],{"align":23808},[390,133070,133071],{"align":23808},"不能使用边偏移",[390,133073,133074],{"align":23808},"很少",[344,133076,133077,133080,133083,133086],{},[390,133078,133079],{"align":23808},"Relative 相对定位",[390,133081,133082],{"align":23808},"否(占有位置)",[390,133084,133085],{"align":23808},"相对于自身位置移动",[390,133087,133088],{"align":23808},"基本单独使用",[344,133090,133091,133094,133097,133100],{},[390,133092,133093],{"align":23808},"Absolute 绝对定位",[390,133095,133096],{"align":23808},"是(不占有位置)",[390,133098,133099],{"align":23808},"带有定位的父级",[390,133101,133102],{"align":23808},"要和定位父级元素搭配使用",[344,133104,133105,133108,133110,133113],{},[390,133106,133107],{"align":23808},"Fixed 固定定位",[390,133109,133096],{"align":23808},[390,133111,133112],{"align":23808},"浏览器可视区",[390,133114,133115],{"align":23808},"单独使用,不需要父级",[344,133117,133118,133121,133123,133125],{},[390,133119,133120],{"align":23808},"Sticky 粘性定位",[390,133122,133082],{"align":23808},[390,133124,133112],{"align":23808},[390,133126,133127],{"align":23808},"当前阶段少",[152,133129,133130],{"start":86},[155,133131,133132,133135],{},[350,133133,133134],{},"边偏移"," 则决定了该元素的最终位置",[338,133137,133138,133149],{},[341,133139,133140],{},[344,133141,133142,133145,133147],{},[347,133143,133144],{"align":23808},"边偏移属性",[347,133146,27565],{"align":23808},[347,133148,27562],{"align":23808},[385,133150,133151,133162,133173,133183],{},[344,133152,133153,133156,133159],{},[390,133154,133155],{"align":23808},"top",[390,133157,133158],{"align":23808},"top: 80px;",[390,133160,133161],{"align":23808},"顶端偏移量，定义元素相对于父元素上边线的距离",[344,133163,133164,133167,133170],{},[390,133165,133166],{"align":23808},"bottom",[390,133168,133169],{"align":23808},"bottom: 80px ;",[390,133171,133172],{"align":23808},"底部偏移量，定义元素相对于其父元素下边线的距离",[344,133174,133175,133177,133180],{},[390,133176,23808],{"align":23808},[390,133178,133179],{"align":23808},"left: 80px ;",[390,133181,133182],{"align":23808},"左侧偏移量，定义元素相对于其父元素左边线的距离",[344,133184,133185,133187,133190],{},[390,133186,72592],{"align":23808},[390,133188,133189],{"align":23808},"right: 80px ;",[390,133191,133192],{"align":23808},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1206,133194,133195],{},[155,133196,9097,133197,133199,133200,133202,133203,133205,133206,133209,133210,133212,133213,133215],{},[53786,133198],{},"  ① ",[350,133201,133134],{}," 需要和 ",[350,133204,132383],{}," 联合使用， ",[350,133207,133208],{},"单独使用无效"," ；",[53786,133211],{},"  ②top和bottom不要同时使用",[53786,133214],{},"  ③left和right不要同时使用",[22070,133217,133219],{"id":133218},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133221,133222],{},"子级是绝对定位的话，父级要用相对定位",[1206,133224,133225,133228,133231,133234],{},[155,133226,133227],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[155,133229,133230],{},"父盒子需要加定位限制子盒子在父盒子内显示",[155,133232,133233],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[155,133235,133236,133237,133240],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[350,133238,133239],{},"子绝父绝"," 也会遇到",[22070,133242,133244],{"id":133243},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1206,133246,133247,133262],{},[155,133248,133249,133250,133253,133254,133257,133258,133261],{},"在使用 ",[350,133251,133252],{},"定位"," 布局时，可能会 ",[350,133255,133256],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[350,133259,133260],{},"z-index"," 来控制盒子的前后次序 (z轴)",[155,133263,5253],{},[67,133265,133266],{"className":126593,"code":132386,"language":126595,"meta":58,"style":58},[73,133267,133268,133274,133286,133300,133314],{"__ignoreMap":58},[76,133269,133270,133272],{"class":78,"line":79},[76,133271,130441],{"class":2035},[76,133273,15644],{"class":93},[76,133275,133276,133278,133280,133282,133284],{"class":78,"line":86},[76,133277,132399],{"class":250},[76,133279,51507],{"class":93},[76,133281,54834],{"class":250},[76,133283,130456],{"class":93},[76,133285,132408],{"class":82},[76,133287,133288,133290,133292,133294,133296,133298],{"class":78,"line":97},[76,133289,132413],{"class":250},[76,133291,51507],{"class":93},[76,133293,646],{"class":250},[76,133295,51562],{"class":89},[76,133297,132422],{"class":93},[76,133299,132425],{"class":82},[76,133301,133302,133304,133306,133308,133310,133312],{"class":78,"line":103},[76,133303,132430],{"class":250},[76,133305,51507],{"class":93},[76,133307,899],{"class":250},[76,133309,51562],{"class":89},[76,133311,132439],{"class":93},[76,133313,132442],{"class":82},[76,133315,133316],{"class":78,"line":1273},[76,133317,1637],{"class":93},[1206,133319,133320],{},[155,133321,133322,133323,133199,133325,133327,133328,127756,133331,82609,133334,133336,133337,133339,133340,133343,133344,133209,133347,133349,133350,133353,133355],{},"z-index的特性",[53786,133324],{},[350,133326,127057],{}," ： ",[350,133329,133330],{},"正整数",[350,133332,133333],{},"负整数",[350,133335,392],{}," ，默认值是 0，数值越大，盒子越靠上；",[53786,133338],{},"  ②如果 ",[350,133341,133342],{},"属性值相同"," ，则按照书写顺序， ",[350,133345,133346],{},"后来居上",[53786,133348],{},"  ③数字后面 ",[350,133351,133352],{},"不能加单位",[53786,133354],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22070,133357,133359],{"id":133358},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133361,133362],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133364,133365],{},"方法:",[1206,133367,133368,133378],{},[155,133369,133370,133371,133374,133375],{},"left: 50%; 让 ",[350,133372,133373],{},"盒子的左侧"," 移动到 ",[350,133376,133377],{},"父级元素的水平中心位置",[155,133379,133380,133381,133384,133385],{},"margin-left: -100px; 让盒子 ",[350,133382,133383],{},"向左"," 移动 ",[350,133386,133387],{},"自身宽度的一半",[22070,133389,133391],{"id":133390},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[152,133393,133394,133397],{},[155,133395,133396],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[155,133398,133399],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133401,133402],{},"也就是说绝对定位和固定定位和浮动类似",[152,133404,133405],{"start":97},[155,133406,133407],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1206,133409,133410,133413,133416],{},[155,133411,133412],{},"可以用inline-block 转换为行内块",[155,133414,133415],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[155,133417,133418],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133420,133421],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22070,133423,133425],{"id":133424},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[152,133427,133428,133431,133434,133437],{},[155,133429,133430],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[155,133432,133433],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[155,133435,133436],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[155,133438,133439],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[67,133441,133442],{"className":126593,"code":131059,"language":126595,"meta":58,"style":58},[73,133443,133444,133450,133460,133464,133470,133480],{"__ignoreMap":58},[76,133445,133446,133448],{"class":78,"line":79},[76,133447,131066],{"class":2035},[76,133449,15644],{"class":93},[76,133451,133452,133454,133456,133458],{"class":78,"line":86},[76,133453,131073],{"class":250},[76,133455,51507],{"class":93},[76,133457,23808],{"class":250},[76,133459,1363],{"class":93},[76,133461,133462],{"class":78,"line":97},[76,133463,1637],{"class":93},[76,133465,133466,133468],{"class":78,"line":103},[76,133467,131088],{"class":2035},[76,133469,15644],{"class":93},[76,133471,133472,133474,133476,133478],{"class":78,"line":1273},[76,133473,131073],{"class":250},[76,133475,51507],{"class":93},[76,133477,72592],{"class":250},[76,133479,1363],{"class":93},[76,133481,133482],{"class":78,"line":1287},[76,133483,1637],{"class":93},[56,133485],{"style":126449,"src":133486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22070,133488,133490],{"id":133489},"_11138-轮播图","11.1.3.8 轮播图",[56,133492],{"style":126449,"src":133493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[152,133495,133496],{},[155,133497,133498],{},"制作顺序:",[1206,133500,133501,133504,133507,133516],{},[155,133502,133503],{},"大盒子我们类名为： tb-promo 淘宝广告",[155,133505,133506],{},"里面先放一张图片",[155,133508,133509,133510,133512,133513,133515],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53786,133511],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53786,133514],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[155,133517,133518,133519,133521,133522,133524],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53786,133520],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53786,133523],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[152,133526,133527],{"start":86},[155,133528,133529],{},"代码模块",[67,133531,133533],{"className":126593,"code":133532,"language":126595,"meta":58,"style":58},"\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",[73,133534,133535,133540,133547,133557,133567,133577,133581,133586,133593,133603],{"__ignoreMap":58},[76,133536,133537],{"class":78,"line":79},[76,133538,133539],{"class":82},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[76,133541,133542,133545],{"class":78,"line":86},[76,133543,133544],{"class":2035},".son",[76,133546,15644],{"class":93},[76,133548,133549,133551,133553,133555],{"class":78,"line":97},[76,133550,132399],{"class":250},[76,133552,51507],{"class":93},[76,133554,54901],{"class":250},[76,133556,1363],{"class":93},[76,133558,133559,133561,133563,133565],{"class":78,"line":103},[76,133560,132413],{"class":250},[76,133562,51507],{"class":93},[76,133564,392],{"class":250},[76,133566,1363],{"class":93},[76,133568,133569,133571,133573,133575],{"class":78,"line":1273},[76,133570,132430],{"class":250},[76,133572,51507],{"class":93},[76,133574,392],{"class":250},[76,133576,1363],{"class":93},[76,133578,133579],{"class":78,"line":1287},[76,133580,1637],{"class":93},[76,133582,133583],{"class":78,"line":1293},[76,133584,133585],{"class":82},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[76,133587,133588,133591],{"class":78,"line":1384},[76,133589,133590],{"class":2035},".father",[76,133592,15644],{"class":93},[76,133594,133595,133597,133599,133601],{"class":78,"line":1390},[76,133596,132399],{"class":250},[76,133598,51507],{"class":93},[76,133600,54834],{"class":250},[76,133602,1363],{"class":93},[76,133604,133605],{"class":78,"line":1402},[76,133606,1637],{"class":93},[14,133608,133609],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[169,133611,133613],{"id":133612},"_1114-定位数值的移动","11.1.4 定位数值的移动",[56,133615],{"style":126449,"src":133616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133618,133619],{},"✨ 黄金口诀：",[14,133621,133622],{},"\"TOP正下负上，LEFT正右负左\"",[14,133624,133625],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133627,133628],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133630,133631],{},"✨ 简单记：",[14,133633,133634],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[117,133636,133637],{},"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":58,"searchDepth":86,"depth":86,"links":133639},[133640],{"id":132167,"depth":86,"text":132168,"children":133641},[133642,133643,133644,133645],{"id":132171,"depth":97,"text":132172},{"id":132186,"depth":97,"text":132187},{"id":132354,"depth":97,"text":132355},{"id":133612,"depth":97,"text":133613},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132159,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133652,"title":133653,"body":133654,"description":122,"extension":123,"meta":135077,"navigation":125,"path":135078,"seo":135079,"stem":135080,"__hash__":135081},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133655,"toc":135056},[133656,133659,133663,133671,133675,133680,133688,133700,133704,133709,133717,133728,133732,133737,133778,133786,133790,133793,133796,133799,133893,133896,133990,133993,134087,134090,134093,134128,134131,134134,134164,134167,134170,134173,134176,134179,134182,134185,134255,134258,134262,134266,134307,134311,134317,134320,134323,134327,134330,134333,134336,134417,134420,134423,134427,134431,134434,134437,134440,134443,134446,134452,134461,134465,134484,134488,134498,134501,134504,134507,134510,134513,134516,134519,134522,134531,134535,134544,134547,134552,134605,134610,134776,134779,134782,134787,134790,134793,134796,134799,134804,134952,134955,134958,134963,134966,134971,135005,135008,135011,135015,135018,135025,135028,135031,135034,135037,135040,135043,135046,135050,135053],[10,133657,133653],{"id":133658},"_12-显示隐藏与图形资源",[140,133660,133662],{"id":133661},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1206,133664,133665,133668],{},[155,133666,133667],{},"目的:让一个元素在页面中消失或者显示出来",[155,133669,133670],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[169,133672,133674],{"id":133673},"_1211-display-显示","12.1.1 display 显示",[152,133676,133677],{},[155,133678,133679],{},"display 设置或检索对象是否及如何显示",[1206,133681,133682,133685],{},[155,133683,133684],{},"display: none;隐藏对象",[155,133686,133687],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[152,133689,133690,133697],{"start":86},[155,133691,133692,133693,133696],{},"特点： display 隐藏元素后， ",[350,133694,133695],{},"不再占"," 有原来的位置",[155,133698,133699],{},"在js中使用非常的广泛",[169,133701,133703],{"id":133702},"_1212-visibility可见性","12.1.2 visibility可见性",[152,133705,133706],{},[155,133707,133708],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1206,133710,133711,133714],{},[155,133712,133713],{},"visibility： visible；元素可见",[155,133715,133716],{},"visibility：hidden；元素隐藏",[152,133718,133719,133722,133725],{"start":86},[155,133720,133721],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[155,133723,133724],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[155,133726,133727],{},"隐藏后继续占有原有位置",[169,133729,133731],{"id":133730},"_1213-overflow溢出","12.1.3 overflow溢出",[1206,133733,133734],{},[155,133735,133736],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[338,133738,133739,133747],{},[341,133740,133741],{},[344,133742,133743,133745],{},[347,133744,127057],{"align":23808},[347,133746,27562],{"align":23808},[385,133748,133749,133757,133764,133771],{},[344,133750,133751,133754],{},[390,133752,133753],{"align":23808},"visible",[390,133755,133756],{"align":23808},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[344,133758,133759,133761],{},[390,133760,61784],{"align":23808},[390,133762,133763],{"align":23808},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[344,133765,133766,133768],{},[390,133767,129013],{"align":23808},[390,133769,133770],{"align":23808},"不管超出内容否，总是显示滚动条",[344,133772,133773,133775],{},[390,133774,72733],{"align":23808},[390,133776,133777],{"align":23808},"超出自动显示滚动条，不超出不显示滚动条",[1206,133779,133780,133783],{},[155,133781,133782],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[155,133784,133785],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[169,133787,133789],{"id":133788},"_1214-案例收获","12.1.4 案例收获",[56,133791],{"style":126449,"src":133792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133794,133795],{},"问题：没做出来动态效果，使用hover没实现",[14,133797,133798],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[67,133800,133801],{"className":126593,"code":132025,"language":126595,"meta":58,"style":58},[73,133802,133803,133807,133821,133825,133839,133843,133857,133861,133875,133879],{"__ignoreMap":58},[76,133804,133805],{"class":78,"line":79},[76,133806,132032],{"class":82},[76,133808,133809,133811,133813,133815,133817,133819],{"class":78,"line":86},[76,133810,132037],{"class":2035},[76,133812,79877],{"class":93},[76,133814,128953],{"class":250},[76,133816,51507],{"class":93},[76,133818,132046],{"class":250},[76,133820,129523],{"class":93},[76,133822,133823],{"class":78,"line":97},[76,133824,132053],{"class":82},[76,133826,133827,133829,133831,133833,133835,133837],{"class":78,"line":103},[76,133828,132058],{"class":2035},[76,133830,79877],{"class":93},[76,133832,128953],{"class":250},[76,133834,51507],{"class":93},[76,133836,54834],{"class":250},[76,133838,129523],{"class":93},[76,133840,133841],{"class":78,"line":1273},[76,133842,132073],{"class":82},[76,133844,133845,133847,133849,133851,133853,133855],{"class":78,"line":1287},[76,133846,132078],{"class":2035},[76,133848,79877],{"class":93},[76,133850,128953],{"class":250},[76,133852,51507],{"class":93},[76,133854,54901],{"class":250},[76,133856,129523],{"class":93},[76,133858,133859],{"class":78,"line":1293},[76,133860,132093],{"class":82},[76,133862,133863,133865,133867,133869,133871,133873],{"class":78,"line":1384},[76,133864,132098],{"class":2035},[76,133866,79877],{"class":93},[76,133868,128953],{"class":250},[76,133870,51507],{"class":93},[76,133872,86303],{"class":250},[76,133874,129523],{"class":93},[76,133876,133877],{"class":78,"line":1390},[76,133878,132113],{"class":82},[76,133880,133881,133883,133885,133887,133889,133891],{"class":78,"line":1402},[76,133882,132118],{"class":2035},[76,133884,79877],{"class":93},[76,133886,128953],{"class":250},[76,133888,51507],{"class":93},[76,133890,132127],{"class":250},[76,133892,129523],{"class":93},[14,133894,133895],{},"完整代码：",[67,133897,133898],{"className":126593,"code":132025,"language":126595,"meta":58,"style":58},[73,133899,133900,133904,133918,133922,133936,133940,133954,133958,133972,133976],{"__ignoreMap":58},[76,133901,133902],{"class":78,"line":79},[76,133903,132032],{"class":82},[76,133905,133906,133908,133910,133912,133914,133916],{"class":78,"line":86},[76,133907,132037],{"class":2035},[76,133909,79877],{"class":93},[76,133911,128953],{"class":250},[76,133913,51507],{"class":93},[76,133915,132046],{"class":250},[76,133917,129523],{"class":93},[76,133919,133920],{"class":78,"line":97},[76,133921,132053],{"class":82},[76,133923,133924,133926,133928,133930,133932,133934],{"class":78,"line":103},[76,133925,132058],{"class":2035},[76,133927,79877],{"class":93},[76,133929,128953],{"class":250},[76,133931,51507],{"class":93},[76,133933,54834],{"class":250},[76,133935,129523],{"class":93},[76,133937,133938],{"class":78,"line":1273},[76,133939,132073],{"class":82},[76,133941,133942,133944,133946,133948,133950,133952],{"class":78,"line":1287},[76,133943,132078],{"class":2035},[76,133945,79877],{"class":93},[76,133947,128953],{"class":250},[76,133949,51507],{"class":93},[76,133951,54901],{"class":250},[76,133953,129523],{"class":93},[76,133955,133956],{"class":78,"line":1293},[76,133957,132093],{"class":82},[76,133959,133960,133962,133964,133966,133968,133970],{"class":78,"line":1384},[76,133961,132098],{"class":2035},[76,133963,79877],{"class":93},[76,133965,128953],{"class":250},[76,133967,51507],{"class":93},[76,133969,86303],{"class":250},[76,133971,129523],{"class":93},[76,133973,133974],{"class":78,"line":1390},[76,133975,132113],{"class":82},[76,133977,133978,133980,133982,133984,133986,133988],{"class":78,"line":1402},[76,133979,132118],{"class":2035},[76,133981,79877],{"class":93},[76,133983,128953],{"class":250},[76,133985,51507],{"class":93},[76,133987,132127],{"class":250},[76,133989,129523],{"class":93},[14,133991,133992],{},"分布思路重点详解：",[67,133994,133995],{"className":126593,"code":132025,"language":126595,"meta":58,"style":58},[73,133996,133997,134001,134015,134019,134033,134037,134051,134055,134069,134073],{"__ignoreMap":58},[76,133998,133999],{"class":78,"line":79},[76,134000,132032],{"class":82},[76,134002,134003,134005,134007,134009,134011,134013],{"class":78,"line":86},[76,134004,132037],{"class":2035},[76,134006,79877],{"class":93},[76,134008,128953],{"class":250},[76,134010,51507],{"class":93},[76,134012,132046],{"class":250},[76,134014,129523],{"class":93},[76,134016,134017],{"class":78,"line":97},[76,134018,132053],{"class":82},[76,134020,134021,134023,134025,134027,134029,134031],{"class":78,"line":103},[76,134022,132058],{"class":2035},[76,134024,79877],{"class":93},[76,134026,128953],{"class":250},[76,134028,51507],{"class":93},[76,134030,54834],{"class":250},[76,134032,129523],{"class":93},[76,134034,134035],{"class":78,"line":1273},[76,134036,132073],{"class":82},[76,134038,134039,134041,134043,134045,134047,134049],{"class":78,"line":1287},[76,134040,132078],{"class":2035},[76,134042,79877],{"class":93},[76,134044,128953],{"class":250},[76,134046,51507],{"class":93},[76,134048,54901],{"class":250},[76,134050,129523],{"class":93},[76,134052,134053],{"class":78,"line":1293},[76,134054,132093],{"class":82},[76,134056,134057,134059,134061,134063,134065,134067],{"class":78,"line":1384},[76,134058,132098],{"class":2035},[76,134060,79877],{"class":93},[76,134062,128953],{"class":250},[76,134064,51507],{"class":93},[76,134066,86303],{"class":250},[76,134068,129523],{"class":93},[76,134070,134071],{"class":78,"line":1390},[76,134072,132113],{"class":82},[76,134074,134075,134077,134079,134081,134083,134085],{"class":78,"line":1402},[76,134076,132118],{"class":2035},[76,134078,79877],{"class":93},[76,134080,128953],{"class":250},[76,134082,51507],{"class":93},[76,134084,132127],{"class":250},[76,134086,129523],{"class":93},[56,134088],{"style":126449,"src":134089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134091,134092],{},"图片太大，盒子太小，此时需要修改图片的大小",[67,134094,134096],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[73,134097,134098],{"__ignoreMap":58},[76,134099,134100,134102,134104,134106,134108,134111,134113,134115,134118,134121,134123,134126],{"class":78,"line":79},[76,134101,1109],{"class":93},[76,134103,56],{"class":51370},[76,134105,55309],{"class":2035},[76,134107,247],{"class":93},[76,134109,134110],{"class":305},"\"images\u002Fpic.jpg\"",[76,134112,55317],{"class":2035},[76,134114,247],{"class":93},[76,134116,134117],{"class":305},"\"描述文字\"",[76,134119,134120],{"class":2035}," title",[76,134122,247],{"class":93},[76,134124,134125],{"class":305},"\"悬停提示\"",[76,134127,51377],{"class":93},[56,134129],{"style":126449,"src":134130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134132,134133],{},"制造遮罩层",[67,134135,134136],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,134137,134138],{"__ignoreMap":58},[76,134139,134140,134142,134144,134146,134148,134150,134152,134154,134156,134158,134160,134162],{"class":78,"line":79},[76,134141,1109],{"class":93},[76,134143,56],{"class":51370},[76,134145,55309],{"class":2035},[76,134147,247],{"class":93},[76,134149,134110],{"class":305},[76,134151,55317],{"class":2035},[76,134153,247],{"class":93},[76,134155,134117],{"class":305},[76,134157,134120],{"class":2035},[76,134159,247],{"class":93},[76,134161,134125],{"class":305},[76,134163,51377],{"class":93},[14,134165,134166],{},"此时是这样的为标准流",[56,134168],{"style":126449,"src":134169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134171,134172],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134174,134175],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134177,134178],{},"让他在中间，用center(background-position)",[14,134180,134181],{},"将需要变的尽可能放到一个盒子中",[14,134183,134184],{},"放大盒子上内部盒子发生变化",[67,134186,134188],{"className":126593,"code":134187,"language":126595,"meta":58,"style":58},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[73,134189,134190,134196,134206,134210,134217,134227,134239,134251],{"__ignoreMap":58},[76,134191,134192,134194],{"class":78,"line":79},[76,134193,127660],{"class":2035},[76,134195,15644],{"class":93},[76,134197,134198,134200,134202,134204],{"class":78,"line":86},[76,134199,132399],{"class":250},[76,134201,51507],{"class":93},[76,134203,54834],{"class":250},[76,134205,1363],{"class":93},[76,134207,134208],{"class":78,"line":97},[76,134209,1637],{"class":93},[76,134211,134212,134215],{"class":78,"line":103},[76,134213,134214],{"class":2035},".child",[76,134216,15644],{"class":93},[76,134218,134219,134221,134223,134225],{"class":78,"line":1273},[76,134220,132399],{"class":250},[76,134222,51507],{"class":93},[76,134224,54901],{"class":250},[76,134226,1363],{"class":93},[76,134228,134229,134231,134233,134235,134237],{"class":78,"line":1287},[76,134230,132413],{"class":250},[76,134232,51507],{"class":93},[76,134234,855],{"class":250},[76,134236,106],{"class":89},[76,134238,1363],{"class":93},[76,134240,134241,134243,134245,134247,134249],{"class":78,"line":1293},[76,134242,132430],{"class":250},[76,134244,51507],{"class":93},[76,134246,855],{"class":250},[76,134248,106],{"class":89},[76,134250,1363],{"class":93},[76,134252,134253],{"class":78,"line":1384},[76,134254,1637],{"class":93},[14,134256,134257],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[140,134259,134261],{"id":134260},"_122-精灵图","12.2 精灵图",[169,134263,134265],{"id":134264},"_1221-理解","12.2.1 理解",[152,134267,134268,134286],{},[155,134269,134270,134271,132499,134274,134277,134278,134281,134282,134285],{},"目的： ",[350,134272,134273],{},"为了有效地减少服务器接收和发送请求的次数",[350,134275,134276],{},"提高"," 页面的 ",[350,134279,134280],{},"加载速度"," ，出现了 ",[350,134283,134284],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[155,134287,134288,134289,134291,134292,134294,134295,134297,134298,134300,134301,134303,134304,134306],{},"使用精灵图核心：",[53786,134290],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53786,134293],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53786,134296],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53786,134299],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53786,134302],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53786,134305],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[169,134308,134310],{"id":134309},"_1222-扒图","12.2.2 扒图",[67,134312,134315],{"className":134313,"code":134314,"language":5259},[5257],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[73,134316,134314],{"__ignoreMap":58},[56,134318],{"style":126449,"src":134319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[56,134321],{"style":126449,"src":134322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[169,134324,134326],{"id":134325},"_1223-精灵图的实现","12.2.3 精灵图的实现",[56,134328],{"style":126449,"src":134329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134331,134332],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[56,134334],{"style":126449,"src":134335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[67,134337,134339],{"className":126593,"code":134338,"language":126595,"meta":58,"style":58},"\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",[73,134340,134341,134346,134353,134365,134377,134396,134413],{"__ignoreMap":58},[76,134342,134343],{"class":78,"line":79},[76,134344,134345],{"class":82},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[76,134347,134348,134351],{"class":78,"line":86},[76,134349,134350],{"class":2035},".icon",[76,134352,15644],{"class":93},[76,134354,134355,134357,134359,134361,134363],{"class":78,"line":97},[76,134356,70638],{"class":250},[76,134358,51507],{"class":93},[76,134360,899],{"class":250},[76,134362,51562],{"class":89},[76,134364,1363],{"class":93},[76,134366,134367,134369,134371,134373,134375],{"class":78,"line":103},[76,134368,70858],{"class":250},[76,134370,51507],{"class":93},[76,134372,899],{"class":250},[76,134374,51562],{"class":89},[76,134376,1363],{"class":93},[76,134378,134379,134381,134383,134385,134387,134390,134392,134394],{"class":78,"line":1273},[76,134380,70681],{"class":250},[76,134382,51507],{"class":93},[76,134384,61796],{"class":250},[76,134386,202],{"class":93},[76,134388,134389],{"class":5288},"sprites.png",[76,134391,13786],{"class":93},[76,134393,61806],{"class":250},[76,134395,1363],{"class":93},[76,134397,134398,134400,134402,134404,134406,134409,134411],{"class":78,"line":1287},[76,134399,128853],{"class":250},[76,134401,51507],{"class":93},[76,134403,51833],{"class":250},[76,134405,51562],{"class":89},[76,134407,134408],{"class":250}," -20",[76,134410,51562],{"class":89},[76,134412,1363],{"class":93},[76,134414,134415],{"class":78,"line":1293},[76,134416,1637],{"class":93},[56,134418],{"style":126449,"src":134419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134421,134422],{},"在前端中坐标轴的正方向是右和下",[140,134424,134426],{"id":134425},"_123-字体图标","12.3 字体图标",[169,134428,134430],{"id":134429},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134432,134433],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134435,134436],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134438,134439],{},"1.图片文件还是比较大的。",[14,134441,134442],{},"2.图片本身放大和缩小会失真。",[14,134444,134445],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134447,134448,134449,25813],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[350,134450,134451],{},"字体图标 iconfont",[14,134453,134454,134457,134458,28458],{},[350,134455,134456],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[350,134459,134460],{},"展示的是图标，本质属于字体",[169,134462,134464],{"id":134463},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1206,134466,134467,134472,134475,134478,134481],{},[155,134468,134469,134471],{},[350,134470,25949],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[155,134473,134474],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[155,134476,134477],{},"兼容性：几乎支持所有的浏览器，请放心使用",[155,134479,134480],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[155,134482,134483],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[169,134485,134487],{"id":134486},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1206,134489,134490],{},[155,134491,134492,134493],{},"icomoon字体库：",[439,134494,134497],{"href":134495,"rel":134496},"http:\u002F\u002Ficomoon.io\u002F",[23937],"http:\u002F\u002Ficomoon.io",[14,134499,134500],{},"进去之后点icomoon app",[56,134502],{"style":126449,"src":134503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134505,134506],{},"可以对其编辑：",[56,134508],{"style":126449,"src":134509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134511,134512],{},"生成字体：",[56,134514],{"style":126449,"src":134515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134517,134518],{},"下载：",[56,134520],{"style":126449,"src":134521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1206,134523,134524],{},[155,134525,134526,134527],{},"阿里iconfont字体库： ",[439,134528,134529],{"href":134529,"rel":134530},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23937],[169,134532,134534],{"id":134533},"_1234-字体图标的引入","12.3.4 字体图标的引入",[152,134536,134537],{},[155,134538,134539,134540,134543],{},"把下载包里面的 ",[350,134541,134542],{},"fonts"," 文件夹放入页面根目录下",[56,134545],{"style":126449,"src":134546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[152,134548,134549],{"start":86},[155,134550,134551],{},"字体文件格式",[338,134553,134554,134563],{},[341,134555,134556],{},[344,134557,134558,134561],{},[347,134559,134560],{"align":23808},"格式",[347,134562,23812],{"align":23808},[385,134564,134565,134575,134585,134595],{},[344,134566,134567,134572],{},[390,134568,134569],{"align":23808},[350,134570,134571],{},".ttf",[390,134573,134574],{"align":23808},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[344,134576,134577,134582],{},[390,134578,134579],{"align":23808},[350,134580,134581],{},".woff",[390,134583,134584],{"align":23808},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[344,134586,134587,134592],{},[390,134588,134589],{"align":23808},[350,134590,134591],{},".eot",[390,134593,134594],{"align":23808},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[344,134596,134597,134602],{},[390,134598,134599],{"align":23808},[350,134600,134601],{},"svg",[390,134603,134604],{"align":23808},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[152,134606,134607],{"start":97},[155,134608,134609],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[67,134611,134613],{"className":126593,"code":134612,"language":126595,"meta":58,"style":58},"\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",[73,134614,134615,134620,134627,134639,134655,134680,134701,134721,134741,134745,134751,134761,134772],{"__ignoreMap":58},[76,134616,134617],{"class":78,"line":79},[76,134618,134619],{"class":82},"\u002F* 引入字体图标 *\u002F\n",[76,134621,134622,134625],{"class":78,"line":86},[76,134623,134624],{"class":89},"@font-face",[76,134626,15644],{"class":93},[76,134628,134629,134632,134634,134637],{"class":78,"line":97},[76,134630,134631],{"class":250},"  font-family",[76,134633,51507],{"class":93},[76,134635,134636],{"class":305},"'icomoon'",[76,134638,1363],{"class":93},[76,134640,134641,134644,134646,134648,134650,134653],{"class":78,"line":103},[76,134642,134643],{"class":250},"  src",[76,134645,51507],{"class":93},[76,134647,61796],{"class":250},[76,134649,202],{"class":93},[76,134651,134652],{"class":305},"'fonts\u002Ficomoon.eot'",[76,134654,2791],{"class":93},[76,134656,134657,134659,134661,134663,134665,134668,134670,134673,134675,134678],{"class":78,"line":1273},[76,134658,134643],{"class":250},[76,134660,51507],{"class":93},[76,134662,61796],{"class":250},[76,134664,202],{"class":93},[76,134666,134667],{"class":305},"'fonts\u002Ficomoon.eot?#iefix'",[76,134669,13786],{"class":93},[76,134671,134672],{"class":250},"format",[76,134674,202],{"class":93},[76,134676,134677],{"class":305},"'embedded-opentype'",[76,134679,38117],{"class":93},[76,134681,134682,134685,134687,134690,134692,134694,134696,134699],{"class":78,"line":1287},[76,134683,134684],{"class":250},"       url",[76,134686,202],{"class":93},[76,134688,134689],{"class":305},"'fonts\u002Ficomoon.woff'",[76,134691,13786],{"class":93},[76,134693,134672],{"class":250},[76,134695,202],{"class":93},[76,134697,134698],{"class":305},"'woff'",[76,134700,38117],{"class":93},[76,134702,134703,134705,134707,134710,134712,134714,134716,134719],{"class":78,"line":1293},[76,134704,134684],{"class":250},[76,134706,202],{"class":93},[76,134708,134709],{"class":305},"'fonts\u002Ficomoon.ttf'",[76,134711,13786],{"class":93},[76,134713,134672],{"class":250},[76,134715,202],{"class":93},[76,134717,134718],{"class":305},"'truetype'",[76,134720,38117],{"class":93},[76,134722,134723,134725,134727,134730,134732,134734,134736,134739],{"class":78,"line":1384},[76,134724,134684],{"class":250},[76,134726,202],{"class":93},[76,134728,134729],{"class":305},"'fonts\u002Ficomoon.svg#icomoon'",[76,134731,13786],{"class":93},[76,134733,134672],{"class":250},[76,134735,202],{"class":93},[76,134737,134738],{"class":305},"'svg'",[76,134740,2791],{"class":93},[76,134742,134743],{"class":78,"line":1390},[76,134744,1637],{"class":93},[76,134746,134747,134749],{"class":78,"line":1402},[76,134748,134350],{"class":2035},[76,134750,15644],{"class":93},[76,134752,134753,134755,134757,134759],{"class":78,"line":1684},[76,134754,134631],{"class":250},[76,134756,51507],{"class":93},[76,134758,134636],{"class":305},[76,134760,1363],{"class":93},[76,134762,134763,134766,134768,134770],{"class":78,"line":1689},[76,134764,134765],{"class":250},"  font-style",[76,134767,51507],{"class":93},[76,134769,63911],{"class":250},[76,134771,1363],{"class":93},[76,134773,134774],{"class":78,"line":1695},[76,134775,1637],{"class":93},[14,134777,134778],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[56,134780],{"style":126449,"src":134781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[152,134783,134784],{"start":103},[155,134785,134786],{},"添加字体",[56,134788],{"style":126449,"src":134789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134791,134792],{},"复制：",[56,134794],{"style":126449,"src":134795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134797,134798],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[152,134800,134801],{"start":1273},[155,134802,134803],{},"代码展示：",[67,134805,134806],{"className":126593,"code":134612,"language":126595,"meta":58,"style":58},[73,134807,134808,134812,134818,134828,134842,134864,134882,134900,134918,134922,134928,134938,134948],{"__ignoreMap":58},[76,134809,134810],{"class":78,"line":79},[76,134811,134619],{"class":82},[76,134813,134814,134816],{"class":78,"line":86},[76,134815,134624],{"class":89},[76,134817,15644],{"class":93},[76,134819,134820,134822,134824,134826],{"class":78,"line":97},[76,134821,134631],{"class":250},[76,134823,51507],{"class":93},[76,134825,134636],{"class":305},[76,134827,1363],{"class":93},[76,134829,134830,134832,134834,134836,134838,134840],{"class":78,"line":103},[76,134831,134643],{"class":250},[76,134833,51507],{"class":93},[76,134835,61796],{"class":250},[76,134837,202],{"class":93},[76,134839,134652],{"class":305},[76,134841,2791],{"class":93},[76,134843,134844,134846,134848,134850,134852,134854,134856,134858,134860,134862],{"class":78,"line":1273},[76,134845,134643],{"class":250},[76,134847,51507],{"class":93},[76,134849,61796],{"class":250},[76,134851,202],{"class":93},[76,134853,134667],{"class":305},[76,134855,13786],{"class":93},[76,134857,134672],{"class":250},[76,134859,202],{"class":93},[76,134861,134677],{"class":305},[76,134863,38117],{"class":93},[76,134865,134866,134868,134870,134872,134874,134876,134878,134880],{"class":78,"line":1287},[76,134867,134684],{"class":250},[76,134869,202],{"class":93},[76,134871,134689],{"class":305},[76,134873,13786],{"class":93},[76,134875,134672],{"class":250},[76,134877,202],{"class":93},[76,134879,134698],{"class":305},[76,134881,38117],{"class":93},[76,134883,134884,134886,134888,134890,134892,134894,134896,134898],{"class":78,"line":1293},[76,134885,134684],{"class":250},[76,134887,202],{"class":93},[76,134889,134709],{"class":305},[76,134891,13786],{"class":93},[76,134893,134672],{"class":250},[76,134895,202],{"class":93},[76,134897,134718],{"class":305},[76,134899,38117],{"class":93},[76,134901,134902,134904,134906,134908,134910,134912,134914,134916],{"class":78,"line":1384},[76,134903,134684],{"class":250},[76,134905,202],{"class":93},[76,134907,134729],{"class":305},[76,134909,13786],{"class":93},[76,134911,134672],{"class":250},[76,134913,202],{"class":93},[76,134915,134738],{"class":305},[76,134917,2791],{"class":93},[76,134919,134920],{"class":78,"line":1390},[76,134921,1637],{"class":93},[76,134923,134924,134926],{"class":78,"line":1402},[76,134925,134350],{"class":2035},[76,134927,15644],{"class":93},[76,134929,134930,134932,134934,134936],{"class":78,"line":1684},[76,134931,134631],{"class":250},[76,134933,51507],{"class":93},[76,134935,134636],{"class":305},[76,134937,1363],{"class":93},[76,134939,134940,134942,134944,134946],{"class":78,"line":1689},[76,134941,134765],{"class":250},[76,134943,51507],{"class":93},[76,134945,63911],{"class":250},[76,134947,1363],{"class":93},[76,134949,134950],{"class":78,"line":1695},[76,134951,1637],{"class":93},[56,134953],{"style":126449,"src":134954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134956,134957],{},"更加细节展示：",[152,134959,134960],{},[155,134961,134962],{},"html 标签内添加小图标",[56,134964],{"style":126449,"src":134965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[152,134967,134968],{"start":86},[155,134969,134970],{},"给标签定义字体",[67,134972,134973],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},[73,134974,134975,134979,134993,134997],{"__ignoreMap":58},[76,134976,134977],{"class":78,"line":79},[76,134978,130704],{"class":82},[76,134980,134981,134983,134985,134987,134989,134991],{"class":78,"line":86},[76,134982,1109],{"class":93},[76,134984,51681],{"class":51370},[76,134986,53556],{"class":2035},[76,134988,247],{"class":93},[76,134990,130717],{"class":305},[76,134992,51377],{"class":93},[76,134994,134995],{"class":78,"line":97},[76,134996,130724],{"class":93},[76,134998,134999,135001,135003],{"class":78,"line":103},[76,135000,51855],{"class":93},[76,135002,51681],{"class":51370},[76,135004,51377],{"class":93},[14,135006,135007],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[56,135009],{"style":126449,"src":135010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[169,135012,135014],{"id":135013},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135016,135017],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135019,135020,135021,135024],{},"把压缩包里面的 ",[350,135022,135023],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135026,135027],{},"打开网站，点下方：",[56,135029],{"style":126449,"src":135030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[56,135032],{"style":126449,"src":135033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[56,135035],{"style":126449,"src":135036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135038,135039],{},"点yes重新加载",[14,135041,135042],{},"然后重复之前的操作就可以实现了",[14,135044,135045],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[169,135047,135049],{"id":135048},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[56,135051],{"style":126449,"src":135052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[117,135054,135055],{},"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":58,"searchDepth":86,"depth":86,"links":135057},[135058,135064,135069],{"id":133661,"depth":86,"text":133662,"children":135059},[135060,135061,135062,135063],{"id":133673,"depth":97,"text":133674},{"id":133702,"depth":97,"text":133703},{"id":133730,"depth":97,"text":133731},{"id":133788,"depth":97,"text":133789},{"id":134260,"depth":86,"text":134261,"children":135065},[135066,135067,135068],{"id":134264,"depth":97,"text":134265},{"id":134309,"depth":97,"text":134310},{"id":134325,"depth":97,"text":134326},{"id":134425,"depth":86,"text":134426,"children":135070},[135071,135072,135073,135074,135075,135076],{"id":134429,"depth":97,"text":134430},{"id":134463,"depth":97,"text":134464},{"id":134486,"depth":97,"text":134487},{"id":134533,"depth":97,"text":134534},{"id":135013,"depth":97,"text":135014},{"id":135048,"depth":97,"text":135049},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133653,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135083,"title":135084,"body":135085,"description":122,"extension":123,"meta":136312,"navigation":125,"path":136313,"seo":136314,"stem":136315,"__hash__":136316},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135086,"toc":136293},[135087,135090,135094,135097,135111,135179,135209,135212,135216,135220,135322,135369,135373,135376,135379,135413,135416,135419,135422,135425,135428,135431,135434,135436,135439,135442,135445,135448,135451,135454,135457,135485,135488,135492,135495,135502,135505,135508,135534,135537,135541,135544,135547,135554,135558,135561,135563,135595,135598,135601,135613,135619,135622,135625,135628,135630,135634,135637,135640,135643,135688,135692,135694,135697,135704,135746,135749,135753,135758,135772,135776,135779,135782,135785,135788,135791,135825,135828,135831,135885,135888,135891,135894,135897,135949,135952,135955,136004,136008,136010,136013,136016,136019,136022,136025,136083,136086,136092,136095,136098,136130,136133,136137,136141,136144,136176,136180,136183,136227,136231,136234,136237,136240,136243,136246,136249,136252,136254,136257,136259,136262,136265,136268,136271,136276,136279,136281,136284,136287,136290],[10,135088,135084],{"id":135089},"_13-界面样式与布局技巧",[140,135091,135093],{"id":135092},"_131-css三角","13.1 css三角",[14,135095,135096],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1206,135098,135099,135102,135105,135108],{},[155,135100,135101],{},"用css 边框可以模拟三角效果",[155,135103,135104],{},"宽度高度为0",[155,135106,135107],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[155,135109,135110],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[67,135112,135114],{"className":126593,"code":135113,"language":126595,"meta":58,"style":58},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[73,135115,135116,135121,135128,135138,135148,135164,135175],{"__ignoreMap":58},[76,135117,135118],{"class":78,"line":79},[76,135119,135120],{"class":82},"\u002F* CSS 实现三角形 *\u002F\n",[76,135122,135123,135126],{"class":78,"line":86},[76,135124,135125],{"class":2035},".triangle",[76,135127,15644],{"class":93},[76,135129,135130,135132,135134,135136],{"class":78,"line":97},[76,135131,70638],{"class":250},[76,135133,51507],{"class":93},[76,135135,392],{"class":250},[76,135137,1363],{"class":93},[76,135139,135140,135142,135144,135146],{"class":78,"line":103},[76,135141,70858],{"class":250},[76,135143,51507],{"class":93},[76,135145,392],{"class":250},[76,135147,1363],{"class":93},[76,135149,135150,135152,135154,135156,135158,135160,135162],{"class":78,"line":1273},[76,135151,70966],{"class":250},[76,135153,51507],{"class":93},[76,135155,646],{"class":250},[76,135157,51562],{"class":89},[76,135159,51591],{"class":250},[76,135161,64061],{"class":250},[76,135163,1363],{"class":93},[76,135165,135166,135169,135171,135173],{"class":78,"line":1287},[76,135167,135168],{"class":250},"  border-bottom-color",[76,135170,51507],{"class":93},[76,135172,62439],{"class":250},[76,135174,1363],{"class":93},[76,135176,135177],{"class":78,"line":1293},[76,135178,1637],{"class":93},[67,135180,135181],{"className":126593,"code":130750,"language":126595,"meta":58,"style":58},[73,135182,135183,135189,135205],{"__ignoreMap":58},[76,135184,135185,135187],{"class":78,"line":79},[76,135186,51681],{"class":51370},[76,135188,15644],{"class":93},[76,135190,135191,135193,135195,135197,135199,135201,135203],{"class":78,"line":86},[76,135192,70966],{"class":250},[76,135194,51507],{"class":93},[76,135196,418],{"class":250},[76,135198,51562],{"class":89},[76,135200,51591],{"class":250},[76,135202,129985],{"class":250},[76,135204,1363],{"class":93},[76,135206,135207],{"class":78,"line":97},[76,135208,1637],{"class":93},[56,135210],{"style":126449,"src":135211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[140,135213,135215],{"id":135214},"_132-css用户界面样式","13.2 css用户界面样式",[169,135217,135219],{"id":135218},"_1321-鼠标样式","13.2.1 鼠标样式",[67,135221,135223],{"className":126593,"code":135222,"language":126595,"meta":58,"style":58},"\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",[73,135224,135225,135230,135249,135267,135286,135303],{"__ignoreMap":58},[76,135226,135227],{"class":78,"line":79},[76,135228,135229],{"class":82},"\u002F* 鼠标样式 *\u002F\n",[76,135231,135232,135234,135236,135239,135241,135243,135246],{"class":78,"line":86},[76,135233,51681],{"class":51370},[76,135235,79877],{"class":93},[76,135237,135238],{"class":250},"cursor",[76,135240,51507],{"class":93},[76,135242,62100],{"class":250},[76,135244,135245],{"class":93},"; }   ",[76,135247,135248],{"class":82},"\u002F* 手型 *\u002F\n",[76,135250,135251,135253,135255,135257,135259,135262,135264],{"class":78,"line":97},[76,135252,51681],{"class":51370},[76,135254,79877],{"class":93},[76,135256,135238],{"class":250},[76,135258,51507],{"class":93},[76,135260,135261],{"class":250},"default",[76,135263,135245],{"class":93},[76,135265,135266],{"class":82},"\u002F* 默认 *\u002F\n",[76,135268,135269,135271,135273,135275,135277,135280,135283],{"class":78,"line":103},[76,135270,51681],{"class":51370},[76,135272,79877],{"class":93},[76,135274,135238],{"class":250},[76,135276,51507],{"class":93},[76,135278,135279],{"class":250},"move",[76,135281,135282],{"class":93},"; }      ",[76,135284,135285],{"class":82},"\u002F* 移动 *\u002F\n",[76,135287,135288,135290,135292,135294,135296,135298,135300],{"class":78,"line":1273},[76,135289,51681],{"class":51370},[76,135291,79877],{"class":93},[76,135293,135238],{"class":250},[76,135295,51507],{"class":93},[76,135297,5259],{"class":250},[76,135299,135282],{"class":93},[76,135301,135302],{"class":82},"\u002F* 文本 *\u002F\n",[76,135304,135305,135307,135309,135311,135313,135316,135319],{"class":78,"line":1287},[76,135306,51681],{"class":51370},[76,135308,79877],{"class":93},[76,135310,135238],{"class":250},[76,135312,51507],{"class":93},[76,135314,135315],{"class":250},"not-allowed",[76,135317,135318],{"class":93},"; } ",[76,135320,135321],{"class":82},"\u002F* 禁止 *\u002F\n",[338,135323,135324,135332],{},[341,135325,135326],{},[344,135327,135328,135330],{},[347,135329,127057],{"align":23808},[347,135331,27562],{"align":23808},[385,135333,135334,135341,135348,135355,135362],{},[344,135335,135336,135338],{},[390,135337,135261],{"align":23808},[390,135339,135340],{"align":23808},"小白 默认",[344,135342,135343,135345],{},[390,135344,62100],{"align":23808},[390,135346,135347],{"align":23808},"小手",[344,135349,135350,135352],{},[390,135351,135279],{"align":23808},[390,135353,135354],{"align":23808},"移动",[344,135356,135357,135359],{},[390,135358,5259],{"align":23808},[390,135360,135361],{"align":23808},"文本",[344,135363,135364,135366],{},[390,135365,135315],{"align":23808},[390,135367,135368],{"align":23808},"禁止",[169,135370,135372],{"id":135371},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135374,135375],{},"去除表单轮廓线",[14,135377,135378],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[67,135380,135381],{"className":126593,"code":129957,"language":126595,"meta":58,"style":58},[73,135382,135383,135387,135393,135409],{"__ignoreMap":58},[76,135384,135385],{"class":78,"line":79},[76,135386,129964],{"class":82},[76,135388,135389,135391],{"class":78,"line":86},[76,135390,51681],{"class":51370},[76,135392,15644],{"class":93},[76,135394,135395,135397,135399,135401,135403,135405,135407],{"class":78,"line":97},[76,135396,70966],{"class":250},[76,135398,51507],{"class":93},[76,135400,418],{"class":250},[76,135402,51562],{"class":89},[76,135404,51591],{"class":250},[76,135406,129985],{"class":250},[76,135408,1363],{"class":93},[76,135410,135411],{"class":78,"line":103},[76,135412,1637],{"class":93},[14,135414,135415],{},"文本域：",[56,135417],{"style":126449,"src":135418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135420,135421],{},"此时会有一个空白区域",[56,135423],{"style":126449,"src":135424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135426,135427],{},"写在同一行就不会出现这个问题",[56,135429],{"style":126449,"src":135430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135432,135433],{},"文本域是行内块元素，一定记住！！！",[14,135435,98274],{},[56,135437],{"style":126449,"src":135438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135440,135441],{},"文本域尽量放在一行",[14,135443,135444],{},"知识回顾：cols是列，rols是行",[56,135446],{"style":126449,"src":135447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135449,135450],{},"它可以进行拖动，显然这是我们不愿意看到的",[56,135452],{"style":126449,"src":135453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135455,135456],{},"使用resize进行解决",[67,135458,135460],{"className":126593,"code":135459,"language":126595,"meta":58,"style":58},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[73,135461,135462,135468,135481],{"__ignoreMap":58},[76,135463,135464,135466],{"class":78,"line":79},[76,135465,53891],{"class":51370},[76,135467,15644],{"class":93},[76,135469,135470,135472,135474,135476,135478],{"class":78,"line":86},[76,135471,70868],{"class":250},[76,135473,51507],{"class":93},[76,135475,54807],{"class":250},[76,135477,130456],{"class":93},[76,135479,135480],{"class":82},"\u002F* 取消表单轮廓线 *\u002F\n",[76,135482,135483],{"class":78,"line":97},[76,135484,1637],{"class":93},[14,135486,135487],{},"此时就无法通过右下方实现拖动了",[169,135489,135491],{"id":135490},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135493,135494],{},"实现一个盒子中的文字和图片对齐",[14,135496,135497,135498,135501],{},"用于设置一个元素的 ",[350,135499,135500],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135503,135504],{},"图片和文字默认是基线对齐",[56,135506],{"style":126449,"src":135507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[67,135509,135510],{"className":126593,"code":135459,"language":126595,"meta":58,"style":58},[73,135511,135512,135518,135530],{"__ignoreMap":58},[76,135513,135514,135516],{"class":78,"line":79},[76,135515,53891],{"class":51370},[76,135517,15644],{"class":93},[76,135519,135520,135522,135524,135526,135528],{"class":78,"line":86},[76,135521,70868],{"class":250},[76,135523,51507],{"class":93},[76,135525,54807],{"class":250},[76,135527,130456],{"class":93},[76,135529,135480],{"class":82},[76,135531,135532],{"class":78,"line":97},[76,135533,1637],{"class":93},[56,135535],{"style":126449,"src":135536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22070,135538,135540],{"id":135539},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135542,135543],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[56,135545],{"style":126449,"src":135546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135548,135549,135550,135553],{},"此时可以给图片、表单这些行内块元素的 ",[350,135551,135552],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22070,135555,135557],{"id":135556},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135559,135560],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135562,14705],{},[67,135564,135566],{"className":126593,"code":135565,"language":126595,"meta":58,"style":58},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[73,135567,135568,135573,135579,135591],{"__ignoreMap":58},[76,135569,135570],{"class":78,"line":79},[76,135571,135572],{"class":82},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[76,135574,135575,135577],{"class":78,"line":86},[76,135576,56],{"class":51370},[76,135578,15644],{"class":93},[76,135580,135581,135584,135586,135589],{"class":78,"line":97},[76,135582,135583],{"class":250},"  vertical-align",[76,135585,51507],{"class":93},[76,135587,135588],{"class":250},"middle",[76,135590,1363],{"class":93},[76,135592,135593],{"class":78,"line":103},[76,135594,1637],{"class":93},[56,135596],{"style":126449,"src":135597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135599,135600],{},"主要解决方法有两种：",[152,135602,135603],{},[155,135604,135605,135608,135609,135612],{},[350,135606,135607],{},"给图片"," 添加 ",[350,135610,135611],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135614,135615,135616],{},"2.把图片转换为块级元素 ",[350,135617,135618],{},"display: block",[14,135620,135621],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135623,135624],{},"img {",[14,135626,135627],{},"vertical-align:middle;",[14,135629,1145],{},[169,135631,135633],{"id":135632},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135635,135636],{},"效果：",[56,135638],{"style":126449,"src":135639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135641,135642],{},"单行文本溢出显示省略号--必须满足三个条件：",[67,135644,135646],{"className":126593,"code":135645,"language":126595,"meta":58,"style":58},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[73,135647,135648,135653,135659,135669,135674,135684],{"__ignoreMap":58},[76,135649,135650],{"class":78,"line":79},[76,135651,135652],{"class":82},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[76,135654,135655,135657],{"class":78,"line":86},[76,135656,56],{"class":51370},[76,135658,15644],{"class":93},[76,135660,135661,135663,135665,135667],{"class":78,"line":97},[76,135662,135583],{"class":250},[76,135664,51507],{"class":93},[76,135666,135588],{"class":250},[76,135668,1363],{"class":93},[76,135670,135671],{"class":78,"line":103},[76,135672,135673],{"class":82},"  \u002F* 或 *\u002F\n",[76,135675,135676,135678,135680,135682],{"class":78,"line":1273},[76,135677,128209],{"class":250},[76,135679,51507],{"class":93},[76,135681,60939],{"class":250},[76,135683,1363],{"class":93},[76,135685,135686],{"class":78,"line":1287},[76,135687,1637],{"class":93},[169,135689,135691],{"id":135690},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135693,135636],{},[56,135695],{"style":126449,"src":135696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135698,135699,135700,135703],{},"多行文本溢出显示省略号， ",[350,135701,135702],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[67,135705,135706],{"className":126593,"code":135645,"language":126595,"meta":58,"style":58},[73,135707,135708,135712,135718,135728,135732,135742],{"__ignoreMap":58},[76,135709,135710],{"class":78,"line":79},[76,135711,135652],{"class":82},[76,135713,135714,135716],{"class":78,"line":86},[76,135715,56],{"class":51370},[76,135717,15644],{"class":93},[76,135719,135720,135722,135724,135726],{"class":78,"line":97},[76,135721,135583],{"class":250},[76,135723,51507],{"class":93},[76,135725,135588],{"class":250},[76,135727,1363],{"class":93},[76,135729,135730],{"class":78,"line":103},[76,135731,135673],{"class":82},[76,135733,135734,135736,135738,135740],{"class":78,"line":1273},[76,135735,128209],{"class":250},[76,135737,51507],{"class":93},[76,135739,60939],{"class":250},[76,135741,1363],{"class":93},[76,135743,135744],{"class":78,"line":1287},[76,135745,1637],{"class":93},[14,135747,135748],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[140,135750,135752],{"id":135751},"_133-常见布局技巧","13.3 常见布局技巧",[14,135754,135755],{},[350,135756,135757],{},"巧妙利用一个技术更快更好的布局：",[152,135759,135760,135763,135766,135769],{},[155,135761,135762],{},"margin负值的运用",[155,135764,135765],{},"文字围绕浮动元素",[155,135767,135768],{},"行内块的巧妙运用",[155,135770,135771],{},"CSS三角强化",[169,135773,135775],{"id":135774},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135777,135778],{},"应用场景：",[56,135780],{"style":126449,"src":135781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[56,135783],{"style":126449,"src":135784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135786,135787],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135789,135790],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[67,135792,135793],{"className":126593,"code":129957,"language":126595,"meta":58,"style":58},[73,135794,135795,135799,135805,135821],{"__ignoreMap":58},[76,135796,135797],{"class":78,"line":79},[76,135798,129964],{"class":82},[76,135800,135801,135803],{"class":78,"line":86},[76,135802,51681],{"class":51370},[76,135804,15644],{"class":93},[76,135806,135807,135809,135811,135813,135815,135817,135819],{"class":78,"line":97},[76,135808,70966],{"class":250},[76,135810,51507],{"class":93},[76,135812,418],{"class":250},[76,135814,51562],{"class":89},[76,135816,51591],{"class":250},[76,135818,129985],{"class":250},[76,135820,1363],{"class":93},[76,135822,135823],{"class":78,"line":103},[76,135824,1637],{"class":93},[56,135826],{"style":126449,"src":135827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135829,135830],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[67,135832,135834],{"className":126593,"code":135833,"language":126595,"meta":58,"style":58},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[73,135835,135836,135841,135847,135857,135869,135881],{"__ignoreMap":58},[76,135837,135838],{"class":78,"line":79},[76,135839,135840],{"class":82},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[76,135842,135843,135845],{"class":78,"line":86},[76,135844,130441],{"class":2035},[76,135846,15644],{"class":93},[76,135848,135849,135851,135853,135855],{"class":78,"line":97},[76,135850,132399],{"class":250},[76,135852,51507],{"class":93},[76,135854,54834],{"class":250},[76,135856,1363],{"class":93},[76,135858,135859,135861,135863,135865,135867],{"class":78,"line":103},[76,135860,132413],{"class":250},[76,135862,51507],{"class":93},[76,135864,646],{"class":250},[76,135866,51562],{"class":89},[76,135868,1363],{"class":93},[76,135870,135871,135873,135875,135877,135879],{"class":78,"line":1273},[76,135872,132430],{"class":250},[76,135874,51507],{"class":93},[76,135876,899],{"class":250},[76,135878,51562],{"class":89},[76,135880,1363],{"class":93},[76,135882,135883],{"class":78,"line":1287},[76,135884,1637],{"class":93},[14,135886,135887],{},"加上上述代码会发现：",[56,135889],{"style":126449,"src":135890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135892,135893],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135895,135896],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[67,135898,135899],{"className":126593,"code":135833,"language":126595,"meta":58,"style":58},[73,135900,135901,135905,135911,135921,135933,135945],{"__ignoreMap":58},[76,135902,135903],{"class":78,"line":79},[76,135904,135840],{"class":82},[76,135906,135907,135909],{"class":78,"line":86},[76,135908,130441],{"class":2035},[76,135910,15644],{"class":93},[76,135912,135913,135915,135917,135919],{"class":78,"line":97},[76,135914,132399],{"class":250},[76,135916,51507],{"class":93},[76,135918,54834],{"class":250},[76,135920,1363],{"class":93},[76,135922,135923,135925,135927,135929,135931],{"class":78,"line":103},[76,135924,132413],{"class":250},[76,135926,51507],{"class":93},[76,135928,646],{"class":250},[76,135930,51562],{"class":89},[76,135932,1363],{"class":93},[76,135934,135935,135937,135939,135941,135943],{"class":78,"line":1273},[76,135936,132430],{"class":250},[76,135938,51507],{"class":93},[76,135940,899],{"class":250},[76,135942,51562],{"class":89},[76,135944,1363],{"class":93},[76,135946,135947],{"class":78,"line":1287},[76,135948,1637],{"class":93},[14,135950,135951],{},"解决方式2：",[14,135953,135954],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[67,135956,135958],{"className":126593,"code":135957,"language":126595,"meta":58,"style":58},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[73,135959,135960,135966,135976,135988,136000],{"__ignoreMap":58},[76,135961,135962,135964],{"class":78,"line":79},[76,135963,51681],{"class":51370},[76,135965,15644],{"class":93},[76,135967,135968,135970,135972,135974],{"class":78,"line":86},[76,135969,132399],{"class":250},[76,135971,51507],{"class":93},[76,135973,54834],{"class":250},[76,135975,1363],{"class":93},[76,135977,135978,135980,135982,135984,135986],{"class":78,"line":97},[76,135979,132413],{"class":250},[76,135981,51507],{"class":93},[76,135983,646],{"class":250},[76,135985,51562],{"class":89},[76,135987,1363],{"class":93},[76,135989,135990,135992,135994,135996,135998],{"class":78,"line":103},[76,135991,132430],{"class":250},[76,135993,51507],{"class":93},[76,135995,899],{"class":250},[76,135997,51562],{"class":89},[76,135999,1363],{"class":93},[76,136001,136002],{"class":78,"line":1273},[76,136003,1637],{"class":93},[169,136005,136007],{"id":136006},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136009,135778],{},[56,136011],{"style":126449,"src":136012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136014,136015],{},"实现结构图：",[56,136017],{"style":126449,"src":136018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136020,136021],{},"巧妙运用浮动元素不会压住文字的特性",[14,136023,136024],{},"代码显示：",[67,136026,136028],{"className":126593,"code":136027,"language":126595,"meta":58,"style":58},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[73,136029,136030,136036,136046,136050,136055,136059,136065,136079],{"__ignoreMap":58},[76,136031,136032,136034],{"class":78,"line":79},[76,136033,130441],{"class":2035},[76,136035,15644],{"class":93},[76,136037,136038,136040,136042,136044],{"class":78,"line":86},[76,136039,131073],{"class":250},[76,136041,51507],{"class":93},[76,136043,23808],{"class":250},[76,136045,1363],{"class":93},[76,136047,136048],{"class":78,"line":97},[76,136049,1637],{"class":93},[76,136051,136052],{"class":78,"line":103},[76,136053,136054],{"class":93},"```Css\n",[76,136056,136057],{"class":78,"line":1273},[76,136058,130436],{"class":82},[76,136060,136061,136063],{"class":78,"line":1287},[76,136062,130441],{"class":2035},[76,136064,15644],{"class":93},[76,136066,136067,136069,136071,136073,136075,136077],{"class":78,"line":1293},[76,136068,70540],{"class":250},[76,136070,51507],{"class":93},[76,136072,392],{"class":250},[76,136074,51626],{"class":250},[76,136076,130456],{"class":93},[76,136078,130459],{"class":82},[76,136080,136081],{"class":78,"line":1384},[76,136082,1637],{"class":93},[14,136084,136085],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[67,136087,136090],{"className":136088,"code":136089,"language":5259},[5257],"\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",[73,136091,136089],{"__ignoreMap":58},[56,136093],{"style":126449,"src":136094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136096,136097],{},"最终展示结果：",[67,136099,136100],{"className":126593,"code":130429,"language":126595,"meta":58,"style":58},[73,136101,136102,136106,136112,136126],{"__ignoreMap":58},[76,136103,136104],{"class":78,"line":79},[76,136105,130436],{"class":82},[76,136107,136108,136110],{"class":78,"line":86},[76,136109,130441],{"class":2035},[76,136111,15644],{"class":93},[76,136113,136114,136116,136118,136120,136122,136124],{"class":78,"line":97},[76,136115,70540],{"class":250},[76,136117,51507],{"class":93},[76,136119,392],{"class":250},[76,136121,51626],{"class":250},[76,136123,130456],{"class":93},[76,136125,130459],{"class":82},[76,136127,136128],{"class":78,"line":103},[76,136129,1637],{"class":93},[56,136131],{"style":126449,"src":136132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[140,136134,136136],{"id":136135},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[169,136138,136140],{"id":136139},"_1341-原理","13.4.1 原理",[56,136142],{"style":126449,"src":136143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[67,136145,136146],{"className":126593,"code":130429,"language":126595,"meta":58,"style":58},[73,136147,136148,136152,136158,136172],{"__ignoreMap":58},[76,136149,136150],{"class":78,"line":79},[76,136151,130436],{"class":82},[76,136153,136154,136156],{"class":78,"line":86},[76,136155,130441],{"class":2035},[76,136157,15644],{"class":93},[76,136159,136160,136162,136164,136166,136168,136170],{"class":78,"line":97},[76,136161,70540],{"class":250},[76,136163,51507],{"class":93},[76,136165,392],{"class":250},[76,136167,51626],{"class":250},[76,136169,130456],{"class":93},[76,136171,130459],{"class":82},[76,136173,136174],{"class":78,"line":103},[76,136175,1637],{"class":93},[169,136177,136179],{"id":136178},"_1342-实例","13.4.2 实例",[56,136181],{"style":126449,"src":136182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[67,136184,136185],{"className":126593,"code":131059,"language":126595,"meta":58,"style":58},[73,136186,136187,136193,136203,136207,136213,136223],{"__ignoreMap":58},[76,136188,136189,136191],{"class":78,"line":79},[76,136190,131066],{"class":2035},[76,136192,15644],{"class":93},[76,136194,136195,136197,136199,136201],{"class":78,"line":86},[76,136196,131073],{"class":250},[76,136198,51507],{"class":93},[76,136200,23808],{"class":250},[76,136202,1363],{"class":93},[76,136204,136205],{"class":78,"line":97},[76,136206,1637],{"class":93},[76,136208,136209,136211],{"class":78,"line":103},[76,136210,131088],{"class":2035},[76,136212,15644],{"class":93},[76,136214,136215,136217,136219,136221],{"class":78,"line":1273},[76,136216,131073],{"class":250},[76,136218,51507],{"class":93},[76,136220,72592],{"class":250},[76,136222,1363],{"class":93},[76,136224,136225],{"class":78,"line":1287},[76,136226,1637],{"class":93},[140,136228,136230],{"id":136229},"_135-css的初始化","13.5 css的初始化",[14,136232,136233],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136235,136236],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136238,136239],{},"每个网页都必须首先进行 CSS初始化。",[14,136241,136242],{},"这里我们以 京东CSS初始化代码为例。",[14,136244,136245],{},"在网页右键查看网页源代码",[14,136247,136248],{},"找到css的link引入语句",[14,136250,136251],{},"然后ctrl+f 输入body",[14,136253,77296],{},[56,136255],{"style":126449,"src":136256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136258,77319],{},[56,136260],{"style":126449,"src":136261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136263,136264],{},"③打开了网页上传压缩的代码",[56,136266],{"style":126449,"src":136267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136269,136270],{},"④从body前可以查看这个网页的初始化代码",[14,136272,136273],{},[350,136274,136275],{},"Unicode编码字体：",[14,136277,136278],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136280,83277],{},[14,136282,136283],{},"黑体 \\9ED1\\4F53",[14,136285,136286],{},"宋体 \\5B8B\\4F53",[14,136288,136289],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[117,136291,136292],{},"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":58,"searchDepth":86,"depth":86,"links":136294},[136295,136296,136303,136307,136311],{"id":135092,"depth":86,"text":135093},{"id":135214,"depth":86,"text":135215,"children":136297},[136298,136299,136300,136301,136302],{"id":135218,"depth":97,"text":135219},{"id":135371,"depth":97,"text":135372},{"id":135490,"depth":97,"text":135491},{"id":135632,"depth":97,"text":135633},{"id":135690,"depth":97,"text":135691},{"id":135751,"depth":86,"text":135752,"children":136304},[136305,136306],{"id":135774,"depth":97,"text":135775},{"id":136006,"depth":97,"text":136007},{"id":136135,"depth":86,"text":136136,"children":136308},[136309,136310],{"id":136139,"depth":97,"text":136140},{"id":136178,"depth":97,"text":136179},{"id":136229,"depth":86,"text":136230},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135084,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136318,"title":136319,"body":136320,"description":122,"extension":123,"meta":138006,"navigation":125,"path":138007,"seo":138008,"stem":138009,"__hash__":138010},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136321,"toc":137995},[136322,136325,136329,136333,136336,136343,136346,136349,136387,136390,136392,136406,136410,136419,136423,136428,136431,136434,136437,136472,136477,136480,136510,136513,136518,136521,136524,136554,136557,136611,136614,136618,136623,136635,136638,136642,136672,136675,136680,136683,136713,136716,136720,136737,136741,136745,136748,136781,136784,136788,136791,136794,136797,136800,136803,136914,136917,136920,136923,137025,137028,137032,137036,137040,137043,137083,137086,137088,137104,137108,137111,137116,137197,137200,137203,137329,137334,137337,137345,137348,137353,137438,137441,137445,137448,137451,137455,137475,137480,137564,137567,137572,137575,137578,137656,137659,137662,137665,137668,137671,137676,137679,137682,137754,137757,137762,137765,137862,137865,137871,137874,137877,137880,137883,137886,137889,137892,137895,137899,137904,137907,137940,137945,137948,137989,137992],[10,136323,136319],{"id":136324},"_14-html5与css3新特性",[140,136326,136328],{"id":136327},"_141-html5的新特性","14.1 HTML5的新特性",[169,136330,136332],{"id":136331},"_1411-基本标签","14.1.1 基本标签",[14,136334,136335],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136337,136338,136339,136342],{},"这些新特性都有兼容性问题，基本是 ",[350,136340,136341],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136344,136345],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136347,136348],{},"现在使用的是新特性：",[1206,136350,136351,136357,136363,136369,136375,136381],{},[155,136352,136353,136356],{},[73,136354,136355],{},"\u003Cheader>"," 头部标签",[155,136358,136359,136362],{},[73,136360,136361],{},"\u003Cnav>"," 导航标签",[155,136364,136365,136368],{},[73,136366,136367],{},"\u003Carticle>"," 内容标签",[155,136370,136371,136374],{},[73,136372,136373],{},"\u003Csection>"," 定义文档某个区域",[155,136376,136377,136380],{},[73,136378,136379],{},"\u003Caside>"," 侧边栏标签",[155,136382,136383,136386],{},[73,136384,136385],{},"\u003Cfooter>"," 尾部标签",[56,136388],{"style":126449,"src":136389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136391,231],{},[1206,136393,136394,136397,136400,136403],{},[155,136395,136396],{},"这种语义化标准主要是针对搜索引擎的",[155,136398,136399],{},"这些标签页面中可以经常使用",[155,136401,136402],{},"在IE9中，需要把这些元素转换为块级元素",[155,136404,136405],{},"移动端更喜欢使用这些标签",[169,136407,136409],{"id":136408},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136411,136412,136413,136415,136416,136418],{},"音频 ",[350,136414,28247],{}," 和视频 ",[350,136417,28256],{}," 两个标签",[22070,136420,136422],{"id":136421},"_14121-视频标签-video","14.1.2.1 视频标签- video",[152,136424,136425],{},[155,136426,136427],{},"支持格式：",[56,136429],{"style":126449,"src":136430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136432,136433],{},"尽量使用MP4，兼容性好",[14,136435,136436],{},"用MP4就可以",[67,136438,136440],{"className":127340,"code":136439,"language":127342,"meta":58,"style":58},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[73,136441,136442],{"__ignoreMap":58},[76,136443,136444,136446,136448,136450,136452,136455,136457,136460,136463,136466,136468,136470],{"class":78,"line":79},[76,136445,1109],{"class":93},[76,136447,28256],{"class":51370},[76,136449,55309],{"class":2035},[76,136451,247],{"class":93},[76,136453,136454],{"class":305},"\"movie.mp4\"",[76,136456,92493],{"class":2035},[76,136458,136459],{"class":2035}," autoplay",[76,136461,136462],{"class":2035}," muted",[76,136464,136465],{"class":2035}," loop",[76,136467,55384],{"class":93},[76,136469,28256],{"class":51370},[76,136471,51377],{"class":93},[152,136473,136474],{"start":86},[155,136475,136476],{},"兼容写法",[14,136478,136479],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[67,136481,136482],{"className":127340,"code":136439,"language":127342,"meta":58,"style":58},[73,136483,136484],{"__ignoreMap":58},[76,136485,136486,136488,136490,136492,136494,136496,136498,136500,136502,136504,136506,136508],{"class":78,"line":79},[76,136487,1109],{"class":93},[76,136489,28256],{"class":51370},[76,136491,55309],{"class":2035},[76,136493,247],{"class":93},[76,136495,136454],{"class":305},[76,136497,92493],{"class":2035},[76,136499,136459],{"class":2035},[76,136501,136462],{"class":2035},[76,136503,136465],{"class":2035},[76,136505,55384],{"class":93},[76,136507,28256],{"class":51370},[76,136509,51377],{"class":93},[14,136511,136512],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[152,136514,136515],{"start":97},[155,136516,136517],{},"video常用属性",[56,136519],{"style":126449,"src":136520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136522,136523],{},"poster属性后面是跟的等待加载图片的地址",[67,136525,136526],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,136527,136528],{"__ignoreMap":58},[76,136529,136530,136532,136534,136536,136538,136540,136542,136544,136546,136548,136550,136552],{"class":78,"line":79},[76,136531,1109],{"class":93},[76,136533,56],{"class":51370},[76,136535,55309],{"class":2035},[76,136537,247],{"class":93},[76,136539,134110],{"class":305},[76,136541,55317],{"class":2035},[76,136543,247],{"class":93},[76,136545,134117],{"class":305},[76,136547,134120],{"class":2035},[76,136549,247],{"class":93},[76,136551,134125],{"class":305},[76,136553,51377],{"class":93},[14,136555,136556],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[67,136558,136560],{"className":126593,"code":136559,"language":126595,"meta":58,"style":58},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[73,136561,136562,136567,136573,136597,136602,136607],{"__ignoreMap":58},[76,136563,136564],{"class":78,"line":79},[76,136565,136566],{"class":82},"\u002F* 2D 位移 *\u002F\n",[76,136568,136569,136571],{"class":78,"line":86},[76,136570,51681],{"class":51370},[76,136572,15644],{"class":93},[76,136574,136575,136578,136580,136583,136585,136587,136589,136591,136593,136595],{"class":78,"line":97},[76,136576,136577],{"class":250},"  transform",[76,136579,51507],{"class":93},[76,136581,136582],{"class":250},"translate",[76,136584,202],{"class":93},[76,136586,512],{"class":250},[76,136588,51562],{"class":89},[76,136590,12507],{"class":93},[76,136592,855],{"class":250},[76,136594,51562],{"class":89},[76,136596,2791],{"class":93},[76,136598,136599],{"class":78,"line":103},[76,136600,136601],{"class":82},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[76,136603,136604],{"class":78,"line":1273},[76,136605,136606],{"class":82},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[76,136608,136609],{"class":78,"line":1287},[76,136610,1637],{"class":93},[14,136612,136613],{},"muted:自动静音属性",[22070,136615,136617],{"id":136616},"_14122-音频标签audio","14.1.2.2 音频标签audio",[152,136619,136620],{},[155,136621,136622],{},"基本使用",[14,136624,136625,136626,136631,136632],{},"当前 ",[350,136627,136628],{},[73,136629,136630],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[350,136633,136634],{},"mp3格式",[56,136636],{"style":126449,"src":136637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[152,136639,136640],{"start":86},[155,136641,136476],{},[67,136643,136644],{"className":127340,"code":136439,"language":127342,"meta":58,"style":58},[73,136645,136646],{"__ignoreMap":58},[76,136647,136648,136650,136652,136654,136656,136658,136660,136662,136664,136666,136668,136670],{"class":78,"line":79},[76,136649,1109],{"class":93},[76,136651,28256],{"class":51370},[76,136653,55309],{"class":2035},[76,136655,247],{"class":93},[76,136657,136454],{"class":305},[76,136659,92493],{"class":2035},[76,136661,136459],{"class":2035},[76,136663,136462],{"class":2035},[76,136665,136465],{"class":2035},[76,136667,55384],{"class":93},[76,136669,28256],{"class":51370},[76,136671,51377],{"class":93},[14,136673,136674],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[152,136676,136677],{"start":97},[155,136678,136679],{},"常用属性",[56,136681],{"style":126449,"src":136682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[67,136684,136685],{"className":127340,"code":136439,"language":127342,"meta":58,"style":58},[73,136686,136687],{"__ignoreMap":58},[76,136688,136689,136691,136693,136695,136697,136699,136701,136703,136705,136707,136709,136711],{"class":78,"line":79},[76,136690,1109],{"class":93},[76,136692,28256],{"class":51370},[76,136694,55309],{"class":2035},[76,136696,247],{"class":93},[76,136698,136454],{"class":305},[76,136700,92493],{"class":2035},[76,136702,136459],{"class":2035},[76,136704,136462],{"class":2035},[76,136706,136465],{"class":2035},[76,136708,55384],{"class":93},[76,136710,28256],{"class":51370},[76,136712,51377],{"class":93},[14,136714,136715],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22070,136717,136719],{"id":136718},"_14123-总结","14.1.2.3 总结",[1206,136721,136722,136725,136728,136731,136734],{},[155,136723,136724],{},"音频标签和视频标签使用方式基本一致",[155,136726,136727],{},"浏览器支持情况不同",[155,136729,136730],{},"谷歌浏览器把音频和视频自动播放禁止了",[155,136732,136733],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[155,136735,136736],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[169,136738,136740],{"id":136739},"_1413-表单元素","14.1.3 表单元素",[22070,136742,136744],{"id":136743},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[56,136746],{"style":126449,"src":136747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[67,136749,136751],{"className":127340,"code":136750,"language":127342,"meta":58,"style":58},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[73,136752,136753],{"__ignoreMap":58},[76,136754,136755,136757,136759,136761,136763,136765,136767,136769,136772,136774,136776,136779],{"class":78,"line":79},[76,136756,1109],{"class":93},[76,136758,53891],{"class":51370},[76,136760,53894],{"class":2035},[76,136762,247],{"class":93},[76,136764,62769],{"class":305},[76,136766,14992],{"class":2035},[76,136768,247],{"class":93},[76,136770,136771],{"class":305},"\"username\"",[76,136773,61090],{"class":2035},[76,136775,247],{"class":93},[76,136777,136778],{"class":305},"\"请输入用户名\"",[76,136780,51377],{"class":93},[56,136782],{"style":126449,"src":136783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22070,136785,136787],{"id":136786},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[56,136789],{"style":126449,"src":136790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136792,136793],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136795,136796],{},"快捷操作：",[56,136798],{"style":126449,"src":136799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136801,136802],{},"例子1：",[67,136804,136806],{"className":127340,"code":136805,"language":127342,"meta":58,"style":58},"\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",[73,136807,136808,136831,136858,136887,136906],{"__ignoreMap":58},[76,136809,136810,136812,136814,136816,136818,136821,136824,136826,136829],{"class":78,"line":79},[76,136811,1109],{"class":93},[76,136813,66695],{"class":51370},[76,136815,66698],{"class":2035},[76,136817,247],{"class":93},[76,136819,136820],{"class":305},"\"\u002Fsubmit\"",[76,136822,136823],{"class":2035}," method",[76,136825,247],{"class":93},[76,136827,136828],{"class":305},"\"post\"",[76,136830,51377],{"class":93},[76,136832,136833,136835,136837,136839,136841,136843,136845,136847,136849,136851,136853,136856],{"class":78,"line":86},[76,136834,52214],{"class":93},[76,136836,53891],{"class":51370},[76,136838,53894],{"class":2035},[76,136840,247],{"class":93},[76,136842,62769],{"class":305},[76,136844,14992],{"class":2035},[76,136846,247],{"class":93},[76,136848,136771],{"class":305},[76,136850,61090],{"class":2035},[76,136852,247],{"class":93},[76,136854,136855],{"class":305},"\"用户名\"",[76,136857,51377],{"class":93},[76,136859,136860,136862,136864,136866,136868,136871,136873,136875,136878,136880,136882,136885],{"class":78,"line":97},[76,136861,52214],{"class":93},[76,136863,53891],{"class":51370},[76,136865,53894],{"class":2035},[76,136867,247],{"class":93},[76,136869,136870],{"class":305},"\"password\"",[76,136872,14992],{"class":2035},[76,136874,247],{"class":93},[76,136876,136877],{"class":305},"\"pwd\"",[76,136879,61090],{"class":2035},[76,136881,247],{"class":93},[76,136883,136884],{"class":305},"\"密码\"",[76,136886,51377],{"class":93},[76,136888,136889,136891,136893,136895,136897,136899,136902,136904],{"class":78,"line":103},[76,136890,52214],{"class":93},[76,136892,53957],{"class":51370},[76,136894,53894],{"class":2035},[76,136896,247],{"class":93},[76,136898,66718],{"class":305},[76,136900,136901],{"class":93},">提交\u003C\u002F",[76,136903,53957],{"class":51370},[76,136905,51377],{"class":93},[76,136907,136908,136910,136912],{"class":78,"line":1273},[76,136909,51855],{"class":93},[76,136911,66695],{"class":51370},[76,136913,51377],{"class":93},[56,136915],{"style":126449,"src":136916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136918,136919],{},"value是表单域的内容",[14,136921,136922],{},"例子2：",[67,136924,136925],{"className":127340,"code":136805,"language":127342,"meta":58,"style":58},[73,136926,136927,136947,136973,136999,137017],{"__ignoreMap":58},[76,136928,136929,136931,136933,136935,136937,136939,136941,136943,136945],{"class":78,"line":79},[76,136930,1109],{"class":93},[76,136932,66695],{"class":51370},[76,136934,66698],{"class":2035},[76,136936,247],{"class":93},[76,136938,136820],{"class":305},[76,136940,136823],{"class":2035},[76,136942,247],{"class":93},[76,136944,136828],{"class":305},[76,136946,51377],{"class":93},[76,136948,136949,136951,136953,136955,136957,136959,136961,136963,136965,136967,136969,136971],{"class":78,"line":86},[76,136950,52214],{"class":93},[76,136952,53891],{"class":51370},[76,136954,53894],{"class":2035},[76,136956,247],{"class":93},[76,136958,62769],{"class":305},[76,136960,14992],{"class":2035},[76,136962,247],{"class":93},[76,136964,136771],{"class":305},[76,136966,61090],{"class":2035},[76,136968,247],{"class":93},[76,136970,136855],{"class":305},[76,136972,51377],{"class":93},[76,136974,136975,136977,136979,136981,136983,136985,136987,136989,136991,136993,136995,136997],{"class":78,"line":97},[76,136976,52214],{"class":93},[76,136978,53891],{"class":51370},[76,136980,53894],{"class":2035},[76,136982,247],{"class":93},[76,136984,136870],{"class":305},[76,136986,14992],{"class":2035},[76,136988,247],{"class":93},[76,136990,136877],{"class":305},[76,136992,61090],{"class":2035},[76,136994,247],{"class":93},[76,136996,136884],{"class":305},[76,136998,51377],{"class":93},[76,137000,137001,137003,137005,137007,137009,137011,137013,137015],{"class":78,"line":103},[76,137002,52214],{"class":93},[76,137004,53957],{"class":51370},[76,137006,53894],{"class":2035},[76,137008,247],{"class":93},[76,137010,66718],{"class":305},[76,137012,136901],{"class":93},[76,137014,53957],{"class":51370},[76,137016,51377],{"class":93},[76,137018,137019,137021,137023],{"class":78,"line":1273},[76,137020,51855],{"class":93},[76,137022,66695],{"class":51370},[76,137024,51377],{"class":93},[56,137026],{"style":126449,"src":137027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[140,137029,137031],{"id":137030},"_142-css新特性","14.2 CSS新特性",[169,137033,137035],{"id":137034},"_1421-新增选择器","14.2.1 新增选择器",[22070,137037,137039],{"id":137038},"_14211-属性选择器","14.2.1.1 属性选择器",[56,137041],{"style":126449,"src":137042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[67,137044,137046],{"className":126593,"code":137045,"language":126595,"meta":58,"style":58},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[73,137047,137048,137063,137079],{"__ignoreMap":58},[76,137049,137050,137052,137054,137056,137058,137060],{"class":78,"line":79},[76,137051,53891],{"class":51370},[76,137053,1089],{"class":93},[76,137055,103148],{"class":2035},[76,137057,247],{"class":89},[76,137059,62769],{"class":305},[76,137061,137062],{"class":93},"] {\n",[76,137064,137065,137067,137069,137071,137073,137075,137077],{"class":78,"line":86},[76,137066,70966],{"class":250},[76,137068,51507],{"class":93},[76,137070,418],{"class":250},[76,137072,51562],{"class":89},[76,137074,51591],{"class":250},[76,137076,130173],{"class":250},[76,137078,1363],{"class":93},[76,137080,137081],{"class":78,"line":97},[76,137082,1637],{"class":93},[56,137084],{"style":126449,"src":137085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137087,231],{},[1206,137089,137090,137093,137096,137099],{},[155,137091,137092],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[155,137094,137095],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[155,137097,137098],{},"属性选择器也可以选择出来自定义的属性",[155,137100,137101,137103],{},[350,137102,9097],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22070,137105,137107],{"id":137106},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[56,137109],{"style":126449,"src":137110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[152,137112,137113],{},[155,137114,137115],{},"fist-child",[67,137117,137119],{"className":126593,"code":137118,"language":126595,"meta":58,"style":58},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[73,137120,137121,137126,137141,137161,137179],{"__ignoreMap":58},[76,137122,137123],{"class":78,"line":79},[76,137124,137125],{"class":82},"\u002F* 属性选择器 *\u002F\n",[76,137127,137128,137130,137132,137134,137136,137138],{"class":78,"line":86},[76,137129,53891],{"class":51370},[76,137131,1089],{"class":93},[76,137133,103148],{"class":2035},[76,137135,247],{"class":89},[76,137137,62769],{"class":305},[76,137139,137140],{"class":93},"] { }\n",[76,137142,137143,137145,137147,137149,137152,137155,137158],{"class":78,"line":97},[76,137144,53891],{"class":51370},[76,137146,1089],{"class":93},[76,137148,14766],{"class":2035},[76,137150,137151],{"class":89},"^=",[76,137153,137154],{"class":305},"\"icon\"",[76,137156,137157],{"class":93},"] { }  ",[76,137159,137160],{"class":82},"\u002F* 以 icon 开头 *\u002F\n",[76,137162,137163,137165,137167,137169,137172,137174,137176],{"class":78,"line":103},[76,137164,53891],{"class":51370},[76,137166,1089],{"class":93},[76,137168,14766],{"class":2035},[76,137170,137171],{"class":89},"$=",[76,137173,137154],{"class":305},[76,137175,137157],{"class":93},[76,137177,137178],{"class":82},"\u002F* 以 icon 结尾 *\u002F\n",[76,137180,137181,137183,137185,137187,137190,137192,137194],{"class":78,"line":1273},[76,137182,53891],{"class":51370},[76,137184,1089],{"class":93},[76,137186,14766],{"class":2035},[76,137188,137189],{"class":89},"*=",[76,137191,137154],{"class":305},[76,137193,137157],{"class":93},[76,137195,137196],{"class":82},"\u002F* 包含 icon *\u002F\n",[14,137198,137199],{},"ul的第一个儿子文本为红色",[14,137201,137202],{},"一定要在冒号前加空格，不然就是选中所有的了",[67,137204,137206],{"className":126593,"code":137205,"language":126595,"meta":58,"style":58},".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",[73,137207,137208,137214,137224,137228,137232,137237,137250,137263,137279,137296,137313],{"__ignoreMap":58},[76,137209,137210,137212],{"class":78,"line":79},[76,137211,126884],{"class":2035},[76,137213,15644],{"class":93},[76,137215,137216,137218,137220,137222],{"class":78,"line":86},[76,137217,70975],{"class":250},[76,137219,51507],{"class":93},[76,137221,57491],{"class":250},[76,137223,1363],{"class":93},[76,137225,137226],{"class":78,"line":97},[76,137227,1637],{"class":93},[76,137229,137230],{"class":78,"line":103},[76,137231,136054],{"class":93},[76,137233,137234],{"class":78,"line":1273},[76,137235,137236],{"class":82},"\u002F* 结构伪类选择器 *\u002F\n",[76,137238,137239,137241,137244,137247],{"class":78,"line":1287},[76,137240,155],{"class":51370},[76,137242,137243],{"class":2035},":first-child",[76,137245,137246],{"class":93}," { }           ",[76,137248,137249],{"class":82},"\u002F* 第一个 *\u002F\n",[76,137251,137252,137254,137257,137260],{"class":78,"line":1293},[76,137253,155],{"class":51370},[76,137255,137256],{"class":2035},":last-child",[76,137258,137259],{"class":93}," { }            ",[76,137261,137262],{"class":82},"\u002F* 最后一个 *\u002F\n",[76,137264,137265,137267,137269,137271,137273,137276],{"class":78,"line":1384},[76,137266,155],{"class":51370},[76,137268,129507],{"class":2035},[76,137270,202],{"class":93},[76,137272,278],{"class":250},[76,137274,137275],{"class":93},") { }          ",[76,137277,137278],{"class":82},"\u002F* 第2个 *\u002F\n",[76,137280,137281,137283,137285,137287,137290,137293],{"class":78,"line":1390},[76,137282,155],{"class":51370},[76,137284,129507],{"class":2035},[76,137286,202],{"class":93},[76,137288,137289],{"class":250},"2n",[76,137291,137292],{"class":93},") { }         ",[76,137294,137295],{"class":82},"\u002F* 偶数 *\u002F\n",[76,137297,137298,137300,137302,137304,137307,137310],{"class":78,"line":1402},[76,137299,155],{"class":51370},[76,137301,129507],{"class":2035},[76,137303,202],{"class":93},[76,137305,137306],{"class":250},"2n+1",[76,137308,137309],{"class":93},") { }       ",[76,137311,137312],{"class":82},"\u002F* 奇数 *\u002F\n",[76,137314,137315,137317,137319,137321,137324,137326],{"class":78,"line":1684},[76,137316,155],{"class":51370},[76,137318,129507],{"class":2035},[76,137320,202],{"class":93},[76,137322,137323],{"class":250},"-n+3",[76,137325,137309],{"class":93},[76,137327,137328],{"class":82},"\u002F* 前3个 *\u002F\n",[51681,137330,137333],{"className":137331},[137332],"example","\n  示例内容\n",[14,137335,137336],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1206,137338,137339],{},[155,137340,137341,137344],{},[73,137342,137343],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137346,137347],{},"也就是说它选择的是熊大",[152,137349,137350],{"start":1287},[155,137351,137352],{},"权重",[67,137354,137356],{"className":126593,"code":137355,"language":126595,"meta":58,"style":58},"\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",[73,137357,137358,137362,137372,137382,137396,137410,137424],{"__ignoreMap":58},[76,137359,137360],{"class":78,"line":79},[76,137361,137236],{"class":82},[76,137363,137364,137366,137368,137370],{"class":78,"line":86},[76,137365,155],{"class":51370},[76,137367,137243],{"class":2035},[76,137369,137246],{"class":93},[76,137371,137249],{"class":82},[76,137373,137374,137376,137378,137380],{"class":78,"line":97},[76,137375,155],{"class":51370},[76,137377,137256],{"class":2035},[76,137379,137259],{"class":93},[76,137381,137262],{"class":82},[76,137383,137384,137386,137388,137390,137392,137394],{"class":78,"line":103},[76,137385,155],{"class":51370},[76,137387,129507],{"class":2035},[76,137389,202],{"class":93},[76,137391,278],{"class":250},[76,137393,137275],{"class":93},[76,137395,137278],{"class":82},[76,137397,137398,137400,137402,137404,137406,137408],{"class":78,"line":1273},[76,137399,155],{"class":51370},[76,137401,129507],{"class":2035},[76,137403,202],{"class":93},[76,137405,137289],{"class":250},[76,137407,137292],{"class":93},[76,137409,137295],{"class":82},[76,137411,137412,137414,137416,137418,137420,137422],{"class":78,"line":1287},[76,137413,155],{"class":51370},[76,137415,129507],{"class":2035},[76,137417,202],{"class":93},[76,137419,137306],{"class":250},[76,137421,137309],{"class":93},[76,137423,137312],{"class":82},[76,137425,137426,137428,137430,137432,137434,137436],{"class":78,"line":1293},[76,137427,155],{"class":51370},[76,137429,129507],{"class":2035},[76,137431,202],{"class":93},[76,137433,137323],{"class":250},[76,137435,137309],{"class":93},[76,137437,137328],{"class":82},[14,137439,137440],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22070,137442,137444],{"id":137443},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137446,137447],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[56,137449],{"style":126449,"src":137450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[152,137452,137453],{},[155,137454,231],{},[1206,137456,137457,137460,137463,137466,137469,137472],{},[155,137458,137459],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[155,137461,137462],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[155,137464,137465],{},"语法： element::before {}",[155,137467,137468],{},"before 和 after 必须有 content 属性",[155,137470,137471],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[155,137473,137474],{},"伪元素选择器和标签选择器一样，权重为 1",[152,137476,137477],{"start":86},[155,137478,137479],{},"实例",[67,137481,137482],{"className":126593,"code":137355,"language":126595,"meta":58,"style":58},[73,137483,137484,137488,137498,137508,137522,137536,137550],{"__ignoreMap":58},[76,137485,137486],{"class":78,"line":79},[76,137487,137236],{"class":82},[76,137489,137490,137492,137494,137496],{"class":78,"line":86},[76,137491,155],{"class":51370},[76,137493,137243],{"class":2035},[76,137495,137246],{"class":93},[76,137497,137249],{"class":82},[76,137499,137500,137502,137504,137506],{"class":78,"line":97},[76,137501,155],{"class":51370},[76,137503,137256],{"class":2035},[76,137505,137259],{"class":93},[76,137507,137262],{"class":82},[76,137509,137510,137512,137514,137516,137518,137520],{"class":78,"line":103},[76,137511,155],{"class":51370},[76,137513,129507],{"class":2035},[76,137515,202],{"class":93},[76,137517,278],{"class":250},[76,137519,137275],{"class":93},[76,137521,137278],{"class":82},[76,137523,137524,137526,137528,137530,137532,137534],{"class":78,"line":1273},[76,137525,155],{"class":51370},[76,137527,129507],{"class":2035},[76,137529,202],{"class":93},[76,137531,137289],{"class":250},[76,137533,137292],{"class":93},[76,137535,137295],{"class":82},[76,137537,137538,137540,137542,137544,137546,137548],{"class":78,"line":1287},[76,137539,155],{"class":51370},[76,137541,129507],{"class":2035},[76,137543,202],{"class":93},[76,137545,137306],{"class":250},[76,137547,137309],{"class":93},[76,137549,137312],{"class":82},[76,137551,137552,137554,137556,137558,137560,137562],{"class":78,"line":1293},[76,137553,155],{"class":51370},[76,137555,129507],{"class":2035},[76,137557,202],{"class":93},[76,137559,137323],{"class":250},[76,137561,137309],{"class":93},[76,137563,137328],{"class":82},[56,137565],{"style":126449,"src":137566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[152,137568,137569],{"start":97},[155,137570,137571],{},"使用场景1",[56,137573],{"style":126449,"src":137574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137576,137577],{},"不需要再加盒子来整红色那部分了",[67,137579,137581],{"className":126593,"code":137580,"language":126595,"meta":58,"style":58},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[73,137582,137583,137588,137597,137608,137618,137622,137631,137642,137652],{"__ignoreMap":58},[76,137584,137585],{"class":78,"line":79},[76,137586,137587],{"class":82},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[76,137589,137590,137592,137595],{"class":78,"line":86},[76,137591,51681],{"class":51370},[76,137593,137594],{"class":2035},"::before",[76,137596,15644],{"class":93},[76,137598,137599,137602,137604,137606],{"class":78,"line":97},[76,137600,137601],{"class":250},"  content",[76,137603,51507],{"class":93},[76,137605,7724],{"class":305},[76,137607,1363],{"class":93},[76,137609,137610,137612,137614,137616],{"class":78,"line":103},[76,137611,128209],{"class":250},[76,137613,51507],{"class":93},[76,137615,60939],{"class":250},[76,137617,1363],{"class":93},[76,137619,137620],{"class":78,"line":1273},[76,137621,1637],{"class":93},[76,137623,137624,137626,137629],{"class":78,"line":1287},[76,137625,51681],{"class":51370},[76,137627,137628],{"class":2035},"::after",[76,137630,15644],{"class":93},[76,137632,137633,137635,137637,137640],{"class":78,"line":1293},[76,137634,137601],{"class":250},[76,137636,51507],{"class":93},[76,137638,137639],{"class":305},"\"→\"",[76,137641,1363],{"class":93},[76,137643,137644,137646,137648,137650],{"class":78,"line":1384},[76,137645,70975],{"class":250},[76,137647,51507],{"class":93},[76,137649,62140],{"class":250},[76,137651,1363],{"class":93},[76,137653,137654],{"class":78,"line":1390},[76,137655,1637],{"class":93},[56,137657],{"style":126449,"src":137658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137660,137661],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[56,137663],{"style":126449,"src":137664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137666,137667],{},"但是在引用时需要先转义一下",[14,137669,137670],{},"content='\\e930'",[152,137672,137673],{"start":103},[155,137674,137675],{},"使用场景2",[14,137677,137678],{},"仿土豆效果",[14,137680,137681],{},"通过使用伪元素选择器可以减少body中盒子的数量",[67,137683,137684],{"className":126593,"code":137580,"language":126595,"meta":58,"style":58},[73,137685,137686,137690,137698,137708,137718,137722,137730,137740,137750],{"__ignoreMap":58},[76,137687,137688],{"class":78,"line":79},[76,137689,137587],{"class":82},[76,137691,137692,137694,137696],{"class":78,"line":86},[76,137693,51681],{"class":51370},[76,137695,137594],{"class":2035},[76,137697,15644],{"class":93},[76,137699,137700,137702,137704,137706],{"class":78,"line":97},[76,137701,137601],{"class":250},[76,137703,51507],{"class":93},[76,137705,7724],{"class":305},[76,137707,1363],{"class":93},[76,137709,137710,137712,137714,137716],{"class":78,"line":103},[76,137711,128209],{"class":250},[76,137713,51507],{"class":93},[76,137715,60939],{"class":250},[76,137717,1363],{"class":93},[76,137719,137720],{"class":78,"line":1273},[76,137721,1637],{"class":93},[76,137723,137724,137726,137728],{"class":78,"line":1287},[76,137725,51681],{"class":51370},[76,137727,137628],{"class":2035},[76,137729,15644],{"class":93},[76,137731,137732,137734,137736,137738],{"class":78,"line":1293},[76,137733,137601],{"class":250},[76,137735,51507],{"class":93},[76,137737,137639],{"class":305},[76,137739,1363],{"class":93},[76,137741,137742,137744,137746,137748],{"class":78,"line":1384},[76,137743,70975],{"class":250},[76,137745,51507],{"class":93},[76,137747,62140],{"class":250},[76,137749,1363],{"class":93},[76,137751,137752],{"class":78,"line":1390},[76,137753,1637],{"class":93},[56,137755],{"style":126449,"src":137756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[152,137758,137759],{"start":1273},[155,137760,137761],{},"使用场景3",[14,137763,137764],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[67,137766,137768],{"className":126593,"code":137767,"language":126595,"meta":58,"style":58},".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",[73,137769,137770,137776,137786,137790,137794,137798,137806,137816,137826,137830,137838,137848,137858],{"__ignoreMap":58},[76,137771,137772,137774],{"class":78,"line":79},[76,137773,130441],{"class":2035},[76,137775,15644],{"class":93},[76,137777,137778,137780,137782,137784],{"class":78,"line":86},[76,137779,131073],{"class":250},[76,137781,51507],{"class":93},[76,137783,23808],{"class":250},[76,137785,1363],{"class":93},[76,137787,137788],{"class":78,"line":97},[76,137789,1637],{"class":93},[76,137791,137792],{"class":78,"line":103},[76,137793,136054],{"class":93},[76,137795,137796],{"class":78,"line":1273},[76,137797,137587],{"class":82},[76,137799,137800,137802,137804],{"class":78,"line":1287},[76,137801,51681],{"class":51370},[76,137803,137594],{"class":2035},[76,137805,15644],{"class":93},[76,137807,137808,137810,137812,137814],{"class":78,"line":1293},[76,137809,137601],{"class":250},[76,137811,51507],{"class":93},[76,137813,7724],{"class":305},[76,137815,1363],{"class":93},[76,137817,137818,137820,137822,137824],{"class":78,"line":1384},[76,137819,128209],{"class":250},[76,137821,51507],{"class":93},[76,137823,60939],{"class":250},[76,137825,1363],{"class":93},[76,137827,137828],{"class":78,"line":1390},[76,137829,1637],{"class":93},[76,137831,137832,137834,137836],{"class":78,"line":1402},[76,137833,51681],{"class":51370},[76,137835,137628],{"class":2035},[76,137837,15644],{"class":93},[76,137839,137840,137842,137844,137846],{"class":78,"line":1684},[76,137841,137601],{"class":250},[76,137843,51507],{"class":93},[76,137845,137639],{"class":305},[76,137847,1363],{"class":93},[76,137849,137850,137852,137854,137856],{"class":78,"line":1689},[76,137851,70975],{"class":250},[76,137853,51507],{"class":93},[76,137855,62140],{"class":250},[76,137857,1363],{"class":93},[76,137859,137860],{"class":78,"line":1695},[76,137861,1637],{"class":93},[14,137863,137864],{},"div {\nmargin: 0 auto;\n}",[67,137866,137869],{"className":137867,"code":137868,"language":5259},[5257],"\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",[73,137870,137868],{"__ignoreMap":58},[14,137872,137873],{},"如果想让多个元素都发生变化",[14,137875,137876],{},"不能如下操作：",[14,137878,137879],{},"transition: width 2s ease 0.5s;",[14,137881,137882],{},"transition: height 2s ease 0.5s;不对！！！",[14,137884,137885],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137887,137888],{},"使用如下：加逗号隔开",[14,137890,137891],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137893,137894],{},"transition all 2s ease;",[169,137896,137898],{"id":137897},"_1426-过渡练习","14.2.6 过渡练习",[152,137900,137901],{},[155,137902,137903],{},"进度条",[56,137905],{"style":126449,"src":137906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[67,137908,137910],{"className":126593,"code":137909,"language":126595,"meta":58,"style":58},"div {\n  transition: all 0.3s ease;\n}\n",[73,137911,137912,137918,137936],{"__ignoreMap":58},[76,137913,137914,137916],{"class":78,"line":79},[76,137915,51681],{"class":51370},[76,137917,15644],{"class":93},[76,137919,137920,137923,137925,137927,137930,137932,137934],{"class":78,"line":86},[76,137921,137922],{"class":250},"  transition",[76,137924,51507],{"class":93},[76,137926,28194],{"class":250},[76,137928,137929],{"class":250}," 0.3",[76,137931,894],{"class":89},[76,137933,78750],{"class":250},[76,137935,1363],{"class":93},[76,137937,137938],{"class":78,"line":97},[76,137939,1637],{"class":93},[152,137941,137942],{"start":86},[155,137943,137944],{},"小米logo",[14,137946,137947],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[67,137949,137951],{"className":126593,"code":137950,"language":126595,"meta":58,"style":58},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[73,137952,137953,137958,137964,137980,137985],{"__ignoreMap":58},[76,137954,137955],{"class":78,"line":79},[76,137956,137957],{"class":82},"\u002F* CSS3 过渡 *\u002F\n",[76,137959,137960,137962],{"class":78,"line":86},[76,137961,51681],{"class":51370},[76,137963,15644],{"class":93},[76,137965,137966,137968,137970,137972,137974,137976,137978],{"class":78,"line":97},[76,137967,137922],{"class":250},[76,137969,51507],{"class":93},[76,137971,28194],{"class":250},[76,137973,137929],{"class":250},[76,137975,894],{"class":89},[76,137977,78750],{"class":250},[76,137979,1363],{"class":93},[76,137981,137982],{"class":78,"line":103},[76,137983,137984],{"class":82},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[76,137986,137987],{"class":78,"line":1273},[76,137988,1637],{"class":93},[14,137990,137991],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[117,137993,137994],{},"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":58,"searchDepth":86,"depth":86,"links":137996},[137997,138002],{"id":136327,"depth":86,"text":136328,"children":137998},[137999,138000,138001],{"id":136331,"depth":97,"text":136332},{"id":136408,"depth":97,"text":136409},{"id":136739,"depth":97,"text":136740},{"id":137030,"depth":86,"text":137031,"children":138003},[138004,138005],{"id":137034,"depth":97,"text":137035},{"id":137897,"depth":97,"text":137898},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136319,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138012,"title":138013,"body":138014,"description":122,"extension":123,"meta":139758,"navigation":125,"path":139759,"seo":139760,"stem":139761,"__hash__":139762},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138015,"toc":139739},[138016,138019,138023,138026,138032,138038,138042,138044,138047,138050,138053,138056,138059,138062,138065,138069,138073,138076,138079,138082,138086,138089,138092,138097,138100,138103,138106,138110,138113,138122,138125,138128,138132,138135,138138,138143,138150,138164,138172,138179,138184,138187,138190,138193,138200,138204,138210,138216,138219,138222,138227,138233,138235,138243,138248,138251,138257,138259,138264,138269,138272,138274,138279,138282,138287,138292,138326,138330,138334,138337,138341,138344,138430,138433,138470,138473,138509,138513,138518,138531,138585,138587,138615,138617,138645,138651,138665,138667,138711,138713,138757,138760,138767,138778,138780,138807,138809,138835,138842,138858,138860,138954,138956,139050,139057,139060,139065,139071,139145,139148,139150,139186,139188,139224,139227,139234,139253,139256,139259,139261,139286,139288,139312,139315,139318,139348,139352,139355,139418,139420,139486,139488,139552,139555,139587,139589,139615,139617,139643,139646,139677,139679,139705,139707,139733,139736],[10,138017,138013],{"id":138018},"_15-品优购项目上篇-搭建与公共模块",[140,138020,138022],{"id":138021},"_151-项目规划","15.1 项目规划",[56,138024],{"style":126449,"src":138025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138027,138028,138031],{},[350,138029,138030],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138033,138034,138037],{},[350,138035,138036],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[140,138039,138041],{"id":138040},"_152-项目介绍","15.2 项目介绍",[14,138043,138030],{},[56,138045],{"style":126449,"src":138046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138048,138049],{},"主页：",[56,138051],{"style":126449,"src":138052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138054,138055],{},"列表页：",[56,138057],{"style":126449,"src":138058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138060,138061],{},"注册页：",[56,138063],{"style":126449,"src":138064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[140,138066,138068],{"id":138067},"_153-项目搭建工作","15.3 项目搭建工作",[169,138070,138072],{"id":138071},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[56,138074],{"style":126449,"src":138075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138077,138078],{},"经常更换的图片要放到upload文件夹中",[14,138080,138081],{},"不经常换的放到images文件夹中",[169,138083,138085],{"id":138084},"_1532-创建文件如下","15.3.2 创建文件如下",[56,138087],{"style":126449,"src":138088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[56,138090],{"style":126449,"src":138091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138093,138094],{},[350,138095,138096],{},"初始化样式：",[14,138098,138099],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138101,138102],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138104,138105],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[169,138107,138109],{"id":138108},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138111,138112],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138114,138115,138116,138121],{},"这里最典型的应用就是 ",[350,138117,138118],{},[73,138119,138120],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[56,138123],{"style":126449,"src":138124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138126,138127],{},"通过link方法来引入",[169,138129,138131],{"id":138130},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[56,138133],{"style":126449,"src":138134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138136,138137],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[152,138139,138140],{},[155,138141,138142],{},"制作favicon图标",[14,138144,138145,138146,138149],{},"①把品优购图标切成 ",[73,138147,138148],{},"png"," 图片",[14,138151,138152,138153,138155,138156,138159,138160],{},"②把 ",[73,138154,138148],{}," 图片转换为 ",[73,138157,138158],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[439,138161,138162],{"href":138162,"rel":138163},"http:\u002F\u002Fwww.bitbug.net\u002F",[23937],[152,138165,138166,138169],{"start":86},[155,138167,138168],{},"favicon图标放到网站根目录下",[155,138170,138171],{},"HTML页面引入favicon",[14,138173,138174,138175,138178],{},"在html 页面里面的 ",[73,138176,138177],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138180,138181],{},[73,138182,138183],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138185,138186],{},"复制这行代码或者在生成这个的网站进行复制",[56,138188],{"style":126449,"src":138189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138191,138192],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138194,138195,138196],{},"例如:",[439,138197,138198],{"href":138198,"rel":138199},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23937],[169,138201,138203],{"id":138202},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138205,138206,138209],{},[350,138207,138208],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138211,138212,138215],{},[350,138213,138214],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138217,138218],{},"页面必须有三个标签用来符合 SEO 优化",[56,138220],{"style":126449,"src":138221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[152,138223,138224],{},[155,138225,138226],{},"title网站标题",[14,138228,138229,138232],{},[350,138230,138231],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138234,68860],{},[1206,138236,138237,138240],{},[155,138238,138239],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[155,138241,138242],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[152,138244,138245],{"start":86},[155,138246,138247],{},"description网站描述",[14,138249,138250],{},"简要说明我们网站主要是做什么的",[14,138252,138253,138256],{},[350,138254,138255],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138258,68860],{},[14,138260,138261],{},[73,138262,138263],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[152,138265,138266],{"start":97},[155,138267,138268],{},"keywords关键词",[14,138270,138271],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138273,68860],{},[14,138275,138276],{},[73,138277,138278],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138280,138281],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138283,138284],{},[350,138285,138286],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[152,138288,138289],{"start":103},[155,138290,138291],{},"代码总结",[67,138293,138294],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},[73,138295,138296,138300,138314,138318],{"__ignoreMap":58},[76,138297,138298],{"class":78,"line":79},[76,138299,130704],{"class":82},[76,138301,138302,138304,138306,138308,138310,138312],{"class":78,"line":86},[76,138303,1109],{"class":93},[76,138305,51681],{"class":51370},[76,138307,53556],{"class":2035},[76,138309,247],{"class":93},[76,138311,130717],{"class":305},[76,138313,51377],{"class":93},[76,138315,138316],{"class":78,"line":97},[76,138317,130724],{"class":93},[76,138319,138320,138322,138324],{"class":78,"line":103},[76,138321,51855],{"class":93},[76,138323,51681],{"class":51370},[76,138325,51377],{"class":93},[140,138327,138329],{"id":138328},"_154-项目公共部分制作","15.4 项目公共部分制作",[169,138331,138333],{"id":138332},"_1541-常用模块类命名","15.4.1 常用模块类命名",[56,138335],{"style":126449,"src":138336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[169,138338,138340],{"id":138339},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138342,138343],{},"布局思路：",[1206,138345,138346,138349,138352,138374,138407],{},[155,138347,138348],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[155,138350,138351],{},"里面包含版心的盒子",[155,138353,138354,138355],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1206,138356,138357,138365,138371],{},[155,138358,138359,138360,21572,138362,138364],{},"1 号盒子 里面包含一个",[73,138361,1206],{},[73,138363,1206],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[155,138366,138367,138368,138370],{},"里面的内容是水平排列，所以需要给",[73,138369,155],{},"设置浮动",[155,138372,138373],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[155,138375,138376,138377],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1206,138378,138379,138393,138398],{},[155,138380,138381,138382,21572,138384,138386,138387,138389,138390,138392],{},"2 号盒子 里面包含一个",[73,138383,1206],{},[73,138385,1206],{},"包裹",[73,138388,155],{},"，中间的",[73,138391,1120],{},"可以用样式去设置，也可以用字符 |",[155,138394,138395,138396,138370],{},"里面内容水平排列，给",[73,138397,155],{},[155,138399,138400,138401,138403,138404,138406],{},"找到里面所有偶数的 ",[73,138402,155],{}," 设置样式（偶数的 ",[73,138405,155],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[155,138408,138409,138410],{},"需要用到字体图标",[1206,138411,138412,138418,138421,138424,138427],{},[155,138413,138414,138415],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[73,138416,138417],{},"arrow-icon",[155,138419,138420],{},"先要引入字体图片的资源",[155,138422,138423],{},"在样式里面利用 font-face 来进行声明",[155,138425,138426],{},"在伪元素的 content属性设置 图标的编码",[155,138428,138429],{},"给伪元素设置font-family属性",[14,138431,138432],{},"结构实例代码：",[67,138434,138436],{"className":126593,"code":138435,"language":126595,"meta":58,"style":58},"div::before {\n  content: \"\";\n  display: block;\n}\n",[73,138437,138438,138446,138456,138466],{"__ignoreMap":58},[76,138439,138440,138442,138444],{"class":78,"line":79},[76,138441,51681],{"class":51370},[76,138443,137594],{"class":2035},[76,138445,15644],{"class":93},[76,138447,138448,138450,138452,138454],{"class":78,"line":86},[76,138449,137601],{"class":250},[76,138451,51507],{"class":93},[76,138453,7724],{"class":305},[76,138455,1363],{"class":93},[76,138457,138458,138460,138462,138464],{"class":78,"line":97},[76,138459,128209],{"class":250},[76,138461,51507],{"class":93},[76,138463,60939],{"class":250},[76,138465,1363],{"class":93},[76,138467,138468],{"class":78,"line":103},[76,138469,1637],{"class":93},[14,138471,138472],{},"样式实例代码：",[67,138474,138475],{"className":126593,"code":138435,"language":126595,"meta":58,"style":58},[73,138476,138477,138485,138495,138505],{"__ignoreMap":58},[76,138478,138479,138481,138483],{"class":78,"line":79},[76,138480,51681],{"class":51370},[76,138482,137594],{"class":2035},[76,138484,15644],{"class":93},[76,138486,138487,138489,138491,138493],{"class":78,"line":86},[76,138488,137601],{"class":250},[76,138490,51507],{"class":93},[76,138492,7724],{"class":305},[76,138494,1363],{"class":93},[76,138496,138497,138499,138501,138503],{"class":78,"line":97},[76,138498,128209],{"class":250},[76,138500,51507],{"class":93},[76,138502,60939],{"class":250},[76,138504,1363],{"class":93},[76,138506,138507],{"class":78,"line":103},[76,138508,1637],{"class":93},[169,138510,138512],{"id":138511},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1206,138514,138515],{},[155,138516,138517],{},"header 盒子必须要有高度",[14,138519,138520,138521,138523,138524],{},"1 号盒子是 ",[73,138522,131605],{}," 标志定位，在正常开发过程中， ",[350,138525,138526,138527,138530],{},"logo的布局其实是有讲究的，需要进行 ",[73,138528,138529],{},"logoSEO","的优化 （★★★）",[1206,138532,138533,138541,138549,138576],{},[155,138534,138535,138537,138538,138540],{},[73,138536,131605],{}," 里面首先放一个 ",[73,138539,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[155,138542,138543,138545,138546,138548],{},[73,138544,10],{}," 里面再放一个链接，可以返回首页的，把 ",[73,138547,131605],{}," 的背景图片给链接即可",[155,138550,138551,138552],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1206,138553,138554,138569],{},[155,138555,138556,138557,138560,138561,138564,138565,138568],{},"方法1：",[73,138558,138559],{},"text-indent"," 移到盒子外面（",[73,138562,138563],{},"text-indent: -9999px",") ，然后 ",[73,138566,138567],{},"overflow:hidden"," ，淘宝的做法",[155,138570,138571,138572,138575],{},"方法2：直接给 ",[73,138573,138574],{},"font-size: 0;"," 就看不到文字了，京东的做法",[155,138577,138578,138579,138581,138582,138584],{},"最后给链接一个 ",[73,138580,51477],{}," 属性，这样鼠标放到 ",[73,138583,131605],{}," 上就可以看到提示文字了",[14,138586,138432],{},[67,138588,138589],{"className":127340,"code":131826,"language":127342,"meta":58,"style":58},[73,138590,138591],{"__ignoreMap":58},[76,138592,138593,138595,138597,138599,138601,138603,138605,138607,138609,138611,138613],{"class":78,"line":79},[76,138594,1109],{"class":93},[76,138596,439],{"class":51370},[76,138598,61127],{"class":2035},[76,138600,247],{"class":93},[76,138602,131841],{"class":305},[76,138604,131844],{"class":2035},[76,138606,247],{"class":93},[76,138608,131849],{"class":305},[76,138610,131852],{"class":93},[76,138612,439],{"class":51370},[76,138614,51377],{"class":93},[14,138616,138472],{},[67,138618,138619],{"className":127340,"code":131826,"language":127342,"meta":58,"style":58},[73,138620,138621],{"__ignoreMap":58},[76,138622,138623,138625,138627,138629,138631,138633,138635,138637,138639,138641,138643],{"class":78,"line":79},[76,138624,1109],{"class":93},[76,138626,439],{"class":51370},[76,138628,61127],{"class":2035},[76,138630,247],{"class":93},[76,138632,131841],{"class":305},[76,138634,131844],{"class":2035},[76,138636,247],{"class":93},[76,138638,131849],{"class":305},[76,138640,131852],{"class":93},[76,138642,439],{"class":51370},[76,138644,51377],{"class":93},[14,138646,138647,138648,138650],{},"2 号盒子是 ",[73,138649,131618],{}," 搜索模块定位",[1206,138652,138653,138656,138659,138662],{},[155,138654,138655],{},"search盒子利用定位的方式放在对应的位置",[155,138657,138658],{},"search盒子设置绝对定位，header盒子设置相对定位",[155,138660,138661],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[155,138663,138664],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138666,138432],{},[67,138668,138669],{"className":126593,"code":131913,"language":126595,"meta":58,"style":58},[73,138670,138671,138693,138697,138707],{"__ignoreMap":58},[76,138672,138673,138675,138677,138679,138681,138683,138685,138687,138689,138691],{"class":78,"line":79},[76,138674,51681],{"class":51370},[76,138676,12507],{"class":93},[76,138678,14],{"class":51370},[76,138680,12507],{"class":93},[76,138682,10],{"class":51370},[76,138684,12507],{"class":93},[76,138686,1206],{"class":51370},[76,138688,12507],{"class":93},[76,138690,155],{"class":51370},[76,138692,15644],{"class":93},[76,138694,138695],{"class":78,"line":86},[76,138696,131942],{"class":82},[76,138698,138699,138701,138703,138705],{"class":78,"line":97},[76,138700,128209],{"class":250},[76,138702,51507],{"class":93},[76,138704,60939],{"class":250},[76,138706,1363],{"class":93},[76,138708,138709],{"class":78,"line":103},[76,138710,1637],{"class":93},[14,138712,138472],{},[67,138714,138715],{"className":126593,"code":131913,"language":126595,"meta":58,"style":58},[73,138716,138717,138739,138743,138753],{"__ignoreMap":58},[76,138718,138719,138721,138723,138725,138727,138729,138731,138733,138735,138737],{"class":78,"line":79},[76,138720,51681],{"class":51370},[76,138722,12507],{"class":93},[76,138724,14],{"class":51370},[76,138726,12507],{"class":93},[76,138728,10],{"class":51370},[76,138730,12507],{"class":93},[76,138732,1206],{"class":51370},[76,138734,12507],{"class":93},[76,138736,155],{"class":51370},[76,138738,15644],{"class":93},[76,138740,138741],{"class":78,"line":86},[76,138742,131942],{"class":82},[76,138744,138745,138747,138749,138751],{"class":78,"line":97},[76,138746,128209],{"class":250},[76,138748,51507],{"class":93},[76,138750,60939],{"class":250},[76,138752,1363],{"class":93},[76,138754,138755],{"class":78,"line":103},[76,138756,1637],{"class":93},[14,138758,138759],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138761,138762,138763,138766],{},"3 号盒子是 ",[73,138764,138765],{},"hotwords"," 热词模块定位",[1206,138768,138769,138772,138775],{},[155,138770,138771],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[155,138773,138774],{},"给里面所有的a标签设置 左右10px的外边距",[155,138776,138777],{},"给第一个a标签设置文字变红色（#c81623）",[14,138779,138432],{},[67,138781,138783],{"className":126593,"code":138782,"language":126595,"meta":58,"style":58},"div {\n  margin: 0 auto;\n}\n",[73,138784,138785,138791,138803],{"__ignoreMap":58},[76,138786,138787,138789],{"class":78,"line":79},[76,138788,51681],{"class":51370},[76,138790,15644],{"class":93},[76,138792,138793,138795,138797,138799,138801],{"class":78,"line":86},[76,138794,70540],{"class":250},[76,138796,51507],{"class":93},[76,138798,392],{"class":250},[76,138800,51626],{"class":250},[76,138802,1363],{"class":93},[76,138804,138805],{"class":78,"line":97},[76,138806,1637],{"class":93},[14,138808,138472],{},[67,138810,138811],{"className":126593,"code":138782,"language":126595,"meta":58,"style":58},[73,138812,138813,138819,138831],{"__ignoreMap":58},[76,138814,138815,138817],{"class":78,"line":79},[76,138816,51681],{"class":51370},[76,138818,15644],{"class":93},[76,138820,138821,138823,138825,138827,138829],{"class":78,"line":86},[76,138822,70540],{"class":250},[76,138824,51507],{"class":93},[76,138826,392],{"class":250},[76,138828,51626],{"class":250},[76,138830,1363],{"class":93},[76,138832,138833],{"class":78,"line":97},[76,138834,1637],{"class":93},[14,138836,138837,138838,138841],{},"4 号盒子是 ",[73,138839,138840],{},"shopcar"," 购物车模块",[1206,138843,138844,138849,138852,138855],{},[155,138845,123376,138846,138848],{},[73,138847,138840],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[155,138850,138851],{},"count 统计部分用绝对定位做",[155,138853,138854],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[155,138856,138857],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138859,138432],{},[67,138861,138862],{"className":126593,"code":132025,"language":126595,"meta":58,"style":58},[73,138863,138864,138868,138882,138886,138900,138904,138918,138922,138936,138940],{"__ignoreMap":58},[76,138865,138866],{"class":78,"line":79},[76,138867,132032],{"class":82},[76,138869,138870,138872,138874,138876,138878,138880],{"class":78,"line":86},[76,138871,132037],{"class":2035},[76,138873,79877],{"class":93},[76,138875,128953],{"class":250},[76,138877,51507],{"class":93},[76,138879,132046],{"class":250},[76,138881,129523],{"class":93},[76,138883,138884],{"class":78,"line":97},[76,138885,132053],{"class":82},[76,138887,138888,138890,138892,138894,138896,138898],{"class":78,"line":103},[76,138889,132058],{"class":2035},[76,138891,79877],{"class":93},[76,138893,128953],{"class":250},[76,138895,51507],{"class":93},[76,138897,54834],{"class":250},[76,138899,129523],{"class":93},[76,138901,138902],{"class":78,"line":1273},[76,138903,132073],{"class":82},[76,138905,138906,138908,138910,138912,138914,138916],{"class":78,"line":1287},[76,138907,132078],{"class":2035},[76,138909,79877],{"class":93},[76,138911,128953],{"class":250},[76,138913,51507],{"class":93},[76,138915,54901],{"class":250},[76,138917,129523],{"class":93},[76,138919,138920],{"class":78,"line":1293},[76,138921,132093],{"class":82},[76,138923,138924,138926,138928,138930,138932,138934],{"class":78,"line":1384},[76,138925,132098],{"class":2035},[76,138927,79877],{"class":93},[76,138929,128953],{"class":250},[76,138931,51507],{"class":93},[76,138933,86303],{"class":250},[76,138935,129523],{"class":93},[76,138937,138938],{"class":78,"line":1390},[76,138939,132113],{"class":82},[76,138941,138942,138944,138946,138948,138950,138952],{"class":78,"line":1402},[76,138943,132118],{"class":2035},[76,138945,79877],{"class":93},[76,138947,128953],{"class":250},[76,138949,51507],{"class":93},[76,138951,132127],{"class":250},[76,138953,129523],{"class":93},[14,138955,138472],{},[67,138957,138958],{"className":126593,"code":132025,"language":126595,"meta":58,"style":58},[73,138959,138960,138964,138978,138982,138996,139000,139014,139018,139032,139036],{"__ignoreMap":58},[76,138961,138962],{"class":78,"line":79},[76,138963,132032],{"class":82},[76,138965,138966,138968,138970,138972,138974,138976],{"class":78,"line":86},[76,138967,132037],{"class":2035},[76,138969,79877],{"class":93},[76,138971,128953],{"class":250},[76,138973,51507],{"class":93},[76,138975,132046],{"class":250},[76,138977,129523],{"class":93},[76,138979,138980],{"class":78,"line":97},[76,138981,132053],{"class":82},[76,138983,138984,138986,138988,138990,138992,138994],{"class":78,"line":103},[76,138985,132058],{"class":2035},[76,138987,79877],{"class":93},[76,138989,128953],{"class":250},[76,138991,51507],{"class":93},[76,138993,54834],{"class":250},[76,138995,129523],{"class":93},[76,138997,138998],{"class":78,"line":1273},[76,138999,132073],{"class":82},[76,139001,139002,139004,139006,139008,139010,139012],{"class":78,"line":1287},[76,139003,132078],{"class":2035},[76,139005,79877],{"class":93},[76,139007,128953],{"class":250},[76,139009,51507],{"class":93},[76,139011,54901],{"class":250},[76,139013,129523],{"class":93},[76,139015,139016],{"class":78,"line":1293},[76,139017,132093],{"class":82},[76,139019,139020,139022,139024,139026,139028,139030],{"class":78,"line":1384},[76,139021,132098],{"class":2035},[76,139023,79877],{"class":93},[76,139025,128953],{"class":250},[76,139027,51507],{"class":93},[76,139029,86303],{"class":250},[76,139031,129523],{"class":93},[76,139033,139034],{"class":78,"line":1390},[76,139035,132113],{"class":82},[76,139037,139038,139040,139042,139044,139046,139048],{"class":78,"line":1402},[76,139039,132118],{"class":2035},[76,139041,79877],{"class":93},[76,139043,128953],{"class":250},[76,139045,51507],{"class":93},[76,139047,132127],{"class":250},[76,139049,129523],{"class":93},[169,139051,139053,139054,139056],{"id":139052},"_1544-nav导航模块制作","15.4.4 ",[73,139055,53783],{},"导航模块制作",[56,139058],{"style":126449,"src":139059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139061,139062,139064],{},[73,139063,53783],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139066,139067,139068],{},"1 号盒子左侧浮动，",[73,139069,139070],{},"dropdown",[1206,139072,139073,139083,139091,139097,139105,139115,139123,139134],{},[155,139074,139075,139076,101059,139079,139082],{},"1号盒子有讲究，根据相关性 里面包含 ",[73,139077,139078],{},".dt",[73,139080,139081],{},".dd"," 两个盒子",[155,139084,139085,139087,139088,139090],{},[73,139086,139078],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[73,139089,139081],{}," 挤到下面去了",[155,139092,139093,139094,139096],{},"给 ",[73,139095,139081],{}," 盒子设置宽度 和 高度，以及背景颜色",[155,139098,139093,139099,139101,139102,120278],{},[73,139100,139081],{}," 盒子里面定义 无序列表 （",[73,139103,139104],{},"ul > li > a",[155,139106,139107,139108,139110,139111,139114],{},"每个 ",[73,139109,155],{}," 都有一个高度（",[73,139112,139113],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[155,139116,139093,139117,139119,139120,120278],{},[73,139118,155],{}," 里面的a设置文字大小（",[73,139121,139122],{},"14px",[155,139124,139093,139125,139127,139128,139130,139131,139133],{},[73,139126,155],{}," 设置 ",[73,139129,127754],{},"，当鼠标移入的时候，让",[73,139132,155],{},"的背景变成白色，让里面的文字变成红色",[155,139135,139136,139138,139139,139141,139142,139144],{},[73,139137,155],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[73,139140,155],{},"的右侧，那么给",[73,139143,155],{},"设置相对定位",[14,139146,139147],{},"一定要注意相关性",[14,139149,138432],{},[67,139151,139152],{"className":126593,"code":138435,"language":126595,"meta":58,"style":58},[73,139153,139154,139162,139172,139182],{"__ignoreMap":58},[76,139155,139156,139158,139160],{"class":78,"line":79},[76,139157,51681],{"class":51370},[76,139159,137594],{"class":2035},[76,139161,15644],{"class":93},[76,139163,139164,139166,139168,139170],{"class":78,"line":86},[76,139165,137601],{"class":250},[76,139167,51507],{"class":93},[76,139169,7724],{"class":305},[76,139171,1363],{"class":93},[76,139173,139174,139176,139178,139180],{"class":78,"line":97},[76,139175,128209],{"class":250},[76,139177,51507],{"class":93},[76,139179,60939],{"class":250},[76,139181,1363],{"class":93},[76,139183,139184],{"class":78,"line":103},[76,139185,1637],{"class":93},[14,139187,138472],{},[67,139189,139190],{"className":126593,"code":138435,"language":126595,"meta":58,"style":58},[73,139191,139192,139200,139210,139220],{"__ignoreMap":58},[76,139193,139194,139196,139198],{"class":78,"line":79},[76,139195,51681],{"class":51370},[76,139197,137594],{"class":2035},[76,139199,15644],{"class":93},[76,139201,139202,139204,139206,139208],{"class":78,"line":86},[76,139203,137601],{"class":250},[76,139205,51507],{"class":93},[76,139207,7724],{"class":305},[76,139209,1363],{"class":93},[76,139211,139212,139214,139216,139218],{"class":78,"line":97},[76,139213,128209],{"class":250},[76,139215,51507],{"class":93},[76,139217,60939],{"class":250},[76,139219,1363],{"class":93},[76,139221,139222],{"class":78,"line":103},[76,139223,1637],{"class":93},[14,139225,139226],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139228,139229,139230,139233],{},"2 号盒子左侧浮动，",[73,139231,139232],{},"navitems"," 导航栏组",[1206,139235,139236,139241,139250],{},[155,139237,139238,139239],{},"里面结构是 ",[73,139240,139104],{},[155,139242,139243,139244,139246,139247,139249],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[73,139245,439],{},"左右的",[73,139248,30953],{},"把两侧撑开",[155,139251,139252],{},"让文字垂直居中（行高等于高度）",[56,139254],{"style":126449,"src":139255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139257,139258],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139260,138432],{},[67,139262,139264],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},".box {\n  float: left;\n}\n",[73,139265,139266,139272,139282],{"__ignoreMap":58},[76,139267,139268,139270],{"class":78,"line":79},[76,139269,130441],{"class":2035},[76,139271,15644],{"class":93},[76,139273,139274,139276,139278,139280],{"class":78,"line":86},[76,139275,131073],{"class":250},[76,139277,51507],{"class":93},[76,139279,23808],{"class":250},[76,139281,1363],{"class":93},[76,139283,139284],{"class":78,"line":97},[76,139285,1637],{"class":93},[14,139287,138472],{},[67,139289,139290],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,139291,139292,139298,139308],{"__ignoreMap":58},[76,139293,139294,139296],{"class":78,"line":79},[76,139295,130441],{"class":2035},[76,139297,15644],{"class":93},[76,139299,139300,139302,139304,139306],{"class":78,"line":86},[76,139301,131073],{"class":250},[76,139303,51507],{"class":93},[76,139305,23808],{"class":250},[76,139307,1363],{"class":93},[76,139309,139310],{"class":78,"line":97},[76,139311,1637],{"class":93},[14,139313,139314],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[56,139316],{"style":126449,"src":139317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[67,139319,139320],{"className":126593,"code":130750,"language":126595,"meta":58,"style":58},[73,139321,139322,139328,139344],{"__ignoreMap":58},[76,139323,139324,139326],{"class":78,"line":79},[76,139325,51681],{"class":51370},[76,139327,15644],{"class":93},[76,139329,139330,139332,139334,139336,139338,139340,139342],{"class":78,"line":86},[76,139331,70966],{"class":250},[76,139333,51507],{"class":93},[76,139335,418],{"class":250},[76,139337,51562],{"class":89},[76,139339,51591],{"class":250},[76,139341,129985],{"class":250},[76,139343,1363],{"class":93},[76,139345,139346],{"class":78,"line":97},[76,139347,1637],{"class":93},[169,139349,139351],{"id":139350},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[56,139353],{"style":126449,"src":139354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1206,139356,139357,139362,139367],{},[155,139358,139359,139361],{},[73,139360,131796],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[155,139363,139364,139366],{},[73,139365,131796],{}," 里面有一个大的版心",[155,139368,139369,139370,139373,139374],{},"版心里面包含 1 号盒子，",[73,139371,139372],{},"mod_service"," 是服务模块，mod 是模块的意思",[1206,139375,139376,139381,139394,139410,139415],{},[155,139377,139093,139378,139380],{},[73,139379,139372],{}," 设置高度（80px）和下边框",[155,139382,139383,139384,139387,139388,139390,139391,139393],{},"在里面定义 ",[73,139385,139386],{},"ul > li"," ,每个",[73,139389,155],{}," 宽度是300px 高度是 50px，给每个",[73,139392,155],{},"设置35px的左内边距",[155,139395,139396,139397,139399,139400,139402,139403,139405,139406,18482,139408,120278],{},"在每个",[73,139398,155],{},"里面，放一个 ",[73,139401,22982],{},"（里面放图标），一个",[73,139404,51681],{},"（里面放",[73,139407,51681],{},[73,139409,14],{},[155,139411,139093,139412,139414],{},[73,139413,22982],{},"设置浮动，让h5与这个div左右排列",[155,139416,139417],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139419,138432],{},[67,139421,139423],{"className":126593,"code":139422,"language":126595,"meta":58,"style":58},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[73,139424,139425,139431,139443,139455,139482],{"__ignoreMap":58},[76,139426,139427,139429],{"class":78,"line":79},[76,139428,134350],{"class":2035},[76,139430,15644],{"class":93},[76,139432,139433,139435,139437,139439,139441],{"class":78,"line":86},[76,139434,70638],{"class":250},[76,139436,51507],{"class":93},[76,139438,899],{"class":250},[76,139440,51562],{"class":89},[76,139442,1363],{"class":93},[76,139444,139445,139447,139449,139451,139453],{"class":78,"line":97},[76,139446,70858],{"class":250},[76,139448,51507],{"class":93},[76,139450,899],{"class":250},[76,139452,51562],{"class":89},[76,139454,1363],{"class":93},[76,139456,139457,139459,139461,139463,139465,139467,139469,139471,139474,139476,139478,139480],{"class":78,"line":103},[76,139458,70681],{"class":250},[76,139460,51507],{"class":93},[76,139462,61796],{"class":250},[76,139464,202],{"class":93},[76,139466,134389],{"class":5288},[76,139468,13786],{"class":93},[76,139470,61806],{"class":250},[76,139472,139473],{"class":250}," -10",[76,139475,51562],{"class":89},[76,139477,134408],{"class":250},[76,139479,51562],{"class":89},[76,139481,1363],{"class":93},[76,139483,139484],{"class":78,"line":1273},[76,139485,1637],{"class":93},[14,139487,138472],{},[67,139489,139490],{"className":126593,"code":139422,"language":126595,"meta":58,"style":58},[73,139491,139492,139498,139510,139522,139548],{"__ignoreMap":58},[76,139493,139494,139496],{"class":78,"line":79},[76,139495,134350],{"class":2035},[76,139497,15644],{"class":93},[76,139499,139500,139502,139504,139506,139508],{"class":78,"line":86},[76,139501,70638],{"class":250},[76,139503,51507],{"class":93},[76,139505,899],{"class":250},[76,139507,51562],{"class":89},[76,139509,1363],{"class":93},[76,139511,139512,139514,139516,139518,139520],{"class":78,"line":97},[76,139513,70858],{"class":250},[76,139515,51507],{"class":93},[76,139517,899],{"class":250},[76,139519,51562],{"class":89},[76,139521,1363],{"class":93},[76,139523,139524,139526,139528,139530,139532,139534,139536,139538,139540,139542,139544,139546],{"class":78,"line":103},[76,139525,70681],{"class":250},[76,139527,51507],{"class":93},[76,139529,61796],{"class":250},[76,139531,202],{"class":93},[76,139533,134389],{"class":5288},[76,139535,13786],{"class":93},[76,139537,61806],{"class":250},[76,139539,139473],{"class":250},[76,139541,51562],{"class":89},[76,139543,134408],{"class":250},[76,139545,51562],{"class":89},[76,139547,1363],{"class":93},[76,139549,139550],{"class":78,"line":1273},[76,139551,1637],{"class":93},[14,139553,139554],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1206,139556,139557,139560,139566,139572,139584],{},[155,139558,139559],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[155,139561,139562,139563,120278],{},"里面的布局利用 自定义列表来实现（",[73,139564,139565],{},"dl > dt + dd",[155,139567,139093,139568,139571],{},[73,139569,139570],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[155,139573,139093,139574,139577,139578,18482,139580,139583],{},[73,139575,139576],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[73,139579,139576],{},[73,139581,139582],{},"dd","之间有些距离",[155,139585,139586],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139588,138432],{},[67,139590,139591],{"className":126593,"code":138782,"language":126595,"meta":58,"style":58},[73,139592,139593,139599,139611],{"__ignoreMap":58},[76,139594,139595,139597],{"class":78,"line":79},[76,139596,51681],{"class":51370},[76,139598,15644],{"class":93},[76,139600,139601,139603,139605,139607,139609],{"class":78,"line":86},[76,139602,70540],{"class":250},[76,139604,51507],{"class":93},[76,139606,392],{"class":250},[76,139608,51626],{"class":250},[76,139610,1363],{"class":93},[76,139612,139613],{"class":78,"line":97},[76,139614,1637],{"class":93},[14,139616,138472],{},[67,139618,139619],{"className":126593,"code":138782,"language":126595,"meta":58,"style":58},[73,139620,139621,139627,139639],{"__ignoreMap":58},[76,139622,139623,139625],{"class":78,"line":79},[76,139624,51681],{"class":51370},[76,139626,15644],{"class":93},[76,139628,139629,139631,139633,139635,139637],{"class":78,"line":86},[76,139630,70540],{"class":250},[76,139632,51507],{"class":93},[76,139634,392],{"class":250},[76,139636,51626],{"class":250},[76,139638,1363],{"class":93},[76,139640,139641],{"class":78,"line":97},[76,139642,1637],{"class":93},[14,139644,139645],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1206,139647,139648,139657,139660,139671],{},[155,139649,139650,139651,139653,139654,139656],{},"分为上下两块，上面是 ",[73,139652,131813],{}," 友情链接，下面是 ",[73,139655,131806],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[155,139658,139659],{},"把内容分别复制到相应模块中",[155,139661,139093,139662,139664,139665,139667,139668,139670],{},[73,139663,131813],{}," 设置 15px 的下外边距，给",[73,139666,131813],{}," 里面 的 ",[73,139669,439],{}," 标签设置 左右 3px 的外边距",[155,139672,139673,139674,139676],{},"给",[73,139675,131806],{}," 设置 20px 的行高",[14,139678,138432],{},[67,139680,139681],{"className":126593,"code":138782,"language":126595,"meta":58,"style":58},[73,139682,139683,139689,139701],{"__ignoreMap":58},[76,139684,139685,139687],{"class":78,"line":79},[76,139686,51681],{"class":51370},[76,139688,15644],{"class":93},[76,139690,139691,139693,139695,139697,139699],{"class":78,"line":86},[76,139692,70540],{"class":250},[76,139694,51507],{"class":93},[76,139696,392],{"class":250},[76,139698,51626],{"class":250},[76,139700,1363],{"class":93},[76,139702,139703],{"class":78,"line":97},[76,139704,1637],{"class":93},[14,139706,138472],{},[67,139708,139709],{"className":126593,"code":138782,"language":126595,"meta":58,"style":58},[73,139710,139711,139717,139729],{"__ignoreMap":58},[76,139712,139713,139715],{"class":78,"line":79},[76,139714,51681],{"class":51370},[76,139716,15644],{"class":93},[76,139718,139719,139721,139723,139725,139727],{"class":78,"line":86},[76,139720,70540],{"class":250},[76,139722,51507],{"class":93},[76,139724,392],{"class":250},[76,139726,51626],{"class":250},[76,139728,1363],{"class":93},[76,139730,139731],{"class":78,"line":97},[76,139732,1637],{"class":93},[14,139734,139735],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[117,139737,139738],{},"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":58,"searchDepth":86,"depth":86,"links":139740},[139741,139742,139743,139750],{"id":138021,"depth":86,"text":138022},{"id":138040,"depth":86,"text":138041},{"id":138067,"depth":86,"text":138068,"children":139744},[139745,139746,139747,139748,139749],{"id":138071,"depth":97,"text":138072},{"id":138084,"depth":97,"text":138085},{"id":138108,"depth":97,"text":138109},{"id":138130,"depth":97,"text":138131},{"id":138202,"depth":97,"text":138203},{"id":138328,"depth":86,"text":138329,"children":139751},[139752,139753,139754,139755,139757],{"id":138332,"depth":97,"text":138333},{"id":138339,"depth":97,"text":138340},{"id":138511,"depth":97,"text":138512},{"id":139052,"depth":97,"text":139756},"15.4.4 nav导航模块制作",{"id":139350,"depth":97,"text":139351},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138013,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139764,"title":139765,"body":139766,"description":122,"extension":123,"meta":142168,"navigation":125,"path":142169,"seo":142170,"stem":142171,"__hash__":142172},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139767,"toc":142145},[139768,139771,139775,139779,139791,139794,139797,139800,139811,139813,139837,139839,139863,139868,139871,139873,139909,139911,139947,139950,139955,139958,139961,139964,139994,140001,140004,140014,140016,140050,140053,140087,140093,140110,140112,140148,140150,140186,140191,140216,140218,140244,140246,140270,140277,140280,140344,140346,140388,140390,140430,140437,140442,140444,140474,140476,140506,140510,140513,140520,140532,140534,140560,140562,140586,140589,140591,140615,140621,140631,140633,140663,140665,140695,140702,140743,140745,140781,140783,140819,140823,140826,140829,140832,140838,140843,140846,140869,140872,140896,140899,140923,140928,140931,140934,140937,140940,140943,141017,141019,141049,141051,141081,141084,141087,141119,141123,141127,141141,141150,141153,141158,141160,141254,141256,141350,141373,141375,141399,141401,141425,141432,141435,141445,141447,141471,141476,141484,141486,141516,141521,141561,141563,141589,141591,141617,141621,141624,141629,141632,141636,141644,141651,141659,141661,141691,141693,141723,141731,141734,141737,141739,141769,141771,141801,141804,141809,141811,141835,141837,141861,141864,141949,141951,141975,141977,142001,142005,142007,142031,142033,142067,142071,142085,142088,142093,142096,142101,142104,142134,142142],[10,139769,139765],{"id":139770},"_16-品优购项目下篇-主体与页面开发",[140,139772,139774],{"id":139773},"_161-项目主体模块制作","16.1 项目主体模块制作",[169,139776,139778],{"id":139777},"_1611-首页制作","16.1.1 首页制作",[14,139780,139781,139783,139784,139786,139787,139790],{},[350,139782,102099],{}," 主体模块是 ",[350,139785,74128],{}," 里面专有的，注意需要新的样式文件 ",[350,139788,139789],{},"index.css，"," 就不要写在common.css中了",[56,139792],{"style":126449,"src":139793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[56,139795],{"style":126449,"src":139796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139798,139799],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1206,139801,139802,139805,139808],{},[155,139803,139804],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[155,139806,139807],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[155,139809,139810],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139812,138432],{},[67,139814,139815],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,139816,139817,139823,139833],{"__ignoreMap":58},[76,139818,139819,139821],{"class":78,"line":79},[76,139820,130441],{"class":2035},[76,139822,15644],{"class":93},[76,139824,139825,139827,139829,139831],{"class":78,"line":86},[76,139826,131073],{"class":250},[76,139828,51507],{"class":93},[76,139830,23808],{"class":250},[76,139832,1363],{"class":93},[76,139834,139835],{"class":78,"line":97},[76,139836,1637],{"class":93},[14,139838,138472],{},[67,139840,139841],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,139842,139843,139849,139859],{"__ignoreMap":58},[76,139844,139845,139847],{"class":78,"line":79},[76,139846,130441],{"class":2035},[76,139848,15644],{"class":93},[76,139850,139851,139853,139855,139857],{"class":78,"line":86},[76,139852,131073],{"class":250},[76,139854,51507],{"class":93},[76,139856,23808],{"class":250},[76,139858,1363],{"class":93},[76,139860,139861],{"class":78,"line":97},[76,139862,1637],{"class":93},[152,139864,139865],{},[155,139866,139867],{},"左侧focus模块制作",[56,139869],{"style":126449,"src":139870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139872,138432],{},[67,139874,139875],{"className":126593,"code":127916,"language":126595,"meta":58,"style":58},[73,139876,139877,139885,139895,139905],{"__ignoreMap":58},[76,139878,139879,139881,139883],{"class":78,"line":79},[76,139880,53891],{"class":51370},[76,139882,61970],{"class":2035},[76,139884,15644],{"class":93},[76,139886,139887,139889,139891,139893],{"class":78,"line":86},[76,139888,127931],{"class":250},[76,139890,51507],{"class":93},[76,139892,54959],{"class":250},[76,139894,1363],{"class":93},[76,139896,139897,139899,139901,139903],{"class":78,"line":97},[76,139898,70868],{"class":250},[76,139900,51507],{"class":93},[76,139902,54807],{"class":250},[76,139904,1363],{"class":93},[76,139906,139907],{"class":78,"line":103},[76,139908,1637],{"class":93},[14,139910,138472],{},[67,139912,139913],{"className":126593,"code":127916,"language":126595,"meta":58,"style":58},[73,139914,139915,139923,139933,139943],{"__ignoreMap":58},[76,139916,139917,139919,139921],{"class":78,"line":79},[76,139918,53891],{"class":51370},[76,139920,61970],{"class":2035},[76,139922,15644],{"class":93},[76,139924,139925,139927,139929,139931],{"class":78,"line":86},[76,139926,127931],{"class":250},[76,139928,51507],{"class":93},[76,139930,54959],{"class":250},[76,139932,1363],{"class":93},[76,139934,139935,139937,139939,139941],{"class":78,"line":97},[76,139936,70868],{"class":250},[76,139938,51507],{"class":93},[76,139940,54807],{"class":250},[76,139942,1363],{"class":93},[76,139944,139945],{"class":78,"line":103},[76,139946,1637],{"class":93},[14,139948,139949],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[152,139951,139952],{"start":86},[155,139953,139954],{},"右侧newsflash模块制作",[56,139956],{"style":126449,"src":139957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139959,139960],{},"右侧的模块 分为上中下三个盒子",[14,139962,139963],{},"结构代码：",[67,139965,139966],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,139967,139968],{"__ignoreMap":58},[76,139969,139970,139972,139974,139976,139978,139980,139982,139984,139986,139988,139990,139992],{"class":78,"line":79},[76,139971,1109],{"class":93},[76,139973,56],{"class":51370},[76,139975,55309],{"class":2035},[76,139977,247],{"class":93},[76,139979,134110],{"class":305},[76,139981,55317],{"class":2035},[76,139983,247],{"class":93},[76,139985,134117],{"class":305},[76,139987,134120],{"class":2035},[76,139989,247],{"class":93},[76,139991,134125],{"class":305},[76,139993,51377],{"class":93},[14,139995,139996,139997,140000],{},"1 号盒子为 ",[73,139998,139999],{},"news"," 新闻模块 高度为 165px",[56,140002],{"style":126449,"src":140003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140005,140006,140007,140010,140011],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[73,140008,140009],{},"news-hd","，下面是 ",[73,140012,140013],{},"news-bd",[14,140015,139963],{},[67,140017,140018],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},[73,140019,140020,140024,140038,140042],{"__ignoreMap":58},[76,140021,140022],{"class":78,"line":79},[76,140023,130704],{"class":82},[76,140025,140026,140028,140030,140032,140034,140036],{"class":78,"line":86},[76,140027,1109],{"class":93},[76,140029,51681],{"class":51370},[76,140031,53556],{"class":2035},[76,140033,247],{"class":93},[76,140035,130717],{"class":305},[76,140037,51377],{"class":93},[76,140039,140040],{"class":78,"line":97},[76,140041,130724],{"class":93},[76,140043,140044,140046,140048],{"class":78,"line":103},[76,140045,51855],{"class":93},[76,140047,51681],{"class":51370},[76,140049,51377],{"class":93},[14,140051,140052],{},"样式代码：",[67,140054,140055],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},[73,140056,140057,140061,140075,140079],{"__ignoreMap":58},[76,140058,140059],{"class":78,"line":79},[76,140060,130704],{"class":82},[76,140062,140063,140065,140067,140069,140071,140073],{"class":78,"line":86},[76,140064,1109],{"class":93},[76,140066,51681],{"class":51370},[76,140068,53556],{"class":2035},[76,140070,247],{"class":93},[76,140072,130717],{"class":305},[76,140074,51377],{"class":93},[76,140076,140077],{"class":78,"line":97},[76,140078,130724],{"class":93},[76,140080,140081,140083,140085],{"class":78,"line":103},[76,140082,51855],{"class":93},[76,140084,51681],{"class":51370},[76,140086,51377],{"class":93},[14,140088,140089,140090,140092],{},"上面是",[73,140091,140009],{},"，设置高度是 33px，设置下边框",[1206,140094,140095,140101],{},[155,140096,140097,140098,140100],{},"里面放一个",[73,140099,22982],{}," 标题",[155,140102,140103,140104,140106,140107,140109],{},"放一个a",[73,140105,102734],{},"，内容是 更多，然后让 ",[73,140108,439],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140111,139963],{},[67,140113,140114],{"className":126593,"code":138435,"language":126595,"meta":58,"style":58},[73,140115,140116,140124,140134,140144],{"__ignoreMap":58},[76,140117,140118,140120,140122],{"class":78,"line":79},[76,140119,51681],{"class":51370},[76,140121,137594],{"class":2035},[76,140123,15644],{"class":93},[76,140125,140126,140128,140130,140132],{"class":78,"line":86},[76,140127,137601],{"class":250},[76,140129,51507],{"class":93},[76,140131,7724],{"class":305},[76,140133,1363],{"class":93},[76,140135,140136,140138,140140,140142],{"class":78,"line":97},[76,140137,128209],{"class":250},[76,140139,51507],{"class":93},[76,140141,60939],{"class":250},[76,140143,1363],{"class":93},[76,140145,140146],{"class":78,"line":103},[76,140147,1637],{"class":93},[14,140149,140052],{},[67,140151,140152],{"className":126593,"code":138435,"language":126595,"meta":58,"style":58},[73,140153,140154,140162,140172,140182],{"__ignoreMap":58},[76,140155,140156,140158,140160],{"class":78,"line":79},[76,140157,51681],{"class":51370},[76,140159,137594],{"class":2035},[76,140161,15644],{"class":93},[76,140163,140164,140166,140168,140170],{"class":78,"line":86},[76,140165,137601],{"class":250},[76,140167,51507],{"class":93},[76,140169,7724],{"class":305},[76,140171,1363],{"class":93},[76,140173,140174,140176,140178,140180],{"class":78,"line":97},[76,140175,128209],{"class":250},[76,140177,51507],{"class":93},[76,140179,60939],{"class":250},[76,140181,1363],{"class":93},[76,140183,140184],{"class":78,"line":103},[76,140185,1637],{"class":93},[14,140187,140188,140189],{},"下面是",[73,140190,140013],{},[1206,140192,140193,140201],{},[155,140194,140195,140196,101059,140198,140200],{},"里面包含 ",[73,140197,1206],{},[73,140199,155],{}," 还有链接",[155,140202,139673,140203,140205,140206,140208,140209,140212,140213],{},[73,140204,155],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[73,140207,131259],{}," 2.设置 ",[73,140210,140211],{},"white-space: nowrap;"," 3. 设置 ",[73,140214,140215],{},"text-overflow: ellipsis;",[14,140217,139963],{},[67,140219,140221],{"className":126593,"code":140220,"language":126595,"meta":58,"style":58},"div {\n  overflow: hidden;\n}\n",[73,140222,140223,140229,140240],{"__ignoreMap":58},[76,140224,140225,140227],{"class":78,"line":79},[76,140226,51681],{"class":51370},[76,140228,15644],{"class":93},[76,140230,140231,140234,140236,140238],{"class":78,"line":86},[76,140232,140233],{"class":250},"  overflow",[76,140235,51507],{"class":93},[76,140237,61784],{"class":250},[76,140239,1363],{"class":93},[76,140241,140242],{"class":78,"line":97},[76,140243,1637],{"class":93},[14,140245,140052],{},[67,140247,140248],{"className":126593,"code":140220,"language":126595,"meta":58,"style":58},[73,140249,140250,140256,140266],{"__ignoreMap":58},[76,140251,140252,140254],{"class":78,"line":79},[76,140253,51681],{"class":51370},[76,140255,15644],{"class":93},[76,140257,140258,140260,140262,140264],{"class":78,"line":86},[76,140259,140233],{"class":250},[76,140261,51507],{"class":93},[76,140263,61784],{"class":250},[76,140265,1363],{"class":93},[76,140267,140268],{"class":78,"line":97},[76,140269,1637],{"class":93},[14,140271,140272,140273,140276],{},"2 号盒子为 ",[73,140274,140275],{},"lifeservice"," 生活服务模块 高度为 209px",[56,140278],{"style":126449,"src":140279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1206,140281,140282,140285,140295,140319,140330],{},[155,140283,140284],{},"设置边框（左右下边框）",[155,140286,140287,140288,140291,140292,140294],{},"里面的内容 是 ",[73,140289,140290],{},"ul > 12*li","，给",[73,140293,155],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[155,140296,140297,140298],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1206,140299,140300,140305,140314],{},[155,140301,140302,140304],{},[73,140303,140275],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[155,140306,140307,140308,140310,140311,140313],{},"可以让 ",[73,140309,140275],{}," 里面的 ",[73,140312,1206],{}," 宽度为 252，就可以装的下 4 个 小 li",[155,140315,140316,140318],{},[73,140317,140275],{}," 盒子 overflow 隐藏多余的部分就可以了",[155,140320,116508,140321,140323,140324,140326,140327,140329],{},[73,140322,155],{}," 里面放一个 ",[73,140325,641],{},"（里面放图标），下面的文本用 ",[73,140328,14],{}," 标签包裹",[155,140331,139093,140332,140334,140335,140337,140338,139127,140340,140343],{},[73,140333,641],{}," 设置 24px宽和28px的高（注意 ",[73,140336,641],{}," 是行内元素， 转成行内块），给 ",[73,140339,155],{},[73,140341,140342],{},"text-align:center"," 让里面内容居中显示",[14,140345,139963],{},[67,140347,140349],{"className":126593,"code":140348,"language":126595,"meta":58,"style":58},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[73,140350,140351,140369,140374,140384],{"__ignoreMap":58},[76,140352,140353,140355,140357,140359,140361,140363,140365,140367],{"class":78,"line":79},[76,140354,76],{"class":51370},[76,140356,12507],{"class":93},[76,140358,439],{"class":51370},[76,140360,12507],{"class":93},[76,140362,23625],{"class":51370},[76,140364,12507],{"class":93},[76,140366,350],{"class":51370},[76,140368,15644],{"class":93},[76,140370,140371],{"class":78,"line":86},[76,140372,140373],{"class":82},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[76,140375,140376,140378,140380,140382],{"class":78,"line":97},[76,140377,128209],{"class":250},[76,140379,51507],{"class":93},[76,140381,128271],{"class":250},[76,140383,1363],{"class":93},[76,140385,140386],{"class":78,"line":103},[76,140387,1637],{"class":93},[14,140389,140052],{},[67,140391,140392],{"className":126593,"code":140348,"language":126595,"meta":58,"style":58},[73,140393,140394,140412,140416,140426],{"__ignoreMap":58},[76,140395,140396,140398,140400,140402,140404,140406,140408,140410],{"class":78,"line":79},[76,140397,76],{"class":51370},[76,140399,12507],{"class":93},[76,140401,439],{"class":51370},[76,140403,12507],{"class":93},[76,140405,23625],{"class":51370},[76,140407,12507],{"class":93},[76,140409,350],{"class":51370},[76,140411,15644],{"class":93},[76,140413,140414],{"class":78,"line":86},[76,140415,140373],{"class":82},[76,140417,140418,140420,140422,140424],{"class":78,"line":97},[76,140419,128209],{"class":250},[76,140421,51507],{"class":93},[76,140423,128271],{"class":250},[76,140425,1363],{"class":93},[76,140427,140428],{"class":78,"line":103},[76,140429,1637],{"class":93},[14,140431,140432,140433,140436],{},"3 号盒子为 ",[73,140434,140435],{},"bargain"," 特价商品",[1206,140438,140439],{},[155,140440,140441],{},"这个比较简单，直接插入一张图片即可",[14,140443,139963],{},[67,140445,140446],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,140447,140448],{"__ignoreMap":58},[76,140449,140450,140452,140454,140456,140458,140460,140462,140464,140466,140468,140470,140472],{"class":78,"line":79},[76,140451,1109],{"class":93},[76,140453,56],{"class":51370},[76,140455,55309],{"class":2035},[76,140457,247],{"class":93},[76,140459,134110],{"class":305},[76,140461,55317],{"class":2035},[76,140463,247],{"class":93},[76,140465,134117],{"class":305},[76,140467,134120],{"class":2035},[76,140469,247],{"class":93},[76,140471,134125],{"class":305},[76,140473,51377],{"class":93},[14,140475,140052],{},[67,140477,140478],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,140479,140480],{"__ignoreMap":58},[76,140481,140482,140484,140486,140488,140490,140492,140494,140496,140498,140500,140502,140504],{"class":78,"line":79},[76,140483,1109],{"class":93},[76,140485,56],{"class":51370},[76,140487,55309],{"class":2035},[76,140489,247],{"class":93},[76,140491,134110],{"class":305},[76,140493,55317],{"class":2035},[76,140495,247],{"class":93},[76,140497,134117],{"class":305},[76,140499,134120],{"class":2035},[76,140501,247],{"class":93},[76,140503,134125],{"class":305},[76,140505,51377],{"class":93},[169,140507,140509],{"id":140508},"_1612-推荐模块制作","16.1.2 推荐模块制作",[56,140511],{"style":126449,"src":140512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140514,140515,140516,140519],{},"大盒子 ",[73,140517,140518],{},"recom"," 推荐模块 recommend",[1206,140521,140522],{},[155,140523,140524,140525,140527,140528,140531],{},"给这个 ",[73,140526,140518],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[73,140529,140530],{},"#ebebeb","），设置距离上边 12px",[14,140533,139963],{},[67,140535,140537],{"className":126593,"code":140536,"language":126595,"meta":58,"style":58},"div {\n  background-color: #f0f0f0;\n}\n",[73,140538,140539,140545,140556],{"__ignoreMap":58},[76,140540,140541,140543],{"class":78,"line":79},[76,140542,51681],{"class":51370},[76,140544,15644],{"class":93},[76,140546,140547,140549,140551,140554],{"class":78,"line":86},[76,140548,70948],{"class":250},[76,140550,51507],{"class":93},[76,140552,140553],{"class":250},"#f0f0f0",[76,140555,1363],{"class":93},[76,140557,140558],{"class":78,"line":97},[76,140559,1637],{"class":93},[14,140561,140052],{},[67,140563,140564],{"className":126593,"code":140536,"language":126595,"meta":58,"style":58},[73,140565,140566,140572,140582],{"__ignoreMap":58},[76,140567,140568,140570],{"class":78,"line":79},[76,140569,51681],{"class":51370},[76,140571,15644],{"class":93},[76,140573,140574,140576,140578,140580],{"class":78,"line":86},[76,140575,70948],{"class":250},[76,140577,51507],{"class":93},[76,140579,140553],{"class":250},[76,140581,1363],{"class":93},[76,140583,140584],{"class":78,"line":97},[76,140585,1637],{"class":93},[14,140587,140588],{},"里面包含 2 个盒子， 浮动即可",[14,140590,139963],{},[67,140592,140593],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,140594,140595,140601,140611],{"__ignoreMap":58},[76,140596,140597,140599],{"class":78,"line":79},[76,140598,130441],{"class":2035},[76,140600,15644],{"class":93},[76,140602,140603,140605,140607,140609],{"class":78,"line":86},[76,140604,131073],{"class":250},[76,140606,51507],{"class":93},[76,140608,23808],{"class":250},[76,140610,1363],{"class":93},[76,140612,140613],{"class":78,"line":97},[76,140614,1637],{"class":93},[14,140616,140617,140618],{},"1 号盒子 ",[73,140619,140620],{},"recom_hd",[1206,140622,140623,140626],{},[155,140624,140625],{},"设置宽度205px，高度163px",[155,140627,140097,140628,140630],{},[73,140629,56],{},"标签，插入图片即可",[14,140632,139963],{},[67,140634,140635],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,140636,140637],{"__ignoreMap":58},[76,140638,140639,140641,140643,140645,140647,140649,140651,140653,140655,140657,140659,140661],{"class":78,"line":79},[76,140640,1109],{"class":93},[76,140642,56],{"class":51370},[76,140644,55309],{"class":2035},[76,140646,247],{"class":93},[76,140648,134110],{"class":305},[76,140650,55317],{"class":2035},[76,140652,247],{"class":93},[76,140654,134117],{"class":305},[76,140656,134120],{"class":2035},[76,140658,247],{"class":93},[76,140660,134125],{"class":305},[76,140662,51377],{"class":93},[14,140664,140052],{},[67,140666,140667],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,140668,140669],{"__ignoreMap":58},[76,140670,140671,140673,140675,140677,140679,140681,140683,140685,140687,140689,140691,140693],{"class":78,"line":79},[76,140672,1109],{"class":93},[76,140674,56],{"class":51370},[76,140676,55309],{"class":2035},[76,140678,247],{"class":93},[76,140680,134110],{"class":305},[76,140682,55317],{"class":2035},[76,140684,247],{"class":93},[76,140686,134117],{"class":305},[76,140688,134120],{"class":2035},[76,140690,247],{"class":93},[76,140692,134125],{"class":305},[76,140694,51377],{"class":93},[14,140696,140697,140698,140701],{},"2 号盒子 ",[73,140699,140700],{},"recom_bd"," ，注意里面的小竖线",[1206,140703,140704,140715,140718,140723,140728],{},[155,140705,140706,140707,140709,140710,140712,140713],{},"右侧结构里面放 ",[73,140708,1206],{}," 包含 4个 ",[73,140711,155],{},"，每个li里面包含一个",[73,140714,56],{},[155,140716,140717],{},"直接利用切片工具把里面的内容当成一张图片",[155,140719,139093,140720,140722],{},[73,140721,155],{}," 设置浮动",[155,140724,139093,140725,140727],{},[73,140726,56],{}," 设置宽高，宽度 248px，高度 163px",[155,140729,140730,140731,140291,140734,140736,140737,140739,140740],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[73,140732,140733],{},"top 10px",[73,140735,155],{},"设置相对定位（注意，最后一个",[73,140738,155],{},"不用设置伪元素），可以利用 ",[73,140741,140742],{},"nth-child(-n+3){...}",[14,140744,139963],{},[67,140746,140747],{"className":126593,"code":138435,"language":126595,"meta":58,"style":58},[73,140748,140749,140757,140767,140777],{"__ignoreMap":58},[76,140750,140751,140753,140755],{"class":78,"line":79},[76,140752,51681],{"class":51370},[76,140754,137594],{"class":2035},[76,140756,15644],{"class":93},[76,140758,140759,140761,140763,140765],{"class":78,"line":86},[76,140760,137601],{"class":250},[76,140762,51507],{"class":93},[76,140764,7724],{"class":305},[76,140766,1363],{"class":93},[76,140768,140769,140771,140773,140775],{"class":78,"line":97},[76,140770,128209],{"class":250},[76,140772,51507],{"class":93},[76,140774,60939],{"class":250},[76,140776,1363],{"class":93},[76,140778,140779],{"class":78,"line":103},[76,140780,1637],{"class":93},[14,140782,140052],{},[67,140784,140785],{"className":126593,"code":138435,"language":126595,"meta":58,"style":58},[73,140786,140787,140795,140805,140815],{"__ignoreMap":58},[76,140788,140789,140791,140793],{"class":78,"line":79},[76,140790,51681],{"class":51370},[76,140792,137594],{"class":2035},[76,140794,15644],{"class":93},[76,140796,140797,140799,140801,140803],{"class":78,"line":86},[76,140798,137601],{"class":250},[76,140800,51507],{"class":93},[76,140802,7724],{"class":305},[76,140804,1363],{"class":93},[76,140806,140807,140809,140811,140813],{"class":78,"line":97},[76,140808,128209],{"class":250},[76,140810,51507],{"class":93},[76,140812,60939],{"class":250},[76,140814,1363],{"class":93},[76,140816,140817],{"class":78,"line":103},[76,140818,1637],{"class":93},[169,140820,140822],{"id":140821},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[56,140824],{"style":126449,"src":140825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140827,140828],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140830,140831],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140833,140834,140837],{},[73,140835,140836],{},"box_hd"," 制作",[14,140839,140617,140840,140842],{},[73,140841,140836],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[56,140844],{"style":126449,"src":140845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1206,140847,140848,140853,140858,140861],{},[155,140849,140850,140852],{},[73,140851,140836],{}," 给 30px 的高度，2个像素的下边框",[155,140854,140855,140856],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[73,140857,139104],{},[155,140859,140860],{},"左侧盒左浮动，右侧盒子右浮动",[155,140862,140863,140865,140866,140868],{},[73,140864,439],{},"标签之间的距离用左右的",[73,140867,30953],{},"撑开即可",[14,140870,140871],{},"结构代码",[67,140873,140874],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,140875,140876,140882,140892],{"__ignoreMap":58},[76,140877,140878,140880],{"class":78,"line":79},[76,140879,130441],{"class":2035},[76,140881,15644],{"class":93},[76,140883,140884,140886,140888,140890],{"class":78,"line":86},[76,140885,131073],{"class":250},[76,140887,51507],{"class":93},[76,140889,23808],{"class":250},[76,140891,1363],{"class":93},[76,140893,140894],{"class":78,"line":97},[76,140895,1637],{"class":93},[14,140897,140898],{},"样式代码",[67,140900,140901],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,140902,140903,140909,140919],{"__ignoreMap":58},[76,140904,140905,140907],{"class":78,"line":79},[76,140906,130441],{"class":2035},[76,140908,15644],{"class":93},[76,140910,140911,140913,140915,140917],{"class":78,"line":86},[76,140912,131073],{"class":250},[76,140914,51507],{"class":93},[76,140916,23808],{"class":250},[76,140918,1363],{"class":93},[76,140920,140921],{"class":78,"line":97},[76,140922,1637],{"class":93},[14,140924,140925,140837],{},[73,140926,140927],{},"box_bd",[14,140929,140930],{},"2 号盒子 box_bd，不要给高度",[56,140932],{"style":126449,"src":140933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140935,140936],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140938,140939],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140941,140942],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1206,140944,140945,140957,140973],{},[155,140946,140947,140949,140950,140953,140954,140956],{},[73,140948,140927],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[73,140951,140952],{},"tab_content","，在",[73,140955,140952],{}," 里面包裹tab选项卡对应的内容",[155,140958,140959,140960,140963,140964,140966,140967,140969,140970,140972],{},"内容被一个大盒子包裹（",[73,140961,140962],{},"tab_list_item","），里面是 ",[73,140965,1206],{}," 包裹 5个 ",[73,140968,155],{},"，每个",[73,140971,155],{},"设置对应的宽度，然后设置浮动",[155,140974,140975,140976,140978,140979,140981,140982],{},"而这5个",[73,140977,155],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[73,140980,155],{},"设置",[1206,140983,140984,141002,141005],{},[155,140985,140986,140987,140989,140990,140992,140993,140995,140996,140998,140999,141001],{},"第一个小 ",[73,140988,155],{}," 分为上下结构，上面是 ",[73,140991,1206],{}," 包裹 ",[73,140994,155],{}," ，",[73,140997,155],{},"里面包裹 ",[73,141000,439],{},"，下面插入一张图片",[155,141003,141004],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[155,141006,141007,141008,141010,141011,141013,141014,141016],{},"后面的小 ",[73,141009,155],{}," 里面先放一个",[73,141012,439],{},"标签，然后在",[73,141015,439],{},"标签里面插入图片即可",[14,141018,140871],{},[67,141020,141021],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,141022,141023],{"__ignoreMap":58},[76,141024,141025,141027,141029,141031,141033,141035,141037,141039,141041,141043,141045,141047],{"class":78,"line":79},[76,141026,1109],{"class":93},[76,141028,56],{"class":51370},[76,141030,55309],{"class":2035},[76,141032,247],{"class":93},[76,141034,134110],{"class":305},[76,141036,55317],{"class":2035},[76,141038,247],{"class":93},[76,141040,134117],{"class":305},[76,141042,134120],{"class":2035},[76,141044,247],{"class":93},[76,141046,134125],{"class":305},[76,141048,51377],{"class":93},[14,141050,140898],{},[67,141052,141053],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,141054,141055],{"__ignoreMap":58},[76,141056,141057,141059,141061,141063,141065,141067,141069,141071,141073,141075,141077,141079],{"class":78,"line":79},[76,141058,1109],{"class":93},[76,141060,56],{"class":51370},[76,141062,55309],{"class":2035},[76,141064,247],{"class":93},[76,141066,134110],{"class":305},[76,141068,55317],{"class":2035},[76,141070,247],{"class":93},[76,141072,134117],{"class":305},[76,141074,134120],{"class":2035},[76,141076,247],{"class":93},[76,141078,134125],{"class":305},[76,141080,51377],{"class":93},[14,141082,141083],{},"tab栏切换需求！！！！！！介绍：",[56,141085],{"style":126449,"src":141086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1206,141088,141089,141097,141103,141106],{},[155,141090,141091,141094,141095],{},[73,141092,141093],{},"tab","栏的布局是 ",[73,141096,139104],{},[155,141098,141099,141100,141102],{},"有多少个",[73,141101,141093],{},"选项卡，那么对应就有多少个内容",[155,141104,141105],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[155,141107,141108,141109,141112,141113,141115,141116,141118],{},"等后面我们学习了",[73,141110,141111],{},"js","之后，我们就会配合",[73,141114,141111],{},"来实现，",[73,141117,141093],{},"栏的切换",[140,141120,141122],{"id":141121},"_162-列表制作","16.2 列表制作",[169,141124,141126],{"id":141125},"_1621-准备工作","16.2.1 准备工作",[1206,141128,141129,141132,141135,141138],{},[155,141130,141131],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[155,141133,141134],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[155,141136,141137],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[155,141139,141140],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[169,141142,141144,141145,101059,141147,141149],{"id":141143},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[73,141146,131598],{},[73,141148,53783],{}," 修改",[56,141151],{"style":126449,"src":141152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1206,141154,141155],{},[155,141156,141157],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141159,139963],{},[67,141161,141162],{"className":126593,"code":132025,"language":126595,"meta":58,"style":58},[73,141163,141164,141168,141182,141186,141200,141204,141218,141222,141236,141240],{"__ignoreMap":58},[76,141165,141166],{"class":78,"line":79},[76,141167,132032],{"class":82},[76,141169,141170,141172,141174,141176,141178,141180],{"class":78,"line":86},[76,141171,132037],{"class":2035},[76,141173,79877],{"class":93},[76,141175,128953],{"class":250},[76,141177,51507],{"class":93},[76,141179,132046],{"class":250},[76,141181,129523],{"class":93},[76,141183,141184],{"class":78,"line":97},[76,141185,132053],{"class":82},[76,141187,141188,141190,141192,141194,141196,141198],{"class":78,"line":103},[76,141189,132058],{"class":2035},[76,141191,79877],{"class":93},[76,141193,128953],{"class":250},[76,141195,51507],{"class":93},[76,141197,54834],{"class":250},[76,141199,129523],{"class":93},[76,141201,141202],{"class":78,"line":1273},[76,141203,132073],{"class":82},[76,141205,141206,141208,141210,141212,141214,141216],{"class":78,"line":1287},[76,141207,132078],{"class":2035},[76,141209,79877],{"class":93},[76,141211,128953],{"class":250},[76,141213,51507],{"class":93},[76,141215,54901],{"class":250},[76,141217,129523],{"class":93},[76,141219,141220],{"class":78,"line":1293},[76,141221,132093],{"class":82},[76,141223,141224,141226,141228,141230,141232,141234],{"class":78,"line":1384},[76,141225,132098],{"class":2035},[76,141227,79877],{"class":93},[76,141229,128953],{"class":250},[76,141231,51507],{"class":93},[76,141233,86303],{"class":250},[76,141235,129523],{"class":93},[76,141237,141238],{"class":78,"line":1390},[76,141239,132113],{"class":82},[76,141241,141242,141244,141246,141248,141250,141252],{"class":78,"line":1402},[76,141243,132118],{"class":2035},[76,141245,79877],{"class":93},[76,141247,128953],{"class":250},[76,141249,51507],{"class":93},[76,141251,132127],{"class":250},[76,141253,129523],{"class":93},[14,141255,140052],{},[67,141257,141258],{"className":126593,"code":132025,"language":126595,"meta":58,"style":58},[73,141259,141260,141264,141278,141282,141296,141300,141314,141318,141332,141336],{"__ignoreMap":58},[76,141261,141262],{"class":78,"line":79},[76,141263,132032],{"class":82},[76,141265,141266,141268,141270,141272,141274,141276],{"class":78,"line":86},[76,141267,132037],{"class":2035},[76,141269,79877],{"class":93},[76,141271,128953],{"class":250},[76,141273,51507],{"class":93},[76,141275,132046],{"class":250},[76,141277,129523],{"class":93},[76,141279,141280],{"class":78,"line":97},[76,141281,132053],{"class":82},[76,141283,141284,141286,141288,141290,141292,141294],{"class":78,"line":103},[76,141285,132058],{"class":2035},[76,141287,79877],{"class":93},[76,141289,128953],{"class":250},[76,141291,51507],{"class":93},[76,141293,54834],{"class":250},[76,141295,129523],{"class":93},[76,141297,141298],{"class":78,"line":1273},[76,141299,132073],{"class":82},[76,141301,141302,141304,141306,141308,141310,141312],{"class":78,"line":1287},[76,141303,132078],{"class":2035},[76,141305,79877],{"class":93},[76,141307,128953],{"class":250},[76,141309,51507],{"class":93},[76,141311,54901],{"class":250},[76,141313,129523],{"class":93},[76,141315,141316],{"class":78,"line":1293},[76,141317,132093],{"class":82},[76,141319,141320,141322,141324,141326,141328,141330],{"class":78,"line":1384},[76,141321,132098],{"class":2035},[76,141323,79877],{"class":93},[76,141325,128953],{"class":250},[76,141327,51507],{"class":93},[76,141329,86303],{"class":250},[76,141331,129523],{"class":93},[76,141333,141334],{"class":78,"line":1390},[76,141335,132113],{"class":82},[76,141337,141338,141340,141342,141344,141346,141348],{"class":78,"line":1402},[76,141339,132118],{"class":2035},[76,141341,79877],{"class":93},[76,141343,128953],{"class":250},[76,141345,51507],{"class":93},[76,141347,132127],{"class":250},[76,141349,129523],{"class":93},[1206,141351,141352,141363],{},[155,141353,141354,141355,141358,141359,101059,141361],{},"1 号盒子左侧浮动 ",[73,141356,141357],{},"sk_list"," 里面包含 ",[73,141360,1206],{},[73,141362,155],{},[155,141364,141365,141366,141358,141369,101059,141371],{},"2 号盒子左侧浮动 ",[73,141367,141368],{},"sk_con",[73,141370,1206],{},[73,141372,155],{},[14,141374,139963],{},[67,141376,141377],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,141378,141379,141385,141395],{"__ignoreMap":58},[76,141380,141381,141383],{"class":78,"line":79},[76,141382,130441],{"class":2035},[76,141384,15644],{"class":93},[76,141386,141387,141389,141391,141393],{"class":78,"line":86},[76,141388,131073],{"class":250},[76,141390,51507],{"class":93},[76,141392,23808],{"class":250},[76,141394,1363],{"class":93},[76,141396,141397],{"class":78,"line":97},[76,141398,1637],{"class":93},[14,141400,140052],{},[67,141402,141403],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,141404,141405,141411,141421],{"__ignoreMap":58},[76,141406,141407,141409],{"class":78,"line":79},[76,141408,130441],{"class":2035},[76,141410,15644],{"class":93},[76,141412,141413,141415,141417,141419],{"class":78,"line":86},[76,141414,131073],{"class":250},[76,141416,51507],{"class":93},[76,141418,23808],{"class":250},[76,141420,1363],{"class":93},[76,141422,141423],{"class":78,"line":97},[76,141424,1637],{"class":93},[169,141426,141428,141429],{"id":141427},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[73,141430,141431],{},"sk_container",[56,141433],{"style":126449,"src":141434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1206,141436,141437,141442],{},[155,141438,140617,141439,141441],{},[73,141440,141431],{}," 给宽度 1200，不要给高度",[155,141443,141444],{},"一定不要忘记清除浮动",[14,141446,139963],{},[67,141448,141449],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,141450,141451,141457,141467],{"__ignoreMap":58},[76,141452,141453,141455],{"class":78,"line":79},[76,141454,130441],{"class":2035},[76,141456,15644],{"class":93},[76,141458,141459,141461,141463,141465],{"class":78,"line":86},[76,141460,131073],{"class":250},[76,141462,51507],{"class":93},[76,141464,23808],{"class":250},[76,141466,1363],{"class":93},[76,141468,141469],{"class":78,"line":97},[76,141470,1637],{"class":93},[152,141472,141473],{},[155,141474,141475],{},"sk_hd制作",[1206,141477,141478],{},[155,141479,140697,141480,141483],{},[73,141481,141482],{},"sk_hd"," ，插入图片即可",[14,141485,139963],{},[67,141487,141488],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,141489,141490],{"__ignoreMap":58},[76,141491,141492,141494,141496,141498,141500,141502,141504,141506,141508,141510,141512,141514],{"class":78,"line":79},[76,141493,1109],{"class":93},[76,141495,56],{"class":51370},[76,141497,55309],{"class":2035},[76,141499,247],{"class":93},[76,141501,134110],{"class":305},[76,141503,55317],{"class":2035},[76,141505,247],{"class":93},[76,141507,134117],{"class":305},[76,141509,134120],{"class":2035},[76,141511,247],{"class":93},[76,141513,134125],{"class":305},[76,141515,51377],{"class":93},[152,141517,141518],{"start":86},[155,141519,141520],{},"sk_bd制作",[1206,141522,141523],{},[155,141524,141525,141526,141529,141530,101059,141532,141534],{},"3 号盒子 ",[73,141527,141528],{},"sk_bd"," ，里面包含很多的 ",[73,141531,1206],{},[73,141533,155],{},[1206,141535,141536,141545],{},[155,141537,141538,141539,141541,141542,141544],{},"当鼠标移入到 ",[73,141540,155],{}," 上面的时候显示红色的边框，在这里先给 ",[73,141543,155],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[155,141546,141547,141548,141550,141551,141553,141554,141557,141558,141560],{},"由于给每个 ",[73,141549,155],{}," 都设置了外边距，导致一行的最后一个 ",[73,141552,155],{}," 掉了下来，在这里我们利用 ",[73,141555,141556],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[73,141559,155],{},"，去掉外边距就好了",[14,141562,139963],{},[67,141564,141565],{"className":126593,"code":138782,"language":126595,"meta":58,"style":58},[73,141566,141567,141573,141585],{"__ignoreMap":58},[76,141568,141569,141571],{"class":78,"line":79},[76,141570,51681],{"class":51370},[76,141572,15644],{"class":93},[76,141574,141575,141577,141579,141581,141583],{"class":78,"line":86},[76,141576,70540],{"class":250},[76,141578,51507],{"class":93},[76,141580,392],{"class":250},[76,141582,51626],{"class":250},[76,141584,1363],{"class":93},[76,141586,141587],{"class":78,"line":97},[76,141588,1637],{"class":93},[14,141590,140052],{},[67,141592,141593],{"className":126593,"code":138782,"language":126595,"meta":58,"style":58},[73,141594,141595,141601,141613],{"__ignoreMap":58},[76,141596,141597,141599],{"class":78,"line":79},[76,141598,51681],{"class":51370},[76,141600,15644],{"class":93},[76,141602,141603,141605,141607,141609,141611],{"class":78,"line":86},[76,141604,70540],{"class":250},[76,141606,51507],{"class":93},[76,141608,392],{"class":250},[76,141610,51626],{"class":250},[76,141612,1363],{"class":93},[76,141614,141615],{"class":78,"line":97},[76,141616,1637],{"class":93},[140,141618,141620],{"id":141619},"_163-注册页面制作","16.3 注册页面制作",[56,141622],{"style":126449,"src":141623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141625,141626,141628],{},[350,141627,9097],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[56,141630],{"style":126449,"src":141631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[169,141633,141635],{"id":141634},"_1631-准备工作","16.3.1 准备工作",[1206,141637,141638,141641],{},[155,141639,141640],{},"创建register.html，引入 base.css，引入favicon图标",[155,141642,141643],{},"创建register.css ，在html页面进行引入",[169,141645,141647,141648,141650],{"id":141646},"_1632-header-头部实现","16.3.2 ",[73,141649,131598],{}," 头部实现",[1206,141652,141653,141656],{},[155,141654,141655],{},"整个内容用 版心 进行包裹",[155,141657,141658],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141660,139963],{},[67,141662,141663],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,141664,141665],{"__ignoreMap":58},[76,141666,141667,141669,141671,141673,141675,141677,141679,141681,141683,141685,141687,141689],{"class":78,"line":79},[76,141668,1109],{"class":93},[76,141670,56],{"class":51370},[76,141672,55309],{"class":2035},[76,141674,247],{"class":93},[76,141676,134110],{"class":305},[76,141678,55317],{"class":2035},[76,141680,247],{"class":93},[76,141682,134117],{"class":305},[76,141684,134120],{"class":2035},[76,141686,247],{"class":93},[76,141688,134125],{"class":305},[76,141690,51377],{"class":93},[14,141692,140052],{},[67,141694,141695],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,141696,141697],{"__ignoreMap":58},[76,141698,141699,141701,141703,141705,141707,141709,141711,141713,141715,141717,141719,141721],{"class":78,"line":79},[76,141700,1109],{"class":93},[76,141702,56],{"class":51370},[76,141704,55309],{"class":2035},[76,141706,247],{"class":93},[76,141708,134110],{"class":305},[76,141710,55317],{"class":2035},[76,141712,247],{"class":93},[76,141714,134117],{"class":305},[76,141716,134120],{"class":2035},[76,141718,247],{"class":93},[76,141720,134125],{"class":305},[76,141722,51377],{"class":93},[169,141724,141726,141727,141730],{"id":141725},"_1633-registerarea-主体模块实现","16.3.3 ",[73,141728,141729],{},"registerarea"," 主体模块实现",[56,141732],{"style":126449,"src":141733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141735,141736],{},"整个大盒子 高度为 522px，设置4个边框",[14,141738,139963],{},[67,141740,141741],{"className":126593,"code":130750,"language":126595,"meta":58,"style":58},[73,141742,141743,141749,141765],{"__ignoreMap":58},[76,141744,141745,141747],{"class":78,"line":79},[76,141746,51681],{"class":51370},[76,141748,15644],{"class":93},[76,141750,141751,141753,141755,141757,141759,141761,141763],{"class":78,"line":86},[76,141752,70966],{"class":250},[76,141754,51507],{"class":93},[76,141756,418],{"class":250},[76,141758,51562],{"class":89},[76,141760,51591],{"class":250},[76,141762,129985],{"class":250},[76,141764,1363],{"class":93},[76,141766,141767],{"class":78,"line":97},[76,141768,1637],{"class":93},[14,141770,140052],{},[67,141772,141773],{"className":126593,"code":130750,"language":126595,"meta":58,"style":58},[73,141774,141775,141781,141797],{"__ignoreMap":58},[76,141776,141777,141779],{"class":78,"line":79},[76,141778,51681],{"class":51370},[76,141780,15644],{"class":93},[76,141782,141783,141785,141787,141789,141791,141793,141795],{"class":78,"line":86},[76,141784,70966],{"class":250},[76,141786,51507],{"class":93},[76,141788,418],{"class":250},[76,141790,51562],{"class":89},[76,141792,51591],{"class":250},[76,141794,129985],{"class":250},[76,141796,1363],{"class":93},[76,141798,141799],{"class":78,"line":97},[76,141800,1637],{"class":93},[14,141802,141803],{},"1号盒子 是一个 h3 标签，放标题",[1206,141805,141806],{},[155,141807,141808],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141810,139963],{},[67,141812,141813],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,141814,141815,141821,141831],{"__ignoreMap":58},[76,141816,141817,141819],{"class":78,"line":79},[76,141818,130441],{"class":2035},[76,141820,15644],{"class":93},[76,141822,141823,141825,141827,141829],{"class":78,"line":86},[76,141824,131073],{"class":250},[76,141826,51507],{"class":93},[76,141828,23808],{"class":250},[76,141830,1363],{"class":93},[76,141832,141833],{"class":78,"line":97},[76,141834,1637],{"class":93},[14,141836,140052],{},[67,141838,141839],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,141840,141841,141847,141857],{"__ignoreMap":58},[76,141842,141843,141845],{"class":78,"line":79},[76,141844,130441],{"class":2035},[76,141846,15644],{"class":93},[76,141848,141849,141851,141853,141855],{"class":78,"line":86},[76,141850,131073],{"class":250},[76,141852,51507],{"class":93},[76,141854,23808],{"class":250},[76,141856,1363],{"class":93},[76,141858,141859],{"class":78,"line":97},[76,141860,1637],{"class":93},[14,141862,141863],{},"2号盒子 里面放注册的内容",[1206,141865,141866,141869,141878,141892,141905,141908,141911,141929,141943],{},[155,141867,141868],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[155,141870,141871,141872,141874,141875,141877],{},"里面的内容利用 ",[73,141873,1206],{}," 包含 ",[73,141876,155],{}," 来实现的（不需要用表格）",[155,141879,139107,141880,141882,141883,141885,141886,141888,141889,141891],{},[73,141881,155],{}," 里面，左侧放 ",[73,141884,33678],{}," 标签， 中间放",[73,141887,53891],{}," 标签， 右侧放 ",[73,141890,76],{}," 提示信息",[155,141893,141894,141895,141897,141898,141900,141901,141904],{},"左侧 ",[73,141896,33678],{},"里面的文字都是右对齐，我们可以给",[73,141899,33678],{},"设置一个宽度（88px），然后利用",[73,141902,141903],{},"text-align"," 来设置右对齐",[155,141906,141907],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[155,141909,141910],{},"右侧 span修饰一下文字颜色",[155,141912,141913,141914],{},"提示信息的样式优化",[1206,141915,141916,141919,141922],{},[155,141917,141918],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[155,141920,141921],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[155,141923,141924,141925,141928],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[73,141926,141927],{},"vertical-algin"," 来设置 图片与文字对齐方式",[155,141930,141931,141932],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1206,141933,141934,141940],{},[155,141935,141936,141937,141939],{},"设置 ",[73,141938,23625],{}," 的 左右 12px 的内边距，设置一下文字颜色",[155,141941,141942],{},"分别设置 背景颜色",[155,141944,141945,141946,141948],{},"同意协议 和 完成注册 都是用 ",[73,141947,155],{}," 进行包裹",[14,141950,139963],{},[67,141952,141953],{"className":126593,"code":140536,"language":126595,"meta":58,"style":58},[73,141954,141955,141961,141971],{"__ignoreMap":58},[76,141956,141957,141959],{"class":78,"line":79},[76,141958,51681],{"class":51370},[76,141960,15644],{"class":93},[76,141962,141963,141965,141967,141969],{"class":78,"line":86},[76,141964,70948],{"class":250},[76,141966,51507],{"class":93},[76,141968,140553],{"class":250},[76,141970,1363],{"class":93},[76,141972,141973],{"class":78,"line":97},[76,141974,1637],{"class":93},[14,141976,140052],{},[67,141978,141979],{"className":126593,"code":140536,"language":126595,"meta":58,"style":58},[73,141980,141981,141987,141997],{"__ignoreMap":58},[76,141982,141983,141985],{"class":78,"line":79},[76,141984,51681],{"class":51370},[76,141986,15644],{"class":93},[76,141988,141989,141991,141993,141995],{"class":78,"line":86},[76,141990,70948],{"class":250},[76,141992,51507],{"class":93},[76,141994,140553],{"class":250},[76,141996,1363],{"class":93},[76,141998,141999],{"class":78,"line":97},[76,142000,1637],{"class":93},[169,142002,142004],{"id":142003},"_1634-底部实现","16.3.4 底部实现",[14,142006,139963],{},[67,142008,142009],{"className":126593,"code":140536,"language":126595,"meta":58,"style":58},[73,142010,142011,142017,142027],{"__ignoreMap":58},[76,142012,142013,142015],{"class":78,"line":79},[76,142014,51681],{"class":51370},[76,142016,15644],{"class":93},[76,142018,142019,142021,142023,142025],{"class":78,"line":86},[76,142020,70948],{"class":250},[76,142022,51507],{"class":93},[76,142024,140553],{"class":250},[76,142026,1363],{"class":93},[76,142028,142029],{"class":78,"line":97},[76,142030,1637],{"class":93},[14,142032,140052],{},[67,142034,142035],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},[73,142036,142037,142041,142055,142059],{"__ignoreMap":58},[76,142038,142039],{"class":78,"line":79},[76,142040,130704],{"class":82},[76,142042,142043,142045,142047,142049,142051,142053],{"class":78,"line":86},[76,142044,1109],{"class":93},[76,142046,51681],{"class":51370},[76,142048,53556],{"class":2035},[76,142050,247],{"class":93},[76,142052,130717],{"class":305},[76,142054,51377],{"class":93},[76,142056,142057],{"class":78,"line":97},[76,142058,130724],{"class":93},[76,142060,142061,142063,142065],{"class":78,"line":103},[76,142062,51855],{"class":93},[76,142064,51681],{"class":51370},[76,142066,51377],{"class":93},[140,142068,142070],{"id":142069},"_164-项目总结","16.4 项目总结",[152,142072,142073,142076,142079,142082],{},[155,142074,142075],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[155,142077,142078],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[155,142080,142081],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[155,142083,142084],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[56,142086],{"style":126449,"src":142087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[152,142089,142090],{"start":1273},[155,142091,142092],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[56,142094],{"style":126449,"src":142095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[152,142097,142098],{"start":1287},[155,142099,142100],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[56,142102],{"style":126449,"src":142103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[67,142105,142106],{"className":127340,"code":136750,"language":127342,"meta":58,"style":58},[73,142107,142108],{"__ignoreMap":58},[76,142109,142110,142112,142114,142116,142118,142120,142122,142124,142126,142128,142130,142132],{"class":78,"line":79},[76,142111,1109],{"class":93},[76,142113,53891],{"class":51370},[76,142115,53894],{"class":2035},[76,142117,247],{"class":93},[76,142119,62769],{"class":305},[76,142121,14992],{"class":2035},[76,142123,247],{"class":93},[76,142125,136771],{"class":305},[76,142127,61090],{"class":2035},[76,142129,247],{"class":93},[76,142131,136778],{"class":305},[76,142133,51377],{"class":93},[152,142135,142136,142139],{"start":1293},[155,142137,142138],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[155,142140,142141],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[117,142143,142144],{},"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":58,"searchDepth":86,"depth":86,"links":142146},[142147,142152,142159,142167],{"id":139773,"depth":86,"text":139774,"children":142148},[142149,142150,142151],{"id":139777,"depth":97,"text":139778},{"id":140508,"depth":97,"text":140509},{"id":140821,"depth":97,"text":140822},{"id":141121,"depth":86,"text":141122,"children":142153},[142154,142155,142157],{"id":141125,"depth":97,"text":141126},{"id":141143,"depth":97,"text":142156},"16.2.2 列表页 header 和 nav 修改",{"id":141427,"depth":97,"text":142158},"16.2.3 列表页主体 sk_container",{"id":141619,"depth":86,"text":141620,"children":142160},[142161,142162,142164,142166],{"id":141634,"depth":97,"text":141635},{"id":141646,"depth":97,"text":142163},"16.3.2 header 头部实现",{"id":141725,"depth":97,"text":142165},"16.3.3 registerarea 主体模块实现",{"id":142003,"depth":97,"text":142004},{"id":142069,"depth":86,"text":142070},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139765,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142174,"title":142175,"body":142176,"description":122,"extension":123,"meta":142284,"navigation":125,"path":142285,"seo":142286,"stem":142287,"__hash__":142288},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142177,"toc":142279},[142178,142181,142185,142188,142191,142200,142209,142213,142218,142225,142243,142246,142249,142252,142255,142258,142261,142264,142267,142270,142273,142276],[10,142179,142175],{"id":142180},"_17-web服务器与网站发布",[140,142182,142184],{"id":142183},"_171-web服务器","17.1 Web服务器",[14,142186,142187],{},"把自己网站上传到服务器上，可以让其他人访问",[56,142189],{"style":126449,"src":142190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142192,142193,142196,142197],{},[350,142194,142195],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[350,142198,142199],{},"Web 服务器等",[14,142201,142202,142203,101059,142206,25813],{},"根据服务器在网络中所在的位置不同，又可分为 ",[350,142204,142205],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[350,142207,142208],{},"远程服务器",[169,142210,142212],{"id":142211},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142214,142215],{},[350,142216,142217],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142219,142220,142221],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[439,142222,142223],{"href":142223,"rel":142224},"http:\u002F\u002Ffree.3v.do\u002F",[23937],[1206,142226,142227,142230,142233,142240],{},[155,142228,142229],{},"去免费空间网站注册账号。",[155,142231,142232],{},"记录下主机名、用户名、密码、域名。",[155,142234,142235,142236,142239],{},"利用 ",[73,142237,142238],{},"utftp"," 软件 上传网站到远程服务器",[155,142241,142242],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142244,142245],{},"使用软件上传，对上传软件文件进行解压",[56,142247],{"style":126449,"src":142248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[56,142250],{"style":126449,"src":142251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142253,142254],{},"输入刚刚申请的服务器账号信息：",[56,142256],{"style":126449,"src":142257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[56,142259],{"style":126449,"src":142260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[56,142262],{"style":126449,"src":142263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[56,142265],{"style":126449,"src":142266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142268,142269],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[56,142271],{"style":126449,"src":142272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142274,142275],{},"浏览器输入域名即可访问",[14,142277,142278],{},"首页一定必须是index",{"title":58,"searchDepth":86,"depth":86,"links":142280},[142281],{"id":142183,"depth":86,"text":142184,"children":142282},[142283],{"id":142211,"depth":97,"text":142212},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142175,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142290,"title":142291,"body":142292,"description":122,"extension":123,"meta":143219,"navigation":125,"path":143220,"seo":143221,"stem":143222,"__hash__":143223},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142293,"toc":143202},[142294,142297,142301,142304,142307,142318,142321,142325,142329,142334,142337,142340,142343,142346,142350,142376,142380,142384,142387,142390,142394,142427,142431,142434,142437,142501,142505,142509,142512,142515,142518,142522,142567,142571,142574,142604,142608,142612,142615,142618,142622,142625,142694,142697,142805,142807,142813,142817,142820,142823,142919,142922,142926,142950,142954,142957,142961,142964,142968,142971,142974,142977,142980,142984,142987,142990,142994,142998,143001,143004,143007,143010,143014,143017,143021,143024,143027,143072,143076,143080,143083,143086,143089,143121,143125,143128,143162,143166,143169,143199],[10,142295,142291],{"id":142296},"_18-2d动画与3d转换",[140,142298,142300],{"id":142299},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142302,142303],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142305,142306],{},"转换（transform）你可以简单理解为变形",[1206,142308,142309,142312,142315],{},[155,142310,142311],{},"移动：translate",[155,142313,142314],{},"旋转：rotate",[155,142316,142317],{},"缩放：scale",[56,142319],{"style":126449,"src":142320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[169,142322,142324],{"id":142323},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22070,142326,142328],{"id":142327},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142330,142331,142332],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[350,142333,133252],{},[56,142335],{"style":126449,"src":142336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142338,142339],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142341,142342],{},"对于行内元素无效",[14,142344,142345],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22070,142347,142349],{"id":142348},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[67,142351,142352],{"className":126593,"code":138782,"language":126595,"meta":58,"style":58},[73,142353,142354,142360,142372],{"__ignoreMap":58},[76,142355,142356,142358],{"class":78,"line":79},[76,142357,51681],{"class":51370},[76,142359,15644],{"class":93},[76,142361,142362,142364,142366,142368,142370],{"class":78,"line":86},[76,142363,70540],{"class":250},[76,142365,51507],{"class":93},[76,142367,392],{"class":250},[76,142369,51626],{"class":250},[76,142371,1363],{"class":93},[76,142373,142374],{"class":78,"line":97},[76,142375,1637],{"class":93},[169,142377,142379],{"id":142378},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22070,142381,142383],{"id":142382},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142385,142386],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[56,142388],{"style":126449,"src":142389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22070,142391,142393],{"id":142392},"_18122-旋转效果","18.1.2.2 旋转效果",[67,142395,142397],{"className":126593,"code":142396,"language":126595,"meta":58,"style":58},"div {\n  transform: rotate(45deg);\n}\n",[73,142398,142399,142405,142423],{"__ignoreMap":58},[76,142400,142401,142403],{"class":78,"line":79},[76,142402,51681],{"class":51370},[76,142404,15644],{"class":93},[76,142406,142407,142409,142411,142414,142416,142418,142421],{"class":78,"line":86},[76,142408,136577],{"class":250},[76,142410,51507],{"class":93},[76,142412,142413],{"class":250},"rotate",[76,142415,202],{"class":93},[76,142417,729],{"class":250},[76,142419,142420],{"class":89},"deg",[76,142422,2791],{"class":93},[76,142424,142425],{"class":78,"line":97},[76,142426,1637],{"class":93},[22070,142428,142430],{"id":142429},"_18123-三角做法","18.1.2.3 三角做法",[14,142432,142433],{},"该下标当经过最外层大盒子时会实现向上反转",[56,142435],{"style":126449,"src":142436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[67,142438,142439],{"className":126593,"code":135113,"language":126595,"meta":58,"style":58},[73,142440,142441,142445,142451,142461,142471,142487,142497],{"__ignoreMap":58},[76,142442,142443],{"class":78,"line":79},[76,142444,135120],{"class":82},[76,142446,142447,142449],{"class":78,"line":86},[76,142448,135125],{"class":2035},[76,142450,15644],{"class":93},[76,142452,142453,142455,142457,142459],{"class":78,"line":97},[76,142454,70638],{"class":250},[76,142456,51507],{"class":93},[76,142458,392],{"class":250},[76,142460,1363],{"class":93},[76,142462,142463,142465,142467,142469],{"class":78,"line":103},[76,142464,70858],{"class":250},[76,142466,51507],{"class":93},[76,142468,392],{"class":250},[76,142470,1363],{"class":93},[76,142472,142473,142475,142477,142479,142481,142483,142485],{"class":78,"line":1273},[76,142474,70966],{"class":250},[76,142476,51507],{"class":93},[76,142478,646],{"class":250},[76,142480,51562],{"class":89},[76,142482,51591],{"class":250},[76,142484,64061],{"class":250},[76,142486,1363],{"class":93},[76,142488,142489,142491,142493,142495],{"class":78,"line":1287},[76,142490,135168],{"class":250},[76,142492,51507],{"class":93},[76,142494,62439],{"class":250},[76,142496,1363],{"class":93},[76,142498,142499],{"class":78,"line":1293},[76,142500,1637],{"class":93},[169,142502,142504],{"id":142503},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22070,142506,142508],{"id":142507},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142510,142511],{},"设置中心点",[56,142513],{"style":126449,"src":142514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142516,142517],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22070,142519,142521],{"id":142520},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[67,142523,142525],{"className":126593,"code":142524,"language":126595,"meta":58,"style":58},"\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",[73,142526,142527,142532,142538,142553,142558,142563],{"__ignoreMap":58},[76,142528,142529],{"class":78,"line":79},[76,142530,142531],{"class":82},"\u002F* 转换中心点 *\u002F\n",[76,142533,142534,142536],{"class":78,"line":86},[76,142535,51681],{"class":51370},[76,142537,15644],{"class":93},[76,142539,142540,142543,142545,142547,142549,142551],{"class":78,"line":97},[76,142541,142542],{"class":250},"  transform-origin",[76,142544,51507],{"class":93},[76,142546,51662],{"class":250},[76,142548,17216],{"class":250},[76,142550,130456],{"class":93},[76,142552,135266],{"class":82},[76,142554,142555],{"class":78,"line":103},[76,142556,142557],{"class":82},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[76,142559,142560],{"class":78,"line":1273},[76,142561,142562],{"class":82},"  \u002F* transform-origin: left top; *\u002F\n",[76,142564,142565],{"class":78,"line":1287},[76,142566,1637],{"class":93},[22070,142568,142570],{"id":142569},"_18133-旋转案例","18.1.3.3 旋转案例",[56,142572],{"style":126449,"src":142573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[67,142575,142576],{"className":126593,"code":142396,"language":126595,"meta":58,"style":58},[73,142577,142578,142584,142600],{"__ignoreMap":58},[76,142579,142580,142582],{"class":78,"line":79},[76,142581,51681],{"class":51370},[76,142583,15644],{"class":93},[76,142585,142586,142588,142590,142592,142594,142596,142598],{"class":78,"line":86},[76,142587,136577],{"class":250},[76,142589,51507],{"class":93},[76,142591,142413],{"class":250},[76,142593,202],{"class":93},[76,142595,729],{"class":250},[76,142597,142420],{"class":89},[76,142599,2791],{"class":93},[76,142601,142602],{"class":78,"line":97},[76,142603,1637],{"class":93},[169,142605,142607],{"id":142606},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22070,142609,142611],{"id":142610},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142613,142614],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[56,142616],{"style":126449,"src":142617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22070,142619,142621],{"id":142620},"_18142-分页按钮","18.1.4.2 分页按钮",[56,142623],{"style":126449,"src":142624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[67,142626,142628],{"className":126593,"code":142627,"language":126595,"meta":58,"style":58},"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",[73,142629,142630,142636,142652,142656,142660,142665,142671,142685,142690],{"__ignoreMap":58},[76,142631,142632,142634],{"class":78,"line":79},[76,142633,51681],{"class":51370},[76,142635,15644],{"class":93},[76,142637,142638,142640,142642,142645,142647,142650],{"class":78,"line":86},[76,142639,136577],{"class":250},[76,142641,51507],{"class":93},[76,142643,142644],{"class":250},"scale",[76,142646,202],{"class":93},[76,142648,142649],{"class":250},"1.2",[76,142651,2791],{"class":93},[76,142653,142654],{"class":78,"line":97},[76,142655,1637],{"class":93},[76,142657,142658],{"class":78,"line":103},[76,142659,136054],{"class":93},[76,142661,142662],{"class":78,"line":1273},[76,142663,142664],{"class":82},"\u002F* 2D 缩放 *\u002F\n",[76,142666,142667,142669],{"class":78,"line":1287},[76,142668,51681],{"class":51370},[76,142670,15644],{"class":93},[76,142672,142673,142675,142677,142679,142681,142683],{"class":78,"line":1293},[76,142674,136577],{"class":250},[76,142676,51507],{"class":93},[76,142678,142644],{"class":250},[76,142680,202],{"class":93},[76,142682,142649],{"class":250},[76,142684,2791],{"class":93},[76,142686,142687],{"class":78,"line":1384},[76,142688,142689],{"class":82},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[76,142691,142692],{"class":78,"line":1390},[76,142693,1637],{"class":93},[14,142695,142696],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[67,142698,142700],{"className":126593,"code":142699,"language":126595,"meta":58,"style":58},"\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",[73,142701,142702,142707,142717,142738,142759,142763,142768,142774,142801],{"__ignoreMap":58},[76,142703,142704],{"class":78,"line":79},[76,142705,142706],{"class":82},"\u002F* 定义动画 *\u002F\n",[76,142708,142709,142712,142715],{"class":78,"line":86},[76,142710,142711],{"class":89},"@keyframes",[76,142713,142714],{"class":5288}," move",[76,142716,15644],{"class":93},[76,142718,142719,142722,142724,142726,142728,142731,142733,142735],{"class":78,"line":97},[76,142720,142721],{"class":2035},"  0%",[76,142723,79877],{"class":93},[76,142725,48204],{"class":250},[76,142727,51507],{"class":93},[76,142729,142730],{"class":250},"translateX",[76,142732,202],{"class":93},[76,142734,392],{"class":250},[76,142736,142737],{"class":93},"); }\n",[76,142739,142740,142743,142745,142747,142749,142751,142753,142755,142757],{"class":78,"line":103},[76,142741,142742],{"class":2035},"  100%",[76,142744,79877],{"class":93},[76,142746,48204],{"class":250},[76,142748,51507],{"class":93},[76,142750,142730],{"class":250},[76,142752,202],{"class":93},[76,142754,512],{"class":250},[76,142756,51562],{"class":89},[76,142758,142737],{"class":93},[76,142760,142761],{"class":78,"line":1273},[76,142762,1637],{"class":93},[76,142764,142765],{"class":78,"line":1287},[76,142766,142767],{"class":82},"\u002F* 调用动画 *\u002F\n",[76,142769,142770,142772],{"class":78,"line":1293},[76,142771,51681],{"class":51370},[76,142773,15644],{"class":93},[76,142775,142776,142779,142781,142783,142785,142787,142789,142791,142793,142796,142799],{"class":78,"line":1384},[76,142777,142778],{"class":250},"  animation",[76,142780,51507],{"class":93},[76,142782,135279],{"class":250},[76,142784,25191],{"class":250},[76,142786,894],{"class":89},[76,142788,78750],{"class":250},[76,142790,4165],{"class":250},[76,142792,894],{"class":89},[76,142794,142795],{"class":250}," infinite",[76,142797,142798],{"class":250}," alternate",[76,142800,1363],{"class":93},[76,142802,142803],{"class":78,"line":1390},[76,142804,1637],{"class":93},[14,142806,142696],{},[67,142808,142811],{"className":142809,"code":142810,"language":5259},[5257],"\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",[73,142812,142810],{"__ignoreMap":58},[22070,142814,142816],{"id":142815},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142818,142819],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[56,142821],{"style":126449,"src":142822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[67,142824,142825],{"className":126593,"code":142699,"language":126595,"meta":58,"style":58},[73,142826,142827,142831,142839,142857,142877,142881,142885,142891,142915],{"__ignoreMap":58},[76,142828,142829],{"class":78,"line":79},[76,142830,142706],{"class":82},[76,142832,142833,142835,142837],{"class":78,"line":86},[76,142834,142711],{"class":89},[76,142836,142714],{"class":5288},[76,142838,15644],{"class":93},[76,142840,142841,142843,142845,142847,142849,142851,142853,142855],{"class":78,"line":97},[76,142842,142721],{"class":2035},[76,142844,79877],{"class":93},[76,142846,48204],{"class":250},[76,142848,51507],{"class":93},[76,142850,142730],{"class":250},[76,142852,202],{"class":93},[76,142854,392],{"class":250},[76,142856,142737],{"class":93},[76,142858,142859,142861,142863,142865,142867,142869,142871,142873,142875],{"class":78,"line":103},[76,142860,142742],{"class":2035},[76,142862,79877],{"class":93},[76,142864,48204],{"class":250},[76,142866,51507],{"class":93},[76,142868,142730],{"class":250},[76,142870,202],{"class":93},[76,142872,512],{"class":250},[76,142874,51562],{"class":89},[76,142876,142737],{"class":93},[76,142878,142879],{"class":78,"line":1273},[76,142880,1637],{"class":93},[76,142882,142883],{"class":78,"line":1287},[76,142884,142767],{"class":82},[76,142886,142887,142889],{"class":78,"line":1293},[76,142888,51681],{"class":51370},[76,142890,15644],{"class":93},[76,142892,142893,142895,142897,142899,142901,142903,142905,142907,142909,142911,142913],{"class":78,"line":1384},[76,142894,142778],{"class":250},[76,142896,51507],{"class":93},[76,142898,135279],{"class":250},[76,142900,25191],{"class":250},[76,142902,894],{"class":89},[76,142904,78750],{"class":250},[76,142906,4165],{"class":250},[76,142908,894],{"class":89},[76,142910,142795],{"class":250},[76,142912,142798],{"class":250},[76,142914,1363],{"class":93},[76,142916,142917],{"class":78,"line":1390},[76,142918,1637],{"class":93},[14,142920,142921],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[169,142923,142925],{"id":142924},"_1823-知识点回顾","18.2.3 知识点回顾",[67,142927,142928],{"className":126593,"code":128762,"language":126595,"meta":58,"style":58},[73,142929,142930,142936,142946],{"__ignoreMap":58},[76,142931,142932,142934],{"class":78,"line":79},[76,142933,51681],{"class":51370},[76,142935,15644],{"class":93},[76,142937,142938,142940,142942,142944],{"class":78,"line":86},[76,142939,128775],{"class":250},[76,142941,51507],{"class":93},[76,142943,61806],{"class":250},[76,142945,1363],{"class":93},[76,142947,142948],{"class":78,"line":97},[76,142949,1637],{"class":93},[140,142951,142953],{"id":142952},"_183-3d-转换","18.3 3D 转换",[14,142955,142956],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[169,142958,142960],{"id":142959},"_1831-坐标轴认识","18.3.1 坐标轴认识",[56,142962],{"style":126449,"src":142963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[169,142965,142967],{"id":142966},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[56,142969],{"style":126449,"src":142970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142972,142973],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142975,142976],{},"translate3d的效果需要搭配透视perspective来使用",[56,142978],{"style":126449,"src":142979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[169,142981,142983],{"id":142982},"_1833-透视-perspective","18.3.3 透视 perspective",[56,142985],{"style":126449,"src":142986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142988,142989],{},"透视写在父盒子上，单位为像素",[169,142991,142993],{"id":142992},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22070,142995,142997],{"id":142996},"_18341-分开解释","18.3.4.1 分开解释",[56,142999],{"style":126449,"src":143000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[56,143002],{"style":126449,"src":143003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[56,143005],{"style":126449,"src":143006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143008,143009],{},"总结来说就是左手原则",[22070,143011,143013],{"id":143012},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[56,143015],{"style":126449,"src":143016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[169,143018,143020],{"id":143019},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[56,143022],{"style":126449,"src":143023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[56,143025],{"style":126449,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[67,143028,143030],{"className":126593,"code":143029,"language":126595,"meta":58,"style":58},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[73,143031,143032,143038,143051,143068],{"__ignoreMap":58},[76,143033,143034,143036],{"class":78,"line":79},[76,143035,51681],{"class":51370},[76,143037,15644],{"class":93},[76,143039,143040,143043,143045,143047,143049],{"class":78,"line":86},[76,143041,143042],{"class":250},"  perspective",[76,143044,51507],{"class":93},[76,143046,65144],{"class":250},[76,143048,51562],{"class":89},[76,143050,1363],{"class":93},[76,143052,143053,143055,143057,143060,143062,143064,143066],{"class":78,"line":97},[76,143054,136577],{"class":250},[76,143056,51507],{"class":93},[76,143058,143059],{"class":250},"rotateX",[76,143061,202],{"class":93},[76,143063,729],{"class":250},[76,143065,142420],{"class":89},[76,143067,2791],{"class":93},[76,143069,143070],{"class":78,"line":103},[76,143071,1637],{"class":93},[169,143073,143075],{"id":143074},"_1836-案例","18.3.6 案例",[22070,143077,143079],{"id":143078},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[56,143081],{"style":126449,"src":143082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[56,143084],{"style":126449,"src":143085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[56,143087],{"style":126449,"src":143088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[67,143090,143092],{"className":126593,"code":143091,"language":126595,"meta":58,"style":58},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[73,143093,143094,143099,143105,143117],{"__ignoreMap":58},[76,143095,143096],{"class":78,"line":79},[76,143097,143098],{"class":82},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[76,143100,143101,143103],{"class":78,"line":86},[76,143102,133590],{"class":2035},[76,143104,15644],{"class":93},[76,143106,143107,143109,143111,143113,143115],{"class":78,"line":97},[76,143108,143042],{"class":250},[76,143110,51507],{"class":93},[76,143112,65144],{"class":250},[76,143114,51562],{"class":89},[76,143116,1363],{"class":93},[76,143118,143119],{"class":78,"line":103},[76,143120,1637],{"class":93},[22070,143122,143124],{"id":143123},"_18362-3d导航栏","18.3.6.2 3D导航栏",[56,143126],{"style":126449,"src":143127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[67,143129,143130],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},[73,143131,143132,143136,143150,143154],{"__ignoreMap":58},[76,143133,143134],{"class":78,"line":79},[76,143135,130704],{"class":82},[76,143137,143138,143140,143142,143144,143146,143148],{"class":78,"line":86},[76,143139,1109],{"class":93},[76,143141,51681],{"class":51370},[76,143143,53556],{"class":2035},[76,143145,247],{"class":93},[76,143147,130717],{"class":305},[76,143149,51377],{"class":93},[76,143151,143152],{"class":78,"line":97},[76,143153,130724],{"class":93},[76,143155,143156,143158,143160],{"class":78,"line":103},[76,143157,51855],{"class":93},[76,143159,51681],{"class":51370},[76,143161,51377],{"class":93},[22070,143163,143165],{"id":143164},"_18363-旋转木马","18.3.6.3 旋转木马",[56,143167],{"style":126449,"src":143168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[67,143170,143171],{"className":126593,"code":142396,"language":126595,"meta":58,"style":58},[73,143172,143173,143179,143195],{"__ignoreMap":58},[76,143174,143175,143177],{"class":78,"line":79},[76,143176,51681],{"class":51370},[76,143178,15644],{"class":93},[76,143180,143181,143183,143185,143187,143189,143191,143193],{"class":78,"line":86},[76,143182,136577],{"class":250},[76,143184,51507],{"class":93},[76,143186,142413],{"class":250},[76,143188,202],{"class":93},[76,143190,729],{"class":250},[76,143192,142420],{"class":89},[76,143194,2791],{"class":93},[76,143196,143197],{"class":78,"line":97},[76,143198,1637],{"class":93},[117,143200,143201],{},"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":58,"searchDepth":86,"depth":86,"links":143203},[143204,143211],{"id":142299,"depth":86,"text":142300,"children":143205},[143206,143207,143208,143209,143210],{"id":142323,"depth":97,"text":142324},{"id":142378,"depth":97,"text":142379},{"id":142503,"depth":97,"text":142504},{"id":142606,"depth":97,"text":142607},{"id":142924,"depth":97,"text":142925},{"id":142952,"depth":86,"text":142953,"children":143212},[143213,143214,143215,143216,143217,143218],{"id":142959,"depth":97,"text":142960},{"id":142966,"depth":97,"text":142967},{"id":142982,"depth":97,"text":142983},{"id":142992,"depth":97,"text":142993},{"id":143019,"depth":97,"text":143020},{"id":143074,"depth":97,"text":143075},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142291,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143225,"title":143226,"body":143227,"description":122,"extension":123,"meta":143430,"navigation":125,"path":143431,"seo":143432,"stem":143433,"__hash__":143434},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143228,"toc":143419},[143229,143232,143236,143239,143242,143246,143249,143252,143255,143259,143262,143266,143269,143273,143276,143280,143294,143298,143323,143326,143329,143346,143350,143354,143357,143360,143364,143367,143370,143388,143392,143395,143409,143413,143416],[10,143230,143226],{"id":143231},"_19-移动端基础-前缀现状与视口",[140,143233,143235],{"id":143234},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[56,143237],{"style":126449,"src":143238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143240,143241],{},"意思就是加个前缀，增加兼容性",[140,143243,143245],{"id":143244},"_192-移动端现状认识","19.2 移动端现状认识",[56,143247],{"style":126449,"src":143248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143250,143251],{},"调试方法：",[56,143253],{"style":126449,"src":143254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[140,143256,143258],{"id":143257},"_193-视口","19.3 视口",[14,143260,143261],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[169,143263,143265],{"id":143264},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[56,143267],{"style":126449,"src":143268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[169,143270,143272],{"id":143271},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[56,143274],{"style":126449,"src":143275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[169,143277,143279],{"id":143278},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1206,143281,143282,143285,143288,143291],{},[155,143283,143284],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[155,143286,143287],{},"理想视口，对设备来讲，是最理想的视口尺寸",[155,143289,143290],{},"需要手动添写meta视口标签通知浏览器操作",[155,143292,143293],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[169,143295,143297],{"id":143296},"_1934-meta视口标签","19.3.4 meta视口标签",[67,143299,143301],{"className":127340,"code":143300,"language":127342,"meta":58,"style":58},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[73,143302,143303],{"__ignoreMap":58},[76,143304,143305,143307,143309,143311,143313,143315,143317,143319,143321],{"class":78,"line":79},[76,143306,1109],{"class":93},[76,143308,51414],{"class":51370},[76,143310,14992],{"class":2035},[76,143312,247],{"class":93},[76,143314,51461],{"class":305},[76,143316,51441],{"class":2035},[76,143318,247],{"class":93},[76,143320,51468],{"class":305},[76,143322,51377],{"class":93},[56,143324],{"style":126449,"src":143325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143327,143328],{},"标准视口设置：",[152,143330,143331,143334,143337,143340,143343],{},[155,143332,143333],{},"视口宽度和设备保持一致",[155,143335,143336],{},"视口的默认缩放比例1.0",[155,143338,143339],{},"不允许用户自行缩放",[155,143341,143342],{},"最大允许的缩放比例1.0",[155,143344,143345],{},"最小允许的缩放比例1.0",[169,143347,143349],{"id":143348},"_1935-二倍图","19.3.5 二倍图",[22070,143351,143353],{"id":143352},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[56,143355],{"style":126449,"src":143356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[56,143358],{"style":126449,"src":143359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22070,143361,143363],{"id":143362},"_19352-多倍图","19.3.5.2 多倍图",[56,143365],{"style":126449,"src":143366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143368,143369],{},"二倍图法，代码如下：",[67,143371,143373],{"className":126593,"code":143372,"language":126595,"meta":58,"style":58},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[73,143374,143375,143380],{"__ignoreMap":58},[76,143376,143377],{"class":78,"line":79},[76,143378,143379],{"class":82},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[76,143381,143382,143385],{"class":78,"line":86},[76,143383,143384],{"class":51370},"background-size",[76,143386,143387],{"class":93},": 50% 50%;\n",[22070,143389,143391],{"id":143390},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[56,143393],{"style":126449,"src":143394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[152,143396,143397,143400,143403,143406],{},[155,143398,143399],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[155,143401,143402],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[155,143404,143405],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[155,143407,143408],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22070,143410,143412],{"id":143411},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[56,143414],{"style":126449,"src":143415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[117,143417,143418],{},"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":58,"searchDepth":86,"depth":86,"links":143420},[143421,143422,143423],{"id":143234,"depth":86,"text":143235},{"id":143244,"depth":86,"text":143245},{"id":143257,"depth":86,"text":143258,"children":143424},[143425,143426,143427,143428,143429],{"id":143264,"depth":97,"text":143265},{"id":143271,"depth":97,"text":143272},{"id":143278,"depth":97,"text":143279},{"id":143296,"depth":97,"text":143297},{"id":143348,"depth":97,"text":143349},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143226,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143436,"title":143437,"body":143438,"description":122,"extension":123,"meta":144315,"navigation":125,"path":144316,"seo":144317,"stem":144318,"__hash__":144319},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143439,"toc":144299},[143440,143443,143447,143454,143457,143464,143467,143472,143475,143479,143483,143490,143493,143496,143500,143503,143506,143509,143512,143515,143519,143522,143526,143528,143531,143534,143537,143540,143542,143545,143547,143577,143579,143609,143613,143616,143620,143623,143640,143643,143646,143722,143724,143727,143730,143733,143736,143738,143741,143744,143748,143770,143773,143776,143780,143783,143789,143792,143796,143799,143802,143806,143809,143812,143815,143819,143822,143825,143828,143831,143835,143838,143842,143849,143852,143855,143858,143861,143871,143874,143877,143884,143887,143891,143894,143897,143901,143904,143907,143910,143955,143958,143961,143964,143966,144095,144097,144135,144138,144141,144143,144261,144263,144297],[10,143441,143437],{"id":143442},"_20-移动端布局实战上篇",[140,143444,143446],{"id":143445},"_201-移动端主流方案","20.1 移动端主流方案",[152,143448,143449],{},[155,143450,143451],{},[350,143452,143453],{},"单独移动端页面（主流）",[56,143455],{"style":126449,"src":143456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[152,143458,143459],{"start":86},[155,143460,143461],{},[350,143462,143463],{},"响应式兼容PC移动端",[56,143465],{"style":126449,"src":143466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[152,143468,143469],{"start":97},[155,143470,143471],{},"两种页面选型布局方式",[56,143473],{"style":126449,"src":143474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[140,143476,143478],{"id":143477},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[169,143480,143482],{"id":143481},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143484,143485,143486],{},"官网地址： ",[439,143487,143488],{"href":143488,"rel":143489},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23937],[56,143491],{"style":126449,"src":143492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[56,143494],{"style":126449,"src":143495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[169,143497,143499],{"id":143498},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[56,143501],{"style":126449,"src":143502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[56,143504],{"style":126449,"src":143505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143507,143508],{},"去除高亮：",[14,143510,143511],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143513,143514],{},"-webkit- tap-highlight-color: transparent;",[140,143516,143518],{"id":143517},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[56,143520],{"style":126449,"src":143521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[140,143523,143525],{"id":143524},"_204-流式布局案例","20.4 流式布局案例",[14,143527,231],{},[14,143529,143530],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143532,143533],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143535,143536],{},"图片格式：",[56,143538],{"style":126449,"src":143539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143541,135636],{},[56,143543],{"style":126449,"src":143544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143546,139963],{},[67,143548,143549],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,143550,143551],{"__ignoreMap":58},[76,143552,143553,143555,143557,143559,143561,143563,143565,143567,143569,143571,143573,143575],{"class":78,"line":79},[76,143554,1109],{"class":93},[76,143556,56],{"class":51370},[76,143558,55309],{"class":2035},[76,143560,247],{"class":93},[76,143562,134110],{"class":305},[76,143564,55317],{"class":2035},[76,143566,247],{"class":93},[76,143568,134117],{"class":305},[76,143570,134120],{"class":2035},[76,143572,247],{"class":93},[76,143574,134125],{"class":305},[76,143576,51377],{"class":93},[14,143578,140052],{},[67,143580,143581],{"className":127340,"code":134095,"language":127342,"meta":58,"style":58},[73,143582,143583],{"__ignoreMap":58},[76,143584,143585,143587,143589,143591,143593,143595,143597,143599,143601,143603,143605,143607],{"class":78,"line":79},[76,143586,1109],{"class":93},[76,143588,56],{"class":51370},[76,143590,55309],{"class":2035},[76,143592,247],{"class":93},[76,143594,134110],{"class":305},[76,143596,55317],{"class":2035},[76,143598,247],{"class":93},[76,143600,134117],{"class":305},[76,143602,134120],{"class":2035},[76,143604,247],{"class":93},[76,143606,134125],{"class":305},[76,143608,51377],{"class":93},[140,143610,143612],{"id":143611},"_205-flex布局","20.5 flex布局",[56,143614],{"style":126449,"src":143615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[169,143617,143619],{"id":143618},"_2051-布局原理","20.5.1 布局原理",[14,143621,143622],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1206,143624,143625,143628,143631,143634,143637],{},[155,143626,143627],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[155,143629,143630],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[155,143632,143633],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[155,143635,143636],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[155,143638,143639],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143641,143642],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143644,143645],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[67,143647,143649],{"className":126593,"code":143648,"language":126595,"meta":58,"style":58},"\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",[73,143650,143651,143656,143663,143673,143685,143696,143707,143718],{"__ignoreMap":58},[76,143652,143653],{"class":78,"line":79},[76,143654,143655],{"class":82},"\u002F* Flex 弹性布局 *\u002F\n",[76,143657,143658,143661],{"class":78,"line":86},[76,143659,143660],{"class":2035},".container",[76,143662,15644],{"class":93},[76,143664,143665,143667,143669,143671],{"class":78,"line":97},[76,143666,128209],{"class":250},[76,143668,51507],{"class":93},[76,143670,51547],{"class":250},[76,143672,1363],{"class":93},[76,143674,143675,143678,143680,143683],{"class":78,"line":103},[76,143676,143677],{"class":250},"  flex-direction",[76,143679,51507],{"class":93},[76,143681,143682],{"class":250},"row",[76,143684,1363],{"class":93},[76,143686,143687,143690,143692,143694],{"class":78,"line":1273},[76,143688,143689],{"class":250},"  justify-content",[76,143691,51507],{"class":93},[76,143693,51738],{"class":250},[76,143695,1363],{"class":93},[76,143697,143698,143701,143703,143705],{"class":78,"line":1287},[76,143699,143700],{"class":250},"  align-items",[76,143702,51507],{"class":93},[76,143704,51662],{"class":250},[76,143706,1363],{"class":93},[76,143708,143709,143712,143714,143716],{"class":78,"line":1293},[76,143710,143711],{"class":250},"  flex-wrap",[76,143713,51507],{"class":93},[76,143715,78680],{"class":250},[76,143717,1363],{"class":93},[76,143719,143720],{"class":78,"line":1384},[76,143721,1637],{"class":93},[14,143723,70523],{},[14,143725,143726],{},".form-item .male-label {",[14,143728,143729],{},"   margin-right: 20px;",[14,143731,143732],{},"   display: inline-flex;",[14,143734,143735],{},"   align-items: center;",[14,143737,1145],{},[56,143739],{"style":126449,"src":143740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[56,143742],{"style":126449,"src":143743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[169,143745,143747],{"id":143746},"_2052-常见父项属性","20.5.2 常见父项属性",[152,143749,143750,143753,143756,143759,143762,143765,143768],{},[155,143751,143752],{},"flex-direction：设置主轴的方向",[155,143754,143755],{},"justify-content：设置主轴上的子元素排列方式",[155,143757,143758],{},"flex-wrap：设置子元素是否换行",[155,143760,143761],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[155,143763,143764],{},"align-items：设置侧轴上的子元素排列方式（单行）",[155,143766,143767],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[155,143769,143752],{},[56,143771],{"style":126449,"src":143772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[56,143774],{"style":126449,"src":143775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[152,143777,143778],{"start":86},[155,143779,143755],{},[56,143781],{"style":126449,"src":143782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143784,143785,143788],{},[73,143786,143787],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143790,143791],{},"跟着主轴走",[152,143793,143794],{"start":97},[155,143795,143758],{},[56,143797],{"style":126449,"src":143798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143800,143801],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[152,143803,143804],{"start":103},[155,143805,143761],{},[56,143807],{"style":126449,"src":143808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143810,143811],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143813,143814],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[152,143816,143817],{"start":1273},[155,143818,143764],{},[56,143820],{"style":126449,"src":143821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143823,143824],{},"align-items与align-content之间的区别：",[14,143826,143827],{},"单找items，多找content",[56,143829],{"style":126449,"src":143830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[152,143832,143833],{"start":1287},[155,143834,143767],{},[56,143836],{"style":126449,"src":143837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[169,143839,143841],{"id":143840},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[152,143843,143844],{},[155,143845,143846],{},[350,143847,143848],{},"flex 属性",[14,143850,143851],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[56,143853],{"style":126449,"src":143854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143856,143857],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143859,143860],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[152,143862,143863],{"start":86},[155,143864,143865,13867,143868],{},[350,143866,143867],{},"align-self",[350,143869,143870],{},"控制子项自己在侧轴上的排列方式",[56,143872],{"style":126449,"src":143873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143875,143876],{},"单个子盒子在父盒子侧轴上的排列方式",[152,143878,143879],{"start":97},[155,143880,143881,143883],{},[350,143882,95366],{}," 属性定义项目的排列顺序",[56,143885],{"style":126449,"src":143886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[169,143888,143890],{"id":143889},"_2054-背景线性渐变","20.5.4 背景线性渐变",[56,143892],{"style":126449,"src":143893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143895,143896],{},"必须要添加浏览器的私有前缀",[169,143898,143900],{"id":143899},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143902,143903],{},"学到最重要的知识：",[14,143905,143906],{},"flex处理这样的布局思路",[56,143908],{"style":126449,"src":143909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[67,143911,143913],{"className":126593,"code":143912,"language":126595,"meta":58,"style":58},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[73,143914,143915,143921,143931,143941,143951],{"__ignoreMap":58},[76,143916,143917,143919],{"class":78,"line":79},[76,143918,143660],{"class":2035},[76,143920,15644],{"class":93},[76,143922,143923,143925,143927,143929],{"class":78,"line":86},[76,143924,128209],{"class":250},[76,143926,51507],{"class":93},[76,143928,51547],{"class":250},[76,143930,1363],{"class":93},[76,143932,143933,143935,143937,143939],{"class":78,"line":97},[76,143934,143689],{"class":250},[76,143936,51507],{"class":93},[76,143938,51662],{"class":250},[76,143940,1363],{"class":93},[76,143942,143943,143945,143947,143949],{"class":78,"line":103},[76,143944,143700],{"class":250},[76,143946,51507],{"class":93},[76,143948,51662],{"class":250},[76,143950,1363],{"class":93},[76,143952,143953],{"class":78,"line":1273},[76,143954,1637],{"class":93},[14,143956,143957],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143959,143960],{},"使用属性选择器",[56,143962],{"style":126449,"src":143963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143965,68959],{},[67,143967,143969],{"className":127340,"code":143968,"language":127342,"meta":58,"style":58},"\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",[73,143970,143971,143976,143990,143995,144015,144020,144039,144044,144063,144068,144087],{"__ignoreMap":58},[76,143972,143973],{"class":78,"line":79},[76,143974,143975],{"class":82},"\u003C!-- 携程网移动端案例结构 -->\n",[76,143977,143978,143980,143982,143984,143986,143988],{"class":78,"line":86},[76,143979,1109],{"class":93},[76,143981,51681],{"class":51370},[76,143983,53556],{"class":2035},[76,143985,247],{"class":93},[76,143987,92393],{"class":305},[76,143989,51377],{"class":93},[76,143991,143992],{"class":78,"line":97},[76,143993,143994],{"class":82},"  \u003C!-- 搜索栏 -->\n",[76,143996,143997,143999,144001,144003,144005,144008,144011,144013],{"class":78,"line":103},[76,143998,52214],{"class":93},[76,144000,51681],{"class":51370},[76,144002,53556],{"class":2035},[76,144004,247],{"class":93},[76,144006,144007],{"class":305},"\"search-index\"",[76,144009,144010],{"class":93},">...\u003C\u002F",[76,144012,51681],{"class":51370},[76,144014,51377],{"class":93},[76,144016,144017],{"class":78,"line":1273},[76,144018,144019],{"class":82},"  \u003C!-- 焦点图 -->\n",[76,144021,144022,144024,144026,144028,144030,144033,144035,144037],{"class":78,"line":1287},[76,144023,52214],{"class":93},[76,144025,51681],{"class":51370},[76,144027,53556],{"class":2035},[76,144029,247],{"class":93},[76,144031,144032],{"class":305},"\"focus\"",[76,144034,144010],{"class":93},[76,144036,51681],{"class":51370},[76,144038,51377],{"class":93},[76,144040,144041],{"class":78,"line":1293},[76,144042,144043],{"class":82},"  \u003C!-- 主导航 -->\n",[76,144045,144046,144048,144050,144052,144054,144057,144059,144061],{"class":78,"line":1384},[76,144047,52214],{"class":93},[76,144049,51681],{"class":51370},[76,144051,53556],{"class":2035},[76,144053,247],{"class":93},[76,144055,144056],{"class":305},"\"local-nav\"",[76,144058,144010],{"class":93},[76,144060,51681],{"class":51370},[76,144062,51377],{"class":93},[76,144064,144065],{"class":78,"line":1390},[76,144066,144067],{"class":82},"  \u003C!-- 子导航 -->\n",[76,144069,144070,144072,144074,144076,144078,144081,144083,144085],{"class":78,"line":1402},[76,144071,52214],{"class":93},[76,144073,51681],{"class":51370},[76,144075,53556],{"class":2035},[76,144077,247],{"class":93},[76,144079,144080],{"class":305},"\"nav-common\"",[76,144082,144010],{"class":93},[76,144084,51681],{"class":51370},[76,144086,51377],{"class":93},[76,144088,144089,144091,144093],{"class":78,"line":1684},[76,144090,51855],{"class":93},[76,144092,51681],{"class":51370},[76,144094,51377],{"class":93},[14,144096,70523],{},[67,144098,144099],{"className":126593,"code":137045,"language":126595,"meta":58,"style":58},[73,144100,144101,144115,144131],{"__ignoreMap":58},[76,144102,144103,144105,144107,144109,144111,144113],{"class":78,"line":79},[76,144104,53891],{"class":51370},[76,144106,1089],{"class":93},[76,144108,103148],{"class":2035},[76,144110,247],{"class":89},[76,144112,62769],{"class":305},[76,144114,137062],{"class":93},[76,144116,144117,144119,144121,144123,144125,144127,144129],{"class":78,"line":86},[76,144118,70966],{"class":250},[76,144120,51507],{"class":93},[76,144122,418],{"class":250},[76,144124,51562],{"class":89},[76,144126,51591],{"class":250},[76,144128,130173],{"class":250},[76,144130,1363],{"class":93},[76,144132,144133],{"class":78,"line":97},[76,144134,1637],{"class":93},[14,144136,144137],{},"总代码和效果展示：",[56,144139],{"style":126449,"src":144140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144142,68959],{},[67,144144,144145],{"className":127340,"code":143968,"language":127342,"meta":58,"style":58},[73,144146,144147,144151,144165,144169,144187,144191,144209,144213,144231,144235,144253],{"__ignoreMap":58},[76,144148,144149],{"class":78,"line":79},[76,144150,143975],{"class":82},[76,144152,144153,144155,144157,144159,144161,144163],{"class":78,"line":86},[76,144154,1109],{"class":93},[76,144156,51681],{"class":51370},[76,144158,53556],{"class":2035},[76,144160,247],{"class":93},[76,144162,92393],{"class":305},[76,144164,51377],{"class":93},[76,144166,144167],{"class":78,"line":97},[76,144168,143994],{"class":82},[76,144170,144171,144173,144175,144177,144179,144181,144183,144185],{"class":78,"line":103},[76,144172,52214],{"class":93},[76,144174,51681],{"class":51370},[76,144176,53556],{"class":2035},[76,144178,247],{"class":93},[76,144180,144007],{"class":305},[76,144182,144010],{"class":93},[76,144184,51681],{"class":51370},[76,144186,51377],{"class":93},[76,144188,144189],{"class":78,"line":1273},[76,144190,144019],{"class":82},[76,144192,144193,144195,144197,144199,144201,144203,144205,144207],{"class":78,"line":1287},[76,144194,52214],{"class":93},[76,144196,51681],{"class":51370},[76,144198,53556],{"class":2035},[76,144200,247],{"class":93},[76,144202,144032],{"class":305},[76,144204,144010],{"class":93},[76,144206,51681],{"class":51370},[76,144208,51377],{"class":93},[76,144210,144211],{"class":78,"line":1293},[76,144212,144043],{"class":82},[76,144214,144215,144217,144219,144221,144223,144225,144227,144229],{"class":78,"line":1384},[76,144216,52214],{"class":93},[76,144218,51681],{"class":51370},[76,144220,53556],{"class":2035},[76,144222,247],{"class":93},[76,144224,144056],{"class":305},[76,144226,144010],{"class":93},[76,144228,51681],{"class":51370},[76,144230,51377],{"class":93},[76,144232,144233],{"class":78,"line":1390},[76,144234,144067],{"class":82},[76,144236,144237,144239,144241,144243,144245,144247,144249,144251],{"class":78,"line":1402},[76,144238,52214],{"class":93},[76,144240,51681],{"class":51370},[76,144242,53556],{"class":2035},[76,144244,247],{"class":93},[76,144246,144080],{"class":305},[76,144248,144010],{"class":93},[76,144250,51681],{"class":51370},[76,144252,51377],{"class":93},[76,144254,144255,144257,144259],{"class":78,"line":1684},[76,144256,51855],{"class":93},[76,144258,51681],{"class":51370},[76,144260,51377],{"class":93},[14,144262,70523],{},[67,144264,144265],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},[73,144266,144267,144271,144285,144289],{"__ignoreMap":58},[76,144268,144269],{"class":78,"line":79},[76,144270,130704],{"class":82},[76,144272,144273,144275,144277,144279,144281,144283],{"class":78,"line":86},[76,144274,1109],{"class":93},[76,144276,51681],{"class":51370},[76,144278,53556],{"class":2035},[76,144280,247],{"class":93},[76,144282,130717],{"class":305},[76,144284,51377],{"class":93},[76,144286,144287],{"class":78,"line":97},[76,144288,130724],{"class":93},[76,144290,144291,144293,144295],{"class":78,"line":103},[76,144292,51855],{"class":93},[76,144294,51681],{"class":51370},[76,144296,51377],{"class":93},[117,144298,137994],{},{"title":58,"searchDepth":86,"depth":86,"links":144300},[144301,144302,144306,144307,144308],{"id":143445,"depth":86,"text":143446},{"id":143477,"depth":86,"text":143478,"children":144303},[144304,144305],{"id":143481,"depth":97,"text":143482},{"id":143498,"depth":97,"text":143499},{"id":143517,"depth":86,"text":143518},{"id":143524,"depth":86,"text":143525},{"id":143611,"depth":86,"text":143612,"children":144309},[144310,144311,144312,144313,144314],{"id":143618,"depth":97,"text":143619},{"id":143746,"depth":97,"text":143747},{"id":143840,"depth":97,"text":143841},{"id":143889,"depth":97,"text":143890},{"id":143899,"depth":97,"text":143900},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143437,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144321,"title":144322,"body":144323,"description":122,"extension":123,"meta":145550,"navigation":125,"path":145551,"seo":145552,"stem":145553,"__hash__":145554},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144324,"toc":145528},[144325,144328,144332,144336,144339,144342,144346,144351,144354,144357,144360,144363,144366,144423,144426,144431,144434,144437,144441,144452,144456,144459,144462,144469,144474,144478,144481,144487,144490,144494,144497,144504,144507,144510,144517,144520,144527,144530,144533,144540,144543,144546,144548,144565,144569,144572,144575,144578,144582,144585,144588,144591,144594,144597,144600,144602,144605,144608,144670,144673,144783,144790,144796,144799,144802,144806,144809,144813,144818,144821,144828,144831,144837,144842,144845,144848,144851,144854,144857,144860,144863,144866,144922,144924,144950,144954,144957,144960,144963,144971,144974,144977,144981,145037,145040,145044,145050,145061,145064,145069,145072,145075,145081,145084,145087,145090,145093,145096,145099,145102,145105,145130,145136,145139,145142,145145,145148,145151,145154,145159,145162,145165,145168,145176,145179,145186,145189,145192,145194,145218,145220,145223,145226,145229,145232,145235,145238,145241,145275,145278,145281,145315,145322,145325,145328,145331,145334,145337,145340,145347,145350,145353,145356,145359,145366,145369,145372,145379,145382,145385,145389,145392,145395,145398,145401,145404,145407,145410,145413,145415,145439,145441,145465,145469,145480,145483,145486,145489,145492,145495,145498,145501,145504,145507,145510,145513,145516,145519,145522,145525],[10,144326,144322],{"id":144327},"_21-移动端布局实战下篇",[140,144329,144331],{"id":144330},"_211-rem适配布局","21.1 rem适配布局",[169,144333,144335],{"id":144334},"_2111-rem单位","21.1.1 rem单位",[56,144337],{"style":126449,"src":144338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144340,144341],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[169,144343,144345],{"id":144344},"_2112-媒体查询","21.1.2 媒体查询",[152,144347,144348],{},[155,144349,144350],{},"参数介绍",[56,144352],{"style":126449,"src":144353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[56,144355],{"style":126449,"src":144356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[56,144358],{"style":126449,"src":144359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[56,144361],{"style":126449,"src":144362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[56,144364],{"style":126449,"src":144365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[67,144367,144369],{"className":126593,"code":144368,"language":126595,"meta":58,"style":58},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[73,144370,144371,144376,144395,144402,144415,144419],{"__ignoreMap":58},[76,144372,144373],{"class":78,"line":79},[76,144374,144375],{"class":82},"\u002F* 媒体查询 *\u002F\n",[76,144377,144378,144381,144383,144386,144388,144391,144393],{"class":78,"line":86},[76,144379,144380],{"class":89},"@media",[76,144382,1730],{"class":93},[76,144384,144385],{"class":250},"max-width",[76,144387,51507],{"class":93},[76,144389,144390],{"class":250},"768",[76,144392,51562],{"class":89},[76,144394,12514],{"class":93},[76,144396,144397,144400],{"class":78,"line":97},[76,144398,144399],{"class":2035},"  .container",[76,144401,15644],{"class":93},[76,144403,144404,144407,144409,144411,144413],{"class":78,"line":103},[76,144405,144406],{"class":250},"    width",[76,144408,51507],{"class":93},[76,144410,512],{"class":250},[76,144412,106],{"class":89},[76,144414,1363],{"class":93},[76,144416,144417],{"class":78,"line":1273},[76,144418,127389],{"class":93},[76,144420,144421],{"class":78,"line":1287},[76,144422,1637],{"class":93},[14,144424,144425],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[152,144427,144428],{"start":86},[155,144429,144430],{},"引入资源",[56,144432],{"style":126449,"src":144433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144435,144436],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[169,144438,144440],{"id":144439},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1206,144442,144443,144446,144449],{},[155,144444,144445],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[155,144447,144448],{},"媒体查询可以根据不同设备宽度来修改样式",[155,144450,144451],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[140,144453,144455],{"id":144454},"_212-less基础","21.2 Less基础",[14,144457,144458],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144460,144461],{},"Less可以解决该问题，它是css的扩展语言",[14,144463,144464,144465],{},"Less中文网址： ",[439,144466,144467],{"href":144467,"rel":144468},"http:\u002F\u002Flesscss.cn\u002F",[23937],[14,144470,144471],{},[350,144472,144473],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[169,144475,144477],{"id":144476},"_2121-less安装","21.2.1 less安装",[14,144479,144480],{},"如果使用vscode，则无需进行下方安装步骤",[14,144482,144483],{},[439,144484,144485],{"href":144485,"rel":144486},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23937],[56,144488],{"style":126449,"src":144489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[169,144491,144493],{"id":144492},"_2122-less使用","21.2.2 less使用",[14,144495,144496],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[152,144498,144499],{},[155,144500,144501],{},[350,144502,144503],{},"Less 变量",[56,144505],{"style":126449,"src":144506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[56,144508],{"style":126449,"src":144509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[152,144511,144512],{"start":86},[155,144513,144514],{},[350,144515,144516],{},"Less 编译",[56,144518],{"style":126449,"src":144519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[152,144521,144522],{"start":97},[155,144523,144524],{},[350,144525,144526],{},"Less 嵌套",[56,144528],{"style":126449,"src":144529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[56,144531],{"style":126449,"src":144532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[152,144534,144535],{"start":103},[155,144536,144537],{},[350,144538,144539],{},"Less 运算",[56,144541],{"style":126449,"src":144542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144544,144545],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144547,231],{},[1206,144549,144550,144553,144556,144559,144562],{},[155,144551,144552],{},"乘号（*）和除号（\u002F）的写法",[155,144554,144555],{},"运算符中间左右有个空格隔开 1px + 5",[155,144557,144558],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[155,144560,144561],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[155,144563,144564],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[140,144566,144568],{"id":144567},"_213-rem-适配方案","21.3 rem 适配方案",[14,144570,144571],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144573,144574],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[56,144576],{"style":126449,"src":144577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[169,144579,144581],{"id":144580},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144583,144584],{},"rem + 媒体查询 + less 技术",[56,144586],{"style":126449,"src":144587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144589,144590],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144592,144593],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[56,144595],{"style":126449,"src":144596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144598,144599],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144601,14705],{},[56,144603],{"style":126449,"src":144604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144606,144607],{},"index.html:",[67,144609,144611],{"className":126593,"code":144610,"language":126595,"meta":58,"style":58},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[73,144612,144613,144618,144624,144640,144644,144650,144666],{"__ignoreMap":58},[76,144614,144615],{"class":78,"line":79},[76,144616,144617],{"class":82},"\u002F* rem 适配方案 *\u002F\n",[76,144619,144620,144622],{"class":78,"line":86},[76,144621,50705],{"class":51370},[76,144623,15644],{"class":93},[76,144625,144626,144628,144630,144633,144635,144637],{"class":78,"line":97},[76,144627,70696],{"class":250},[76,144629,51507],{"class":93},[76,144631,144632],{"class":250},"62.5",[76,144634,106],{"class":89},[76,144636,130456],{"class":93},[76,144638,144639],{"class":82},"\u002F* 1rem = 10px *\u002F\n",[76,144641,144642],{"class":78,"line":103},[76,144643,1637],{"class":93},[76,144645,144646,144648],{"class":78,"line":1273},[76,144647,130441],{"class":2035},[76,144649,15644],{"class":93},[76,144651,144652,144654,144656,144658,144661,144663],{"class":78,"line":1287},[76,144653,70638],{"class":250},[76,144655,51507],{"class":93},[76,144657,646],{"class":250},[76,144659,144660],{"class":89},"rem",[76,144662,130456],{"class":93},[76,144664,144665],{"class":82},"\u002F* 100px *\u002F\n",[76,144667,144668],{"class":78,"line":1293},[76,144669,1637],{"class":93},[14,144671,144672],{},"common.less",[67,144674,144676],{"className":126593,"code":144675,"language":126595,"meta":58,"style":58},"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",[73,144677,144678,144684,144699,144703,144709,144723,144727,144731,144735,144741,144755,144759,144765,144779],{"__ignoreMap":58},[76,144679,144680,144682],{"class":78,"line":79},[76,144681,50705],{"class":51370},[76,144683,15644],{"class":93},[76,144685,144686,144688,144690,144692,144694,144696],{"class":78,"line":86},[76,144687,70696],{"class":250},[76,144689,51507],{"class":93},[76,144691,144632],{"class":250},[76,144693,106],{"class":89},[76,144695,26140],{"class":93},[76,144697,144698],{"class":82},"\u002F* 10px *\u002F\n",[76,144700,144701],{"class":78,"line":97},[76,144702,1637],{"class":93},[76,144704,144705,144707],{"class":78,"line":103},[76,144706,51681],{"class":51370},[76,144708,15644],{"class":93},[76,144710,144711,144713,144715,144717,144719,144721],{"class":78,"line":1273},[76,144712,70638],{"class":250},[76,144714,51507],{"class":93},[76,144716,646],{"class":250},[76,144718,144660],{"class":89},[76,144720,26140],{"class":93},[76,144722,144665],{"class":82},[76,144724,144725],{"class":78,"line":1287},[76,144726,1637],{"class":93},[76,144728,144729],{"class":78,"line":1293},[76,144730,136054],{"class":93},[76,144732,144733],{"class":78,"line":1384},[76,144734,144617],{"class":82},[76,144736,144737,144739],{"class":78,"line":1390},[76,144738,50705],{"class":51370},[76,144740,15644],{"class":93},[76,144742,144743,144745,144747,144749,144751,144753],{"class":78,"line":1402},[76,144744,70696],{"class":250},[76,144746,51507],{"class":93},[76,144748,144632],{"class":250},[76,144750,106],{"class":89},[76,144752,130456],{"class":93},[76,144754,144639],{"class":82},[76,144756,144757],{"class":78,"line":1684},[76,144758,1637],{"class":93},[76,144760,144761,144763],{"class":78,"line":1689},[76,144762,130441],{"class":2035},[76,144764,15644],{"class":93},[76,144766,144767,144769,144771,144773,144775,144777],{"class":78,"line":1695},[76,144768,70638],{"class":250},[76,144770,51507],{"class":93},[76,144772,646],{"class":250},[76,144774,144660],{"class":89},[76,144776,130456],{"class":93},[76,144778,144665],{"class":82},[76,144780,144781],{"class":78,"line":1700},[76,144782,1637],{"class":93},[14,144784,144785,144786,144789],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23625,144787,144788],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[67,144791,144794],{"className":144792,"code":144793,"language":5259},[5257],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[73,144795,144793],{"__ignoreMap":58},[14,144797,144798],{},"less保存时会自动变成.css文件",[14,144800,144801],{},"好好搞懂上述代码写法",[169,144803,144805],{"id":144804},"_2132-样式导入样式","21.3.2 样式导入样式",[56,144807],{"style":126449,"src":144808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[169,144810,144812],{"id":144811},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[152,144814,144815],{},[155,144816,144817],{},"准备工作",[56,144819],{"style":126449,"src":144820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144822,144823,144824],{},"github地址：",[439,144825,144826],{"href":144826,"rel":144827},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23937],[14,144829,144830],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144832,144833,144834],{},"js文件引入到index.html中使用的是",[73,144835,144836],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[152,144838,144839],{"start":86},[155,144840,144841],{},"vscode插件",[56,144843],{"style":126449,"src":144844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144846,144847],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144849,144850],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[56,144852],{"style":126449,"src":144853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144855,144856],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[56,144858],{"style":126449,"src":144859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144861,144862],{},"修改成75就可以，alt+z为快捷键",[14,144864,144865],{},"index.css：",[67,144867,144868],{"className":126593,"code":144610,"language":126595,"meta":58,"style":58},[73,144869,144870,144874,144880,144894,144898,144904,144918],{"__ignoreMap":58},[76,144871,144872],{"class":78,"line":79},[76,144873,144617],{"class":82},[76,144875,144876,144878],{"class":78,"line":86},[76,144877,50705],{"class":51370},[76,144879,15644],{"class":93},[76,144881,144882,144884,144886,144888,144890,144892],{"class":78,"line":97},[76,144883,70696],{"class":250},[76,144885,51507],{"class":93},[76,144887,144632],{"class":250},[76,144889,106],{"class":89},[76,144891,130456],{"class":93},[76,144893,144639],{"class":82},[76,144895,144896],{"class":78,"line":103},[76,144897,1637],{"class":93},[76,144899,144900,144902],{"class":78,"line":1273},[76,144901,130441],{"class":2035},[76,144903,15644],{"class":93},[76,144905,144906,144908,144910,144912,144914,144916],{"class":78,"line":1287},[76,144907,70638],{"class":250},[76,144909,51507],{"class":93},[76,144911,646],{"class":250},[76,144913,144660],{"class":89},[76,144915,130456],{"class":93},[76,144917,144665],{"class":82},[76,144919,144920],{"class":78,"line":1293},[76,144921,1637],{"class":93},[14,144923,144607],{},[67,144925,144926],{"className":126593,"code":126997,"language":126595,"meta":58,"style":58},[73,144927,144928,144934,144946],{"__ignoreMap":58},[76,144929,144930,144932],{"class":78,"line":79},[76,144931,51870],{"class":51370},[76,144933,15644],{"class":93},[76,144935,144936,144938,144940,144942,144944],{"class":78,"line":86},[76,144937,70696],{"class":250},[76,144939,51507],{"class":93},[76,144941,800],{"class":250},[76,144943,51562],{"class":89},[76,144945,1363],{"class":93},[76,144947,144948],{"class":78,"line":97},[76,144949,1637],{"class":93},[140,144951,144953],{"id":144952},"_214-响应式开发","21.4 响应式开发",[14,144955,144956],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[56,144958],{"style":126449,"src":144959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144961,144962],{},"做法：",[1206,144964,144965,144968],{},[155,144966,144967],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[155,144969,144970],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[56,144972],{"style":126449,"src":144973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144975,144976],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[169,144978,144980],{"id":144979},"_2141-简单代码示范","21.4.1 简单代码示范",[67,144982,144983],{"className":126593,"code":144610,"language":126595,"meta":58,"style":58},[73,144984,144985,144989,144995,145009,145013,145019,145033],{"__ignoreMap":58},[76,144986,144987],{"class":78,"line":79},[76,144988,144617],{"class":82},[76,144990,144991,144993],{"class":78,"line":86},[76,144992,50705],{"class":51370},[76,144994,15644],{"class":93},[76,144996,144997,144999,145001,145003,145005,145007],{"class":78,"line":97},[76,144998,70696],{"class":250},[76,145000,51507],{"class":93},[76,145002,144632],{"class":250},[76,145004,106],{"class":89},[76,145006,130456],{"class":93},[76,145008,144639],{"class":82},[76,145010,145011],{"class":78,"line":103},[76,145012,1637],{"class":93},[76,145014,145015,145017],{"class":78,"line":1273},[76,145016,130441],{"class":2035},[76,145018,15644],{"class":93},[76,145020,145021,145023,145025,145027,145029,145031],{"class":78,"line":1287},[76,145022,70638],{"class":250},[76,145024,51507],{"class":93},[76,145026,646],{"class":250},[76,145028,144660],{"class":89},[76,145030,130456],{"class":93},[76,145032,144665],{"class":82},[76,145034,145035],{"class":78,"line":1293},[76,145036,1637],{"class":93},[14,145038,145039],{},"父盒子一般命名为container",[169,145041,145043],{"id":145042},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145045,145046,145047],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[350,145048,145049],{},"使得 Web 开发更加快捷",[1206,145051,145052],{},[155,145053,145054,145055],{},"官网：",[350,145056,145057],{},[439,145058,145059],{"href":145059,"rel":145060},"http:\u002F\u002Fgetbootstrap.com\u002F",[23937],[14,145062,145063],{},"可以直接去官网拿现成的东西",[152,145065,145066],{},[155,145067,145068],{},"Bootstrap的使用",[14,145070,145071],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145073,145074],{},"Bootstrap 使用四步曲：",[14,145076,145077,145080],{},[350,145078,145079],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[56,145082],{"style":126449,"src":145083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145085,145086],{},"打开Bootstrap官网，然后下载",[56,145088],{"style":126449,"src":145089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[56,145091],{"style":126449,"src":145092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145094,145095],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145097,145098],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145100,145101],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[56,145103],{"style":126449,"src":145104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[67,145106,145108],{"className":126593,"code":145107,"language":126595,"meta":58,"style":58},".center {\n  color: red;\n}\n",[73,145109,145110,145116,145126],{"__ignoreMap":58},[76,145111,145112,145114],{"class":78,"line":79},[76,145113,126884],{"class":2035},[76,145115,15644],{"class":93},[76,145117,145118,145120,145122,145124],{"class":78,"line":86},[76,145119,70975],{"class":250},[76,145121,51507],{"class":93},[76,145123,57491],{"class":250},[76,145125,1363],{"class":93},[76,145127,145128],{"class":78,"line":97},[76,145129,1637],{"class":93},[14,145131,145132,145135],{},[73,145133,145134],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[56,145137],{"style":126449,"src":145138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[56,145140],{"style":126449,"src":145141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[56,145143],{"style":126449,"src":145144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145146,145147],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[56,145149],{"style":126449,"src":145150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145152,145153],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[152,145155,145156],{"start":86},[155,145157,145158],{},"布局容器",[56,145160],{"style":126449,"src":145161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145163,145164],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145166,145167],{},"container-fluid用于移动式布局比较方便",[152,145169,145170],{"start":97},[155,145171,145172,145173],{},"bootstrap ",[350,145174,145175],{},"栅格系统原理",[56,145177],{"style":126449,"src":145178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[152,145180,145181],{"start":103},[155,145182,145183],{},[350,145184,145185],{},"栅格选项参数",[56,145187],{"style":126449,"src":145188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145190,145191],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145193,14705],{},[67,145195,145196],{"className":126593,"code":145107,"language":126595,"meta":58,"style":58},[73,145197,145198,145204,145214],{"__ignoreMap":58},[76,145199,145200,145202],{"class":78,"line":79},[76,145201,126884],{"class":2035},[76,145203,15644],{"class":93},[76,145205,145206,145208,145210,145212],{"class":78,"line":86},[76,145207,70975],{"class":250},[76,145209,51507],{"class":93},[76,145211,57491],{"class":250},[76,145213,1363],{"class":93},[76,145215,145216],{"class":78,"line":97},[76,145217,1637],{"class":93},[14,145219,135636],{},[56,145221],{"style":126449,"src":145222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145224,145225],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145227,145228],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145230,145231],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145233,145234],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145236,145237],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145239,145240],{},"汇总展示说明：",[67,145242,145243],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},[73,145244,145245,145249,145263,145267],{"__ignoreMap":58},[76,145246,145247],{"class":78,"line":79},[76,145248,130704],{"class":82},[76,145250,145251,145253,145255,145257,145259,145261],{"class":78,"line":86},[76,145252,1109],{"class":93},[76,145254,51681],{"class":51370},[76,145256,53556],{"class":2035},[76,145258,247],{"class":93},[76,145260,130717],{"class":305},[76,145262,51377],{"class":93},[76,145264,145265],{"class":78,"line":97},[76,145266,130724],{"class":93},[76,145268,145269,145271,145273],{"class":78,"line":103},[76,145270,51855],{"class":93},[76,145272,51681],{"class":51370},[76,145274,51377],{"class":93},[56,145276],{"style":126449,"src":145277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145279,145280],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[67,145282,145283],{"className":127340,"code":130697,"language":127342,"meta":58,"style":58},[73,145284,145285,145289,145303,145307],{"__ignoreMap":58},[76,145286,145287],{"class":78,"line":79},[76,145288,130704],{"class":82},[76,145290,145291,145293,145295,145297,145299,145301],{"class":78,"line":86},[76,145292,1109],{"class":93},[76,145294,51681],{"class":51370},[76,145296,53556],{"class":2035},[76,145298,247],{"class":93},[76,145300,130717],{"class":305},[76,145302,51377],{"class":93},[76,145304,145305],{"class":78,"line":97},[76,145306,130724],{"class":93},[76,145308,145309,145311,145313],{"class":78,"line":103},[76,145310,51855],{"class":93},[76,145312,51681],{"class":51370},[76,145314,51377],{"class":93},[152,145316,145317],{"start":1273},[155,145318,145319],{},[350,145320,145321],{},"列嵌套",[56,145323],{"style":126449,"src":145324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145326,145327],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145329,145330],{},"没加row内部这样：",[56,145332],{"style":126449,"src":145333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145335,145336],{},"加上row之后内部为：",[56,145338],{"style":126449,"src":145339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[152,145341,145342],{"start":1287},[155,145343,145344],{},[350,145345,145346],{},"列偏移",[56,145348],{"style":126449,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145351,145352],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145354,145355],{},"要加偏移量，即偏移份数",[14,145357,145358],{},"偏移的份数=12-两个盒子的份数",[152,145360,145361],{"start":1293},[155,145362,145363],{},[350,145364,145365],{},"列排序",[56,145367],{"style":126449,"src":145368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145370,145371],{},"pull拉左；push推右",[152,145373,145374],{"start":1384},[155,145375,145376],{},[350,145377,145378],{},"响应式工具",[56,145380],{"style":126449,"src":145381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145383,145384],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[169,145386,145388],{"id":145387},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145390,145391],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145393,145394],{},"ul {",[14,145396,145397],{},"list-style: none;",[14,145399,145400],{},"margin:0;",[14,145402,145403],{},"padding:0; }",[56,145405],{"style":126449,"src":145406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[56,145408],{"style":126449,"src":145409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145411,145412],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145414,68959],{},[67,145416,145417],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,145418,145419,145425,145435],{"__ignoreMap":58},[76,145420,145421,145423],{"class":78,"line":79},[76,145422,130441],{"class":2035},[76,145424,15644],{"class":93},[76,145426,145427,145429,145431,145433],{"class":78,"line":86},[76,145428,131073],{"class":250},[76,145430,51507],{"class":93},[76,145432,23808],{"class":250},[76,145434,1363],{"class":93},[76,145436,145437],{"class":78,"line":97},[76,145438,1637],{"class":93},[14,145440,70523],{},[67,145442,145443],{"className":126593,"code":139263,"language":126595,"meta":58,"style":58},[73,145444,145445,145451,145461],{"__ignoreMap":58},[76,145446,145447,145449],{"class":78,"line":79},[76,145448,130441],{"class":2035},[76,145450,15644],{"class":93},[76,145452,145453,145455,145457,145459],{"class":78,"line":86},[76,145454,131073],{"class":250},[76,145456,51507],{"class":93},[76,145458,23808],{"class":250},[76,145460,1363],{"class":93},[76,145462,145463],{"class":78,"line":97},[76,145464,1637],{"class":93},[140,145466,145468],{"id":145467},"_215-swiper-插件使用","21.5 swiper 插件使用",[1206,145470,145471,145474,145477],{},[155,145472,145473],{},"下载需要的css和js文件html页面中 引入相关文件",[155,145475,145476],{},"官网找到类似案例，复制html结构，css样式 js 语法",[155,145478,145479],{},"根据需求定制修改模块",[56,145481],{"style":126449,"src":145482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145484,145485],{},"解压后将这两部分放到项目中",[56,145487],{"style":126449,"src":145488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145490,145491],{},"这个插件可以帮助我们实现轮播图效果",[14,145493,145494],{},"用法：",[56,145496],{"style":126449,"src":145497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145499,145500],{},"找到自己喜欢的",[56,145502],{"style":126449,"src":145503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145505,145506],{},"右键，查看网页源代码",[56,145508],{"style":126449,"src":145509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145511,145512],{},"复制人家的结构内容",[14,145514,145515],{},"然后去看API文档：",[56,145517],{"style":126449,"src":145518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145520,145521],{},"可以看看如何修改样式",[14,145523,145524],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[117,145526,145527],{},"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":58,"searchDepth":86,"depth":86,"links":145529},[145530,145535,145539,145544,145549],{"id":144330,"depth":86,"text":144331,"children":145531},[145532,145533,145534],{"id":144334,"depth":97,"text":144335},{"id":144344,"depth":97,"text":144345},{"id":144439,"depth":97,"text":144440},{"id":144454,"depth":86,"text":144455,"children":145536},[145537,145538],{"id":144476,"depth":97,"text":144477},{"id":144492,"depth":97,"text":144493},{"id":144567,"depth":86,"text":144568,"children":145540},[145541,145542,145543],{"id":144580,"depth":97,"text":144581},{"id":144804,"depth":97,"text":144805},{"id":144811,"depth":97,"text":144812},{"id":144952,"depth":86,"text":144953,"children":145545},[145546,145547,145548],{"id":144979,"depth":97,"text":144980},{"id":145042,"depth":97,"text":145043},{"id":145387,"depth":97,"text":145388},{"id":145467,"depth":86,"text":145468},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144322,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145556,"title":145557,"body":145558,"description":122,"extension":123,"meta":145778,"navigation":125,"path":145779,"seo":145780,"stem":145781,"__hash__":145782},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145559,"toc":145774},[145560,145563,145567,145570,145585,145590,145593,145598,145633,145638,145650,145655,145668,145673,145690,145695,145715,145720,145738,145741,145744,145747,145750,145754,145757,145760,145763,145766,145769,145772],[10,145561,145557],{"id":145562},"_22-代码提交与新型相对单位",[140,145564,145566],{"id":145565},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145568,145569],{},"法1：",[152,145571,145572,145579,145582],{},[155,145573,145574,145575],{},"登录网站注册：",[439,145576,145577],{"href":145577,"rel":145578},"https:\u002F\u002Fgitee.com\u002F",[23937],[155,145580,145581],{},"码云创建新的仓库",[155,145583,145584],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1206,145586,145587],{},[155,145588,145589],{},"在网站根目录右键-- Git Bash Here",[56,145591],{"style":126449,"src":145592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1206,145594,145595],{},[155,145596,145597],{},"如果是第一次利用git提交，请配置好全局选项",[67,145599,145601],{"className":117337,"code":145600,"language":117339,"meta":58,"style":58},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[73,145602,145603,145619],{"__ignoreMap":58},[76,145604,145605,145608,145610,145613,145616],{"class":78,"line":79},[76,145606,145607],{"class":2035},"git",[76,145609,119760],{"class":305},[76,145611,145612],{"class":250}," --global",[76,145614,145615],{"class":305}," user.name",[76,145617,145618],{"class":305}," \"你的名字\"\n",[76,145620,145621,145623,145625,145627,145630],{"class":78,"line":86},[76,145622,145607],{"class":2035},[76,145624,119760],{"class":305},[76,145626,145612],{"class":250},[76,145628,145629],{"class":305}," user.email",[76,145631,145632],{"class":305}," \"你的邮箱\"\n",[1206,145634,145635],{},[155,145636,145637],{},"初始化仓库",[67,145639,145641],{"className":117337,"code":145640,"language":117339,"meta":58,"style":58},"git init\n",[73,145642,145643],{"__ignoreMap":58},[76,145644,145645,145647],{"class":78,"line":79},[76,145646,145607],{"class":2035},[76,145648,145649],{"class":305}," init\n",[1206,145651,145652],{},[155,145653,145654],{},"把本地文件放到暂存区",[67,145656,145658],{"className":117337,"code":145657,"language":117339,"meta":58,"style":58},"git add .\n",[73,145659,145660],{"__ignoreMap":58},[76,145661,145662,145664,145666],{"class":78,"line":79},[76,145663,145607],{"class":2035},[76,145665,5281],{"class":305},[76,145667,28814],{"class":305},[1206,145669,145670],{},[155,145671,145672],{},"把本地文件放到本地仓库里面",[67,145674,145676],{"className":117337,"code":145675,"language":117339,"meta":58,"style":58},"git commit -m \"first commit\"\n",[73,145677,145678],{"__ignoreMap":58},[76,145679,145680,145682,145685,145687],{"class":78,"line":79},[76,145681,145607],{"class":2035},[76,145683,145684],{"class":305}," commit",[76,145686,100923],{"class":250},[76,145688,145689],{"class":305}," \"first commit\"\n",[1206,145691,145692],{},[155,145693,145694],{},"链接远程仓库",[67,145696,145698],{"className":117337,"code":145697,"language":117339,"meta":58,"style":58},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[73,145699,145700],{"__ignoreMap":58},[76,145701,145702,145704,145707,145709,145712],{"class":78,"line":79},[76,145703,145607],{"class":2035},[76,145705,145706],{"class":305}," remote",[76,145708,5281],{"class":305},[76,145710,145711],{"class":305}," origin",[76,145713,145714],{"class":305}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1206,145716,145717],{},[155,145718,145719],{},"把本地仓库的文件推送到远程仓库 push",[67,145721,145723],{"className":117337,"code":145722,"language":117339,"meta":58,"style":58},"git push -u origin master\n",[73,145724,145725],{"__ignoreMap":58},[76,145726,145727,145729,145731,145733,145735],{"class":78,"line":79},[76,145728,145607],{"class":2035},[76,145730,29089],{"class":305},[76,145732,28363],{"class":250},[76,145734,145711],{"class":305},[76,145736,145737],{"class":305}," master\n",[56,145739],{"style":126449,"src":145740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145742,145743],{},"上方方法暂未实现，后边学完git后在整",[14,145745,145746],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[56,145748],{"style":126449,"src":145749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[140,145751,145753],{"id":145752},"_222-新型相对单位","22.2 新型相对单位",[56,145755],{"style":126449,"src":145756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[56,145758],{"style":126449,"src":145759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145761,145762],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145764,145765],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[56,145767],{"style":126449,"src":145768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145770,145771],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[117,145773,24030],{},{"title":58,"searchDepth":86,"depth":86,"links":145775},[145776,145777],{"id":145565,"depth":86,"text":145566},{"id":145752,"depth":86,"text":145753},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145557,"description":122},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145784,"title":145785,"body":145786,"description":145790,"extension":123,"meta":145791,"navigation":125,"path":145792,"seo":145793,"stem":145794,"__hash__":145795},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145787,"toc":145788},[],{"title":58,"searchDepth":86,"depth":86,"links":145789},[],"自己正经开始学编程的第一门语言！",{"category":92909},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145785,"description":145790},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145797,"title":145798,"body":145799,"description":122,"extension":123,"meta":146946,"navigation":125,"path":146947,"seo":146948,"stem":146949,"__hash__":146950},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145800,"toc":146922},[145801,145804,145808,145811,145814,145839,145842,145848,145852,145855,145882,145885,145925,145928,145940,145943,145949,145953,145957,145984,146001,146008,146012,146015,146041,146044,146048,146051,146091,146094,146111,146117,146121,146126,146170,146173,146191,146194,146262,146266,146273,146276,146291,146294,146303,146306,146317,146320,146329,146332,146349,146352,146367,146371,146375,146378,146380,146400,146404,146407,146410,146421,146424,146430,146434,146440,146467,146470,146482,146485,146496,146499,146505,146509,146515,146565,146568,146610,146613,146646,146649,146683,146687,146690,146710,146713,146749,146752,146765,146769,146773,146779,146782,146795,146799,146802,146808,146811,146815,146818,146821,146870,146874,146890,146896,146903,146909,146919],[10,145802,145798],{"id":145803},"_1-python环境与第一个程序",[140,145805,145807],{"id":145806},"_11-什么是python","1.1 什么是Python",[14,145809,145810],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145812,145813],{},"理解 Python 时抓住三个关键词：",[152,145815,145816,145819,145822],{},[155,145817,145818],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[155,145820,145821],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[155,145823,145824,145825,413,145828,413,145831,413,145834,413,145836,28458],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[73,145826,145827],{},"os",[73,145829,145830],{},"sys",[73,145832,145833],{},"json",[73,145835,57930],{},[73,145837,145838],{},"datetime",[14,145840,145841],{},"Python 程序的运行链路：",[67,145843,145846],{"className":145844,"code":145845,"language":5259,"meta":58},[5257],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[73,145847,145845],{"__ignoreMap":58},[140,145849,145851],{"id":145850},"_12-python解释器","1.2 Python解释器",[14,145853,145854],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[67,145856,145858],{"className":23894,"code":145857,"language":23896,"meta":58,"style":58},"python --version\npython3 --version\npython\npython3\n",[73,145859,145860,145866,145872,145877],{"__ignoreMap":58},[76,145861,145862,145864],{"class":78,"line":79},[76,145863,71],{"class":2035},[76,145865,26366],{"class":250},[76,145867,145868,145870],{"class":78,"line":86},[76,145869,100920],{"class":2035},[76,145871,26366],{"class":250},[76,145873,145874],{"class":78,"line":97},[76,145875,145876],{"class":2035},"python\n",[76,145878,145879],{"class":78,"line":103},[76,145880,145881],{"class":2035},"python3\n",[14,145883,145884],{},"进入交互模式后，可以直接输入表达式：",[67,145886,145888],{"className":69,"code":145887,"language":71,"meta":58,"style":58},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[73,145889,145890,145901,145906,145920],{"__ignoreMap":58},[76,145891,145892,145895,145897,145899],{"class":78,"line":79},[76,145893,145894],{"class":89},">>>",[76,145896,25191],{"class":250},[76,145898,45636],{"class":89},[76,145900,47793],{"class":250},[76,145902,145903],{"class":78,"line":86},[76,145904,145905],{"class":250},"3\n",[76,145907,145908,145910,145913,145915,145918],{"class":78,"line":97},[76,145909,145894],{"class":89},[76,145911,145912],{"class":250}," print",[76,145914,202],{"class":93},[76,145916,145917],{"class":305},"\"hello python\"",[76,145919,208],{"class":93},[76,145921,145922],{"class":78,"line":103},[76,145923,145924],{"class":93},"hello python\n",[14,145926,145927],{},"退出交互模式：",[67,145929,145931],{"className":69,"code":145930,"language":71,"meta":58,"style":58},"exit()\n",[73,145932,145933],{"__ignoreMap":58},[76,145934,145935,145938],{"class":78,"line":79},[76,145936,145937],{"class":250},"exit",[76,145939,2048],{"class":93},[14,145941,145942],{},"或使用快捷键：",[67,145944,145947],{"className":145945,"code":145946,"language":5259,"meta":58},[5257],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[73,145948,145946],{"__ignoreMap":58},[140,145950,145952],{"id":145951},"_13-安装python","1.3 安装Python",[169,145954,145956],{"id":145955},"_131-windows安装","1.3.1 Windows安装",[152,145958,145959,145966,145969,145975,145981],{},[155,145960,145961,145962],{},"打开 Python 官网：",[439,145963,145964],{"href":145964,"rel":145965},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23937],[155,145967,145968],{},"下载 Windows Installer。",[155,145970,145971,145972,28458],{},"安装时勾选 ",[73,145973,145974],{},"Add Python to PATH",[155,145976,145977,145978,28458],{},"点击 ",[73,145979,145980],{},"Install Now",[155,145982,145983],{},"安装完成后打开命令提示符验证：",[67,145985,145987],{"className":23894,"code":145986,"language":23896,"meta":58,"style":58},"python --version\npip --version\n",[73,145988,145989,145995],{"__ignoreMap":58},[76,145990,145991,145993],{"class":78,"line":79},[76,145992,71],{"class":2035},[76,145994,26366],{"class":250},[76,145996,145997,145999],{"class":78,"line":86},[76,145998,23903],{"class":2035},[76,146000,26366],{"class":250},[14,146002,146003,146004,146007],{},"如果提示 ",[73,146005,146006],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[169,146009,146011],{"id":146010},"_132-macos安装","1.3.2 macOS安装",[14,146013,146014],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[67,146016,146018],{"className":23894,"code":146017,"language":23896,"meta":58,"style":58},"brew install python\npython3 --version\npip3 --version\n",[73,146019,146020,146029,146035],{"__ignoreMap":58},[76,146021,146022,146025,146027],{"class":78,"line":79},[76,146023,146024],{"class":2035},"brew",[76,146026,23906],{"class":305},[76,146028,124359],{"class":305},[76,146030,146031,146033],{"class":78,"line":86},[76,146032,100920],{"class":2035},[76,146034,26366],{"class":250},[76,146036,146037,146039],{"class":78,"line":97},[76,146038,119741],{"class":2035},[76,146040,26366],{"class":250},[14,146042,146043],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[169,146045,146047],{"id":146046},"_133-linux安装","1.3.3 Linux安装",[14,146049,146050],{},"Ubuntu\u002FDebian：",[67,146052,146054],{"className":23894,"code":146053,"language":23896,"meta":58,"style":58},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[73,146055,146056,146064,146079,146085],{"__ignoreMap":58},[76,146057,146058,146060,146062],{"class":78,"line":79},[76,146059,24649],{"class":2035},[76,146061,117358],{"class":305},[76,146063,26315],{"class":305},[76,146065,146066,146068,146070,146072,146074,146076],{"class":78,"line":86},[76,146067,24649],{"class":2035},[76,146069,117358],{"class":305},[76,146071,23906],{"class":305},[76,146073,104444],{"class":305},[76,146075,100839],{"class":305},[76,146077,146078],{"class":305}," python3-venv\n",[76,146080,146081,146083],{"class":78,"line":97},[76,146082,100920],{"class":2035},[76,146084,26366],{"class":250},[76,146086,146087,146089],{"class":78,"line":103},[76,146088,119741],{"class":2035},[76,146090,26366],{"class":250},[14,146092,146093],{},"Fedora：",[67,146095,146097],{"className":23894,"code":146096,"language":23896,"meta":58,"style":58},"sudo dnf install python3 python3-pip\n",[73,146098,146099],{"__ignoreMap":58},[76,146100,146101,146103,146105,146107,146109],{"class":78,"line":79},[76,146102,24649],{"class":2035},[76,146104,26388],{"class":305},[76,146106,23906],{"class":305},[76,146108,104444],{"class":305},[76,146110,119806],{"class":305},[14,146112,146113,146114,146116],{},"Linux 上通常使用 ",[73,146115,100920],{}," 命令，避免和系统旧版本 Python 冲突。",[140,146118,146120],{"id":146119},"_14-pip包管理器","1.4 pip包管理器",[14,146122,146123,146125],{},[73,146124,23903],{}," 用来安装第三方库。",[67,146127,146129],{"className":23894,"code":146128,"language":23896,"meta":58,"style":58},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[73,146130,146131,146140,146149,146157,146163],{"__ignoreMap":58},[76,146132,146133,146135,146137],{"class":78,"line":79},[76,146134,23903],{"class":2035},[76,146136,23906],{"class":305},[76,146138,146139],{"class":305}," requests\n",[76,146141,146142,146144,146147],{"class":78,"line":86},[76,146143,23903],{"class":2035},[76,146145,146146],{"class":305}," uninstall",[76,146148,146139],{"class":305},[76,146150,146151,146153,146155],{"class":78,"line":97},[76,146152,23903],{"class":2035},[76,146154,117615],{"class":305},[76,146156,146139],{"class":305},[76,146158,146159,146161],{"class":78,"line":103},[76,146160,23903],{"class":2035},[76,146162,118996],{"class":305},[76,146164,146165,146167],{"class":78,"line":1273},[76,146166,23903],{"class":2035},[76,146168,146169],{"class":305}," freeze\n",[14,146171,146172],{},"国内网络较慢时可以临时使用镜像：",[67,146174,146176],{"className":23894,"code":146175,"language":23896,"meta":58,"style":58},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[73,146177,146178],{"__ignoreMap":58},[76,146179,146180,146182,146184,146187,146189],{"class":78,"line":79},[76,146181,23903],{"class":2035},[76,146183,23906],{"class":305},[76,146185,146186],{"class":305}," requests",[76,146188,26503],{"class":250},[76,146190,119769],{"class":305},[14,146192,146193],{},"常见第三方库：",[338,146195,146196,146205],{},[341,146197,146198],{},[344,146199,146200,146203],{},[347,146201,146202],{},"库",[347,146204,102737],{},[385,146206,146207,146215,146222,146230,146238,146246,146254],{},[344,146208,146209,146212],{},[390,146210,146211],{},"requests",[390,146213,146214],{},"网络请求",[344,146216,146217,146219],{},[390,146218,100667],{},[390,146220,146221],{},"数值计算",[344,146223,146224,146227],{},[390,146225,146226],{},"pandas",[390,146228,146229],{},"表格数据处理",[344,146231,146232,146235],{},[390,146233,146234],{},"matplotlib",[390,146236,146237],{},"绘图",[344,146239,146240,146243],{},[390,146241,146242],{},"pyecharts",[390,146244,146245],{},"ECharts 图表",[344,146247,146248,146251],{},[390,146249,146250],{},"flask",[390,146252,146253],{},"Web 后端",[344,146255,146256,146259],{},[390,146257,146258],{},"pytest",[390,146260,146261],{},"自动化测试",[140,146263,146265],{"id":146264},"_15-虚拟环境","1.5 虚拟环境",[14,146267,146268,146269,146272],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[73,146270,146271],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146274,146275],{},"创建虚拟环境：",[67,146277,146279],{"className":23894,"code":146278,"language":23896,"meta":58,"style":58},"python -m venv .venv\n",[73,146280,146281],{"__ignoreMap":58},[76,146282,146283,146285,146287,146289],{"class":78,"line":79},[76,146284,71],{"class":2035},[76,146286,100923],{"class":250},[76,146288,100926],{"class":305},[76,146290,100929],{"class":305},[14,146292,146293],{},"Windows 激活：",[67,146295,146297],{"className":23894,"code":146296,"language":23896,"meta":58,"style":58},".venv\\Scripts\\activate\n",[73,146298,146299],{"__ignoreMap":58},[76,146300,146301],{"class":78,"line":79},[76,146302,146296],{"class":2035},[14,146304,146305],{},"macOS\u002FLinux 激活：",[67,146307,146309],{"className":23894,"code":146308,"language":23896,"meta":58,"style":58},"source .venv\u002Fbin\u002Factivate\n",[73,146310,146311],{"__ignoreMap":58},[76,146312,146313,146315],{"class":78,"line":79},[76,146314,100934],{"class":250},[76,146316,100937],{"class":305},[14,146318,146319],{},"退出虚拟环境：",[67,146321,146323],{"className":23894,"code":146322,"language":23896,"meta":58,"style":58},"deactivate\n",[73,146324,146325],{"__ignoreMap":58},[76,146326,146327],{"class":78,"line":79},[76,146328,146322],{"class":2035},[14,146330,146331],{},"保存依赖：",[67,146333,146335],{"className":23894,"code":146334,"language":23896,"meta":58,"style":58},"pip freeze > requirements.txt\n",[73,146336,146337],{"__ignoreMap":58},[76,146338,146339,146341,146344,146346],{"class":78,"line":79},[76,146340,23903],{"class":2035},[76,146342,146343],{"class":305}," freeze",[76,146345,26295],{"class":89},[76,146347,146348],{"class":305}," requirements.txt\n",[14,146350,146351],{},"安装依赖：",[67,146353,146355],{"className":23894,"code":146354,"language":23896,"meta":58,"style":58},"pip install -r requirements.txt\n",[73,146356,146357],{"__ignoreMap":58},[76,146358,146359,146361,146363,146365],{"class":78,"line":79},[76,146360,23903],{"class":2035},[76,146362,23906],{"class":305},[76,146364,119680],{"class":250},[76,146366,146348],{"class":305},[140,146368,146370],{"id":146369},"_16-开发工具","1.6 开发工具",[169,146372,146374],{"id":146373},"_161-pycharm","1.6.1 PyCharm",[14,146376,146377],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146379,122103],{},[152,146381,146382,146385,146388,146394,146397],{},[155,146383,146384],{},"New Project：创建项目。",[155,146386,146387],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[155,146389,146390,146391,126024],{},"New Python File：创建 ",[73,146392,146393],{},".py",[155,146395,146396],{},"Run：运行当前文件。",[155,146398,146399],{},"Debug：断点调试。",[169,146401,146403],{"id":146402},"_162-vs-code","1.6.2 VS Code",[14,146405,146406],{},"VS Code 轻量，适合后续多语言开发。",[14,146408,146409],{},"建议安装插件：",[152,146411,146412,146415,146418],{},[155,146413,146414],{},"Python。",[155,146416,146417],{},"Pylance。",[155,146419,146420],{},"Jupyter。",[14,146422,146423],{},"选择解释器：",[67,146425,146428],{"className":146426,"code":146427,"language":5259,"meta":58},[5257],"Ctrl + Shift + P -> Python: Select Interpreter\n",[73,146429,146427],{"__ignoreMap":58},[140,146431,146433],{"id":146432},"_17-第一个python程序","1.7 第一个Python程序",[14,146435,146436,146437,24691],{},"创建文件 ",[73,146438,146439],{},"hello.py",[67,146441,146443],{"className":69,"code":146442,"language":71,"meta":58,"style":58},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[73,146444,146445,146456],{"__ignoreMap":58},[76,146446,146447,146449,146451,146454],{"class":78,"line":79},[76,146448,30485],{"class":250},[76,146450,202],{"class":93},[76,146452,146453],{"class":305},"\"Hello World\"",[76,146455,208],{"class":93},[76,146457,146458,146460,146462,146465],{"class":78,"line":86},[76,146459,30485],{"class":250},[76,146461,202],{"class":93},[76,146463,146464],{"class":305},"\"你好，Python\"",[76,146466,208],{"class":93},[14,146468,146469],{},"在终端运行：",[67,146471,146473],{"className":23894,"code":146472,"language":23896,"meta":58,"style":58},"python hello.py\n",[73,146474,146475],{"__ignoreMap":58},[76,146476,146477,146479],{"class":78,"line":79},[76,146478,71],{"class":2035},[76,146480,146481],{"class":305}," hello.py\n",[14,146483,146484],{},"或：",[67,146486,146488],{"className":23894,"code":146487,"language":23896,"meta":58,"style":58},"python3 hello.py\n",[73,146489,146490],{"__ignoreMap":58},[76,146491,146492,146494],{"class":78,"line":79},[76,146493,100920],{"class":2035},[76,146495,146481],{"class":305},[14,146497,146498],{},"输出：",[67,146500,146503],{"className":146501,"code":146502,"language":5259,"meta":58},[5257],"Hello World\n你好，Python\n",[73,146504,146502],{"__ignoreMap":58},[140,146506,146508],{"id":146507},"_18-print函数","1.8 print函数",[14,146510,146511,146514],{},[73,146512,146513],{},"print()"," 用来输出内容。",[67,146516,146518],{"className":69,"code":146517,"language":71,"meta":58,"style":58},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[73,146519,146520,146530,146540,146550],{"__ignoreMap":58},[76,146521,146522,146524,146526,146528],{"class":78,"line":79},[76,146523,30485],{"class":250},[76,146525,202],{"class":93},[76,146527,5916],{"class":305},[76,146529,208],{"class":93},[76,146531,146532,146534,146536,146538],{"class":78,"line":86},[76,146533,30485],{"class":250},[76,146535,202],{"class":93},[76,146537,512],{"class":250},[76,146539,208],{"class":93},[76,146541,146542,146544,146546,146548],{"class":78,"line":97},[76,146543,30485],{"class":250},[76,146545,202],{"class":93},[76,146547,251],{"class":250},[76,146549,208],{"class":93},[76,146551,146552,146554,146556,146559,146561,146563],{"class":78,"line":103},[76,146553,30485],{"class":250},[76,146555,202],{"class":93},[76,146557,146558],{"class":305},"\"年龄:\"",[76,146560,12507],{"class":93},[76,146562,849],{"class":250},[76,146564,208],{"class":93},[14,146566,146567],{},"多个内容用逗号隔开，默认中间加空格：",[67,146569,146571],{"className":69,"code":146570,"language":71,"meta":58,"style":58},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[73,146572,146573,146583,146593],{"__ignoreMap":58},[76,146574,146575,146578,146580],{"class":78,"line":79},[76,146576,146577],{"class":93},"name ",[76,146579,247],{"class":89},[76,146581,146582],{"class":305}," \"张三\"\n",[76,146584,146585,146588,146590],{"class":78,"line":86},[76,146586,146587],{"class":93},"age ",[76,146589,247],{"class":89},[76,146591,146592],{"class":250}," 18\n",[76,146594,146595,146597,146599,146602,146605,146607],{"class":78,"line":97},[76,146596,30485],{"class":250},[76,146598,202],{"class":93},[76,146600,146601],{"class":305},"\"姓名:\"",[76,146603,146604],{"class":93},", name, ",[76,146606,146558],{"class":305},[76,146608,146609],{"class":93},", age)\n",[14,146611,146612],{},"修改分隔符：",[67,146614,146616],{"className":69,"code":146615,"language":71,"meta":58,"style":58},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[73,146617,146618],{"__ignoreMap":58},[76,146619,146620,146622,146624,146627,146629,146631,146633,146635,146637,146640,146642,146644],{"class":78,"line":79},[76,146621,30485],{"class":250},[76,146623,202],{"class":93},[76,146625,146626],{"class":305},"\"2024\"",[76,146628,12507],{"class":93},[76,146630,54386],{"class":305},[76,146632,12507],{"class":93},[76,146634,54386],{"class":305},[76,146636,12507],{"class":93},[76,146638,146639],{"class":5288},"sep",[76,146641,247],{"class":89},[76,146643,32553],{"class":305},[76,146645,208],{"class":93},[14,146647,146648],{},"修改结尾符：",[67,146650,146652],{"className":69,"code":146651,"language":71,"meta":58,"style":58},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[73,146653,146654,146672],{"__ignoreMap":58},[76,146655,146656,146658,146660,146662,146664,146666,146668,146670],{"class":78,"line":79},[76,146657,30485],{"class":250},[76,146659,202],{"class":93},[76,146661,5916],{"class":305},[76,146663,12507],{"class":93},[76,146665,45871],{"class":5288},[76,146667,247],{"class":89},[76,146669,4431],{"class":305},[76,146671,208],{"class":93},[76,146673,146674,146676,146678,146681],{"class":78,"line":86},[76,146675,30485],{"class":250},[76,146677,202],{"class":93},[76,146679,146680],{"class":305},"\"python\"",[76,146682,208],{"class":93},[140,146684,146686],{"id":146685},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146688,146689],{},"交互运行适合临时验证：",[67,146691,146693],{"className":69,"code":146692,"language":71,"meta":58,"style":58},">>> 10 * 3\n30\n",[73,146694,146695,146705],{"__ignoreMap":58},[76,146696,146697,146699,146701,146703],{"class":78,"line":79},[76,146698,145894],{"class":89},[76,146700,2110],{"class":250},[76,146702,6590],{"class":89},[76,146704,120077],{"class":250},[76,146706,146707],{"class":78,"line":86},[76,146708,146709],{"class":250},"30\n",[14,146711,146712],{},"脚本运行适合保存程序：",[67,146714,146716],{"className":69,"code":146715,"language":71,"meta":58,"style":58},"price = 8\ncount = 5\nprint(price * count)\n",[73,146717,146718,146728,146737],{"__ignoreMap":58},[76,146719,146720,146723,146725],{"class":78,"line":79},[76,146721,146722],{"class":93},"price ",[76,146724,247],{"class":89},[76,146726,146727],{"class":250}," 8\n",[76,146729,146730,146733,146735],{"class":78,"line":86},[76,146731,146732],{"class":93},"count ",[76,146734,247],{"class":89},[76,146736,54497],{"class":250},[76,146738,146739,146741,146744,146746],{"class":78,"line":97},[76,146740,30485],{"class":250},[76,146742,146743],{"class":93},"(price ",[76,146745,655],{"class":89},[76,146747,146748],{"class":93}," count)\n",[14,146750,146751],{},"实际学习中推荐：",[152,146753,146754,146757,146762],{},[155,146755,146756],{},"临时试一个语法，用交互模式。",[155,146758,146759,146760,126024],{},"写完整练习，用 ",[73,146761,146393],{},[155,146763,146764],{},"写项目，用独立目录和虚拟环境。",[140,146766,146768],{"id":146767},"_110-常见错误","1.10 常见错误",[169,146770,146772],{"id":146771},"_1101-命令找不到","1.10.1 命令找不到",[67,146774,146777],{"className":146775,"code":146776,"language":5259,"meta":58},[5257],"python: command not found\n",[73,146778,146776],{"__ignoreMap":58},[14,146780,146781],{},"原因：",[152,146783,146784,146787,146790],{},[155,146785,146786],{},"没安装 Python。",[155,146788,146789],{},"PATH 没配置。",[155,146791,146792,146793,28458],{},"Linux\u002FmacOS 应该使用 ",[73,146794,100920],{},[169,146796,146798],{"id":146797},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146800,146801],{},"不要把文件命名为：",[67,146803,146806],{"className":146804,"code":146805,"language":5259,"meta":58},[5257],"random.py\njson.py\ntime.py\nrequests.py\n",[73,146807,146805],{"__ignoreMap":58},[14,146809,146810],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[169,146812,146814],{"id":146813},"_1103-中文乱码","1.10.3 中文乱码",[14,146816,146817],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146819,146820],{},"如果读写文件出现乱码，要明确指定编码：",[67,146822,146824],{"className":69,"code":146823,"language":71,"meta":58,"style":58},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[73,146825,146826,146860],{"__ignoreMap":58},[76,146827,146828,146830,146833,146835,146838,146840,146843,146845,146848,146850,146853,146855,146857],{"class":78,"line":79},[76,146829,107874],{"class":89},[76,146831,146832],{"class":250}," open",[76,146834,202],{"class":93},[76,146836,146837],{"class":305},"\"data.txt\"",[76,146839,12507],{"class":93},[76,146841,146842],{"class":305},"\"r\"",[76,146844,12507],{"class":93},[76,146846,146847],{"class":5288},"encoding",[76,146849,247],{"class":89},[76,146851,146852],{"class":305},"\"utf-8\"",[76,146854,13786],{"class":93},[76,146856,31453],{"class":89},[76,146858,146859],{"class":93}," f:\n",[76,146861,146862,146865,146867],{"class":78,"line":86},[76,146863,146864],{"class":93},"    content ",[76,146866,247],{"class":89},[76,146868,146869],{"class":93}," f.read()\n",[140,146871,146873],{"id":146872},"_111-本章练习","1.11 本章练习",[152,146875,146876,146879,146885],{},[155,146877,146878],{},"安装 Python，并在终端输出版本号。",[155,146880,146881,146882,146884],{},"新建 ",[73,146883,146439],{},"，输出自己的姓名、年龄、学习目标。",[155,146886,104407,146887,146889],{},[73,146888,146513],{}," 输出下面格式：",[67,146891,146894],{"className":146892,"code":146893,"language":5259,"meta":58},[5257],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[73,146895,146893],{"__ignoreMap":58},[152,146897,146898],{"start":103},[155,146899,104407,146900,146902],{},[73,146901,146639],{}," 输出日期：",[67,146904,146907],{"className":146905,"code":146906,"language":5259,"meta":58},[5257],"2024-10-10\n",[73,146908,146906],{"__ignoreMap":58},[152,146910,146911],{"start":1273},[155,146912,104407,146913,146915,146916,146918],{},[73,146914,45871],{}," 让两次 ",[73,146917,146513],{}," 输出在同一行。",[117,146920,146921],{},"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":58,"searchDepth":86,"depth":86,"links":146923},[146924,146925,146926,146931,146932,146933,146937,146938,146939,146940,146945],{"id":145806,"depth":86,"text":145807},{"id":145850,"depth":86,"text":145851},{"id":145951,"depth":86,"text":145952,"children":146927},[146928,146929,146930],{"id":145955,"depth":97,"text":145956},{"id":146010,"depth":97,"text":146011},{"id":146046,"depth":97,"text":146047},{"id":146119,"depth":86,"text":146120},{"id":146264,"depth":86,"text":146265},{"id":146369,"depth":86,"text":146370,"children":146934},[146935,146936],{"id":146373,"depth":97,"text":146374},{"id":146402,"depth":97,"text":146403},{"id":146432,"depth":86,"text":146433},{"id":146507,"depth":86,"text":146508},{"id":146685,"depth":86,"text":146686},{"id":146767,"depth":86,"text":146768,"children":146941},[146942,146943,146944],{"id":146771,"depth":97,"text":146772},{"id":146797,"depth":97,"text":146798},{"id":146813,"depth":97,"text":146814},{"id":146872,"depth":86,"text":146873},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145798,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146952,"title":146953,"body":146954,"description":122,"extension":123,"meta":149358,"navigation":125,"path":149359,"seo":149360,"stem":149361,"__hash__":149362},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146955,"toc":149343},[146956,146959,146963,146966,146969,146986,146989,147031,147034,147038,147041,147044,147081,147084,147118,147121,147213,147217,147231,147234,147261,147264,147268,147371,147378,147381,147398,147402,147409,147598,147601,147674,147678,147681,147765,147768,147800,147804,148008,148011,148015,148021,148123,148126,148382,148386,148389,148392,148406,148408,148594,148598,148960,148966,148970,148973,149097,149100,149279,149282,149286,149319,149323,149340],[10,146957,146953],{"id":146958},"_10-json与pyecharts折线图",[140,146960,146962],{"id":146961},"_101-数据可视化","10.1 数据可视化",[14,146964,146965],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146967,146968],{},"常见图表：",[152,146970,146971,146974,146977,146980,146983],{},[155,146972,146973],{},"折线图：看趋势。",[155,146975,146976],{},"柱状图：看分类对比。",[155,146978,146979],{},"饼图：看占比。",[155,146981,146982],{},"地图：看地域分布。",[155,146984,146985],{},"散点图：看两个变量之间的关系。",[14,146987,146988],{},"Python 可视化常用库：",[338,146990,146991,146999],{},[341,146992,146993],{},[344,146994,146995,146997],{},[347,146996,146202],{},[347,146998,23812],{},[385,147000,147001,147008,147016,147023],{},[344,147002,147003,147005],{},[390,147004,146234],{},[390,147006,147007],{},"基础、经典、可定制",[344,147009,147010,147013],{},[390,147011,147012],{},"seaborn",[390,147014,147015],{},"统计图表更美观",[344,147017,147018,147020],{},[390,147019,146242],{},[390,147021,147022],{},"生成交互式网页图表",[344,147024,147025,147028],{},[390,147026,147027],{},"plotly",[390,147029,147030],{},"交互图表能力强",[14,147032,147033],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[140,147035,147037],{"id":147036},"_102-json回顾","10.2 JSON回顾",[14,147039,147040],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147042,147043],{},"Python 字典：",[67,147045,147047],{"className":69,"code":147046,"language":71,"meta":58,"style":58},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[73,147048,147049,147057,147068,147077],{"__ignoreMap":58},[76,147050,147051,147053,147055],{"class":78,"line":79},[76,147052,101699],{"class":93},[76,147054,247],{"class":89},[76,147056,15644],{"class":93},[76,147058,147059,147062,147064,147066],{"class":78,"line":86},[76,147060,147061],{"class":305},"    \"name\"",[76,147063,51507],{"class":93},[76,147065,69339],{"class":305},[76,147067,31536],{"class":93},[76,147069,147070,147073,147075],{"class":78,"line":97},[76,147071,147072],{"class":305},"    \"value\"",[76,147074,51507],{"class":93},[76,147076,97499],{"class":250},[76,147078,147079],{"class":78,"line":103},[76,147080,1637],{"class":93},[14,147082,147083],{},"JSON 字符串：",[67,147085,147088],{"className":147086,"code":147087,"language":145833,"meta":58,"style":58},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[73,147089,147090,147094,147105,147114],{"__ignoreMap":58},[76,147091,147092],{"class":78,"line":79},[76,147093,1618],{"class":93},[76,147095,147096,147099,147101,147103],{"class":78,"line":86},[76,147097,147098],{"class":250},"  \"name\"",[76,147100,51507],{"class":93},[76,147102,69339],{"class":305},[76,147104,31536],{"class":93},[76,147106,147107,147110,147112],{"class":78,"line":97},[76,147108,147109],{"class":250},"  \"value\"",[76,147111,51507],{"class":93},[76,147113,97499],{"class":250},[76,147115,147116],{"class":78,"line":103},[76,147117,1637],{"class":93},[14,147119,147120],{},"Python 与 JSON 的转换：",[67,147122,147124],{"className":69,"code":147123,"language":71,"meta":58,"style":58},"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",[73,147125,147126,147133,147137,147162,147166,147185,147192,147196,147206],{"__ignoreMap":58},[76,147127,147128,147130],{"class":78,"line":79},[76,147129,90],{"class":89},[76,147131,147132],{"class":93}," json\n",[76,147134,147135],{"class":78,"line":86},[76,147136,2472],{"emptyLinePlaceholder":125},[76,147138,147139,147141,147143,147145,147147,147149,147151,147153,147156,147158,147160],{"class":78,"line":97},[76,147140,101699],{"class":93},[76,147142,247],{"class":89},[76,147144,4520],{"class":93},[76,147146,62749],{"class":305},[76,147148,51507],{"class":93},[76,147150,69339],{"class":305},[76,147152,12507],{"class":93},[76,147154,147155],{"class":305},"\"value\"",[76,147157,51507],{"class":93},[76,147159,512],{"class":250},[76,147161,1637],{"class":93},[76,147163,147164],{"class":78,"line":103},[76,147165,2472],{"emptyLinePlaceholder":125},[76,147167,147168,147171,147173,147176,147179,147181,147183],{"class":78,"line":1273},[76,147169,147170],{"class":93},"json_text ",[76,147172,247],{"class":89},[76,147174,147175],{"class":93}," json.dumps(data, ",[76,147177,147178],{"class":5288},"ensure_ascii",[76,147180,247],{"class":89},[76,147182,34057],{"class":250},[76,147184,208],{"class":93},[76,147186,147187,147189],{"class":78,"line":1287},[76,147188,30485],{"class":250},[76,147190,147191],{"class":93},"(json_text)\n",[76,147193,147194],{"class":78,"line":1293},[76,147195,2472],{"emptyLinePlaceholder":125},[76,147197,147198,147201,147203],{"class":78,"line":1384},[76,147199,147200],{"class":93},"new_data ",[76,147202,247],{"class":89},[76,147204,147205],{"class":93}," json.loads(json_text)\n",[76,147207,147208,147210],{"class":78,"line":1390},[76,147209,30485],{"class":250},[76,147211,147212],{"class":93},"(new_data)\n",[140,147214,147216],{"id":147215},"_103-安装pyecharts","10.3 安装pyecharts",[67,147218,147220],{"className":23894,"code":147219,"language":23896,"meta":58,"style":58},"pip install pyecharts\n",[73,147221,147222],{"__ignoreMap":58},[76,147223,147224,147226,147228],{"class":78,"line":79},[76,147225,23903],{"class":2035},[76,147227,23906],{"class":305},[76,147229,147230],{"class":305}," pyecharts\n",[14,147232,147233],{},"验证：",[67,147235,147237],{"className":69,"code":147236,"language":71,"meta":58,"style":58},"import pyecharts\n\nprint(pyecharts.__version__)\n",[73,147238,147239,147245,147249],{"__ignoreMap":58},[76,147240,147241,147243],{"class":78,"line":79},[76,147242,90],{"class":89},[76,147244,147230],{"class":93},[76,147246,147247],{"class":78,"line":86},[76,147248,2472],{"emptyLinePlaceholder":125},[76,147250,147251,147253,147256,147259],{"class":78,"line":97},[76,147252,30485],{"class":250},[76,147254,147255],{"class":93},"(pyecharts.",[76,147257,147258],{"class":250},"__version__",[76,147260,208],{"class":93},[14,147262,147263],{},"如果使用虚拟环境，要先激活环境再安装。",[140,147265,147267],{"id":147266},"_104-第一个折线图","10.4 第一个折线图",[67,147269,147271],{"className":69,"code":147270,"language":71,"meta":58,"style":58},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[73,147272,147273,147285,147289,147299,147329,147361],{"__ignoreMap":58},[76,147274,147275,147277,147280,147282],{"class":78,"line":79},[76,147276,30807],{"class":89},[76,147278,147279],{"class":93}," pyecharts.charts ",[76,147281,90],{"class":89},[76,147283,147284],{"class":93}," Line\n",[76,147286,147287],{"class":78,"line":86},[76,147288,2472],{"emptyLinePlaceholder":125},[76,147290,147291,147294,147296],{"class":78,"line":97},[76,147292,147293],{"class":93},"line ",[76,147295,247],{"class":89},[76,147297,147298],{"class":93}," Line()\n",[76,147300,147301,147304,147307,147309,147312,147314,147317,147319,147322,147324,147327],{"class":78,"line":103},[76,147302,147303],{"class":93},"line.add_xaxis([",[76,147305,147306],{"class":305},"\"周一\"",[76,147308,12507],{"class":93},[76,147310,147311],{"class":305},"\"周二\"",[76,147313,12507],{"class":93},[76,147315,147316],{"class":305},"\"周三\"",[76,147318,12507],{"class":93},[76,147320,147321],{"class":305},"\"周四\"",[76,147323,12507],{"class":93},[76,147325,147326],{"class":305},"\"周五\"",[76,147328,4729],{"class":93},[76,147330,147331,147334,147337,147339,147341,147343,147345,147347,147349,147351,147354,147356,147359],{"class":78,"line":1273},[76,147332,147333],{"class":93},"line.add_yaxis(",[76,147335,147336],{"class":305},"\"销售额\"",[76,147338,77588],{"class":93},[76,147340,512],{"class":250},[76,147342,12507],{"class":93},[76,147344,1016],{"class":250},[76,147346,12507],{"class":93},[76,147348,1061],{"class":250},[76,147350,12507],{"class":93},[76,147352,147353],{"class":250},"150",[76,147355,12507],{"class":93},[76,147357,147358],{"class":250},"180",[76,147360,4729],{"class":93},[76,147362,147363,147366,147369],{"class":78,"line":1287},[76,147364,147365],{"class":93},"line.render(",[76,147367,147368],{"class":305},"\"line.html\"",[76,147370,208],{"class":93},[14,147372,147373,147374,147377],{},"运行后会生成 ",[73,147375,147376],{},"line.html","，用浏览器打开即可看到图表。",[14,147379,147380],{},"核心步骤：",[152,147382,147383,147386,147389,147392,147395],{},[155,147384,147385],{},"导入图表类。",[155,147387,147388],{},"创建图表对象。",[155,147390,147391],{},"添加 x 轴数据。",[155,147393,147394],{},"添加 y 轴数据。",[155,147396,147397],{},"渲染为 HTML。",[140,147399,147401],{"id":147400},"_105-全局配置","10.5 全局配置",[14,147403,147404,147405,147408],{},"常用配置在 ",[73,147406,147407],{},"pyecharts.options"," 中。",[67,147410,147412],{"className":69,"code":147411,"language":71,"meta":58,"style":58},"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",[73,147413,147414,147431,147441,147445,147453,147477,147505,147510,147529,147548,147566,147586,147590],{"__ignoreMap":58},[76,147415,147416,147418,147421,147423,147426,147428],{"class":78,"line":79},[76,147417,30807],{"class":89},[76,147419,147420],{"class":93}," pyecharts ",[76,147422,90],{"class":89},[76,147424,147425],{"class":93}," options ",[76,147427,31453],{"class":89},[76,147429,147430],{"class":93}," opts\n",[76,147432,147433,147435,147437,147439],{"class":78,"line":86},[76,147434,30807],{"class":89},[76,147436,147279],{"class":93},[76,147438,90],{"class":89},[76,147440,147284],{"class":93},[76,147442,147443],{"class":78,"line":97},[76,147444,2472],{"emptyLinePlaceholder":125},[76,147446,147447,147449,147451],{"class":78,"line":103},[76,147448,147293],{"class":93},[76,147450,247],{"class":89},[76,147452,147298],{"class":93},[76,147454,147455,147457,147459,147461,147463,147465,147467,147469,147471,147473,147475],{"class":78,"line":1273},[76,147456,147303],{"class":93},[76,147458,147306],{"class":305},[76,147460,12507],{"class":93},[76,147462,147311],{"class":305},[76,147464,12507],{"class":93},[76,147466,147316],{"class":305},[76,147468,12507],{"class":93},[76,147470,147321],{"class":305},[76,147472,12507],{"class":93},[76,147474,147326],{"class":305},[76,147476,4729],{"class":93},[76,147478,147479,147481,147483,147485,147487,147489,147491,147493,147495,147497,147499,147501,147503],{"class":78,"line":1287},[76,147480,147333],{"class":93},[76,147482,147336],{"class":305},[76,147484,77588],{"class":93},[76,147486,512],{"class":250},[76,147488,12507],{"class":93},[76,147490,1016],{"class":250},[76,147492,12507],{"class":93},[76,147494,1061],{"class":250},[76,147496,12507],{"class":93},[76,147498,147353],{"class":250},[76,147500,12507],{"class":93},[76,147502,147358],{"class":250},[76,147504,4729],{"class":93},[76,147506,147507],{"class":78,"line":1293},[76,147508,147509],{"class":93},"line.set_global_opts(\n",[76,147511,147512,147515,147517,147520,147522,147524,147527],{"class":78,"line":1384},[76,147513,147514],{"class":5288},"    title_opts",[76,147516,247],{"class":89},[76,147518,147519],{"class":93},"opts.TitleOpts(",[76,147521,51477],{"class":5288},[76,147523,247],{"class":89},[76,147525,147526],{"class":305},"\"一周销售额\"",[76,147528,38117],{"class":93},[76,147530,147531,147534,147536,147539,147541,147543,147546],{"class":78,"line":1390},[76,147532,147533],{"class":5288},"    xaxis_opts",[76,147535,247],{"class":89},[76,147537,147538],{"class":93},"opts.AxisOpts(",[76,147540,79880],{"class":5288},[76,147542,247],{"class":89},[76,147544,147545],{"class":305},"\"日期\"",[76,147547,38117],{"class":93},[76,147549,147550,147553,147555,147557,147559,147561,147564],{"class":78,"line":1402},[76,147551,147552],{"class":5288},"    yaxis_opts",[76,147554,247],{"class":89},[76,147556,147538],{"class":93},[76,147558,79880],{"class":5288},[76,147560,247],{"class":89},[76,147562,147563],{"class":305},"\"金额\"",[76,147565,38117],{"class":93},[76,147567,147568,147571,147573,147576,147579,147581,147584],{"class":78,"line":1684},[76,147569,147570],{"class":5288},"    tooltip_opts",[76,147572,247],{"class":89},[76,147574,147575],{"class":93},"opts.TooltipOpts(",[76,147577,147578],{"class":5288},"trigger",[76,147580,247],{"class":89},[76,147582,147583],{"class":305},"\"axis\"",[76,147585,38117],{"class":93},[76,147587,147588],{"class":78,"line":1689},[76,147589,208],{"class":93},[76,147591,147592,147594,147596],{"class":78,"line":1695},[76,147593,147365],{"class":93},[76,147595,147368],{"class":305},[76,147597,208],{"class":93},[14,147599,147600],{},"常见全局配置：",[338,147602,147603,147612],{},[341,147604,147605],{},[344,147606,147607,147610],{},[347,147608,147609],{},"配置",[347,147611,102737],{},[385,147613,147614,147624,147634,147644,147654,147664],{},[344,147615,147616,147621],{},[390,147617,147618],{},[73,147619,147620],{},"TitleOpts",[390,147622,147623],{},"标题",[344,147625,147626,147631],{},[390,147627,147628],{},[73,147629,147630],{},"LegendOpts",[390,147632,147633],{},"图例",[344,147635,147636,147641],{},[390,147637,147638],{},[73,147639,147640],{},"TooltipOpts",[390,147642,147643],{},"提示框",[344,147645,147646,147651],{},[390,147647,147648],{},[73,147649,147650],{},"AxisOpts",[390,147652,147653],{},"坐标轴",[344,147655,147656,147661],{},[390,147657,147658],{},[73,147659,147660],{},"VisualMapOpts",[390,147662,147663],{},"视觉映射",[344,147665,147666,147671],{},[390,147667,147668],{},[73,147669,147670],{},"DataZoomOpts",[390,147672,147673],{},"区域缩放",[140,147675,147677],{"id":147676},"_106-系列配置","10.6 系列配置",[14,147679,147680],{},"系列配置作用于某一组数据。",[67,147682,147684],{"className":69,"code":147683,"language":71,"meta":58,"style":58},"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",[73,147685,147686,147691,147702,147731,147742,147761],{"__ignoreMap":58},[76,147687,147688],{"class":78,"line":79},[76,147689,147690],{"class":93},"line.add_yaxis(\n",[76,147692,147693,147696,147698,147700],{"class":78,"line":86},[76,147694,147695],{"class":5288},"    series_name",[76,147697,247],{"class":89},[76,147699,147336],{"class":305},[76,147701,31536],{"class":93},[76,147703,147704,147707,147709,147711,147713,147715,147717,147719,147721,147723,147725,147727,147729],{"class":78,"line":97},[76,147705,147706],{"class":5288},"    y_axis",[76,147708,247],{"class":89},[76,147710,1089],{"class":93},[76,147712,512],{"class":250},[76,147714,12507],{"class":93},[76,147716,1016],{"class":250},[76,147718,12507],{"class":93},[76,147720,1061],{"class":250},[76,147722,12507],{"class":93},[76,147724,147353],{"class":250},[76,147726,12507],{"class":93},[76,147728,147358],{"class":250},[76,147730,87906],{"class":93},[76,147732,147733,147736,147738,147740],{"class":78,"line":103},[76,147734,147735],{"class":5288},"    is_smooth",[76,147737,247],{"class":89},[76,147739,31546],{"class":250},[76,147741,31536],{"class":93},[76,147743,147744,147747,147749,147752,147755,147757,147759],{"class":78,"line":1273},[76,147745,147746],{"class":5288},"    label_opts",[76,147748,247],{"class":89},[76,147750,147751],{"class":93},"opts.LabelOpts(",[76,147753,147754],{"class":5288},"is_show",[76,147756,247],{"class":89},[76,147758,31546],{"class":250},[76,147760,38117],{"class":93},[76,147762,147763],{"class":78,"line":1287},[76,147764,208],{"class":93},[14,147766,147767],{},"常用参数：",[152,147769,147770,147776,147782,147788,147794],{},[155,147771,147772,147775],{},[73,147773,147774],{},"series_name","：系列名称。",[155,147777,147778,147781],{},[73,147779,147780],{},"y_axis","：y 轴数据。",[155,147783,147784,147787],{},[73,147785,147786],{},"is_smooth","：是否平滑曲线。",[155,147789,147790,147793],{},[73,147791,147792],{},"label_opts","：标签配置。",[155,147795,147796,147799],{},[73,147797,147798],{},"symbol_size","：标记点大小。",[140,147801,147803],{"id":147802},"_107-多条折线","10.7 多条折线",[67,147805,147807],{"className":69,"code":147806,"language":71,"meta":58,"style":58},"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",[73,147808,147809,147823,147833,147837,147866,147870,147878,147883,147921,147958,147962,147979,147995,147999],{"__ignoreMap":58},[76,147810,147811,147813,147815,147817,147819,147821],{"class":78,"line":79},[76,147812,30807],{"class":89},[76,147814,147420],{"class":93},[76,147816,90],{"class":89},[76,147818,147425],{"class":93},[76,147820,31453],{"class":89},[76,147822,147430],{"class":93},[76,147824,147825,147827,147829,147831],{"class":78,"line":86},[76,147826,30807],{"class":89},[76,147828,147279],{"class":93},[76,147830,90],{"class":89},[76,147832,147284],{"class":93},[76,147834,147835],{"class":78,"line":97},[76,147836,2472],{"emptyLinePlaceholder":125},[76,147838,147839,147842,147844,147846,147848,147850,147852,147854,147856,147858,147860,147862,147864],{"class":78,"line":103},[76,147840,147841],{"class":93},"dates ",[76,147843,247],{"class":89},[76,147845,52296],{"class":93},[76,147847,147306],{"class":305},[76,147849,12507],{"class":93},[76,147851,147311],{"class":305},[76,147853,12507],{"class":93},[76,147855,147316],{"class":305},[76,147857,12507],{"class":93},[76,147859,147321],{"class":305},[76,147861,12507],{"class":93},[76,147863,147326],{"class":305},[76,147865,33316],{"class":93},[76,147867,147868],{"class":78,"line":1273},[76,147869,2472],{"emptyLinePlaceholder":125},[76,147871,147872,147874,147876],{"class":78,"line":1287},[76,147873,147293],{"class":93},[76,147875,247],{"class":89},[76,147877,147298],{"class":93},[76,147879,147880],{"class":78,"line":1293},[76,147881,147882],{"class":93},"line.add_xaxis(dates)\n",[76,147884,147885,147887,147890,147892,147894,147896,147899,147901,147903,147905,147907,147909,147911,147913,147915,147917,147919],{"class":78,"line":1384},[76,147886,147333],{"class":93},[76,147888,147889],{"class":305},"\"线上销售\"",[76,147891,77588],{"class":93},[76,147893,512],{"class":250},[76,147895,12507],{"class":93},[76,147897,147898],{"class":250},"130",[76,147900,12507],{"class":93},[76,147902,1016],{"class":250},[76,147904,12507],{"class":93},[76,147906,21120],{"class":250},[76,147908,12507],{"class":93},[76,147910,1794],{"class":250},[76,147912,112243],{"class":93},[76,147914,147786],{"class":5288},[76,147916,247],{"class":89},[76,147918,31546],{"class":250},[76,147920,208],{"class":93},[76,147922,147923,147925,147928,147930,147932,147934,147936,147938,147940,147942,147944,147946,147948,147950,147952,147954,147956],{"class":78,"line":1390},[76,147924,147333],{"class":93},[76,147926,147927],{"class":305},"\"线下销售\"",[76,147929,77588],{"class":93},[76,147931,811],{"class":250},[76,147933,12507],{"class":93},[76,147935,1061],{"class":250},[76,147937,12507],{"class":93},[76,147939,512],{"class":250},[76,147941,12507],{"class":93},[76,147943,1016],{"class":250},[76,147945,12507],{"class":93},[76,147947,147353],{"class":250},[76,147949,112243],{"class":93},[76,147951,147786],{"class":5288},[76,147953,247],{"class":89},[76,147955,31546],{"class":250},[76,147957,208],{"class":93},[76,147959,147960],{"class":78,"line":1402},[76,147961,147509],{"class":93},[76,147963,147964,147966,147968,147970,147972,147974,147977],{"class":78,"line":1684},[76,147965,147514],{"class":5288},[76,147967,247],{"class":89},[76,147969,147519],{"class":93},[76,147971,51477],{"class":5288},[76,147973,247],{"class":89},[76,147975,147976],{"class":305},"\"线上线下销售趋势\"",[76,147978,38117],{"class":93},[76,147980,147981,147983,147985,147987,147989,147991,147993],{"class":78,"line":1689},[76,147982,147570],{"class":5288},[76,147984,247],{"class":89},[76,147986,147575],{"class":93},[76,147988,147578],{"class":5288},[76,147990,247],{"class":89},[76,147992,147583],{"class":305},[76,147994,38117],{"class":93},[76,147996,147997],{"class":78,"line":1695},[76,147998,208],{"class":93},[76,148000,148001,148003,148006],{"class":78,"line":1700},[76,148002,147365],{"class":93},[76,148004,148005],{"class":305},"\"sales.html\"",[76,148007,208],{"class":93},[14,148009,148010],{},"多条折线适合比较不同指标或不同地区。",[140,148012,148014],{"id":148013},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148016,148017,148018,24691],{},"假设 ",[73,148019,148020],{},"sales.json",[67,148022,148024],{"className":147086,"code":148023,"language":145833,"meta":58,"style":58},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[73,148025,148026,148031,148063,148091,148119],{"__ignoreMap":58},[76,148027,148028],{"class":78,"line":79},[76,148029,148030],{"class":93},"[\n",[76,148032,148033,148036,148039,148041,148043,148045,148048,148050,148052,148054,148057,148059,148061],{"class":78,"line":86},[76,148034,148035],{"class":93},"  {",[76,148037,148038],{"class":250},"\"date\"",[76,148040,51507],{"class":93},[76,148042,147306],{"class":305},[76,148044,12507],{"class":93},[76,148046,148047],{"class":250},"\"online\"",[76,148049,51507],{"class":93},[76,148051,512],{"class":250},[76,148053,12507],{"class":93},[76,148055,148056],{"class":250},"\"offline\"",[76,148058,51507],{"class":93},[76,148060,811],{"class":250},[76,148062,5002],{"class":93},[76,148064,148065,148067,148069,148071,148073,148075,148077,148079,148081,148083,148085,148087,148089],{"class":78,"line":97},[76,148066,148035],{"class":93},[76,148068,148038],{"class":250},[76,148070,51507],{"class":93},[76,148072,147311],{"class":305},[76,148074,12507],{"class":93},[76,148076,148047],{"class":250},[76,148078,51507],{"class":93},[76,148080,147898],{"class":250},[76,148082,12507],{"class":93},[76,148084,148056],{"class":250},[76,148086,51507],{"class":93},[76,148088,1061],{"class":250},[76,148090,5002],{"class":93},[76,148092,148093,148095,148097,148099,148101,148103,148105,148107,148109,148111,148113,148115,148117],{"class":78,"line":103},[76,148094,148035],{"class":93},[76,148096,148038],{"class":250},[76,148098,51507],{"class":93},[76,148100,147316],{"class":305},[76,148102,12507],{"class":93},[76,148104,148047],{"class":250},[76,148106,51507],{"class":93},[76,148108,1016],{"class":250},[76,148110,12507],{"class":93},[76,148112,148056],{"class":250},[76,148114,51507],{"class":93},[76,148116,512],{"class":250},[76,148118,1637],{"class":93},[76,148120,148121],{"class":78,"line":1273},[76,148122,33316],{"class":93},[14,148124,148125],{},"读取并绘图：",[67,148127,148129],{"className":69,"code":148128,"language":71,"meta":58,"style":58},"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",[73,148130,148131,148137,148151,148161,148165,148197,148210,148214,148222,148231,148240,148244,148256,148265,148274,148283,148287,148295,148299,148316,148333,148337,148354,148370,148374],{"__ignoreMap":58},[76,148132,148133,148135],{"class":78,"line":79},[76,148134,90],{"class":89},[76,148136,147132],{"class":93},[76,148138,148139,148141,148143,148145,148147,148149],{"class":78,"line":86},[76,148140,30807],{"class":89},[76,148142,147420],{"class":93},[76,148144,90],{"class":89},[76,148146,147425],{"class":93},[76,148148,31453],{"class":89},[76,148150,147430],{"class":93},[76,148152,148153,148155,148157,148159],{"class":78,"line":97},[76,148154,30807],{"class":89},[76,148156,147279],{"class":93},[76,148158,90],{"class":89},[76,148160,147284],{"class":93},[76,148162,148163],{"class":78,"line":103},[76,148164,2472],{"emptyLinePlaceholder":125},[76,148166,148167,148169,148171,148173,148176,148178,148180,148182,148184,148186,148188,148190,148192,148195],{"class":78,"line":1273},[76,148168,107874],{"class":89},[76,148170,146832],{"class":250},[76,148172,202],{"class":93},[76,148174,148175],{"class":305},"\"sales.json\"",[76,148177,12507],{"class":93},[76,148179,146842],{"class":305},[76,148181,12507],{"class":93},[76,148183,146847],{"class":5288},[76,148185,247],{"class":89},[76,148187,146852],{"class":305},[76,148189,13786],{"class":93},[76,148191,31453],{"class":89},[76,148193,148194],{"class":5288}," file",[76,148196,3811],{"class":93},[76,148198,148199,148201,148203,148206,148208],{"class":78,"line":1287},[76,148200,101462],{"class":93},[76,148202,247],{"class":89},[76,148204,148205],{"class":93}," json.load(",[76,148207,45424],{"class":5288},[76,148209,208],{"class":93},[76,148211,148212],{"class":78,"line":1293},[76,148213,2472],{"emptyLinePlaceholder":125},[76,148215,148216,148218,148220],{"class":78,"line":1384},[76,148217,147841],{"class":93},[76,148219,247],{"class":89},[76,148221,51908],{"class":93},[76,148223,148224,148227,148229],{"class":78,"line":1390},[76,148225,148226],{"class":93},"online_sales ",[76,148228,247],{"class":89},[76,148230,51908],{"class":93},[76,148232,148233,148236,148238],{"class":78,"line":1402},[76,148234,148235],{"class":93},"offline_sales ",[76,148237,247],{"class":89},[76,148239,51908],{"class":93},[76,148241,148242],{"class":78,"line":1684},[76,148243,2472],{"emptyLinePlaceholder":125},[76,148245,148246,148248,148251,148253],{"class":78,"line":1689},[76,148247,3097],{"class":89},[76,148249,148250],{"class":93}," item ",[76,148252,26116],{"class":89},[76,148254,148255],{"class":93}," data:\n",[76,148257,148258,148261,148263],{"class":78,"line":1695},[76,148259,148260],{"class":93},"    dates.append(item[",[76,148262,148038],{"class":305},[76,148264,4729],{"class":93},[76,148266,148267,148270,148272],{"class":78,"line":1700},[76,148268,148269],{"class":93},"    online_sales.append(item[",[76,148271,148047],{"class":305},[76,148273,4729],{"class":93},[76,148275,148276,148279,148281],{"class":78,"line":1714},[76,148277,148278],{"class":93},"    offline_sales.append(item[",[76,148280,148056],{"class":305},[76,148282,4729],{"class":93},[76,148284,148285],{"class":78,"line":1719},[76,148286,2472],{"emptyLinePlaceholder":125},[76,148288,148289,148291,148293],{"class":78,"line":1725},[76,148290,147293],{"class":93},[76,148292,247],{"class":89},[76,148294,147298],{"class":93},[76,148296,148297],{"class":78,"line":1746},[76,148298,147882],{"class":93},[76,148300,148301,148303,148305,148308,148310,148312,148314],{"class":78,"line":1751},[76,148302,147333],{"class":93},[76,148304,147889],{"class":305},[76,148306,148307],{"class":93},", online_sales, ",[76,148309,147786],{"class":5288},[76,148311,247],{"class":89},[76,148313,31546],{"class":250},[76,148315,208],{"class":93},[76,148317,148318,148320,148322,148325,148327,148329,148331],{"class":78,"line":1765},[76,148319,147333],{"class":93},[76,148321,147927],{"class":305},[76,148323,148324],{"class":93},", offline_sales, ",[76,148326,147786],{"class":5288},[76,148328,247],{"class":89},[76,148330,31546],{"class":250},[76,148332,208],{"class":93},[76,148334,148335],{"class":78,"line":1770},[76,148336,147509],{"class":93},[76,148338,148339,148341,148343,148345,148347,148349,148352],{"class":78,"line":1799},[76,148340,147514],{"class":5288},[76,148342,247],{"class":89},[76,148344,147519],{"class":93},[76,148346,51477],{"class":5288},[76,148348,247],{"class":89},[76,148350,148351],{"class":305},"\"销售趋势\"",[76,148353,38117],{"class":93},[76,148355,148356,148358,148360,148362,148364,148366,148368],{"class":78,"line":1804},[76,148357,147570],{"class":5288},[76,148359,247],{"class":89},[76,148361,147575],{"class":93},[76,148363,147578],{"class":5288},[76,148365,247],{"class":89},[76,148367,147583],{"class":305},[76,148369,38117],{"class":93},[76,148371,148372],{"class":78,"line":1821},[76,148373,208],{"class":93},[76,148375,148376,148378,148380],{"class":78,"line":1826},[76,148377,147365],{"class":93},[76,148379,148005],{"class":305},[76,148381,208],{"class":93},[140,148383,148385],{"id":148384},"_109-数据清洗","10.9 数据清洗",[14,148387,148388],{},"真实数据经常不整齐，需要清洗。",[14,148390,148391],{},"常见问题：",[152,148393,148394,148397,148400,148403],{},[155,148395,148396],{},"数字是字符串。",[155,148398,148399],{},"字段缺失。",[155,148401,148402],{},"空值。",[155,148404,148405],{},"日期格式不统一。",[14,148407,15207],{},[67,148409,148411],{"className":69,"code":148410,"language":71,"meta":58,"style":58},"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",[73,148412,148413,148422,148445,148465,148486,148490,148494,148502,148511,148515,148526,148540,148549,148554,148558,148566,148576,148580,148587],{"__ignoreMap":58},[76,148414,148415,148418,148420],{"class":78,"line":79},[76,148416,148417],{"class":93},"raw_data ",[76,148419,247],{"class":89},[76,148421,55517],{"class":93},[76,148423,148424,148427,148429,148431,148433,148435,148438,148440,148443],{"class":78,"line":86},[76,148425,148426],{"class":93},"    {",[76,148428,148038],{"class":305},[76,148430,51507],{"class":93},[76,148432,147306],{"class":305},[76,148434,12507],{"class":93},[76,148436,148437],{"class":305},"\"sales\"",[76,148439,51507],{"class":93},[76,148441,148442],{"class":305},"\"100\"",[76,148444,5002],{"class":93},[76,148446,148447,148449,148451,148453,148455,148457,148459,148461,148463],{"class":78,"line":97},[76,148448,148426],{"class":93},[76,148450,148038],{"class":305},[76,148452,51507],{"class":93},[76,148454,147311],{"class":305},[76,148456,12507],{"class":93},[76,148458,148437],{"class":305},[76,148460,51507],{"class":93},[76,148462,7724],{"class":305},[76,148464,5002],{"class":93},[76,148466,148467,148469,148471,148473,148475,148477,148479,148481,148484],{"class":78,"line":103},[76,148468,148426],{"class":93},[76,148470,148038],{"class":305},[76,148472,51507],{"class":93},[76,148474,147316],{"class":305},[76,148476,12507],{"class":93},[76,148478,148437],{"class":305},[76,148480,51507],{"class":93},[76,148482,148483],{"class":305},"\"120\"",[76,148485,5002],{"class":93},[76,148487,148488],{"class":78,"line":1273},[76,148489,33316],{"class":93},[76,148491,148492],{"class":78,"line":1287},[76,148493,2472],{"emptyLinePlaceholder":125},[76,148495,148496,148498,148500],{"class":78,"line":1293},[76,148497,147841],{"class":93},[76,148499,247],{"class":89},[76,148501,51908],{"class":93},[76,148503,148504,148507,148509],{"class":78,"line":1384},[76,148505,148506],{"class":93},"sales ",[76,148508,247],{"class":89},[76,148510,51908],{"class":93},[76,148512,148513],{"class":78,"line":1390},[76,148514,2472],{"emptyLinePlaceholder":125},[76,148516,148517,148519,148521,148523],{"class":78,"line":1402},[76,148518,3097],{"class":89},[76,148520,148250],{"class":93},[76,148522,26116],{"class":89},[76,148524,148525],{"class":93}," raw_data:\n",[76,148527,148528,148531,148533,148536,148538],{"class":78,"line":1684},[76,148529,148530],{"class":93},"    value ",[76,148532,247],{"class":89},[76,148534,148535],{"class":93}," item.get(",[76,148537,148437],{"class":305},[76,148539,208],{"class":93},[76,148541,148542,148544,148546],{"class":78,"line":1689},[76,148543,3173],{"class":89},[76,148545,39000],{"class":89},[76,148547,148548],{"class":93}," value:\n",[76,148550,148551],{"class":78,"line":1695},[76,148552,148553],{"class":89},"        continue\n",[76,148555,148556],{"class":78,"line":1700},[76,148557,2472],{"emptyLinePlaceholder":125},[76,148559,148560,148562,148564],{"class":78,"line":1714},[76,148561,148260],{"class":93},[76,148563,148038],{"class":305},[76,148565,4729],{"class":93},[76,148567,148568,148571,148573],{"class":78,"line":1719},[76,148569,148570],{"class":93},"    sales.append(",[76,148572,205],{"class":250},[76,148574,148575],{"class":93},"(value))\n",[76,148577,148578],{"class":78,"line":1725},[76,148579,2472],{"emptyLinePlaceholder":125},[76,148581,148582,148584],{"class":78,"line":1746},[76,148583,30485],{"class":250},[76,148585,148586],{"class":93},"(dates)\n",[76,148588,148589,148591],{"class":78,"line":1751},[76,148590,30485],{"class":250},[76,148592,148593],{"class":93},"(sales)\n",[140,148595,148597],{"id":148596},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[67,148599,148601],{"className":69,"code":148600,"language":71,"meta":58,"style":58},"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",[73,148602,148603,148617,148627,148631,148639,148660,148682,148704,148726,148748,148752,148756,148778,148799,148803,148811,148815,148819,148829,148838,148848,148864,148868,148872,148889,148905,148921,148937,148947,148951],{"__ignoreMap":58},[76,148604,148605,148607,148609,148611,148613,148615],{"class":78,"line":79},[76,148606,30807],{"class":89},[76,148608,147420],{"class":93},[76,148610,90],{"class":89},[76,148612,147425],{"class":93},[76,148614,31453],{"class":89},[76,148616,147430],{"class":93},[76,148618,148619,148621,148623,148625],{"class":78,"line":86},[76,148620,30807],{"class":89},[76,148622,147279],{"class":93},[76,148624,90],{"class":89},[76,148626,147284],{"class":93},[76,148628,148629],{"class":78,"line":97},[76,148630,2472],{"emptyLinePlaceholder":125},[76,148632,148633,148635,148637],{"class":78,"line":103},[76,148634,148506],{"class":93},[76,148636,247],{"class":89},[76,148638,55517],{"class":93},[76,148640,148641,148643,148645,148647,148650,148652,148654,148656,148658],{"class":78,"line":1273},[76,148642,148426],{"class":93},[76,148644,148038],{"class":305},[76,148646,51507],{"class":93},[76,148648,148649],{"class":305},"\"2024-10-01\"",[76,148651,12507],{"class":93},[76,148653,84154],{"class":305},[76,148655,51507],{"class":93},[76,148657,92093],{"class":250},[76,148659,5002],{"class":93},[76,148661,148662,148664,148666,148668,148671,148673,148675,148677,148680],{"class":78,"line":1287},[76,148663,148426],{"class":93},[76,148665,148038],{"class":305},[76,148667,51507],{"class":93},[76,148669,148670],{"class":305},"\"2024-10-02\"",[76,148672,12507],{"class":93},[76,148674,84154],{"class":305},[76,148676,51507],{"class":93},[76,148678,148679],{"class":250},"1800",[76,148681,5002],{"class":93},[76,148683,148684,148686,148688,148690,148693,148695,148697,148699,148702],{"class":78,"line":1293},[76,148685,148426],{"class":93},[76,148687,148038],{"class":305},[76,148689,51507],{"class":93},[76,148691,148692],{"class":305},"\"2024-10-03\"",[76,148694,12507],{"class":93},[76,148696,84154],{"class":305},[76,148698,51507],{"class":93},[76,148700,148701],{"class":250},"1500",[76,148703,5002],{"class":93},[76,148705,148706,148708,148710,148712,148715,148717,148719,148721,148724],{"class":78,"line":1384},[76,148707,148426],{"class":93},[76,148709,148038],{"class":305},[76,148711,51507],{"class":93},[76,148713,148714],{"class":305},"\"2024-10-04\"",[76,148716,12507],{"class":93},[76,148718,84154],{"class":305},[76,148720,51507],{"class":93},[76,148722,148723],{"class":250},"2100",[76,148725,5002],{"class":93},[76,148727,148728,148730,148732,148734,148737,148739,148741,148743,148746],{"class":78,"line":1390},[76,148729,148426],{"class":93},[76,148731,148038],{"class":305},[76,148733,51507],{"class":93},[76,148735,148736],{"class":305},"\"2024-10-05\"",[76,148738,12507],{"class":93},[76,148740,84154],{"class":305},[76,148742,51507],{"class":93},[76,148744,148745],{"class":250},"2600",[76,148747,5002],{"class":93},[76,148749,148750],{"class":78,"line":1402},[76,148751,33316],{"class":93},[76,148753,148754],{"class":78,"line":1684},[76,148755,2472],{"emptyLinePlaceholder":125},[76,148757,148758,148760,148762,148765,148767,148769,148771,148773,148775],{"class":78,"line":1689},[76,148759,147841],{"class":93},[76,148761,247],{"class":89},[76,148763,148764],{"class":93}," [item[",[76,148766,148038],{"class":305},[76,148768,4515],{"class":93},[76,148770,3097],{"class":89},[76,148772,148250],{"class":93},[76,148774,26116],{"class":89},[76,148776,148777],{"class":93}," sales]\n",[76,148779,148780,148783,148785,148787,148789,148791,148793,148795,148797],{"class":78,"line":1695},[76,148781,148782],{"class":93},"amounts ",[76,148784,247],{"class":89},[76,148786,148764],{"class":93},[76,148788,84154],{"class":305},[76,148790,4515],{"class":93},[76,148792,3097],{"class":89},[76,148794,148250],{"class":93},[76,148796,26116],{"class":89},[76,148798,148777],{"class":93},[76,148800,148801],{"class":78,"line":1700},[76,148802,2472],{"emptyLinePlaceholder":125},[76,148804,148805,148807,148809],{"class":78,"line":1714},[76,148806,147293],{"class":93},[76,148808,247],{"class":89},[76,148810,147298],{"class":93},[76,148812,148813],{"class":78,"line":1719},[76,148814,147882],{"class":93},[76,148816,148817],{"class":78,"line":1725},[76,148818,147690],{"class":93},[76,148820,148821,148823,148825,148827],{"class":78,"line":1746},[76,148822,147695],{"class":5288},[76,148824,247],{"class":89},[76,148826,147336],{"class":305},[76,148828,31536],{"class":93},[76,148830,148831,148833,148835],{"class":78,"line":1751},[76,148832,147706],{"class":5288},[76,148834,247],{"class":89},[76,148836,148837],{"class":93},"amounts,\n",[76,148839,148840,148842,148844,148846],{"class":78,"line":1765},[76,148841,147735],{"class":5288},[76,148843,247],{"class":89},[76,148845,31546],{"class":250},[76,148847,31536],{"class":93},[76,148849,148850,148852,148854,148856,148858,148860,148862],{"class":78,"line":1770},[76,148851,147746],{"class":5288},[76,148853,247],{"class":89},[76,148855,147751],{"class":93},[76,148857,147754],{"class":5288},[76,148859,247],{"class":89},[76,148861,31546],{"class":250},[76,148863,38117],{"class":93},[76,148865,148866],{"class":78,"line":1799},[76,148867,208],{"class":93},[76,148869,148870],{"class":78,"line":1804},[76,148871,147509],{"class":93},[76,148873,148874,148876,148878,148880,148882,148884,148887],{"class":78,"line":1821},[76,148875,147514],{"class":5288},[76,148877,247],{"class":89},[76,148879,147519],{"class":93},[76,148881,51477],{"class":5288},[76,148883,247],{"class":89},[76,148885,148886],{"class":305},"\"每日销售额\"",[76,148888,38117],{"class":93},[76,148890,148891,148893,148895,148897,148899,148901,148903],{"class":78,"line":1826},[76,148892,147533],{"class":5288},[76,148894,247],{"class":89},[76,148896,147538],{"class":93},[76,148898,79880],{"class":5288},[76,148900,247],{"class":89},[76,148902,147545],{"class":305},[76,148904,38117],{"class":93},[76,148906,148907,148909,148911,148913,148915,148917,148919],{"class":78,"line":1831},[76,148908,147552],{"class":5288},[76,148910,247],{"class":89},[76,148912,147538],{"class":93},[76,148914,79880],{"class":5288},[76,148916,247],{"class":89},[76,148918,147563],{"class":305},[76,148920,38117],{"class":93},[76,148922,148923,148925,148927,148929,148931,148933,148935],{"class":78,"line":1836},[76,148924,147570],{"class":5288},[76,148926,247],{"class":89},[76,148928,147575],{"class":93},[76,148930,147578],{"class":5288},[76,148932,247],{"class":89},[76,148934,147583],{"class":305},[76,148936,38117],{"class":93},[76,148938,148939,148942,148944],{"class":78,"line":1850},[76,148940,148941],{"class":5288},"    datazoom_opts",[76,148943,247],{"class":89},[76,148945,148946],{"class":93},"[opts.DataZoomOpts()],\n",[76,148948,148949],{"class":78,"line":1855},[76,148950,208],{"class":93},[76,148952,148953,148955,148958],{"class":78,"line":2649},[76,148954,147365],{"class":93},[76,148956,148957],{"class":305},"\"daily_sales.html\"",[76,148959,208],{"class":93},[14,148961,148962,148965],{},[73,148963,148964],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[140,148967,148969],{"id":148968},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148971,148972],{},"如果数据结构如下：",[67,148974,148976],{"className":69,"code":148975,"language":71,"meta":58,"style":58},"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",[73,148977,148978,148986,148994,149016,149037,149042,149049,149069,149089,149093],{"__ignoreMap":58},[76,148979,148980,148982,148984],{"class":78,"line":79},[76,148981,101699],{"class":93},[76,148983,247],{"class":89},[76,148985,15644],{"class":93},[76,148987,148988,148991],{"class":78,"line":86},[76,148989,148990],{"class":305},"    \"北京\"",[76,148992,148993],{"class":93},": [\n",[76,148995,148996,148998,149000,149002,149005,149007,149010,149012,149014],{"class":78,"line":97},[76,148997,4989],{"class":93},[76,148999,148038],{"class":305},[76,149001,51507],{"class":93},[76,149003,149004],{"class":305},"\"2024-01-01\"",[76,149006,12507],{"class":93},[76,149008,149009],{"class":305},"\"confirm\"",[76,149011,51507],{"class":93},[76,149013,646],{"class":250},[76,149015,5002],{"class":93},[76,149017,149018,149020,149022,149024,149027,149029,149031,149033,149035],{"class":78,"line":103},[76,149019,4989],{"class":93},[76,149021,148038],{"class":305},[76,149023,51507],{"class":93},[76,149025,149026],{"class":305},"\"2024-01-02\"",[76,149028,12507],{"class":93},[76,149030,149009],{"class":305},[76,149032,51507],{"class":93},[76,149034,698],{"class":250},[76,149036,5002],{"class":93},[76,149038,149039],{"class":78,"line":1273},[76,149040,149041],{"class":93},"    ],\n",[76,149043,149044,149047],{"class":78,"line":1287},[76,149045,149046],{"class":305},"    \"上海\"",[76,149048,148993],{"class":93},[76,149050,149051,149053,149055,149057,149059,149061,149063,149065,149067],{"class":78,"line":1293},[76,149052,4989],{"class":93},[76,149054,148038],{"class":305},[76,149056,51507],{"class":93},[76,149058,149004],{"class":305},[76,149060,12507],{"class":93},[76,149062,149009],{"class":305},[76,149064,51507],{"class":93},[76,149066,595],{"class":250},[76,149068,5002],{"class":93},[76,149070,149071,149073,149075,149077,149079,149081,149083,149085,149087],{"class":78,"line":1384},[76,149072,4989],{"class":93},[76,149074,148038],{"class":305},[76,149076,51507],{"class":93},[76,149078,149026],{"class":305},[76,149080,12507],{"class":93},[76,149082,149009],{"class":305},[76,149084,51507],{"class":93},[76,149086,723],{"class":250},[76,149088,5002],{"class":93},[76,149090,149091],{"class":78,"line":1390},[76,149092,149041],{"class":93},[76,149094,149095],{"class":78,"line":1402},[76,149096,1637],{"class":93},[14,149098,149099],{},"绘制多地区趋势：",[67,149101,149103],{"className":69,"code":149102,"language":71,"meta":58,"style":58},"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",[73,149104,149105,149119,149129,149133,149158,149162,149170,149174,149178,149190,149212,149225,149229,149233,149250,149266,149270],{"__ignoreMap":58},[76,149106,149107,149109,149111,149113,149115,149117],{"class":78,"line":79},[76,149108,30807],{"class":89},[76,149110,147420],{"class":93},[76,149112,90],{"class":89},[76,149114,147425],{"class":93},[76,149116,31453],{"class":89},[76,149118,147430],{"class":93},[76,149120,149121,149123,149125,149127],{"class":78,"line":86},[76,149122,30807],{"class":89},[76,149124,147279],{"class":93},[76,149126,90],{"class":89},[76,149128,147284],{"class":93},[76,149130,149131],{"class":78,"line":97},[76,149132,2472],{"emptyLinePlaceholder":125},[76,149134,149135,149137,149139,149141,149143,149145,149147,149149,149151,149154,149156],{"class":78,"line":103},[76,149136,147841],{"class":93},[76,149138,247],{"class":89},[76,149140,148764],{"class":93},[76,149142,148038],{"class":305},[76,149144,4515],{"class":93},[76,149146,3097],{"class":89},[76,149148,148250],{"class":93},[76,149150,26116],{"class":89},[76,149152,149153],{"class":93}," data[",[76,149155,69339],{"class":305},[76,149157,77597],{"class":93},[76,149159,149160],{"class":78,"line":1273},[76,149161,2472],{"emptyLinePlaceholder":125},[76,149163,149164,149166,149168],{"class":78,"line":1287},[76,149165,147293],{"class":93},[76,149167,247],{"class":89},[76,149169,147298],{"class":93},[76,149171,149172],{"class":78,"line":1293},[76,149173,147882],{"class":93},[76,149175,149176],{"class":78,"line":1384},[76,149177,2472],{"emptyLinePlaceholder":125},[76,149179,149180,149182,149185,149187],{"class":78,"line":1390},[76,149181,3097],{"class":89},[76,149183,149184],{"class":93}," city, records ",[76,149186,26116],{"class":89},[76,149188,149189],{"class":93}," data.items():\n",[76,149191,149192,149195,149197,149199,149201,149203,149205,149207,149209],{"class":78,"line":1402},[76,149193,149194],{"class":93},"    values ",[76,149196,247],{"class":89},[76,149198,148764],{"class":93},[76,149200,149009],{"class":305},[76,149202,4515],{"class":93},[76,149204,3097],{"class":89},[76,149206,148250],{"class":93},[76,149208,26116],{"class":89},[76,149210,149211],{"class":93}," records]\n",[76,149213,149214,149217,149219,149221,149223],{"class":78,"line":1684},[76,149215,149216],{"class":93},"    line.add_yaxis(city, values, ",[76,149218,147786],{"class":5288},[76,149220,247],{"class":89},[76,149222,31546],{"class":250},[76,149224,208],{"class":93},[76,149226,149227],{"class":78,"line":1689},[76,149228,2472],{"emptyLinePlaceholder":125},[76,149230,149231],{"class":78,"line":1695},[76,149232,147509],{"class":93},[76,149234,149235,149237,149239,149241,149243,149245,149248],{"class":78,"line":1700},[76,149236,147514],{"class":5288},[76,149238,247],{"class":89},[76,149240,147519],{"class":93},[76,149242,51477],{"class":5288},[76,149244,247],{"class":89},[76,149246,149247],{"class":305},"\"多地区趋势图\"",[76,149249,38117],{"class":93},[76,149251,149252,149254,149256,149258,149260,149262,149264],{"class":78,"line":1714},[76,149253,147570],{"class":5288},[76,149255,247],{"class":89},[76,149257,147575],{"class":93},[76,149259,147578],{"class":5288},[76,149261,247],{"class":89},[76,149263,147583],{"class":305},[76,149265,38117],{"class":93},[76,149267,149268],{"class":78,"line":1719},[76,149269,208],{"class":93},[76,149271,149272,149274,149277],{"class":78,"line":1725},[76,149273,147365],{"class":93},[76,149275,149276],{"class":305},"\"trend.html\"",[76,149278,208],{"class":93},[14,149280,149281],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[140,149283,149285],{"id":149284},"_1012-易错点","10.12 易错点",[152,149287,149288,149294,149300,149310,149316],{},[155,149289,149290,149293],{},[73,149291,149292],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[155,149295,149296,149299],{},[73,149297,149298],{},"render()"," 生成的是 HTML，不是图片。",[155,149301,149302,149303,149306,149307,28458],{},"JSON 字符串用 ",[73,149304,149305],{},"json.loads()","，JSON 文件用 ",[73,149308,149309],{},"json.load()",[155,149311,149312,149313,28458],{},"中文 JSON 保存时加 ",[73,149314,149315],{},"ensure_ascii=False",[155,149317,149318],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[140,149320,149322],{"id":149321},"_1013-本章练习","10.13 本章练习",[152,149324,149325,149328,149331,149334,149337],{},[155,149326,149327],{},"安装 pyecharts 并生成第一个折线图。",[155,149329,149330],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[155,149332,149333],{},"绘制两条折线，对比线上和线下销售额。",[155,149335,149336],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[155,149338,149339],{},"对含有空值的销售数据进行清洗后再绘图。",[117,149341,149342],{},"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":58,"searchDepth":86,"depth":86,"links":149344},[149345,149346,149347,149348,149349,149350,149351,149352,149353,149354,149355,149356,149357],{"id":146961,"depth":86,"text":146962},{"id":147036,"depth":86,"text":147037},{"id":147215,"depth":86,"text":147216},{"id":147266,"depth":86,"text":147267},{"id":147400,"depth":86,"text":147401},{"id":147676,"depth":86,"text":147677},{"id":147802,"depth":86,"text":147803},{"id":148013,"depth":86,"text":148014},{"id":148384,"depth":86,"text":148385},{"id":148596,"depth":86,"text":148597},{"id":148968,"depth":86,"text":148969},{"id":149284,"depth":86,"text":149285},{"id":149321,"depth":86,"text":149322},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146953,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149364,"title":149365,"body":149366,"description":122,"extension":123,"meta":151726,"navigation":125,"path":151727,"seo":151728,"stem":151729,"__hash__":151730},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149367,"toc":151703},[149368,149371,149375,149378,149381,149457,149460,149551,149554,149558,149561,149605,149618,149622,149625,149692,149695,149699,149702,149786,149794,149798,149803,149944,149947,149958,149964,149970,150084,150088,150091,150094,150347,150350,150354,150357,150461,150464,150468,150619,150623,150630,150743,150747,150750,150856,150859,150863,150866,150897,150900,151005,151008,151012,151016,151026,151094,151098,151105,151169,151172,151176,151182,151278,151287,151291,151615,151624,151628,151656,151660,151700],[10,149369,149365],{"id":149370},"_11-面向对象基础",[140,149372,149374],{"id":149373},"_111-什么是面向对象","11.1 什么是面向对象",[14,149376,149377],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149379,149380],{},"面向过程：",[67,149382,149384],{"className":69,"code":149383,"language":71,"meta":58,"style":58},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[73,149385,149386,149395,149403,149407,149417,149448,149452],{"__ignoreMap":58},[76,149387,149388,149390,149392],{"class":78,"line":79},[76,149389,146577],{"class":93},[76,149391,247],{"class":89},[76,149393,149394],{"class":305}," \"小明\"\n",[76,149396,149397,149399,149401],{"class":78,"line":86},[76,149398,146587],{"class":93},[76,149400,247],{"class":89},[76,149402,146592],{"class":250},[76,149404,149405],{"class":78,"line":97},[76,149406,2472],{"emptyLinePlaceholder":125},[76,149408,149409,149411,149414],{"class":78,"line":103},[76,149410,32017],{"class":89},[76,149412,149413],{"class":2035}," introduce",[76,149415,149416],{"class":93},"(name, age):\n",[76,149418,149419,149421,149423,149425,149428,149430,149432,149434,149437,149439,149441,149443,149446],{"class":78,"line":1273},[76,149420,31369],{"class":250},[76,149422,202],{"class":93},[76,149424,254],{"class":89},[76,149426,149427],{"class":305},"\"我叫",[76,149429,1095],{"class":250},[76,149431,79880],{"class":93},[76,149433,1145],{"class":250},[76,149435,149436],{"class":305},"，今年",[76,149438,1095],{"class":250},[76,149440,70291],{"class":93},[76,149442,1145],{"class":250},[76,149444,149445],{"class":305},"岁\"",[76,149447,208],{"class":93},[76,149449,149450],{"class":78,"line":1287},[76,149451,2472],{"emptyLinePlaceholder":125},[76,149453,149454],{"class":78,"line":1293},[76,149455,149456],{"class":93},"introduce(name, age)\n",[14,149458,149459],{},"面向对象：",[67,149461,149463],{"className":69,"code":149462,"language":71,"meta":58,"style":58},"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",[73,149464,149465,149473,149481,149510,149514,149518,149528,149537,149546],{"__ignoreMap":58},[76,149466,149467,149469,149471],{"class":78,"line":79},[76,149468,14766],{"class":89},[76,149470,7970],{"class":2035},[76,149472,3811],{"class":93},[76,149474,149475,149477,149479],{"class":78,"line":86},[76,149476,30871],{"class":89},[76,149478,149413],{"class":2035},[76,149480,30877],{"class":93},[76,149482,149483,149485,149487,149489,149491,149494,149496,149498,149500,149502,149504,149506,149508],{"class":78,"line":97},[76,149484,32521],{"class":250},[76,149486,202],{"class":93},[76,149488,254],{"class":89},[76,149490,149427],{"class":305},[76,149492,149493],{"class":250},"{self",[76,149495,80371],{"class":93},[76,149497,1145],{"class":250},[76,149499,149436],{"class":305},[76,149501,149493],{"class":250},[76,149503,80383],{"class":93},[76,149505,1145],{"class":250},[76,149507,149445],{"class":305},[76,149509,208],{"class":93},[76,149511,149512],{"class":78,"line":103},[76,149513,2472],{"emptyLinePlaceholder":125},[76,149515,149516],{"class":78,"line":1273},[76,149517,2472],{"emptyLinePlaceholder":125},[76,149519,149520,149523,149525],{"class":78,"line":1287},[76,149521,149522],{"class":93},"student ",[76,149524,247],{"class":89},[76,149526,149527],{"class":93}," Student()\n",[76,149529,149530,149533,149535],{"class":78,"line":1293},[76,149531,149532],{"class":93},"student.name ",[76,149534,247],{"class":89},[76,149536,149394],{"class":305},[76,149538,149539,149542,149544],{"class":78,"line":1384},[76,149540,149541],{"class":93},"student.age ",[76,149543,247],{"class":89},[76,149545,146592],{"class":250},[76,149547,149548],{"class":78,"line":1390},[76,149549,149550],{"class":93},"student.introduce()\n",[14,149552,149553],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[140,149555,149557],{"id":149556},"_112-类和对象","11.2 类和对象",[14,149559,149560],{},"类是模板，对象是根据模板创建出来的具体实例。",[67,149562,149564],{"className":69,"code":149563,"language":71,"meta":58,"style":58},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[73,149565,149566,149574,149579,149583,149587,149596],{"__ignoreMap":58},[76,149567,149568,149570,149572],{"class":78,"line":79},[76,149569,14766],{"class":89},[76,149571,7970],{"class":2035},[76,149573,3811],{"class":93},[76,149575,149576],{"class":78,"line":86},[76,149577,149578],{"class":89},"    pass\n",[76,149580,149581],{"class":78,"line":97},[76,149582,2472],{"emptyLinePlaceholder":125},[76,149584,149585],{"class":78,"line":103},[76,149586,2472],{"emptyLinePlaceholder":125},[76,149588,149589,149592,149594],{"class":78,"line":1273},[76,149590,149591],{"class":93},"student1 ",[76,149593,247],{"class":89},[76,149595,149527],{"class":93},[76,149597,149598,149601,149603],{"class":78,"line":1287},[76,149599,149600],{"class":93},"student2 ",[76,149602,247],{"class":89},[76,149604,149527],{"class":93},[14,149606,149607,149610,149611,101059,149614,149617],{},[73,149608,149609],{},"Student"," 是类，",[73,149612,149613],{},"student1",[73,149615,149616],{},"student2"," 是对象。",[140,149619,149621],{"id":149620},"_113-属性","11.3 属性",[14,149623,149624],{},"属性是对象保存的数据。",[67,149626,149628],{"className":69,"code":149627,"language":71,"meta":58,"style":58},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[73,149629,149630,149638,149642,149646,149650,149658,149666,149674,149678,149685],{"__ignoreMap":58},[76,149631,149632,149634,149636],{"class":78,"line":79},[76,149633,14766],{"class":89},[76,149635,7970],{"class":2035},[76,149637,3811],{"class":93},[76,149639,149640],{"class":78,"line":86},[76,149641,149578],{"class":89},[76,149643,149644],{"class":78,"line":97},[76,149645,2472],{"emptyLinePlaceholder":125},[76,149647,149648],{"class":78,"line":103},[76,149649,2472],{"emptyLinePlaceholder":125},[76,149651,149652,149654,149656],{"class":78,"line":1273},[76,149653,149522],{"class":93},[76,149655,247],{"class":89},[76,149657,149527],{"class":93},[76,149659,149660,149662,149664],{"class":78,"line":1287},[76,149661,149532],{"class":93},[76,149663,247],{"class":89},[76,149665,149394],{"class":305},[76,149667,149668,149670,149672],{"class":78,"line":1293},[76,149669,149541],{"class":93},[76,149671,247],{"class":89},[76,149673,146592],{"class":250},[76,149675,149676],{"class":78,"line":1384},[76,149677,2472],{"emptyLinePlaceholder":125},[76,149679,149680,149682],{"class":78,"line":1390},[76,149681,30485],{"class":250},[76,149683,149684],{"class":93},"(student.name)\n",[76,149686,149687,149689],{"class":78,"line":1402},[76,149688,30485],{"class":250},[76,149690,149691],{"class":93},"(student.age)\n",[14,149693,149694],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[140,149696,149698],{"id":149697},"_114-方法","11.4 方法",[14,149700,149701],{},"类中的函数叫方法。",[67,149703,149704],{"className":69,"code":149462,"language":71,"meta":58,"style":58},[73,149705,149706,149714,149722,149750,149754,149758,149766,149774,149782],{"__ignoreMap":58},[76,149707,149708,149710,149712],{"class":78,"line":79},[76,149709,14766],{"class":89},[76,149711,7970],{"class":2035},[76,149713,3811],{"class":93},[76,149715,149716,149718,149720],{"class":78,"line":86},[76,149717,30871],{"class":89},[76,149719,149413],{"class":2035},[76,149721,30877],{"class":93},[76,149723,149724,149726,149728,149730,149732,149734,149736,149738,149740,149742,149744,149746,149748],{"class":78,"line":97},[76,149725,32521],{"class":250},[76,149727,202],{"class":93},[76,149729,254],{"class":89},[76,149731,149427],{"class":305},[76,149733,149493],{"class":250},[76,149735,80371],{"class":93},[76,149737,1145],{"class":250},[76,149739,149436],{"class":305},[76,149741,149493],{"class":250},[76,149743,80383],{"class":93},[76,149745,1145],{"class":250},[76,149747,149445],{"class":305},[76,149749,208],{"class":93},[76,149751,149752],{"class":78,"line":103},[76,149753,2472],{"emptyLinePlaceholder":125},[76,149755,149756],{"class":78,"line":1273},[76,149757,2472],{"emptyLinePlaceholder":125},[76,149759,149760,149762,149764],{"class":78,"line":1287},[76,149761,149522],{"class":93},[76,149763,247],{"class":89},[76,149765,149527],{"class":93},[76,149767,149768,149770,149772],{"class":78,"line":1293},[76,149769,149532],{"class":93},[76,149771,247],{"class":89},[76,149773,149394],{"class":305},[76,149775,149776,149778,149780],{"class":78,"line":1384},[76,149777,149541],{"class":93},[76,149779,247],{"class":89},[76,149781,146592],{"class":250},[76,149783,149784],{"class":78,"line":1390},[76,149785,149550],{"class":93},[14,149787,149788,149790,149791,149793],{},[73,149789,30893],{}," 表示当前对象。调用方法时不需要手动传入 ",[73,149792,30893],{},"，Python 会自动传。",[140,149795,149797],{"id":149796},"_115-构造方法__init__","11.5 构造方法__init__",[14,149799,149800,149802],{},[73,149801,30899],{}," 在对象创建时自动执行，用于初始化属性。",[67,149804,149806],{"className":69,"code":149805,"language":71,"meta":58,"style":58},"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",[73,149807,149808,149816,149825,149837,149849,149860,149864,149872,149910,149914,149918,149940],{"__ignoreMap":58},[76,149809,149810,149812,149814],{"class":78,"line":79},[76,149811,14766],{"class":89},[76,149813,7970],{"class":2035},[76,149815,3811],{"class":93},[76,149817,149818,149820,149822],{"class":78,"line":86},[76,149819,30871],{"class":89},[76,149821,30874],{"class":250},[76,149823,149824],{"class":93},"(self, name, age, score):\n",[76,149826,149827,149829,149832,149834],{"class":78,"line":97},[76,149828,30915],{"class":250},[76,149830,149831],{"class":93},".name ",[76,149833,247],{"class":89},[76,149835,149836],{"class":93}," name\n",[76,149838,149839,149841,149844,149846],{"class":78,"line":103},[76,149840,30915],{"class":250},[76,149842,149843],{"class":93},".age ",[76,149845,247],{"class":89},[76,149847,149848],{"class":93}," age\n",[76,149850,149851,149853,149856,149858],{"class":78,"line":1273},[76,149852,30915],{"class":250},[76,149854,149855],{"class":93},".score ",[76,149857,247],{"class":89},[76,149859,1651],{"class":93},[76,149861,149862],{"class":78,"line":1287},[76,149863,2472],{"emptyLinePlaceholder":125},[76,149865,149866,149868,149870],{"class":78,"line":1293},[76,149867,30871],{"class":89},[76,149869,149413],{"class":2035},[76,149871,30877],{"class":93},[76,149873,149874,149876,149878,149880,149882,149884,149886,149888,149890,149892,149894,149896,149899,149901,149904,149906,149908],{"class":78,"line":1384},[76,149875,32521],{"class":250},[76,149877,202],{"class":93},[76,149879,254],{"class":89},[76,149881,149427],{"class":305},[76,149883,149493],{"class":250},[76,149885,80371],{"class":93},[76,149887,1145],{"class":250},[76,149889,149436],{"class":305},[76,149891,149493],{"class":250},[76,149893,80383],{"class":93},[76,149895,1145],{"class":250},[76,149897,149898],{"class":305},"岁，成绩",[76,149900,149493],{"class":250},[76,149902,149903],{"class":93},".score",[76,149905,1145],{"class":250},[76,149907,452],{"class":305},[76,149909,208],{"class":93},[76,149911,149912],{"class":78,"line":1390},[76,149913,2472],{"emptyLinePlaceholder":125},[76,149915,149916],{"class":78,"line":1402},[76,149917,2472],{"emptyLinePlaceholder":125},[76,149919,149920,149922,149924,149927,149930,149932,149934,149936,149938],{"class":78,"line":1684},[76,149921,149522],{"class":93},[76,149923,247],{"class":89},[76,149925,149926],{"class":93}," Student(",[76,149928,149929],{"class":305},"\"小明\"",[76,149931,12507],{"class":93},[76,149933,849],{"class":250},[76,149935,12507],{"class":93},[76,149937,1188],{"class":250},[76,149939,208],{"class":93},[76,149941,149942],{"class":78,"line":1689},[76,149943,149550],{"class":93},[14,149945,149946],{},"构造方法的好处：",[152,149948,149949,149952,149955],{},[155,149950,149951],{},"创建对象时必须提供必要数据。",[155,149953,149954],{},"属性初始化集中，不容易漏。",[155,149956,149957],{},"对象状态更完整。",[140,149959,149961,149962],{"id":149960},"_116-str","11.6 ",[350,149963,1372],{},[14,149965,149966,149967,28458],{},"直接打印对象时，默认输出不直观。可以定义 ",[73,149968,149969],{},"__str__",[67,149971,149973],{"className":69,"code":149972,"language":71,"meta":58,"style":58},"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",[73,149974,149975,149983,149992,150002,150012,150016,150025,150053,150057,150061,150077],{"__ignoreMap":58},[76,149976,149977,149979,149981],{"class":78,"line":79},[76,149978,14766],{"class":89},[76,149980,7970],{"class":2035},[76,149982,3811],{"class":93},[76,149984,149985,149987,149989],{"class":78,"line":86},[76,149986,30871],{"class":89},[76,149988,30874],{"class":250},[76,149990,149991],{"class":93},"(self, name, age):\n",[76,149993,149994,149996,149998,150000],{"class":78,"line":97},[76,149995,30915],{"class":250},[76,149997,149831],{"class":93},[76,149999,247],{"class":89},[76,150001,149836],{"class":93},[76,150003,150004,150006,150008,150010],{"class":78,"line":103},[76,150005,30915],{"class":250},[76,150007,149843],{"class":93},[76,150009,247],{"class":89},[76,150011,149848],{"class":93},[76,150013,150014],{"class":78,"line":1273},[76,150015,2472],{"emptyLinePlaceholder":125},[76,150017,150018,150020,150023],{"class":78,"line":1287},[76,150019,30871],{"class":89},[76,150021,150022],{"class":250}," __str__",[76,150024,30877],{"class":93},[76,150026,150027,150029,150032,150035,150037,150039,150041,150044,150046,150048,150050],{"class":78,"line":1293},[76,150028,14824],{"class":89},[76,150030,150031],{"class":89}," f",[76,150033,150034],{"class":305},"\"Student(name=",[76,150036,149493],{"class":250},[76,150038,80371],{"class":93},[76,150040,1145],{"class":250},[76,150042,150043],{"class":305},", age=",[76,150045,149493],{"class":250},[76,150047,80383],{"class":93},[76,150049,1145],{"class":250},[76,150051,150052],{"class":305},")\"\n",[76,150054,150055],{"class":78,"line":1384},[76,150056,2472],{"emptyLinePlaceholder":125},[76,150058,150059],{"class":78,"line":1390},[76,150060,2472],{"emptyLinePlaceholder":125},[76,150062,150063,150065,150067,150069,150071,150073,150075],{"class":78,"line":1402},[76,150064,149522],{"class":93},[76,150066,247],{"class":89},[76,150068,149926],{"class":93},[76,150070,149929],{"class":305},[76,150072,12507],{"class":93},[76,150074,849],{"class":250},[76,150076,208],{"class":93},[76,150078,150079,150081],{"class":78,"line":1684},[76,150080,30485],{"class":250},[76,150082,150083],{"class":93},"(student)\n",[140,150085,150087],{"id":150086},"_117-封装","11.7 封装",[14,150089,150090],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150092,150093],{},"Python 中以双下划线开头的属性通常视为私有属性。",[67,150095,150097],{"className":69,"code":150096,"language":71,"meta":58,"style":58},"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",[73,150098,150099,150108,150117,150129,150141,150145,150154,150163,150167,150177,150190,150201,150206,150217,150221,150230,150242,150253,150257,150270,150281,150285,150296,150300,150304,150322,150331,150340],{"__ignoreMap":58},[76,150100,150101,150103,150106],{"class":78,"line":79},[76,150102,14766],{"class":89},[76,150104,150105],{"class":2035}," Account",[76,150107,3811],{"class":93},[76,150109,150110,150112,150114],{"class":78,"line":86},[76,150111,30871],{"class":89},[76,150113,30874],{"class":250},[76,150115,150116],{"class":93},"(self, owner, balance):\n",[76,150118,150119,150121,150124,150126],{"class":78,"line":97},[76,150120,30915],{"class":250},[76,150122,150123],{"class":93},".owner ",[76,150125,247],{"class":89},[76,150127,150128],{"class":93}," owner\n",[76,150130,150131,150133,150136,150138],{"class":78,"line":103},[76,150132,30915],{"class":250},[76,150134,150135],{"class":93},".__balance ",[76,150137,247],{"class":89},[76,150139,150140],{"class":93}," balance\n",[76,150142,150143],{"class":78,"line":1273},[76,150144,2472],{"emptyLinePlaceholder":125},[76,150146,150147,150149,150152],{"class":78,"line":1287},[76,150148,30871],{"class":89},[76,150150,150151],{"class":2035}," get_balance",[76,150153,30877],{"class":93},[76,150155,150156,150158,150160],{"class":78,"line":1293},[76,150157,14824],{"class":89},[76,150159,38943],{"class":250},[76,150161,150162],{"class":93},".__balance\n",[76,150164,150165],{"class":78,"line":1384},[76,150166,2472],{"emptyLinePlaceholder":125},[76,150168,150169,150171,150174],{"class":78,"line":1390},[76,150170,30871],{"class":89},[76,150172,150173],{"class":2035}," deposit",[76,150175,150176],{"class":93},"(self, money):\n",[76,150178,150179,150181,150184,150186,150188],{"class":78,"line":1402},[76,150180,2569],{"class":89},[76,150182,150183],{"class":93}," money ",[76,150185,1660],{"class":89},[76,150187,4165],{"class":250},[76,150189,3811],{"class":93},[76,150191,150192,150194,150196,150199],{"class":78,"line":1684},[76,150193,34720],{"class":250},[76,150195,202],{"class":93},[76,150197,150198],{"class":305},"\"存款金额必须大于0\"",[76,150200,208],{"class":93},[76,150202,150203],{"class":78,"line":1689},[76,150204,150205],{"class":89},"            return\n",[76,150207,150208,150210,150212,150214],{"class":78,"line":1695},[76,150209,30915],{"class":250},[76,150211,150135],{"class":93},[76,150213,9549],{"class":89},[76,150215,150216],{"class":93}," money\n",[76,150218,150219],{"class":78,"line":1700},[76,150220,2472],{"emptyLinePlaceholder":125},[76,150222,150223,150225,150228],{"class":78,"line":1714},[76,150224,30871],{"class":89},[76,150226,150227],{"class":2035}," withdraw",[76,150229,150176],{"class":93},[76,150231,150232,150234,150236,150238,150240],{"class":78,"line":1719},[76,150233,2569],{"class":89},[76,150235,150183],{"class":93},[76,150237,1660],{"class":89},[76,150239,4165],{"class":250},[76,150241,3811],{"class":93},[76,150243,150244,150246,150248,150251],{"class":78,"line":1725},[76,150245,34720],{"class":250},[76,150247,202],{"class":93},[76,150249,150250],{"class":305},"\"取款金额必须大于0\"",[76,150252,208],{"class":93},[76,150254,150255],{"class":78,"line":1746},[76,150256,150205],{"class":89},[76,150258,150259,150261,150263,150265,150267],{"class":78,"line":1751},[76,150260,2569],{"class":89},[76,150262,150183],{"class":93},[76,150264,1159],{"class":89},[76,150266,38943],{"class":250},[76,150268,150269],{"class":93},".__balance:\n",[76,150271,150272,150274,150276,150279],{"class":78,"line":1765},[76,150273,34720],{"class":250},[76,150275,202],{"class":93},[76,150277,150278],{"class":305},"\"余额不足\"",[76,150280,208],{"class":93},[76,150282,150283],{"class":78,"line":1770},[76,150284,150205],{"class":89},[76,150286,150287,150289,150291,150294],{"class":78,"line":1799},[76,150288,30915],{"class":250},[76,150290,150135],{"class":93},[76,150292,150293],{"class":89},"-=",[76,150295,150216],{"class":93},[76,150297,150298],{"class":78,"line":1804},[76,150299,2472],{"emptyLinePlaceholder":125},[76,150301,150302],{"class":78,"line":1821},[76,150303,2472],{"emptyLinePlaceholder":125},[76,150305,150306,150309,150311,150314,150316,150318,150320],{"class":78,"line":1826},[76,150307,150308],{"class":93},"account ",[76,150310,247],{"class":89},[76,150312,150313],{"class":93}," Account(",[76,150315,149929],{"class":305},[76,150317,12507],{"class":93},[76,150319,6482],{"class":250},[76,150321,208],{"class":93},[76,150323,150324,150327,150329],{"class":78,"line":1831},[76,150325,150326],{"class":93},"account.deposit(",[76,150328,1794],{"class":250},[76,150330,208],{"class":93},[76,150332,150333,150336,150338],{"class":78,"line":1836},[76,150334,150335],{"class":93},"account.withdraw(",[76,150337,512],{"class":250},[76,150339,208],{"class":93},[76,150341,150342,150344],{"class":78,"line":1850},[76,150343,30485],{"class":250},[76,150345,150346],{"class":93},"(account.get_balance())\n",[14,150348,150349],{},"封装的意义是避免外部随意修改内部状态。",[140,150351,150353],{"id":150352},"_118-继承","11.8 继承",[14,150355,150356],{},"继承可以让子类复用父类的属性和方法。",[67,150358,150360],{"className":69,"code":150359,"language":71,"meta":58,"style":58},"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",[73,150361,150362,150371,150380,150391,150395,150399,150413,150422,150433,150437,150441,150451,150456],{"__ignoreMap":58},[76,150363,150364,150366,150369],{"class":78,"line":79},[76,150365,14766],{"class":89},[76,150367,150368],{"class":2035}," Animal",[76,150370,3811],{"class":93},[76,150372,150373,150375,150378],{"class":78,"line":86},[76,150374,30871],{"class":89},[76,150376,150377],{"class":2035}," eat",[76,150379,30877],{"class":93},[76,150381,150382,150384,150386,150389],{"class":78,"line":97},[76,150383,32521],{"class":250},[76,150385,202],{"class":93},[76,150387,150388],{"class":305},"\"吃东西\"",[76,150390,208],{"class":93},[76,150392,150393],{"class":78,"line":103},[76,150394,2472],{"emptyLinePlaceholder":125},[76,150396,150397],{"class":78,"line":1273},[76,150398,2472],{"emptyLinePlaceholder":125},[76,150400,150401,150403,150406,150408,150411],{"class":78,"line":1287},[76,150402,14766],{"class":89},[76,150404,150405],{"class":2035}," Dog",[76,150407,202],{"class":93},[76,150409,150410],{"class":2035},"Animal",[76,150412,30856],{"class":93},[76,150414,150415,150417,150420],{"class":78,"line":1293},[76,150416,30871],{"class":89},[76,150418,150419],{"class":2035}," bark",[76,150421,30877],{"class":93},[76,150423,150424,150426,150428,150431],{"class":78,"line":1384},[76,150425,32521],{"class":250},[76,150427,202],{"class":93},[76,150429,150430],{"class":305},"\"汪汪\"",[76,150432,208],{"class":93},[76,150434,150435],{"class":78,"line":1390},[76,150436,2472],{"emptyLinePlaceholder":125},[76,150438,150439],{"class":78,"line":1402},[76,150440,2472],{"emptyLinePlaceholder":125},[76,150442,150443,150446,150448],{"class":78,"line":1684},[76,150444,150445],{"class":93},"dog ",[76,150447,247],{"class":89},[76,150449,150450],{"class":93}," Dog()\n",[76,150452,150453],{"class":78,"line":1689},[76,150454,150455],{"class":93},"dog.eat()\n",[76,150457,150458],{"class":78,"line":1695},[76,150459,150460],{"class":93},"dog.bark()\n",[14,150462,150463],{},"子类可以扩展新方法，也可以重写父类方法。",[140,150465,150467],{"id":150466},"_119-方法重写","11.9 方法重写",[67,150469,150471],{"className":69,"code":150470,"language":71,"meta":58,"style":58},"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",[73,150472,150473,150481,150490,150501,150505,150509,150521,150529,150539,150543,150547,150560,150568,150579,150583,150587,150595,150605,150609,150614],{"__ignoreMap":58},[76,150474,150475,150477,150479],{"class":78,"line":79},[76,150476,14766],{"class":89},[76,150478,150368],{"class":2035},[76,150480,3811],{"class":93},[76,150482,150483,150485,150488],{"class":78,"line":86},[76,150484,30871],{"class":89},[76,150486,150487],{"class":2035}," speak",[76,150489,30877],{"class":93},[76,150491,150492,150494,150496,150499],{"class":78,"line":97},[76,150493,32521],{"class":250},[76,150495,202],{"class":93},[76,150497,150498],{"class":305},"\"动物叫\"",[76,150500,208],{"class":93},[76,150502,150503],{"class":78,"line":103},[76,150504,2472],{"emptyLinePlaceholder":125},[76,150506,150507],{"class":78,"line":1273},[76,150508,2472],{"emptyLinePlaceholder":125},[76,150510,150511,150513,150515,150517,150519],{"class":78,"line":1287},[76,150512,14766],{"class":89},[76,150514,150405],{"class":2035},[76,150516,202],{"class":93},[76,150518,150410],{"class":2035},[76,150520,30856],{"class":93},[76,150522,150523,150525,150527],{"class":78,"line":1293},[76,150524,30871],{"class":89},[76,150526,150487],{"class":2035},[76,150528,30877],{"class":93},[76,150530,150531,150533,150535,150537],{"class":78,"line":1384},[76,150532,32521],{"class":250},[76,150534,202],{"class":93},[76,150536,150430],{"class":305},[76,150538,208],{"class":93},[76,150540,150541],{"class":78,"line":1390},[76,150542,2472],{"emptyLinePlaceholder":125},[76,150544,150545],{"class":78,"line":1402},[76,150546,2472],{"emptyLinePlaceholder":125},[76,150548,150549,150551,150554,150556,150558],{"class":78,"line":1684},[76,150550,14766],{"class":89},[76,150552,150553],{"class":2035}," Cat",[76,150555,202],{"class":93},[76,150557,150410],{"class":2035},[76,150559,30856],{"class":93},[76,150561,150562,150564,150566],{"class":78,"line":1689},[76,150563,30871],{"class":89},[76,150565,150487],{"class":2035},[76,150567,30877],{"class":93},[76,150569,150570,150572,150574,150577],{"class":78,"line":1695},[76,150571,32521],{"class":250},[76,150573,202],{"class":93},[76,150575,150576],{"class":305},"\"喵喵\"",[76,150578,208],{"class":93},[76,150580,150581],{"class":78,"line":1700},[76,150582,2472],{"emptyLinePlaceholder":125},[76,150584,150585],{"class":78,"line":1714},[76,150586,2472],{"emptyLinePlaceholder":125},[76,150588,150589,150591,150593],{"class":78,"line":1719},[76,150590,150445],{"class":93},[76,150592,247],{"class":89},[76,150594,150450],{"class":93},[76,150596,150597,150600,150602],{"class":78,"line":1725},[76,150598,150599],{"class":93},"cat ",[76,150601,247],{"class":89},[76,150603,150604],{"class":93}," Cat()\n",[76,150606,150607],{"class":78,"line":1746},[76,150608,2472],{"emptyLinePlaceholder":125},[76,150610,150611],{"class":78,"line":1751},[76,150612,150613],{"class":93},"dog.speak()\n",[76,150615,150616],{"class":78,"line":1765},[76,150617,150618],{"class":93},"cat.speak()\n",[140,150620,150622],{"id":150621},"_1110-super","11.10 super",[14,150624,150625,150626,150629],{},"子类可以通过 ",[73,150627,150628],{},"super()"," 调用父类方法。",[67,150631,150633],{"className":69,"code":150632,"language":71,"meta":58,"style":58},"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",[73,150634,150635,150643,150652,150662,150666,150670,150682,150691,150702,150712,150716,150720,150736],{"__ignoreMap":58},[76,150636,150637,150639,150641],{"class":78,"line":79},[76,150638,14766],{"class":89},[76,150640,15641],{"class":2035},[76,150642,3811],{"class":93},[76,150644,150645,150647,150649],{"class":78,"line":86},[76,150646,30871],{"class":89},[76,150648,30874],{"class":250},[76,150650,150651],{"class":93},"(self, name):\n",[76,150653,150654,150656,150658,150660],{"class":78,"line":97},[76,150655,30915],{"class":250},[76,150657,149831],{"class":93},[76,150659,247],{"class":89},[76,150661,149836],{"class":93},[76,150663,150664],{"class":78,"line":103},[76,150665,2472],{"emptyLinePlaceholder":125},[76,150667,150668],{"class":78,"line":1273},[76,150669,2472],{"emptyLinePlaceholder":125},[76,150671,150672,150674,150676,150678,150680],{"class":78,"line":1287},[76,150673,14766],{"class":89},[76,150675,7970],{"class":2035},[76,150677,202],{"class":93},[76,150679,19118],{"class":2035},[76,150681,30856],{"class":93},[76,150683,150684,150686,150688],{"class":78,"line":1293},[76,150685,30871],{"class":89},[76,150687,30874],{"class":250},[76,150689,150690],{"class":93},"(self, name, score):\n",[76,150692,150693,150695,150697,150699],{"class":78,"line":1384},[76,150694,30887],{"class":250},[76,150696,17333],{"class":93},[76,150698,30899],{"class":250},[76,150700,150701],{"class":93},"(name)\n",[76,150703,150704,150706,150708,150710],{"class":78,"line":1390},[76,150705,30915],{"class":250},[76,150707,149855],{"class":93},[76,150709,247],{"class":89},[76,150711,1651],{"class":93},[76,150713,150714],{"class":78,"line":1402},[76,150715,2472],{"emptyLinePlaceholder":125},[76,150717,150718],{"class":78,"line":1684},[76,150719,2472],{"emptyLinePlaceholder":125},[76,150721,150722,150724,150726,150728,150730,150732,150734],{"class":78,"line":1689},[76,150723,149522],{"class":93},[76,150725,247],{"class":89},[76,150727,149926],{"class":93},[76,150729,149929],{"class":305},[76,150731,12507],{"class":93},[76,150733,1188],{"class":250},[76,150735,208],{"class":93},[76,150737,150738,150740],{"class":78,"line":1695},[76,150739,30485],{"class":250},[76,150741,150742],{"class":93},"(student.name, student.score)\n",[140,150744,150746],{"id":150745},"_1111-多态","11.11 多态",[14,150748,150749],{},"多态指不同对象响应同一个方法，表现出不同结果。",[67,150751,150753],{"className":69,"code":150752,"language":71,"meta":58,"style":58},"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",[73,150754,150755,150763,150771,150781,150785,150789,150797,150805,150815,150819,150823,150833,150838,150842,150846,150851],{"__ignoreMap":58},[76,150756,150757,150759,150761],{"class":78,"line":79},[76,150758,14766],{"class":89},[76,150760,150405],{"class":2035},[76,150762,3811],{"class":93},[76,150764,150765,150767,150769],{"class":78,"line":86},[76,150766,30871],{"class":89},[76,150768,150487],{"class":2035},[76,150770,30877],{"class":93},[76,150772,150773,150775,150777,150779],{"class":78,"line":97},[76,150774,32521],{"class":250},[76,150776,202],{"class":93},[76,150778,150430],{"class":305},[76,150780,208],{"class":93},[76,150782,150783],{"class":78,"line":103},[76,150784,2472],{"emptyLinePlaceholder":125},[76,150786,150787],{"class":78,"line":1273},[76,150788,2472],{"emptyLinePlaceholder":125},[76,150790,150791,150793,150795],{"class":78,"line":1287},[76,150792,14766],{"class":89},[76,150794,150553],{"class":2035},[76,150796,3811],{"class":93},[76,150798,150799,150801,150803],{"class":78,"line":1293},[76,150800,30871],{"class":89},[76,150802,150487],{"class":2035},[76,150804,30877],{"class":93},[76,150806,150807,150809,150811,150813],{"class":78,"line":1384},[76,150808,32521],{"class":250},[76,150810,202],{"class":93},[76,150812,150576],{"class":305},[76,150814,208],{"class":93},[76,150816,150817],{"class":78,"line":1390},[76,150818,2472],{"emptyLinePlaceholder":125},[76,150820,150821],{"class":78,"line":1402},[76,150822,2472],{"emptyLinePlaceholder":125},[76,150824,150825,150827,150830],{"class":78,"line":1684},[76,150826,32017],{"class":89},[76,150828,150829],{"class":2035}," make_sound",[76,150831,150832],{"class":93},"(animal):\n",[76,150834,150835],{"class":78,"line":1689},[76,150836,150837],{"class":93},"    animal.speak()\n",[76,150839,150840],{"class":78,"line":1695},[76,150841,2472],{"emptyLinePlaceholder":125},[76,150843,150844],{"class":78,"line":1700},[76,150845,2472],{"emptyLinePlaceholder":125},[76,150847,150848],{"class":78,"line":1714},[76,150849,150850],{"class":93},"make_sound(Dog())\n",[76,150852,150853],{"class":78,"line":1719},[76,150854,150855],{"class":93},"make_sound(Cat())\n",[14,150857,150858],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[140,150860,150862],{"id":150861},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150864,150865],{},"实例属性属于对象：",[67,150867,150869],{"className":69,"code":150868,"language":71,"meta":58,"style":58},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[73,150870,150871,150879,150887],{"__ignoreMap":58},[76,150872,150873,150875,150877],{"class":78,"line":79},[76,150874,14766],{"class":89},[76,150876,7970],{"class":2035},[76,150878,3811],{"class":93},[76,150880,150881,150883,150885],{"class":78,"line":86},[76,150882,30871],{"class":89},[76,150884,30874],{"class":250},[76,150886,150651],{"class":93},[76,150888,150889,150891,150893,150895],{"class":78,"line":97},[76,150890,30915],{"class":250},[76,150892,149831],{"class":93},[76,150894,247],{"class":89},[76,150896,149836],{"class":93},[14,150898,150899],{},"类属性属于类，所有对象共享：",[67,150901,150903],{"className":69,"code":150902,"language":71,"meta":58,"style":58},"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",[73,150904,150905,150913,150923,150927,150935,150945,150949,150953,150966,150980,150984,150991,150998],{"__ignoreMap":58},[76,150906,150907,150909,150911],{"class":78,"line":79},[76,150908,14766],{"class":89},[76,150910,7970],{"class":2035},[76,150912,3811],{"class":93},[76,150914,150915,150918,150920],{"class":78,"line":86},[76,150916,150917],{"class":93},"    school ",[76,150919,247],{"class":89},[76,150921,150922],{"class":305}," \"黑马学校\"\n",[76,150924,150925],{"class":78,"line":97},[76,150926,2472],{"emptyLinePlaceholder":125},[76,150928,150929,150931,150933],{"class":78,"line":103},[76,150930,30871],{"class":89},[76,150932,30874],{"class":250},[76,150934,150651],{"class":93},[76,150936,150937,150939,150941,150943],{"class":78,"line":1273},[76,150938,30915],{"class":250},[76,150940,149831],{"class":93},[76,150942,247],{"class":89},[76,150944,149836],{"class":93},[76,150946,150947],{"class":78,"line":1287},[76,150948,2472],{"emptyLinePlaceholder":125},[76,150950,150951],{"class":78,"line":1293},[76,150952,2472],{"emptyLinePlaceholder":125},[76,150954,150955,150958,150960,150962,150964],{"class":78,"line":1384},[76,150956,150957],{"class":93},"s1 ",[76,150959,247],{"class":89},[76,150961,149926],{"class":93},[76,150963,149929],{"class":305},[76,150965,208],{"class":93},[76,150967,150968,150971,150973,150975,150978],{"class":78,"line":1390},[76,150969,150970],{"class":93},"s2 ",[76,150972,247],{"class":89},[76,150974,149926],{"class":93},[76,150976,150977],{"class":305},"\"小红\"",[76,150979,208],{"class":93},[76,150981,150982],{"class":78,"line":1402},[76,150983,2472],{"emptyLinePlaceholder":125},[76,150985,150986,150988],{"class":78,"line":1684},[76,150987,30485],{"class":250},[76,150989,150990],{"class":93},"(s1.school)\n",[76,150992,150993,150995],{"class":78,"line":1689},[76,150994,30485],{"class":250},[76,150996,150997],{"class":93},"(s2.school)\n",[76,150999,151000,151002],{"class":78,"line":1695},[76,151001,30485],{"class":250},[76,151003,151004],{"class":93},"(Student.school)\n",[14,151006,151007],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[140,151009,151011],{"id":151010},"_1113-类方法和静态方法","11.13 类方法和静态方法",[169,151013,151015],{"id":151014},"_11131-类方法","11.13.1 类方法",[14,151017,151018,151019,151022,151023,28458],{},"类方法使用 ",[73,151020,151021],{},"@classmethod","，第一个参数通常是 ",[73,151024,151025],{},"cls",[67,151027,151029],{"className":69,"code":151028,"language":71,"meta":58,"style":58},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[73,151030,151031,151039,151047,151051,151059,151069,151079,151083,151087],{"__ignoreMap":58},[76,151032,151033,151035,151037],{"class":78,"line":79},[76,151034,14766],{"class":89},[76,151036,7970],{"class":2035},[76,151038,3811],{"class":93},[76,151040,151041,151043,151045],{"class":78,"line":86},[76,151042,150917],{"class":93},[76,151044,247],{"class":89},[76,151046,150922],{"class":305},[76,151048,151049],{"class":78,"line":97},[76,151050,2472],{"emptyLinePlaceholder":125},[76,151052,151053,151056],{"class":78,"line":103},[76,151054,151055],{"class":2035},"    @",[76,151057,151058],{"class":250},"classmethod\n",[76,151060,151061,151063,151066],{"class":78,"line":1273},[76,151062,30871],{"class":89},[76,151064,151065],{"class":2035}," get_school",[76,151067,151068],{"class":93},"(cls):\n",[76,151070,151071,151073,151076],{"class":78,"line":1287},[76,151072,14824],{"class":89},[76,151074,151075],{"class":250}," cls",[76,151077,151078],{"class":93},".school\n",[76,151080,151081],{"class":78,"line":1293},[76,151082,2472],{"emptyLinePlaceholder":125},[76,151084,151085],{"class":78,"line":1384},[76,151086,2472],{"emptyLinePlaceholder":125},[76,151088,151089,151091],{"class":78,"line":1390},[76,151090,30485],{"class":250},[76,151092,151093],{"class":93},"(Student.get_school())\n",[169,151095,151097],{"id":151096},"_11132-静态方法","11.13.2 静态方法",[14,151099,151100,151101,151104],{},"静态方法使用 ",[73,151102,151103],{},"@staticmethod","，不需要访问实例和类。",[67,151106,151108],{"className":69,"code":151107,"language":71,"meta":58,"style":58},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[73,151109,151110,151119,151126,151135,151146,151150,151154],{"__ignoreMap":58},[76,151111,151112,151114,151117],{"class":78,"line":79},[76,151113,14766],{"class":89},[76,151115,151116],{"class":2035}," MathUtils",[76,151118,3811],{"class":93},[76,151120,151121,151123],{"class":78,"line":86},[76,151122,151055],{"class":2035},[76,151124,151125],{"class":250},"staticmethod\n",[76,151127,151128,151130,151132],{"class":78,"line":97},[76,151129,30871],{"class":89},[76,151131,5281],{"class":2035},[76,151133,151134],{"class":93},"(a, b):\n",[76,151136,151137,151139,151141,151143],{"class":78,"line":103},[76,151138,14824],{"class":89},[76,151140,10941],{"class":93},[76,151142,681],{"class":89},[76,151144,151145],{"class":93}," b\n",[76,151147,151148],{"class":78,"line":1273},[76,151149,2472],{"emptyLinePlaceholder":125},[76,151151,151152],{"class":78,"line":1287},[76,151153,2472],{"emptyLinePlaceholder":125},[76,151155,151156,151158,151161,151163,151165,151167],{"class":78,"line":1293},[76,151157,30485],{"class":250},[76,151159,151160],{"class":93},"(MathUtils.add(",[76,151162,418],{"class":250},[76,151164,12507],{"class":93},[76,151166,278],{"class":250},[76,151168,30567],{"class":93},[14,151170,151171],{},"静态方法本质上是放在类命名空间里的普通函数。",[140,151173,151175],{"id":151174},"_1114-dataclass","11.14 dataclass",[14,151177,151178,151181],{},[73,151179,151180],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[67,151183,151185],{"className":69,"code":151184,"language":71,"meta":58,"style":58},"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",[73,151186,151187,151199,151203,151207,151212,151220,151228,151236,151244,151248,151252,151272],{"__ignoreMap":58},[76,151188,151189,151191,151194,151196],{"class":78,"line":79},[76,151190,30807],{"class":89},[76,151192,151193],{"class":93}," dataclasses ",[76,151195,90],{"class":89},[76,151197,151198],{"class":93}," dataclass\n",[76,151200,151201],{"class":78,"line":86},[76,151202,2472],{"emptyLinePlaceholder":125},[76,151204,151205],{"class":78,"line":97},[76,151206,2472],{"emptyLinePlaceholder":125},[76,151208,151209],{"class":78,"line":103},[76,151210,151211],{"class":2035},"@dataclass\n",[76,151213,151214,151216,151218],{"class":78,"line":1273},[76,151215,14766],{"class":89},[76,151217,7970],{"class":2035},[76,151219,3811],{"class":93},[76,151221,151222,151225],{"class":78,"line":1287},[76,151223,151224],{"class":93},"    name: ",[76,151226,151227],{"class":250},"str\n",[76,151229,151230,151233],{"class":78,"line":1293},[76,151231,151232],{"class":93},"    age: ",[76,151234,151235],{"class":250},"int\n",[76,151237,151238,151241],{"class":78,"line":1384},[76,151239,151240],{"class":93},"    score: ",[76,151242,151243],{"class":250},"float\n",[76,151245,151246],{"class":78,"line":1390},[76,151247,2472],{"emptyLinePlaceholder":125},[76,151249,151250],{"class":78,"line":1402},[76,151251,2472],{"emptyLinePlaceholder":125},[76,151253,151254,151256,151258,151260,151262,151264,151266,151268,151270],{"class":78,"line":1684},[76,151255,149522],{"class":93},[76,151257,247],{"class":89},[76,151259,149926],{"class":93},[76,151261,149929],{"class":305},[76,151263,12507],{"class":93},[76,151265,849],{"class":250},[76,151267,12507],{"class":93},[76,151269,1188],{"class":250},[76,151271,208],{"class":93},[76,151273,151274,151276],{"class":78,"line":1689},[76,151275,30485],{"class":250},[76,151277,150083],{"class":93},[14,151279,151280,151281,413,151283,151286],{},"它会自动生成 ",[73,151282,30899],{},[73,151284,151285],{},"__repr__"," 等方法。适合数据模型类。",[140,151288,151290],{"id":151289},"_1115-小案例学生类","11.15 小案例：学生类",[67,151292,151294],{"className":69,"code":151293,"language":71,"meta":58,"style":58},"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",[73,151295,151296,151304,151313,151325,151335,151345,151355,151359,151368,151381,151385,151394,151400,151412,151424,151436,151448,151452,151456,151462,151472,151481,151491,151499,151507,151516,151520,151524,151532,151568,151572,151576,151601,151608],{"__ignoreMap":58},[76,151297,151298,151300,151302],{"class":78,"line":79},[76,151299,14766],{"class":89},[76,151301,7970],{"class":2035},[76,151303,3811],{"class":93},[76,151305,151306,151308,151310],{"class":78,"line":86},[76,151307,30871],{"class":89},[76,151309,30874],{"class":250},[76,151311,151312],{"class":93},"(self, student_id, name, age, score):\n",[76,151314,151315,151317,151320,151322],{"class":78,"line":97},[76,151316,30915],{"class":250},[76,151318,151319],{"class":93},".student_id ",[76,151321,247],{"class":89},[76,151323,151324],{"class":93}," student_id\n",[76,151326,151327,151329,151331,151333],{"class":78,"line":103},[76,151328,30915],{"class":250},[76,151330,149831],{"class":93},[76,151332,247],{"class":89},[76,151334,149836],{"class":93},[76,151336,151337,151339,151341,151343],{"class":78,"line":1273},[76,151338,30915],{"class":250},[76,151340,149843],{"class":93},[76,151342,247],{"class":89},[76,151344,149848],{"class":93},[76,151346,151347,151349,151351,151353],{"class":78,"line":1287},[76,151348,30915],{"class":250},[76,151350,149855],{"class":93},[76,151352,247],{"class":89},[76,151354,1651],{"class":93},[76,151356,151357],{"class":78,"line":1293},[76,151358,2472],{"emptyLinePlaceholder":125},[76,151360,151361,151363,151366],{"class":78,"line":1384},[76,151362,30871],{"class":89},[76,151364,151365],{"class":2035}," is_passed",[76,151367,30877],{"class":93},[76,151369,151370,151372,151374,151376,151378],{"class":78,"line":1390},[76,151371,14824],{"class":89},[76,151373,38943],{"class":250},[76,151375,149855],{"class":93},[76,151377,1782],{"class":89},[76,151379,151380],{"class":250}," 60\n",[76,151382,151383],{"class":78,"line":1402},[76,151384,2472],{"emptyLinePlaceholder":125},[76,151386,151387,151389,151392],{"class":78,"line":1684},[76,151388,30871],{"class":89},[76,151390,151391],{"class":2035}," to_dict",[76,151393,30877],{"class":93},[76,151395,151396,151398],{"class":78,"line":1689},[76,151397,14824],{"class":89},[76,151399,15644],{"class":93},[76,151401,151402,151405,151407,151409],{"class":78,"line":1695},[76,151403,151404],{"class":305},"            \"student_id\"",[76,151406,51507],{"class":93},[76,151408,30893],{"class":250},[76,151410,151411],{"class":93},".student_id,\n",[76,151413,151414,151417,151419,151421],{"class":78,"line":1700},[76,151415,151416],{"class":305},"            \"name\"",[76,151418,51507],{"class":93},[76,151420,30893],{"class":250},[76,151422,151423],{"class":93},".name,\n",[76,151425,151426,151429,151431,151433],{"class":78,"line":1714},[76,151427,151428],{"class":305},"            \"age\"",[76,151430,51507],{"class":93},[76,151432,30893],{"class":250},[76,151434,151435],{"class":93},".age,\n",[76,151437,151438,151441,151443,151445],{"class":78,"line":1719},[76,151439,151440],{"class":305},"            \"score\"",[76,151442,51507],{"class":93},[76,151444,30893],{"class":250},[76,151446,151447],{"class":93},".score,\n",[76,151449,151450],{"class":78,"line":1725},[76,151451,2601],{"class":93},[76,151453,151454],{"class":78,"line":1746},[76,151455,2472],{"emptyLinePlaceholder":125},[76,151457,151458,151460],{"class":78,"line":1751},[76,151459,151055],{"class":2035},[76,151461,151058],{"class":250},[76,151463,151464,151466,151469],{"class":78,"line":1765},[76,151465,30871],{"class":89},[76,151467,151468],{"class":2035}," from_dict",[76,151470,151471],{"class":93},"(cls, data):\n",[76,151473,151474,151476,151478],{"class":78,"line":1770},[76,151475,14824],{"class":89},[76,151477,151075],{"class":250},[76,151479,151480],{"class":93},"(\n",[76,151482,151483,151486,151489],{"class":78,"line":1799},[76,151484,151485],{"class":93},"            data[",[76,151487,151488],{"class":305},"\"student_id\"",[76,151490,87906],{"class":93},[76,151492,151493,151495,151497],{"class":78,"line":1804},[76,151494,151485],{"class":93},[76,151496,62749],{"class":305},[76,151498,87906],{"class":93},[76,151500,151501,151503,151505],{"class":78,"line":1821},[76,151502,151485],{"class":93},[76,151504,69194],{"class":305},[76,151506,87906],{"class":93},[76,151508,151509,151511,151514],{"class":78,"line":1826},[76,151510,151485],{"class":93},[76,151512,151513],{"class":305},"\"score\"",[76,151515,87906],{"class":93},[76,151517,151518],{"class":78,"line":1831},[76,151519,38196],{"class":93},[76,151521,151522],{"class":78,"line":1836},[76,151523,2472],{"emptyLinePlaceholder":125},[76,151525,151526,151528,151530],{"class":78,"line":1850},[76,151527,30871],{"class":89},[76,151529,150022],{"class":250},[76,151531,30877],{"class":93},[76,151533,151534,151536,151538,151540,151542,151545,151547,151550,151552,151554,151556,151558,151560,151562,151564,151566],{"class":78,"line":1855},[76,151535,14824],{"class":89},[76,151537,150031],{"class":89},[76,151539,452],{"class":305},[76,151541,149493],{"class":250},[76,151543,151544],{"class":93},".student_id",[76,151546,1145],{"class":250},[76,151548,151549],{"class":250}," {self",[76,151551,80371],{"class":93},[76,151553,1145],{"class":250},[76,151555,151549],{"class":250},[76,151557,80383],{"class":93},[76,151559,1145],{"class":250},[76,151561,151549],{"class":250},[76,151563,149903],{"class":93},[76,151565,1145],{"class":250},[76,151567,25206],{"class":305},[76,151569,151570],{"class":78,"line":2649},[76,151571,2472],{"emptyLinePlaceholder":125},[76,151573,151574],{"class":78,"line":2663},[76,151575,2472],{"emptyLinePlaceholder":125},[76,151577,151578,151580,151582,151584,151587,151589,151591,151593,151595,151597,151599],{"class":78,"line":2671},[76,151579,149522],{"class":93},[76,151581,247],{"class":89},[76,151583,149926],{"class":93},[76,151585,151586],{"class":305},"\"001\"",[76,151588,12507],{"class":93},[76,151590,149929],{"class":305},[76,151592,12507],{"class":93},[76,151594,849],{"class":250},[76,151596,12507],{"class":93},[76,151598,1188],{"class":250},[76,151600,208],{"class":93},[76,151602,151603,151605],{"class":78,"line":2676},[76,151604,30485],{"class":250},[76,151606,151607],{"class":93},"(student.is_passed())\n",[76,151609,151610,151612],{"class":78,"line":2682},[76,151611,30485],{"class":250},[76,151613,151614],{"class":93},"(student.to_dict())\n",[14,151616,151617,101059,151620,151623],{},[73,151618,151619],{},"to_dict()",[73,151621,151622],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[140,151625,151627],{"id":151626},"_1116-易错点","11.16 易错点",[152,151629,151630,151636,151642,151647,151650,151653],{},[155,151631,151632,151633,28458],{},"类名推荐使用大驼峰，如 ",[73,151634,151635],{},"StudentManager",[155,151637,151638,151639,151641],{},"方法第一个参数必须写 ",[73,151640,30893],{},"，调用时不用传。",[155,151643,151644,151646],{},[73,151645,30899],{}," 不是普通方法，它在创建对象时自动执行。",[155,151648,151649],{},"私有属性不是绝对安全，只是约定和名称改写。",[155,151651,151652],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[155,151654,151655],{},"类中方法太多时，说明职责可能过重。",[140,151657,151659],{"id":151658},"_1117-本章练习","11.17 本章练习",[152,151661,151662,151668,151674,151679,151692],{},[155,151663,151664,151665,151667],{},"定义 ",[73,151666,149609],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[155,151669,151664,151670,151673],{},[73,151671,151672],{},"Account"," 类，实现存款、取款、查询余额。",[155,151675,151664,151676,151678],{},[73,151677,17298],{}," 类，计算圆的周长和面积。",[155,151680,151664,151681,413,151684,151687,151688,151691],{},[73,151682,151683],{},"Dog",[73,151685,151686],{},"Cat"," 类，并用同一个函数调用它们的 ",[73,151689,151690],{},"speak()"," 方法。",[155,151693,104407,151694,151696,151697,28458],{},[73,151695,151180],{}," 定义一个商品类 ",[73,151698,151699],{},"Product",[117,151701,151702],{},"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":58,"searchDepth":86,"depth":86,"links":151704},[151705,151706,151707,151708,151709,151710,151712,151713,151714,151715,151716,151717,151718,151722,151723,151724,151725],{"id":149373,"depth":86,"text":149374},{"id":149556,"depth":86,"text":149557},{"id":149620,"depth":86,"text":149621},{"id":149697,"depth":86,"text":149698},{"id":149796,"depth":86,"text":149797},{"id":149960,"depth":86,"text":151711},"11.6 str",{"id":150086,"depth":86,"text":150087},{"id":150352,"depth":86,"text":150353},{"id":150466,"depth":86,"text":150467},{"id":150621,"depth":86,"text":150622},{"id":150745,"depth":86,"text":150746},{"id":150861,"depth":86,"text":150862},{"id":151010,"depth":86,"text":151011,"children":151719},[151720,151721],{"id":151014,"depth":97,"text":151015},{"id":151096,"depth":97,"text":151097},{"id":151174,"depth":86,"text":151175},{"id":151289,"depth":86,"text":151290},{"id":151626,"depth":86,"text":151627},{"id":151658,"depth":86,"text":151659},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149365,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151732,"title":151733,"body":151734,"description":122,"extension":123,"meta":155047,"navigation":125,"path":155048,"seo":155049,"stem":155050,"__hash__":155051},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151735,"toc":155023},[151736,151739,151743,151746,151749,151778,151781,151789,151793,151797,151800,151823,151826,151832,151836,153282,153285,153306,153310,153313,153325,153328,153512,153515,153641,153644,153648,153652,153788,153792,153878,153882,153964,153968,154005,154009,154198,154202,154205,154435,154439,154442,154623,154626,154630,154633,154639,154642,154668,154672,154675,154689,154692,154717,154720,154734,154737,154754,154757,154774,154777,154794,154798,154824,154828,154851,154855,154858,154860,154866,154868,154889,154892,154898,154904,154908,154911,154987,154990,154994,155020],[10,151737,151733],{"id":151738},"_12-综合案例与复习路线",[140,151740,151742],{"id":151741},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151744,151745],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151747,151748],{},"一个合格的入门综合项目最好覆盖：",[152,151750,151751,151754,151757,151760,151763,151766,151769,151772,151775],{},[155,151752,151753],{},"输入输出。",[155,151755,151756],{},"判断和循环。",[155,151758,151759],{},"函数拆分。",[155,151761,151762],{},"列表、字典等容器。",[155,151764,151765],{},"文件持久化。",[155,151767,151768],{},"异常处理。",[155,151770,151771],{},"模块拆分。",[155,151773,151774],{},"可选：面向对象。",[155,151776,151777],{},"可选：数据可视化。",[14,151779,151780],{},"本章整理两个方向：",[152,151782,151783,151786],{},[155,151784,151785],{},"学生管理系统。",[155,151787,151788],{},"销售数据统计和可视化。",[140,151790,151792],{"id":151791},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[169,151794,151796],{"id":151795},"_1221-需求","12.2.1 需求",[14,151798,151799],{},"实现一个命令行学生管理系统：",[152,151801,151802,151805,151808,151811,151814,151817,151820],{},[155,151803,151804],{},"添加学生。",[155,151806,151807],{},"删除学生。",[155,151809,151810],{},"修改学生。",[155,151812,151813],{},"查询学生。",[155,151815,151816],{},"显示所有学生。",[155,151818,151819],{},"保存到 JSON 文件。",[155,151821,151822],{},"程序启动时自动读取 JSON 文件。",[14,151824,151825],{},"学生字段：",[67,151827,151830],{"className":151828,"code":151829,"language":5259,"meta":58},[5257],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[73,151831,151829],{"__ignoreMap":58},[140,151833,151835],{"id":151834},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[67,151837,151839],{"className":69,"code":151838,"language":71,"meta":58,"style":58},"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",[73,151840,151841,151847,151857,151861,151875,151879,151883,151892,151904,151910,151914,151920,151951,151961,151968,151979,151985,151989,151993,152003,152034,152060,152064,152068,152077,152088,152099,152110,152121,152132,152143,152154,152158,152162,152172,152184,152200,152207,152214,152218,152222,152232,152240,152247,152260,152270,152281,152285,152289,152298,152306,152312,152324,152332,152343,152347,152351,152360,152376,152380,152387,152398,152403,152407,152423,152438,152453,152457,152462,152470,152478,152486,152494,152498,152503,152514,152518,152522,152531,152546,152556,152560,152572,152583,152587,152591,152596,152600,152611,152615,152619,152628,152643,152651,152655,152667,152677,152681,152685,152700,152713,152726,152730,152743,152755,152767,152771,152775,152786,152790,152794,152803,152818,152826,152830,152842,152852,152856,152860,152865,152869,152873,152883,152889,152911,152930,152949,152968,152973,152977,152981,152990,152998,153009,153013,153017,153043,153053,153058,153062,153066,153074,153084,153088,153096,153101,153117,153121,153135,153140,153154,153159,153172,153177,153190,153195,153208,153213,153226,153237,153241,153247,153258,153262,153266,153278],{"__ignoreMap":58},[76,151842,151843,151845],{"class":78,"line":79},[76,151844,90],{"class":89},[76,151846,147132],{"class":93},[76,151848,151849,151851,151853,151855],{"class":78,"line":86},[76,151850,30807],{"class":89},[76,151852,108352],{"class":93},[76,151854,90],{"class":89},[76,151856,108357],{"class":93},[76,151858,151859],{"class":78,"line":97},[76,151860,2472],{"emptyLinePlaceholder":125},[76,151862,151863,151866,151868,151870,151873],{"class":78,"line":103},[76,151864,151865],{"class":250},"DATA_FILE",[76,151867,13636],{"class":89},[76,151869,108586],{"class":93},[76,151871,151872],{"class":305},"\"students.json\"",[76,151874,208],{"class":93},[76,151876,151877],{"class":78,"line":1273},[76,151878,2472],{"emptyLinePlaceholder":125},[76,151880,151881],{"class":78,"line":1287},[76,151882,2472],{"emptyLinePlaceholder":125},[76,151884,151885,151887,151890],{"class":78,"line":1293},[76,151886,32017],{"class":89},[76,151888,151889],{"class":2035}," load_students",[76,151891,32023],{"class":93},[76,151893,151894,151896,151898,151901],{"class":78,"line":1384},[76,151895,3173],{"class":89},[76,151897,39000],{"class":89},[76,151899,151900],{"class":250}," DATA_FILE",[76,151902,151903],{"class":93},".exists():\n",[76,151905,151906,151908],{"class":78,"line":1390},[76,151907,14824],{"class":89},[76,151909,51908],{"class":93},[76,151911,151912],{"class":78,"line":1402},[76,151913,2472],{"emptyLinePlaceholder":125},[76,151915,151916,151918],{"class":78,"line":1684},[76,151917,125825],{"class":89},[76,151919,3811],{"class":93},[76,151921,151922,151925,151927,151929,151931,151933,151935,151937,151939,151941,151943,151945,151947,151949],{"class":78,"line":1689},[76,151923,151924],{"class":89},"        with",[76,151926,146832],{"class":250},[76,151928,202],{"class":93},[76,151930,151865],{"class":250},[76,151932,12507],{"class":93},[76,151934,146842],{"class":305},[76,151936,12507],{"class":93},[76,151938,146847],{"class":5288},[76,151940,247],{"class":89},[76,151942,146852],{"class":305},[76,151944,13786],{"class":93},[76,151946,31453],{"class":89},[76,151948,148194],{"class":5288},[76,151950,3811],{"class":93},[76,151952,151953,151955,151957,151959],{"class":78,"line":1695},[76,151954,15804],{"class":89},[76,151956,148205],{"class":93},[76,151958,45424],{"class":5288},[76,151960,208],{"class":93},[76,151962,151963,151965],{"class":78,"line":1700},[76,151964,125853],{"class":89},[76,151966,151967],{"class":93}," json.JSONDecodeError:\n",[76,151969,151970,151972,151974,151977],{"class":78,"line":1714},[76,151971,32521],{"class":250},[76,151973,202],{"class":93},[76,151975,151976],{"class":305},"\"数据文件格式错误，已使用空数据启动\"",[76,151978,208],{"class":93},[76,151980,151981,151983],{"class":78,"line":1719},[76,151982,14824],{"class":89},[76,151984,51908],{"class":93},[76,151986,151987],{"class":78,"line":1725},[76,151988,2472],{"emptyLinePlaceholder":125},[76,151990,151991],{"class":78,"line":1746},[76,151992,2472],{"emptyLinePlaceholder":125},[76,151994,151995,151997,152000],{"class":78,"line":1751},[76,151996,32017],{"class":89},[76,151998,151999],{"class":2035}," save_students",[76,152001,152002],{"class":93},"(students):\n",[76,152004,152005,152007,152009,152011,152013,152015,152018,152020,152022,152024,152026,152028,152030,152032],{"class":78,"line":1765},[76,152006,34248],{"class":89},[76,152008,146832],{"class":250},[76,152010,202],{"class":93},[76,152012,151865],{"class":250},[76,152014,12507],{"class":93},[76,152016,152017],{"class":305},"\"w\"",[76,152019,12507],{"class":93},[76,152021,146847],{"class":5288},[76,152023,247],{"class":89},[76,152025,146852],{"class":305},[76,152027,13786],{"class":93},[76,152029,31453],{"class":89},[76,152031,148194],{"class":5288},[76,152033,3811],{"class":93},[76,152035,152036,152039,152041,152043,152045,152047,152049,152051,152054,152056,152058],{"class":78,"line":1770},[76,152037,152038],{"class":93},"        json.dump(students, ",[76,152040,45424],{"class":5288},[76,152042,12507],{"class":93},[76,152044,147178],{"class":5288},[76,152046,247],{"class":89},[76,152048,34057],{"class":250},[76,152050,12507],{"class":93},[76,152052,152053],{"class":5288},"indent",[76,152055,247],{"class":89},[76,152057,278],{"class":250},[76,152059,208],{"class":93},[76,152061,152062],{"class":78,"line":1799},[76,152063,2472],{"emptyLinePlaceholder":125},[76,152065,152066],{"class":78,"line":1804},[76,152067,2472],{"emptyLinePlaceholder":125},[76,152069,152070,152072,152075],{"class":78,"line":1821},[76,152071,32017],{"class":89},[76,152073,152074],{"class":2035}," show_menu",[76,152076,32023],{"class":93},[76,152078,152079,152081,152083,152086],{"class":78,"line":1826},[76,152080,31369],{"class":250},[76,152082,202],{"class":93},[76,152084,152085],{"class":305},"\"====== 学生管理系统 ======\"",[76,152087,208],{"class":93},[76,152089,152090,152092,152094,152097],{"class":78,"line":1831},[76,152091,31369],{"class":250},[76,152093,202],{"class":93},[76,152095,152096],{"class":305},"\"1. 添加学生\"",[76,152098,208],{"class":93},[76,152100,152101,152103,152105,152108],{"class":78,"line":1836},[76,152102,31369],{"class":250},[76,152104,202],{"class":93},[76,152106,152107],{"class":305},"\"2. 删除学生\"",[76,152109,208],{"class":93},[76,152111,152112,152114,152116,152119],{"class":78,"line":1850},[76,152113,31369],{"class":250},[76,152115,202],{"class":93},[76,152117,152118],{"class":305},"\"3. 修改学生\"",[76,152120,208],{"class":93},[76,152122,152123,152125,152127,152130],{"class":78,"line":1855},[76,152124,31369],{"class":250},[76,152126,202],{"class":93},[76,152128,152129],{"class":305},"\"4. 查询学生\"",[76,152131,208],{"class":93},[76,152133,152134,152136,152138,152141],{"class":78,"line":2649},[76,152135,31369],{"class":250},[76,152137,202],{"class":93},[76,152139,152140],{"class":305},"\"5. 显示所有学生\"",[76,152142,208],{"class":93},[76,152144,152145,152147,152149,152152],{"class":78,"line":2663},[76,152146,31369],{"class":250},[76,152148,202],{"class":93},[76,152150,152151],{"class":305},"\"0. 退出系统\"",[76,152153,208],{"class":93},[76,152155,152156],{"class":78,"line":2671},[76,152157,2472],{"emptyLinePlaceholder":125},[76,152159,152160],{"class":78,"line":2676},[76,152161,2472],{"emptyLinePlaceholder":125},[76,152163,152164,152166,152169],{"class":78,"line":2682},[76,152165,32017],{"class":89},[76,152167,152168],{"class":2035}," find_student",[76,152170,152171],{"class":93},"(students, student_id):\n",[76,152173,152174,152176,152179,152181],{"class":78,"line":2688},[76,152175,3273],{"class":89},[76,152177,152178],{"class":93}," student ",[76,152180,26116],{"class":89},[76,152182,152183],{"class":93}," students:\n",[76,152185,152186,152188,152191,152193,152195,152197],{"class":78,"line":2693},[76,152187,2569],{"class":89},[76,152189,152190],{"class":93}," student[",[76,152192,151488],{"class":305},[76,152194,4515],{"class":93},[76,152196,3021],{"class":89},[76,152198,152199],{"class":93}," student_id:\n",[76,152201,152202,152204],{"class":78,"line":8020},[76,152203,15804],{"class":89},[76,152205,152206],{"class":93}," student\n",[76,152208,152209,152211],{"class":78,"line":8044},[76,152210,4162],{"class":89},[76,152212,152213],{"class":250}," None\n",[76,152215,152216],{"class":78,"line":8049},[76,152217,2472],{"emptyLinePlaceholder":125},[76,152219,152220],{"class":78,"line":8055},[76,152221,2472],{"emptyLinePlaceholder":125},[76,152223,152224,152226,152229],{"class":78,"line":8082},[76,152225,32017],{"class":89},[76,152227,152228],{"class":2035}," input_int",[76,152230,152231],{"class":93},"(prompt):\n",[76,152233,152234,152236,152238],{"class":78,"line":8087},[76,152235,2323],{"class":89},[76,152237,95361],{"class":250},[76,152239,3811],{"class":93},[76,152241,152242,152245],{"class":78,"line":8093},[76,152243,152244],{"class":89},"        try",[76,152246,3811],{"class":93},[76,152248,152249,152251,152253,152255,152257],{"class":78,"line":8105},[76,152250,15804],{"class":89},[76,152252,2454],{"class":250},[76,152254,202],{"class":93},[76,152256,53891],{"class":250},[76,152258,152259],{"class":93},"(prompt))\n",[76,152261,152262,152265,152268],{"class":78,"line":8117},[76,152263,152264],{"class":89},"        except",[76,152266,152267],{"class":250}," ValueError",[76,152269,3811],{"class":93},[76,152271,152272,152274,152276,152279],{"class":78,"line":8129},[76,152273,34720],{"class":250},[76,152275,202],{"class":93},[76,152277,152278],{"class":305},"\"请输入整数\"",[76,152280,208],{"class":93},[76,152282,152283],{"class":78,"line":9788},[76,152284,2472],{"emptyLinePlaceholder":125},[76,152286,152287],{"class":78,"line":9813},[76,152288,2472],{"emptyLinePlaceholder":125},[76,152290,152291,152293,152296],{"class":78,"line":9836},[76,152292,32017],{"class":89},[76,152294,152295],{"class":2035}," input_float",[76,152297,152231],{"class":93},[76,152299,152300,152302,152304],{"class":78,"line":9860},[76,152301,2323],{"class":89},[76,152303,95361],{"class":250},[76,152305,3811],{"class":93},[76,152307,152308,152310],{"class":78,"line":9865},[76,152309,152244],{"class":89},[76,152311,3811],{"class":93},[76,152313,152314,152316,152318,152320,152322],{"class":78,"line":9870},[76,152315,15804],{"class":89},[76,152317,109838],{"class":250},[76,152319,202],{"class":93},[76,152321,53891],{"class":250},[76,152323,152259],{"class":93},[76,152325,152326,152328,152330],{"class":78,"line":9875},[76,152327,152264],{"class":89},[76,152329,152267],{"class":250},[76,152331,3811],{"class":93},[76,152333,152334,152336,152338,152341],{"class":78,"line":9884},[76,152335,34720],{"class":250},[76,152337,202],{"class":93},[76,152339,152340],{"class":305},"\"请输入数字\"",[76,152342,208],{"class":93},[76,152344,152345],{"class":78,"line":9889},[76,152346,2472],{"emptyLinePlaceholder":125},[76,152348,152349],{"class":78,"line":9895},[76,152350,2472],{"emptyLinePlaceholder":125},[76,152352,152353,152355,152358],{"class":78,"line":9916},[76,152354,32017],{"class":89},[76,152356,152357],{"class":2035}," add_student",[76,152359,152002],{"class":93},[76,152361,152362,152365,152367,152369,152371,152374],{"class":78,"line":9922},[76,152363,152364],{"class":93},"    student_id ",[76,152366,247],{"class":89},[76,152368,60675],{"class":250},[76,152370,202],{"class":93},[76,152372,152373],{"class":305},"\"请输入学号:\"",[76,152375,208],{"class":93},[76,152377,152378],{"class":78,"line":9936},[76,152379,2472],{"emptyLinePlaceholder":125},[76,152381,152382,152384],{"class":78,"line":9942},[76,152383,3173],{"class":89},[76,152385,152386],{"class":93}," find_student(students, student_id):\n",[76,152388,152389,152391,152393,152396],{"class":78,"line":9969},[76,152390,32521],{"class":250},[76,152392,202],{"class":93},[76,152394,152395],{"class":305},"\"学号已存在\"",[76,152397,208],{"class":93},[76,152399,152400],{"class":78,"line":9978},[76,152401,152402],{"class":89},"        return\n",[76,152404,152405],{"class":78,"line":9984},[76,152406,2472],{"emptyLinePlaceholder":125},[76,152408,152409,152412,152414,152416,152418,152421],{"class":78,"line":9992},[76,152410,152411],{"class":93},"    name ",[76,152413,247],{"class":89},[76,152415,60675],{"class":250},[76,152417,202],{"class":93},[76,152419,152420],{"class":305},"\"请输入姓名:\"",[76,152422,208],{"class":93},[76,152424,152425,152428,152430,152433,152436],{"class":78,"line":9997},[76,152426,152427],{"class":93},"    age ",[76,152429,247],{"class":89},[76,152431,152432],{"class":93}," input_int(",[76,152434,152435],{"class":305},"\"请输入年龄:\"",[76,152437,208],{"class":93},[76,152439,152440,152443,152445,152448,152451],{"class":78,"line":16676},[76,152441,152442],{"class":93},"    score ",[76,152444,247],{"class":89},[76,152446,152447],{"class":93}," input_float(",[76,152449,152450],{"class":305},"\"请输入成绩:\"",[76,152452,208],{"class":93},[76,152454,152455],{"class":78,"line":16682},[76,152456,2472],{"emptyLinePlaceholder":125},[76,152458,152459],{"class":78,"line":16705},[76,152460,152461],{"class":93},"    students.append({\n",[76,152463,152464,152467],{"class":78,"line":16711},[76,152465,152466],{"class":305},"        \"student_id\"",[76,152468,152469],{"class":93},": student_id,\n",[76,152471,152472,152475],{"class":78,"line":16734},[76,152473,152474],{"class":305},"        \"name\"",[76,152476,152477],{"class":93},": name,\n",[76,152479,152480,152483],{"class":78,"line":16748},[76,152481,152482],{"class":305},"        \"age\"",[76,152484,152485],{"class":93},": age,\n",[76,152487,152488,152491],{"class":78,"line":16768},[76,152489,152490],{"class":305},"        \"score\"",[76,152492,152493],{"class":93},": score,\n",[76,152495,152496],{"class":78,"line":16774},[76,152497,33531],{"class":93},[76,152499,152500],{"class":78,"line":16785},[76,152501,152502],{"class":93},"    save_students(students)\n",[76,152504,152505,152507,152509,152512],{"class":78,"line":16808},[76,152506,31369],{"class":250},[76,152508,202],{"class":93},[76,152510,152511],{"class":305},"\"添加成功\"",[76,152513,208],{"class":93},[76,152515,152516],{"class":78,"line":16830},[76,152517,2472],{"emptyLinePlaceholder":125},[76,152519,152520],{"class":78,"line":16835},[76,152521,2472],{"emptyLinePlaceholder":125},[76,152523,152524,152526,152529],{"class":78,"line":16841},[76,152525,32017],{"class":89},[76,152527,152528],{"class":2035}," delete_student",[76,152530,152002],{"class":93},[76,152532,152533,152535,152537,152539,152541,152544],{"class":78,"line":16855},[76,152534,152364],{"class":93},[76,152536,247],{"class":89},[76,152538,60675],{"class":250},[76,152540,202],{"class":93},[76,152542,152543],{"class":305},"\"请输入要删除的学号:\"",[76,152545,208],{"class":93},[76,152547,152548,152551,152553],{"class":78,"line":16868},[76,152549,152550],{"class":93},"    student ",[76,152552,247],{"class":89},[76,152554,152555],{"class":93}," find_student(students, student_id)\n",[76,152557,152558],{"class":78,"line":16873},[76,152559,2472],{"emptyLinePlaceholder":125},[76,152561,152562,152564,152566,152568,152570],{"class":78,"line":16887},[76,152563,3173],{"class":89},[76,152565,152178],{"class":93},[76,152567,38997],{"class":89},[76,152569,39003],{"class":250},[76,152571,3811],{"class":93},[76,152573,152574,152576,152578,152581],{"class":78,"line":16892},[76,152575,32521],{"class":250},[76,152577,202],{"class":93},[76,152579,152580],{"class":305},"\"学生不存在\"",[76,152582,208],{"class":93},[76,152584,152585],{"class":78,"line":16898},[76,152586,152402],{"class":89},[76,152588,152589],{"class":78,"line":16903},[76,152590,2472],{"emptyLinePlaceholder":125},[76,152592,152593],{"class":78,"line":16917},[76,152594,152595],{"class":93},"    students.remove(student)\n",[76,152597,152598],{"class":78,"line":16922},[76,152599,152502],{"class":93},[76,152601,152602,152604,152606,152609],{"class":78,"line":16927},[76,152603,31369],{"class":250},[76,152605,202],{"class":93},[76,152607,152608],{"class":305},"\"删除成功\"",[76,152610,208],{"class":93},[76,152612,152613],{"class":78,"line":16941},[76,152614,2472],{"emptyLinePlaceholder":125},[76,152616,152617],{"class":78,"line":16953},[76,152618,2472],{"emptyLinePlaceholder":125},[76,152620,152621,152623,152626],{"class":78,"line":16958},[76,152622,32017],{"class":89},[76,152624,152625],{"class":2035}," update_student",[76,152627,152002],{"class":93},[76,152629,152630,152632,152634,152636,152638,152641],{"class":78,"line":16971},[76,152631,152364],{"class":93},[76,152633,247],{"class":89},[76,152635,60675],{"class":250},[76,152637,202],{"class":93},[76,152639,152640],{"class":305},"\"请输入要修改的学号:\"",[76,152642,208],{"class":93},[76,152644,152645,152647,152649],{"class":78,"line":16976},[76,152646,152550],{"class":93},[76,152648,247],{"class":89},[76,152650,152555],{"class":93},[76,152652,152653],{"class":78,"line":16981},[76,152654,2472],{"emptyLinePlaceholder":125},[76,152656,152657,152659,152661,152663,152665],{"class":78,"line":16986},[76,152658,3173],{"class":89},[76,152660,152178],{"class":93},[76,152662,38997],{"class":89},[76,152664,39003],{"class":250},[76,152666,3811],{"class":93},[76,152668,152669,152671,152673,152675],{"class":78,"line":16999},[76,152670,32521],{"class":250},[76,152672,202],{"class":93},[76,152674,152580],{"class":305},[76,152676,208],{"class":93},[76,152678,152679],{"class":78,"line":17004},[76,152680,152402],{"class":89},[76,152682,152683],{"class":78,"line":32703},[76,152684,2472],{"emptyLinePlaceholder":125},[76,152686,152687,152689,152691,152693,152695,152698],{"class":78,"line":32709},[76,152688,152411],{"class":93},[76,152690,247],{"class":89},[76,152692,60675],{"class":250},[76,152694,202],{"class":93},[76,152696,152697],{"class":305},"\"请输入新姓名:\"",[76,152699,208],{"class":93},[76,152701,152702,152704,152706,152708,152711],{"class":78,"line":32715},[76,152703,152427],{"class":93},[76,152705,247],{"class":89},[76,152707,152432],{"class":93},[76,152709,152710],{"class":305},"\"请输入新年龄:\"",[76,152712,208],{"class":93},[76,152714,152715,152717,152719,152721,152724],{"class":78,"line":32721},[76,152716,152442],{"class":93},[76,152718,247],{"class":89},[76,152720,152447],{"class":93},[76,152722,152723],{"class":305},"\"请输入新成绩:\"",[76,152725,208],{"class":93},[76,152727,152728],{"class":78,"line":32727},[76,152729,2472],{"emptyLinePlaceholder":125},[76,152731,152732,152735,152737,152739,152741],{"class":78,"line":32738},[76,152733,152734],{"class":93},"    student[",[76,152736,62749],{"class":305},[76,152738,4515],{"class":93},[76,152740,247],{"class":89},[76,152742,149836],{"class":93},[76,152744,152745,152747,152749,152751,152753],{"class":78,"line":32744},[76,152746,152734],{"class":93},[76,152748,69194],{"class":305},[76,152750,4515],{"class":93},[76,152752,247],{"class":89},[76,152754,149848],{"class":93},[76,152756,152757,152759,152761,152763,152765],{"class":78,"line":32764},[76,152758,152734],{"class":93},[76,152760,151513],{"class":305},[76,152762,4515],{"class":93},[76,152764,247],{"class":89},[76,152766,1651],{"class":93},[76,152768,152769],{"class":78,"line":32770},[76,152770,2472],{"emptyLinePlaceholder":125},[76,152772,152773],{"class":78,"line":32781},[76,152774,152502],{"class":93},[76,152776,152777,152779,152781,152784],{"class":78,"line":32787},[76,152778,31369],{"class":250},[76,152780,202],{"class":93},[76,152782,152783],{"class":305},"\"修改成功\"",[76,152785,208],{"class":93},[76,152787,152788],{"class":78,"line":32793},[76,152789,2472],{"emptyLinePlaceholder":125},[76,152791,152792],{"class":78,"line":32799},[76,152793,2472],{"emptyLinePlaceholder":125},[76,152795,152796,152798,152801],{"class":78,"line":32805},[76,152797,32017],{"class":89},[76,152799,152800],{"class":2035}," query_student",[76,152802,152002],{"class":93},[76,152804,152805,152807,152809,152811,152813,152816],{"class":78,"line":32811},[76,152806,152364],{"class":93},[76,152808,247],{"class":89},[76,152810,60675],{"class":250},[76,152812,202],{"class":93},[76,152814,152815],{"class":305},"\"请输入要查询的学号:\"",[76,152817,208],{"class":93},[76,152819,152820,152822,152824],{"class":78,"line":32817},[76,152821,152550],{"class":93},[76,152823,247],{"class":89},[76,152825,152555],{"class":93},[76,152827,152828],{"class":78,"line":32823},[76,152829,2472],{"emptyLinePlaceholder":125},[76,152831,152832,152834,152836,152838,152840],{"class":78,"line":32843},[76,152833,3173],{"class":89},[76,152835,152178],{"class":93},[76,152837,38997],{"class":89},[76,152839,39003],{"class":250},[76,152841,3811],{"class":93},[76,152843,152844,152846,152848,152850],{"class":78,"line":32849},[76,152845,32521],{"class":250},[76,152847,202],{"class":93},[76,152849,152580],{"class":305},[76,152851,208],{"class":93},[76,152853,152854],{"class":78,"line":32865},[76,152855,152402],{"class":89},[76,152857,152858],{"class":78,"line":32871},[76,152859,2472],{"emptyLinePlaceholder":125},[76,152861,152862],{"class":78,"line":32885},[76,152863,152864],{"class":93},"    print_student(student)\n",[76,152866,152867],{"class":78,"line":32891},[76,152868,2472],{"emptyLinePlaceholder":125},[76,152870,152871],{"class":78,"line":32906},[76,152872,2472],{"emptyLinePlaceholder":125},[76,152874,152875,152877,152880],{"class":78,"line":32912},[76,152876,32017],{"class":89},[76,152878,152879],{"class":2035}," print_student",[76,152881,152882],{"class":93},"(student):\n",[76,152884,152885,152887],{"class":78,"line":32921},[76,152886,31369],{"class":250},[76,152888,151480],{"class":93},[76,152890,152891,152894,152896,152898,152901,152904,152906,152909],{"class":78,"line":32927},[76,152892,152893],{"class":89},"        f",[76,152895,452],{"class":305},[76,152897,1095],{"class":250},[76,152899,152900],{"class":93},"student[",[76,152902,152903],{"class":305},"'student_id'",[76,152905,1139],{"class":93},[76,152907,152908],{"class":250},"}\\t",[76,152910,25206],{"class":305},[76,152912,152913,152915,152917,152919,152921,152924,152926,152928],{"class":78,"line":32936},[76,152914,152893],{"class":89},[76,152916,452],{"class":305},[76,152918,1095],{"class":250},[76,152920,152900],{"class":93},[76,152922,152923],{"class":305},"'name'",[76,152925,1139],{"class":93},[76,152927,152908],{"class":250},[76,152929,25206],{"class":305},[76,152931,152932,152934,152936,152938,152940,152943,152945,152947],{"class":78,"line":32942},[76,152933,152893],{"class":89},[76,152935,452],{"class":305},[76,152937,1095],{"class":250},[76,152939,152900],{"class":93},[76,152941,152942],{"class":305},"'age'",[76,152944,1139],{"class":93},[76,152946,152908],{"class":250},[76,152948,25206],{"class":305},[76,152950,152951,152953,152955,152957,152959,152962,152964,152966],{"class":78,"line":32948},[76,152952,152893],{"class":89},[76,152954,452],{"class":305},[76,152956,1095],{"class":250},[76,152958,152900],{"class":93},[76,152960,152961],{"class":305},"'score'",[76,152963,1139],{"class":93},[76,152965,1145],{"class":250},[76,152967,25206],{"class":305},[76,152969,152970],{"class":78,"line":32957},[76,152971,152972],{"class":93},"    )\n",[76,152974,152975],{"class":78,"line":32963},[76,152976,2472],{"emptyLinePlaceholder":125},[76,152978,152979],{"class":78,"line":32974},[76,152980,2472],{"emptyLinePlaceholder":125},[76,152982,152983,152985,152988],{"class":78,"line":32980},[76,152984,32017],{"class":89},[76,152986,152987],{"class":2035}," show_all_students",[76,152989,152002],{"class":93},[76,152991,152992,152994,152996],{"class":78,"line":32999},[76,152993,3173],{"class":89},[76,152995,39000],{"class":89},[76,152997,152183],{"class":93},[76,152999,153000,153002,153004,153007],{"class":78,"line":33005},[76,153001,32521],{"class":250},[76,153003,202],{"class":93},[76,153005,153006],{"class":305},"\"暂无学生\"",[76,153008,208],{"class":93},[76,153010,153011],{"class":78,"line":33016},[76,153012,152402],{"class":89},[76,153014,153015],{"class":78,"line":33022},[76,153016,2472],{"emptyLinePlaceholder":125},[76,153018,153019,153021,153023,153026,153028,153031,153033,153036,153038,153041],{"class":78,"line":33042},[76,153020,31369],{"class":250},[76,153022,202],{"class":93},[76,153024,153025],{"class":305},"\"学号",[76,153027,1303],{"class":250},[76,153029,153030],{"class":305},"姓名",[76,153032,1303],{"class":250},[76,153034,153035],{"class":305},"年龄",[76,153037,1303],{"class":250},[76,153039,153040],{"class":305},"成绩\"",[76,153042,208],{"class":93},[76,153044,153045,153047,153049,153051],{"class":78,"line":33058},[76,153046,3273],{"class":89},[76,153048,152178],{"class":93},[76,153050,26116],{"class":89},[76,153052,152183],{"class":93},[76,153054,153055],{"class":78,"line":33064},[76,153056,153057],{"class":93},"        print_student(student)\n",[76,153059,153060],{"class":78,"line":33078},[76,153061,2472],{"emptyLinePlaceholder":125},[76,153063,153064],{"class":78,"line":33084},[76,153065,2472],{"emptyLinePlaceholder":125},[76,153067,153068,153070,153072],{"class":78,"line":33090},[76,153069,32017],{"class":89},[76,153071,2045],{"class":2035},[76,153073,32023],{"class":93},[76,153075,153076,153079,153081],{"class":78,"line":33101},[76,153077,153078],{"class":93},"    students ",[76,153080,247],{"class":89},[76,153082,153083],{"class":93}," load_students()\n",[76,153085,153086],{"class":78,"line":33107},[76,153087,2472],{"emptyLinePlaceholder":125},[76,153089,153090,153092,153094],{"class":78,"line":33113},[76,153091,2323],{"class":89},[76,153093,95361],{"class":250},[76,153095,3811],{"class":93},[76,153097,153098],{"class":78,"line":33123},[76,153099,153100],{"class":93},"        show_menu()\n",[76,153102,153103,153106,153108,153110,153112,153115],{"class":78,"line":33129},[76,153104,153105],{"class":93},"        choice ",[76,153107,247],{"class":89},[76,153109,60675],{"class":250},[76,153111,202],{"class":93},[76,153113,153114],{"class":305},"\"请输入操作:\"",[76,153116,208],{"class":93},[76,153118,153119],{"class":78,"line":33140},[76,153120,2472],{"emptyLinePlaceholder":125},[76,153122,153123,153125,153128,153130,153133],{"class":78,"line":33146},[76,153124,2569],{"class":89},[76,153126,153127],{"class":93}," choice ",[76,153129,3021],{"class":89},[76,153131,153132],{"class":305}," \"1\"",[76,153134,3811],{"class":93},[76,153136,153137],{"class":78,"line":33156},[76,153138,153139],{"class":93},"            add_student(students)\n",[76,153141,153142,153145,153147,153149,153152],{"class":78,"line":33161},[76,153143,153144],{"class":89},"        elif",[76,153146,153127],{"class":93},[76,153148,3021],{"class":89},[76,153150,153151],{"class":305}," \"2\"",[76,153153,3811],{"class":93},[76,153155,153156],{"class":78,"line":33167},[76,153157,153158],{"class":93},"            delete_student(students)\n",[76,153160,153161,153163,153165,153167,153170],{"class":78,"line":33216},[76,153162,153144],{"class":89},[76,153164,153127],{"class":93},[76,153166,3021],{"class":89},[76,153168,153169],{"class":305}," \"3\"",[76,153171,3811],{"class":93},[76,153173,153174],{"class":78,"line":33263},[76,153175,153176],{"class":93},"            update_student(students)\n",[76,153178,153179,153181,153183,153185,153188],{"class":78,"line":33268},[76,153180,153144],{"class":89},[76,153182,153127],{"class":93},[76,153184,3021],{"class":89},[76,153186,153187],{"class":305}," \"4\"",[76,153189,3811],{"class":93},[76,153191,153192],{"class":78,"line":33274},[76,153193,153194],{"class":93},"            query_student(students)\n",[76,153196,153197,153199,153201,153203,153206],{"class":78,"line":33293},[76,153198,153144],{"class":89},[76,153200,153127],{"class":93},[76,153202,3021],{"class":89},[76,153204,153205],{"class":305}," \"5\"",[76,153207,3811],{"class":93},[76,153209,153210],{"class":78,"line":33299},[76,153211,153212],{"class":93},"            show_all_students(students)\n",[76,153214,153215,153217,153219,153221,153224],{"class":78,"line":33319},[76,153216,153144],{"class":89},[76,153218,153127],{"class":93},[76,153220,3021],{"class":89},[76,153222,153223],{"class":305}," \"0\"",[76,153225,3811],{"class":93},[76,153227,153228,153230,153232,153235],{"class":78,"line":33325},[76,153229,34720],{"class":250},[76,153231,202],{"class":93},[76,153233,153234],{"class":305},"\"退出系统\"",[76,153236,208],{"class":93},[76,153238,153239],{"class":78,"line":33331},[76,153240,115139],{"class":89},[76,153242,153243,153245],{"class":78,"line":33341},[76,153244,2606],{"class":89},[76,153246,3811],{"class":93},[76,153248,153249,153251,153253,153256],{"class":78,"line":33346},[76,153250,34720],{"class":250},[76,153252,202],{"class":93},[76,153254,153255],{"class":305},"\"输入错误\"",[76,153257,208],{"class":93},[76,153259,153260],{"class":78,"line":33352},[76,153261,2472],{"emptyLinePlaceholder":125},[76,153263,153264],{"class":78,"line":33368},[76,153265,2472],{"emptyLinePlaceholder":125},[76,153267,153268,153270,153272,153274,153276],{"class":78,"line":33413},[76,153269,1603],{"class":89},[76,153271,31290],{"class":250},[76,153273,101600],{"class":89},[76,153275,101603],{"class":305},[76,153277,3811],{"class":93},[76,153279,153280],{"class":78,"line":33419},[76,153281,101610],{"class":93},[14,153283,153284],{},"这个项目串联了：",[152,153286,153287,153290,153293,153296,153299,153301],{},[155,153288,153289],{},"菜单循环。",[155,153291,153292],{},"函数封装。",[155,153294,153295],{},"列表字典。",[155,153297,153298],{},"JSON 读写。",[155,153300,151768],{},[155,153302,153303,28458],{},[73,153304,153305],{},"if __name__ == \"__main__\"",[140,153307,153309],{"id":153308},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153311,153312],{},"可以进一步拆成两个类：",[152,153314,153315,153320],{},[155,153316,153317,153319],{},[73,153318,149609],{},"：表示单个学生。",[155,153321,153322,153324],{},[73,153323,151635],{},"：负责学生增删改查和文件保存。",[14,153326,153327],{},"示意代码：",[67,153329,153331],{"className":69,"code":153330,"language":71,"meta":58,"style":58},"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",[73,153332,153333,153343,153347,153351,153355,153363,153370,153376,153382,153388,153392,153400,153406,153416,153426,153436,153446,153450,153454,153460,153468,153476,153484,153492,153500,153508],{"__ignoreMap":58},[76,153334,153335,153337,153339,153341],{"class":78,"line":79},[76,153336,30807],{"class":89},[76,153338,151193],{"class":93},[76,153340,90],{"class":89},[76,153342,151198],{"class":93},[76,153344,153345],{"class":78,"line":86},[76,153346,2472],{"emptyLinePlaceholder":125},[76,153348,153349],{"class":78,"line":97},[76,153350,2472],{"emptyLinePlaceholder":125},[76,153352,153353],{"class":78,"line":103},[76,153354,151211],{"class":2035},[76,153356,153357,153359,153361],{"class":78,"line":1273},[76,153358,14766],{"class":89},[76,153360,7970],{"class":2035},[76,153362,3811],{"class":93},[76,153364,153365,153368],{"class":78,"line":1287},[76,153366,153367],{"class":93},"    student_id: ",[76,153369,151227],{"class":250},[76,153371,153372,153374],{"class":78,"line":1293},[76,153373,151224],{"class":93},[76,153375,151227],{"class":250},[76,153377,153378,153380],{"class":78,"line":1384},[76,153379,151232],{"class":93},[76,153381,151235],{"class":250},[76,153383,153384,153386],{"class":78,"line":1390},[76,153385,151240],{"class":93},[76,153387,151243],{"class":250},[76,153389,153390],{"class":78,"line":1402},[76,153391,2472],{"emptyLinePlaceholder":125},[76,153393,153394,153396,153398],{"class":78,"line":1684},[76,153395,30871],{"class":89},[76,153397,151391],{"class":2035},[76,153399,30877],{"class":93},[76,153401,153402,153404],{"class":78,"line":1689},[76,153403,14824],{"class":89},[76,153405,15644],{"class":93},[76,153407,153408,153410,153412,153414],{"class":78,"line":1695},[76,153409,151404],{"class":305},[76,153411,51507],{"class":93},[76,153413,30893],{"class":250},[76,153415,151411],{"class":93},[76,153417,153418,153420,153422,153424],{"class":78,"line":1700},[76,153419,151416],{"class":305},[76,153421,51507],{"class":93},[76,153423,30893],{"class":250},[76,153425,151423],{"class":93},[76,153427,153428,153430,153432,153434],{"class":78,"line":1714},[76,153429,151428],{"class":305},[76,153431,51507],{"class":93},[76,153433,30893],{"class":250},[76,153435,151435],{"class":93},[76,153437,153438,153440,153442,153444],{"class":78,"line":1719},[76,153439,151440],{"class":305},[76,153441,51507],{"class":93},[76,153443,30893],{"class":250},[76,153445,151447],{"class":93},[76,153447,153448],{"class":78,"line":1725},[76,153449,2601],{"class":93},[76,153451,153452],{"class":78,"line":1746},[76,153453,2472],{"emptyLinePlaceholder":125},[76,153455,153456,153458],{"class":78,"line":1751},[76,153457,151055],{"class":2035},[76,153459,151058],{"class":250},[76,153461,153462,153464,153466],{"class":78,"line":1765},[76,153463,30871],{"class":89},[76,153465,151468],{"class":2035},[76,153467,151471],{"class":93},[76,153469,153470,153472,153474],{"class":78,"line":1770},[76,153471,14824],{"class":89},[76,153473,151075],{"class":250},[76,153475,151480],{"class":93},[76,153477,153478,153480,153482],{"class":78,"line":1799},[76,153479,151485],{"class":93},[76,153481,151488],{"class":305},[76,153483,87906],{"class":93},[76,153485,153486,153488,153490],{"class":78,"line":1804},[76,153487,151485],{"class":93},[76,153489,62749],{"class":305},[76,153491,87906],{"class":93},[76,153493,153494,153496,153498],{"class":78,"line":1821},[76,153495,151485],{"class":93},[76,153497,69194],{"class":305},[76,153499,87906],{"class":93},[76,153501,153502,153504,153506],{"class":78,"line":1826},[76,153503,151485],{"class":93},[76,153505,151513],{"class":305},[76,153507,87906],{"class":93},[76,153509,153510],{"class":78,"line":1831},[76,153511,38196],{"class":93},[14,153513,153514],{},"管理器示意：",[67,153516,153518],{"className":69,"code":153517,"language":71,"meta":58,"style":58},"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",[73,153519,153520,153529,153537,153548,153552,153562,153575,153586,153593,153599,153603,153612,153621,153627,153634],{"__ignoreMap":58},[76,153521,153522,153524,153527],{"class":78,"line":79},[76,153523,14766],{"class":89},[76,153525,153526],{"class":2035}," StudentManager",[76,153528,3811],{"class":93},[76,153530,153531,153533,153535],{"class":78,"line":86},[76,153532,30871],{"class":89},[76,153534,30874],{"class":250},[76,153536,30877],{"class":93},[76,153538,153539,153541,153544,153546],{"class":78,"line":97},[76,153540,30915],{"class":250},[76,153542,153543],{"class":93},".students ",[76,153545,247],{"class":89},[76,153547,51908],{"class":93},[76,153549,153550],{"class":78,"line":103},[76,153551,2472],{"emptyLinePlaceholder":125},[76,153553,153554,153556,153559],{"class":78,"line":1273},[76,153555,30871],{"class":89},[76,153557,153558],{"class":2035}," find_by_id",[76,153560,153561],{"class":93},"(self, student_id):\n",[76,153563,153564,153566,153568,153570,153572],{"class":78,"line":1287},[76,153565,3475],{"class":89},[76,153567,152178],{"class":93},[76,153569,26116],{"class":89},[76,153571,38943],{"class":250},[76,153573,153574],{"class":93},".students:\n",[76,153576,153577,153579,153582,153584],{"class":78,"line":1293},[76,153578,4714],{"class":89},[76,153580,153581],{"class":93}," student.student_id ",[76,153583,3021],{"class":89},[76,153585,152199],{"class":93},[76,153587,153588,153591],{"class":78,"line":1384},[76,153589,153590],{"class":89},"                return",[76,153592,152206],{"class":93},[76,153594,153595,153597],{"class":78,"line":1390},[76,153596,14824],{"class":89},[76,153598,152213],{"class":250},[76,153600,153601],{"class":78,"line":1402},[76,153602,2472],{"emptyLinePlaceholder":125},[76,153604,153605,153607,153609],{"class":78,"line":1684},[76,153606,30871],{"class":89},[76,153608,5281],{"class":2035},[76,153610,153611],{"class":93},"(self, student):\n",[76,153613,153614,153616,153618],{"class":78,"line":1689},[76,153615,2569],{"class":89},[76,153617,38943],{"class":250},[76,153619,153620],{"class":93},".find_by_id(student.student_id):\n",[76,153622,153623,153625],{"class":78,"line":1695},[76,153624,15804],{"class":89},[76,153626,125848],{"class":250},[76,153628,153629,153631],{"class":78,"line":1700},[76,153630,30915],{"class":250},[76,153632,153633],{"class":93},".students.append(student)\n",[76,153635,153636,153638],{"class":78,"line":1714},[76,153637,14824],{"class":89},[76,153639,153640],{"class":250}," True\n",[14,153642,153643],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[140,153645,153647],{"id":153646},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[169,153649,153651],{"id":153650},"_1251-数据结构","12.5.1 数据结构",[67,153653,153655],{"className":69,"code":153654,"language":71,"meta":58,"style":58},"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",[73,153656,153657,153665,153696,153726,153755,153784],{"__ignoreMap":58},[76,153658,153659,153661,153663],{"class":78,"line":79},[76,153660,148506],{"class":93},[76,153662,247],{"class":89},[76,153664,55517],{"class":93},[76,153666,153667,153669,153671,153673,153675,153677,153680,153682,153685,153687,153689,153691,153694],{"class":78,"line":86},[76,153668,148426],{"class":93},[76,153670,148038],{"class":305},[76,153672,51507],{"class":93},[76,153674,148649],{"class":305},[76,153676,12507],{"class":93},[76,153678,153679],{"class":305},"\"category\"",[76,153681,51507],{"class":93},[76,153683,153684],{"class":305},"\"手机\"",[76,153686,12507],{"class":93},[76,153688,84154],{"class":305},[76,153690,51507],{"class":93},[76,153692,153693],{"class":250},"12000",[76,153695,5002],{"class":93},[76,153697,153698,153700,153702,153704,153706,153708,153710,153712,153715,153717,153719,153721,153724],{"class":78,"line":97},[76,153699,148426],{"class":93},[76,153701,148038],{"class":305},[76,153703,51507],{"class":93},[76,153705,148649],{"class":305},[76,153707,12507],{"class":93},[76,153709,153679],{"class":305},[76,153711,51507],{"class":93},[76,153713,153714],{"class":305},"\"电脑\"",[76,153716,12507],{"class":93},[76,153718,84154],{"class":305},[76,153720,51507],{"class":93},[76,153722,153723],{"class":250},"18000",[76,153725,5002],{"class":93},[76,153727,153728,153730,153732,153734,153736,153738,153740,153742,153744,153746,153748,153750,153753],{"class":78,"line":103},[76,153729,148426],{"class":93},[76,153731,148038],{"class":305},[76,153733,51507],{"class":93},[76,153735,148670],{"class":305},[76,153737,12507],{"class":93},[76,153739,153679],{"class":305},[76,153741,51507],{"class":93},[76,153743,153684],{"class":305},[76,153745,12507],{"class":93},[76,153747,84154],{"class":305},[76,153749,51507],{"class":93},[76,153751,153752],{"class":250},"15000",[76,153754,5002],{"class":93},[76,153756,153757,153759,153761,153763,153765,153767,153769,153771,153773,153775,153777,153779,153782],{"class":78,"line":1273},[76,153758,148426],{"class":93},[76,153760,148038],{"class":305},[76,153762,51507],{"class":93},[76,153764,148670],{"class":305},[76,153766,12507],{"class":93},[76,153768,153679],{"class":305},[76,153770,51507],{"class":93},[76,153772,153714],{"class":305},[76,153774,12507],{"class":93},[76,153776,84154],{"class":305},[76,153778,51507],{"class":93},[76,153780,153781],{"class":250},"16000",[76,153783,5002],{"class":93},[76,153785,153786],{"class":78,"line":1287},[76,153787,33316],{"class":93},[169,153789,153791],{"id":153790},"_1252-按日期统计","12.5.2 按日期统计",[67,153793,153795],{"className":69,"code":153794,"language":71,"meta":58,"style":58},"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",[73,153796,153797,153806,153810,153821,153835,153848,153867,153871],{"__ignoreMap":58},[76,153798,153799,153802,153804],{"class":78,"line":79},[76,153800,153801],{"class":93},"daily_total ",[76,153803,247],{"class":89},[76,153805,87938],{"class":93},[76,153807,153808],{"class":78,"line":86},[76,153809,2472],{"emptyLinePlaceholder":125},[76,153811,153812,153814,153816,153818],{"class":78,"line":97},[76,153813,3097],{"class":89},[76,153815,148250],{"class":93},[76,153817,26116],{"class":89},[76,153819,153820],{"class":93}," sales:\n",[76,153822,153823,153826,153828,153831,153833],{"class":78,"line":103},[76,153824,153825],{"class":93},"    date ",[76,153827,247],{"class":89},[76,153829,153830],{"class":93}," item[",[76,153832,148038],{"class":305},[76,153834,33316],{"class":93},[76,153836,153837,153840,153842,153844,153846],{"class":78,"line":1273},[76,153838,153839],{"class":93},"    amount ",[76,153841,247],{"class":89},[76,153843,153830],{"class":93},[76,153845,84154],{"class":305},[76,153847,33316],{"class":93},[76,153849,153850,153853,153855,153858,153860,153862,153864],{"class":78,"line":1287},[76,153851,153852],{"class":93},"    daily_total[date] ",[76,153854,247],{"class":89},[76,153856,153857],{"class":93}," daily_total.get(date, ",[76,153859,392],{"class":250},[76,153861,13786],{"class":93},[76,153863,681],{"class":89},[76,153865,153866],{"class":93}," amount\n",[76,153868,153869],{"class":78,"line":1293},[76,153870,2472],{"emptyLinePlaceholder":125},[76,153872,153873,153875],{"class":78,"line":1384},[76,153874,30485],{"class":250},[76,153876,153877],{"class":93},"(daily_total)\n",[169,153879,153881],{"id":153880},"_1253-按类别统计","12.5.3 按类别统计",[67,153883,153885],{"className":69,"code":153884,"language":71,"meta":58,"style":58},"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",[73,153886,153887,153896,153900,153910,153923,153935,153953,153957],{"__ignoreMap":58},[76,153888,153889,153892,153894],{"class":78,"line":79},[76,153890,153891],{"class":93},"category_total ",[76,153893,247],{"class":89},[76,153895,87938],{"class":93},[76,153897,153898],{"class":78,"line":86},[76,153899,2472],{"emptyLinePlaceholder":125},[76,153901,153902,153904,153906,153908],{"class":78,"line":97},[76,153903,3097],{"class":89},[76,153905,148250],{"class":93},[76,153907,26116],{"class":89},[76,153909,153820],{"class":93},[76,153911,153912,153915,153917,153919,153921],{"class":78,"line":103},[76,153913,153914],{"class":93},"    category ",[76,153916,247],{"class":89},[76,153918,153830],{"class":93},[76,153920,153679],{"class":305},[76,153922,33316],{"class":93},[76,153924,153925,153927,153929,153931,153933],{"class":78,"line":1273},[76,153926,153839],{"class":93},[76,153928,247],{"class":89},[76,153930,153830],{"class":93},[76,153932,84154],{"class":305},[76,153934,33316],{"class":93},[76,153936,153937,153940,153942,153945,153947,153949,153951],{"class":78,"line":1287},[76,153938,153939],{"class":93},"    category_total[category] ",[76,153941,247],{"class":89},[76,153943,153944],{"class":93}," category_total.get(category, ",[76,153946,392],{"class":250},[76,153948,13786],{"class":93},[76,153950,681],{"class":89},[76,153952,153866],{"class":93},[76,153954,153955],{"class":78,"line":1293},[76,153956,2472],{"emptyLinePlaceholder":125},[76,153958,153959,153961],{"class":78,"line":1384},[76,153960,30485],{"class":250},[76,153962,153963],{"class":93},"(category_total)\n",[169,153965,153967],{"id":153966},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[67,153969,153971],{"className":69,"code":153970,"language":71,"meta":58,"style":58},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[73,153972,153973,153998],{"__ignoreMap":58},[76,153974,153975,153978,153980,153982,153985,153988,153991,153994,153996],{"class":78,"line":79},[76,153976,153977],{"class":93},"top_date, top_amount ",[76,153979,247],{"class":89},[76,153981,6023],{"class":250},[76,153983,153984],{"class":93},"(daily_total.items(), ",[76,153986,153987],{"class":5288},"key",[76,153989,153990],{"class":89},"=lambda",[76,153992,153993],{"class":93}," item: item[",[76,153995,418],{"class":250},[76,153997,4729],{"class":93},[76,153999,154000,154002],{"class":78,"line":86},[76,154001,30485],{"class":250},[76,154003,154004],{"class":93},"(top_date, top_amount)\n",[140,154006,154008],{"id":154007},"_126-绘制柱状图","12.6 绘制柱状图",[67,154010,154012],{"className":69,"code":154011,"language":71,"meta":58,"style":58},"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",[73,154013,154014,154028,154039,154043,154051,154063,154075,154086,154090,154094,154104,154115,154129,154134,154151,154168,154184,154188],{"__ignoreMap":58},[76,154015,154016,154018,154020,154022,154024,154026],{"class":78,"line":79},[76,154017,30807],{"class":89},[76,154019,147420],{"class":93},[76,154021,90],{"class":89},[76,154023,147425],{"class":93},[76,154025,31453],{"class":89},[76,154027,147430],{"class":93},[76,154029,154030,154032,154034,154036],{"class":78,"line":86},[76,154031,30807],{"class":89},[76,154033,147279],{"class":93},[76,154035,90],{"class":89},[76,154037,154038],{"class":93}," Bar\n",[76,154040,154041],{"class":78,"line":97},[76,154042,2472],{"emptyLinePlaceholder":125},[76,154044,154045,154047,154049],{"class":78,"line":103},[76,154046,153891],{"class":93},[76,154048,247],{"class":89},[76,154050,15644],{"class":93},[76,154052,154053,154056,154058,154061],{"class":78,"line":1273},[76,154054,154055],{"class":305},"    \"手机\"",[76,154057,51507],{"class":93},[76,154059,154060],{"class":250},"27000",[76,154062,31536],{"class":93},[76,154064,154065,154068,154070,154073],{"class":78,"line":1287},[76,154066,154067],{"class":305},"    \"电脑\"",[76,154069,51507],{"class":93},[76,154071,154072],{"class":250},"34000",[76,154074,31536],{"class":93},[76,154076,154077,154080,154082,154084],{"class":78,"line":1293},[76,154078,154079],{"class":305},"    \"耳机\"",[76,154081,51507],{"class":93},[76,154083,124440],{"class":250},[76,154085,31536],{"class":93},[76,154087,154088],{"class":78,"line":1384},[76,154089,1637],{"class":93},[76,154091,154092],{"class":78,"line":1390},[76,154093,2472],{"emptyLinePlaceholder":125},[76,154095,154096,154099,154101],{"class":78,"line":1402},[76,154097,154098],{"class":93},"bar ",[76,154100,247],{"class":89},[76,154102,154103],{"class":93}," Bar()\n",[76,154105,154106,154109,154112],{"class":78,"line":1684},[76,154107,154108],{"class":93},"bar.add_xaxis(",[76,154110,154111],{"class":250},"list",[76,154113,154114],{"class":93},"(category_total.keys()))\n",[76,154116,154117,154120,154122,154124,154126],{"class":78,"line":1689},[76,154118,154119],{"class":93},"bar.add_yaxis(",[76,154121,147336],{"class":305},[76,154123,12507],{"class":93},[76,154125,154111],{"class":250},[76,154127,154128],{"class":93},"(category_total.values()))\n",[76,154130,154131],{"class":78,"line":1695},[76,154132,154133],{"class":93},"bar.set_global_opts(\n",[76,154135,154136,154138,154140,154142,154144,154146,154149],{"class":78,"line":1700},[76,154137,147514],{"class":5288},[76,154139,247],{"class":89},[76,154141,147519],{"class":93},[76,154143,51477],{"class":5288},[76,154145,247],{"class":89},[76,154147,154148],{"class":305},"\"品类销售额\"",[76,154150,38117],{"class":93},[76,154152,154153,154155,154157,154159,154161,154163,154166],{"class":78,"line":1714},[76,154154,147533],{"class":5288},[76,154156,247],{"class":89},[76,154158,147538],{"class":93},[76,154160,79880],{"class":5288},[76,154162,247],{"class":89},[76,154164,154165],{"class":305},"\"品类\"",[76,154167,38117],{"class":93},[76,154169,154170,154172,154174,154176,154178,154180,154182],{"class":78,"line":1719},[76,154171,147552],{"class":5288},[76,154173,247],{"class":89},[76,154175,147538],{"class":93},[76,154177,79880],{"class":5288},[76,154179,247],{"class":89},[76,154181,147336],{"class":305},[76,154183,38117],{"class":93},[76,154185,154186],{"class":78,"line":1725},[76,154187,208],{"class":93},[76,154189,154190,154193,154196],{"class":78,"line":1746},[76,154191,154192],{"class":93},"bar.render(",[76,154194,154195],{"class":305},"\"category_sales.html\"",[76,154197,208],{"class":93},[140,154199,154201],{"id":154200},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154203,154204],{},"时间线适合展示不同日期、月份、年份的数据变化。",[67,154206,154208],{"className":69,"code":154207,"language":71,"meta":58,"style":58},"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",[73,154209,154210,154224,154235,154239,154247,154271,154294,154319,154323,154327,154337,154341,154352,154361,154371,154385,154416,154421,154425],{"__ignoreMap":58},[76,154211,154212,154214,154216,154218,154220,154222],{"class":78,"line":79},[76,154213,30807],{"class":89},[76,154215,147420],{"class":93},[76,154217,90],{"class":89},[76,154219,147425],{"class":93},[76,154221,31453],{"class":89},[76,154223,147430],{"class":93},[76,154225,154226,154228,154230,154232],{"class":78,"line":86},[76,154227,30807],{"class":89},[76,154229,147279],{"class":93},[76,154231,90],{"class":89},[76,154233,154234],{"class":93}," Bar, Timeline\n",[76,154236,154237],{"class":78,"line":97},[76,154238,2472],{"emptyLinePlaceholder":125},[76,154240,154241,154243,154245],{"class":78,"line":103},[76,154242,101699],{"class":93},[76,154244,247],{"class":89},[76,154246,15644],{"class":93},[76,154248,154249,154252,154255,154257,154259,154261,154263,154265,154267,154269],{"class":78,"line":1273},[76,154250,154251],{"class":305},"    \"2024-10-01\"",[76,154253,154254],{"class":93},": {",[76,154256,153684],{"class":305},[76,154258,51507],{"class":93},[76,154260,153693],{"class":250},[76,154262,12507],{"class":93},[76,154264,153714],{"class":305},[76,154266,51507],{"class":93},[76,154268,153723],{"class":250},[76,154270,5002],{"class":93},[76,154272,154273,154276,154278,154280,154282,154284,154286,154288,154290,154292],{"class":78,"line":1287},[76,154274,154275],{"class":305},"    \"2024-10-02\"",[76,154277,154254],{"class":93},[76,154279,153684],{"class":305},[76,154281,51507],{"class":93},[76,154283,153752],{"class":250},[76,154285,12507],{"class":93},[76,154287,153714],{"class":305},[76,154289,51507],{"class":93},[76,154291,153781],{"class":250},[76,154293,5002],{"class":93},[76,154295,154296,154299,154301,154303,154305,154308,154310,154312,154314,154317],{"class":78,"line":1293},[76,154297,154298],{"class":305},"    \"2024-10-03\"",[76,154300,154254],{"class":93},[76,154302,153684],{"class":305},[76,154304,51507],{"class":93},[76,154306,154307],{"class":250},"17000",[76,154309,12507],{"class":93},[76,154311,153714],{"class":305},[76,154313,51507],{"class":93},[76,154315,154316],{"class":250},"19000",[76,154318,5002],{"class":93},[76,154320,154321],{"class":78,"line":1384},[76,154322,1637],{"class":93},[76,154324,154325],{"class":78,"line":1390},[76,154326,2472],{"emptyLinePlaceholder":125},[76,154328,154329,154332,154334],{"class":78,"line":1402},[76,154330,154331],{"class":93},"timeline ",[76,154333,247],{"class":89},[76,154335,154336],{"class":93}," Timeline()\n",[76,154338,154339],{"class":78,"line":1684},[76,154340,2472],{"emptyLinePlaceholder":125},[76,154342,154343,154345,154348,154350],{"class":78,"line":1689},[76,154344,3097],{"class":89},[76,154346,154347],{"class":93}," date, category_data ",[76,154349,26116],{"class":89},[76,154351,149189],{"class":93},[76,154353,154354,154357,154359],{"class":78,"line":1695},[76,154355,154356],{"class":93},"    bar ",[76,154358,247],{"class":89},[76,154360,154103],{"class":93},[76,154362,154363,154366,154368],{"class":78,"line":1700},[76,154364,154365],{"class":93},"    bar.add_xaxis(",[76,154367,154111],{"class":250},[76,154369,154370],{"class":93},"(category_data.keys()))\n",[76,154372,154373,154376,154378,154380,154382],{"class":78,"line":1714},[76,154374,154375],{"class":93},"    bar.add_yaxis(",[76,154377,147336],{"class":305},[76,154379,12507],{"class":93},[76,154381,154111],{"class":250},[76,154383,154384],{"class":93},"(category_data.values()))\n",[76,154386,154387,154390,154393,154395,154397,154399,154401,154403,154405,154407,154409,154411,154414],{"class":78,"line":1719},[76,154388,154389],{"class":93},"    bar.set_global_opts(",[76,154391,154392],{"class":5288},"title_opts",[76,154394,247],{"class":89},[76,154396,147519],{"class":93},[76,154398,51477],{"class":5288},[76,154400,247],{"class":89},[76,154402,254],{"class":89},[76,154404,452],{"class":305},[76,154406,1095],{"class":250},[76,154408,73996],{"class":93},[76,154410,1145],{"class":250},[76,154412,154413],{"class":305},"销售额\"",[76,154415,30567],{"class":93},[76,154417,154418],{"class":78,"line":1725},[76,154419,154420],{"class":93},"    timeline.add(bar, date)\n",[76,154422,154423],{"class":78,"line":1746},[76,154424,2472],{"emptyLinePlaceholder":125},[76,154426,154427,154430,154433],{"class":78,"line":1751},[76,154428,154429],{"class":93},"timeline.render(",[76,154431,154432],{"class":305},"\"timeline_sales.html\"",[76,154434,208],{"class":93},[140,154436,154438],{"id":154437},"_128-绘制地图","12.8 绘制地图",[14,154440,154441],{},"地图适合展示地区数据。",[67,154443,154445],{"className":69,"code":154444,"language":71,"meta":58,"style":58},"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",[73,154446,154447,154461,154472,154476,154484,154497,154509,154522,154535,154539,154543,154553,154568,154573,154590,154609,154613],{"__ignoreMap":58},[76,154448,154449,154451,154453,154455,154457,154459],{"class":78,"line":79},[76,154450,30807],{"class":89},[76,154452,147420],{"class":93},[76,154454,90],{"class":89},[76,154456,147425],{"class":93},[76,154458,31453],{"class":89},[76,154460,147430],{"class":93},[76,154462,154463,154465,154467,154469],{"class":78,"line":86},[76,154464,30807],{"class":89},[76,154466,147279],{"class":93},[76,154468,90],{"class":89},[76,154470,154471],{"class":93}," Map\n",[76,154473,154474],{"class":78,"line":97},[76,154475,2472],{"emptyLinePlaceholder":125},[76,154477,154478,154480,154482],{"class":78,"line":103},[76,154479,101699],{"class":93},[76,154481,247],{"class":89},[76,154483,55517],{"class":93},[76,154485,154486,154489,154491,154493,154495],{"class":78,"line":1273},[76,154487,154488],{"class":93},"    (",[76,154490,69339],{"class":305},[76,154492,12507],{"class":93},[76,154494,1016],{"class":250},[76,154496,38117],{"class":93},[76,154498,154499,154501,154503,154505,154507],{"class":78,"line":1287},[76,154500,154488],{"class":93},[76,154502,69359],{"class":305},[76,154504,12507],{"class":93},[76,154506,147353],{"class":250},[76,154508,38117],{"class":93},[76,154510,154511,154513,154516,154518,154520],{"class":78,"line":1293},[76,154512,154488],{"class":93},[76,154514,154515],{"class":305},"\"广东\"",[76,154517,12507],{"class":93},[76,154519,1794],{"class":250},[76,154521,38117],{"class":93},[76,154523,154524,154526,154529,154531,154533],{"class":78,"line":1384},[76,154525,154488],{"class":93},[76,154527,154528],{"class":305},"\"浙江\"",[76,154530,12507],{"class":93},[76,154532,147358],{"class":250},[76,154534,38117],{"class":93},[76,154536,154537],{"class":78,"line":1390},[76,154538,33316],{"class":93},[76,154540,154541],{"class":78,"line":1402},[76,154542,2472],{"emptyLinePlaceholder":125},[76,154544,154545,154548,154550],{"class":78,"line":1684},[76,154546,154547],{"class":93},"map_chart ",[76,154549,247],{"class":89},[76,154551,154552],{"class":93}," Map()\n",[76,154554,154555,154558,154560,154563,154566],{"class":78,"line":1689},[76,154556,154557],{"class":93},"map_chart.add(",[76,154559,147336],{"class":305},[76,154561,154562],{"class":93},", data, ",[76,154564,154565],{"class":305},"\"china\"",[76,154567,208],{"class":93},[76,154569,154570],{"class":78,"line":1695},[76,154571,154572],{"class":93},"map_chart.set_global_opts(\n",[76,154574,154575,154577,154579,154581,154583,154585,154588],{"class":78,"line":1700},[76,154576,147514],{"class":5288},[76,154578,247],{"class":89},[76,154580,147519],{"class":93},[76,154582,51477],{"class":5288},[76,154584,247],{"class":89},[76,154586,154587],{"class":305},"\"地区销售额\"",[76,154589,38117],{"class":93},[76,154591,154592,154595,154597,154600,154603,154605,154607],{"class":78,"line":1714},[76,154593,154594],{"class":5288},"    visualmap_opts",[76,154596,247],{"class":89},[76,154598,154599],{"class":93},"opts.VisualMapOpts(",[76,154601,154602],{"class":5288},"max_",[76,154604,247],{"class":89},[76,154606,1794],{"class":250},[76,154608,38117],{"class":93},[76,154610,154611],{"class":78,"line":1719},[76,154612,208],{"class":93},[76,154614,154615,154618,154621],{"class":78,"line":1725},[76,154616,154617],{"class":93},"map_chart.render(",[76,154619,154620],{"class":305},"\"map_sales.html\"",[76,154622,208],{"class":93},[14,154624,154625],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[140,154627,154629],{"id":154628},"_129-项目拆分建议","12.9 项目拆分建议",[14,154631,154632],{},"当代码超过一个文件时，可以这样组织：",[67,154634,154637],{"className":154635,"code":154636,"language":5259,"meta":58},[5257],"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",[73,154638,154636],{"__ignoreMap":58},[14,154640,154641],{},"职责：",[152,154643,154644,154650,154656,154662],{},[155,154645,154646,154649],{},[73,154647,154648],{},"main.py","：程序入口。",[155,154651,154652,154655],{},[73,154653,154654],{},"file_utils.py","：读写 JSON。",[155,154657,154658,154661],{},[73,154659,154660],{},"sales_service.py","：统计销售数据。",[155,154663,154664,154667],{},[73,154665,154666],{},"chart_builder.py","：生成图表。",[140,154669,154671],{"id":154670},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154673,154674],{},"语法基础：",[152,154676,154677,154680,154683,154686],{},[155,154678,154679],{},"会写变量、注释、输入输出。",[155,154681,154682],{},"会使用 int、float、str、bool。",[155,154684,154685],{},"会做类型转换。",[155,154687,154688],{},"会使用 f-string 格式化输出。",[14,154690,154691],{},"流程控制：",[152,154693,154694,154700,154706,154714],{},[155,154695,154696,154697,28458],{},"会写 ",[73,154698,154699],{},"if elif else",[155,154701,154696,154702,101059,154704,28458],{},[73,154703,108704],{},[73,154705,3097],{},[155,154707,154708,154709,101059,154711,28458],{},"理解 ",[73,154710,2125],{},[73,154712,154713],{},"continue",[155,154715,154716],{},"能写嵌套循环。",[14,154718,154719],{},"函数：",[152,154721,154722,154725,154728,154731],{},[155,154723,154724],{},"会定义和调用函数。",[155,154726,154727],{},"理解参数和返回值。",[155,154729,154730],{},"知道局部变量和全局变量。",[155,154732,154733],{},"会使用默认参数、关键字参数、不定长参数。",[14,154735,154736],{},"容器：",[152,154738,154739,154742,154745,154748,154751],{},[155,154740,154741],{},"会使用列表增删改查。",[155,154743,154744],{},"会遍历列表、字典。",[155,154746,154747],{},"会使用切片。",[155,154749,154750],{},"会用集合去重。",[155,154752,154753],{},"会处理列表嵌套字典。",[14,154755,154756],{},"文件和模块：",[152,154758,154759,154762,154765,154768,154771],{},[155,154760,154761],{},"会读写文本文件。",[155,154763,154764],{},"会读写 JSON。",[155,154766,154767],{},"会捕获常见异常。",[155,154769,154770],{},"会导入模块和第三方包。",[155,154772,154773],{},"会创建简单包结构。",[14,154775,154776],{},"项目能力：",[152,154778,154779,154782,154785,154788,154791],{},[155,154780,154781],{},"能把代码拆成函数。",[155,154783,154784],{},"能把数据保存到文件。",[155,154786,154787],{},"能处理用户输入错误。",[155,154789,154790],{},"能写一个完整菜单程序。",[155,154792,154793],{},"能用 pyecharts 生成图表。",[140,154795,154797],{"id":154796},"_1211-推荐练习顺序","12.11 推荐练习顺序",[152,154799,154800,154803,154806,154809,154812,154815,154818,154821],{},[155,154801,154802],{},"猜数字游戏。",[155,154804,154805],{},"ATM 菜单程序。",[155,154807,154808],{},"学生成绩统计。",[155,154810,154811],{},"学生管理系统函数版。",[155,154813,154814],{},"学生管理系统文件持久化版。",[155,154816,154817],{},"学生管理系统面向对象版。",[155,154819,154820],{},"销售数据统计。",[155,154822,154823],{},"销售数据可视化。",[140,154825,154827],{"id":154826},"_1212-常见学习误区","12.12 常见学习误区",[152,154829,154830,154833,154836,154839,154842,154845,154848],{},[155,154831,154832],{},"只看视频不敲代码。",[155,154834,154835],{},"一报错就复制错误去搜，不先读报错位置。",[155,154837,154838],{},"变量名随便写，后续自己看不懂。",[155,154840,154841],{},"所有代码都写在一个文件一个函数里。",[155,154843,154844],{},"不保存练习代码，复习时没有材料。",[155,154846,154847],{},"还没掌握列表字典就急着学框架。",[155,154849,154850],{},"不会读官方文档，只依赖教程。",[140,154852,154854],{"id":154853},"_1213-如何读报错","12.13 如何读报错",[14,154856,154857],{},"报错通常从下往上看最后几行。",[14,154859,15207],{},[67,154861,154864],{"className":154862,"code":154863,"language":5259,"meta":58},[5257],"ValueError: invalid literal for int() with base 10: 'abc'\n",[73,154865,154863],{"__ignoreMap":58},[14,154867,24672],{},[152,154869,154870,154876,154886],{},[155,154871,154872,154873,28458],{},"异常类型是 ",[73,154874,154875],{},"ValueError",[155,154877,107386,154878,154881,154882,154885],{},[73,154879,154880],{},"int()"," 无法把 ",[73,154883,154884],{},"'abc'"," 转成整数。",[155,154887,154888],{},"应该检查输入内容或增加异常处理。",[14,154890,154891],{},"再看文件名和行号：",[67,154893,154896],{"className":154894,"code":154895,"language":5259,"meta":58},[5257],"File \"main.py\", line 10, in \u003Cmodule>\n",[73,154897,154895],{"__ignoreMap":58},[14,154899,154900,154901,154903],{},"表示错误发生在 ",[73,154902,154648],{}," 第 10 行。",[140,154905,154907],{"id":154906},"_1214-后续学习方向","12.14 后续学习方向",[14,154909,154910],{},"Python 基础完成后，可以按兴趣选择方向：",[152,154912,154913,154925,154934,154946,154957,154966,154976],{},[155,154914,154915,154916,413,154919,413,154922,28458],{},"自动化办公：",[73,154917,154918],{},"openpyxl",[73,154920,154921],{},"python-docx",[73,154923,154924],{},"pdfplumber",[155,154926,154927,154928,413,154930,413,154932,28458],{},"数据分析：",[73,154929,100667],{},[73,154931,146226],{},[73,154933,146234],{},[155,154935,154936,154937,413,154940,413,154943,28458],{},"Web 后端：",[73,154938,154939],{},"Flask",[73,154941,154942],{},"FastAPI",[73,154944,154945],{},"Django",[155,154947,154948,154949,413,154951,413,154954,28458],{},"爬虫：",[73,154950,146211],{},[73,154952,154953],{},"BeautifulSoup",[73,154955,154956],{},"Scrapy",[155,154958,154959,154960,413,154962,154965],{},"测试开发：",[73,154961,146258],{},[73,154963,154964],{},"selenium","、接口测试。",[155,154967,154968,154969,413,154971,413,154973,28458],{},"人工智能：",[73,154970,100667],{},[73,154972,146226],{},[73,154974,154975],{},"pytorch",[155,154977,154978,154979,413,154981,413,154984,28458],{},"运维脚本：",[73,154980,145827],{},[73,154982,154983],{},"subprocess",[73,154985,154986],{},"paramiko",[14,154988,154989],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[140,154991,154993],{"id":154992},"_1215-结课练习","12.15 结课练习",[152,154995,154996,154999,155002,155005,155008,155011,155014,155017],{},[155,154997,154998],{},"完成函数版学生管理系统。",[155,155000,155001],{},"给学生管理系统增加 JSON 持久化。",[155,155003,155004],{},"给学生管理系统增加异常处理。",[155,155006,155007],{},"把学生管理系统改成面向对象版。",[155,155009,155010],{},"使用 pyecharts 绘制学生成绩柱状图。",[155,155012,155013],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[155,155015,155016],{},"按品类统计销售额并绘制柱状图。",[155,155018,155019],{},"写一份自己的 Python 学习路线图。",[117,155021,155022],{},"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":58,"searchDepth":86,"depth":86,"links":155024},[155025,155026,155029,155030,155031,155037,155038,155039,155040,155041,155042,155043,155044,155045,155046],{"id":151741,"depth":86,"text":151742},{"id":151791,"depth":86,"text":151792,"children":155027},[155028],{"id":151795,"depth":97,"text":151796},{"id":151834,"depth":86,"text":151835},{"id":153308,"depth":86,"text":153309},{"id":153646,"depth":86,"text":153647,"children":155032},[155033,155034,155035,155036],{"id":153650,"depth":97,"text":153651},{"id":153790,"depth":97,"text":153791},{"id":153880,"depth":97,"text":153881},{"id":153966,"depth":97,"text":153967},{"id":154007,"depth":86,"text":154008},{"id":154200,"depth":86,"text":154201},{"id":154437,"depth":86,"text":154438},{"id":154628,"depth":86,"text":154629},{"id":154670,"depth":86,"text":154671},{"id":154796,"depth":86,"text":154797},{"id":154826,"depth":86,"text":154827},{"id":154853,"depth":86,"text":154854},{"id":154906,"depth":86,"text":154907},{"id":154992,"depth":86,"text":154993},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151733,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155053,"title":155054,"body":155055,"description":122,"extension":123,"meta":157524,"navigation":125,"path":157525,"seo":157526,"stem":157527,"__hash__":157528},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155056,"toc":157499},[155057,155060,155064,155067,155070,155090,155093,155116,155119,155122,155144,155147,155169,155173,155176,155216,155219,155340,155344,155347,155387,155390,155414,155417,155421,155424,155438,155471,155474,155509,155512,155535,155538,155571,155574,155576,155582,155657,155660,155666,155683,155723,155727,155730,155776,155778,155816,155819,155854,155857,155892,155895,155927,155930,155949,155953,155957,156070,156072,156147,156151,156197,156200,156226,156235,156239,156242,156305,156313,156341,156345,156385,156450,156454,156457,156496,156499,156544,156547,156608,156612,156639,156642,156670,156673,156677,156681,156746,156749,156787,156790,156822,156826,156925,156929,156932,157005,157008,157056,157060,157066,157106,157109,157156,157159,157208,157212,157214,157228,157230,157411,157415,157442,157462,157469,157473,157490,157496],[10,155058,155054],{"id":155059},"_2-基础语法变量与字符串",[140,155061,155063],{"id":155062},"_21-注释","2.1 注释",[14,155065,155066],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155068,155069],{},"单行注释：",[67,155071,155073],{"className":69,"code":155072,"language":71,"meta":58,"style":58},"# 这是单行注释\nprint(\"hello\")\n",[73,155074,155075,155080],{"__ignoreMap":58},[76,155076,155077],{"class":78,"line":79},[76,155078,155079],{"class":82},"# 这是单行注释\n",[76,155081,155082,155084,155086,155088],{"class":78,"line":86},[76,155083,30485],{"class":250},[76,155085,202],{"class":93},[76,155087,5916],{"class":305},[76,155089,208],{"class":93},[14,155091,155092],{},"多行说明常用三引号：",[67,155094,155096],{"className":69,"code":155095,"language":71,"meta":58,"style":58},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[73,155097,155098,155102,155107,155112],{"__ignoreMap":58},[76,155099,155100],{"class":78,"line":79},[76,155101,95767],{"class":305},[76,155103,155104],{"class":78,"line":86},[76,155105,155106],{"class":305},"这是多行说明。\n",[76,155108,155109],{"class":78,"line":97},[76,155110,155111],{"class":305},"常用于文件顶部说明、函数说明等。\n",[76,155113,155114],{"class":78,"line":103},[76,155115,95767],{"class":305},[14,155117,155118],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155120,155121],{},"不好：",[67,155123,155125],{"className":69,"code":155124,"language":71,"meta":58,"style":58},"# age 加 1\nage = age + 1\n",[73,155126,155127,155132],{"__ignoreMap":58},[76,155128,155129],{"class":78,"line":79},[76,155130,155131],{"class":82},"# age 加 1\n",[76,155133,155134,155136,155138,155140,155142],{"class":78,"line":86},[76,155135,146587],{"class":93},[76,155137,247],{"class":89},[76,155139,15779],{"class":93},[76,155141,681],{"class":89},[76,155143,55769],{"class":250},[14,155145,155146],{},"较好：",[67,155148,155150],{"className":69,"code":155149,"language":71,"meta":58,"style":58},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[73,155151,155152,155157],{"__ignoreMap":58},[76,155153,155154],{"class":78,"line":79},[76,155155,155156],{"class":82},"# 用户过完生日后，年龄增加一岁\n",[76,155158,155159,155161,155163,155165,155167],{"class":78,"line":86},[76,155160,146587],{"class":93},[76,155162,247],{"class":89},[76,155164,15779],{"class":93},[76,155166,681],{"class":89},[76,155168,55769],{"class":250},[140,155170,155172],{"id":155171},"_22-字面量","2.2 字面量",[14,155174,155175],{},"字面量就是代码中直接写出来的数据。",[67,155177,155179],{"className":69,"code":155178,"language":71,"meta":58,"style":58},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[73,155180,155181,155188,155195,155202,155209],{"__ignoreMap":58},[76,155182,155183,155185],{"class":78,"line":79},[76,155184,512],{"class":250},[76,155186,155187],{"class":82},"          # 整数\n",[76,155189,155190,155192],{"class":78,"line":86},[76,155191,251],{"class":250},[76,155193,155194],{"class":82},"         # 小数\n",[76,155196,155197,155199],{"class":78,"line":97},[76,155198,5916],{"class":305},[76,155200,155201],{"class":82},"      # 字符串\n",[76,155203,155204,155206],{"class":78,"line":103},[76,155205,31546],{"class":250},[76,155207,155208],{"class":82},"         # 布尔值\n",[76,155210,155211,155213],{"class":78,"line":1273},[76,155212,95755],{"class":250},[76,155214,155215],{"class":82},"         # 空值\n",[14,155217,155218],{},"常见字面量类型：",[338,155220,155221,155231],{},[341,155222,155223],{},[344,155224,155225,155227,155229],{},[347,155226,23809],{},[347,155228,27565],{},[347,155230,25942],{},[385,155232,155233,155244,155255,155266,155278,155290,155302,155315,155327],{},[344,155234,155235,155237,155241],{},[390,155236,205],{},[390,155238,155239],{},[73,155240,512],{},[390,155242,155243],{},"整数",[344,155245,155246,155248,155252],{},[390,155247,241],{},[390,155249,155250],{},[73,155251,251],{},[390,155253,155254],{},"浮点数",[344,155256,155257,155259,155263],{},[390,155258,1372],{},[390,155260,155261],{},[73,155262,5916],{},[390,155264,155265],{},"字符串",[344,155267,155268,155270,155276],{},[390,155269,1427],{},[390,155271,155272,413,155274],{},[73,155273,31546],{},[73,155275,34057],{},[390,155277,66085],{},[344,155279,155280,155283,155287],{},[390,155281,155282],{},"NoneType",[390,155284,155285],{},[73,155286,95755],{},[390,155288,155289],{},"空值",[344,155291,155292,155294,155299],{},[390,155293,154111],{},[390,155295,155296],{},[73,155297,155298],{},"[1, 2, 3]",[390,155300,155301],{},"列表",[344,155303,155304,155307,155312],{},[390,155305,155306],{},"tuple",[390,155308,155309],{},[73,155310,155311],{},"(1, 2, 3)",[390,155313,155314],{},"元组",[344,155316,155317,155319,155324],{},[390,155318,114587],{},[390,155320,155321],{},[73,155322,155323],{},"{\"name\": \"张三\"}",[390,155325,155326],{},"字典",[344,155328,155329,155332,155337],{},[390,155330,155331],{},"set",[390,155333,155334],{},[73,155335,155336],{},"{1, 2, 3}",[390,155338,155339],{},"集合",[140,155341,155343],{"id":155342},"_23-变量","2.3 变量",[14,155345,155346],{},"变量是保存数据的名字。",[67,155348,155350],{"className":69,"code":155349,"language":71,"meta":58,"style":58},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[73,155351,155352,155360,155368,155378],{"__ignoreMap":58},[76,155353,155354,155356,155358],{"class":78,"line":79},[76,155355,146577],{"class":93},[76,155357,247],{"class":89},[76,155359,149394],{"class":305},[76,155361,155362,155364,155366],{"class":78,"line":86},[76,155363,146587],{"class":93},[76,155365,247],{"class":89},[76,155367,146592],{"class":250},[76,155369,155370,155373,155375],{"class":78,"line":97},[76,155371,155372],{"class":93},"height ",[76,155374,247],{"class":89},[76,155376,155377],{"class":250}," 1.75\n",[76,155379,155380,155383,155385],{"class":78,"line":103},[76,155381,155382],{"class":93},"is_student ",[76,155384,247],{"class":89},[76,155386,153640],{"class":250},[14,155388,155389],{},"Python 的变量不需要提前声明类型：",[67,155391,155393],{"className":69,"code":155392,"language":71,"meta":58,"style":58},"score = 100\nscore = \"满分\"\n",[73,155394,155395,155405],{"__ignoreMap":58},[76,155396,155397,155400,155402],{"class":78,"line":79},[76,155398,155399],{"class":93},"score ",[76,155401,247],{"class":89},[76,155403,155404],{"class":250}," 100\n",[76,155406,155407,155409,155411],{"class":78,"line":86},[76,155408,155399],{"class":93},[76,155410,247],{"class":89},[76,155412,155413],{"class":305}," \"满分\"\n",[14,155415,155416],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[140,155418,155420],{"id":155419},"_24-变量命名规则","2.4 变量命名规则",[14,155422,155423],{},"硬性规则：",[152,155425,155426,155429,155432,155435],{},[155,155427,155428],{},"只能由字母、数字、下划线组成。",[155,155430,155431],{},"不能以数字开头。",[155,155433,155434],{},"不能使用 Python 关键字。",[155,155436,155437],{},"区分大小写。",[67,155439,155441],{"className":69,"code":155440,"language":71,"meta":58,"style":58},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[73,155442,155443,155452,155461],{"__ignoreMap":58},[76,155444,155445,155448,155450],{"class":78,"line":79},[76,155446,155447],{"class":93},"user_name ",[76,155449,247],{"class":89},[76,155451,146582],{"class":305},[76,155453,155454,155457,155459],{"class":78,"line":86},[76,155455,155456],{"class":93},"age2 ",[76,155458,247],{"class":89},[76,155460,146592],{"class":250},[76,155462,155463,155466,155468],{"class":78,"line":97},[76,155464,155465],{"class":93},"_token ",[76,155467,247],{"class":89},[76,155469,155470],{"class":305}," \"abc\"\n",[14,155472,155473],{},"错误写法：",[67,155475,155477],{"className":69,"code":155476,"language":71,"meta":58,"style":58},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[73,155478,155479,155488,155500],{"__ignoreMap":58},[76,155480,155481,155484,155486],{"class":78,"line":79},[76,155482,155483],{"class":77473},"2age",[76,155485,13636],{"class":89},[76,155487,146592],{"class":250},[76,155489,155490,155492,155494,155496,155498],{"class":78,"line":86},[76,155491,131625],{"class":93},[76,155493,112],{"class":89},[76,155495,146577],{"class":93},[76,155497,247],{"class":89},[76,155499,146582],{"class":305},[76,155501,155502,155504,155506],{"class":78,"line":97},[76,155503,14766],{"class":89},[76,155505,13636],{"class":89},[76,155507,155508],{"class":305}," \"一班\"\n",[14,155510,155511],{},"查看关键字：",[67,155513,155515],{"className":69,"code":155514,"language":71,"meta":58,"style":58},"import keyword\n\nprint(keyword.kwlist)\n",[73,155516,155517,155524,155528],{"__ignoreMap":58},[76,155518,155519,155521],{"class":78,"line":79},[76,155520,90],{"class":89},[76,155522,155523],{"class":93}," keyword\n",[76,155525,155526],{"class":78,"line":86},[76,155527,2472],{"emptyLinePlaceholder":125},[76,155529,155530,155532],{"class":78,"line":97},[76,155531,30485],{"class":250},[76,155533,155534],{"class":93},"(keyword.kwlist)\n",[14,155536,155537],{},"推荐命名风格：",[67,155539,155541],{"className":69,"code":155540,"language":71,"meta":58,"style":58},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[73,155542,155543,155552,155562],{"__ignoreMap":58},[76,155544,155545,155548,155550],{"class":78,"line":79},[76,155546,155547],{"class":93},"student_name ",[76,155549,247],{"class":89},[76,155551,149394],{"class":305},[76,155553,155554,155557,155559],{"class":78,"line":86},[76,155555,155556],{"class":93},"total_price ",[76,155558,247],{"class":89},[76,155560,155561],{"class":250}," 99.8\n",[76,155563,155564,155567,155569],{"class":78,"line":97},[76,155565,155566],{"class":93},"is_finished ",[76,155568,247],{"class":89},[76,155570,125848],{"class":250},[14,155572,155573],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[140,155575,50802],{"id":50801},[14,155577,104407,155578,155581],{},[73,155579,155580],{},"type()"," 查看数据类型：",[67,155583,155585],{"className":69,"code":155584,"language":71,"meta":58,"style":58},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[73,155586,155587,155601,155615,155629,155643],{"__ignoreMap":58},[76,155588,155589,155591,155593,155595,155597,155599],{"class":78,"line":79},[76,155590,30485],{"class":250},[76,155592,202],{"class":93},[76,155594,103148],{"class":250},[76,155596,202],{"class":93},[76,155598,512],{"class":250},[76,155600,30567],{"class":93},[76,155602,155603,155605,155607,155609,155611,155613],{"class":78,"line":86},[76,155604,30485],{"class":250},[76,155606,202],{"class":93},[76,155608,103148],{"class":250},[76,155610,202],{"class":93},[76,155612,251],{"class":250},[76,155614,30567],{"class":93},[76,155616,155617,155619,155621,155623,155625,155627],{"class":78,"line":97},[76,155618,30485],{"class":250},[76,155620,202],{"class":93},[76,155622,103148],{"class":250},[76,155624,202],{"class":93},[76,155626,5916],{"class":305},[76,155628,30567],{"class":93},[76,155630,155631,155633,155635,155637,155639,155641],{"class":78,"line":103},[76,155632,30485],{"class":250},[76,155634,202],{"class":93},[76,155636,103148],{"class":250},[76,155638,202],{"class":93},[76,155640,31546],{"class":250},[76,155642,30567],{"class":93},[76,155644,155645,155647,155649,155651,155653,155655],{"class":78,"line":1273},[76,155646,30485],{"class":250},[76,155648,202],{"class":93},[76,155650,103148],{"class":250},[76,155652,202],{"class":93},[76,155654,95755],{"class":250},[76,155656,30567],{"class":93},[14,155658,155659],{},"输出类似：",[67,155661,155664],{"className":155662,"code":155663,"language":5259,"meta":58},[5257],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[73,155665,155663],{"__ignoreMap":58},[14,155667,9097,155668,107324,155670,155672,155673,155675,155676,21572,155678,155675,155680,155682],{},[73,155669,1427],{},[73,155671,205],{}," 的子类，",[73,155674,31546],{}," 可以当作 ",[73,155677,418],{},[73,155679,34057],{},[73,155681,392],{},"，但业务代码中不要滥用。",[67,155684,155686],{"className":69,"code":155685,"language":71,"meta":58,"style":58},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[73,155687,155688,155706],{"__ignoreMap":58},[76,155689,155690,155692,155694,155696,155698,155700,155703],{"class":78,"line":79},[76,155691,30485],{"class":250},[76,155693,202],{"class":93},[76,155695,31546],{"class":250},[76,155697,45636],{"class":89},[76,155699,25191],{"class":250},[76,155701,155702],{"class":93},")   ",[76,155704,155705],{"class":82},"# 2\n",[76,155707,155708,155710,155712,155714,155716,155718,155720],{"class":78,"line":86},[76,155709,30485],{"class":250},[76,155711,202],{"class":93},[76,155713,34057],{"class":250},[76,155715,45636],{"class":89},[76,155717,25191],{"class":250},[76,155719,45878],{"class":93},[76,155721,155722],{"class":82},"# 1\n",[140,155724,155726],{"id":155725},"_26-类型转换","2.6 类型转换",[14,155728,155729],{},"常用转换函数：",[67,155731,155733],{"className":69,"code":155732,"language":71,"meta":58,"style":58},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[73,155734,155735,155745,155756,155766],{"__ignoreMap":58},[76,155736,155737,155739,155741,155743],{"class":78,"line":79},[76,155738,205],{"class":250},[76,155740,202],{"class":93},[76,155742,54386],{"class":305},[76,155744,208],{"class":93},[76,155746,155747,155749,155751,155754],{"class":78,"line":86},[76,155748,241],{"class":250},[76,155750,202],{"class":93},[76,155752,155753],{"class":305},"\"3.14\"",[76,155755,208],{"class":93},[76,155757,155758,155760,155762,155764],{"class":78,"line":97},[76,155759,1372],{"class":250},[76,155761,202],{"class":93},[76,155763,512],{"class":250},[76,155765,208],{"class":93},[76,155767,155768,155770,155772,155774],{"class":78,"line":103},[76,155769,1427],{"class":250},[76,155771,202],{"class":93},[76,155773,418],{"class":250},[76,155775,208],{"class":93},[14,155777,15207],{},[67,155779,155781],{"className":69,"code":155780,"language":71,"meta":58,"style":58},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[73,155782,155783,155792,155803],{"__ignoreMap":58},[76,155784,155785,155787,155789],{"class":78,"line":79},[76,155786,146587],{"class":93},[76,155788,247],{"class":89},[76,155790,155791],{"class":305}," \"18\"\n",[76,155793,155794,155796,155798,155800],{"class":78,"line":86},[76,155795,146587],{"class":93},[76,155797,247],{"class":89},[76,155799,2454],{"class":250},[76,155801,155802],{"class":93},"(age)\n",[76,155804,155805,155807,155810,155812,155814],{"class":78,"line":97},[76,155806,30485],{"class":250},[76,155808,155809],{"class":93},"(age ",[76,155811,681],{"class":89},[76,155813,25191],{"class":250},[76,155815,208],{"class":93},[14,155817,155818],{},"输入得到的内容永远是字符串：",[67,155820,155822],{"className":69,"code":155821,"language":71,"meta":58,"style":58},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[73,155823,155824,155840],{"__ignoreMap":58},[76,155825,155826,155829,155831,155833,155835,155838],{"class":78,"line":79},[76,155827,155828],{"class":93},"num ",[76,155830,247],{"class":89},[76,155832,60675],{"class":250},[76,155834,202],{"class":93},[76,155836,155837],{"class":305},"\"请输入数字:\"",[76,155839,208],{"class":93},[76,155841,155842,155844,155846,155848,155851],{"class":78,"line":86},[76,155843,30485],{"class":250},[76,155845,202],{"class":93},[76,155847,103148],{"class":250},[76,155849,155850],{"class":93},"(num))  ",[76,155852,155853],{"class":82},"# str\n",[14,155855,155856],{},"如果要做数学运算，必须转换：",[67,155858,155860],{"className":69,"code":155859,"language":71,"meta":58,"style":58},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[73,155861,155862,155880],{"__ignoreMap":58},[76,155863,155864,155866,155868,155870,155872,155874,155876,155878],{"class":78,"line":79},[76,155865,155828],{"class":93},[76,155867,247],{"class":89},[76,155869,2454],{"class":250},[76,155871,202],{"class":93},[76,155873,53891],{"class":250},[76,155875,202],{"class":93},[76,155877,155837],{"class":305},[76,155879,30567],{"class":93},[76,155881,155882,155884,155886,155888,155890],{"class":78,"line":86},[76,155883,30485],{"class":250},[76,155885,45689],{"class":93},[76,155887,681],{"class":89},[76,155889,2110],{"class":250},[76,155891,208],{"class":93},[14,155893,155894],{},"常见错误：",[67,155896,155898],{"className":69,"code":155897,"language":71,"meta":58,"style":58},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[73,155899,155900,155913],{"__ignoreMap":58},[76,155901,155902,155904,155906,155908,155910],{"class":78,"line":79},[76,155903,205],{"class":250},[76,155905,202],{"class":93},[76,155907,155753],{"class":305},[76,155909,155702],{"class":93},[76,155911,155912],{"class":82},"# 错误\n",[76,155914,155915,155917,155919,155922,155925],{"class":78,"line":86},[76,155916,205],{"class":250},[76,155918,202],{"class":93},[76,155920,155921],{"class":305},"\"abc\"",[76,155923,155924],{"class":93},")    ",[76,155926,155912],{"class":82},[14,155928,155929],{},"正确写法：",[67,155931,155933],{"className":69,"code":155932,"language":71,"meta":58,"style":58},"num = float(\"3.14\")\n",[73,155934,155935],{"__ignoreMap":58},[76,155936,155937,155939,155941,155943,155945,155947],{"class":78,"line":79},[76,155938,155828],{"class":93},[76,155940,247],{"class":89},[76,155942,109838],{"class":250},[76,155944,202],{"class":93},[76,155946,155753],{"class":305},[76,155948,208],{"class":93},[140,155950,155952],{"id":155951},"_27-运算符","2.7 运算符",[169,155954,155956],{"id":155955},"_271-算术运算符","2.7.1 算术运算符",[338,155958,155959,155970],{},[341,155960,155961],{},[344,155962,155963,155966,155968],{},[347,155964,155965],{},"运算符",[347,155967,25942],{},[347,155969,27565],{},[385,155971,155972,155986,156000,156014,156028,156042,156056],{},[344,155973,155974,155978,155981],{},[390,155975,155976],{},[73,155977,681],{},[390,155979,155980],{},"加法",[390,155982,155983],{},[73,155984,155985],{},"1 + 2",[344,155987,155988,155992,155995],{},[390,155989,155990],{},[73,155991,112],{},[390,155993,155994],{},"减法",[390,155996,155997],{},[73,155998,155999],{},"5 - 3",[344,156001,156002,156006,156009],{},[390,156003,156004],{},[73,156005,655],{},[390,156007,156008],{},"乘法",[390,156010,156011],{},[73,156012,156013],{},"2 * 3",[344,156015,156016,156020,156023],{},[390,156017,156018],{},[73,156019,783],{},[390,156021,156022],{},"除法，结果是浮点数",[390,156024,156025],{},[73,156026,156027],{},"5 \u002F 2",[344,156029,156030,156034,156037],{},[390,156031,156032],{},[73,156033,33399],{},[390,156035,156036],{},"整除",[390,156038,156039],{},[73,156040,156041],{},"5 \u002F\u002F 2",[344,156043,156044,156048,156051],{},[390,156045,156046],{},[73,156047,106],{},[390,156049,156050],{},"取余",[390,156052,156053],{},[73,156054,156055],{},"5 % 2",[344,156057,156058,156062,156065],{},[390,156059,156060],{},[73,156061,10733],{},[390,156063,156064],{},"幂运算",[390,156066,156067],{},[73,156068,156069],{},"2 ** 3",[14,156071,15207],{},[67,156073,156075],{"className":69,"code":156074,"language":71,"meta":58,"style":58},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[73,156076,156077,156095,156112,156129],{"__ignoreMap":58},[76,156078,156079,156081,156083,156085,156088,156090,156092],{"class":78,"line":79},[76,156080,30485],{"class":250},[76,156082,202],{"class":93},[76,156084,520],{"class":250},[76,156086,156087],{"class":89}," \u002F",[76,156089,14827],{"class":250},[76,156091,155702],{"class":93},[76,156093,156094],{"class":82},"# 2.5\n",[76,156096,156097,156099,156101,156103,156106,156108,156110],{"class":78,"line":86},[76,156098,30485],{"class":250},[76,156100,202],{"class":93},[76,156102,520],{"class":250},[76,156104,156105],{"class":89}," \u002F\u002F",[76,156107,14827],{"class":250},[76,156109,45878],{"class":93},[76,156111,155705],{"class":82},[76,156113,156114,156116,156118,156120,156123,156125,156127],{"class":78,"line":97},[76,156115,30485],{"class":250},[76,156117,202],{"class":93},[76,156119,520],{"class":250},[76,156121,156122],{"class":89}," %",[76,156124,14827],{"class":250},[76,156126,155702],{"class":93},[76,156128,155722],{"class":82},[76,156130,156131,156133,156135,156137,156140,156142,156144],{"class":78,"line":103},[76,156132,30485],{"class":250},[76,156134,202],{"class":93},[76,156136,278],{"class":250},[76,156138,156139],{"class":89}," **",[76,156141,78140],{"class":250},[76,156143,45878],{"class":93},[76,156145,156146],{"class":82},"# 8\n",[169,156148,156150],{"id":156149},"_272-赋值运算符","2.7.2 赋值运算符",[67,156152,156154],{"className":69,"code":156153,"language":71,"meta":58,"style":58},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[73,156155,156156,156164,156172,156180,156188],{"__ignoreMap":58},[76,156157,156158,156160,156162],{"class":78,"line":79},[76,156159,155828],{"class":93},[76,156161,247],{"class":89},[76,156163,58498],{"class":250},[76,156165,156166,156168,156170],{"class":78,"line":86},[76,156167,155828],{"class":93},[76,156169,9549],{"class":89},[76,156171,54497],{"class":250},[76,156173,156174,156176,156178],{"class":78,"line":97},[76,156175,155828],{"class":93},[76,156177,150293],{"class":89},[76,156179,47793],{"class":250},[76,156181,156182,156184,156186],{"class":78,"line":103},[76,156183,155828],{"class":93},[76,156185,137189],{"class":89},[76,156187,120077],{"class":250},[76,156189,156190,156192,156195],{"class":78,"line":1273},[76,156191,155828],{"class":93},[76,156193,156194],{"class":89},"\u002F=",[76,156196,47793],{"class":250},[14,156198,156199],{},"等价关系：",[67,156201,156203],{"className":69,"code":156202,"language":71,"meta":58,"style":58},"num += 1\nnum = num + 1\n",[73,156204,156205,156213],{"__ignoreMap":58},[76,156206,156207,156209,156211],{"class":78,"line":79},[76,156208,155828],{"class":93},[76,156210,9549],{"class":89},[76,156212,55769],{"class":250},[76,156214,156215,156217,156219,156222,156224],{"class":78,"line":86},[76,156216,155828],{"class":93},[76,156218,247],{"class":89},[76,156220,156221],{"class":93}," num ",[76,156223,681],{"class":89},[76,156225,55769],{"class":250},[14,156227,156228,156229,101059,156232,28458],{},"Python 没有 ",[73,156230,156231],{},"num++",[73,156233,156234],{},"num--",[169,156236,156238],{"id":156237},"_273-比较运算符","2.7.3 比较运算符",[14,156240,156241],{},"比较运算结果是布尔值。",[67,156243,156245],{"className":69,"code":156244,"language":71,"meta":58,"style":58},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[73,156246,156247,156261,156276,156290],{"__ignoreMap":58},[76,156248,156249,156251,156253,156255,156257,156259],{"class":78,"line":79},[76,156250,30485],{"class":250},[76,156252,202],{"class":93},[76,156254,646],{"class":250},[76,156256,26295],{"class":89},[76,156258,2220],{"class":250},[76,156260,208],{"class":93},[76,156262,156263,156265,156267,156269,156272,156274],{"class":78,"line":86},[76,156264,30485],{"class":250},[76,156266,202],{"class":93},[76,156268,646],{"class":250},[76,156270,156271],{"class":89}," >=",[76,156273,2110],{"class":250},[76,156275,208],{"class":93},[76,156277,156278,156280,156282,156284,156286,156288],{"class":78,"line":97},[76,156279,30485],{"class":250},[76,156281,202],{"class":93},[76,156283,646],{"class":250},[76,156285,101600],{"class":89},[76,156287,2155],{"class":250},[76,156289,208],{"class":93},[76,156291,156292,156294,156296,156298,156301,156303],{"class":78,"line":103},[76,156293,30485],{"class":250},[76,156295,202],{"class":93},[76,156297,646],{"class":250},[76,156299,156300],{"class":89}," !=",[76,156302,2155],{"class":250},[76,156304,208],{"class":93},[14,156306,156307,156308,156310,156311,28458],{},"注意：判断相等用 ",[73,156309,3021],{},"，赋值用 ",[73,156312,247],{},[67,156314,156316],{"className":69,"code":156315,"language":71,"meta":58,"style":58},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[73,156317,156318,156330],{"__ignoreMap":58},[76,156319,156320,156322,156324,156327],{"class":78,"line":79},[76,156321,146587],{"class":93},[76,156323,247],{"class":89},[76,156325,156326],{"class":250}," 18",[76,156328,156329],{"class":82},"       # 赋值\n",[76,156331,156332,156334,156336,156338],{"class":78,"line":86},[76,156333,146587],{"class":93},[76,156335,3021],{"class":89},[76,156337,156326],{"class":250},[76,156339,156340],{"class":82},"      # 判断是否相等\n",[169,156342,156344],{"id":156343},"_274-逻辑运算符","2.7.4 逻辑运算符",[338,156346,156347,156355],{},[341,156348,156349],{},[344,156350,156351,156353],{},[347,156352,155965],{},[347,156354,25942],{},[385,156356,156357,156366,156375],{},[344,156358,156359,156363],{},[390,156360,156361],{},[73,156362,30532],{},[390,156364,156365],{},"并且",[344,156367,156368,156372],{},[390,156369,156370],{},[73,156371,115131],{},[390,156373,156374],{},"或者",[344,156376,156377,156382],{},[390,156378,156379],{},[73,156380,156381],{},"not",[390,156383,156384],{},"取反",[67,156386,156388],{"className":69,"code":156387,"language":71,"meta":58,"style":58},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[73,156389,156390,156398,156407,156411,156426,156440],{"__ignoreMap":58},[76,156391,156392,156394,156396],{"class":78,"line":79},[76,156393,146587],{"class":93},[76,156395,247],{"class":89},[76,156397,88135],{"class":250},[76,156399,156400,156403,156405],{"class":78,"line":86},[76,156401,156402],{"class":93},"has_ticket ",[76,156404,247],{"class":89},[76,156406,153640],{"class":250},[76,156408,156409],{"class":78,"line":97},[76,156410,2472],{"emptyLinePlaceholder":125},[76,156412,156413,156415,156417,156419,156421,156423],{"class":78,"line":103},[76,156414,30485],{"class":250},[76,156416,155809],{"class":93},[76,156418,1782],{"class":89},[76,156420,156326],{"class":250},[76,156422,120470],{"class":89},[76,156424,156425],{"class":93}," has_ticket)\n",[76,156427,156428,156430,156432,156434,156436,156438],{"class":78,"line":1273},[76,156429,30485],{"class":250},[76,156431,155809],{"class":93},[76,156433,1109],{"class":89},[76,156435,156326],{"class":250},[76,156437,114242],{"class":89},[76,156439,156425],{"class":93},[76,156441,156442,156444,156446,156448],{"class":78,"line":1287},[76,156443,30485],{"class":250},[76,156445,202],{"class":93},[76,156447,156381],{"class":89},[76,156449,156425],{"class":93},[140,156451,156453],{"id":156452},"_28-字符串定义","2.8 字符串定义",[14,156455,156456],{},"三种常见写法：",[67,156458,156460],{"className":69,"code":156459,"language":71,"meta":58,"style":58},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[73,156461,156462,156472,156481,156491],{"__ignoreMap":58},[76,156463,156464,156467,156469],{"class":78,"line":79},[76,156465,156466],{"class":93},"name1 ",[76,156468,247],{"class":89},[76,156470,156471],{"class":305}," '小明'\n",[76,156473,156474,156477,156479],{"class":78,"line":86},[76,156475,156476],{"class":93},"name2 ",[76,156478,247],{"class":89},[76,156480,149394],{"class":305},[76,156482,156483,156486,156488],{"class":78,"line":97},[76,156484,156485],{"class":93},"text ",[76,156487,247],{"class":89},[76,156489,156490],{"class":305}," \"\"\"这是多行字符串\n",[76,156492,156493],{"class":78,"line":103},[76,156494,156495],{"class":305},"可以换行\"\"\"\n",[14,156497,156498],{},"字符串中包含引号：",[67,156500,156502],{"className":69,"code":156501,"language":71,"meta":58,"style":58},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[73,156503,156504,156514,156524],{"__ignoreMap":58},[76,156505,156506,156509,156511],{"class":78,"line":79},[76,156507,156508],{"class":93},"msg ",[76,156510,247],{"class":89},[76,156512,156513],{"class":305}," \"他说:'你好'\"\n",[76,156515,156516,156519,156521],{"class":78,"line":86},[76,156517,156518],{"class":93},"msg2 ",[76,156520,247],{"class":89},[76,156522,156523],{"class":305}," '他说:\"你好\"'\n",[76,156525,156526,156529,156531,156534,156537,156540,156542],{"class":78,"line":97},[76,156527,156528],{"class":93},"msg3 ",[76,156530,247],{"class":89},[76,156532,156533],{"class":305}," \"他说:",[76,156535,156536],{"class":250},"\\\"",[76,156538,156539],{"class":305},"你好",[76,156541,156536],{"class":250},[76,156543,25206],{"class":305},[14,156545,156546],{},"常见转义字符：",[338,156548,156549,156558],{},[341,156550,156551],{},[344,156552,156553,156556],{},[347,156554,156555],{},"写法",[347,156557,100741],{},[385,156559,156560,156570,156579,156589,156598],{},[344,156561,156562,156567],{},[390,156563,156564],{},[73,156565,156566],{},"\\n",[390,156568,156569],{},"换行",[344,156571,156572,156576],{},[390,156573,156574],{},[73,156575,1303],{},[390,156577,156578],{},"制表符",[344,156580,156581,156586],{},[390,156582,156583],{},[73,156584,156585],{},"\\\\",[390,156587,156588],{},"反斜杠",[344,156590,156591,156595],{},[390,156592,156593],{},[73,156594,156536],{},[390,156596,156597],{},"双引号",[344,156599,156600,156605],{},[390,156601,156602],{},[73,156603,156604],{},"\\'",[390,156606,156607],{},"单引号",[140,156609,156611],{"id":156610},"_29-字符串拼接","2.9 字符串拼接",[67,156613,156615],{"className":69,"code":156614,"language":71,"meta":58,"style":58},"name = \"小明\"\nprint(\"你好，\" + name)\n",[73,156616,156617,156625],{"__ignoreMap":58},[76,156618,156619,156621,156623],{"class":78,"line":79},[76,156620,146577],{"class":93},[76,156622,247],{"class":89},[76,156624,149394],{"class":305},[76,156626,156627,156629,156631,156634,156636],{"class":78,"line":86},[76,156628,30485],{"class":250},[76,156630,202],{"class":93},[76,156632,156633],{"class":305},"\"你好，\"",[76,156635,45636],{"class":89},[76,156637,156638],{"class":93}," name)\n",[14,156640,156641],{},"字符串只能和字符串拼接：",[67,156643,156645],{"className":69,"code":156644,"language":71,"meta":58,"style":58},"age = 18\nprint(\"年龄:\" + str(age))\n",[73,156646,156647,156655],{"__ignoreMap":58},[76,156648,156649,156651,156653],{"class":78,"line":79},[76,156650,146587],{"class":93},[76,156652,247],{"class":89},[76,156654,146592],{"class":250},[76,156656,156657,156659,156661,156663,156665,156667],{"class":78,"line":86},[76,156658,30485],{"class":250},[76,156660,202],{"class":93},[76,156662,146558],{"class":305},[76,156664,45636],{"class":89},[76,156666,73989],{"class":250},[76,156668,156669],{"class":93},"(age))\n",[14,156671,156672],{},"更推荐使用格式化字符串。",[140,156674,156676],{"id":156675},"_210-字符串格式化","2.10 字符串格式化",[169,156678,156680],{"id":156679},"_2101-百分号格式化","2.10.1 百分号格式化",[67,156682,156684],{"className":69,"code":156683,"language":71,"meta":58,"style":58},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[73,156685,156686,156694,156702,156711,156715],{"__ignoreMap":58},[76,156687,156688,156690,156692],{"class":78,"line":79},[76,156689,146577],{"class":93},[76,156691,247],{"class":89},[76,156693,149394],{"class":305},[76,156695,156696,156698,156700],{"class":78,"line":86},[76,156697,146587],{"class":93},[76,156699,247],{"class":89},[76,156701,146592],{"class":250},[76,156703,156704,156706,156708],{"class":78,"line":97},[76,156705,155399],{"class":93},[76,156707,247],{"class":89},[76,156709,156710],{"class":250}," 95.5\n",[76,156712,156713],{"class":78,"line":103},[76,156714,2472],{"emptyLinePlaceholder":125},[76,156716,156717,156719,156721,156724,156727,156730,156733,156736,156739,156741,156743],{"class":78,"line":1273},[76,156718,30485],{"class":250},[76,156720,202],{"class":93},[76,156722,156723],{"class":305},"\"姓名:",[76,156725,156726],{"class":250},"%s",[76,156728,156729],{"class":305}," 年龄:",[76,156731,156732],{"class":250},"%d",[76,156734,156735],{"class":305}," 分数:",[76,156737,156738],{"class":250},"%.1f",[76,156740,452],{"class":305},[76,156742,156122],{"class":89},[76,156744,156745],{"class":93}," (name, age, score))\n",[14,156747,156748],{},"常用占位符：",[338,156750,156751,156760],{},[341,156752,156753],{},[344,156754,156755,156758],{},[347,156756,156757],{},"占位符",[347,156759,25942],{},[385,156761,156762,156770,156778],{},[344,156763,156764,156768],{},[390,156765,156766],{},[73,156767,156726],{},[390,156769,155265],{},[344,156771,156772,156776],{},[390,156773,156774],{},[73,156775,156732],{},[390,156777,155243],{},[344,156779,156780,156785],{},[390,156781,156782],{},[73,156783,156784],{},"%f",[390,156786,155254],{},[14,156788,156789],{},"精度控制：",[67,156791,156793],{"className":69,"code":156792,"language":71,"meta":58,"style":58},"price = 12.3456\nprint(\"%.2f\" % price)\n",[73,156794,156795,156804],{"__ignoreMap":58},[76,156796,156797,156799,156801],{"class":78,"line":79},[76,156798,146722],{"class":93},[76,156800,247],{"class":89},[76,156802,156803],{"class":250}," 12.3456\n",[76,156805,156806,156808,156810,156812,156815,156817,156819],{"class":78,"line":86},[76,156807,30485],{"class":250},[76,156809,202],{"class":93},[76,156811,452],{"class":305},[76,156813,156814],{"class":250},"%.2f",[76,156816,452],{"class":305},[76,156818,156122],{"class":89},[76,156820,156821],{"class":93}," price)\n",[169,156823,156825],{"id":156824},"_2102-format方法","2.10.2 format方法",[67,156827,156829],{"className":69,"code":156828,"language":71,"meta":58,"style":58},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[73,156830,156831,156839,156847,156851,156870,156890],{"__ignoreMap":58},[76,156832,156833,156835,156837],{"class":78,"line":79},[76,156834,146577],{"class":93},[76,156836,247],{"class":89},[76,156838,149394],{"class":305},[76,156840,156841,156843,156845],{"class":78,"line":86},[76,156842,146587],{"class":93},[76,156844,247],{"class":89},[76,156846,146592],{"class":250},[76,156848,156849],{"class":78,"line":97},[76,156850,2472],{"emptyLinePlaceholder":125},[76,156852,156853,156855,156857,156859,156861,156863,156865,156867],{"class":78,"line":103},[76,156854,30485],{"class":250},[76,156856,202],{"class":93},[76,156858,156723],{"class":305},[76,156860,32529],{"class":250},[76,156862,156729],{"class":305},[76,156864,32529],{"class":250},[76,156866,452],{"class":305},[76,156868,156869],{"class":93},".format(name, age))\n",[76,156871,156872,156874,156876,156878,156881,156883,156886,156888],{"class":78,"line":1273},[76,156873,30485],{"class":250},[76,156875,202],{"class":93},[76,156877,156723],{"class":305},[76,156879,156880],{"class":250},"{0}",[76,156882,156729],{"class":305},[76,156884,156885],{"class":250},"{1}",[76,156887,452],{"class":305},[76,156889,156869],{"class":93},[76,156891,156892,156894,156896,156898,156901,156903,156906,156908,156911,156913,156915,156918,156920,156922],{"class":78,"line":1287},[76,156893,30485],{"class":250},[76,156895,202],{"class":93},[76,156897,156723],{"class":305},[76,156899,156900],{"class":250},"{name}",[76,156902,156729],{"class":305},[76,156904,156905],{"class":250},"{age}",[76,156907,452],{"class":305},[76,156909,156910],{"class":93},".format(",[76,156912,79880],{"class":5288},[76,156914,247],{"class":89},[76,156916,156917],{"class":93},"name, ",[76,156919,70291],{"class":5288},[76,156921,247],{"class":89},[76,156923,156924],{"class":93},"age))\n",[169,156926,156928],{"id":156927},"_2103-f-string","2.10.3 f-string",[14,156930,156931],{},"推荐写法：",[67,156933,156935],{"className":69,"code":156934,"language":71,"meta":58,"style":58},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[73,156936,156937,156945,156953,156961,156965],{"__ignoreMap":58},[76,156938,156939,156941,156943],{"class":78,"line":79},[76,156940,146577],{"class":93},[76,156942,247],{"class":89},[76,156944,149394],{"class":305},[76,156946,156947,156949,156951],{"class":78,"line":86},[76,156948,146587],{"class":93},[76,156950,247],{"class":89},[76,156952,146592],{"class":250},[76,156954,156955,156957,156959],{"class":78,"line":97},[76,156956,155399],{"class":93},[76,156958,247],{"class":89},[76,156960,156710],{"class":250},[76,156962,156963],{"class":78,"line":103},[76,156964,2472],{"emptyLinePlaceholder":125},[76,156966,156967,156969,156971,156973,156975,156977,156979,156981,156983,156985,156987,156989,156991,156993,156996,156999,157001,157003],{"class":78,"line":1273},[76,156968,30485],{"class":250},[76,156970,202],{"class":93},[76,156972,254],{"class":89},[76,156974,156723],{"class":305},[76,156976,1095],{"class":250},[76,156978,79880],{"class":93},[76,156980,1145],{"class":250},[76,156982,156729],{"class":305},[76,156984,1095],{"class":250},[76,156986,70291],{"class":93},[76,156988,1145],{"class":250},[76,156990,156735],{"class":305},[76,156992,1095],{"class":250},[76,156994,156995],{"class":93},"score",[76,156997,156998],{"class":89},":.1f",[76,157000,1145],{"class":250},[76,157002,452],{"class":305},[76,157004,208],{"class":93},[14,157006,157007],{},"表达式也可以放进去：",[67,157009,157011],{"className":69,"code":157010,"language":71,"meta":58,"style":58},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[73,157012,157013,157021,157029],{"__ignoreMap":58},[76,157014,157015,157017,157019],{"class":78,"line":79},[76,157016,146722],{"class":93},[76,157018,247],{"class":89},[76,157020,146727],{"class":250},[76,157022,157023,157025,157027],{"class":78,"line":86},[76,157024,146732],{"class":93},[76,157026,247],{"class":89},[76,157028,54497],{"class":250},[76,157030,157031,157033,157035,157037,157040,157042,157044,157046,157049,157051,157054],{"class":78,"line":97},[76,157032,30485],{"class":250},[76,157034,202],{"class":93},[76,157036,254],{"class":89},[76,157038,157039],{"class":305},"\"总价:",[76,157041,1095],{"class":250},[76,157043,146722],{"class":93},[76,157045,655],{"class":89},[76,157047,157048],{"class":93}," count",[76,157050,1145],{"class":250},[76,157052,157053],{"class":305},"元\"",[76,157055,208],{"class":93},[140,157057,157059],{"id":157058},"_211-input输入","2.11 input输入",[14,157061,157062,157065],{},[73,157063,157064],{},"input()"," 会暂停程序，等待用户输入。",[67,157067,157069],{"className":69,"code":157068,"language":71,"meta":58,"style":58},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[73,157070,157071,157085],{"__ignoreMap":58},[76,157072,157073,157075,157077,157079,157081,157083],{"class":78,"line":79},[76,157074,146577],{"class":93},[76,157076,247],{"class":89},[76,157078,60675],{"class":250},[76,157080,202],{"class":93},[76,157082,152420],{"class":305},[76,157084,208],{"class":93},[76,157086,157087,157089,157091,157093,157096,157098,157100,157102,157104],{"class":78,"line":86},[76,157088,30485],{"class":250},[76,157090,202],{"class":93},[76,157092,254],{"class":89},[76,157094,157095],{"class":305},"\"你好，",[76,157097,1095],{"class":250},[76,157099,79880],{"class":93},[76,157101,1145],{"class":250},[76,157103,452],{"class":305},[76,157105,208],{"class":93},[14,157107,157108],{},"输入整数：",[67,157110,157112],{"className":69,"code":157111,"language":71,"meta":58,"style":58},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[73,157113,157114,157132],{"__ignoreMap":58},[76,157115,157116,157118,157120,157122,157124,157126,157128,157130],{"class":78,"line":79},[76,157117,146587],{"class":93},[76,157119,247],{"class":89},[76,157121,2454],{"class":250},[76,157123,202],{"class":93},[76,157125,53891],{"class":250},[76,157127,202],{"class":93},[76,157129,152435],{"class":305},[76,157131,30567],{"class":93},[76,157133,157134,157136,157138,157140,157143,157145,157147,157149,157152,157154],{"class":78,"line":86},[76,157135,30485],{"class":250},[76,157137,202],{"class":93},[76,157139,254],{"class":89},[76,157141,157142],{"class":305},"\"明年你",[76,157144,1095],{"class":250},[76,157146,146587],{"class":93},[76,157148,681],{"class":89},[76,157150,157151],{"class":250}," 1}",[76,157153,149445],{"class":305},[76,157155,208],{"class":93},[14,157157,157158],{},"输入小数：",[67,157160,157162],{"className":69,"code":157161,"language":71,"meta":58,"style":58},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[73,157163,157164,157183],{"__ignoreMap":58},[76,157165,157166,157168,157170,157172,157174,157176,157178,157181],{"class":78,"line":79},[76,157167,155372],{"class":93},[76,157169,247],{"class":89},[76,157171,109838],{"class":250},[76,157173,202],{"class":93},[76,157175,53891],{"class":250},[76,157177,202],{"class":93},[76,157179,157180],{"class":305},"\"请输入身高:\"",[76,157182,30567],{"class":93},[76,157184,157185,157187,157189,157191,157194,157196,157198,157201,157203,157206],{"class":78,"line":86},[76,157186,30485],{"class":250},[76,157188,202],{"class":93},[76,157190,254],{"class":89},[76,157192,157193],{"class":305},"\"身高:",[76,157195,1095],{"class":250},[76,157197,25054],{"class":93},[76,157199,157200],{"class":89},":.2f",[76,157202,1145],{"class":250},[76,157204,157205],{"class":305},"米\"",[76,157207,208],{"class":93},[140,157209,157211],{"id":157210},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157213,123333],{},[152,157215,157216,157219,157222,157225],{},[155,157217,157218],{},"输入商品单价。",[155,157220,157221],{},"输入购买数量。",[155,157223,157224],{},"输入折扣，例如 0.8 表示八折。",[155,157226,157227],{},"输出最终金额，保留两位小数。",[14,157229,10107],{},[67,157231,157233],{"className":69,"code":157232,"language":71,"meta":58,"style":58},"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",[73,157234,157235,157254,157273,157293,157297,157317,157321,157344,157365,157387],{"__ignoreMap":58},[76,157236,157237,157239,157241,157243,157245,157247,157249,157252],{"class":78,"line":79},[76,157238,146722],{"class":93},[76,157240,247],{"class":89},[76,157242,109838],{"class":250},[76,157244,202],{"class":93},[76,157246,53891],{"class":250},[76,157248,202],{"class":93},[76,157250,157251],{"class":305},"\"请输入商品单价:\"",[76,157253,30567],{"class":93},[76,157255,157256,157258,157260,157262,157264,157266,157268,157271],{"class":78,"line":86},[76,157257,146732],{"class":93},[76,157259,247],{"class":89},[76,157261,2454],{"class":250},[76,157263,202],{"class":93},[76,157265,53891],{"class":250},[76,157267,202],{"class":93},[76,157269,157270],{"class":305},"\"请输入购买数量:\"",[76,157272,30567],{"class":93},[76,157274,157275,157278,157280,157282,157284,157286,157288,157291],{"class":78,"line":97},[76,157276,157277],{"class":93},"discount ",[76,157279,247],{"class":89},[76,157281,109838],{"class":250},[76,157283,202],{"class":93},[76,157285,53891],{"class":250},[76,157287,202],{"class":93},[76,157289,157290],{"class":305},"\"请输入折扣:\"",[76,157292,30567],{"class":93},[76,157294,157295],{"class":78,"line":103},[76,157296,2472],{"emptyLinePlaceholder":125},[76,157298,157299,157302,157304,157307,157309,157312,157314],{"class":78,"line":1273},[76,157300,157301],{"class":93},"total ",[76,157303,247],{"class":89},[76,157305,157306],{"class":93}," price ",[76,157308,655],{"class":89},[76,157310,157311],{"class":93}," count ",[76,157313,655],{"class":89},[76,157315,157316],{"class":93}," discount\n",[76,157318,157319],{"class":78,"line":1287},[76,157320,2472],{"emptyLinePlaceholder":125},[76,157322,157323,157325,157327,157329,157332,157334,157336,157338,157340,157342],{"class":78,"line":1293},[76,157324,30485],{"class":250},[76,157326,202],{"class":93},[76,157328,254],{"class":89},[76,157330,157331],{"class":305},"\"商品单价:",[76,157333,1095],{"class":250},[76,157335,79885],{"class":93},[76,157337,157200],{"class":89},[76,157339,1145],{"class":250},[76,157341,452],{"class":305},[76,157343,208],{"class":93},[76,157345,157346,157348,157350,157352,157355,157357,157359,157361,157363],{"class":78,"line":1384},[76,157347,30485],{"class":250},[76,157349,202],{"class":93},[76,157351,254],{"class":89},[76,157353,157354],{"class":305},"\"购买数量:",[76,157356,1095],{"class":250},[76,157358,84504],{"class":93},[76,157360,1145],{"class":250},[76,157362,452],{"class":305},[76,157364,208],{"class":93},[76,157366,157367,157369,157371,157373,157376,157378,157381,157383,157385],{"class":78,"line":1390},[76,157368,30485],{"class":250},[76,157370,202],{"class":93},[76,157372,254],{"class":89},[76,157374,157375],{"class":305},"\"折扣:",[76,157377,1095],{"class":250},[76,157379,157380],{"class":93},"discount",[76,157382,1145],{"class":250},[76,157384,452],{"class":305},[76,157386,208],{"class":93},[76,157388,157389,157391,157393,157395,157398,157400,157403,157405,157407,157409],{"class":78,"line":1402},[76,157390,30485],{"class":250},[76,157392,202],{"class":93},[76,157394,254],{"class":89},[76,157396,157397],{"class":305},"\"应付金额:",[76,157399,1095],{"class":250},[76,157401,157402],{"class":93},"total",[76,157404,157200],{"class":89},[76,157406,1145],{"class":250},[76,157408,157053],{"class":305},[76,157410,208],{"class":93},[140,157412,157414],{"id":157413},"_213-易错点","2.13 易错点",[152,157416,157417,157422,157428,157436,157439],{},[155,157418,157419,157421],{},[73,157420,157064],{}," 的结果是字符串，做运算前要转换。",[155,157423,157424,157425,28458],{},"字符串拼接时，数字要先 ",[73,157426,157427],{},"str()",[155,157429,157430,157432,157433,157435],{},[73,157431,247],{}," 是赋值，",[73,157434,3021],{}," 是比较。",[155,157437,157438],{},"Python 没有自增自减运算符。",[155,157440,157441],{},"浮点数计算可能有精度误差：",[67,157443,157445],{"className":69,"code":157444,"language":71,"meta":58,"style":58},"print(0.1 + 0.2)\n",[73,157446,157447],{"__ignoreMap":58},[76,157448,157449,157451,157453,157455,157457,157460],{"class":78,"line":79},[76,157450,30485],{"class":250},[76,157452,202],{"class":93},[76,157454,86280],{"class":250},[76,157456,45636],{"class":89},[76,157458,157459],{"class":250}," 0.2",[76,157461,208],{"class":93},[14,157463,157464,157465,157468],{},"金额计算如果要求严格，可以后续学习 ",[73,157466,157467],{},"decimal"," 模块。",[140,157470,157472],{"id":157471},"_214-本章练习","2.14 本章练习",[152,157474,157475,157478,157481,157484,157487],{},[155,157476,157477],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[155,157479,157480],{},"输入圆的半径，计算面积，保留两位小数。",[155,157482,157483],{},"输入工资和奖金，计算总收入。",[155,157485,157486],{},"输入摄氏温度，转换为华氏温度。",[155,157488,157489],{},"写一个 BMI 计算程序：",[67,157491,157494],{"className":157492,"code":157493,"language":5259,"meta":58},[5257],"BMI = 体重kg \u002F 身高m ** 2\n",[73,157495,157493],{"__ignoreMap":58},[117,157497,157498],{},"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":58,"searchDepth":86,"depth":86,"links":157500},[157501,157502,157503,157504,157505,157506,157507,157513,157514,157515,157520,157521,157522,157523],{"id":155062,"depth":86,"text":155063},{"id":155171,"depth":86,"text":155172},{"id":155342,"depth":86,"text":155343},{"id":155419,"depth":86,"text":155420},{"id":50801,"depth":86,"text":50802},{"id":155725,"depth":86,"text":155726},{"id":155951,"depth":86,"text":155952,"children":157508},[157509,157510,157511,157512],{"id":155955,"depth":97,"text":155956},{"id":156149,"depth":97,"text":156150},{"id":156237,"depth":97,"text":156238},{"id":156343,"depth":97,"text":156344},{"id":156452,"depth":86,"text":156453},{"id":156610,"depth":86,"text":156611},{"id":156675,"depth":86,"text":156676,"children":157516},[157517,157518,157519],{"id":156679,"depth":97,"text":156680},{"id":156824,"depth":97,"text":156825},{"id":156927,"depth":97,"text":156928},{"id":157058,"depth":86,"text":157059},{"id":157210,"depth":86,"text":157211},{"id":157413,"depth":86,"text":157414},{"id":157471,"depth":86,"text":157472},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155054,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157530,"title":157531,"body":157532,"description":122,"extension":123,"meta":159168,"navigation":125,"path":159169,"seo":159170,"stem":159171,"__hash__":159172},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157533,"toc":159149},[157534,157537,157541,157544,157559,157562,157590,157594,157644,157646,157662,157665,157691,157694,157698,157765,157768,157784,157788,157791,157909,157912,157919,157968,157974,157978,157981,158094,158097,158101,158105,158108,158158,158162,158165,158215,158219,158222,158260,158264,158267,158313,158316,158351,158355,158360,158363,158409,158411,158478,158482,158488,158599,158608,158612,158614,158625,158627,158793,158797,158799,158813,158815,159029,159033,159052,159069,159072,159118,159122,159146],[10,157535,157531],{"id":157536},"_3-判断语句",[140,157538,157540],{"id":157539},"_31-布尔值","3.1 布尔值",[14,157542,157543],{},"判断语句依赖布尔值：",[67,157545,157547],{"className":69,"code":157546,"language":71,"meta":58,"style":58},"True\nFalse\n",[73,157548,157549,157554],{"__ignoreMap":58},[76,157550,157551],{"class":78,"line":79},[76,157552,157553],{"class":250},"True\n",[76,157555,157556],{"class":78,"line":86},[76,157557,157558],{"class":250},"False\n",[14,157560,157561],{},"比较表达式会产生布尔值：",[67,157563,157565],{"className":69,"code":157564,"language":71,"meta":58,"style":58},"age = 18\nprint(age >= 18)  # True\n",[73,157566,157567,157575],{"__ignoreMap":58},[76,157568,157569,157571,157573],{"class":78,"line":79},[76,157570,146587],{"class":93},[76,157572,247],{"class":89},[76,157574,146592],{"class":250},[76,157576,157577,157579,157581,157583,157585,157587],{"class":78,"line":86},[76,157578,30485],{"class":250},[76,157580,155809],{"class":93},[76,157582,1782],{"class":89},[76,157584,156326],{"class":250},[76,157586,45878],{"class":93},[76,157588,157589],{"class":82},"# True\n",[140,157591,157593],{"id":157592},"_32-if基础语法","3.2 if基础语法",[67,157595,157597],{"className":69,"code":157596,"language":71,"meta":58,"style":58},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[73,157598,157599,157617,157621,157633],{"__ignoreMap":58},[76,157600,157601,157603,157605,157607,157609,157611,157613,157615],{"class":78,"line":79},[76,157602,146587],{"class":93},[76,157604,247],{"class":89},[76,157606,2454],{"class":250},[76,157608,202],{"class":93},[76,157610,53891],{"class":250},[76,157612,202],{"class":93},[76,157614,152435],{"class":305},[76,157616,30567],{"class":93},[76,157618,157619],{"class":78,"line":86},[76,157620,2472],{"emptyLinePlaceholder":125},[76,157622,157623,157625,157627,157629,157631],{"class":78,"line":97},[76,157624,1603],{"class":89},[76,157626,15779],{"class":93},[76,157628,1782],{"class":89},[76,157630,156326],{"class":250},[76,157632,3811],{"class":93},[76,157634,157635,157637,157639,157642],{"class":78,"line":103},[76,157636,31369],{"class":250},[76,157638,202],{"class":93},[76,157640,157641],{"class":305},"\"可以进入网吧\"",[76,157643,208],{"class":93},[14,157645,9097],{},[152,157647,157648,157653,157656,157659],{},[155,157649,157650,157652],{},[73,157651,1603],{}," 后面是条件表达式。",[155,157654,157655],{},"条件后面必须写冒号。",[155,157657,157658],{},"条件成立时执行缩进代码块。",[155,157660,157661],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157663,157664],{},"错误示例：",[67,157666,157668],{"className":69,"code":157667,"language":71,"meta":58,"style":58},"if age >= 18\n    print(\"可以进入\")\n",[73,157669,157670,157680],{"__ignoreMap":58},[76,157671,157672,157674,157676,157678],{"class":78,"line":79},[76,157673,1603],{"class":89},[76,157675,15779],{"class":93},[76,157677,1782],{"class":89},[76,157679,146592],{"class":250},[76,157681,157682,157684,157686,157689],{"class":78,"line":86},[76,157683,31369],{"class":250},[76,157685,202],{"class":93},[76,157687,157688],{"class":305},"\"可以进入\"",[76,157690,208],{"class":93},[14,157692,157693],{},"缺少冒号。",[140,157695,157697],{"id":157696},"_33-if-else","3.3 if else",[67,157699,157701],{"className":69,"code":157700,"language":71,"meta":58,"style":58},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[73,157702,157703,157721,157725,157737,157748,157754],{"__ignoreMap":58},[76,157704,157705,157707,157709,157711,157713,157715,157717,157719],{"class":78,"line":79},[76,157706,146587],{"class":93},[76,157708,247],{"class":89},[76,157710,2454],{"class":250},[76,157712,202],{"class":93},[76,157714,53891],{"class":250},[76,157716,202],{"class":93},[76,157718,152435],{"class":305},[76,157720,30567],{"class":93},[76,157722,157723],{"class":78,"line":86},[76,157724,2472],{"emptyLinePlaceholder":125},[76,157726,157727,157729,157731,157733,157735],{"class":78,"line":97},[76,157728,1603],{"class":89},[76,157730,15779],{"class":93},[76,157732,1782],{"class":89},[76,157734,156326],{"class":250},[76,157736,3811],{"class":93},[76,157738,157739,157741,157743,157746],{"class":78,"line":103},[76,157740,31369],{"class":250},[76,157742,202],{"class":93},[76,157744,157745],{"class":305},"\"成年人\"",[76,157747,208],{"class":93},[76,157749,157750,157752],{"class":78,"line":1273},[76,157751,1773],{"class":89},[76,157753,3811],{"class":93},[76,157755,157756,157758,157760,157763],{"class":78,"line":1287},[76,157757,31369],{"class":250},[76,157759,202],{"class":93},[76,157761,157762],{"class":305},"\"未成年人\"",[76,157764,208],{"class":93},[14,157766,157767],{},"执行逻辑：",[152,157769,157770,157776,157781],{},[155,157771,157772,157773,157775],{},"条件成立，执行 ",[73,157774,1603],{}," 代码块。",[155,157777,157778,157779,157775],{},"条件不成立，执行 ",[73,157780,1773],{},[155,157782,157783],{},"两个代码块只会执行其中一个。",[140,157785,157787],{"id":157786},"_34-if-elif-else","3.4 if elif else",[14,157789,157790],{},"多条件判断：",[67,157792,157794],{"className":69,"code":157793,"language":71,"meta":58,"style":58},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[73,157795,157796,157814,157818,157832,157843,157857,157868,157881,157892,157898],{"__ignoreMap":58},[76,157797,157798,157800,157802,157804,157806,157808,157810,157812],{"class":78,"line":79},[76,157799,155399],{"class":93},[76,157801,247],{"class":89},[76,157803,2454],{"class":250},[76,157805,202],{"class":93},[76,157807,53891],{"class":250},[76,157809,202],{"class":93},[76,157811,152450],{"class":305},[76,157813,30567],{"class":93},[76,157815,157816],{"class":78,"line":86},[76,157817,2472],{"emptyLinePlaceholder":125},[76,157819,157820,157822,157825,157827,157830],{"class":78,"line":97},[76,157821,1603],{"class":89},[76,157823,157824],{"class":93}," score ",[76,157826,1782],{"class":89},[76,157828,157829],{"class":250}," 90",[76,157831,3811],{"class":93},[76,157833,157834,157836,157838,157841],{"class":78,"line":103},[76,157835,31369],{"class":250},[76,157837,202],{"class":93},[76,157839,157840],{"class":305},"\"优秀\"",[76,157842,208],{"class":93},[76,157844,157845,157848,157850,157852,157855],{"class":78,"line":1273},[76,157846,157847],{"class":89},"elif",[76,157849,157824],{"class":93},[76,157851,1782],{"class":89},[76,157853,157854],{"class":250}," 80",[76,157856,3811],{"class":93},[76,157858,157859,157861,157863,157866],{"class":78,"line":1287},[76,157860,31369],{"class":250},[76,157862,202],{"class":93},[76,157864,157865],{"class":305},"\"良好\"",[76,157867,208],{"class":93},[76,157869,157870,157872,157874,157876,157879],{"class":78,"line":1293},[76,157871,157847],{"class":89},[76,157873,157824],{"class":93},[76,157875,1782],{"class":89},[76,157877,157878],{"class":250}," 60",[76,157880,3811],{"class":93},[76,157882,157883,157885,157887,157890],{"class":78,"line":1384},[76,157884,31369],{"class":250},[76,157886,202],{"class":93},[76,157888,157889],{"class":305},"\"及格\"",[76,157891,208],{"class":93},[76,157893,157894,157896],{"class":78,"line":1390},[76,157895,1773],{"class":89},[76,157897,3811],{"class":93},[76,157899,157900,157902,157904,157907],{"class":78,"line":1402},[76,157901,31369],{"class":250},[76,157903,202],{"class":93},[76,157905,157906],{"class":305},"\"不及格\"",[76,157908,208],{"class":93},[14,157910,157911],{},"注意判断顺序很重要。",[14,157913,157914,157915,157918],{},"如果把 ",[73,157916,157917],{},"score >= 60"," 放在最前面：",[67,157920,157922],{"className":69,"code":157921,"language":71,"meta":58,"style":58},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[73,157923,157924,157936,157946,157958],{"__ignoreMap":58},[76,157925,157926,157928,157930,157932,157934],{"class":78,"line":79},[76,157927,1603],{"class":89},[76,157929,157824],{"class":93},[76,157931,1782],{"class":89},[76,157933,157878],{"class":250},[76,157935,3811],{"class":93},[76,157937,157938,157940,157942,157944],{"class":78,"line":86},[76,157939,31369],{"class":250},[76,157941,202],{"class":93},[76,157943,157889],{"class":305},[76,157945,208],{"class":93},[76,157947,157948,157950,157952,157954,157956],{"class":78,"line":97},[76,157949,157847],{"class":89},[76,157951,157824],{"class":93},[76,157953,1782],{"class":89},[76,157955,157829],{"class":250},[76,157957,3811],{"class":93},[76,157959,157960,157962,157964,157966],{"class":78,"line":103},[76,157961,31369],{"class":250},[76,157963,202],{"class":93},[76,157965,157840],{"class":305},[76,157967,208],{"class":93},[14,157969,157970,157971,157973],{},"成绩 95 会先满足 ",[73,157972,157917],{},"，后面的优秀分支就不会执行。",[140,157975,157977],{"id":157976},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157979,157980],{},"嵌套判断就是在一个判断内部再写判断。",[67,157982,157984],{"className":69,"code":157983,"language":71,"meta":58,"style":58},"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",[73,157985,157986,158004,158019,158023,158035,158049,158059,158066,158077,158083],{"__ignoreMap":58},[76,157987,157988,157990,157992,157994,157996,157998,158000,158002],{"class":78,"line":79},[76,157989,146587],{"class":93},[76,157991,247],{"class":89},[76,157993,2454],{"class":250},[76,157995,202],{"class":93},[76,157997,53891],{"class":250},[76,157999,202],{"class":93},[76,158001,152435],{"class":305},[76,158003,30567],{"class":93},[76,158005,158006,158008,158010,158012,158014,158017],{"class":78,"line":86},[76,158007,156402],{"class":93},[76,158009,247],{"class":89},[76,158011,60675],{"class":250},[76,158013,202],{"class":93},[76,158015,158016],{"class":305},"\"是否有票(y\u002Fn):\"",[76,158018,208],{"class":93},[76,158020,158021],{"class":78,"line":97},[76,158022,2472],{"emptyLinePlaceholder":125},[76,158024,158025,158027,158029,158031,158033],{"class":78,"line":103},[76,158026,1603],{"class":89},[76,158028,15779],{"class":93},[76,158030,1782],{"class":89},[76,158032,156326],{"class":250},[76,158034,3811],{"class":93},[76,158036,158037,158039,158042,158044,158047],{"class":78,"line":1273},[76,158038,3173],{"class":89},[76,158040,158041],{"class":93}," has_ticket ",[76,158043,3021],{"class":89},[76,158045,158046],{"class":305}," \"y\"",[76,158048,3811],{"class":93},[76,158050,158051,158053,158055,158057],{"class":78,"line":1287},[76,158052,32521],{"class":250},[76,158054,202],{"class":93},[76,158056,157688],{"class":305},[76,158058,208],{"class":93},[76,158060,158061,158064],{"class":78,"line":1293},[76,158062,158063],{"class":89},"    else",[76,158065,3811],{"class":93},[76,158067,158068,158070,158072,158075],{"class":78,"line":1384},[76,158069,32521],{"class":250},[76,158071,202],{"class":93},[76,158073,158074],{"class":305},"\"请先买票\"",[76,158076,208],{"class":93},[76,158078,158079,158081],{"class":78,"line":1390},[76,158080,1773],{"class":89},[76,158082,3811],{"class":93},[76,158084,158085,158087,158089,158092],{"class":78,"line":1402},[76,158086,31369],{"class":250},[76,158088,202],{"class":93},[76,158090,158091],{"class":305},"\"未成年人禁止进入\"",[76,158093,208],{"class":93},[14,158095,158096],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[140,158098,158100],{"id":158099},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[169,158102,158104],{"id":158103},"_361-and","3.6.1 and",[14,158106,158107],{},"两个条件都成立才成立。",[67,158109,158111],{"className":69,"code":158110,"language":71,"meta":58,"style":58},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[73,158112,158113,158121,158129,158133,158148],{"__ignoreMap":58},[76,158114,158115,158117,158119],{"class":78,"line":79},[76,158116,146587],{"class":93},[76,158118,247],{"class":89},[76,158120,88135],{"class":250},[76,158122,158123,158125,158127],{"class":78,"line":86},[76,158124,156402],{"class":93},[76,158126,247],{"class":89},[76,158128,153640],{"class":250},[76,158130,158131],{"class":78,"line":97},[76,158132,2472],{"emptyLinePlaceholder":125},[76,158134,158135,158137,158139,158141,158143,158145],{"class":78,"line":103},[76,158136,1603],{"class":89},[76,158138,15779],{"class":93},[76,158140,1782],{"class":89},[76,158142,156326],{"class":250},[76,158144,120470],{"class":89},[76,158146,158147],{"class":93}," has_ticket:\n",[76,158149,158150,158152,158154,158156],{"class":78,"line":1273},[76,158151,31369],{"class":250},[76,158153,202],{"class":93},[76,158155,157688],{"class":305},[76,158157,208],{"class":93},[169,158159,158161],{"id":158160},"_362-or","3.6.2 or",[14,158163,158164],{},"只要一个条件成立就成立。",[67,158166,158168],{"className":69,"code":158167,"language":71,"meta":58,"style":58},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[73,158169,158170,158179,158188,158192,158204],{"__ignoreMap":58},[76,158171,158172,158175,158177],{"class":78,"line":79},[76,158173,158174],{"class":93},"is_vip ",[76,158176,247],{"class":89},[76,158178,125848],{"class":250},[76,158180,158181,158184,158186],{"class":78,"line":86},[76,158182,158183],{"class":93},"coupon ",[76,158185,247],{"class":89},[76,158187,153640],{"class":250},[76,158189,158190],{"class":78,"line":97},[76,158191,2472],{"emptyLinePlaceholder":125},[76,158193,158194,158196,158199,158201],{"class":78,"line":103},[76,158195,1603],{"class":89},[76,158197,158198],{"class":93}," is_vip ",[76,158200,115131],{"class":89},[76,158202,158203],{"class":93}," coupon:\n",[76,158205,158206,158208,158210,158213],{"class":78,"line":1273},[76,158207,31369],{"class":250},[76,158209,202],{"class":93},[76,158211,158212],{"class":305},"\"可以享受优惠\"",[76,158214,208],{"class":93},[169,158216,158218],{"id":158217},"_363-not","3.6.3 not",[14,158220,158221],{},"取反。",[67,158223,158225],{"className":69,"code":158224,"language":71,"meta":58,"style":58},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[73,158226,158227,158236,158240,158249],{"__ignoreMap":58},[76,158228,158229,158232,158234],{"class":78,"line":79},[76,158230,158231],{"class":93},"is_closed ",[76,158233,247],{"class":89},[76,158235,125848],{"class":250},[76,158237,158238],{"class":78,"line":86},[76,158239,2472],{"emptyLinePlaceholder":125},[76,158241,158242,158244,158246],{"class":78,"line":97},[76,158243,1603],{"class":89},[76,158245,39000],{"class":89},[76,158247,158248],{"class":93}," is_closed:\n",[76,158250,158251,158253,158255,158258],{"class":78,"line":103},[76,158252,31369],{"class":250},[76,158254,202],{"class":93},[76,158256,158257],{"class":305},"\"店铺营业中\"",[76,158259,208],{"class":93},[140,158261,158263],{"id":158262},"_37-链式比较","3.7 链式比较",[14,158265,158266],{},"Python 支持链式比较：",[67,158268,158270],{"className":69,"code":158269,"language":71,"meta":58,"style":58},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[73,158271,158272,158281,158285,158302],{"__ignoreMap":58},[76,158273,158274,158276,158278],{"class":78,"line":79},[76,158275,155399],{"class":93},[76,158277,247],{"class":89},[76,158279,158280],{"class":250}," 85\n",[76,158282,158283],{"class":78,"line":86},[76,158284,2472],{"emptyLinePlaceholder":125},[76,158286,158287,158289,158291,158294,158296,158298,158300],{"class":78,"line":97},[76,158288,1603],{"class":89},[76,158290,4165],{"class":250},[76,158292,158293],{"class":89}," \u003C=",[76,158295,157824],{"class":93},[76,158297,1660],{"class":89},[76,158299,5826],{"class":250},[76,158301,3811],{"class":93},[76,158303,158304,158306,158308,158311],{"class":78,"line":103},[76,158305,31369],{"class":250},[76,158307,202],{"class":93},[76,158309,158310],{"class":305},"\"成绩合法\"",[76,158312,208],{"class":93},[14,158314,158315],{},"等价于：",[67,158317,158319],{"className":69,"code":158318,"language":71,"meta":58,"style":58},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[73,158320,158321,158341],{"__ignoreMap":58},[76,158322,158323,158325,158327,158329,158331,158333,158335,158337,158339],{"class":78,"line":79},[76,158324,1603],{"class":89},[76,158326,157824],{"class":93},[76,158328,1782],{"class":89},[76,158330,4165],{"class":250},[76,158332,120470],{"class":89},[76,158334,157824],{"class":93},[76,158336,1660],{"class":89},[76,158338,5826],{"class":250},[76,158340,3811],{"class":93},[76,158342,158343,158345,158347,158349],{"class":78,"line":86},[76,158344,31369],{"class":250},[76,158346,202],{"class":93},[76,158348,158310],{"class":305},[76,158350,208],{"class":93},[140,158352,158354],{"id":158353},"_38-真值和假值","3.8 真值和假值",[14,158356,116508,158357,158359],{},[73,158358,1603],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158361,158362],{},"假值：",[67,158364,158366],{"className":69,"code":158365,"language":71,"meta":58,"style":58},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[73,158367,158368,158372,158377,158381,158385,158390,158394,158398,158403],{"__ignoreMap":58},[76,158369,158370],{"class":78,"line":79},[76,158371,157558],{"class":250},[76,158373,158374],{"class":78,"line":86},[76,158375,158376],{"class":250},"None\n",[76,158378,158379],{"class":78,"line":97},[76,158380,3157],{"class":250},[76,158382,158383],{"class":78,"line":103},[76,158384,32412],{"class":250},[76,158386,158387],{"class":78,"line":1273},[76,158388,158389],{"class":305},"\"\"\n",[76,158391,158392],{"class":78,"line":1287},[76,158393,32427],{"class":93},[76,158395,158396],{"class":78,"line":1293},[76,158397,2048],{"class":93},[76,158399,158400],{"class":78,"line":1384},[76,158401,158402],{"class":93},"{}\n",[76,158404,158405,158407],{"class":78,"line":1390},[76,158406,155331],{"class":250},[76,158408,2048],{"class":93},[14,158410,15207],{},[67,158412,158414],{"className":69,"code":158413,"language":71,"meta":58,"style":58},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[73,158415,158416,158430,158434,158441,158461,158467],{"__ignoreMap":58},[76,158417,158418,158420,158422,158424,158426,158428],{"class":78,"line":79},[76,158419,146577],{"class":93},[76,158421,247],{"class":89},[76,158423,60675],{"class":250},[76,158425,202],{"class":93},[76,158427,152420],{"class":305},[76,158429,208],{"class":93},[76,158431,158432],{"class":78,"line":86},[76,158433,2472],{"emptyLinePlaceholder":125},[76,158435,158436,158438],{"class":78,"line":97},[76,158437,1603],{"class":89},[76,158439,158440],{"class":93}," name:\n",[76,158442,158443,158445,158447,158449,158451,158453,158455,158457,158459],{"class":78,"line":103},[76,158444,31369],{"class":250},[76,158446,202],{"class":93},[76,158448,254],{"class":89},[76,158450,157095],{"class":305},[76,158452,1095],{"class":250},[76,158454,79880],{"class":93},[76,158456,1145],{"class":250},[76,158458,452],{"class":305},[76,158460,208],{"class":93},[76,158462,158463,158465],{"class":78,"line":1273},[76,158464,1773],{"class":89},[76,158466,3811],{"class":93},[76,158468,158469,158471,158473,158476],{"class":78,"line":1287},[76,158470,31369],{"class":250},[76,158472,202],{"class":93},[76,158474,158475],{"class":305},"\"姓名不能为空\"",[76,158477,208],{"class":93},[140,158479,158481],{"id":158480},"_39-match语句","3.9 match语句",[14,158483,158484,158485,158487],{},"Python 3.10 开始支持 ",[73,158486,71335],{},"。它适合处理固定选项。",[67,158489,158491],{"className":69,"code":158490,"language":71,"meta":58,"style":58},"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",[73,158492,158493,158509,158513,158520,158530,158541,158550,158561,158570,158581,158588],{"__ignoreMap":58},[76,158494,158495,158498,158500,158502,158504,158507],{"class":78,"line":79},[76,158496,158497],{"class":93},"command ",[76,158499,247],{"class":89},[76,158501,60675],{"class":250},[76,158503,202],{"class":93},[76,158505,158506],{"class":305},"\"请输入命令:\"",[76,158508,208],{"class":93},[76,158510,158511],{"class":78,"line":86},[76,158512,2472],{"emptyLinePlaceholder":125},[76,158514,158515,158517],{"class":78,"line":97},[76,158516,71335],{"class":89},[76,158518,158519],{"class":93}," command:\n",[76,158521,158522,158525,158528],{"class":78,"line":103},[76,158523,158524],{"class":89},"    case",[76,158526,158527],{"class":305}," \"start\"",[76,158529,3811],{"class":93},[76,158531,158532,158534,158536,158539],{"class":78,"line":1273},[76,158533,32521],{"class":250},[76,158535,202],{"class":93},[76,158537,158538],{"class":305},"\"启动\"",[76,158540,208],{"class":93},[76,158542,158543,158545,158548],{"class":78,"line":1287},[76,158544,158524],{"class":89},[76,158546,158547],{"class":305}," \"stop\"",[76,158549,3811],{"class":93},[76,158551,158552,158554,158556,158559],{"class":78,"line":1293},[76,158553,32521],{"class":250},[76,158555,202],{"class":93},[76,158557,158558],{"class":305},"\"停止\"",[76,158560,208],{"class":93},[76,158562,158563,158565,158568],{"class":78,"line":1384},[76,158564,158524],{"class":89},[76,158566,158567],{"class":305}," \"restart\"",[76,158569,3811],{"class":93},[76,158571,158572,158574,158576,158579],{"class":78,"line":1390},[76,158573,32521],{"class":250},[76,158575,202],{"class":93},[76,158577,158578],{"class":305},"\"重启\"",[76,158580,208],{"class":93},[76,158582,158583,158585],{"class":78,"line":1402},[76,158584,158524],{"class":89},[76,158586,158587],{"class":93}," _:\n",[76,158589,158590,158592,158594,158597],{"class":78,"line":1684},[76,158591,32521],{"class":250},[76,158593,202],{"class":93},[76,158595,158596],{"class":305},"\"未知命令\"",[76,158598,208],{"class":93},[14,158600,158601,158602,158604,158605,158607],{},"入门阶段掌握 ",[73,158603,154699],{}," 更重要，",[73,158606,71335],{}," 可以作为补充。",[140,158609,158611],{"id":158610},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158613,123333],{},[152,158615,158616,158619,158622],{},[155,158617,158618],{},"输入成绩。",[155,158620,158621],{},"判断成绩是否合法。",[155,158623,158624],{},"输出等级。",[14,158626,10107],{},[67,158628,158630],{"className":69,"code":158629,"language":71,"meta":58,"style":58},"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",[73,158631,158632,158650,158654,158672,158683,158695,158706,158718,158729,158742,158753,158765,158776,158782],{"__ignoreMap":58},[76,158633,158634,158636,158638,158640,158642,158644,158646,158648],{"class":78,"line":79},[76,158635,155399],{"class":93},[76,158637,247],{"class":89},[76,158639,109838],{"class":250},[76,158641,202],{"class":93},[76,158643,53891],{"class":250},[76,158645,202],{"class":93},[76,158647,152450],{"class":305},[76,158649,30567],{"class":93},[76,158651,158652],{"class":78,"line":86},[76,158653,2472],{"emptyLinePlaceholder":125},[76,158655,158656,158658,158660,158662,158664,158666,158668,158670],{"class":78,"line":97},[76,158657,1603],{"class":89},[76,158659,39000],{"class":89},[76,158661,4165],{"class":250},[76,158663,158293],{"class":89},[76,158665,157824],{"class":93},[76,158667,1660],{"class":89},[76,158669,5826],{"class":250},[76,158671,3811],{"class":93},[76,158673,158674,158676,158678,158681],{"class":78,"line":103},[76,158675,31369],{"class":250},[76,158677,202],{"class":93},[76,158679,158680],{"class":305},"\"成绩不合法\"",[76,158682,208],{"class":93},[76,158684,158685,158687,158689,158691,158693],{"class":78,"line":1273},[76,158686,157847],{"class":89},[76,158688,157824],{"class":93},[76,158690,1782],{"class":89},[76,158692,157829],{"class":250},[76,158694,3811],{"class":93},[76,158696,158697,158699,158701,158704],{"class":78,"line":1287},[76,158698,31369],{"class":250},[76,158700,202],{"class":93},[76,158702,158703],{"class":305},"\"等级:A\"",[76,158705,208],{"class":93},[76,158707,158708,158710,158712,158714,158716],{"class":78,"line":1293},[76,158709,157847],{"class":89},[76,158711,157824],{"class":93},[76,158713,1782],{"class":89},[76,158715,157854],{"class":250},[76,158717,3811],{"class":93},[76,158719,158720,158722,158724,158727],{"class":78,"line":1384},[76,158721,31369],{"class":250},[76,158723,202],{"class":93},[76,158725,158726],{"class":305},"\"等级:B\"",[76,158728,208],{"class":93},[76,158730,158731,158733,158735,158737,158740],{"class":78,"line":1390},[76,158732,157847],{"class":89},[76,158734,157824],{"class":93},[76,158736,1782],{"class":89},[76,158738,158739],{"class":250}," 70",[76,158741,3811],{"class":93},[76,158743,158744,158746,158748,158751],{"class":78,"line":1402},[76,158745,31369],{"class":250},[76,158747,202],{"class":93},[76,158749,158750],{"class":305},"\"等级:C\"",[76,158752,208],{"class":93},[76,158754,158755,158757,158759,158761,158763],{"class":78,"line":1684},[76,158756,157847],{"class":89},[76,158758,157824],{"class":93},[76,158760,1782],{"class":89},[76,158762,157878],{"class":250},[76,158764,3811],{"class":93},[76,158766,158767,158769,158771,158774],{"class":78,"line":1689},[76,158768,31369],{"class":250},[76,158770,202],{"class":93},[76,158772,158773],{"class":305},"\"等级:D\"",[76,158775,208],{"class":93},[76,158777,158778,158780],{"class":78,"line":1695},[76,158779,1773],{"class":89},[76,158781,3811],{"class":93},[76,158783,158784,158786,158788,158791],{"class":78,"line":1700},[76,158785,31369],{"class":250},[76,158787,202],{"class":93},[76,158789,158790],{"class":305},"\"等级:E\"",[76,158792,208],{"class":93},[140,158794,158796],{"id":158795},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158798,123333],{},[152,158800,158801,158804,158807,158810],{},[155,158802,158803],{},"输入消费金额。",[155,158805,158806],{},"输入会员等级，普通、银卡、金卡。",[155,158808,158809],{},"普通不打折，银卡 9 折，金卡 8 折。",[155,158811,158812],{},"满 500 再减 50。",[14,158814,10107],{},[67,158816,158818],{"className":69,"code":158817,"language":71,"meta":58,"style":58},"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",[73,158819,158820,158840,158856,158860,158868,158872,158886,158896,158909,158918,158931,158939,158945,158956,158960,158974,158978,158992,159002,159006],{"__ignoreMap":58},[76,158821,158822,158825,158827,158829,158831,158833,158835,158838],{"class":78,"line":79},[76,158823,158824],{"class":93},"amount ",[76,158826,247],{"class":89},[76,158828,109838],{"class":250},[76,158830,202],{"class":93},[76,158832,53891],{"class":250},[76,158834,202],{"class":93},[76,158836,158837],{"class":305},"\"请输入消费金额:\"",[76,158839,30567],{"class":93},[76,158841,158842,158845,158847,158849,158851,158854],{"class":78,"line":86},[76,158843,158844],{"class":93},"level ",[76,158846,247],{"class":89},[76,158848,60675],{"class":250},[76,158850,202],{"class":93},[76,158852,158853],{"class":305},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[76,158855,208],{"class":93},[76,158857,158858],{"class":78,"line":97},[76,158859,2472],{"emptyLinePlaceholder":125},[76,158861,158862,158864,158866],{"class":78,"line":103},[76,158863,157277],{"class":93},[76,158865,247],{"class":89},[76,158867,55769],{"class":250},[76,158869,158870],{"class":78,"line":1273},[76,158871,2472],{"emptyLinePlaceholder":125},[76,158873,158874,158876,158879,158881,158884],{"class":78,"line":1287},[76,158875,1603],{"class":89},[76,158877,158878],{"class":93}," level ",[76,158880,3021],{"class":89},[76,158882,158883],{"class":305}," \"银卡\"",[76,158885,3811],{"class":93},[76,158887,158888,158891,158893],{"class":78,"line":1293},[76,158889,158890],{"class":93},"    discount ",[76,158892,247],{"class":89},[76,158894,158895],{"class":250}," 0.9\n",[76,158897,158898,158900,158902,158904,158907],{"class":78,"line":1384},[76,158899,157847],{"class":89},[76,158901,158878],{"class":93},[76,158903,3021],{"class":89},[76,158905,158906],{"class":305}," \"金卡\"",[76,158908,3811],{"class":93},[76,158910,158911,158913,158915],{"class":78,"line":1390},[76,158912,158890],{"class":93},[76,158914,247],{"class":89},[76,158916,158917],{"class":250}," 0.8\n",[76,158919,158920,158922,158924,158926,158929],{"class":78,"line":1402},[76,158921,157847],{"class":89},[76,158923,158878],{"class":93},[76,158925,3021],{"class":89},[76,158927,158928],{"class":305}," \"普通\"",[76,158930,3811],{"class":93},[76,158932,158933,158935,158937],{"class":78,"line":1684},[76,158934,158890],{"class":93},[76,158936,247],{"class":89},[76,158938,55769],{"class":250},[76,158940,158941,158943],{"class":78,"line":1689},[76,158942,1773],{"class":89},[76,158944,3811],{"class":93},[76,158946,158947,158949,158951,158954],{"class":78,"line":1695},[76,158948,31369],{"class":250},[76,158950,202],{"class":93},[76,158952,158953],{"class":305},"\"会员等级输入错误，按普通会员计算\"",[76,158955,208],{"class":93},[76,158957,158958],{"class":78,"line":1700},[76,158959,2472],{"emptyLinePlaceholder":125},[76,158961,158962,158965,158967,158970,158972],{"class":78,"line":1714},[76,158963,158964],{"class":93},"pay ",[76,158966,247],{"class":89},[76,158968,158969],{"class":93}," amount ",[76,158971,655],{"class":89},[76,158973,157316],{"class":93},[76,158975,158976],{"class":78,"line":1719},[76,158977,2472],{"emptyLinePlaceholder":125},[76,158979,158980,158982,158985,158987,158990],{"class":78,"line":1725},[76,158981,1603],{"class":89},[76,158983,158984],{"class":93}," pay ",[76,158986,1782],{"class":89},[76,158988,158989],{"class":250}," 500",[76,158991,3811],{"class":93},[76,158993,158994,158997,158999],{"class":78,"line":1746},[76,158995,158996],{"class":93},"    pay ",[76,158998,150293],{"class":89},[76,159000,159001],{"class":250}," 50\n",[76,159003,159004],{"class":78,"line":1751},[76,159005,2472],{"emptyLinePlaceholder":125},[76,159007,159008,159010,159012,159014,159016,159018,159021,159023,159025,159027],{"class":78,"line":1765},[76,159009,30485],{"class":250},[76,159011,202],{"class":93},[76,159013,254],{"class":89},[76,159015,157397],{"class":305},[76,159017,1095],{"class":250},[76,159019,159020],{"class":93},"pay",[76,159022,157200],{"class":89},[76,159024,1145],{"class":250},[76,159026,157053],{"class":305},[76,159028,208],{"class":93},[140,159030,159032],{"id":159031},"_312-易错点","3.12 易错点",[152,159034,159035,159038,159041,159044,159049],{},[155,159036,159037],{},"冒号不能漏。",[155,159039,159040],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[155,159042,159043],{},"多分支判断要注意顺序。",[155,159045,159046,159047,28458],{},"判断相等用 ",[73,159048,3021],{},[155,159050,159051],{},"字符串比较区分大小写：",[67,159053,159055],{"className":69,"code":159054,"language":71,"meta":58,"style":58},"\"Y\" == \"y\"  # False\n",[73,159056,159057],{"__ignoreMap":58},[76,159058,159059,159062,159064,159066],{"class":78,"line":79},[76,159060,159061],{"class":305},"\"Y\"",[76,159063,101600],{"class":89},[76,159065,158046],{"class":305},[76,159067,159068],{"class":82},"  # False\n",[14,159070,159071],{},"可转换后再判断：",[67,159073,159075],{"className":69,"code":159074,"language":71,"meta":58,"style":58},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[73,159076,159077,159094,159107],{"__ignoreMap":58},[76,159078,159079,159082,159084,159086,159088,159091],{"class":78,"line":79},[76,159080,159081],{"class":93},"answer ",[76,159083,247],{"class":89},[76,159085,60675],{"class":250},[76,159087,202],{"class":93},[76,159089,159090],{"class":305},"\"是否继续(y\u002Fn):\"",[76,159092,159093],{"class":93},").lower()\n",[76,159095,159096,159098,159101,159103,159105],{"class":78,"line":86},[76,159097,1603],{"class":89},[76,159099,159100],{"class":93}," answer ",[76,159102,3021],{"class":89},[76,159104,158046],{"class":305},[76,159106,3811],{"class":93},[76,159108,159109,159111,159113,159116],{"class":78,"line":97},[76,159110,31369],{"class":250},[76,159112,202],{"class":93},[76,159114,159115],{"class":305},"\"继续\"",[76,159117,208],{"class":93},[140,159119,159121],{"id":159120},"_313-本章练习","3.13 本章练习",[152,159123,159124,159127,159130,159133,159143],{},[155,159125,159126],{},"输入年龄，判断是否成年。",[155,159128,159129],{},"输入年份，判断是否为闰年。",[155,159131,159132],{},"输入三个数字，输出最大值。",[155,159134,159135,159136,159139,159140,159142],{},"写登录判断：用户名是 ",[73,159137,159138],{},"admin"," 且密码是 ",[73,159141,15156],{}," 才登录成功。",[155,159144,159145],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[117,159147,159148],{},"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":58,"searchDepth":86,"depth":86,"links":159150},[159151,159152,159153,159154,159155,159156,159161,159162,159163,159164,159165,159166,159167],{"id":157539,"depth":86,"text":157540},{"id":157592,"depth":86,"text":157593},{"id":157696,"depth":86,"text":157697},{"id":157786,"depth":86,"text":157787},{"id":157976,"depth":86,"text":157977},{"id":158099,"depth":86,"text":158100,"children":159157},[159158,159159,159160],{"id":158103,"depth":97,"text":158104},{"id":158160,"depth":97,"text":158161},{"id":158217,"depth":97,"text":158218},{"id":158262,"depth":86,"text":158263},{"id":158353,"depth":86,"text":158354},{"id":158480,"depth":86,"text":158481},{"id":158610,"depth":86,"text":158611},{"id":158795,"depth":86,"text":158796},{"id":159031,"depth":86,"text":159032},{"id":159120,"depth":86,"text":159121},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157531,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159174,"title":159175,"body":159176,"description":122,"extension":123,"meta":160945,"navigation":125,"path":160946,"seo":160947,"stem":160948,"__hash__":160949},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159177,"toc":160925},[159178,159181,159185,159191,159194,159211,159215,159217,159234,159236,159281,159283,159300,159304,159307,159373,159376,159394,159398,159559,159568,159572,159576,159581,159628,159630,159636,159640,159645,159692,159694,159700,159704,159709,159745,159748,159795,159799,159805,159863,159868,159899,159904,159908,159963,159966,160038,160041,160100,160104,160107,160182,160185,160189,160295,160298,160324,160328,160340,160409,160412,160504,160508,160510,160521,160523,160653,160657,160859,160867,160871,160901,160905,160922],[10,159179,159175],{"id":159180},"_4-循环语句",[140,159182,159184],{"id":159183},"_41-为什么需要循环","4.1 为什么需要循环",[14,159186,159187,159188,159190],{},"如果要输出 1 到 100，不应该写 100 行 ",[73,159189,146513],{},"，而应该用循环。",[14,159192,159193],{},"循环适合处理重复任务：",[152,159195,159196,159199,159202,159205,159208],{},[155,159197,159198],{},"重复输出。",[155,159200,159201],{},"重复输入。",[155,159203,159204],{},"遍历数据。",[155,159206,159207],{},"持续执行菜单。",[155,159209,159210],{},"批量处理文件或数据。",[140,159212,159214],{"id":159213},"_42-while循环","4.2 while循环",[14,159216,5253],{},[67,159218,159220],{"className":69,"code":159219,"language":71,"meta":58,"style":58},"while 条件:\n    循环体\n",[73,159221,159222,159229],{"__ignoreMap":58},[76,159223,159224,159226],{"class":78,"line":79},[76,159225,108704],{"class":89},[76,159227,159228],{"class":93}," 条件:\n",[76,159230,159231],{"class":78,"line":86},[76,159232,159233],{"class":93},"    循环体\n",[14,159235,15207],{},[67,159237,159239],{"className":69,"code":159238,"language":71,"meta":58,"style":58},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[73,159240,159241,159249,159253,159265,159272],{"__ignoreMap":58},[76,159242,159243,159245,159247],{"class":78,"line":79},[76,159244,100189],{"class":93},[76,159246,247],{"class":89},[76,159248,55769],{"class":250},[76,159250,159251],{"class":78,"line":86},[76,159252,2472],{"emptyLinePlaceholder":125},[76,159254,159255,159257,159259,159261,159263],{"class":78,"line":97},[76,159256,108704],{"class":89},[76,159258,9510],{"class":93},[76,159260,1660],{"class":89},[76,159262,2220],{"class":250},[76,159264,3811],{"class":93},[76,159266,159267,159269],{"class":78,"line":103},[76,159268,31369],{"class":250},[76,159270,159271],{"class":93},"(i)\n",[76,159273,159274,159277,159279],{"class":78,"line":1273},[76,159275,159276],{"class":93},"    i ",[76,159278,9549],{"class":89},[76,159280,55769],{"class":250},[14,159282,80999],{},[152,159284,159285,159291,159294,159297],{},[155,159286,159287,159288,28458],{},"判断条件 ",[73,159289,159290],{},"i \u003C= 5",[155,159292,159293],{},"条件成立，执行循环体。",[155,159295,159296],{},"执行完后回到条件判断。",[155,159298,159299],{},"条件不成立，退出循环。",[140,159301,159303],{"id":159302},"_43-while累加","4.3 while累加",[14,159305,159306],{},"计算 1 到 100 的和：",[67,159308,159310],{"className":69,"code":159309,"language":71,"meta":58,"style":58},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[73,159311,159312,159320,159328,159332,159344,159354,159362,159366],{"__ignoreMap":58},[76,159313,159314,159316,159318],{"class":78,"line":79},[76,159315,100189],{"class":93},[76,159317,247],{"class":89},[76,159319,55769],{"class":250},[76,159321,159322,159324,159326],{"class":78,"line":86},[76,159323,157301],{"class":93},[76,159325,247],{"class":89},[76,159327,47403],{"class":250},[76,159329,159330],{"class":78,"line":97},[76,159331,2472],{"emptyLinePlaceholder":125},[76,159333,159334,159336,159338,159340,159342],{"class":78,"line":103},[76,159335,108704],{"class":89},[76,159337,9510],{"class":93},[76,159339,1660],{"class":89},[76,159341,5826],{"class":250},[76,159343,3811],{"class":93},[76,159345,159346,159349,159351],{"class":78,"line":1273},[76,159347,159348],{"class":93},"    total ",[76,159350,9549],{"class":89},[76,159352,159353],{"class":93}," i\n",[76,159355,159356,159358,159360],{"class":78,"line":1287},[76,159357,159276],{"class":93},[76,159359,9549],{"class":89},[76,159361,55769],{"class":250},[76,159363,159364],{"class":78,"line":1293},[76,159365,2472],{"emptyLinePlaceholder":125},[76,159367,159368,159370],{"class":78,"line":1384},[76,159369,30485],{"class":250},[76,159371,159372],{"class":93},"(total)\n",[14,159374,159375],{},"核心思想：",[152,159377,159378,159383,159388],{},[155,159379,159380,159382],{},[73,159381,641],{}," 控制循环次数。",[155,159384,159385,159387],{},[73,159386,157402],{}," 保存累加结果。",[155,159389,159390,159391,159393],{},"每轮循环都要更新 ",[73,159392,641],{},"，否则可能死循环。",[140,159395,159397],{"id":159396},"_44-while猜数字","4.4 while猜数字",[67,159399,159401],{"className":69,"code":159400,"language":71,"meta":58,"style":58},"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",[73,159402,159403,159409,159413,159430,159438,159442,159450,159470,159479,159483,159495,159506,159516,159527,159533,159555],{"__ignoreMap":58},[76,159404,159405,159407],{"class":78,"line":79},[76,159406,90],{"class":89},[76,159408,45398],{"class":93},[76,159410,159411],{"class":78,"line":86},[76,159412,2472],{"emptyLinePlaceholder":125},[76,159414,159415,159417,159419,159422,159424,159426,159428],{"class":78,"line":97},[76,159416,159081],{"class":93},[76,159418,247],{"class":89},[76,159420,159421],{"class":93}," random.randint(",[76,159423,418],{"class":250},[76,159425,12507],{"class":93},[76,159427,512],{"class":250},[76,159429,208],{"class":93},[76,159431,159432,159434,159436],{"class":78,"line":103},[76,159433,146732],{"class":93},[76,159435,247],{"class":89},[76,159437,47403],{"class":250},[76,159439,159440],{"class":78,"line":1273},[76,159441,2472],{"emptyLinePlaceholder":125},[76,159443,159444,159446,159448],{"class":78,"line":1287},[76,159445,108704],{"class":89},[76,159447,95361],{"class":250},[76,159449,3811],{"class":93},[76,159451,159452,159455,159457,159459,159461,159463,159465,159468],{"class":78,"line":1293},[76,159453,159454],{"class":93},"    guess ",[76,159456,247],{"class":89},[76,159458,2454],{"class":250},[76,159460,202],{"class":93},[76,159462,53891],{"class":250},[76,159464,202],{"class":93},[76,159466,159467],{"class":305},"\"请输入1到100之间的数字:\"",[76,159469,30567],{"class":93},[76,159471,159472,159475,159477],{"class":78,"line":1384},[76,159473,159474],{"class":93},"    count ",[76,159476,9549],{"class":89},[76,159478,55769],{"class":250},[76,159480,159481],{"class":78,"line":1390},[76,159482,2472],{"emptyLinePlaceholder":125},[76,159484,159485,159487,159490,159492],{"class":78,"line":1402},[76,159486,3173],{"class":89},[76,159488,159489],{"class":93}," guess ",[76,159491,1159],{"class":89},[76,159493,159494],{"class":93}," answer:\n",[76,159496,159497,159499,159501,159504],{"class":78,"line":1684},[76,159498,32521],{"class":250},[76,159500,202],{"class":93},[76,159502,159503],{"class":305},"\"猜大了\"",[76,159505,208],{"class":93},[76,159507,159508,159510,159512,159514],{"class":78,"line":1689},[76,159509,39363],{"class":89},[76,159511,159489],{"class":93},[76,159513,1109],{"class":89},[76,159515,159494],{"class":93},[76,159517,159518,159520,159522,159525],{"class":78,"line":1695},[76,159519,32521],{"class":250},[76,159521,202],{"class":93},[76,159523,159524],{"class":305},"\"猜小了\"",[76,159526,208],{"class":93},[76,159528,159529,159531],{"class":78,"line":1700},[76,159530,158063],{"class":89},[76,159532,3811],{"class":93},[76,159534,159535,159537,159539,159541,159544,159546,159548,159550,159553],{"class":78,"line":1714},[76,159536,32521],{"class":250},[76,159538,202],{"class":93},[76,159540,254],{"class":89},[76,159542,159543],{"class":305},"\"猜对了，一共猜了",[76,159545,1095],{"class":250},[76,159547,84504],{"class":93},[76,159549,1145],{"class":250},[76,159551,159552],{"class":305},"次\"",[76,159554,208],{"class":93},[76,159556,159557],{"class":78,"line":1719},[76,159558,31697],{"class":89},[14,159560,159561,159564,159565,159567],{},[73,159562,159563],{},"while True"," 表示无限循环，通常配合 ",[73,159566,2125],{}," 使用。",[140,159569,159571],{"id":159570},"_45-break和continue","4.5 break和continue",[169,159573,159575],{"id":159574},"_451-break","4.5.1 break",[14,159577,159578,159580],{},[73,159579,2125],{}," 直接结束整个循环。",[67,159582,159584],{"className":69,"code":159583,"language":71,"meta":58,"style":58},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[73,159585,159586,159606,159618,159622],{"__ignoreMap":58},[76,159587,159588,159590,159592,159594,159596,159598,159600,159602,159604],{"class":78,"line":79},[76,159589,3097],{"class":89},[76,159591,9510],{"class":93},[76,159593,26116],{"class":89},[76,159595,32513],{"class":250},[76,159597,202],{"class":93},[76,159599,418],{"class":250},[76,159601,12507],{"class":93},[76,159603,544],{"class":250},[76,159605,30856],{"class":93},[76,159607,159608,159610,159612,159614,159616],{"class":78,"line":86},[76,159609,3173],{"class":89},[76,159611,9510],{"class":93},[76,159613,3021],{"class":89},[76,159615,78140],{"class":250},[76,159617,3811],{"class":93},[76,159619,159620],{"class":78,"line":97},[76,159621,31697],{"class":89},[76,159623,159624,159626],{"class":78,"line":103},[76,159625,31369],{"class":250},[76,159627,159271],{"class":93},[14,159629,146498],{},[67,159631,159634],{"className":159632,"code":159633,"language":5259,"meta":58},[5257],"1\n2\n",[73,159635,159633],{"__ignoreMap":58},[169,159637,159639],{"id":159638},"_452-continue","4.5.2 continue",[14,159641,159642,159644],{},[73,159643,154713],{}," 跳过本轮剩余代码，进入下一轮循环。",[67,159646,159648],{"className":69,"code":159647,"language":71,"meta":58,"style":58},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[73,159649,159650,159670,159682,159686],{"__ignoreMap":58},[76,159651,159652,159654,159656,159658,159660,159662,159664,159666,159668],{"class":78,"line":79},[76,159653,3097],{"class":89},[76,159655,9510],{"class":93},[76,159657,26116],{"class":89},[76,159659,32513],{"class":250},[76,159661,202],{"class":93},[76,159663,418],{"class":250},[76,159665,12507],{"class":93},[76,159667,544],{"class":250},[76,159669,30856],{"class":93},[76,159671,159672,159674,159676,159678,159680],{"class":78,"line":86},[76,159673,3173],{"class":89},[76,159675,9510],{"class":93},[76,159677,3021],{"class":89},[76,159679,78140],{"class":250},[76,159681,3811],{"class":93},[76,159683,159684],{"class":78,"line":97},[76,159685,148553],{"class":89},[76,159687,159688,159690],{"class":78,"line":103},[76,159689,31369],{"class":250},[76,159691,159271],{"class":93},[14,159693,146498],{},[67,159695,159698],{"className":159696,"code":159697,"language":5259,"meta":58},[5257],"1\n2\n4\n5\n",[73,159699,159697],{"__ignoreMap":58},[140,159701,159703],{"id":159702},"_46-for循环","4.6 for循环",[14,159705,159706,159708],{},[73,159707,3097],{}," 常用于遍历序列。",[67,159710,159712],{"className":69,"code":159711,"language":71,"meta":58,"style":58},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[73,159713,159714,159723,159727,159738],{"__ignoreMap":58},[76,159715,159716,159718,159720],{"class":78,"line":79},[76,159717,146577],{"class":93},[76,159719,247],{"class":89},[76,159721,159722],{"class":305}," \"python\"\n",[76,159724,159725],{"class":78,"line":86},[76,159726,2472],{"emptyLinePlaceholder":125},[76,159728,159729,159731,159734,159736],{"class":78,"line":97},[76,159730,3097],{"class":89},[76,159732,159733],{"class":93}," ch ",[76,159735,26116],{"class":89},[76,159737,158440],{"class":93},[76,159739,159740,159742],{"class":78,"line":103},[76,159741,31369],{"class":250},[76,159743,159744],{"class":93},"(ch)\n",[14,159746,159747],{},"遍历列表：",[67,159749,159751],{"className":69,"code":159750,"language":71,"meta":58,"style":58},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[73,159752,159753,159775,159779,159789],{"__ignoreMap":58},[76,159754,159755,159758,159760,159762,159764,159766,159768,159770,159773],{"class":78,"line":79},[76,159756,159757],{"class":93},"students ",[76,159759,247],{"class":89},[76,159761,52296],{"class":93},[76,159763,149929],{"class":305},[76,159765,12507],{"class":93},[76,159767,150977],{"class":305},[76,159769,12507],{"class":93},[76,159771,159772],{"class":305},"\"小刚\"",[76,159774,33316],{"class":93},[76,159776,159777],{"class":78,"line":86},[76,159778,2472],{"emptyLinePlaceholder":125},[76,159780,159781,159783,159785,159787],{"class":78,"line":97},[76,159782,3097],{"class":89},[76,159784,152178],{"class":93},[76,159786,26116],{"class":89},[76,159788,152183],{"class":93},[76,159790,159791,159793],{"class":78,"line":103},[76,159792,31369],{"class":250},[76,159794,150083],{"class":93},[140,159796,159798],{"id":159797},"_47-range函数","4.7 range函数",[14,159800,159801,159804],{},[73,159802,159803],{},"range()"," 用于生成整数序列。",[67,159806,159808],{"className":69,"code":159807,"language":71,"meta":58,"style":58},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[73,159809,159810,159824,159842],{"__ignoreMap":58},[76,159811,159812,159814,159816,159818,159821],{"class":78,"line":79},[76,159813,33486],{"class":250},[76,159815,202],{"class":93},[76,159817,520],{"class":250},[76,159819,159820],{"class":93},")          ",[76,159822,159823],{"class":82},"# 0,1,2,3,4\n",[76,159825,159826,159828,159830,159832,159834,159836,159839],{"class":78,"line":86},[76,159827,33486],{"class":250},[76,159829,202],{"class":93},[76,159831,418],{"class":250},[76,159833,12507],{"class":93},[76,159835,520],{"class":250},[76,159837,159838],{"class":93},")       ",[76,159840,159841],{"class":82},"# 1,2,3,4\n",[76,159843,159844,159846,159848,159850,159852,159854,159856,159858,159860],{"class":78,"line":97},[76,159845,33486],{"class":250},[76,159847,202],{"class":93},[76,159849,418],{"class":250},[76,159851,12507],{"class":93},[76,159853,646],{"class":250},[76,159855,12507],{"class":93},[76,159857,278],{"class":250},[76,159859,155702],{"class":93},[76,159861,159862],{"class":82},"# 1,3,5,7,9\n",[14,159864,159865,159866,24691],{},"配合 ",[73,159867,3097],{},[67,159869,159871],{"className":69,"code":159870,"language":71,"meta":58,"style":58},"for i in range(1, 6):\n    print(i)\n",[73,159872,159873,159893],{"__ignoreMap":58},[76,159874,159875,159877,159879,159881,159883,159885,159887,159889,159891],{"class":78,"line":79},[76,159876,3097],{"class":89},[76,159878,9510],{"class":93},[76,159880,26116],{"class":89},[76,159882,32513],{"class":250},[76,159884,202],{"class":93},[76,159886,418],{"class":250},[76,159888,12507],{"class":93},[76,159890,544],{"class":250},[76,159892,30856],{"class":93},[76,159894,159895,159897],{"class":78,"line":86},[76,159896,31369],{"class":250},[76,159898,159271],{"class":93},[14,159900,9097,159901,159903],{},[73,159902,33486],{}," 的结束值不包含在内。",[140,159905,159907],{"id":159906},"_48-for循环求和","4.8 for循环求和",[67,159909,159911],{"className":69,"code":159910,"language":71,"meta":58,"style":58},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[73,159912,159913,159921,159925,159945,159953,159957],{"__ignoreMap":58},[76,159914,159915,159917,159919],{"class":78,"line":79},[76,159916,157301],{"class":93},[76,159918,247],{"class":89},[76,159920,47403],{"class":250},[76,159922,159923],{"class":78,"line":86},[76,159924,2472],{"emptyLinePlaceholder":125},[76,159926,159927,159929,159931,159933,159935,159937,159939,159941,159943],{"class":78,"line":97},[76,159928,3097],{"class":89},[76,159930,9510],{"class":93},[76,159932,26116],{"class":89},[76,159934,32513],{"class":250},[76,159936,202],{"class":93},[76,159938,418],{"class":250},[76,159940,12507],{"class":93},[76,159942,537],{"class":250},[76,159944,30856],{"class":93},[76,159946,159947,159949,159951],{"class":78,"line":103},[76,159948,159348],{"class":93},[76,159950,9549],{"class":89},[76,159952,159353],{"class":93},[76,159954,159955],{"class":78,"line":1273},[76,159956,2472],{"emptyLinePlaceholder":125},[76,159958,159959,159961],{"class":78,"line":1287},[76,159960,30485],{"class":250},[76,159962,159372],{"class":93},[14,159964,159965],{},"求偶数和：",[67,159967,159969],{"className":69,"code":159968,"language":71,"meta":58,"style":58},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[73,159970,159971,159979,159983,160003,160019,160028,160032],{"__ignoreMap":58},[76,159972,159973,159975,159977],{"class":78,"line":79},[76,159974,157301],{"class":93},[76,159976,247],{"class":89},[76,159978,47403],{"class":250},[76,159980,159981],{"class":78,"line":86},[76,159982,2472],{"emptyLinePlaceholder":125},[76,159984,159985,159987,159989,159991,159993,159995,159997,159999,160001],{"class":78,"line":97},[76,159986,3097],{"class":89},[76,159988,9510],{"class":93},[76,159990,26116],{"class":89},[76,159992,32513],{"class":250},[76,159994,202],{"class":93},[76,159996,418],{"class":250},[76,159998,12507],{"class":93},[76,160000,537],{"class":250},[76,160002,30856],{"class":93},[76,160004,160005,160007,160009,160011,160013,160015,160017],{"class":78,"line":103},[76,160006,3173],{"class":89},[76,160008,9510],{"class":93},[76,160010,106],{"class":89},[76,160012,14827],{"class":250},[76,160014,101600],{"class":89},[76,160016,4165],{"class":250},[76,160018,3811],{"class":93},[76,160020,160021,160024,160026],{"class":78,"line":1273},[76,160022,160023],{"class":93},"        total ",[76,160025,9549],{"class":89},[76,160027,159353],{"class":93},[76,160029,160030],{"class":78,"line":1287},[76,160031,2472],{"emptyLinePlaceholder":125},[76,160033,160034,160036],{"class":78,"line":1293},[76,160035,30485],{"class":250},[76,160037,159372],{"class":93},[14,160039,160040],{},"也可以：",[67,160042,160044],{"className":69,"code":160043,"language":71,"meta":58,"style":58},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[73,160045,160046,160054,160058,160082,160090,160094],{"__ignoreMap":58},[76,160047,160048,160050,160052],{"class":78,"line":79},[76,160049,157301],{"class":93},[76,160051,247],{"class":89},[76,160053,47403],{"class":250},[76,160055,160056],{"class":78,"line":86},[76,160057,2472],{"emptyLinePlaceholder":125},[76,160059,160060,160062,160064,160066,160068,160070,160072,160074,160076,160078,160080],{"class":78,"line":97},[76,160061,3097],{"class":89},[76,160063,9510],{"class":93},[76,160065,26116],{"class":89},[76,160067,32513],{"class":250},[76,160069,202],{"class":93},[76,160071,278],{"class":250},[76,160073,12507],{"class":93},[76,160075,537],{"class":250},[76,160077,12507],{"class":93},[76,160079,278],{"class":250},[76,160081,30856],{"class":93},[76,160083,160084,160086,160088],{"class":78,"line":103},[76,160085,159348],{"class":93},[76,160087,9549],{"class":89},[76,160089,159353],{"class":93},[76,160091,160092],{"class":78,"line":1273},[76,160093,2472],{"emptyLinePlaceholder":125},[76,160095,160096,160098],{"class":78,"line":1287},[76,160097,30485],{"class":250},[76,160099,159372],{"class":93},[140,160101,160103],{"id":160102},"_49-循环嵌套","4.9 循环嵌套",[14,160105,160106],{},"嵌套循环就是循环里面再写循环。",[67,160108,160110],{"className":69,"code":160109,"language":71,"meta":58,"style":58},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[73,160111,160112,160132,160152],{"__ignoreMap":58},[76,160113,160114,160116,160118,160120,160122,160124,160126,160128,160130],{"class":78,"line":79},[76,160115,3097],{"class":89},[76,160117,9510],{"class":93},[76,160119,26116],{"class":89},[76,160121,32513],{"class":250},[76,160123,202],{"class":93},[76,160125,418],{"class":250},[76,160127,12507],{"class":93},[76,160129,494],{"class":250},[76,160131,30856],{"class":93},[76,160133,160134,160136,160138,160140,160142,160144,160146,160148,160150],{"class":78,"line":86},[76,160135,3273],{"class":89},[76,160137,9572],{"class":93},[76,160139,26116],{"class":89},[76,160141,32513],{"class":250},[76,160143,202],{"class":93},[76,160145,418],{"class":250},[76,160147,12507],{"class":93},[76,160149,494],{"class":250},[76,160151,30856],{"class":93},[76,160153,160154,160156,160158,160160,160163,160165,160167,160169,160172,160174,160176,160178,160180],{"class":78,"line":97},[76,160155,32521],{"class":250},[76,160157,202],{"class":93},[76,160159,254],{"class":89},[76,160161,160162],{"class":305},"\"i=",[76,160164,1095],{"class":250},[76,160166,641],{"class":93},[76,160168,1145],{"class":250},[76,160170,160171],{"class":305},", j=",[76,160173,1095],{"class":250},[76,160175,667],{"class":93},[76,160177,1145],{"class":250},[76,160179,452],{"class":305},[76,160181,208],{"class":93},[14,160183,160184],{},"外层循环执行一次，内层循环执行完整一轮。",[140,160186,160188],{"id":160187},"_410-九九乘法表","4.10 九九乘法表",[67,160190,160192],{"className":69,"code":160191,"language":71,"meta":58,"style":58},"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",[73,160193,160194,160214,160237,160289],{"__ignoreMap":58},[76,160195,160196,160198,160200,160202,160204,160206,160208,160210,160212],{"class":78,"line":79},[76,160197,3097],{"class":89},[76,160199,9510],{"class":93},[76,160201,26116],{"class":89},[76,160203,32513],{"class":250},[76,160205,202],{"class":93},[76,160207,418],{"class":250},[76,160209,12507],{"class":93},[76,160211,646],{"class":250},[76,160213,30856],{"class":93},[76,160215,160216,160218,160220,160222,160224,160226,160228,160231,160233,160235],{"class":78,"line":86},[76,160217,3273],{"class":89},[76,160219,9572],{"class":93},[76,160221,26116],{"class":89},[76,160223,32513],{"class":250},[76,160225,202],{"class":93},[76,160227,418],{"class":250},[76,160229,160230],{"class":93},", i ",[76,160232,681],{"class":89},[76,160234,25191],{"class":250},[76,160236,30856],{"class":93},[76,160238,160239,160241,160243,160245,160247,160249,160251,160253,160255,160257,160259,160261,160263,160265,160267,160269,160271,160273,160275,160277,160279,160281,160283,160285,160287],{"class":78,"line":97},[76,160240,32521],{"class":250},[76,160242,202],{"class":93},[76,160244,254],{"class":89},[76,160246,452],{"class":305},[76,160248,1095],{"class":250},[76,160250,667],{"class":93},[76,160252,1145],{"class":250},[76,160254,655],{"class":305},[76,160256,1095],{"class":250},[76,160258,641],{"class":93},[76,160260,1145],{"class":250},[76,160262,247],{"class":305},[76,160264,1095],{"class":250},[76,160266,100189],{"class":93},[76,160268,655],{"class":89},[76,160270,3482],{"class":93},[76,160272,1145],{"class":250},[76,160274,452],{"class":305},[76,160276,12507],{"class":93},[76,160278,45871],{"class":5288},[76,160280,247],{"class":89},[76,160282,452],{"class":305},[76,160284,1303],{"class":250},[76,160286,452],{"class":305},[76,160288,208],{"class":93},[76,160290,160291,160293],{"class":78,"line":103},[76,160292,31369],{"class":250},[76,160294,2048],{"class":93},[14,160296,160297],{},"关键点：",[152,160299,160300,160306,160312,160318],{},[155,160301,160302,160303,160305],{},"外层 ",[73,160304,641],{}," 控制行。",[155,160307,160308,160309,160311],{},"内层 ",[73,160310,667],{}," 控制列。",[155,160313,160314,160315,160317],{},"每行结束后用 ",[73,160316,146513],{}," 换行。",[155,160319,160320,160323],{},[73,160321,160322],{},"end=\"\\t\""," 让同一行的内容横向排列。",[140,160325,160327],{"id":160326},"_411-循环else","4.11 循环else",[14,160329,160330,160331,160333,160334,160336,160337,160339],{},"Python 的循环可以带 ",[73,160332,1773],{},"。当循环正常结束时执行 ",[73,160335,1773],{},"，如果被 ",[73,160338,2125],{}," 打断，则不执行。",[67,160341,160343],{"className":69,"code":160342,"language":71,"meta":58,"style":58},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[73,160344,160345,160365,160377,160388,160392,160398],{"__ignoreMap":58},[76,160346,160347,160349,160351,160353,160355,160357,160359,160361,160363],{"class":78,"line":79},[76,160348,3097],{"class":89},[76,160350,9510],{"class":93},[76,160352,26116],{"class":89},[76,160354,32513],{"class":250},[76,160356,202],{"class":93},[76,160358,418],{"class":250},[76,160360,12507],{"class":93},[76,160362,544],{"class":250},[76,160364,30856],{"class":93},[76,160366,160367,160369,160371,160373,160375],{"class":78,"line":86},[76,160368,3173],{"class":89},[76,160370,9510],{"class":93},[76,160372,3021],{"class":89},[76,160374,2110],{"class":250},[76,160376,3811],{"class":93},[76,160378,160379,160381,160383,160386],{"class":78,"line":97},[76,160380,32521],{"class":250},[76,160382,202],{"class":93},[76,160384,160385],{"class":305},"\"找到了\"",[76,160387,208],{"class":93},[76,160389,160390],{"class":78,"line":103},[76,160391,31697],{"class":89},[76,160393,160394,160396],{"class":78,"line":1273},[76,160395,1773],{"class":89},[76,160397,3811],{"class":93},[76,160399,160400,160402,160404,160407],{"class":78,"line":1287},[76,160401,31369],{"class":250},[76,160403,202],{"class":93},[76,160405,160406],{"class":305},"\"没找到\"",[76,160408,208],{"class":93},[14,160410,160411],{},"常用于搜索。",[67,160413,160415],{"className":69,"code":160414,"language":71,"meta":58,"style":58},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[73,160416,160417,160438,160447,160451,160463,160474,160484,160488,160494],{"__ignoreMap":58},[76,160418,160419,160422,160424,160426,160428,160430,160432,160434,160436],{"class":78,"line":79},[76,160420,160421],{"class":93},"names ",[76,160423,247],{"class":89},[76,160425,52296],{"class":93},[76,160427,149929],{"class":305},[76,160429,12507],{"class":93},[76,160431,150977],{"class":305},[76,160433,12507],{"class":93},[76,160435,159772],{"class":305},[76,160437,33316],{"class":93},[76,160439,160440,160442,160444],{"class":78,"line":86},[76,160441,111619],{"class":93},[76,160443,247],{"class":89},[76,160445,160446],{"class":305}," \"小李\"\n",[76,160448,160449],{"class":78,"line":97},[76,160450,2472],{"emptyLinePlaceholder":125},[76,160452,160453,160455,160458,160460],{"class":78,"line":103},[76,160454,3097],{"class":89},[76,160456,160457],{"class":93}," name ",[76,160459,26116],{"class":89},[76,160461,160462],{"class":93}," names:\n",[76,160464,160465,160467,160469,160471],{"class":78,"line":1273},[76,160466,3173],{"class":89},[76,160468,160457],{"class":93},[76,160470,3021],{"class":89},[76,160472,160473],{"class":93}," target:\n",[76,160475,160476,160478,160480,160482],{"class":78,"line":1287},[76,160477,32521],{"class":250},[76,160479,202],{"class":93},[76,160481,160385],{"class":305},[76,160483,208],{"class":93},[76,160485,160486],{"class":78,"line":1293},[76,160487,31697],{"class":89},[76,160489,160490,160492],{"class":78,"line":1384},[76,160491,1773],{"class":89},[76,160493,3811],{"class":93},[76,160495,160496,160498,160500,160502],{"class":78,"line":1390},[76,160497,31369],{"class":250},[76,160499,202],{"class":93},[76,160501,160406],{"class":305},[76,160503,208],{"class":93},[140,160505,160507],{"id":160506},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160509,123333],{},[152,160511,160512,160515,160518],{},[155,160513,160514],{},"用户最多输入 3 次密码。",[155,160516,160517],{},"密码正确则登录成功。",[155,160519,160520],{},"3 次都错误则锁定账号。",[14,160522,10107],{},[67,160524,160526],{"className":69,"code":160525,"language":71,"meta":58,"style":58},"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",[73,160527,160528,160538,160542,160558,160574,160578,160590,160601,160605,160611,160636,160642],{"__ignoreMap":58},[76,160529,160530,160533,160535],{"class":78,"line":79},[76,160531,160532],{"class":93},"password ",[76,160534,247],{"class":89},[76,160536,160537],{"class":305}," \"123456\"\n",[76,160539,160540],{"class":78,"line":86},[76,160541,2472],{"emptyLinePlaceholder":125},[76,160543,160544,160546,160548,160550,160552,160554,160556],{"class":78,"line":97},[76,160545,3097],{"class":89},[76,160547,9510],{"class":93},[76,160549,26116],{"class":89},[76,160551,32513],{"class":250},[76,160553,202],{"class":93},[76,160555,272],{"class":250},[76,160557,30856],{"class":93},[76,160559,160560,160563,160565,160567,160569,160572],{"class":78,"line":103},[76,160561,160562],{"class":93},"    user_password ",[76,160564,247],{"class":89},[76,160566,60675],{"class":250},[76,160568,202],{"class":93},[76,160570,160571],{"class":305},"\"请输入密码:\"",[76,160573,208],{"class":93},[76,160575,160576],{"class":78,"line":1273},[76,160577,2472],{"emptyLinePlaceholder":125},[76,160579,160580,160582,160585,160587],{"class":78,"line":1287},[76,160581,3173],{"class":89},[76,160583,160584],{"class":93}," user_password ",[76,160586,3021],{"class":89},[76,160588,160589],{"class":93}," password:\n",[76,160591,160592,160594,160596,160599],{"class":78,"line":1293},[76,160593,32521],{"class":250},[76,160595,202],{"class":93},[76,160597,160598],{"class":305},"\"登录成功\"",[76,160600,208],{"class":93},[76,160602,160603],{"class":78,"line":1384},[76,160604,31697],{"class":89},[76,160606,160607,160609],{"class":78,"line":1390},[76,160608,158063],{"class":89},[76,160610,3811],{"class":93},[76,160612,160613,160615,160617,160619,160622,160625,160627,160629,160631,160634],{"class":78,"line":1402},[76,160614,32521],{"class":250},[76,160616,202],{"class":93},[76,160618,254],{"class":89},[76,160620,160621],{"class":305},"\"密码错误，还剩",[76,160623,160624],{"class":250},"{2",[76,160626,52341],{"class":89},[76,160628,3104],{"class":93},[76,160630,1145],{"class":250},[76,160632,160633],{"class":305},"次机会\"",[76,160635,208],{"class":93},[76,160637,160638,160640],{"class":78,"line":1684},[76,160639,1773],{"class":89},[76,160641,3811],{"class":93},[76,160643,160644,160646,160648,160651],{"class":78,"line":1689},[76,160645,31369],{"class":250},[76,160647,202],{"class":93},[76,160649,160650],{"class":305},"\"账号已锁定\"",[76,160652,208],{"class":93},[140,160654,160656],{"id":160655},"_413-小案例菜单程序","4.13 小案例：菜单程序",[67,160658,160660],{"className":69,"code":160659,"language":71,"meta":58,"style":58},"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",[73,160661,160662,160670,160681,160692,160703,160714,160725,160729,160744,160748,160760,160771,160783,160794,160806,160817,160829,160839,160843,160849],{"__ignoreMap":58},[76,160663,160664,160666,160668],{"class":78,"line":79},[76,160665,108704],{"class":89},[76,160667,95361],{"class":250},[76,160669,3811],{"class":93},[76,160671,160672,160674,160676,160679],{"class":78,"line":86},[76,160673,31369],{"class":250},[76,160675,202],{"class":93},[76,160677,160678],{"class":305},"\"====== 菜单 ======\"",[76,160680,208],{"class":93},[76,160682,160683,160685,160687,160690],{"class":78,"line":97},[76,160684,31369],{"class":250},[76,160686,202],{"class":93},[76,160688,160689],{"class":305},"\"1. 查询余额\"",[76,160691,208],{"class":93},[76,160693,160694,160696,160698,160701],{"class":78,"line":103},[76,160695,31369],{"class":250},[76,160697,202],{"class":93},[76,160699,160700],{"class":305},"\"2. 存款\"",[76,160702,208],{"class":93},[76,160704,160705,160707,160709,160712],{"class":78,"line":1273},[76,160706,31369],{"class":250},[76,160708,202],{"class":93},[76,160710,160711],{"class":305},"\"3. 取款\"",[76,160713,208],{"class":93},[76,160715,160716,160718,160720,160723],{"class":78,"line":1287},[76,160717,31369],{"class":250},[76,160719,202],{"class":93},[76,160721,160722],{"class":305},"\"0. 退出\"",[76,160724,208],{"class":93},[76,160726,160727],{"class":78,"line":1293},[76,160728,2472],{"emptyLinePlaceholder":125},[76,160730,160731,160734,160736,160738,160740,160742],{"class":78,"line":1384},[76,160732,160733],{"class":93},"    choice ",[76,160735,247],{"class":89},[76,160737,60675],{"class":250},[76,160739,202],{"class":93},[76,160741,153114],{"class":305},[76,160743,208],{"class":93},[76,160745,160746],{"class":78,"line":1390},[76,160747,2472],{"emptyLinePlaceholder":125},[76,160749,160750,160752,160754,160756,160758],{"class":78,"line":1402},[76,160751,3173],{"class":89},[76,160753,153127],{"class":93},[76,160755,3021],{"class":89},[76,160757,153132],{"class":305},[76,160759,3811],{"class":93},[76,160761,160762,160764,160766,160769],{"class":78,"line":1684},[76,160763,32521],{"class":250},[76,160765,202],{"class":93},[76,160767,160768],{"class":305},"\"余额为1000元\"",[76,160770,208],{"class":93},[76,160772,160773,160775,160777,160779,160781],{"class":78,"line":1689},[76,160774,39363],{"class":89},[76,160776,153127],{"class":93},[76,160778,3021],{"class":89},[76,160780,153151],{"class":305},[76,160782,3811],{"class":93},[76,160784,160785,160787,160789,160792],{"class":78,"line":1695},[76,160786,32521],{"class":250},[76,160788,202],{"class":93},[76,160790,160791],{"class":305},"\"存款功能\"",[76,160793,208],{"class":93},[76,160795,160796,160798,160800,160802,160804],{"class":78,"line":1700},[76,160797,39363],{"class":89},[76,160799,153127],{"class":93},[76,160801,3021],{"class":89},[76,160803,153169],{"class":305},[76,160805,3811],{"class":93},[76,160807,160808,160810,160812,160815],{"class":78,"line":1714},[76,160809,32521],{"class":250},[76,160811,202],{"class":93},[76,160813,160814],{"class":305},"\"取款功能\"",[76,160816,208],{"class":93},[76,160818,160819,160821,160823,160825,160827],{"class":78,"line":1719},[76,160820,39363],{"class":89},[76,160822,153127],{"class":93},[76,160824,3021],{"class":89},[76,160826,153223],{"class":305},[76,160828,3811],{"class":93},[76,160830,160831,160833,160835,160837],{"class":78,"line":1725},[76,160832,32521],{"class":250},[76,160834,202],{"class":93},[76,160836,153234],{"class":305},[76,160838,208],{"class":93},[76,160840,160841],{"class":78,"line":1746},[76,160842,31697],{"class":89},[76,160844,160845,160847],{"class":78,"line":1751},[76,160846,158063],{"class":89},[76,160848,3811],{"class":93},[76,160850,160851,160853,160855,160857],{"class":78,"line":1765},[76,160852,32521],{"class":250},[76,160854,202],{"class":93},[76,160856,153255],{"class":305},[76,160858,208],{"class":93},[14,160860,160861,160862,160864,160865,28458],{},"菜单类程序通常使用 ",[73,160863,159563],{},"，用户选择退出时 ",[73,160866,2125],{},[140,160868,160870],{"id":160869},"_414-易错点","4.14 易错点",[152,160872,160873,160878,160884,160892,160898],{},[155,160874,160875,160877],{},[73,160876,108704],{}," 循环必须更新控制变量。",[155,160879,160880,160883],{},[73,160881,160882],{},"range(1, 10)"," 不包含 10。",[155,160885,160886,160888,160889,160891],{},[73,160887,2125],{}," 结束整个循环，",[73,160890,154713],{}," 只跳过本轮。",[155,160893,160894,160895,160897],{},"嵌套循环中，",[73,160896,2125],{}," 只跳出当前所在的一层循环。",[155,160899,160900],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[140,160902,160904],{"id":160903},"_415-本章练习","4.15 本章练习",[152,160906,160907,160910,160913,160916,160919],{},[155,160908,160909],{},"输出 1 到 100。",[155,160911,160912],{},"计算 1 到 100 的偶数和。",[155,160914,160915],{},"输出 100 以内能被 3 和 5 同时整除的数。",[155,160917,160918],{},"编写猜数字游戏，限制最多猜 7 次。",[155,160920,160921],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[117,160923,160924],{},"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":58,"searchDepth":86,"depth":86,"links":160926},[160927,160928,160929,160930,160931,160935,160936,160937,160938,160939,160940,160941,160942,160943,160944],{"id":159183,"depth":86,"text":159184},{"id":159213,"depth":86,"text":159214},{"id":159302,"depth":86,"text":159303},{"id":159396,"depth":86,"text":159397},{"id":159570,"depth":86,"text":159571,"children":160932},[160933,160934],{"id":159574,"depth":97,"text":159575},{"id":159638,"depth":97,"text":159639},{"id":159702,"depth":86,"text":159703},{"id":159797,"depth":86,"text":159798},{"id":159906,"depth":86,"text":159907},{"id":160102,"depth":86,"text":160103},{"id":160187,"depth":86,"text":160188},{"id":160326,"depth":86,"text":160327},{"id":160506,"depth":86,"text":160507},{"id":160655,"depth":86,"text":160656},{"id":160869,"depth":86,"text":160870},{"id":160903,"depth":86,"text":160904},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159175,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160951,"title":160952,"body":160953,"description":122,"extension":123,"meta":162958,"navigation":125,"path":162959,"seo":162960,"stem":162961,"__hash__":162962},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160954,"toc":162938},[160955,160958,160962,160965,160968,160982,160985,160999,161003,161005,161024,161026,161073,161075,161089,161093,161167,161170,161174,161177,161236,161244,161247,161300,161303,161307,161312,161367,161375,161425,161429,161434,161442,161541,161547,161551,161556,161559,161570,161611,161624,161628,161631,161667,161670,161683,161686,161746,161750,161754,161757,161808,161812,161815,161862,161868,161934,161937,161941,161944,162060,162063,162067,162070,162176,162180,162183,162221,162224,162266,162269,162329,162332,162336,162800,162803,162807,162834,162840,162901,162905,162935],[10,160956,160952],{"id":160957},"_5-函数基础",[140,160959,160961],{"id":160960},"_51-为什么需要函数","5.1 为什么需要函数",[14,160963,160964],{},"函数用于封装一段可以重复使用的代码。",[14,160966,160967],{},"不使用函数的问题：",[152,160969,160970,160973,160976,160979],{},[155,160971,160972],{},"重复代码多。",[155,160974,160975],{},"修改逻辑时容易漏改。",[155,160977,160978],{},"主流程不清晰。",[155,160980,160981],{},"程序越写越长，难以维护。",[14,160983,160984],{},"使用函数后的好处：",[152,160986,160987,160990,160993,160996],{},[155,160988,160989],{},"提高复用性。",[155,160991,160992],{},"提高可读性。",[155,160994,160995],{},"便于调试。",[155,160997,160998],{},"便于分工。",[140,161000,161002],{"id":161001},"_52-函数定义","5.2 函数定义",[14,161004,5253],{},[67,161006,161008],{"className":69,"code":161007,"language":71,"meta":58,"style":58},"def 函数名():\n    函数体\n",[73,161009,161010,161019],{"__ignoreMap":58},[76,161011,161012,161014,161017],{"class":78,"line":79},[76,161013,32017],{"class":89},[76,161015,161016],{"class":2035}," 函数名",[76,161018,32023],{"class":93},[76,161020,161021],{"class":78,"line":86},[76,161022,161023],{"class":93},"    函数体\n",[14,161025,15207],{},[67,161027,161029],{"className":69,"code":161028,"language":71,"meta":58,"style":58},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[73,161030,161031,161040,161050,161060,161064,161068],{"__ignoreMap":58},[76,161032,161033,161035,161038],{"class":78,"line":79},[76,161034,32017],{"class":89},[76,161036,161037],{"class":2035}," say_hello",[76,161039,32023],{"class":93},[76,161041,161042,161044,161046,161048],{"class":78,"line":86},[76,161043,31369],{"class":250},[76,161045,202],{"class":93},[76,161047,5916],{"class":305},[76,161049,208],{"class":93},[76,161051,161052,161054,161056,161058],{"class":78,"line":97},[76,161053,31369],{"class":250},[76,161055,202],{"class":93},[76,161057,146680],{"class":305},[76,161059,208],{"class":93},[76,161061,161062],{"class":78,"line":103},[76,161063,2472],{"emptyLinePlaceholder":125},[76,161065,161066],{"class":78,"line":1273},[76,161067,2472],{"emptyLinePlaceholder":125},[76,161069,161070],{"class":78,"line":1287},[76,161071,161072],{"class":93},"say_hello()\n",[14,161074,9097],{},[152,161076,161077,161080,161083,161086],{},[155,161078,161079],{},"函数必须先定义，再调用。",[155,161081,161082],{},"函数名遵循变量命名规则。",[155,161084,161085],{},"函数体需要缩进。",[155,161087,161088],{},"函数不调用就不会执行。",[140,161090,161092],{"id":161091},"_53-函数调用","5.3 函数调用",[67,161094,161096],{"className":69,"code":161095,"language":71,"meta":58,"style":58},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[73,161097,161098,161107,161118,161129,161140,161150,161154,161158,161163],{"__ignoreMap":58},[76,161099,161100,161102,161105],{"class":78,"line":79},[76,161101,32017],{"class":89},[76,161103,161104],{"class":2035}," print_menu",[76,161106,32023],{"class":93},[76,161108,161109,161111,161113,161116],{"class":78,"line":86},[76,161110,31369],{"class":250},[76,161112,202],{"class":93},[76,161114,161115],{"class":305},"\"1. 查询\"",[76,161117,208],{"class":93},[76,161119,161120,161122,161124,161127],{"class":78,"line":97},[76,161121,31369],{"class":250},[76,161123,202],{"class":93},[76,161125,161126],{"class":305},"\"2. 添加\"",[76,161128,208],{"class":93},[76,161130,161131,161133,161135,161138],{"class":78,"line":103},[76,161132,31369],{"class":250},[76,161134,202],{"class":93},[76,161136,161137],{"class":305},"\"3. 删除\"",[76,161139,208],{"class":93},[76,161141,161142,161144,161146,161148],{"class":78,"line":1273},[76,161143,31369],{"class":250},[76,161145,202],{"class":93},[76,161147,160722],{"class":305},[76,161149,208],{"class":93},[76,161151,161152],{"class":78,"line":1287},[76,161153,2472],{"emptyLinePlaceholder":125},[76,161155,161156],{"class":78,"line":1293},[76,161157,2472],{"emptyLinePlaceholder":125},[76,161159,161160],{"class":78,"line":1384},[76,161161,161162],{"class":93},"print_menu()\n",[76,161164,161165],{"class":78,"line":1390},[76,161166,161162],{"class":93},[14,161168,161169],{},"函数可以多次调用，每次调用都会执行函数体。",[140,161171,161173],{"id":161172},"_54-参数","5.4 参数",[14,161175,161176],{},"参数用于向函数传递数据。",[67,161178,161180],{"className":69,"code":161179,"language":71,"meta":58,"style":58},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[73,161181,161182,161191,161211,161215,161219,161228],{"__ignoreMap":58},[76,161183,161184,161186,161188],{"class":78,"line":79},[76,161185,32017],{"class":89},[76,161187,161037],{"class":2035},[76,161189,161190],{"class":93},"(name):\n",[76,161192,161193,161195,161197,161199,161201,161203,161205,161207,161209],{"class":78,"line":86},[76,161194,31369],{"class":250},[76,161196,202],{"class":93},[76,161198,254],{"class":89},[76,161200,157095],{"class":305},[76,161202,1095],{"class":250},[76,161204,79880],{"class":93},[76,161206,1145],{"class":250},[76,161208,452],{"class":305},[76,161210,208],{"class":93},[76,161212,161213],{"class":78,"line":97},[76,161214,2472],{"emptyLinePlaceholder":125},[76,161216,161217],{"class":78,"line":103},[76,161218,2472],{"emptyLinePlaceholder":125},[76,161220,161221,161224,161226],{"class":78,"line":1273},[76,161222,161223],{"class":93},"say_hello(",[76,161225,149929],{"class":305},[76,161227,208],{"class":93},[76,161229,161230,161232,161234],{"class":78,"line":1287},[76,161231,161223],{"class":93},[76,161233,150977],{"class":305},[76,161235,208],{"class":93},[14,161237,161238,161240,161241,161243],{},[73,161239,79880],{}," 是形参，",[73,161242,149929],{}," 是实参。",[14,161245,161246],{},"多个参数：",[67,161248,161250],{"className":69,"code":161249,"language":71,"meta":58,"style":58},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[73,161251,161252,161260,161273,161279,161283,161287],{"__ignoreMap":58},[76,161253,161254,161256,161258],{"class":78,"line":79},[76,161255,32017],{"class":89},[76,161257,5281],{"class":2035},[76,161259,151134],{"class":93},[76,161261,161262,161265,161267,161269,161271],{"class":78,"line":86},[76,161263,161264],{"class":93},"    result ",[76,161266,247],{"class":89},[76,161268,10941],{"class":93},[76,161270,681],{"class":89},[76,161272,151145],{"class":93},[76,161274,161275,161277],{"class":78,"line":97},[76,161276,31369],{"class":250},[76,161278,76655],{"class":93},[76,161280,161281],{"class":78,"line":103},[76,161282,2472],{"emptyLinePlaceholder":125},[76,161284,161285],{"class":78,"line":1273},[76,161286,2472],{"emptyLinePlaceholder":125},[76,161288,161289,161292,161294,161296,161298],{"class":78,"line":1287},[76,161290,161291],{"class":93},"add(",[76,161293,646],{"class":250},[76,161295,12507],{"class":93},[76,161297,899],{"class":250},[76,161299,208],{"class":93},[14,161301,161302],{},"调用时参数数量必须匹配。",[140,161304,161306],{"id":161305},"_55-返回值","5.5 返回值",[14,161308,161309,161311],{},[73,161310,17118],{}," 用于把函数内部的结果返回给调用者。",[67,161313,161315],{"className":69,"code":161314,"language":71,"meta":58,"style":58},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[73,161316,161317,161325,161335,161339,161343,161361],{"__ignoreMap":58},[76,161318,161319,161321,161323],{"class":78,"line":79},[76,161320,32017],{"class":89},[76,161322,5281],{"class":2035},[76,161324,151134],{"class":93},[76,161326,161327,161329,161331,161333],{"class":78,"line":86},[76,161328,4162],{"class":89},[76,161330,10941],{"class":93},[76,161332,681],{"class":89},[76,161334,151145],{"class":93},[76,161336,161337],{"class":78,"line":97},[76,161338,2472],{"emptyLinePlaceholder":125},[76,161340,161341],{"class":78,"line":103},[76,161342,2472],{"emptyLinePlaceholder":125},[76,161344,161345,161348,161350,161353,161355,161357,161359],{"class":78,"line":1273},[76,161346,161347],{"class":93},"result ",[76,161349,247],{"class":89},[76,161351,161352],{"class":93}," add(",[76,161354,646],{"class":250},[76,161356,12507],{"class":93},[76,161358,899],{"class":250},[76,161360,208],{"class":93},[76,161362,161363,161365],{"class":78,"line":1287},[76,161364,30485],{"class":250},[76,161366,76655],{"class":93},[14,161368,161369,161370,161372,161373,28458],{},"如果函数没有写 ",[73,161371,17118],{},"，默认返回 ",[73,161374,95755],{},[67,161376,161378],{"className":69,"code":161377,"language":71,"meta":58,"style":58},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[73,161379,161380,161388,161398,161402,161406,161415],{"__ignoreMap":58},[76,161381,161382,161384,161386],{"class":78,"line":79},[76,161383,32017],{"class":89},[76,161385,161037],{"class":2035},[76,161387,32023],{"class":93},[76,161389,161390,161392,161394,161396],{"class":78,"line":86},[76,161391,31369],{"class":250},[76,161393,202],{"class":93},[76,161395,5916],{"class":305},[76,161397,208],{"class":93},[76,161399,161400],{"class":78,"line":97},[76,161401,2472],{"emptyLinePlaceholder":125},[76,161403,161404],{"class":78,"line":103},[76,161405,2472],{"emptyLinePlaceholder":125},[76,161407,161408,161410,161412],{"class":78,"line":1273},[76,161409,161347],{"class":93},[76,161411,247],{"class":89},[76,161413,161414],{"class":93}," say_hello()\n",[76,161416,161417,161419,161422],{"class":78,"line":1287},[76,161418,30485],{"class":250},[76,161420,161421],{"class":93},"(result)  ",[76,161423,161424],{"class":82},"# None\n",[140,161426,161428],{"id":161427},"_56-return的作用","5.6 return的作用",[14,161430,161431,161433],{},[73,161432,17118],{}," 有两个作用：",[152,161435,161436,161439],{},[155,161437,161438],{},"返回结果。",[155,161440,161441],{},"结束函数。",[67,161443,161445],{"className":69,"code":161444,"language":71,"meta":58,"style":58},"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",[73,161446,161447,161457,161469,161476,161480,161492,161499,161503,161510,161514,161518,161529],{"__ignoreMap":58},[76,161448,161449,161451,161454],{"class":78,"line":79},[76,161450,32017],{"class":89},[76,161452,161453],{"class":2035}," check_age",[76,161455,161456],{"class":93},"(age):\n",[76,161458,161459,161461,161463,161465,161467],{"class":78,"line":86},[76,161460,3173],{"class":89},[76,161462,15779],{"class":93},[76,161464,1109],{"class":89},[76,161466,4165],{"class":250},[76,161468,3811],{"class":93},[76,161470,161471,161473],{"class":78,"line":97},[76,161472,14824],{"class":89},[76,161474,161475],{"class":305}," \"年龄不合法\"\n",[76,161477,161478],{"class":78,"line":103},[76,161479,2472],{"emptyLinePlaceholder":125},[76,161481,161482,161484,161486,161488,161490],{"class":78,"line":1273},[76,161483,3173],{"class":89},[76,161485,15779],{"class":93},[76,161487,1782],{"class":89},[76,161489,156326],{"class":250},[76,161491,3811],{"class":93},[76,161493,161494,161496],{"class":78,"line":1287},[76,161495,14824],{"class":89},[76,161497,161498],{"class":305}," \"成年人\"\n",[76,161500,161501],{"class":78,"line":1293},[76,161502,2472],{"emptyLinePlaceholder":125},[76,161504,161505,161507],{"class":78,"line":1384},[76,161506,4162],{"class":89},[76,161508,161509],{"class":305}," \"未成年人\"\n",[76,161511,161512],{"class":78,"line":1390},[76,161513,2472],{"emptyLinePlaceholder":125},[76,161515,161516],{"class":78,"line":1402},[76,161517,2472],{"emptyLinePlaceholder":125},[76,161519,161520,161522,161525,161527],{"class":78,"line":1684},[76,161521,30485],{"class":250},[76,161523,161524],{"class":93},"(check_age(",[76,161526,899],{"class":250},[76,161528,30567],{"class":93},[76,161530,161531,161533,161535,161537,161539],{"class":78,"line":1689},[76,161532,30485],{"class":250},[76,161534,161524],{"class":93},[76,161536,112],{"class":89},[76,161538,418],{"class":250},[76,161540,30567],{"class":93},[14,161542,161543,161544,161546],{},"函数执行到 ",[73,161545,17118],{}," 后，后面的代码不会继续执行。",[140,161548,161550],{"id":161549},"_57-none","5.7 None",[14,161552,161553,161555],{},[73,161554,95755],{}," 表示空值或没有结果。",[14,161557,161558],{},"常见使用场景：",[152,161560,161561,161564,161567],{},[155,161562,161563],{},"函数没有返回值。",[155,161565,161566],{},"变量暂时没有具体值。",[155,161568,161569],{},"表示查询不到结果。",[67,161571,161573],{"className":69,"code":161572,"language":71,"meta":58,"style":58},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[73,161574,161575,161583,161587,161600],{"__ignoreMap":58},[76,161576,161577,161579,161581],{"class":78,"line":79},[76,161578,161347],{"class":93},[76,161580,247],{"class":89},[76,161582,152213],{"class":250},[76,161584,161585],{"class":78,"line":86},[76,161586,2472],{"emptyLinePlaceholder":125},[76,161588,161589,161591,161594,161596,161598],{"class":78,"line":97},[76,161590,1603],{"class":89},[76,161592,161593],{"class":93}," result ",[76,161595,38997],{"class":89},[76,161597,39003],{"class":250},[76,161599,3811],{"class":93},[76,161601,161602,161604,161606,161609],{"class":78,"line":103},[76,161603,31369],{"class":250},[76,161605,202],{"class":93},[76,161607,161608],{"class":305},"\"没有数据\"",[76,161610,208],{"class":93},[14,161612,161613,161614,161616,161617,161620,161621,28458],{},"判断 ",[73,161615,95755],{}," 推荐使用 ",[73,161618,161619],{},"is None","，不要写成 ",[73,161622,161623],{},"== None",[140,161625,161627],{"id":161626},"_58-函数文档字符串","5.8 函数文档字符串",[14,161629,161630],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[67,161632,161634],{"className":69,"code":161633,"language":71,"meta":58,"style":58},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[73,161635,161636,161646,161651],{"__ignoreMap":58},[76,161637,161638,161640,161643],{"class":78,"line":79},[76,161639,32017],{"class":89},[76,161641,161642],{"class":2035}," calculate_bmi",[76,161644,161645],{"class":93},"(weight, height):\n",[76,161647,161648],{"class":78,"line":86},[76,161649,161650],{"class":305},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[76,161652,161653,161655,161658,161660,161663,161665],{"class":78,"line":97},[76,161654,4162],{"class":89},[76,161656,161657],{"class":93}," weight ",[76,161659,783],{"class":89},[76,161661,161662],{"class":93}," height ",[76,161664,10733],{"class":89},[76,161666,47793],{"class":250},[14,161668,161669],{},"查看说明：",[67,161671,161673],{"className":69,"code":161672,"language":71,"meta":58,"style":58},"help(calculate_bmi)\n",[73,161674,161675],{"__ignoreMap":58},[76,161676,161677,161680],{"class":78,"line":79},[76,161678,161679],{"class":250},"help",[76,161681,161682],{"class":93},"(calculate_bmi)\n",[14,161684,161685],{},"较完整的写法：",[67,161687,161689],{"className":69,"code":161688,"language":71,"meta":58,"style":58},"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",[73,161690,161691,161699,161704,161709,161713,161718,161723,161728,161732],{"__ignoreMap":58},[76,161692,161693,161695,161697],{"class":78,"line":79},[76,161694,32017],{"class":89},[76,161696,161642],{"class":2035},[76,161698,161645],{"class":93},[76,161700,161701],{"class":78,"line":86},[76,161702,161703],{"class":305},"    \"\"\"\n",[76,161705,161706],{"class":78,"line":97},[76,161707,161708],{"class":305},"    计算BMI。\n",[76,161710,161711],{"class":78,"line":103},[76,161712,2472],{"emptyLinePlaceholder":125},[76,161714,161715],{"class":78,"line":1273},[76,161716,161717],{"class":305},"    :param weight: 体重，单位kg\n",[76,161719,161720],{"class":78,"line":1287},[76,161721,161722],{"class":305},"    :param height: 身高，单位m\n",[76,161724,161725],{"class":78,"line":1293},[76,161726,161727],{"class":305},"    :return: BMI数值\n",[76,161729,161730],{"class":78,"line":1384},[76,161731,161703],{"class":305},[76,161733,161734,161736,161738,161740,161742,161744],{"class":78,"line":1390},[76,161735,4162],{"class":89},[76,161737,161657],{"class":93},[76,161739,783],{"class":89},[76,161741,161662],{"class":93},[76,161743,10733],{"class":89},[76,161745,47793],{"class":250},[140,161747,161749],{"id":161748},"_59-变量作用域","5.9 变量作用域",[169,161751,161753],{"id":161752},"_591-局部变量","5.9.1 局部变量",[14,161755,161756],{},"在函数内部定义的变量，只能在函数内部使用。",[67,161758,161760],{"className":69,"code":161759,"language":71,"meta":58,"style":58},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[73,161761,161762,161771,161779,161785,161789,161793,161798],{"__ignoreMap":58},[76,161763,161764,161766,161769],{"class":78,"line":79},[76,161765,32017],{"class":89},[76,161767,161768],{"class":2035}," test",[76,161770,32023],{"class":93},[76,161772,161773,161775,161777],{"class":78,"line":86},[76,161774,45663],{"class":93},[76,161776,247],{"class":89},[76,161778,58498],{"class":250},[76,161780,161781,161783],{"class":78,"line":97},[76,161782,31369],{"class":250},[76,161784,215],{"class":93},[76,161786,161787],{"class":78,"line":103},[76,161788,2472],{"emptyLinePlaceholder":125},[76,161790,161791],{"class":78,"line":1273},[76,161792,2472],{"emptyLinePlaceholder":125},[76,161794,161795],{"class":78,"line":1287},[76,161796,161797],{"class":93},"test()\n",[76,161799,161800,161802,161805],{"class":78,"line":1293},[76,161801,30485],{"class":250},[76,161803,161804],{"class":93},"(num)  ",[76,161806,161807],{"class":82},"# 报错\n",[169,161809,161811],{"id":161810},"_592-全局变量","5.9.2 全局变量",[14,161813,161814],{},"在函数外部定义的变量，可以在函数内部读取。",[67,161816,161818],{"className":69,"code":161817,"language":71,"meta":58,"style":58},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[73,161819,161820,161828,161832,161836,161844,161850,161854,161858],{"__ignoreMap":58},[76,161821,161822,161824,161826],{"class":78,"line":79},[76,161823,146577],{"class":93},[76,161825,247],{"class":89},[76,161827,149394],{"class":305},[76,161829,161830],{"class":78,"line":86},[76,161831,2472],{"emptyLinePlaceholder":125},[76,161833,161834],{"class":78,"line":97},[76,161835,2472],{"emptyLinePlaceholder":125},[76,161837,161838,161840,161842],{"class":78,"line":103},[76,161839,32017],{"class":89},[76,161841,161037],{"class":2035},[76,161843,32023],{"class":93},[76,161845,161846,161848],{"class":78,"line":1273},[76,161847,31369],{"class":250},[76,161849,150701],{"class":93},[76,161851,161852],{"class":78,"line":1287},[76,161853,2472],{"emptyLinePlaceholder":125},[76,161855,161856],{"class":78,"line":1293},[76,161857,2472],{"emptyLinePlaceholder":125},[76,161859,161860],{"class":78,"line":1384},[76,161861,161072],{"class":93},[14,161863,161864,161865,28458],{},"如果要在函数内部修改全局变量，需要 ",[73,161866,161867],{},"global",[67,161869,161871],{"className":69,"code":161870,"language":71,"meta":58,"style":58},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[73,161872,161873,161881,161885,161889,161898,161906,161914,161918,161922,161927],{"__ignoreMap":58},[76,161874,161875,161877,161879],{"class":78,"line":79},[76,161876,146732],{"class":93},[76,161878,247],{"class":89},[76,161880,47403],{"class":250},[76,161882,161883],{"class":78,"line":86},[76,161884,2472],{"emptyLinePlaceholder":125},[76,161886,161887],{"class":78,"line":97},[76,161888,2472],{"emptyLinePlaceholder":125},[76,161890,161891,161893,161896],{"class":78,"line":103},[76,161892,32017],{"class":89},[76,161894,161895],{"class":2035}," add_count",[76,161897,32023],{"class":93},[76,161899,161900,161903],{"class":78,"line":1273},[76,161901,161902],{"class":89},"    global",[76,161904,161905],{"class":93}," count\n",[76,161907,161908,161910,161912],{"class":78,"line":1287},[76,161909,159474],{"class":93},[76,161911,9549],{"class":89},[76,161913,55769],{"class":250},[76,161915,161916],{"class":78,"line":1293},[76,161917,2472],{"emptyLinePlaceholder":125},[76,161919,161920],{"class":78,"line":1384},[76,161921,2472],{"emptyLinePlaceholder":125},[76,161923,161924],{"class":78,"line":1390},[76,161925,161926],{"class":93},"add_count()\n",[76,161928,161929,161931],{"class":78,"line":1402},[76,161930,30485],{"class":250},[76,161932,161933],{"class":93},"(count)\n",[14,161935,161936],{},"不建议大量使用全局变量，项目变大后很难维护。",[140,161938,161940],{"id":161939},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161942,161943],{},"一个函数中可以调用另一个函数。",[67,161945,161947],{"className":69,"code":161946,"language":71,"meta":58,"style":58},"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",[73,161948,161949,161958,161972,161976,161980,161989,161994,162014,162035,162039,162043,162047],{"__ignoreMap":58},[76,161950,161951,161953,161956],{"class":78,"line":79},[76,161952,32017],{"class":89},[76,161954,161955],{"class":2035}," print_line",[76,161957,32023],{"class":93},[76,161959,161960,161962,161964,161966,161968,161970],{"class":78,"line":86},[76,161961,31369],{"class":250},[76,161963,202],{"class":93},[76,161965,32553],{"class":305},[76,161967,6590],{"class":89},[76,161969,78735],{"class":250},[76,161971,208],{"class":93},[76,161973,161974],{"class":78,"line":97},[76,161975,2472],{"emptyLinePlaceholder":125},[76,161977,161978],{"class":78,"line":103},[76,161979,2472],{"emptyLinePlaceholder":125},[76,161981,161982,161984,161987],{"class":78,"line":1273},[76,161983,32017],{"class":89},[76,161985,161986],{"class":2035}," print_info",[76,161988,149416],{"class":93},[76,161990,161991],{"class":78,"line":1287},[76,161992,161993],{"class":93},"    print_line()\n",[76,161995,161996,161998,162000,162002,162004,162006,162008,162010,162012],{"class":78,"line":1293},[76,161997,31369],{"class":250},[76,161999,202],{"class":93},[76,162001,254],{"class":89},[76,162003,156723],{"class":305},[76,162005,1095],{"class":250},[76,162007,79880],{"class":93},[76,162009,1145],{"class":250},[76,162011,452],{"class":305},[76,162013,208],{"class":93},[76,162015,162016,162018,162020,162022,162025,162027,162029,162031,162033],{"class":78,"line":1384},[76,162017,31369],{"class":250},[76,162019,202],{"class":93},[76,162021,254],{"class":89},[76,162023,162024],{"class":305},"\"年龄:",[76,162026,1095],{"class":250},[76,162028,70291],{"class":93},[76,162030,1145],{"class":250},[76,162032,452],{"class":305},[76,162034,208],{"class":93},[76,162036,162037],{"class":78,"line":1390},[76,162038,161993],{"class":93},[76,162040,162041],{"class":78,"line":1402},[76,162042,2472],{"emptyLinePlaceholder":125},[76,162044,162045],{"class":78,"line":1684},[76,162046,2472],{"emptyLinePlaceholder":125},[76,162048,162049,162052,162054,162056,162058],{"class":78,"line":1689},[76,162050,162051],{"class":93},"print_info(",[76,162053,149929],{"class":305},[76,162055,12507],{"class":93},[76,162057,849],{"class":250},[76,162059,208],{"class":93},[14,162061,162062],{},"这种方式可以把小功能组合成大功能。",[140,162064,162066],{"id":162065},"_511-参数检查","5.11 参数检查",[14,162068,162069],{},"函数内部可以检查参数是否合法。",[67,162071,162073],{"className":69,"code":162072,"language":71,"meta":58,"style":58},"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",[73,162074,162075,162084,162096,162102,162112,162116,162120,162137,162141,162153,162164,162170],{"__ignoreMap":58},[76,162076,162077,162079,162082],{"class":78,"line":79},[76,162078,32017],{"class":89},[76,162080,162081],{"class":2035}," divide",[76,162083,151134],{"class":93},[76,162085,162086,162088,162090,162092,162094],{"class":78,"line":86},[76,162087,3173],{"class":89},[76,162089,10954],{"class":93},[76,162091,3021],{"class":89},[76,162093,4165],{"class":250},[76,162095,3811],{"class":93},[76,162097,162098,162100],{"class":78,"line":97},[76,162099,14824],{"class":89},[76,162101,152213],{"class":250},[76,162103,162104,162106,162108,162110],{"class":78,"line":103},[76,162105,4162],{"class":89},[76,162107,10941],{"class":93},[76,162109,783],{"class":89},[76,162111,151145],{"class":93},[76,162113,162114],{"class":78,"line":1273},[76,162115,2472],{"emptyLinePlaceholder":125},[76,162117,162118],{"class":78,"line":1287},[76,162119,2472],{"emptyLinePlaceholder":125},[76,162121,162122,162124,162126,162129,162131,162133,162135],{"class":78,"line":1293},[76,162123,161347],{"class":93},[76,162125,247],{"class":89},[76,162127,162128],{"class":93}," divide(",[76,162130,646],{"class":250},[76,162132,12507],{"class":93},[76,162134,392],{"class":250},[76,162136,208],{"class":93},[76,162138,162139],{"class":78,"line":1384},[76,162140,2472],{"emptyLinePlaceholder":125},[76,162142,162143,162145,162147,162149,162151],{"class":78,"line":1390},[76,162144,1603],{"class":89},[76,162146,161593],{"class":93},[76,162148,38997],{"class":89},[76,162150,39003],{"class":250},[76,162152,3811],{"class":93},[76,162154,162155,162157,162159,162162],{"class":78,"line":1402},[76,162156,31369],{"class":250},[76,162158,202],{"class":93},[76,162160,162161],{"class":305},"\"除数不能为0\"",[76,162163,208],{"class":93},[76,162165,162166,162168],{"class":78,"line":1684},[76,162167,1773],{"class":89},[76,162169,3811],{"class":93},[76,162171,162172,162174],{"class":78,"line":1689},[76,162173,31369],{"class":250},[76,162175,76655],{"class":93},[140,162177,162179],{"id":162178},"_512-类型提示","5.12 类型提示",[14,162181,162182],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[67,162184,162186],{"className":69,"code":162185,"language":71,"meta":58,"style":58},"def add(a: int, b: int) -> int:\n    return a + b\n",[73,162187,162188,162211],{"__ignoreMap":58},[76,162189,162190,162192,162194,162197,162199,162202,162204,162207,162209],{"class":78,"line":79},[76,162191,32017],{"class":89},[76,162193,5281],{"class":2035},[76,162195,162196],{"class":93},"(a: ",[76,162198,205],{"class":250},[76,162200,162201],{"class":93},", b: ",[76,162203,205],{"class":250},[76,162205,162206],{"class":93},") -> ",[76,162208,205],{"class":250},[76,162210,3811],{"class":93},[76,162212,162213,162215,162217,162219],{"class":78,"line":86},[76,162214,4162],{"class":89},[76,162216,10941],{"class":93},[76,162218,681],{"class":89},[76,162220,151145],{"class":93},[14,162222,162223],{},"字符串参数：",[67,162225,162227],{"className":69,"code":162226,"language":71,"meta":58,"style":58},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[73,162228,162229,162246],{"__ignoreMap":58},[76,162230,162231,162233,162235,162238,162240,162242,162244],{"class":78,"line":79},[76,162232,32017],{"class":89},[76,162234,161037],{"class":2035},[76,162236,162237],{"class":93},"(name: ",[76,162239,1372],{"class":250},[76,162241,162206],{"class":93},[76,162243,95755],{"class":250},[76,162245,3811],{"class":93},[76,162247,162248,162250,162252,162254,162256,162258,162260,162262,162264],{"class":78,"line":86},[76,162249,31369],{"class":250},[76,162251,202],{"class":93},[76,162253,254],{"class":89},[76,162255,157095],{"class":305},[76,162257,1095],{"class":250},[76,162259,79880],{"class":93},[76,162261,1145],{"class":250},[76,162263,452],{"class":305},[76,162265,208],{"class":93},[14,162267,162268],{},"列表参数：",[67,162270,162272],{"className":69,"code":162271,"language":71,"meta":58,"style":58},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[73,162273,162274,162293,162301,162313,162322],{"__ignoreMap":58},[76,162275,162276,162278,162281,162284,162286,162289,162291],{"class":78,"line":79},[76,162277,32017],{"class":89},[76,162279,162280],{"class":2035}," get_total",[76,162282,162283],{"class":93},"(numbers: list[",[76,162285,205],{"class":250},[76,162287,162288],{"class":93},"]) -> ",[76,162290,205],{"class":250},[76,162292,3811],{"class":93},[76,162294,162295,162297,162299],{"class":78,"line":86},[76,162296,159348],{"class":93},[76,162298,247],{"class":89},[76,162300,47403],{"class":250},[76,162302,162303,162305,162308,162310],{"class":78,"line":97},[76,162304,3273],{"class":89},[76,162306,162307],{"class":93}," number ",[76,162309,26116],{"class":89},[76,162311,162312],{"class":93}," numbers:\n",[76,162314,162315,162317,162319],{"class":78,"line":103},[76,162316,160023],{"class":93},[76,162318,9549],{"class":89},[76,162320,162321],{"class":93}," number\n",[76,162323,162324,162326],{"class":78,"line":1273},[76,162325,4162],{"class":89},[76,162327,162328],{"class":93}," total\n",[14,162330,162331],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[140,162333,162335],{"id":162334},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[67,162337,162339],{"className":69,"code":162338,"language":71,"meta":58,"style":58},"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",[73,162340,162341,162351,162355,162359,162367,162378,162388,162398,162408,162418,162422,162426,162435,162457,162461,162465,162474,162480,162500,162512,162523,162527,162536,162547,162552,162556,162560,162569,162575,162594,162606,162616,162620,162631,162641,162645,162653,162664,162668,162672,162676,162684,162689,162703,162707,162719,162724,162736,162741,162753,162758,162770,162780,162784,162790],{"__ignoreMap":58},[76,162342,162343,162346,162348],{"class":78,"line":79},[76,162344,162345],{"class":93},"balance ",[76,162347,247],{"class":89},[76,162349,162350],{"class":250}," 1000\n",[76,162352,162353],{"class":78,"line":86},[76,162354,2472],{"emptyLinePlaceholder":125},[76,162356,162357],{"class":78,"line":97},[76,162358,2472],{"emptyLinePlaceholder":125},[76,162360,162361,162363,162365],{"class":78,"line":103},[76,162362,32017],{"class":89},[76,162364,152074],{"class":2035},[76,162366,32023],{"class":93},[76,162368,162369,162371,162373,162376],{"class":78,"line":1273},[76,162370,31369],{"class":250},[76,162372,202],{"class":93},[76,162374,162375],{"class":305},"\"====== ATM ======\"",[76,162377,208],{"class":93},[76,162379,162380,162382,162384,162386],{"class":78,"line":1287},[76,162381,31369],{"class":250},[76,162383,202],{"class":93},[76,162385,160689],{"class":305},[76,162387,208],{"class":93},[76,162389,162390,162392,162394,162396],{"class":78,"line":1293},[76,162391,31369],{"class":250},[76,162393,202],{"class":93},[76,162395,160700],{"class":305},[76,162397,208],{"class":93},[76,162399,162400,162402,162404,162406],{"class":78,"line":1384},[76,162401,31369],{"class":250},[76,162403,202],{"class":93},[76,162405,160711],{"class":305},[76,162407,208],{"class":93},[76,162409,162410,162412,162414,162416],{"class":78,"line":1390},[76,162411,31369],{"class":250},[76,162413,202],{"class":93},[76,162415,160722],{"class":305},[76,162417,208],{"class":93},[76,162419,162420],{"class":78,"line":1402},[76,162421,2472],{"emptyLinePlaceholder":125},[76,162423,162424],{"class":78,"line":1684},[76,162425,2472],{"emptyLinePlaceholder":125},[76,162427,162428,162430,162433],{"class":78,"line":1689},[76,162429,32017],{"class":89},[76,162431,162432],{"class":2035}," show_balance",[76,162434,32023],{"class":93},[76,162436,162437,162439,162441,162443,162446,162448,162451,162453,162455],{"class":78,"line":1695},[76,162438,31369],{"class":250},[76,162440,202],{"class":93},[76,162442,254],{"class":89},[76,162444,162445],{"class":305},"\"当前余额:",[76,162447,1095],{"class":250},[76,162449,162450],{"class":93},"balance",[76,162452,1145],{"class":250},[76,162454,157053],{"class":305},[76,162456,208],{"class":93},[76,162458,162459],{"class":78,"line":1700},[76,162460,2472],{"emptyLinePlaceholder":125},[76,162462,162463],{"class":78,"line":1714},[76,162464,2472],{"emptyLinePlaceholder":125},[76,162466,162467,162469,162472],{"class":78,"line":1719},[76,162468,32017],{"class":89},[76,162470,162471],{"class":2035}," save_money",[76,162473,32023],{"class":93},[76,162475,162476,162478],{"class":78,"line":1725},[76,162477,161902],{"class":89},[76,162479,150140],{"class":93},[76,162481,162482,162485,162487,162489,162491,162493,162495,162498],{"class":78,"line":1746},[76,162483,162484],{"class":93},"    money ",[76,162486,247],{"class":89},[76,162488,109838],{"class":250},[76,162490,202],{"class":93},[76,162492,53891],{"class":250},[76,162494,202],{"class":93},[76,162496,162497],{"class":305},"\"请输入存款金额:\"",[76,162499,30567],{"class":93},[76,162501,162502,162504,162506,162508,162510],{"class":78,"line":1751},[76,162503,3173],{"class":89},[76,162505,150183],{"class":93},[76,162507,1660],{"class":89},[76,162509,4165],{"class":250},[76,162511,3811],{"class":93},[76,162513,162514,162516,162518,162521],{"class":78,"line":1765},[76,162515,32521],{"class":250},[76,162517,202],{"class":93},[76,162519,162520],{"class":305},"\"金额必须大于0\"",[76,162522,208],{"class":93},[76,162524,162525],{"class":78,"line":1770},[76,162526,152402],{"class":89},[76,162528,162529,162532,162534],{"class":78,"line":1799},[76,162530,162531],{"class":93},"    balance ",[76,162533,9549],{"class":89},[76,162535,150216],{"class":93},[76,162537,162538,162540,162542,162545],{"class":78,"line":1804},[76,162539,31369],{"class":250},[76,162541,202],{"class":93},[76,162543,162544],{"class":305},"\"存款成功\"",[76,162546,208],{"class":93},[76,162548,162549],{"class":78,"line":1821},[76,162550,162551],{"class":93},"    show_balance()\n",[76,162553,162554],{"class":78,"line":1826},[76,162555,2472],{"emptyLinePlaceholder":125},[76,162557,162558],{"class":78,"line":1831},[76,162559,2472],{"emptyLinePlaceholder":125},[76,162561,162562,162564,162567],{"class":78,"line":1836},[76,162563,32017],{"class":89},[76,162565,162566],{"class":2035}," withdraw_money",[76,162568,32023],{"class":93},[76,162570,162571,162573],{"class":78,"line":1850},[76,162572,161902],{"class":89},[76,162574,150140],{"class":93},[76,162576,162577,162579,162581,162583,162585,162587,162589,162592],{"class":78,"line":1855},[76,162578,162484],{"class":93},[76,162580,247],{"class":89},[76,162582,109838],{"class":250},[76,162584,202],{"class":93},[76,162586,53891],{"class":250},[76,162588,202],{"class":93},[76,162590,162591],{"class":305},"\"请输入取款金额:\"",[76,162593,30567],{"class":93},[76,162595,162596,162598,162600,162602,162604],{"class":78,"line":2649},[76,162597,3173],{"class":89},[76,162599,150183],{"class":93},[76,162601,1660],{"class":89},[76,162603,4165],{"class":250},[76,162605,3811],{"class":93},[76,162607,162608,162610,162612,162614],{"class":78,"line":2663},[76,162609,32521],{"class":250},[76,162611,202],{"class":93},[76,162613,162520],{"class":305},[76,162615,208],{"class":93},[76,162617,162618],{"class":78,"line":2671},[76,162619,152402],{"class":89},[76,162621,162622,162624,162626,162628],{"class":78,"line":2676},[76,162623,3173],{"class":89},[76,162625,150183],{"class":93},[76,162627,1159],{"class":89},[76,162629,162630],{"class":93}," balance:\n",[76,162632,162633,162635,162637,162639],{"class":78,"line":2682},[76,162634,32521],{"class":250},[76,162636,202],{"class":93},[76,162638,150278],{"class":305},[76,162640,208],{"class":93},[76,162642,162643],{"class":78,"line":2688},[76,162644,152402],{"class":89},[76,162646,162647,162649,162651],{"class":78,"line":2693},[76,162648,162531],{"class":93},[76,162650,150293],{"class":89},[76,162652,150216],{"class":93},[76,162654,162655,162657,162659,162662],{"class":78,"line":8020},[76,162656,31369],{"class":250},[76,162658,202],{"class":93},[76,162660,162661],{"class":305},"\"取款成功\"",[76,162663,208],{"class":93},[76,162665,162666],{"class":78,"line":8044},[76,162667,162551],{"class":93},[76,162669,162670],{"class":78,"line":8049},[76,162671,2472],{"emptyLinePlaceholder":125},[76,162673,162674],{"class":78,"line":8055},[76,162675,2472],{"emptyLinePlaceholder":125},[76,162677,162678,162680,162682],{"class":78,"line":8082},[76,162679,108704],{"class":89},[76,162681,95361],{"class":250},[76,162683,3811],{"class":93},[76,162685,162686],{"class":78,"line":8087},[76,162687,162688],{"class":93},"    show_menu()\n",[76,162690,162691,162693,162695,162697,162699,162701],{"class":78,"line":8093},[76,162692,160733],{"class":93},[76,162694,247],{"class":89},[76,162696,60675],{"class":250},[76,162698,202],{"class":93},[76,162700,153114],{"class":305},[76,162702,208],{"class":93},[76,162704,162705],{"class":78,"line":8105},[76,162706,2472],{"emptyLinePlaceholder":125},[76,162708,162709,162711,162713,162715,162717],{"class":78,"line":8117},[76,162710,3173],{"class":89},[76,162712,153127],{"class":93},[76,162714,3021],{"class":89},[76,162716,153132],{"class":305},[76,162718,3811],{"class":93},[76,162720,162721],{"class":78,"line":8129},[76,162722,162723],{"class":93},"        show_balance()\n",[76,162725,162726,162728,162730,162732,162734],{"class":78,"line":9788},[76,162727,39363],{"class":89},[76,162729,153127],{"class":93},[76,162731,3021],{"class":89},[76,162733,153151],{"class":305},[76,162735,3811],{"class":93},[76,162737,162738],{"class":78,"line":9813},[76,162739,162740],{"class":93},"        save_money()\n",[76,162742,162743,162745,162747,162749,162751],{"class":78,"line":9836},[76,162744,39363],{"class":89},[76,162746,153127],{"class":93},[76,162748,3021],{"class":89},[76,162750,153169],{"class":305},[76,162752,3811],{"class":93},[76,162754,162755],{"class":78,"line":9860},[76,162756,162757],{"class":93},"        withdraw_money()\n",[76,162759,162760,162762,162764,162766,162768],{"class":78,"line":9865},[76,162761,39363],{"class":89},[76,162763,153127],{"class":93},[76,162765,3021],{"class":89},[76,162767,153223],{"class":305},[76,162769,3811],{"class":93},[76,162771,162772,162774,162776,162778],{"class":78,"line":9870},[76,162773,32521],{"class":250},[76,162775,202],{"class":93},[76,162777,153234],{"class":305},[76,162779,208],{"class":93},[76,162781,162782],{"class":78,"line":9875},[76,162783,31697],{"class":89},[76,162785,162786,162788],{"class":78,"line":9884},[76,162787,158063],{"class":89},[76,162789,3811],{"class":93},[76,162791,162792,162794,162796,162798],{"class":78,"line":9889},[76,162793,32521],{"class":250},[76,162795,202],{"class":93},[76,162797,153255],{"class":305},[76,162799,208],{"class":93},[14,162801,162802],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[140,162804,162806],{"id":162805},"_514-易错点","5.14 易错点",[152,162808,162809,162812,162815,162820,162825,162828],{},[155,162810,162811],{},"函数定义后必须调用才会执行。",[155,162813,162814],{},"函数名后面有括号才是调用。",[155,162816,162817,162819],{},[73,162818,17118],{}," 后面的代码不会执行。",[155,162821,162822,162823,28458],{},"没有返回值的函数默认返回 ",[73,162824,95755],{},[155,162826,162827],{},"局部变量不能在函数外部访问。",[155,162829,162830,162831,162833],{},"不要滥用 ",[73,162832,161867],{},"，更好的方式是让函数返回新值。",[14,162835,162836,162837,162839],{},"例如不用 ",[73,162838,161867],{}," 改写存款：",[67,162841,162843],{"className":69,"code":162842,"language":71,"meta":58,"style":58},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[73,162844,162845,162854,162865,162869,162873,162881,162894],{"__ignoreMap":58},[76,162846,162847,162849,162851],{"class":78,"line":79},[76,162848,32017],{"class":89},[76,162850,162471],{"class":2035},[76,162852,162853],{"class":93},"(balance, money):\n",[76,162855,162856,162858,162861,162863],{"class":78,"line":86},[76,162857,4162],{"class":89},[76,162859,162860],{"class":93}," balance ",[76,162862,681],{"class":89},[76,162864,150216],{"class":93},[76,162866,162867],{"class":78,"line":97},[76,162868,2472],{"emptyLinePlaceholder":125},[76,162870,162871],{"class":78,"line":103},[76,162872,2472],{"emptyLinePlaceholder":125},[76,162874,162875,162877,162879],{"class":78,"line":1273},[76,162876,162345],{"class":93},[76,162878,247],{"class":89},[76,162880,162350],{"class":250},[76,162882,162883,162885,162887,162890,162892],{"class":78,"line":1287},[76,162884,162345],{"class":93},[76,162886,247],{"class":89},[76,162888,162889],{"class":93}," save_money(balance, ",[76,162891,1794],{"class":250},[76,162893,208],{"class":93},[76,162895,162896,162898],{"class":78,"line":1293},[76,162897,30485],{"class":250},[76,162899,162900],{"class":93},"(balance)\n",[140,162902,162904],{"id":162903},"_515-本章练习","5.15 本章练习",[152,162906,162907,162914,162920,162926,162932],{},[155,162908,162909,162910,162913],{},"定义函数 ",[73,162911,162912],{},"print_student(name, age)","，输出学生信息。",[155,162915,162909,162916,162919],{},[73,162917,162918],{},"get_max(a, b, c)","，返回三个数中的最大值。",[155,162921,162909,162922,162925],{},[73,162923,162924],{},"is_even(num)","，判断一个数是否为偶数。",[155,162927,162909,162928,162931],{},[73,162929,162930],{},"calculate_bmi(weight, height)","，返回 BMI。",[155,162933,162934],{},"把第 4 章的菜单程序拆分成多个函数。",[117,162936,162937],{},"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":58,"searchDepth":86,"depth":86,"links":162939},[162940,162941,162942,162943,162944,162945,162946,162947,162948,162952,162953,162954,162955,162956,162957],{"id":160960,"depth":86,"text":160961},{"id":161001,"depth":86,"text":161002},{"id":161091,"depth":86,"text":161092},{"id":161172,"depth":86,"text":161173},{"id":161305,"depth":86,"text":161306},{"id":161427,"depth":86,"text":161428},{"id":161549,"depth":86,"text":161550},{"id":161626,"depth":86,"text":161627},{"id":161748,"depth":86,"text":161749,"children":162949},[162950,162951],{"id":161752,"depth":97,"text":161753},{"id":161810,"depth":97,"text":161811},{"id":161939,"depth":86,"text":161940},{"id":162065,"depth":86,"text":162066},{"id":162178,"depth":86,"text":162179},{"id":162334,"depth":86,"text":162335},{"id":162805,"depth":86,"text":162806},{"id":162903,"depth":86,"text":162904},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160952,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162964,"title":162965,"body":162966,"description":122,"extension":123,"meta":166010,"navigation":125,"path":166011,"seo":166012,"stem":166013,"__hash__":166014},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162967,"toc":165991},[162968,162971,162975,162978,162981,163085,163088,163092,163095,163175,163178,163182,163185,163245,163248,163284,163287,163302,163306,163379,163382,163437,163440,163510,163513,163597,163607,163665,163669,163714,163717,163743,163746,163852,163856,163859,163901,163904,163968,163971,163975,163978,164039,164042,164072,164075,164113,164117,164120,164129,164132,164256,164259,164300,164304,164307,164318,164358,164361,164376,164381,164384,164451,164454,164544,164548,164551,164599,164602,164629,164631,164661,164664,164684,164687,164718,164721,164754,164758,164761,164785,164788,164812,164815,164839,164843,164846,164976,164979,165059,165062,165137,165141,165144,165194,165197,165239,165242,165266,165268,165292,165295,165350,165353,165419,165423,165426,165429,165467,165470,165523,165526,165572,165575,165608,165611,165615,165934,165938,165967,165971,165988],[10,162969,162965],{"id":162970},"_6-数据容器",[140,162972,162974],{"id":162973},"_61-什么是数据容器","6.1 什么是数据容器",[14,162976,162977],{},"数据容器用于一次保存多个数据。",[14,162979,162980],{},"常见容器：",[338,162982,162983,163000],{},[341,162984,162985],{},[344,162986,162987,162989,162992,162995,162998],{},[347,162988,25844],{},[347,162990,162991],{},"是否有序",[347,162993,162994],{},"是否可变",[347,162996,162997],{},"是否允许重复",[347,162999,27565],{},[385,163001,163002,163020,163036,163051,163068],{},[344,163003,163004,163007,163010,163013,163016],{},[390,163005,163006],{},"list列表",[390,163008,163009],{},"有序",[390,163011,163012],{},"可变",[390,163014,163015],{},"允许",[390,163017,163018],{},[73,163019,155298],{},[344,163021,163022,163025,163027,163030,163032],{},[390,163023,163024],{},"tuple元组",[390,163026,163009],{},[390,163028,163029],{},"不可变",[390,163031,163015],{},[390,163033,163034],{},[73,163035,155311],{},[344,163037,163038,163041,163043,163045,163047],{},[390,163039,163040],{},"str字符串",[390,163042,163009],{},[390,163044,163029],{},[390,163046,163015],{},[390,163048,163049],{},[73,163050,155921],{},[344,163052,163053,163056,163059,163061,163064],{},[390,163054,163055],{},"set集合",[390,163057,163058],{},"无序",[390,163060,163012],{},[390,163062,163063],{},"不允许",[390,163065,163066],{},[73,163067,155336],{},[344,163069,163070,163073,163075,163077,163080],{},[390,163071,163072],{},"dict字典",[390,163074,163009],{},[390,163076,163012],{},[390,163078,163079],{},"key不允许重复",[390,163081,163082],{},[73,163083,163084],{},"{\"name\": \"小明\"}",[14,163086,163087],{},"Python 3.7 之后，字典保持插入顺序。",[140,163089,163091],{"id":163090},"_62-列表list","6.2 列表list",[14,163093,163094],{},"列表用于保存一组有顺序的数据。",[67,163096,163098],{"className":69,"code":163097,"language":71,"meta":58,"style":58},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[73,163099,163100,163120,163145,163166],{"__ignoreMap":58},[76,163101,163102,163104,163106,163108,163110,163112,163114,163116,163118],{"class":78,"line":79},[76,163103,160421],{"class":93},[76,163105,247],{"class":89},[76,163107,52296],{"class":93},[76,163109,149929],{"class":305},[76,163111,12507],{"class":93},[76,163113,150977],{"class":305},[76,163115,12507],{"class":93},[76,163117,159772],{"class":305},[76,163119,33316],{"class":93},[76,163121,163122,163125,163127,163129,163131,163133,163135,163137,163139,163141,163143],{"class":78,"line":86},[76,163123,163124],{"class":93},"numbers ",[76,163126,247],{"class":89},[76,163128,52296],{"class":93},[76,163130,418],{"class":250},[76,163132,12507],{"class":93},[76,163134,278],{"class":250},[76,163136,12507],{"class":93},[76,163138,272],{"class":250},[76,163140,12507],{"class":93},[76,163142,494],{"class":250},[76,163144,33316],{"class":93},[76,163146,163147,163150,163152,163154,163156,163158,163160,163162,163164],{"class":78,"line":97},[76,163148,163149],{"class":93},"mixed ",[76,163151,247],{"class":89},[76,163153,52296],{"class":93},[76,163155,149929],{"class":305},[76,163157,12507],{"class":93},[76,163159,849],{"class":250},[76,163161,12507],{"class":93},[76,163163,31546],{"class":250},[76,163165,33316],{"class":93},[76,163167,163168,163171,163173],{"class":78,"line":103},[76,163169,163170],{"class":93},"empty ",[76,163172,247],{"class":89},[76,163174,51908],{"class":93},[14,163176,163177],{},"推荐一个列表中保存同类数据，代码更清晰。",[140,163179,163181],{"id":163180},"_63-列表索引","6.3 列表索引",[14,163183,163184],{},"正向索引从 0 开始：",[67,163186,163188],{"className":69,"code":163187,"language":71,"meta":58,"style":58},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[73,163189,163190,163210,163214,163225,163235],{"__ignoreMap":58},[76,163191,163192,163194,163196,163198,163200,163202,163204,163206,163208],{"class":78,"line":79},[76,163193,160421],{"class":93},[76,163195,247],{"class":89},[76,163197,52296],{"class":93},[76,163199,149929],{"class":305},[76,163201,12507],{"class":93},[76,163203,150977],{"class":305},[76,163205,12507],{"class":93},[76,163207,159772],{"class":305},[76,163209,33316],{"class":93},[76,163211,163212],{"class":78,"line":86},[76,163213,2472],{"emptyLinePlaceholder":125},[76,163215,163216,163218,163221,163223],{"class":78,"line":97},[76,163217,30485],{"class":250},[76,163219,163220],{"class":93},"(names[",[76,163222,392],{"class":250},[76,163224,4729],{"class":93},[76,163226,163227,163229,163231,163233],{"class":78,"line":103},[76,163228,30485],{"class":250},[76,163230,163220],{"class":93},[76,163232,418],{"class":250},[76,163234,4729],{"class":93},[76,163236,163237,163239,163241,163243],{"class":78,"line":1273},[76,163238,30485],{"class":250},[76,163240,163220],{"class":93},[76,163242,278],{"class":250},[76,163244,4729],{"class":93},[14,163246,163247],{},"反向索引从 -1 开始：",[67,163249,163251],{"className":69,"code":163250,"language":71,"meta":58,"style":58},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[73,163252,163253,163269],{"__ignoreMap":58},[76,163254,163255,163257,163259,163261,163263,163266],{"class":78,"line":79},[76,163256,30485],{"class":250},[76,163258,163220],{"class":93},[76,163260,112],{"class":89},[76,163262,418],{"class":250},[76,163264,163265],{"class":93},"])  ",[76,163267,163268],{"class":82},"# 小刚\n",[76,163270,163271,163273,163275,163277,163279,163281],{"class":78,"line":86},[76,163272,30485],{"class":250},[76,163274,163220],{"class":93},[76,163276,112],{"class":89},[76,163278,278],{"class":250},[76,163280,163265],{"class":93},[76,163282,163283],{"class":82},"# 小红\n",[14,163285,163286],{},"索引越界会报错：",[67,163288,163290],{"className":69,"code":163289,"language":71,"meta":58,"style":58},"print(names[3])\n",[73,163291,163292],{"__ignoreMap":58},[76,163293,163294,163296,163298,163300],{"class":78,"line":79},[76,163295,30485],{"class":250},[76,163297,163220],{"class":93},[76,163299,272],{"class":250},[76,163301,4729],{"class":93},[140,163303,163305],{"id":163304},"_64-列表常用方法","6.4 列表常用方法",[67,163307,163309],{"className":69,"code":163308,"language":71,"meta":58,"style":58},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[73,163310,163311,163327,163331,163340,163354,163368,163372],{"__ignoreMap":58},[76,163312,163313,163315,163317,163319,163321,163323,163325],{"class":78,"line":79},[76,163314,160421],{"class":93},[76,163316,247],{"class":89},[76,163318,52296],{"class":93},[76,163320,149929],{"class":305},[76,163322,12507],{"class":93},[76,163324,150977],{"class":305},[76,163326,33316],{"class":93},[76,163328,163329],{"class":78,"line":86},[76,163330,2472],{"emptyLinePlaceholder":125},[76,163332,163333,163336,163338],{"class":78,"line":97},[76,163334,163335],{"class":93},"names.append(",[76,163337,159772],{"class":305},[76,163339,208],{"class":93},[76,163341,163342,163345,163347,163349,163352],{"class":78,"line":103},[76,163343,163344],{"class":93},"names.insert(",[76,163346,418],{"class":250},[76,163348,12507],{"class":93},[76,163350,163351],{"class":305},"\"小李\"",[76,163353,208],{"class":93},[76,163355,163356,163359,163361,163363,163366],{"class":78,"line":1273},[76,163357,163358],{"class":93},"names.extend([",[76,163360,8755],{"class":305},[76,163362,12507],{"class":93},[76,163364,163365],{"class":305},"\"小赵\"",[76,163367,4729],{"class":93},[76,163369,163370],{"class":78,"line":1287},[76,163371,2472],{"emptyLinePlaceholder":125},[76,163373,163374,163376],{"class":78,"line":1293},[76,163375,30485],{"class":250},[76,163377,163378],{"class":93},"(names)\n",[14,163380,163381],{},"删除元素：",[67,163383,163385],{"className":69,"code":163384,"language":71,"meta":58,"style":58},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[73,163386,163387,163396,163406,163420,163432],{"__ignoreMap":58},[76,163388,163389,163392,163394],{"class":78,"line":79},[76,163390,163391],{"class":93},"names.remove(",[76,163393,150977],{"class":305},[76,163395,208],{"class":93},[76,163397,163398,163401,163403],{"class":78,"line":86},[76,163399,163400],{"class":93},"last ",[76,163402,247],{"class":89},[76,163404,163405],{"class":93}," names.pop()\n",[76,163407,163408,163411,163413,163416,163418],{"class":78,"line":97},[76,163409,163410],{"class":93},"first ",[76,163412,247],{"class":89},[76,163414,163415],{"class":93}," names.pop(",[76,163417,392],{"class":250},[76,163419,208],{"class":93},[76,163421,163422,163425,163428,163430],{"class":78,"line":103},[76,163423,163424],{"class":89},"del",[76,163426,163427],{"class":93}," names[",[76,163429,392],{"class":250},[76,163431,33316],{"class":93},[76,163433,163434],{"class":78,"line":1273},[76,163435,163436],{"class":93},"names.clear()\n",[14,163438,163439],{},"查询和统计：",[67,163441,163443],{"className":69,"code":163442,"language":71,"meta":58,"style":58},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[73,163444,163445,163473,163477,163488,163499],{"__ignoreMap":58},[76,163446,163447,163449,163451,163453,163455,163457,163459,163461,163463,163465,163467,163469,163471],{"class":78,"line":79},[76,163448,163124],{"class":93},[76,163450,247],{"class":89},[76,163452,52296],{"class":93},[76,163454,418],{"class":250},[76,163456,12507],{"class":93},[76,163458,278],{"class":250},[76,163460,12507],{"class":93},[76,163462,272],{"class":250},[76,163464,12507],{"class":93},[76,163466,278],{"class":250},[76,163468,12507],{"class":93},[76,163470,494],{"class":250},[76,163472,33316],{"class":93},[76,163474,163475],{"class":78,"line":86},[76,163476,2472],{"emptyLinePlaceholder":125},[76,163478,163479,163481,163484,163486],{"class":78,"line":97},[76,163480,30485],{"class":250},[76,163482,163483],{"class":93},"(numbers.index(",[76,163485,272],{"class":250},[76,163487,30567],{"class":93},[76,163489,163490,163492,163495,163497],{"class":78,"line":103},[76,163491,30485],{"class":250},[76,163493,163494],{"class":93},"(numbers.count(",[76,163496,278],{"class":250},[76,163498,30567],{"class":93},[76,163500,163501,163503,163505,163507],{"class":78,"line":1273},[76,163502,30485],{"class":250},[76,163504,202],{"class":93},[76,163506,7430],{"class":250},[76,163508,163509],{"class":93},"(numbers))\n",[14,163511,163512],{},"排序：",[67,163514,163516],{"className":69,"code":163515,"language":71,"meta":58,"style":58},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[73,163517,163518,163542,163546,163551,163558,163562,163576,163582,163586,163591],{"__ignoreMap":58},[76,163519,163520,163522,163524,163526,163528,163530,163532,163534,163536,163538,163540],{"class":78,"line":79},[76,163521,163124],{"class":93},[76,163523,247],{"class":89},[76,163525,52296],{"class":93},[76,163527,272],{"class":250},[76,163529,12507],{"class":93},[76,163531,418],{"class":250},[76,163533,12507],{"class":93},[76,163535,520],{"class":250},[76,163537,12507],{"class":93},[76,163539,278],{"class":250},[76,163541,33316],{"class":93},[76,163543,163544],{"class":78,"line":86},[76,163545,2472],{"emptyLinePlaceholder":125},[76,163547,163548],{"class":78,"line":97},[76,163549,163550],{"class":93},"numbers.sort()\n",[76,163552,163553,163555],{"class":78,"line":103},[76,163554,30485],{"class":250},[76,163556,163557],{"class":93},"(numbers)\n",[76,163559,163560],{"class":78,"line":1273},[76,163561,2472],{"emptyLinePlaceholder":125},[76,163563,163564,163567,163570,163572,163574],{"class":78,"line":1287},[76,163565,163566],{"class":93},"numbers.sort(",[76,163568,163569],{"class":5288},"reverse",[76,163571,247],{"class":89},[76,163573,31546],{"class":250},[76,163575,208],{"class":93},[76,163577,163578,163580],{"class":78,"line":1293},[76,163579,30485],{"class":250},[76,163581,163557],{"class":93},[76,163583,163584],{"class":78,"line":1384},[76,163585,2472],{"emptyLinePlaceholder":125},[76,163587,163588],{"class":78,"line":1390},[76,163589,163590],{"class":93},"numbers.reverse()\n",[76,163592,163593,163595],{"class":78,"line":1402},[76,163594,30485],{"class":250},[76,163596,163557],{"class":93},[14,163598,163599,163602,163603,163606],{},[73,163600,163601],{},"sort()"," 会修改原列表，",[73,163604,163605],{},"sorted()"," 返回新列表。",[67,163608,163610],{"className":69,"code":163609,"language":71,"meta":58,"style":58},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[73,163611,163612,163636,163648,163652,163658],{"__ignoreMap":58},[76,163613,163614,163616,163618,163620,163622,163624,163626,163628,163630,163632,163634],{"class":78,"line":79},[76,163615,163124],{"class":93},[76,163617,247],{"class":89},[76,163619,52296],{"class":93},[76,163621,272],{"class":250},[76,163623,12507],{"class":93},[76,163625,418],{"class":250},[76,163627,12507],{"class":93},[76,163629,520],{"class":250},[76,163631,12507],{"class":93},[76,163633,278],{"class":250},[76,163635,33316],{"class":93},[76,163637,163638,163641,163643,163646],{"class":78,"line":86},[76,163639,163640],{"class":93},"new_numbers ",[76,163642,247],{"class":89},[76,163644,163645],{"class":250}," sorted",[76,163647,163557],{"class":93},[76,163649,163650],{"class":78,"line":97},[76,163651,2472],{"emptyLinePlaceholder":125},[76,163653,163654,163656],{"class":78,"line":103},[76,163655,30485],{"class":250},[76,163657,163557],{"class":93},[76,163659,163660,163662],{"class":78,"line":1273},[76,163661,30485],{"class":250},[76,163663,163664],{"class":93},"(new_numbers)\n",[140,163666,163668],{"id":163667},"_65-列表遍历","6.5 列表遍历",[67,163670,163672],{"className":69,"code":163671,"language":71,"meta":58,"style":58},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[73,163673,163674,163694,163698,163708],{"__ignoreMap":58},[76,163675,163676,163678,163680,163682,163684,163686,163688,163690,163692],{"class":78,"line":79},[76,163677,160421],{"class":93},[76,163679,247],{"class":89},[76,163681,52296],{"class":93},[76,163683,149929],{"class":305},[76,163685,12507],{"class":93},[76,163687,150977],{"class":305},[76,163689,12507],{"class":93},[76,163691,159772],{"class":305},[76,163693,33316],{"class":93},[76,163695,163696],{"class":78,"line":86},[76,163697,2472],{"emptyLinePlaceholder":125},[76,163699,163700,163702,163704,163706],{"class":78,"line":97},[76,163701,3097],{"class":89},[76,163703,160457],{"class":93},[76,163705,26116],{"class":89},[76,163707,160462],{"class":93},[76,163709,163710,163712],{"class":78,"line":103},[76,163711,31369],{"class":250},[76,163713,150701],{"class":93},[14,163715,163716],{},"需要索引时：",[67,163718,163720],{"className":69,"code":163719,"language":71,"meta":58,"style":58},"for index, name in enumerate(names):\n    print(index, name)\n",[73,163721,163722,163736],{"__ignoreMap":58},[76,163723,163724,163726,163729,163731,163733],{"class":78,"line":79},[76,163725,3097],{"class":89},[76,163727,163728],{"class":93}," index, name ",[76,163730,26116],{"class":89},[76,163732,31676],{"class":250},[76,163734,163735],{"class":93},"(names):\n",[76,163737,163738,163740],{"class":78,"line":86},[76,163739,31369],{"class":250},[76,163741,163742],{"class":93},"(index, name)\n",[14,163744,163745],{},"统计总分：",[67,163747,163749],{"className":69,"code":163748,"language":71,"meta":58,"style":58},"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",[73,163750,163751,163776,163784,163788,163799,163807,163811,163828],{"__ignoreMap":58},[76,163752,163753,163756,163758,163760,163762,163764,163766,163768,163770,163772,163774],{"class":78,"line":79},[76,163754,163755],{"class":93},"scores ",[76,163757,247],{"class":89},[76,163759,52296],{"class":93},[76,163761,1061],{"class":250},[76,163763,12507],{"class":93},[76,163765,935],{"class":250},[76,163767,12507],{"class":93},[76,163769,455],{"class":250},[76,163771,12507],{"class":93},[76,163773,760],{"class":250},[76,163775,33316],{"class":93},[76,163777,163778,163780,163782],{"class":78,"line":86},[76,163779,157301],{"class":93},[76,163781,247],{"class":89},[76,163783,47403],{"class":250},[76,163785,163786],{"class":78,"line":97},[76,163787,2472],{"emptyLinePlaceholder":125},[76,163789,163790,163792,163794,163796],{"class":78,"line":103},[76,163791,3097],{"class":89},[76,163793,157824],{"class":93},[76,163795,26116],{"class":89},[76,163797,163798],{"class":93}," scores:\n",[76,163800,163801,163803,163805],{"class":78,"line":1273},[76,163802,159348],{"class":93},[76,163804,9549],{"class":89},[76,163806,1651],{"class":93},[76,163808,163809],{"class":78,"line":1287},[76,163810,2472],{"emptyLinePlaceholder":125},[76,163812,163813,163816,163818,163821,163823,163825],{"class":78,"line":1293},[76,163814,163815],{"class":93},"avg ",[76,163817,247],{"class":89},[76,163819,163820],{"class":93}," total ",[76,163822,783],{"class":89},[76,163824,7403],{"class":250},[76,163826,163827],{"class":93},"(scores)\n",[76,163829,163830,163832,163834,163836,163839,163841,163844,163846,163848,163850],{"class":78,"line":1384},[76,163831,30485],{"class":250},[76,163833,202],{"class":93},[76,163835,254],{"class":89},[76,163837,163838],{"class":305},"\"平均分:",[76,163840,1095],{"class":250},[76,163842,163843],{"class":93},"avg",[76,163845,157200],{"class":89},[76,163847,1145],{"class":250},[76,163849,452],{"class":305},[76,163851,208],{"class":93},[140,163853,163855],{"id":163854},"_66-元组tuple","6.6 元组tuple",[14,163857,163858],{},"元组和列表类似，但不可修改。",[67,163860,163862],{"className":69,"code":163861,"language":71,"meta":58,"style":58},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[73,163863,163864,163881],{"__ignoreMap":58},[76,163865,163866,163869,163871,163873,163875,163877,163879],{"class":78,"line":79},[76,163867,163868],{"class":93},"point ",[76,163870,247],{"class":89},[76,163872,1730],{"class":93},[76,163874,646],{"class":250},[76,163876,12507],{"class":93},[76,163878,899],{"class":250},[76,163880,208],{"class":93},[76,163882,163883,163885,163887,163889,163891,163893,163895,163897,163899],{"class":78,"line":86},[76,163884,116355],{"class":93},[76,163886,247],{"class":89},[76,163888,1730],{"class":93},[76,163890,149929],{"class":305},[76,163892,12507],{"class":93},[76,163894,849],{"class":250},[76,163896,12507],{"class":93},[76,163898,69339],{"class":305},[76,163900,208],{"class":93},[14,163902,163903],{},"单元素元组必须加逗号：",[67,163905,163907],{"className":69,"code":163906,"language":71,"meta":58,"style":58},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[73,163908,163909,163923,163936,163940,163954],{"__ignoreMap":58},[76,163910,163911,163914,163916,163918,163920],{"class":78,"line":79},[76,163912,163913],{"class":93},"t1 ",[76,163915,247],{"class":89},[76,163917,1730],{"class":93},[76,163919,646],{"class":250},[76,163921,163922],{"class":93},",)\n",[76,163924,163925,163928,163930,163932,163934],{"class":78,"line":86},[76,163926,163927],{"class":93},"t2 ",[76,163929,247],{"class":89},[76,163931,1730],{"class":93},[76,163933,646],{"class":250},[76,163935,208],{"class":93},[76,163937,163938],{"class":78,"line":97},[76,163939,2472],{"emptyLinePlaceholder":125},[76,163941,163942,163944,163946,163948,163951],{"class":78,"line":103},[76,163943,30485],{"class":250},[76,163945,202],{"class":93},[76,163947,103148],{"class":250},[76,163949,163950],{"class":93},"(t1))  ",[76,163952,163953],{"class":82},"# tuple\n",[76,163955,163956,163958,163960,163962,163965],{"class":78,"line":1273},[76,163957,30485],{"class":250},[76,163959,202],{"class":93},[76,163961,103148],{"class":250},[76,163963,163964],{"class":93},"(t2))  ",[76,163966,163967],{"class":82},"# int\n",[14,163969,163970],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[140,163972,163974],{"id":163973},"_67-字符串str","6.7 字符串str",[14,163976,163977],{},"字符串也是序列，可以索引、切片和遍历。",[67,163979,163981],{"className":69,"code":163980,"language":71,"meta":58,"style":58},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[73,163982,163983,163991,163995,164006,164018,164022,164033],{"__ignoreMap":58},[76,163984,163985,163987,163989],{"class":78,"line":79},[76,163986,156485],{"class":93},[76,163988,247],{"class":89},[76,163990,159722],{"class":305},[76,163992,163993],{"class":78,"line":86},[76,163994,2472],{"emptyLinePlaceholder":125},[76,163996,163997,163999,164002,164004],{"class":78,"line":97},[76,163998,30485],{"class":250},[76,164000,164001],{"class":93},"(text[",[76,164003,392],{"class":250},[76,164005,4729],{"class":93},[76,164007,164008,164010,164012,164014,164016],{"class":78,"line":103},[76,164009,30485],{"class":250},[76,164011,164001],{"class":93},[76,164013,112],{"class":89},[76,164015,418],{"class":250},[76,164017,4729],{"class":93},[76,164019,164020],{"class":78,"line":1273},[76,164021,2472],{"emptyLinePlaceholder":125},[76,164023,164024,164026,164028,164030],{"class":78,"line":1287},[76,164025,3097],{"class":89},[76,164027,159733],{"class":93},[76,164029,26116],{"class":89},[76,164031,164032],{"class":93}," text:\n",[76,164034,164035,164037],{"class":78,"line":1293},[76,164036,31369],{"class":250},[76,164038,159744],{"class":93},[14,164040,164041],{},"字符串不可变：",[67,164043,164045],{"className":69,"code":164044,"language":71,"meta":58,"style":58},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[73,164046,164047,164055],{"__ignoreMap":58},[76,164048,164049,164051,164053],{"class":78,"line":79},[76,164050,156485],{"class":93},[76,164052,247],{"class":89},[76,164054,159722],{"class":305},[76,164056,164057,164060,164062,164064,164066,164069],{"class":78,"line":86},[76,164058,164059],{"class":93},"text[",[76,164061,392],{"class":250},[76,164063,4515],{"class":93},[76,164065,247],{"class":89},[76,164067,164068],{"class":305}," \"P\"",[76,164070,164071],{"class":82},"  # 报错\n",[14,164073,164074],{},"如果要得到新字符串：",[67,164076,164078],{"className":69,"code":164077,"language":71,"meta":58,"style":58},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[73,164079,164080,164088,164106],{"__ignoreMap":58},[76,164081,164082,164084,164086],{"class":78,"line":79},[76,164083,156485],{"class":93},[76,164085,247],{"class":89},[76,164087,159722],{"class":305},[76,164089,164090,164092,164094,164096,164098,164101,164103],{"class":78,"line":86},[76,164091,156485],{"class":93},[76,164093,247],{"class":89},[76,164095,164068],{"class":305},[76,164097,45636],{"class":89},[76,164099,164100],{"class":93}," text[",[76,164102,418],{"class":250},[76,164104,164105],{"class":93},":]\n",[76,164107,164108,164110],{"class":78,"line":97},[76,164109,30485],{"class":250},[76,164111,164112],{"class":93},"(text)\n",[140,164114,164116],{"id":164115},"_68-切片","6.8 切片",[14,164118,164119],{},"切片用于从序列中取一部分。",[67,164121,164123],{"className":69,"code":164122,"language":71,"meta":58,"style":58},"序列[开始:结束:步长]\n",[73,164124,164125],{"__ignoreMap":58},[76,164126,164127],{"class":78,"line":79},[76,164128,164122],{"class":93},[14,164130,164131],{},"结束位置不包含。",[67,164133,164135],{"className":69,"code":164134,"language":71,"meta":58,"style":58},"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",[73,164136,164137,164174,164178,164197,164212,164226,164240],{"__ignoreMap":58},[76,164138,164139,164142,164144,164146,164148,164150,164152,164154,164156,164158,164160,164162,164164,164166,164168,164170,164172],{"class":78,"line":79},[76,164140,164141],{"class":93},"nums ",[76,164143,247],{"class":89},[76,164145,52296],{"class":93},[76,164147,392],{"class":250},[76,164149,12507],{"class":93},[76,164151,418],{"class":250},[76,164153,12507],{"class":93},[76,164155,278],{"class":250},[76,164157,12507],{"class":93},[76,164159,272],{"class":250},[76,164161,12507],{"class":93},[76,164163,494],{"class":250},[76,164165,12507],{"class":93},[76,164167,520],{"class":250},[76,164169,12507],{"class":93},[76,164171,544],{"class":250},[76,164173,33316],{"class":93},[76,164175,164176],{"class":78,"line":86},[76,164177,2472],{"emptyLinePlaceholder":125},[76,164179,164180,164182,164185,164187,164189,164191,164194],{"class":78,"line":97},[76,164181,30485],{"class":250},[76,164183,164184],{"class":93},"(nums[",[76,164186,418],{"class":250},[76,164188,1058],{"class":93},[76,164190,494],{"class":250},[76,164192,164193],{"class":93},"])    ",[76,164195,164196],{"class":82},"# [1, 2, 3]\n",[76,164198,164199,164201,164204,164206,164209],{"class":78,"line":103},[76,164200,30485],{"class":250},[76,164202,164203],{"class":93},"(nums[:",[76,164205,272],{"class":250},[76,164207,164208],{"class":93},"])     ",[76,164210,164211],{"class":82},"# [0, 1, 2]\n",[76,164213,164214,164216,164218,164220,164223],{"class":78,"line":1273},[76,164215,30485],{"class":250},[76,164217,164184],{"class":93},[76,164219,272],{"class":250},[76,164221,164222],{"class":93},":])     ",[76,164224,164225],{"class":82},"# [3, 4, 5, 6]\n",[76,164227,164228,164230,164233,164235,164237],{"class":78,"line":1287},[76,164229,30485],{"class":250},[76,164231,164232],{"class":93},"(nums[::",[76,164234,278],{"class":250},[76,164236,164193],{"class":93},[76,164238,164239],{"class":82},"# [0, 2, 4, 6]\n",[76,164241,164242,164244,164246,164248,164250,164253],{"class":78,"line":1293},[76,164243,30485],{"class":250},[76,164245,164232],{"class":93},[76,164247,112],{"class":89},[76,164249,418],{"class":250},[76,164251,164252],{"class":93},"])   ",[76,164254,164255],{"class":82},"# 反转\n",[14,164257,164258],{},"字符串切片：",[67,164260,164262],{"className":69,"code":164261,"language":71,"meta":58,"style":58},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[73,164263,164264,164273,164287],{"__ignoreMap":58},[76,164265,164266,164268,164270],{"class":78,"line":79},[76,164267,156485],{"class":93},[76,164269,247],{"class":89},[76,164271,164272],{"class":305}," \"abcdef\"\n",[76,164274,164275,164277,164279,164281,164283,164285],{"class":78,"line":86},[76,164276,30485],{"class":250},[76,164278,164001],{"class":93},[76,164280,418],{"class":250},[76,164282,1058],{"class":93},[76,164284,494],{"class":250},[76,164286,4729],{"class":93},[76,164288,164289,164291,164294,164296,164298],{"class":78,"line":97},[76,164290,30485],{"class":250},[76,164292,164293],{"class":93},"(text[::",[76,164295,112],{"class":89},[76,164297,418],{"class":250},[76,164299,4729],{"class":93},[140,164301,164303],{"id":164302},"_69-集合set","6.9 集合set",[14,164305,164306],{},"集合特点：",[152,164308,164309,164312,164315],{},[155,164310,164311],{},"无序。",[155,164313,164314],{},"元素不重复。",[155,164316,164317],{},"可以做交集、并集、差集。",[67,164319,164321],{"className":69,"code":164320,"language":71,"meta":58,"style":58},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[73,164322,164323,164351],{"__ignoreMap":58},[76,164324,164325,164327,164329,164331,164333,164335,164337,164339,164341,164343,164345,164347,164349],{"class":78,"line":79},[76,164326,164141],{"class":93},[76,164328,247],{"class":89},[76,164330,4520],{"class":93},[76,164332,418],{"class":250},[76,164334,12507],{"class":93},[76,164336,278],{"class":250},[76,164338,12507],{"class":93},[76,164340,272],{"class":250},[76,164342,12507],{"class":93},[76,164344,272],{"class":250},[76,164346,12507],{"class":93},[76,164348,494],{"class":250},[76,164350,1637],{"class":93},[76,164352,164353,164355],{"class":78,"line":86},[76,164354,30485],{"class":250},[76,164356,164357],{"class":93},"(nums)\n",[14,164359,164360],{},"创建空集合：",[67,164362,164364],{"className":69,"code":164363,"language":71,"meta":58,"style":58},"s = set()\n",[73,164365,164366],{"__ignoreMap":58},[76,164367,164368,164370,164372,164374],{"class":78,"line":79},[76,164369,10651],{"class":93},[76,164371,247],{"class":89},[76,164373,119763],{"class":250},[76,164375,2048],{"class":93},[14,164377,9097,164378,164380],{},[73,164379,32529],{}," 是空字典，不是空集合。",[14,164382,164383],{},"集合常用操作：",[67,164385,164387],{"className":69,"code":164386,"language":71,"meta":58,"style":58},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[73,164388,164389,164409,164413,164422,164431,164440],{"__ignoreMap":58},[76,164390,164391,164393,164395,164397,164399,164401,164403,164405,164407],{"class":78,"line":79},[76,164392,10651],{"class":93},[76,164394,247],{"class":89},[76,164396,4520],{"class":93},[76,164398,418],{"class":250},[76,164400,12507],{"class":93},[76,164402,278],{"class":250},[76,164404,12507],{"class":93},[76,164406,272],{"class":250},[76,164408,1637],{"class":93},[76,164410,164411],{"class":78,"line":86},[76,164412,2472],{"emptyLinePlaceholder":125},[76,164414,164415,164418,164420],{"class":78,"line":97},[76,164416,164417],{"class":93},"s.add(",[76,164419,494],{"class":250},[76,164421,208],{"class":93},[76,164423,164424,164427,164429],{"class":78,"line":103},[76,164425,164426],{"class":93},"s.remove(",[76,164428,278],{"class":250},[76,164430,208],{"class":93},[76,164432,164433,164436,164438],{"class":78,"line":1273},[76,164434,164435],{"class":93},"s.discard(",[76,164437,646],{"class":250},[76,164439,208],{"class":93},[76,164441,164442,164444,164446,164448],{"class":78,"line":1287},[76,164443,30485],{"class":250},[76,164445,202],{"class":93},[76,164447,7430],{"class":250},[76,164449,164450],{"class":93},"(s))\n",[14,164452,164453],{},"交并差：",[67,164455,164457],{"className":69,"code":164456,"language":71,"meta":58,"style":58},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[73,164458,164459,164479,164499,164503,164518,164531],{"__ignoreMap":58},[76,164460,164461,164463,164465,164467,164469,164471,164473,164475,164477],{"class":78,"line":79},[76,164462,10991],{"class":93},[76,164464,247],{"class":89},[76,164466,4520],{"class":93},[76,164468,418],{"class":250},[76,164470,12507],{"class":93},[76,164472,278],{"class":250},[76,164474,12507],{"class":93},[76,164476,272],{"class":250},[76,164478,1637],{"class":93},[76,164480,164481,164483,164485,164487,164489,164491,164493,164495,164497],{"class":78,"line":86},[76,164482,11017],{"class":93},[76,164484,247],{"class":89},[76,164486,4520],{"class":93},[76,164488,272],{"class":250},[76,164490,12507],{"class":93},[76,164492,494],{"class":250},[76,164494,12507],{"class":93},[76,164496,520],{"class":250},[76,164498,1637],{"class":93},[76,164500,164501],{"class":78,"line":97},[76,164502,2472],{"emptyLinePlaceholder":125},[76,164504,164505,164507,164510,164512,164515],{"class":78,"line":103},[76,164506,30485],{"class":250},[76,164508,164509],{"class":93},"(a ",[76,164511,553],{"class":89},[76,164513,164514],{"class":93}," b)  ",[76,164516,164517],{"class":82},"# 交集\n",[76,164519,164520,164522,164524,164526,164528],{"class":78,"line":1273},[76,164521,30485],{"class":250},[76,164523,164509],{"class":93},[76,164525,1120],{"class":89},[76,164527,164514],{"class":93},[76,164529,164530],{"class":82},"# 并集\n",[76,164532,164533,164535,164537,164539,164541],{"class":78,"line":1287},[76,164534,30485],{"class":250},[76,164536,164509],{"class":93},[76,164538,112],{"class":89},[76,164540,164514],{"class":93},[76,164542,164543],{"class":82},"# 差集\n",[140,164545,164547],{"id":164546},"_610-字典dict","6.10 字典dict",[14,164549,164550],{},"字典通过 key-value 保存数据。",[67,164552,164554],{"className":69,"code":164553,"language":71,"meta":58,"style":58},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[73,164555,164556,164564,164574,164585,164595],{"__ignoreMap":58},[76,164557,164558,164560,164562],{"class":78,"line":79},[76,164559,149522],{"class":93},[76,164561,247],{"class":89},[76,164563,15644],{"class":93},[76,164565,164566,164568,164570,164572],{"class":78,"line":86},[76,164567,147061],{"class":305},[76,164569,51507],{"class":93},[76,164571,149929],{"class":305},[76,164573,31536],{"class":93},[76,164575,164576,164579,164581,164583],{"class":78,"line":97},[76,164577,164578],{"class":305},"    \"age\"",[76,164580,51507],{"class":93},[76,164582,849],{"class":250},[76,164584,31536],{"class":93},[76,164586,164587,164590,164592],{"class":78,"line":103},[76,164588,164589],{"class":305},"    \"score\"",[76,164591,51507],{"class":93},[76,164593,164594],{"class":250},"95\n",[76,164596,164597],{"class":78,"line":1273},[76,164598,1637],{"class":93},[14,164600,164601],{},"获取值：",[67,164603,164605],{"className":69,"code":164604,"language":71,"meta":58,"style":58},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[73,164606,164607,164618],{"__ignoreMap":58},[76,164608,164609,164611,164614,164616],{"class":78,"line":79},[76,164610,30485],{"class":250},[76,164612,164613],{"class":93},"(student[",[76,164615,62749],{"class":305},[76,164617,4729],{"class":93},[76,164619,164620,164622,164625,164627],{"class":78,"line":86},[76,164621,30485],{"class":250},[76,164623,164624],{"class":93},"(student.get(",[76,164626,62749],{"class":305},[76,164628,30567],{"class":93},[14,164630,15460],{},[67,164632,164634],{"className":69,"code":164633,"language":71,"meta":58,"style":58},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[73,164635,164636,164649],{"__ignoreMap":58},[76,164637,164638,164640,164643,164646],{"class":78,"line":79},[76,164639,152900],{"class":93},[76,164641,164642],{"class":305},"\"address\"",[76,164644,164645],{"class":93},"]     ",[76,164647,164648],{"class":82},"# key不存在会报错\n",[76,164650,164651,164654,164656,164658],{"class":78,"line":86},[76,164652,164653],{"class":93},"student.get(",[76,164655,164642],{"class":305},[76,164657,13786],{"class":93},[76,164659,164660],{"class":82},"# key不存在返回None\n",[14,164662,164663],{},"设置默认值：",[67,164665,164667],{"className":69,"code":164666,"language":71,"meta":58,"style":58},"print(student.get(\"address\", \"未知\"))\n",[73,164668,164669],{"__ignoreMap":58},[76,164670,164671,164673,164675,164677,164679,164682],{"class":78,"line":79},[76,164672,30485],{"class":250},[76,164674,164624],{"class":93},[76,164676,164642],{"class":305},[76,164678,12507],{"class":93},[76,164680,164681],{"class":305},"\"未知\"",[76,164683,30567],{"class":93},[14,164685,164686],{},"新增和修改：",[67,164688,164690],{"className":69,"code":164689,"language":71,"meta":58,"style":58},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[73,164691,164692,164705],{"__ignoreMap":58},[76,164693,164694,164696,164698,164700,164702],{"class":78,"line":79},[76,164695,152900],{"class":93},[76,164697,69194],{"class":305},[76,164699,4515],{"class":93},[76,164701,247],{"class":89},[76,164703,164704],{"class":250}," 19\n",[76,164706,164707,164709,164711,164713,164715],{"class":78,"line":86},[76,164708,152900],{"class":93},[76,164710,164642],{"class":305},[76,164712,4515],{"class":93},[76,164714,247],{"class":89},[76,164716,164717],{"class":305}," \"北京\"\n",[14,164719,164720],{},"删除：",[67,164722,164724],{"className":69,"code":164723,"language":71,"meta":58,"style":58},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[73,164725,164726,164739,164749],{"__ignoreMap":58},[76,164727,164728,164730,164732,164735,164737],{"class":78,"line":79},[76,164729,155399],{"class":93},[76,164731,247],{"class":89},[76,164733,164734],{"class":93}," student.pop(",[76,164736,151513],{"class":305},[76,164738,208],{"class":93},[76,164740,164741,164743,164745,164747],{"class":78,"line":86},[76,164742,163424],{"class":89},[76,164744,152190],{"class":93},[76,164746,69194],{"class":305},[76,164748,33316],{"class":93},[76,164750,164751],{"class":78,"line":97},[76,164752,164753],{"class":93},"student.clear()\n",[140,164755,164757],{"id":164756},"_611-字典遍历","6.11 字典遍历",[14,164759,164760],{},"遍历 key：",[67,164762,164764],{"className":69,"code":164763,"language":71,"meta":58,"style":58},"for key in student:\n    print(key, student[key])\n",[73,164765,164766,164778],{"__ignoreMap":58},[76,164767,164768,164770,164773,164775],{"class":78,"line":79},[76,164769,3097],{"class":89},[76,164771,164772],{"class":93}," key ",[76,164774,26116],{"class":89},[76,164776,164777],{"class":93}," student:\n",[76,164779,164780,164782],{"class":78,"line":86},[76,164781,31369],{"class":250},[76,164783,164784],{"class":93},"(key, student[key])\n",[14,164786,164787],{},"遍历 value：",[67,164789,164791],{"className":69,"code":164790,"language":71,"meta":58,"style":58},"for value in student.values():\n    print(value)\n",[73,164792,164793,164805],{"__ignoreMap":58},[76,164794,164795,164797,164800,164802],{"class":78,"line":79},[76,164796,3097],{"class":89},[76,164798,164799],{"class":93}," value ",[76,164801,26116],{"class":89},[76,164803,164804],{"class":93}," student.values():\n",[76,164806,164807,164809],{"class":78,"line":86},[76,164808,31369],{"class":250},[76,164810,164811],{"class":93},"(value)\n",[14,164813,164814],{},"遍历 key 和 value：",[67,164816,164818],{"className":69,"code":164817,"language":71,"meta":58,"style":58},"for key, value in student.items():\n    print(key, value)\n",[73,164819,164820,164832],{"__ignoreMap":58},[76,164821,164822,164824,164827,164829],{"class":78,"line":79},[76,164823,3097],{"class":89},[76,164825,164826],{"class":93}," key, value ",[76,164828,26116],{"class":89},[76,164830,164831],{"class":93}," student.items():\n",[76,164833,164834,164836],{"class":78,"line":86},[76,164835,31369],{"class":250},[76,164837,164838],{"class":93},"(key, value)\n",[140,164840,164842],{"id":164841},"_612-嵌套容器","6.12 嵌套容器",[14,164844,164845],{},"列表中保存字典，是项目中最常见的结构之一。",[67,164847,164849],{"className":69,"code":164848,"language":71,"meta":58,"style":58},"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",[73,164850,164851,164859,164887,164915,164943,164947,164951,164961],{"__ignoreMap":58},[76,164852,164853,164855,164857],{"class":78,"line":79},[76,164854,159757],{"class":93},[76,164856,247],{"class":89},[76,164858,55517],{"class":93},[76,164860,164861,164863,164865,164867,164869,164871,164873,164875,164877,164879,164881,164883,164885],{"class":78,"line":86},[76,164862,148426],{"class":93},[76,164864,62749],{"class":305},[76,164866,51507],{"class":93},[76,164868,149929],{"class":305},[76,164870,12507],{"class":93},[76,164872,69194],{"class":305},[76,164874,51507],{"class":93},[76,164876,849],{"class":250},[76,164878,12507],{"class":93},[76,164880,151513],{"class":305},[76,164882,51507],{"class":93},[76,164884,1188],{"class":250},[76,164886,5002],{"class":93},[76,164888,164889,164891,164893,164895,164897,164899,164901,164903,164905,164907,164909,164911,164913],{"class":78,"line":97},[76,164890,148426],{"class":93},[76,164892,62749],{"class":305},[76,164894,51507],{"class":93},[76,164896,150977],{"class":305},[76,164898,12507],{"class":93},[76,164900,69194],{"class":305},[76,164902,51507],{"class":93},[76,164904,824],{"class":250},[76,164906,12507],{"class":93},[76,164908,151513],{"class":305},[76,164910,51507],{"class":93},[76,164912,1010],{"class":250},[76,164914,5002],{"class":93},[76,164916,164917,164919,164921,164923,164925,164927,164929,164931,164933,164935,164937,164939,164941],{"class":78,"line":103},[76,164918,148426],{"class":93},[76,164920,62749],{"class":305},[76,164922,51507],{"class":93},[76,164924,159772],{"class":305},[76,164926,12507],{"class":93},[76,164928,69194],{"class":305},[76,164930,51507],{"class":93},[76,164932,874],{"class":250},[76,164934,12507],{"class":93},[76,164936,151513],{"class":305},[76,164938,51507],{"class":93},[76,164940,606],{"class":250},[76,164942,5002],{"class":93},[76,164944,164945],{"class":78,"line":1273},[76,164946,33316],{"class":93},[76,164948,164949],{"class":78,"line":1287},[76,164950,2472],{"emptyLinePlaceholder":125},[76,164952,164953,164955,164957,164959],{"class":78,"line":1293},[76,164954,3097],{"class":89},[76,164956,152178],{"class":93},[76,164958,26116],{"class":89},[76,164960,152183],{"class":93},[76,164962,164963,164965,164967,164969,164972,164974],{"class":78,"line":1384},[76,164964,31369],{"class":250},[76,164966,164613],{"class":93},[76,164968,62749],{"class":305},[76,164970,164971],{"class":93},"], student[",[76,164973,151513],{"class":305},[76,164975,4729],{"class":93},[14,164977,164978],{},"统计平均分：",[67,164980,164982],{"className":69,"code":164981,"language":71,"meta":58,"style":58},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[73,164983,164984,164992,164996,165006,165018,165022,165037],{"__ignoreMap":58},[76,164985,164986,164988,164990],{"class":78,"line":79},[76,164987,157301],{"class":93},[76,164989,247],{"class":89},[76,164991,47403],{"class":250},[76,164993,164994],{"class":78,"line":86},[76,164995,2472],{"emptyLinePlaceholder":125},[76,164997,164998,165000,165002,165004],{"class":78,"line":97},[76,164999,3097],{"class":89},[76,165001,152178],{"class":93},[76,165003,26116],{"class":89},[76,165005,152183],{"class":93},[76,165007,165008,165010,165012,165014,165016],{"class":78,"line":103},[76,165009,159348],{"class":93},[76,165011,9549],{"class":89},[76,165013,152190],{"class":93},[76,165015,151513],{"class":305},[76,165017,33316],{"class":93},[76,165019,165020],{"class":78,"line":1273},[76,165021,2472],{"emptyLinePlaceholder":125},[76,165023,165024,165026,165028,165030,165032,165034],{"class":78,"line":1287},[76,165025,163815],{"class":93},[76,165027,247],{"class":89},[76,165029,163820],{"class":93},[76,165031,783],{"class":89},[76,165033,7403],{"class":250},[76,165035,165036],{"class":93},"(students)\n",[76,165038,165039,165041,165043,165045,165047,165049,165051,165053,165055,165057],{"class":78,"line":1293},[76,165040,30485],{"class":250},[76,165042,202],{"class":93},[76,165044,254],{"class":89},[76,165046,163838],{"class":305},[76,165048,1095],{"class":250},[76,165050,163843],{"class":93},[76,165052,157200],{"class":89},[76,165054,1145],{"class":250},[76,165056,452],{"class":305},[76,165058,208],{"class":93},[14,165060,165061],{},"查找学生：",[67,165063,165065],{"className":69,"code":165064,"language":71,"meta":58,"style":58},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[73,165066,165067,165082,165086,165096,165110,165116,165120,165126],{"__ignoreMap":58},[76,165068,165069,165071,165073,165075,165077,165080],{"class":78,"line":79},[76,165070,111619],{"class":93},[76,165072,247],{"class":89},[76,165074,60675],{"class":250},[76,165076,202],{"class":93},[76,165078,165079],{"class":305},"\"请输入学生姓名:\"",[76,165081,208],{"class":93},[76,165083,165084],{"class":78,"line":86},[76,165085,2472],{"emptyLinePlaceholder":125},[76,165087,165088,165090,165092,165094],{"class":78,"line":97},[76,165089,3097],{"class":89},[76,165091,152178],{"class":93},[76,165093,26116],{"class":89},[76,165095,152183],{"class":93},[76,165097,165098,165100,165102,165104,165106,165108],{"class":78,"line":103},[76,165099,3173],{"class":89},[76,165101,152190],{"class":93},[76,165103,62749],{"class":305},[76,165105,4515],{"class":93},[76,165107,3021],{"class":89},[76,165109,160473],{"class":93},[76,165111,165112,165114],{"class":78,"line":1273},[76,165113,32521],{"class":250},[76,165115,150083],{"class":93},[76,165117,165118],{"class":78,"line":1287},[76,165119,31697],{"class":89},[76,165121,165122,165124],{"class":78,"line":1293},[76,165123,1773],{"class":89},[76,165125,3811],{"class":93},[76,165127,165128,165130,165132,165135],{"class":78,"line":1384},[76,165129,31369],{"class":250},[76,165131,202],{"class":93},[76,165133,165134],{"class":305},"\"没有找到\"",[76,165136,208],{"class":93},[140,165138,165140],{"id":165139},"_613-容器通用操作","6.13 容器通用操作",[14,165142,165143],{},"长度：",[67,165145,165147],{"className":69,"code":165146,"language":71,"meta":58,"style":58},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[73,165148,165149,165168,165178],{"__ignoreMap":58},[76,165150,165151,165153,165156,165158,165160,165162,165164,165166],{"class":78,"line":79},[76,165152,7430],{"class":250},[76,165154,165155],{"class":93},"([",[76,165157,418],{"class":250},[76,165159,12507],{"class":93},[76,165161,278],{"class":250},[76,165163,12507],{"class":93},[76,165165,272],{"class":250},[76,165167,4729],{"class":93},[76,165169,165170,165172,165174,165176],{"class":78,"line":86},[76,165171,7430],{"class":250},[76,165173,202],{"class":93},[76,165175,155921],{"class":305},[76,165177,208],{"class":93},[76,165179,165180,165182,165185,165187,165189,165191],{"class":78,"line":97},[76,165181,7430],{"class":250},[76,165183,165184],{"class":93},"({",[76,165186,62749],{"class":305},[76,165188,51507],{"class":93},[76,165190,149929],{"class":305},[76,165192,165193],{"class":93},"})\n",[14,165195,165196],{},"最大最小：",[67,165198,165200],{"className":69,"code":165199,"language":71,"meta":58,"style":58},"max([1, 2, 3])\nmin([1, 2, 3])\n",[73,165201,165202,165220],{"__ignoreMap":58},[76,165203,165204,165206,165208,165210,165212,165214,165216,165218],{"class":78,"line":79},[76,165205,6087],{"class":250},[76,165207,165155],{"class":93},[76,165209,418],{"class":250},[76,165211,12507],{"class":93},[76,165213,278],{"class":250},[76,165215,12507],{"class":93},[76,165217,272],{"class":250},[76,165219,4729],{"class":93},[76,165221,165222,165225,165227,165229,165231,165233,165235,165237],{"class":78,"line":86},[76,165223,165224],{"class":250},"min",[76,165226,165155],{"class":93},[76,165228,418],{"class":250},[76,165230,12507],{"class":93},[76,165232,278],{"class":250},[76,165234,12507],{"class":93},[76,165236,272],{"class":250},[76,165238,4729],{"class":93},[14,165240,165241],{},"求和：",[67,165243,165245],{"className":69,"code":165244,"language":71,"meta":58,"style":58},"sum([1, 2, 3])\n",[73,165246,165247],{"__ignoreMap":58},[76,165248,165249,165252,165254,165256,165258,165260,165262,165264],{"class":78,"line":79},[76,165250,165251],{"class":250},"sum",[76,165253,165155],{"class":93},[76,165255,418],{"class":250},[76,165257,12507],{"class":93},[76,165259,278],{"class":250},[76,165261,12507],{"class":93},[76,165263,272],{"class":250},[76,165265,4729],{"class":93},[14,165267,163512],{},[67,165269,165271],{"className":69,"code":165270,"language":71,"meta":58,"style":58},"sorted([3, 1, 2])\n",[73,165272,165273],{"__ignoreMap":58},[76,165274,165275,165278,165280,165282,165284,165286,165288,165290],{"class":78,"line":79},[76,165276,165277],{"class":250},"sorted",[76,165279,165155],{"class":93},[76,165281,272],{"class":250},[76,165283,12507],{"class":93},[76,165285,418],{"class":250},[76,165287,12507],{"class":93},[76,165289,278],{"class":250},[76,165291,4729],{"class":93},[14,165293,165294],{},"类型转换：",[67,165296,165298],{"className":69,"code":165297,"language":71,"meta":58,"style":58},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[73,165299,165300,165310,165328],{"__ignoreMap":58},[76,165301,165302,165304,165306,165308],{"class":78,"line":79},[76,165303,154111],{"class":250},[76,165305,202],{"class":93},[76,165307,155921],{"class":305},[76,165309,208],{"class":93},[76,165311,165312,165314,165316,165318,165320,165322,165324,165326],{"class":78,"line":86},[76,165313,155306],{"class":250},[76,165315,165155],{"class":93},[76,165317,418],{"class":250},[76,165319,12507],{"class":93},[76,165321,278],{"class":250},[76,165323,12507],{"class":93},[76,165325,272],{"class":250},[76,165327,4729],{"class":93},[76,165329,165330,165332,165334,165336,165338,165340,165342,165344,165346,165348],{"class":78,"line":97},[76,165331,155331],{"class":250},[76,165333,165155],{"class":93},[76,165335,418],{"class":250},[76,165337,12507],{"class":93},[76,165339,418],{"class":250},[76,165341,12507],{"class":93},[76,165343,278],{"class":250},[76,165345,12507],{"class":93},[76,165347,272],{"class":250},[76,165349,4729],{"class":93},[14,165351,165352],{},"成员判断：",[67,165354,165356],{"className":69,"code":165355,"language":71,"meta":58,"style":58},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[73,165357,165358,165375,165399],{"__ignoreMap":58},[76,165359,165360,165362,165364,165367,165370,165373],{"class":78,"line":79},[76,165361,30485],{"class":250},[76,165363,202],{"class":93},[76,165365,165366],{"class":305},"\"a\"",[76,165368,165369],{"class":89}," in",[76,165371,165372],{"class":305}," \"abc\"",[76,165374,208],{"class":93},[76,165376,165377,165379,165381,165383,165385,165387,165389,165391,165393,165395,165397],{"class":78,"line":86},[76,165378,30485],{"class":250},[76,165380,202],{"class":93},[76,165382,418],{"class":250},[76,165384,165369],{"class":89},[76,165386,52296],{"class":93},[76,165388,418],{"class":250},[76,165390,12507],{"class":93},[76,165392,278],{"class":250},[76,165394,12507],{"class":93},[76,165396,272],{"class":250},[76,165398,4729],{"class":93},[76,165400,165401,165403,165405,165407,165409,165411,165413,165415,165417],{"class":78,"line":97},[76,165402,30485],{"class":250},[76,165404,202],{"class":93},[76,165406,62749],{"class":305},[76,165408,165369],{"class":89},[76,165410,4520],{"class":93},[76,165412,62749],{"class":305},[76,165414,51507],{"class":93},[76,165416,149929],{"class":305},[76,165418,165193],{"class":93},[140,165420,165422],{"id":165421},"_614-推导式","6.14 推导式",[14,165424,165425],{},"推导式用于快速生成容器。",[14,165427,165428],{},"列表推导式：",[67,165430,165432],{"className":69,"code":165431,"language":71,"meta":58,"style":58},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[73,165433,165434,165461],{"__ignoreMap":58},[76,165435,165436,165438,165440,165443,165445,165447,165449,165451,165453,165455,165457,165459],{"class":78,"line":79},[76,165437,164141],{"class":93},[76,165439,247],{"class":89},[76,165441,165442],{"class":93}," [i ",[76,165444,3097],{"class":89},[76,165446,9510],{"class":93},[76,165448,26116],{"class":89},[76,165450,32513],{"class":250},[76,165452,202],{"class":93},[76,165454,418],{"class":250},[76,165456,12507],{"class":93},[76,165458,544],{"class":250},[76,165460,97341],{"class":93},[76,165462,165463,165465],{"class":78,"line":86},[76,165464,30485],{"class":250},[76,165466,164357],{"class":93},[14,165468,165469],{},"带条件：",[67,165471,165473],{"className":69,"code":165472,"language":71,"meta":58,"style":58},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[73,165474,165475,165516],{"__ignoreMap":58},[76,165476,165477,165480,165482,165484,165486,165488,165490,165492,165494,165496,165498,165500,165502,165504,165506,165508,165510,165512,165514],{"class":78,"line":79},[76,165478,165479],{"class":93},"even_nums ",[76,165481,247],{"class":89},[76,165483,165442],{"class":93},[76,165485,3097],{"class":89},[76,165487,9510],{"class":93},[76,165489,26116],{"class":89},[76,165491,32513],{"class":250},[76,165493,202],{"class":93},[76,165495,418],{"class":250},[76,165497,12507],{"class":93},[76,165499,537],{"class":250},[76,165501,13786],{"class":93},[76,165503,1603],{"class":89},[76,165505,9510],{"class":93},[76,165507,106],{"class":89},[76,165509,14827],{"class":250},[76,165511,101600],{"class":89},[76,165513,4165],{"class":250},[76,165515,33316],{"class":93},[76,165517,165518,165520],{"class":78,"line":86},[76,165519,30485],{"class":250},[76,165521,165522],{"class":93},"(even_nums)\n",[14,165524,165525],{},"字典推导式：",[67,165527,165529],{"className":69,"code":165528,"language":71,"meta":58,"style":58},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[73,165530,165531,165565],{"__ignoreMap":58},[76,165532,165533,165536,165538,165541,165543,165545,165548,165550,165552,165554,165556,165558,165560,165562],{"class":78,"line":79},[76,165534,165535],{"class":93},"squares ",[76,165537,247],{"class":89},[76,165539,165540],{"class":93}," {i: i ",[76,165542,10733],{"class":89},[76,165544,14827],{"class":250},[76,165546,165547],{"class":89}," for",[76,165549,9510],{"class":93},[76,165551,26116],{"class":89},[76,165553,32513],{"class":250},[76,165555,202],{"class":93},[76,165557,418],{"class":250},[76,165559,12507],{"class":93},[76,165561,544],{"class":250},[76,165563,165564],{"class":93},")}\n",[76,165566,165567,165569],{"class":78,"line":86},[76,165568,30485],{"class":250},[76,165570,165571],{"class":93},"(squares)\n",[14,165573,165574],{},"集合推导式：",[67,165576,165578],{"className":69,"code":165577,"language":71,"meta":58,"style":58},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[73,165579,165580,165601],{"__ignoreMap":58},[76,165581,165582,165585,165587,165590,165592,165594,165596,165599],{"class":78,"line":79},[76,165583,165584],{"class":93},"chars ",[76,165586,247],{"class":89},[76,165588,165589],{"class":93}," {ch ",[76,165591,3097],{"class":89},[76,165593,159733],{"class":93},[76,165595,26116],{"class":89},[76,165597,165598],{"class":305}," \"hello\"",[76,165600,1637],{"class":93},[76,165602,165603,165605],{"class":78,"line":86},[76,165604,30485],{"class":250},[76,165606,165607],{"class":93},"(chars)\n",[14,165609,165610],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[140,165612,165614],{"id":165613},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[67,165616,165618],{"className":69,"code":165617,"language":71,"meta":58,"style":58},"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",[73,165619,165620,165628,165648,165668,165688,165708,165712,165716,165724,165738,165747,165751,165761,165773,165777,165797,165806,165810,165826,165831,165835,165849,165853,165875,165911],{"__ignoreMap":58},[76,165621,165622,165624,165626],{"class":78,"line":79},[76,165623,159757],{"class":93},[76,165625,247],{"class":89},[76,165627,55517],{"class":93},[76,165629,165630,165632,165634,165636,165638,165640,165642,165644,165646],{"class":78,"line":86},[76,165631,148426],{"class":93},[76,165633,62749],{"class":305},[76,165635,51507],{"class":93},[76,165637,149929],{"class":305},[76,165639,12507],{"class":93},[76,165641,151513],{"class":305},[76,165643,51507],{"class":93},[76,165645,1188],{"class":250},[76,165647,5002],{"class":93},[76,165649,165650,165652,165654,165656,165658,165660,165662,165664,165666],{"class":78,"line":97},[76,165651,148426],{"class":93},[76,165653,62749],{"class":305},[76,165655,51507],{"class":93},[76,165657,150977],{"class":305},[76,165659,12507],{"class":93},[76,165661,151513],{"class":305},[76,165663,51507],{"class":93},[76,165665,1010],{"class":250},[76,165667,5002],{"class":93},[76,165669,165670,165672,165674,165676,165678,165680,165682,165684,165686],{"class":78,"line":103},[76,165671,148426],{"class":93},[76,165673,62749],{"class":305},[76,165675,51507],{"class":93},[76,165677,159772],{"class":305},[76,165679,12507],{"class":93},[76,165681,151513],{"class":305},[76,165683,51507],{"class":93},[76,165685,606],{"class":250},[76,165687,5002],{"class":93},[76,165689,165690,165692,165694,165696,165698,165700,165702,165704,165706],{"class":78,"line":1273},[76,165691,148426],{"class":93},[76,165693,62749],{"class":305},[76,165695,51507],{"class":93},[76,165697,163351],{"class":305},[76,165699,12507],{"class":93},[76,165701,151513],{"class":305},[76,165703,51507],{"class":93},[76,165705,1081],{"class":250},[76,165707,5002],{"class":93},[76,165709,165710],{"class":78,"line":1287},[76,165711,33316],{"class":93},[76,165713,165714],{"class":78,"line":1293},[76,165715,2472],{"emptyLinePlaceholder":125},[76,165717,165718,165720,165722],{"class":78,"line":1384},[76,165719,157301],{"class":93},[76,165721,247],{"class":89},[76,165723,47403],{"class":250},[76,165725,165726,165729,165731,165734,165736],{"class":78,"line":1390},[76,165727,165728],{"class":93},"max_student ",[76,165730,247],{"class":89},[76,165732,165733],{"class":93}," students[",[76,165735,392],{"class":250},[76,165737,33316],{"class":93},[76,165739,165740,165743,165745],{"class":78,"line":1402},[76,165741,165742],{"class":93},"passed ",[76,165744,247],{"class":89},[76,165746,51908],{"class":93},[76,165748,165749],{"class":78,"line":1684},[76,165750,2472],{"emptyLinePlaceholder":125},[76,165752,165753,165755,165757,165759],{"class":78,"line":1689},[76,165754,3097],{"class":89},[76,165756,152178],{"class":93},[76,165758,26116],{"class":89},[76,165760,152183],{"class":93},[76,165762,165763,165765,165767,165769,165771],{"class":78,"line":1695},[76,165764,159348],{"class":93},[76,165766,9549],{"class":89},[76,165768,152190],{"class":93},[76,165770,151513],{"class":305},[76,165772,33316],{"class":93},[76,165774,165775],{"class":78,"line":1700},[76,165776,2472],{"emptyLinePlaceholder":125},[76,165778,165779,165781,165783,165785,165787,165789,165792,165794],{"class":78,"line":1714},[76,165780,3173],{"class":89},[76,165782,152190],{"class":93},[76,165784,151513],{"class":305},[76,165786,4515],{"class":93},[76,165788,1159],{"class":89},[76,165790,165791],{"class":93}," max_student[",[76,165793,151513],{"class":305},[76,165795,165796],{"class":93},"]:\n",[76,165798,165799,165802,165804],{"class":78,"line":1719},[76,165800,165801],{"class":93},"        max_student ",[76,165803,247],{"class":89},[76,165805,152206],{"class":93},[76,165807,165808],{"class":78,"line":1725},[76,165809,2472],{"emptyLinePlaceholder":125},[76,165811,165812,165814,165816,165818,165820,165822,165824],{"class":78,"line":1746},[76,165813,3173],{"class":89},[76,165815,152190],{"class":93},[76,165817,151513],{"class":305},[76,165819,4515],{"class":93},[76,165821,1782],{"class":89},[76,165823,157878],{"class":250},[76,165825,3811],{"class":93},[76,165827,165828],{"class":78,"line":1751},[76,165829,165830],{"class":93},"        passed.append(student)\n",[76,165832,165833],{"class":78,"line":1765},[76,165834,2472],{"emptyLinePlaceholder":125},[76,165836,165837,165839,165841,165843,165845,165847],{"class":78,"line":1770},[76,165838,163815],{"class":93},[76,165840,247],{"class":89},[76,165842,163820],{"class":93},[76,165844,783],{"class":89},[76,165846,7403],{"class":250},[76,165848,165036],{"class":93},[76,165850,165851],{"class":78,"line":1799},[76,165852,2472],{"emptyLinePlaceholder":125},[76,165854,165855,165857,165859,165861,165863,165865,165867,165869,165871,165873],{"class":78,"line":1804},[76,165856,30485],{"class":250},[76,165858,202],{"class":93},[76,165860,254],{"class":89},[76,165862,163838],{"class":305},[76,165864,1095],{"class":250},[76,165866,163843],{"class":93},[76,165868,157200],{"class":89},[76,165870,1145],{"class":250},[76,165872,452],{"class":305},[76,165874,208],{"class":93},[76,165876,165877,165879,165881,165883,165886,165888,165891,165893,165895,165897,165899,165901,165903,165905,165907,165909],{"class":78,"line":1821},[76,165878,30485],{"class":250},[76,165880,202],{"class":93},[76,165882,254],{"class":89},[76,165884,165885],{"class":305},"\"最高分学生:",[76,165887,1095],{"class":250},[76,165889,165890],{"class":93},"max_student[",[76,165892,152923],{"class":305},[76,165894,1139],{"class":93},[76,165896,1145],{"class":250},[76,165898,4520],{"class":250},[76,165900,165890],{"class":93},[76,165902,152961],{"class":305},[76,165904,1139],{"class":93},[76,165906,1145],{"class":250},[76,165908,452],{"class":305},[76,165910,208],{"class":93},[76,165912,165913,165915,165917,165919,165922,165925,165928,165930,165932],{"class":78,"line":1826},[76,165914,30485],{"class":250},[76,165916,202],{"class":93},[76,165918,254],{"class":89},[76,165920,165921],{"class":305},"\"及格人数:",[76,165923,165924],{"class":250},"{len",[76,165926,165927],{"class":93},"(passed)",[76,165929,1145],{"class":250},[76,165931,452],{"class":305},[76,165933,208],{"class":93},[140,165935,165937],{"id":165936},"_616-易错点","6.16 易错点",[152,165939,165940,165943,165946,165949,165955,165964],{},[155,165941,165942],{},"列表可变，元组和字符串不可变。",[155,165944,165945],{},"切片结束位置不包含。",[155,165947,165948],{},"字典通过 key 取值，不是通过索引。",[155,165950,165951,165952,28458],{},"空集合要用 ",[73,165953,165954],{},"set()",[155,165956,104407,165957,165960,165961,28458],{},[73,165958,165959],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[73,165962,165963],{},"get()",[155,165965,165966],{},"嵌套容器要先看清楚每一层是什么类型。",[140,165968,165970],{"id":165969},"_617-本章练习","6.17 本章练习",[152,165972,165973,165976,165979,165982,165985],{},[155,165974,165975],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[155,165977,165978],{},"输入一句话，统计每个字符出现次数。",[155,165980,165981],{},"使用集合去除列表中的重复元素。",[155,165983,165984],{},"使用字典保存一个学生的信息，并实现修改成绩。",[155,165986,165987],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[117,165989,165990],{},"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":58,"searchDepth":86,"depth":86,"links":165992},[165993,165994,165995,165996,165997,165998,165999,166000,166001,166002,166003,166004,166005,166006,166007,166008,166009],{"id":162973,"depth":86,"text":162974},{"id":163090,"depth":86,"text":163091},{"id":163180,"depth":86,"text":163181},{"id":163304,"depth":86,"text":163305},{"id":163667,"depth":86,"text":163668},{"id":163854,"depth":86,"text":163855},{"id":163973,"depth":86,"text":163974},{"id":164115,"depth":86,"text":164116},{"id":164302,"depth":86,"text":164303},{"id":164546,"depth":86,"text":164547},{"id":164756,"depth":86,"text":164757},{"id":164841,"depth":86,"text":164842},{"id":165139,"depth":86,"text":165140},{"id":165421,"depth":86,"text":165422},{"id":165613,"depth":86,"text":165614},{"id":165936,"depth":86,"text":165937},{"id":165969,"depth":86,"text":165970},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162965,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166016,"title":166017,"body":166018,"description":122,"extension":123,"meta":168190,"navigation":125,"path":168191,"seo":168192,"stem":168193,"__hash__":168194},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166019,"toc":168165},[166020,166023,166027,166030,166110,166113,166134,166137,166141,166144,166206,166209,166226,166230,166233,166278,166280,166288,166292,166295,166377,166380,166383,166408,166411,166434,166438,166441,166443,166505,166508,166510,166561,166565,166569,166575,166680,166684,166690,166761,166765,166768,166836,166839,166919,166923,166929,166965,166968,166971,167081,167087,167091,167094,167166,167169,167173,167177,167182,167244,167248,167253,167321,167325,167330,167446,167450,167453,167533,167536,167540,167543,167647,167649,167664,167667,167671,167809,167817,167821,167823,167834,167836,168094,168098,168130,168134,168162],[10,166021,166017],{"id":166022},"_7-函数进阶",[140,166024,166026],{"id":166025},"_71-多返回值","7.1 多返回值",[14,166028,166029],{},"Python 函数可以返回多个值，本质上返回的是元组。",[67,166031,166033],{"className":69,"code":166032,"language":71,"meta":58,"style":58},"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",[73,166034,166035,166044,166052,166060,166069,166076,166080,166084,166093,166099],{"__ignoreMap":58},[76,166036,166037,166039,166042],{"class":78,"line":79},[76,166038,32017],{"class":89},[76,166040,166041],{"class":2035}," get_info",[76,166043,32023],{"class":93},[76,166045,166046,166048,166050],{"class":78,"line":86},[76,166047,152411],{"class":93},[76,166049,247],{"class":89},[76,166051,149394],{"class":305},[76,166053,166054,166056,166058],{"class":78,"line":97},[76,166055,152427],{"class":93},[76,166057,247],{"class":89},[76,166059,146592],{"class":250},[76,166061,166062,166064,166066],{"class":78,"line":103},[76,166063,152442],{"class":93},[76,166065,247],{"class":89},[76,166067,166068],{"class":250}," 95\n",[76,166070,166071,166073],{"class":78,"line":1273},[76,166072,4162],{"class":89},[76,166074,166075],{"class":93}," name, age, score\n",[76,166077,166078],{"class":78,"line":1287},[76,166079,2472],{"emptyLinePlaceholder":125},[76,166081,166082],{"class":78,"line":1293},[76,166083,2472],{"emptyLinePlaceholder":125},[76,166085,166086,166088,166090],{"class":78,"line":1384},[76,166087,161347],{"class":93},[76,166089,247],{"class":89},[76,166091,166092],{"class":93}," get_info()\n",[76,166094,166095,166097],{"class":78,"line":1390},[76,166096,30485],{"class":250},[76,166098,76655],{"class":93},[76,166100,166101,166103,166105,166107],{"class":78,"line":1402},[76,166102,30485],{"class":250},[76,166104,202],{"class":93},[76,166106,103148],{"class":250},[76,166108,166109],{"class":93},"(result))\n",[14,166111,166112],{},"可以直接解包：",[67,166114,166116],{"className":69,"code":166115,"language":71,"meta":58,"style":58},"name, age, score = get_info()\nprint(name, age, score)\n",[73,166117,166118,166127],{"__ignoreMap":58},[76,166119,166120,166123,166125],{"class":78,"line":79},[76,166121,166122],{"class":93},"name, age, score ",[76,166124,247],{"class":89},[76,166126,166092],{"class":93},[76,166128,166129,166131],{"class":78,"line":86},[76,166130,30485],{"class":250},[76,166132,166133],{"class":93},"(name, age, score)\n",[14,166135,166136],{},"返回多个值适合函数需要同时给出多个结果时使用。",[140,166138,166140],{"id":166139},"_72-位置参数","7.2 位置参数",[14,166142,166143],{},"位置参数按顺序传递。",[67,166145,166147],{"className":69,"code":166146,"language":71,"meta":58,"style":58},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[73,166148,166149,166157,166185,166189,166193],{"__ignoreMap":58},[76,166150,166151,166153,166155],{"class":78,"line":79},[76,166152,32017],{"class":89},[76,166154,149413],{"class":2035},[76,166156,149416],{"class":93},[76,166158,166159,166161,166163,166165,166167,166169,166171,166173,166175,166177,166179,166181,166183],{"class":78,"line":86},[76,166160,31369],{"class":250},[76,166162,202],{"class":93},[76,166164,254],{"class":89},[76,166166,149427],{"class":305},[76,166168,1095],{"class":250},[76,166170,79880],{"class":93},[76,166172,1145],{"class":250},[76,166174,149436],{"class":305},[76,166176,1095],{"class":250},[76,166178,70291],{"class":93},[76,166180,1145],{"class":250},[76,166182,149445],{"class":305},[76,166184,208],{"class":93},[76,166186,166187],{"class":78,"line":97},[76,166188,2472],{"emptyLinePlaceholder":125},[76,166190,166191],{"class":78,"line":103},[76,166192,2472],{"emptyLinePlaceholder":125},[76,166194,166195,166198,166200,166202,166204],{"class":78,"line":1273},[76,166196,166197],{"class":93},"introduce(",[76,166199,149929],{"class":305},[76,166201,12507],{"class":93},[76,166203,849],{"class":250},[76,166205,208],{"class":93},[14,166207,166208],{},"顺序错了就会得到错误含义：",[67,166210,166212],{"className":69,"code":166211,"language":71,"meta":58,"style":58},"introduce(18, \"小明\")\n",[73,166213,166214],{"__ignoreMap":58},[76,166215,166216,166218,166220,166222,166224],{"class":78,"line":79},[76,166217,166197],{"class":93},[76,166219,849],{"class":250},[76,166221,12507],{"class":93},[76,166223,149929],{"class":305},[76,166225,208],{"class":93},[140,166227,166229],{"id":166228},"_73-关键字参数","7.3 关键字参数",[14,166231,166232],{},"关键字参数按参数名传递。",[67,166234,166236],{"className":69,"code":166235,"language":71,"meta":58,"style":58},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[73,166237,166238,166258],{"__ignoreMap":58},[76,166239,166240,166242,166244,166246,166248,166250,166252,166254,166256],{"class":78,"line":79},[76,166241,166197],{"class":93},[76,166243,79880],{"class":5288},[76,166245,247],{"class":89},[76,166247,149929],{"class":305},[76,166249,12507],{"class":93},[76,166251,70291],{"class":5288},[76,166253,247],{"class":89},[76,166255,849],{"class":250},[76,166257,208],{"class":93},[76,166259,166260,166262,166264,166266,166268,166270,166272,166274,166276],{"class":78,"line":86},[76,166261,166197],{"class":93},[76,166263,70291],{"class":5288},[76,166265,247],{"class":89},[76,166267,849],{"class":250},[76,166269,12507],{"class":93},[76,166271,79880],{"class":5288},[76,166273,247],{"class":89},[76,166275,149929],{"class":305},[76,166277,208],{"class":93},[14,166279,117975],{},[152,166281,166282,166285],{},[155,166283,166284],{},"顺序不容易错。",[155,166286,166287],{},"调用时可读性更强。",[140,166289,166291],{"id":166290},"_74-默认参数","7.4 默认参数",[14,166293,166294],{},"默认参数给参数设置默认值。",[67,166296,166298],{"className":69,"code":166297,"language":71,"meta":58,"style":58},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[73,166299,166300,166316,166346,166350,166354,166364],{"__ignoreMap":58},[76,166301,166302,166304,166306,166309,166311,166314],{"class":78,"line":79},[76,166303,32017],{"class":89},[76,166305,122134],{"class":2035},[76,166307,166308],{"class":93},"(host, port",[76,166310,247],{"class":89},[76,166312,166313],{"class":250},"3306",[76,166315,30856],{"class":93},[76,166317,166318,166320,166322,166324,166327,166329,166331,166333,166335,166337,166340,166342,166344],{"class":78,"line":86},[76,166319,31369],{"class":250},[76,166321,202],{"class":93},[76,166323,254],{"class":89},[76,166325,166326],{"class":305},"\"连接",[76,166328,1095],{"class":250},[76,166330,27468],{"class":93},[76,166332,1145],{"class":250},[76,166334,1058],{"class":305},[76,166336,1095],{"class":250},[76,166338,166339],{"class":93},"port",[76,166341,1145],{"class":250},[76,166343,452],{"class":305},[76,166345,208],{"class":93},[76,166347,166348],{"class":78,"line":97},[76,166349,2472],{"emptyLinePlaceholder":125},[76,166351,166352],{"class":78,"line":103},[76,166353,2472],{"emptyLinePlaceholder":125},[76,166355,166356,166359,166362],{"class":78,"line":1273},[76,166357,166358],{"class":93},"connect(",[76,166360,166361],{"class":305},"\"localhost\"",[76,166363,208],{"class":93},[76,166365,166366,166368,166370,166372,166375],{"class":78,"line":1287},[76,166367,166358],{"class":93},[76,166369,166361],{"class":305},[76,166371,12507],{"class":93},[76,166373,166374],{"class":250},"6379",[76,166376,208],{"class":93},[14,166378,166379],{},"注意：默认参数必须放在非默认参数后面。",[14,166381,166382],{},"错误：",[67,166384,166386],{"className":69,"code":166385,"language":71,"meta":58,"style":58},"def connect(port=3306, host):\n    pass\n",[73,166387,166388,166404],{"__ignoreMap":58},[76,166389,166390,166392,166394,166397,166399,166401],{"class":78,"line":79},[76,166391,32017],{"class":89},[76,166393,122134],{"class":2035},[76,166395,166396],{"class":93},"(port",[76,166398,247],{"class":89},[76,166400,166313],{"class":250},[76,166402,166403],{"class":93},", host):\n",[76,166405,166406],{"class":78,"line":86},[76,166407,149578],{"class":89},[14,166409,166410],{},"正确：",[67,166412,166414],{"className":69,"code":166413,"language":71,"meta":58,"style":58},"def connect(host, port=3306):\n    pass\n",[73,166415,166416,166430],{"__ignoreMap":58},[76,166417,166418,166420,166422,166424,166426,166428],{"class":78,"line":79},[76,166419,32017],{"class":89},[76,166421,122134],{"class":2035},[76,166423,166308],{"class":93},[76,166425,247],{"class":89},[76,166427,166313],{"class":250},[76,166429,30856],{"class":93},[76,166431,166432],{"class":78,"line":86},[76,166433,149578],{"class":89},[140,166435,166437],{"id":166436},"_75-默认参数的坑","7.5 默认参数的坑",[14,166439,166440],{},"不要使用可变对象作为默认参数。",[14,166442,157664],{},[67,166444,166446],{"className":69,"code":166445,"language":71,"meta":58,"style":58},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[73,166447,166448,166463,166468,166475,166479,166483,166494],{"__ignoreMap":58},[76,166449,166450,166452,166455,166458,166460],{"class":78,"line":79},[76,166451,32017],{"class":89},[76,166453,166454],{"class":2035}," add_item",[76,166456,166457],{"class":93},"(item, items",[76,166459,247],{"class":89},[76,166461,166462],{"class":93},"[]):\n",[76,166464,166465],{"class":78,"line":86},[76,166466,166467],{"class":93},"    items.append(item)\n",[76,166469,166470,166472],{"class":78,"line":97},[76,166471,4162],{"class":89},[76,166473,166474],{"class":93}," items\n",[76,166476,166477],{"class":78,"line":103},[76,166478,2472],{"emptyLinePlaceholder":125},[76,166480,166481],{"class":78,"line":1273},[76,166482,2472],{"emptyLinePlaceholder":125},[76,166484,166485,166487,166490,166492],{"class":78,"line":1287},[76,166486,30485],{"class":250},[76,166488,166489],{"class":93},"(add_item(",[76,166491,165366],{"class":305},[76,166493,30567],{"class":93},[76,166495,166496,166498,166500,166503],{"class":78,"line":1293},[76,166497,30485],{"class":250},[76,166499,166489],{"class":93},[76,166501,166502],{"class":305},"\"b\"",[76,166504,30567],{"class":93},[14,166506,166507],{},"第二次调用会复用第一次的列表。",[14,166509,155929],{},[67,166511,166513],{"className":69,"code":166512,"language":71,"meta":58,"style":58},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[73,166514,166515,166529,166542,166551,166555],{"__ignoreMap":58},[76,166516,166517,166519,166521,166523,166525,166527],{"class":78,"line":79},[76,166518,32017],{"class":89},[76,166520,166454],{"class":2035},[76,166522,166457],{"class":93},[76,166524,247],{"class":89},[76,166526,95755],{"class":250},[76,166528,30856],{"class":93},[76,166530,166531,166533,166536,166538,166540],{"class":78,"line":86},[76,166532,3173],{"class":89},[76,166534,166535],{"class":93}," items ",[76,166537,38997],{"class":89},[76,166539,39003],{"class":250},[76,166541,3811],{"class":93},[76,166543,166544,166547,166549],{"class":78,"line":97},[76,166545,166546],{"class":93},"        items ",[76,166548,247],{"class":89},[76,166550,51908],{"class":93},[76,166552,166553],{"class":78,"line":103},[76,166554,166467],{"class":93},[76,166556,166557,166559],{"class":78,"line":1273},[76,166558,4162],{"class":89},[76,166560,166474],{"class":93},[140,166562,166564],{"id":166563},"_76-不定长参数","7.6 不定长参数",[169,166566,166568],{"id":166567},"_761-args","7.6.1 *args",[14,166570,166571,166574],{},[73,166572,166573],{},"*args"," 接收任意数量的位置参数，得到元组。",[67,166576,166578],{"className":69,"code":166577,"language":71,"meta":58,"style":58},"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",[73,166579,166580,166593,166601,166612,166621,166627,166631,166635,166654],{"__ignoreMap":58},[76,166581,166582,166584,166586,166588,166590],{"class":78,"line":79},[76,166583,32017],{"class":89},[76,166585,5281],{"class":2035},[76,166587,202],{"class":93},[76,166589,655],{"class":89},[76,166591,166592],{"class":93},"args):\n",[76,166594,166595,166597,166599],{"class":78,"line":86},[76,166596,159348],{"class":93},[76,166598,247],{"class":89},[76,166600,47403],{"class":250},[76,166602,166603,166605,166607,166609],{"class":78,"line":97},[76,166604,3273],{"class":89},[76,166606,156221],{"class":93},[76,166608,26116],{"class":89},[76,166610,166611],{"class":93}," args:\n",[76,166613,166614,166616,166618],{"class":78,"line":103},[76,166615,160023],{"class":93},[76,166617,9549],{"class":89},[76,166619,166620],{"class":93}," num\n",[76,166622,166623,166625],{"class":78,"line":1273},[76,166624,4162],{"class":89},[76,166626,162328],{"class":93},[76,166628,166629],{"class":78,"line":1287},[76,166630,2472],{"emptyLinePlaceholder":125},[76,166632,166633],{"class":78,"line":1293},[76,166634,2472],{"emptyLinePlaceholder":125},[76,166636,166637,166639,166642,166644,166646,166648,166650,166652],{"class":78,"line":1384},[76,166638,30485],{"class":250},[76,166640,166641],{"class":93},"(add(",[76,166643,418],{"class":250},[76,166645,12507],{"class":93},[76,166647,278],{"class":250},[76,166649,12507],{"class":93},[76,166651,272],{"class":250},[76,166653,30567],{"class":93},[76,166655,166656,166658,166660,166662,166664,166666,166668,166670,166672,166674,166676,166678],{"class":78,"line":1390},[76,166657,30485],{"class":250},[76,166659,166641],{"class":93},[76,166661,418],{"class":250},[76,166663,12507],{"class":93},[76,166665,278],{"class":250},[76,166667,12507],{"class":93},[76,166669,272],{"class":250},[76,166671,12507],{"class":93},[76,166673,494],{"class":250},[76,166675,12507],{"class":93},[76,166677,520],{"class":250},[76,166679,30567],{"class":93},[169,166681,166683],{"id":166682},"_762-kwargs","7.6.2 **kwargs",[14,166685,166686,166689],{},[73,166687,166688],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[67,166691,166693],{"className":69,"code":166692,"language":71,"meta":58,"style":58},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[73,166694,166695,166708,166719,166725,166729,166733],{"__ignoreMap":58},[76,166696,166697,166699,166701,166703,166705],{"class":78,"line":79},[76,166698,32017],{"class":89},[76,166700,161986],{"class":2035},[76,166702,202],{"class":93},[76,166704,10733],{"class":89},[76,166706,166707],{"class":93},"kwargs):\n",[76,166709,166710,166712,166714,166716],{"class":78,"line":86},[76,166711,3273],{"class":89},[76,166713,164826],{"class":93},[76,166715,26116],{"class":89},[76,166717,166718],{"class":93}," kwargs.items():\n",[76,166720,166721,166723],{"class":78,"line":97},[76,166722,32521],{"class":250},[76,166724,164838],{"class":93},[76,166726,166727],{"class":78,"line":103},[76,166728,2472],{"emptyLinePlaceholder":125},[76,166730,166731],{"class":78,"line":1273},[76,166732,2472],{"emptyLinePlaceholder":125},[76,166734,166735,166737,166739,166741,166743,166745,166747,166749,166751,166753,166755,166757,166759],{"class":78,"line":1287},[76,166736,162051],{"class":93},[76,166738,79880],{"class":5288},[76,166740,247],{"class":89},[76,166742,149929],{"class":305},[76,166744,12507],{"class":93},[76,166746,70291],{"class":5288},[76,166748,247],{"class":89},[76,166750,849],{"class":250},[76,166752,12507],{"class":93},[76,166754,70342],{"class":5288},[76,166756,247],{"class":89},[76,166758,69339],{"class":305},[76,166760,208],{"class":93},[140,166762,166764],{"id":166763},"_77-参数解包","7.7 参数解包",[14,166766,166767],{},"列表或元组解包为位置参数：",[67,166769,166771],{"className":69,"code":166770,"language":71,"meta":58,"style":58},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[73,166772,166773,166782,166797,166801,166805,166825],{"__ignoreMap":58},[76,166774,166775,166777,166779],{"class":78,"line":79},[76,166776,32017],{"class":89},[76,166778,5281],{"class":2035},[76,166780,166781],{"class":93},"(a, b, c):\n",[76,166783,166784,166786,166788,166790,166792,166794],{"class":78,"line":86},[76,166785,4162],{"class":89},[76,166787,10941],{"class":93},[76,166789,681],{"class":89},[76,166791,10954],{"class":93},[76,166793,681],{"class":89},[76,166795,166796],{"class":93}," c\n",[76,166798,166799],{"class":78,"line":97},[76,166800,2472],{"emptyLinePlaceholder":125},[76,166802,166803],{"class":78,"line":103},[76,166804,2472],{"emptyLinePlaceholder":125},[76,166806,166807,166809,166811,166813,166815,166817,166819,166821,166823],{"class":78,"line":1273},[76,166808,164141],{"class":93},[76,166810,247],{"class":89},[76,166812,52296],{"class":93},[76,166814,418],{"class":250},[76,166816,12507],{"class":93},[76,166818,278],{"class":250},[76,166820,12507],{"class":93},[76,166822,272],{"class":250},[76,166824,33316],{"class":93},[76,166826,166827,166829,166831,166833],{"class":78,"line":1287},[76,166828,30485],{"class":250},[76,166830,166641],{"class":93},[76,166832,655],{"class":89},[76,166834,166835],{"class":93},"nums))\n",[14,166837,166838],{},"字典解包为关键字参数：",[67,166840,166842],{"className":69,"code":166841,"language":71,"meta":58,"style":58},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[73,166843,166844,166852,166878,166882,166886,166910],{"__ignoreMap":58},[76,166845,166846,166848,166850],{"class":78,"line":79},[76,166847,32017],{"class":89},[76,166849,149413],{"class":2035},[76,166851,149416],{"class":93},[76,166853,166854,166856,166858,166860,166862,166864,166866,166868,166870,166872,166874,166876],{"class":78,"line":86},[76,166855,31369],{"class":250},[76,166857,202],{"class":93},[76,166859,254],{"class":89},[76,166861,452],{"class":305},[76,166863,1095],{"class":250},[76,166865,79880],{"class":93},[76,166867,1145],{"class":250},[76,166869,4520],{"class":250},[76,166871,70291],{"class":93},[76,166873,1145],{"class":250},[76,166875,452],{"class":305},[76,166877,208],{"class":93},[76,166879,166880],{"class":78,"line":97},[76,166881,2472],{"emptyLinePlaceholder":125},[76,166883,166884],{"class":78,"line":103},[76,166885,2472],{"emptyLinePlaceholder":125},[76,166887,166888,166890,166892,166894,166896,166898,166900,166902,166904,166906,166908],{"class":78,"line":1273},[76,166889,116355],{"class":93},[76,166891,247],{"class":89},[76,166893,4520],{"class":93},[76,166895,62749],{"class":305},[76,166897,51507],{"class":93},[76,166899,149929],{"class":305},[76,166901,12507],{"class":93},[76,166903,69194],{"class":305},[76,166905,51507],{"class":93},[76,166907,849],{"class":250},[76,166909,1637],{"class":93},[76,166911,166912,166914,166916],{"class":78,"line":1287},[76,166913,166197],{"class":93},[76,166915,10733],{"class":89},[76,166917,166918],{"class":93},"info)\n",[140,166920,166922],{"id":166921},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166924,166925,166928],{},[73,166926,166927],{},"lambda"," 用于定义简单匿名函数。",[67,166930,166932],{"className":69,"code":166931,"language":71,"meta":58,"style":58},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[73,166933,166934,166951],{"__ignoreMap":58},[76,166935,166936,166939,166941,166944,166947,166949],{"class":78,"line":79},[76,166937,166938],{"class":93},"add ",[76,166940,247],{"class":89},[76,166942,166943],{"class":89}," lambda",[76,166945,166946],{"class":93}," a, b: a ",[76,166948,681],{"class":89},[76,166950,151145],{"class":93},[76,166952,166953,166955,166957,166959,166961,166963],{"class":78,"line":86},[76,166954,30485],{"class":250},[76,166956,166641],{"class":93},[76,166958,418],{"class":250},[76,166960,12507],{"class":93},[76,166962,278],{"class":250},[76,166964,30567],{"class":93},[14,166966,166967],{},"常和排序、过滤等函数一起使用。",[14,166969,166970],{},"按分数排序：",[67,166972,166974],{"className":69,"code":166973,"language":71,"meta":58,"style":58},"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",[73,166975,166976,166984,167004,167024,167044,167048,167052,167075],{"__ignoreMap":58},[76,166977,166978,166980,166982],{"class":78,"line":79},[76,166979,159757],{"class":93},[76,166981,247],{"class":89},[76,166983,55517],{"class":93},[76,166985,166986,166988,166990,166992,166994,166996,166998,167000,167002],{"class":78,"line":86},[76,166987,148426],{"class":93},[76,166989,62749],{"class":305},[76,166991,51507],{"class":93},[76,166993,149929],{"class":305},[76,166995,12507],{"class":93},[76,166997,151513],{"class":305},[76,166999,51507],{"class":93},[76,167001,1188],{"class":250},[76,167003,5002],{"class":93},[76,167005,167006,167008,167010,167012,167014,167016,167018,167020,167022],{"class":78,"line":97},[76,167007,148426],{"class":93},[76,167009,62749],{"class":305},[76,167011,51507],{"class":93},[76,167013,150977],{"class":305},[76,167015,12507],{"class":93},[76,167017,151513],{"class":305},[76,167019,51507],{"class":93},[76,167021,1010],{"class":250},[76,167023,5002],{"class":93},[76,167025,167026,167028,167030,167032,167034,167036,167038,167040,167042],{"class":78,"line":103},[76,167027,148426],{"class":93},[76,167029,62749],{"class":305},[76,167031,51507],{"class":93},[76,167033,159772],{"class":305},[76,167035,12507],{"class":93},[76,167037,151513],{"class":305},[76,167039,51507],{"class":93},[76,167041,606],{"class":250},[76,167043,5002],{"class":93},[76,167045,167046],{"class":78,"line":1273},[76,167047,33316],{"class":93},[76,167049,167050],{"class":78,"line":1287},[76,167051,2472],{"emptyLinePlaceholder":125},[76,167053,167054,167057,167059,167061,167063,167065,167067,167069,167071,167073],{"class":78,"line":1293},[76,167055,167056],{"class":93},"students.sort(",[76,167058,153987],{"class":5288},[76,167060,153990],{"class":89},[76,167062,153993],{"class":93},[76,167064,151513],{"class":305},[76,167066,112243],{"class":93},[76,167068,163569],{"class":5288},[76,167070,247],{"class":89},[76,167072,31546],{"class":250},[76,167074,208],{"class":93},[76,167076,167077,167079],{"class":78,"line":1384},[76,167078,30485],{"class":250},[76,167080,165036],{"class":93},[14,167082,167083,167084,167086],{},"如果逻辑复杂，不要硬写 ",[73,167085,166927],{},"，定义普通函数更清晰。",[140,167088,167090],{"id":167089},"_79-函数作为参数","7.9 函数作为参数",[14,167092,167093],{},"函数可以作为参数传给另一个函数。",[67,167095,167097],{"className":69,"code":167096,"language":71,"meta":58,"style":58},"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",[73,167098,167099,167107,167117,167121,167125,167135,167142,167146,167150],{"__ignoreMap":58},[76,167100,167101,167103,167105],{"class":78,"line":79},[76,167102,32017],{"class":89},[76,167104,5281],{"class":2035},[76,167106,151134],{"class":93},[76,167108,167109,167111,167113,167115],{"class":78,"line":86},[76,167110,4162],{"class":89},[76,167112,10941],{"class":93},[76,167114,681],{"class":89},[76,167116,151145],{"class":93},[76,167118,167119],{"class":78,"line":97},[76,167120,2472],{"emptyLinePlaceholder":125},[76,167122,167123],{"class":78,"line":103},[76,167124,2472],{"emptyLinePlaceholder":125},[76,167126,167127,167129,167132],{"class":78,"line":1273},[76,167128,32017],{"class":89},[76,167130,167131],{"class":2035}," calculate",[76,167133,167134],{"class":93},"(a, b, func):\n",[76,167136,167137,167139],{"class":78,"line":1287},[76,167138,4162],{"class":89},[76,167140,167141],{"class":93}," func(a, b)\n",[76,167143,167144],{"class":78,"line":1293},[76,167145,2472],{"emptyLinePlaceholder":125},[76,167147,167148],{"class":78,"line":1384},[76,167149,2472],{"emptyLinePlaceholder":125},[76,167151,167152,167154,167157,167159,167161,167163],{"class":78,"line":1390},[76,167153,30485],{"class":250},[76,167155,167156],{"class":93},"(calculate(",[76,167158,646],{"class":250},[76,167160,12507],{"class":93},[76,167162,899],{"class":250},[76,167164,167165],{"class":93},", add))\n",[14,167167,167168],{},"这种思想在排序、回调、框架中经常出现。",[140,167170,167172],{"id":167171},"_710-mapfiltersorted","7.10 map、filter、sorted",[169,167174,167176],{"id":167175},"_7101-map","7.10.1 map",[14,167178,167179,167181],{},[73,167180,74114],{}," 对每个元素执行函数。",[67,167183,167185],{"className":69,"code":167184,"language":71,"meta":58,"style":58},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[73,167186,167187,167211,167234],{"__ignoreMap":58},[76,167188,167189,167191,167193,167195,167197,167199,167201,167203,167205,167207,167209],{"class":78,"line":79},[76,167190,164141],{"class":93},[76,167192,247],{"class":89},[76,167194,52296],{"class":93},[76,167196,418],{"class":250},[76,167198,12507],{"class":93},[76,167200,278],{"class":250},[76,167202,12507],{"class":93},[76,167204,272],{"class":250},[76,167206,12507],{"class":93},[76,167208,494],{"class":250},[76,167210,33316],{"class":93},[76,167212,167213,167215,167217,167220,167222,167224,167227,167229,167231],{"class":78,"line":86},[76,167214,161347],{"class":93},[76,167216,247],{"class":89},[76,167218,167219],{"class":250}," map",[76,167221,202],{"class":93},[76,167223,166927],{"class":89},[76,167225,167226],{"class":93}," x: x ",[76,167228,655],{"class":89},[76,167230,14827],{"class":250},[76,167232,167233],{"class":93},", nums)\n",[76,167235,167236,167238,167240,167242],{"class":78,"line":97},[76,167237,30485],{"class":250},[76,167239,202],{"class":93},[76,167241,154111],{"class":250},[76,167243,166109],{"class":93},[169,167245,167247],{"id":167246},"_7102-filter","7.10.2 filter",[14,167249,167250,167252],{},[73,167251,80121],{}," 保留满足条件的元素。",[67,167254,167256],{"className":69,"code":167255,"language":71,"meta":58,"style":58},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[73,167257,167258,167286,167311],{"__ignoreMap":58},[76,167259,167260,167262,167264,167266,167268,167270,167272,167274,167276,167278,167280,167282,167284],{"class":78,"line":79},[76,167261,164141],{"class":93},[76,167263,247],{"class":89},[76,167265,52296],{"class":93},[76,167267,418],{"class":250},[76,167269,12507],{"class":93},[76,167271,278],{"class":250},[76,167273,12507],{"class":93},[76,167275,272],{"class":250},[76,167277,12507],{"class":93},[76,167279,494],{"class":250},[76,167281,12507],{"class":93},[76,167283,520],{"class":250},[76,167285,33316],{"class":93},[76,167287,167288,167290,167292,167295,167297,167299,167301,167303,167305,167307,167309],{"class":78,"line":86},[76,167289,161347],{"class":93},[76,167291,247],{"class":89},[76,167293,167294],{"class":250}," filter",[76,167296,202],{"class":93},[76,167298,166927],{"class":89},[76,167300,167226],{"class":93},[76,167302,106],{"class":89},[76,167304,14827],{"class":250},[76,167306,101600],{"class":89},[76,167308,4165],{"class":250},[76,167310,167233],{"class":93},[76,167312,167313,167315,167317,167319],{"class":78,"line":97},[76,167314,30485],{"class":250},[76,167316,202],{"class":93},[76,167318,154111],{"class":250},[76,167320,166109],{"class":93},[169,167322,167324],{"id":167323},"_7103-sorted","7.10.3 sorted",[14,167326,167327,167329],{},[73,167328,165277],{}," 返回排序后的新列表。",[67,167331,167333],{"className":69,"code":167332,"language":71,"meta":58,"style":58},"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",[73,167334,167335,167343,167363,167383,167403,167407,167411,167440],{"__ignoreMap":58},[76,167336,167337,167339,167341],{"class":78,"line":79},[76,167338,159757],{"class":93},[76,167340,247],{"class":89},[76,167342,55517],{"class":93},[76,167344,167345,167347,167349,167351,167353,167355,167357,167359,167361],{"class":78,"line":86},[76,167346,148426],{"class":93},[76,167348,62749],{"class":305},[76,167350,51507],{"class":93},[76,167352,149929],{"class":305},[76,167354,12507],{"class":93},[76,167356,151513],{"class":305},[76,167358,51507],{"class":93},[76,167360,1188],{"class":250},[76,167362,5002],{"class":93},[76,167364,167365,167367,167369,167371,167373,167375,167377,167379,167381],{"class":78,"line":97},[76,167366,148426],{"class":93},[76,167368,62749],{"class":305},[76,167370,51507],{"class":93},[76,167372,150977],{"class":305},[76,167374,12507],{"class":93},[76,167376,151513],{"class":305},[76,167378,51507],{"class":93},[76,167380,1010],{"class":250},[76,167382,5002],{"class":93},[76,167384,167385,167387,167389,167391,167393,167395,167397,167399,167401],{"class":78,"line":103},[76,167386,148426],{"class":93},[76,167388,62749],{"class":305},[76,167390,51507],{"class":93},[76,167392,159772],{"class":305},[76,167394,12507],{"class":93},[76,167396,151513],{"class":305},[76,167398,51507],{"class":93},[76,167400,606],{"class":250},[76,167402,5002],{"class":93},[76,167404,167405],{"class":78,"line":1273},[76,167406,33316],{"class":93},[76,167408,167409],{"class":78,"line":1287},[76,167410,2472],{"emptyLinePlaceholder":125},[76,167412,167413,167415,167417,167419,167422,167424,167426,167428,167430,167432,167434,167436,167438],{"class":78,"line":1293},[76,167414,161347],{"class":93},[76,167416,247],{"class":89},[76,167418,163645],{"class":250},[76,167420,167421],{"class":93},"(students, ",[76,167423,153987],{"class":5288},[76,167425,153990],{"class":89},[76,167427,153993],{"class":93},[76,167429,151513],{"class":305},[76,167431,112243],{"class":93},[76,167433,163569],{"class":5288},[76,167435,247],{"class":89},[76,167437,31546],{"class":250},[76,167439,208],{"class":93},[76,167441,167442,167444],{"class":78,"line":1384},[76,167443,30485],{"class":250},[76,167445,76655],{"class":93},[140,167447,167449],{"id":167448},"_711-闭包入门","7.11 闭包入门",[14,167451,167452],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[67,167454,167456],{"className":69,"code":167455,"language":71,"meta":58,"style":58},"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",[73,167457,167458,167468,167478,167489,167493,167500,167504,167508,167522],{"__ignoreMap":58},[76,167459,167460,167462,167465],{"class":78,"line":79},[76,167461,32017],{"class":89},[76,167463,167464],{"class":2035}," outer",[76,167466,167467],{"class":93},"(base):\n",[76,167469,167470,167472,167475],{"class":78,"line":86},[76,167471,30871],{"class":89},[76,167473,167474],{"class":2035}," inner",[76,167476,167477],{"class":93},"(num):\n",[76,167479,167480,167482,167485,167487],{"class":78,"line":97},[76,167481,14824],{"class":89},[76,167483,167484],{"class":93}," base ",[76,167486,681],{"class":89},[76,167488,166620],{"class":93},[76,167490,167491],{"class":78,"line":103},[76,167492,2472],{"emptyLinePlaceholder":125},[76,167494,167495,167497],{"class":78,"line":1273},[76,167496,4162],{"class":89},[76,167498,167499],{"class":93}," inner\n",[76,167501,167502],{"class":78,"line":1287},[76,167503,2472],{"emptyLinePlaceholder":125},[76,167505,167506],{"class":78,"line":1293},[76,167507,2472],{"emptyLinePlaceholder":125},[76,167509,167510,167513,167515,167518,167520],{"class":78,"line":1384},[76,167511,167512],{"class":93},"add_10 ",[76,167514,247],{"class":89},[76,167516,167517],{"class":93}," outer(",[76,167519,646],{"class":250},[76,167521,208],{"class":93},[76,167523,167524,167526,167529,167531],{"class":78,"line":1390},[76,167525,30485],{"class":250},[76,167527,167528],{"class":93},"(add_10(",[76,167530,520],{"class":250},[76,167532,30567],{"class":93},[14,167534,167535],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[140,167537,167539],{"id":167538},"_712-装饰器入门","7.12 装饰器入门",[14,167541,167542],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[67,167544,167546],{"className":69,"code":167545,"language":71,"meta":58,"style":58},"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",[73,167547,167548,167557,167566,167577,167582,167593,167597,167604,167608,167612,167617,167625,167635,167639,167643],{"__ignoreMap":58},[76,167549,167550,167552,167554],{"class":78,"line":79},[76,167551,32017],{"class":89},[76,167553,87261],{"class":2035},[76,167555,167556],{"class":93},"(func):\n",[76,167558,167559,167561,167564],{"class":78,"line":86},[76,167560,30871],{"class":89},[76,167562,167563],{"class":2035}," wrapper",[76,167565,32023],{"class":93},[76,167567,167568,167570,167572,167575],{"class":78,"line":97},[76,167569,32521],{"class":250},[76,167571,202],{"class":93},[76,167573,167574],{"class":305},"\"函数开始执行\"",[76,167576,208],{"class":93},[76,167578,167579],{"class":78,"line":103},[76,167580,167581],{"class":93},"        func()\n",[76,167583,167584,167586,167588,167591],{"class":78,"line":1273},[76,167585,32521],{"class":250},[76,167587,202],{"class":93},[76,167589,167590],{"class":305},"\"函数执行结束\"",[76,167592,208],{"class":93},[76,167594,167595],{"class":78,"line":1287},[76,167596,2472],{"emptyLinePlaceholder":125},[76,167598,167599,167601],{"class":78,"line":1293},[76,167600,4162],{"class":89},[76,167602,167603],{"class":93}," wrapper\n",[76,167605,167606],{"class":78,"line":1384},[76,167607,2472],{"emptyLinePlaceholder":125},[76,167609,167610],{"class":78,"line":1390},[76,167611,2472],{"emptyLinePlaceholder":125},[76,167613,167614],{"class":78,"line":1402},[76,167615,167616],{"class":2035},"@log\n",[76,167618,167619,167621,167623],{"class":78,"line":1684},[76,167620,32017],{"class":89},[76,167622,161037],{"class":2035},[76,167624,32023],{"class":93},[76,167626,167627,167629,167631,167633],{"class":78,"line":1689},[76,167628,31369],{"class":250},[76,167630,202],{"class":93},[76,167632,5916],{"class":305},[76,167634,208],{"class":93},[76,167636,167637],{"class":78,"line":1695},[76,167638,2472],{"emptyLinePlaceholder":125},[76,167640,167641],{"class":78,"line":1700},[76,167642,2472],{"emptyLinePlaceholder":125},[76,167644,167645],{"class":78,"line":1714},[76,167646,161072],{"class":93},[14,167648,158315],{},[67,167650,167652],{"className":69,"code":167651,"language":71,"meta":58,"style":58},"say_hello = log(say_hello)\n",[73,167653,167654],{"__ignoreMap":58},[76,167655,167656,167659,167661],{"class":78,"line":79},[76,167657,167658],{"class":93},"say_hello ",[76,167660,247],{"class":89},[76,167662,167663],{"class":93}," log(say_hello)\n",[14,167665,167666],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[140,167668,167670],{"id":167669},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[67,167672,167674],{"className":69,"code":167673,"language":71,"meta":58,"style":58},"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",[73,167675,167676,167684,167701,167711,167730,167740,167747,167751,167757,167761,167765,167769,167777,167787,167791,167795],{"__ignoreMap":58},[76,167677,167678,167680,167682],{"class":78,"line":79},[76,167679,32017],{"class":89},[76,167681,87261],{"class":2035},[76,167683,167556],{"class":93},[76,167685,167686,167688,167690,167692,167694,167697,167699],{"class":78,"line":86},[76,167687,30871],{"class":89},[76,167689,167563],{"class":2035},[76,167691,202],{"class":93},[76,167693,655],{"class":89},[76,167695,167696],{"class":93},"args, ",[76,167698,10733],{"class":89},[76,167700,166707],{"class":93},[76,167702,167703,167705,167707,167709],{"class":78,"line":97},[76,167704,32521],{"class":250},[76,167706,202],{"class":93},[76,167708,167574],{"class":305},[76,167710,208],{"class":93},[76,167712,167713,167716,167718,167721,167723,167725,167727],{"class":78,"line":103},[76,167714,167715],{"class":93},"        result ",[76,167717,247],{"class":89},[76,167719,167720],{"class":93}," func(",[76,167722,655],{"class":89},[76,167724,167696],{"class":93},[76,167726,10733],{"class":89},[76,167728,167729],{"class":93},"kwargs)\n",[76,167731,167732,167734,167736,167738],{"class":78,"line":1273},[76,167733,32521],{"class":250},[76,167735,202],{"class":93},[76,167737,167590],{"class":305},[76,167739,208],{"class":93},[76,167741,167742,167744],{"class":78,"line":1287},[76,167743,14824],{"class":89},[76,167745,167746],{"class":93}," result\n",[76,167748,167749],{"class":78,"line":1293},[76,167750,2472],{"emptyLinePlaceholder":125},[76,167752,167753,167755],{"class":78,"line":1384},[76,167754,4162],{"class":89},[76,167756,167603],{"class":93},[76,167758,167759],{"class":78,"line":1390},[76,167760,2472],{"emptyLinePlaceholder":125},[76,167762,167763],{"class":78,"line":1402},[76,167764,2472],{"emptyLinePlaceholder":125},[76,167766,167767],{"class":78,"line":1684},[76,167768,167616],{"class":2035},[76,167770,167771,167773,167775],{"class":78,"line":1689},[76,167772,32017],{"class":89},[76,167774,5281],{"class":2035},[76,167776,151134],{"class":93},[76,167778,167779,167781,167783,167785],{"class":78,"line":1695},[76,167780,4162],{"class":89},[76,167782,10941],{"class":93},[76,167784,681],{"class":89},[76,167786,151145],{"class":93},[76,167788,167789],{"class":78,"line":1700},[76,167790,2472],{"emptyLinePlaceholder":125},[76,167792,167793],{"class":78,"line":1714},[76,167794,2472],{"emptyLinePlaceholder":125},[76,167796,167797,167799,167801,167803,167805,167807],{"class":78,"line":1719},[76,167798,30485],{"class":250},[76,167800,166641],{"class":93},[76,167802,646],{"class":250},[76,167804,12507],{"class":93},[76,167806,899],{"class":250},[76,167808,30567],{"class":93},[14,167810,167811,167812,101059,167814,167816],{},"这个写法使用 ",[73,167813,166573],{},[73,167815,166688],{}," 接收原函数的所有参数。",[140,167818,167820],{"id":167819},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167822,123333],{},[152,167824,167825,167828,167831],{},[155,167826,167827],{},"给定一组学生数据。",[155,167829,167830],{},"封装函数，根据传入规则筛选学生。",[155,167832,167833],{},"筛选及格、优秀、未成年学生。",[14,167835,10107],{},[67,167837,167839],{"className":69,"code":167838,"language":71,"meta":58,"style":58},"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",[73,167840,167841,167849,167877,167905,167933,167937,167941,167945,167955,167963,167973,167980,167985,167991,167995,167999,168023,168046,168069,168073,168080,168087],{"__ignoreMap":58},[76,167842,167843,167845,167847],{"class":78,"line":79},[76,167844,159757],{"class":93},[76,167846,247],{"class":89},[76,167848,55517],{"class":93},[76,167850,167851,167853,167855,167857,167859,167861,167863,167865,167867,167869,167871,167873,167875],{"class":78,"line":86},[76,167852,148426],{"class":93},[76,167854,62749],{"class":305},[76,167856,51507],{"class":93},[76,167858,149929],{"class":305},[76,167860,12507],{"class":93},[76,167862,69194],{"class":305},[76,167864,51507],{"class":93},[76,167866,849],{"class":250},[76,167868,12507],{"class":93},[76,167870,151513],{"class":305},[76,167872,51507],{"class":93},[76,167874,1188],{"class":250},[76,167876,5002],{"class":93},[76,167878,167879,167881,167883,167885,167887,167889,167891,167893,167895,167897,167899,167901,167903],{"class":78,"line":97},[76,167880,148426],{"class":93},[76,167882,62749],{"class":305},[76,167884,51507],{"class":93},[76,167886,150977],{"class":305},[76,167888,12507],{"class":93},[76,167890,69194],{"class":305},[76,167892,51507],{"class":93},[76,167894,824],{"class":250},[76,167896,12507],{"class":93},[76,167898,151513],{"class":305},[76,167900,51507],{"class":93},[76,167902,1010],{"class":250},[76,167904,5002],{"class":93},[76,167906,167907,167909,167911,167913,167915,167917,167919,167921,167923,167925,167927,167929,167931],{"class":78,"line":103},[76,167908,148426],{"class":93},[76,167910,62749],{"class":305},[76,167912,51507],{"class":93},[76,167914,159772],{"class":305},[76,167916,12507],{"class":93},[76,167918,69194],{"class":305},[76,167920,51507],{"class":93},[76,167922,874],{"class":250},[76,167924,12507],{"class":93},[76,167926,151513],{"class":305},[76,167928,51507],{"class":93},[76,167930,1081],{"class":250},[76,167932,5002],{"class":93},[76,167934,167935],{"class":78,"line":1273},[76,167936,33316],{"class":93},[76,167938,167939],{"class":78,"line":1287},[76,167940,2472],{"emptyLinePlaceholder":125},[76,167942,167943],{"class":78,"line":1293},[76,167944,2472],{"emptyLinePlaceholder":125},[76,167946,167947,167949,167952],{"class":78,"line":1384},[76,167948,32017],{"class":89},[76,167950,167951],{"class":2035}," filter_students",[76,167953,167954],{"class":93},"(students, condition):\n",[76,167956,167957,167959,167961],{"class":78,"line":1390},[76,167958,161264],{"class":93},[76,167960,247],{"class":89},[76,167962,51908],{"class":93},[76,167964,167965,167967,167969,167971],{"class":78,"line":1402},[76,167966,3273],{"class":89},[76,167968,152178],{"class":93},[76,167970,26116],{"class":89},[76,167972,152183],{"class":93},[76,167974,167975,167977],{"class":78,"line":1684},[76,167976,2569],{"class":89},[76,167978,167979],{"class":93}," condition(student):\n",[76,167981,167982],{"class":78,"line":1689},[76,167983,167984],{"class":93},"            result.append(student)\n",[76,167986,167987,167989],{"class":78,"line":1695},[76,167988,4162],{"class":89},[76,167990,167746],{"class":93},[76,167992,167993],{"class":78,"line":1700},[76,167994,2472],{"emptyLinePlaceholder":125},[76,167996,167997],{"class":78,"line":1714},[76,167998,2472],{"emptyLinePlaceholder":125},[76,168000,168001,168003,168005,168008,168010,168013,168015,168017,168019,168021],{"class":78,"line":1719},[76,168002,165742],{"class":93},[76,168004,247],{"class":89},[76,168006,168007],{"class":93}," filter_students(students, ",[76,168009,166927],{"class":89},[76,168011,168012],{"class":93}," s: s[",[76,168014,151513],{"class":305},[76,168016,4515],{"class":93},[76,168018,1782],{"class":89},[76,168020,157878],{"class":250},[76,168022,208],{"class":93},[76,168024,168025,168028,168030,168032,168034,168036,168038,168040,168042,168044],{"class":78,"line":1725},[76,168026,168027],{"class":93},"excellent ",[76,168029,247],{"class":89},[76,168031,168007],{"class":93},[76,168033,166927],{"class":89},[76,168035,168012],{"class":93},[76,168037,151513],{"class":305},[76,168039,4515],{"class":93},[76,168041,1782],{"class":89},[76,168043,157829],{"class":250},[76,168045,208],{"class":93},[76,168047,168048,168051,168053,168055,168057,168059,168061,168063,168065,168067],{"class":78,"line":1746},[76,168049,168050],{"class":93},"under_age ",[76,168052,247],{"class":89},[76,168054,168007],{"class":93},[76,168056,166927],{"class":89},[76,168058,168012],{"class":93},[76,168060,69194],{"class":305},[76,168062,4515],{"class":93},[76,168064,1109],{"class":89},[76,168066,156326],{"class":250},[76,168068,208],{"class":93},[76,168070,168071],{"class":78,"line":1751},[76,168072,2472],{"emptyLinePlaceholder":125},[76,168074,168075,168077],{"class":78,"line":1765},[76,168076,30485],{"class":250},[76,168078,168079],{"class":93},"(passed)\n",[76,168081,168082,168084],{"class":78,"line":1770},[76,168083,30485],{"class":250},[76,168085,168086],{"class":93},"(excellent)\n",[76,168088,168089,168091],{"class":78,"line":1799},[76,168090,30485],{"class":250},[76,168092,168093],{"class":93},"(under_age)\n",[140,168095,168097],{"id":168096},"_715-易错点","7.15 易错点",[152,168099,168100,168103,168111,168116,168127],{},[155,168101,168102],{},"默认参数不要写可变对象。",[155,168104,168105,168107,168108,168110],{},[73,168106,166573],{}," 是元组，",[73,168109,166688],{}," 是字典。",[155,168112,168113,168115],{},[73,168114,166927],{}," 只适合简单表达式。",[155,168117,168118,101059,168120,168122,168123,168126],{},[73,168119,74114],{},[73,168121,80121],{}," 的结果是迭代器，常用 ",[73,168124,168125],{},"list()"," 转换查看。",[155,168128,168129],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[140,168131,168133],{"id":168132},"_716-本章练习","7.16 本章练习",[152,168135,168136,168143,168149,168154,168159],{},[155,168137,168138,168139,168142],{},"写函数 ",[73,168140,168141],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[155,168144,168138,168145,168148],{},[73,168146,168147],{},"print_user(**kwargs)","，输出用户所有字段。",[155,168150,104407,168151,168153],{},[73,168152,166927],{}," 对学生列表按年龄排序。",[155,168155,104407,168156,168158],{},[73,168157,80121],{}," 找出成绩不及格的学生。",[155,168160,168161],{},"写一个装饰器，统计函数执行前后的提示信息。",[117,168163,168164],{},"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":58,"searchDepth":86,"depth":86,"links":168166},[168167,168168,168169,168170,168171,168172,168176,168177,168178,168179,168184,168185,168186,168187,168188,168189],{"id":166025,"depth":86,"text":166026},{"id":166139,"depth":86,"text":166140},{"id":166228,"depth":86,"text":166229},{"id":166290,"depth":86,"text":166291},{"id":166436,"depth":86,"text":166437},{"id":166563,"depth":86,"text":166564,"children":168173},[168174,168175],{"id":166567,"depth":97,"text":166568},{"id":166682,"depth":97,"text":166683},{"id":166763,"depth":86,"text":166764},{"id":166921,"depth":86,"text":166922},{"id":167089,"depth":86,"text":167090},{"id":167171,"depth":86,"text":167172,"children":168180},[168181,168182,168183],{"id":167175,"depth":97,"text":167176},{"id":167246,"depth":97,"text":167247},{"id":167323,"depth":97,"text":167324},{"id":167448,"depth":86,"text":167449},{"id":167538,"depth":86,"text":167539},{"id":167669,"depth":86,"text":167670},{"id":167819,"depth":86,"text":167820},{"id":168096,"depth":86,"text":168097},{"id":168132,"depth":86,"text":168133},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166017,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168196,"title":168197,"body":168198,"description":122,"extension":123,"meta":170717,"navigation":125,"path":170718,"seo":170719,"stem":170720,"__hash__":170721},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168199,"toc":170692},[168200,168203,168207,168210,168213,168244,168248,168252,168255,168282,168286,168289,168340,168343,168358,168361,168396,168400,168402,168426,168429,168489,168493,168497,168500,168557,168560,168580,168584,168587,168650,168654,168657,168713,168720,168744,168748,168751,168814,168818,168823,168874,168877,168881,168886,168953,168956,169038,169042,169047,169098,169101,169105,169108,169111,169119,169122,169168,169171,169217,169221,169227,169271,169274,169320,169323,169363,169366,169427,169431,169434,169524,169527,169669,169672,169739,169743,169746,169749,169890,169893,169971,169974,170150,170154,170156,170167,170169,170368,170372,170616,170620,170654,170658,170689],[10,168201,168197],{"id":168202},"_8-文件操作",[140,168204,168206],{"id":168205},"_81-文件操作的意义","8.1 文件操作的意义",[14,168208,168209],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168211,168212],{},"常见文件类型：",[152,168214,168215,168221,168227,168233,168239],{},[155,168216,168217,168220],{},[73,168218,168219],{},".txt","：普通文本。",[155,168222,168223,168226],{},[73,168224,168225],{},".csv","：表格文本。",[155,168228,168229,168232],{},[73,168230,168231],{},".json","：结构化数据。",[155,168234,168235,168238],{},[73,168236,168237],{},".log","：日志文件。",[155,168240,168241,168243],{},[73,168242,146393],{},"：Python 源代码。",[140,168245,168247],{"id":168246},"_82-路径","8.2 路径",[169,168249,168251],{"id":168250},"_821-相对路径","8.2.1 相对路径",[14,168253,168254],{},"相对当前运行目录：",[67,168256,168258],{"className":69,"code":168257,"language":71,"meta":58,"style":58},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[73,168259,168260],{"__ignoreMap":58},[76,168261,168262,168264,168266,168268,168270,168272,168274,168276,168278,168280],{"class":78,"line":79},[76,168263,86985],{"class":250},[76,168265,202],{"class":93},[76,168267,146837],{"class":305},[76,168269,12507],{"class":93},[76,168271,146842],{"class":305},[76,168273,12507],{"class":93},[76,168275,146847],{"class":5288},[76,168277,247],{"class":89},[76,168279,146852],{"class":305},[76,168281,208],{"class":93},[169,168283,168285],{"id":168284},"_822-绝对路径","8.2.2 绝对路径",[14,168287,168288],{},"从根目录或盘符开始：",[67,168290,168292],{"className":69,"code":168291,"language":71,"meta":58,"style":58},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[73,168293,168294,168317],{"__ignoreMap":58},[76,168295,168296,168298,168300,168303,168305,168307,168309,168311,168313,168315],{"class":78,"line":79},[76,168297,86985],{"class":250},[76,168299,202],{"class":93},[76,168301,168302],{"class":305},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[76,168304,12507],{"class":93},[76,168306,146842],{"class":305},[76,168308,12507],{"class":93},[76,168310,146847],{"class":5288},[76,168312,247],{"class":89},[76,168314,146852],{"class":305},[76,168316,208],{"class":93},[76,168318,168319,168321,168323,168326,168328,168330,168332,168334,168336,168338],{"class":78,"line":86},[76,168320,86985],{"class":250},[76,168322,202],{"class":93},[76,168324,168325],{"class":305},"\"D:\u002Fdata\u002Fdata.txt\"",[76,168327,12507],{"class":93},[76,168329,146842],{"class":305},[76,168331,12507],{"class":93},[76,168333,146847],{"class":5288},[76,168335,247],{"class":89},[76,168337,146852],{"class":305},[76,168339,208],{"class":93},[14,168341,168342],{},"Windows 路径建议写成：",[67,168344,168346],{"className":69,"code":168345,"language":71,"meta":58,"style":58},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[73,168347,168348],{"__ignoreMap":58},[76,168349,168350,168353,168355],{"class":78,"line":79},[76,168351,168352],{"class":93},"path ",[76,168354,247],{"class":89},[76,168356,168357],{"class":305}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168359,168360],{},"或原始字符串：",[67,168362,168364],{"className":69,"code":168363,"language":71,"meta":58,"style":58},"path = r\"D:\\data\\data.txt\"\n",[73,168365,168366],{"__ignoreMap":58},[76,168367,168368,168370,168372,168374,168376,168379,168382,168385,168387,168389,168391,168394],{"class":78,"line":79},[76,168369,168352],{"class":93},[76,168371,247],{"class":89},[76,168373,17193],{"class":89},[76,168375,452],{"class":305},[76,168377,168378],{"class":48047},"D:",[76,168380,168381],{"class":250},"\\d",[76,168383,168384],{"class":48047},"ata",[76,168386,168381],{"class":250},[76,168388,168384],{"class":48047},[76,168390,757],{"class":250},[76,168392,168393],{"class":48047},"txt",[76,168395,25206],{"class":305},[140,168397,168399],{"id":168398},"_83-open函数","8.3 open函数",[14,168401,5253],{},[67,168403,168405],{"className":69,"code":168404,"language":71,"meta":58,"style":58},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[73,168406,168407],{"__ignoreMap":58},[76,168408,168409,168411,168413,168415,168418,168420,168422,168424],{"class":78,"line":79},[76,168410,45424],{"class":5288},[76,168412,13636],{"class":89},[76,168414,146832],{"class":250},[76,168416,168417],{"class":93},"(文件路径, 打开模式, ",[76,168419,146847],{"class":5288},[76,168421,247],{"class":89},[76,168423,146852],{"class":305},[76,168425,208],{"class":93},[14,168427,168428],{},"常见模式：",[338,168430,168431,168440],{},[341,168432,168433],{},[344,168434,168435,168438],{},[347,168436,168437],{},"模式",[347,168439,25942],{},[385,168441,168442,168451,168460,168469,168479],{},[344,168443,168444,168448],{},[390,168445,168446],{},[73,168447,869],{},[390,168449,168450],{},"只读，文件不存在会报错",[344,168452,168453,168457],{},[390,168454,168455],{},[73,168456,994],{},[390,168458,168459],{},"只写，文件不存在会创建，存在会清空",[344,168461,168462,168466],{},[390,168463,168464],{},[73,168465,439],{},[390,168467,168468],{},"追加，文件不存在会创建",[344,168470,168471,168476],{},[390,168472,168473],{},[73,168474,168475],{},"rb",[390,168477,168478],{},"二进制只读",[344,168480,168481,168486],{},[390,168482,168483],{},[73,168484,168485],{},"wb",[390,168487,168488],{},"二进制只写",[140,168490,168492],{"id":168491},"_84-读取文件","8.4 读取文件",[169,168494,168496],{"id":168495},"_841-read","8.4.1 read",[14,168498,168499],{},"一次读取全部内容：",[67,168501,168503],{"className":69,"code":168502,"language":71,"meta":58,"style":58},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[73,168504,168505,168531,168543,168550],{"__ignoreMap":58},[76,168506,168507,168509,168511,168513,168515,168517,168519,168521,168523,168525,168527,168529],{"class":78,"line":79},[76,168508,45424],{"class":5288},[76,168510,13636],{"class":89},[76,168512,146832],{"class":250},[76,168514,202],{"class":93},[76,168516,146837],{"class":305},[76,168518,12507],{"class":93},[76,168520,146842],{"class":305},[76,168522,12507],{"class":93},[76,168524,146847],{"class":5288},[76,168526,247],{"class":89},[76,168528,146852],{"class":305},[76,168530,208],{"class":93},[76,168532,168533,168536,168538,168540],{"class":78,"line":86},[76,168534,168535],{"class":93},"content ",[76,168537,247],{"class":89},[76,168539,148194],{"class":5288},[76,168541,168542],{"class":93},".read()\n",[76,168544,168545,168547],{"class":78,"line":97},[76,168546,30485],{"class":250},[76,168548,168549],{"class":93},"(content)\n",[76,168551,168552,168554],{"class":78,"line":103},[76,168553,45424],{"class":5288},[76,168555,168556],{"class":93},".close()\n",[14,168558,168559],{},"可以指定读取字符数：",[67,168561,168563],{"className":69,"code":168562,"language":71,"meta":58,"style":58},"content = file.read(10)\n",[73,168564,168565],{"__ignoreMap":58},[76,168566,168567,168569,168571,168573,168576,168578],{"class":78,"line":79},[76,168568,168535],{"class":93},[76,168570,247],{"class":89},[76,168572,148194],{"class":5288},[76,168574,168575],{"class":93},".read(",[76,168577,646],{"class":250},[76,168579,208],{"class":93},[169,168581,168583],{"id":168582},"_842-readline","8.4.2 readline",[14,168585,168586],{},"一次读取一行：",[67,168588,168590],{"className":69,"code":168589,"language":71,"meta":58,"style":58},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[73,168591,168592,168618,168622,168633,168640,168644],{"__ignoreMap":58},[76,168593,168594,168596,168598,168600,168602,168604,168606,168608,168610,168612,168614,168616],{"class":78,"line":79},[76,168595,45424],{"class":5288},[76,168597,13636],{"class":89},[76,168599,146832],{"class":250},[76,168601,202],{"class":93},[76,168603,146837],{"class":305},[76,168605,12507],{"class":93},[76,168607,146842],{"class":305},[76,168609,12507],{"class":93},[76,168611,146847],{"class":5288},[76,168613,247],{"class":89},[76,168615,146852],{"class":305},[76,168617,208],{"class":93},[76,168619,168620],{"class":78,"line":86},[76,168621,2472],{"emptyLinePlaceholder":125},[76,168623,168624,168626,168628,168630],{"class":78,"line":97},[76,168625,147293],{"class":93},[76,168627,247],{"class":89},[76,168629,148194],{"class":5288},[76,168631,168632],{"class":93},".readline()\n",[76,168634,168635,168637],{"class":78,"line":103},[76,168636,30485],{"class":250},[76,168638,168639],{"class":93},"(line)\n",[76,168641,168642],{"class":78,"line":1273},[76,168643,2472],{"emptyLinePlaceholder":125},[76,168645,168646,168648],{"class":78,"line":1287},[76,168647,45424],{"class":5288},[76,168649,168556],{"class":93},[169,168651,168653],{"id":168652},"_843-readlines","8.4.3 readlines",[14,168655,168656],{},"读取所有行，返回列表：",[67,168658,168660],{"className":69,"code":168659,"language":71,"meta":58,"style":58},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[73,168661,168662,168688,168700,168707],{"__ignoreMap":58},[76,168663,168664,168666,168668,168670,168672,168674,168676,168678,168680,168682,168684,168686],{"class":78,"line":79},[76,168665,45424],{"class":5288},[76,168667,13636],{"class":89},[76,168669,146832],{"class":250},[76,168671,202],{"class":93},[76,168673,146837],{"class":305},[76,168675,12507],{"class":93},[76,168677,146842],{"class":305},[76,168679,12507],{"class":93},[76,168681,146847],{"class":5288},[76,168683,247],{"class":89},[76,168685,146852],{"class":305},[76,168687,208],{"class":93},[76,168689,168690,168693,168695,168697],{"class":78,"line":86},[76,168691,168692],{"class":93},"lines ",[76,168694,247],{"class":89},[76,168696,148194],{"class":5288},[76,168698,168699],{"class":93},".readlines()\n",[76,168701,168702,168704],{"class":78,"line":97},[76,168703,30485],{"class":250},[76,168705,168706],{"class":93},"(lines)\n",[76,168708,168709,168711],{"class":78,"line":103},[76,168710,45424],{"class":5288},[76,168712,168556],{"class":93},[14,168714,168715,168716,168719],{},"每一行通常带有换行符，可以用 ",[73,168717,168718],{},"strip()"," 去掉：",[67,168721,168723],{"className":69,"code":168722,"language":71,"meta":58,"style":58},"for line in lines:\n    print(line.strip())\n",[73,168724,168725,168737],{"__ignoreMap":58},[76,168726,168727,168729,168732,168734],{"class":78,"line":79},[76,168728,3097],{"class":89},[76,168730,168731],{"class":93}," line ",[76,168733,26116],{"class":89},[76,168735,168736],{"class":93}," lines:\n",[76,168738,168739,168741],{"class":78,"line":86},[76,168740,31369],{"class":250},[76,168742,168743],{"class":93},"(line.strip())\n",[169,168745,168747],{"id":168746},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168749,168750],{},"推荐读取大文件时使用：",[67,168752,168754],{"className":69,"code":168753,"language":71,"meta":58,"style":58},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[73,168755,168756,168782,168786,168798,168804,168808],{"__ignoreMap":58},[76,168757,168758,168760,168762,168764,168766,168768,168770,168772,168774,168776,168778,168780],{"class":78,"line":79},[76,168759,45424],{"class":5288},[76,168761,13636],{"class":89},[76,168763,146832],{"class":250},[76,168765,202],{"class":93},[76,168767,146837],{"class":305},[76,168769,12507],{"class":93},[76,168771,146842],{"class":305},[76,168773,12507],{"class":93},[76,168775,146847],{"class":5288},[76,168777,247],{"class":89},[76,168779,146852],{"class":305},[76,168781,208],{"class":93},[76,168783,168784],{"class":78,"line":86},[76,168785,2472],{"emptyLinePlaceholder":125},[76,168787,168788,168790,168792,168794,168796],{"class":78,"line":97},[76,168789,3097],{"class":89},[76,168791,168731],{"class":93},[76,168793,26116],{"class":89},[76,168795,148194],{"class":5288},[76,168797,3811],{"class":93},[76,168799,168800,168802],{"class":78,"line":103},[76,168801,31369],{"class":250},[76,168803,168743],{"class":93},[76,168805,168806],{"class":78,"line":1273},[76,168807,2472],{"emptyLinePlaceholder":125},[76,168809,168810,168812],{"class":78,"line":1287},[76,168811,45424],{"class":5288},[76,168813,168556],{"class":93},[140,168815,168817],{"id":168816},"_85-with语句","8.5 with语句",[14,168819,168820,168822],{},[73,168821,107874],{}," 会自动关闭文件，推荐使用。",[67,168824,168826],{"className":69,"code":168825,"language":71,"meta":58,"style":58},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[73,168827,168828,168858,168868],{"__ignoreMap":58},[76,168829,168830,168832,168834,168836,168838,168840,168842,168844,168846,168848,168850,168852,168854,168856],{"class":78,"line":79},[76,168831,107874],{"class":89},[76,168833,146832],{"class":250},[76,168835,202],{"class":93},[76,168837,146837],{"class":305},[76,168839,12507],{"class":93},[76,168841,146842],{"class":305},[76,168843,12507],{"class":93},[76,168845,146847],{"class":5288},[76,168847,247],{"class":89},[76,168849,146852],{"class":305},[76,168851,13786],{"class":93},[76,168853,31453],{"class":89},[76,168855,148194],{"class":5288},[76,168857,3811],{"class":93},[76,168859,168860,168862,168864,168866],{"class":78,"line":86},[76,168861,146864],{"class":93},[76,168863,247],{"class":89},[76,168865,148194],{"class":5288},[76,168867,168542],{"class":93},[76,168869,168870,168872],{"class":78,"line":97},[76,168871,31369],{"class":250},[76,168873,168549],{"class":93},[14,168875,168876],{},"等价于打开文件、读取、最后关闭，但更安全。",[140,168878,168880],{"id":168879},"_86-写入文件","8.6 写入文件",[14,168882,168883,168885],{},[73,168884,994],{}," 模式会清空原文件。",[67,168887,168889],{"className":69,"code":168888,"language":71,"meta":58,"style":58},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[73,168890,168891,168921,168938],{"__ignoreMap":58},[76,168892,168893,168895,168897,168899,168901,168903,168905,168907,168909,168911,168913,168915,168917,168919],{"class":78,"line":79},[76,168894,107874],{"class":89},[76,168896,146832],{"class":250},[76,168898,202],{"class":93},[76,168900,146837],{"class":305},[76,168902,12507],{"class":93},[76,168904,152017],{"class":305},[76,168906,12507],{"class":93},[76,168908,146847],{"class":5288},[76,168910,247],{"class":89},[76,168912,146852],{"class":305},[76,168914,13786],{"class":93},[76,168916,31453],{"class":89},[76,168918,148194],{"class":5288},[76,168920,3811],{"class":93},[76,168922,168923,168926,168929,168932,168934,168936],{"class":78,"line":86},[76,168924,168925],{"class":5288},"    file",[76,168927,168928],{"class":93},".write(",[76,168930,168931],{"class":305},"\"hello",[76,168933,156566],{"class":250},[76,168935,452],{"class":305},[76,168937,208],{"class":93},[76,168939,168940,168942,168944,168947,168949,168951],{"class":78,"line":97},[76,168941,168925],{"class":5288},[76,168943,168928],{"class":93},[76,168945,168946],{"class":305},"\"python",[76,168948,156566],{"class":250},[76,168950,452],{"class":305},[76,168952,208],{"class":93},[14,168954,168955],{},"写入多行：",[67,168957,168959],{"className":69,"code":168958,"language":71,"meta":58,"style":58},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[73,168960,168961,168996,169000,169031],{"__ignoreMap":58},[76,168962,168963,168965,168967,168969,168972,168974,168976,168978,168981,168983,168985,168987,168990,168992,168994],{"class":78,"line":79},[76,168964,168692],{"class":93},[76,168966,247],{"class":89},[76,168968,52296],{"class":93},[76,168970,168971],{"class":305},"\"小明,18",[76,168973,156566],{"class":250},[76,168975,452],{"class":305},[76,168977,12507],{"class":93},[76,168979,168980],{"class":305},"\"小红,17",[76,168982,156566],{"class":250},[76,168984,452],{"class":305},[76,168986,12507],{"class":93},[76,168988,168989],{"class":305},"\"小刚,19",[76,168991,156566],{"class":250},[76,168993,452],{"class":305},[76,168995,33316],{"class":93},[76,168997,168998],{"class":78,"line":86},[76,168999,2472],{"emptyLinePlaceholder":125},[76,169001,169002,169004,169006,169008,169011,169013,169015,169017,169019,169021,169023,169025,169027,169029],{"class":78,"line":97},[76,169003,107874],{"class":89},[76,169005,146832],{"class":250},[76,169007,202],{"class":93},[76,169009,169010],{"class":305},"\"students.txt\"",[76,169012,12507],{"class":93},[76,169014,152017],{"class":305},[76,169016,12507],{"class":93},[76,169018,146847],{"class":5288},[76,169020,247],{"class":89},[76,169022,146852],{"class":305},[76,169024,13786],{"class":93},[76,169026,31453],{"class":89},[76,169028,148194],{"class":5288},[76,169030,3811],{"class":93},[76,169032,169033,169035],{"class":78,"line":103},[76,169034,168925],{"class":5288},[76,169036,169037],{"class":93},".writelines(lines)\n",[140,169039,169041],{"id":169040},"_87-追加文件","8.7 追加文件",[14,169043,169044,169046],{},[73,169045,439],{}," 模式不会清空原内容，而是在末尾追加。",[67,169048,169050],{"className":69,"code":169049,"language":71,"meta":58,"style":58},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[73,169051,169052,169083],{"__ignoreMap":58},[76,169053,169054,169056,169058,169060,169063,169065,169067,169069,169071,169073,169075,169077,169079,169081],{"class":78,"line":79},[76,169055,107874],{"class":89},[76,169057,146832],{"class":250},[76,169059,202],{"class":93},[76,169061,169062],{"class":305},"\"log.txt\"",[76,169064,12507],{"class":93},[76,169066,165366],{"class":305},[76,169068,12507],{"class":93},[76,169070,146847],{"class":5288},[76,169072,247],{"class":89},[76,169074,146852],{"class":305},[76,169076,13786],{"class":93},[76,169078,31453],{"class":89},[76,169080,148194],{"class":5288},[76,169082,3811],{"class":93},[76,169084,169085,169087,169089,169092,169094,169096],{"class":78,"line":86},[76,169086,168925],{"class":5288},[76,169088,168928],{"class":93},[76,169090,169091],{"class":305},"\"程序启动",[76,169093,156566],{"class":250},[76,169095,452],{"class":305},[76,169097,208],{"class":93},[14,169099,169100],{},"日志类文件常用追加模式。",[140,169102,169104],{"id":169103},"_88-文件编码","8.8 文件编码",[14,169106,169107],{},"编码决定文字如何保存为字节。",[14,169109,169110],{},"常见编码：",[152,169112,169113,169116],{},[155,169114,169115],{},"UTF-8：推荐。",[155,169117,169118],{},"GBK：部分 Windows 中文文件常见。",[14,169120,169121],{},"读取文件乱码时，可以尝试：",[67,169123,169125],{"className":69,"code":169124,"language":71,"meta":58,"style":58},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[73,169126,169127,169158],{"__ignoreMap":58},[76,169128,169129,169131,169133,169135,169137,169139,169141,169143,169145,169147,169150,169152,169154,169156],{"class":78,"line":79},[76,169130,107874],{"class":89},[76,169132,146832],{"class":250},[76,169134,202],{"class":93},[76,169136,146837],{"class":305},[76,169138,12507],{"class":93},[76,169140,146842],{"class":305},[76,169142,12507],{"class":93},[76,169144,146847],{"class":5288},[76,169146,247],{"class":89},[76,169148,169149],{"class":305},"\"gbk\"",[76,169151,13786],{"class":93},[76,169153,31453],{"class":89},[76,169155,148194],{"class":5288},[76,169157,3811],{"class":93},[76,169159,169160,169162,169164,169166],{"class":78,"line":86},[76,169161,146864],{"class":93},[76,169163,247],{"class":89},[76,169165,148194],{"class":5288},[76,169167,168542],{"class":93},[14,169169,169170],{},"写文件时建议统一 UTF-8：",[67,169172,169174],{"className":69,"code":169173,"language":71,"meta":58,"style":58},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[73,169175,169176,169206],{"__ignoreMap":58},[76,169177,169178,169180,169182,169184,169186,169188,169190,169192,169194,169196,169198,169200,169202,169204],{"class":78,"line":79},[76,169179,107874],{"class":89},[76,169181,146832],{"class":250},[76,169183,202],{"class":93},[76,169185,146837],{"class":305},[76,169187,12507],{"class":93},[76,169189,152017],{"class":305},[76,169191,12507],{"class":93},[76,169193,146847],{"class":5288},[76,169195,247],{"class":89},[76,169197,146852],{"class":305},[76,169199,13786],{"class":93},[76,169201,31453],{"class":89},[76,169203,148194],{"class":5288},[76,169205,3811],{"class":93},[76,169207,169208,169210,169212,169215],{"class":78,"line":86},[76,169209,168925],{"class":5288},[76,169211,168928],{"class":93},[76,169213,169214],{"class":305},"\"中文内容\"",[76,169216,208],{"class":93},[140,169218,169220],{"id":169219},"_89-pathlib","8.9 pathlib",[14,169222,169223,169226],{},[73,169224,169225],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[67,169228,169230],{"className":69,"code":169229,"language":71,"meta":58,"style":58},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[73,169231,169232,169242,169246,169264],{"__ignoreMap":58},[76,169233,169234,169236,169238,169240],{"class":78,"line":79},[76,169235,30807],{"class":89},[76,169237,108352],{"class":93},[76,169239,90],{"class":89},[76,169241,108357],{"class":93},[76,169243,169244],{"class":78,"line":86},[76,169245,2472],{"emptyLinePlaceholder":125},[76,169247,169248,169250,169252,169254,169257,169259,169261],{"class":78,"line":97},[76,169249,168352],{"class":93},[76,169251,247],{"class":89},[76,169253,108586],{"class":93},[76,169255,169256],{"class":305},"\"data\"",[76,169258,13786],{"class":93},[76,169260,783],{"class":89},[76,169262,169263],{"class":305}," \"students.txt\"\n",[76,169265,169266,169268],{"class":78,"line":103},[76,169267,30485],{"class":250},[76,169269,169270],{"class":93},"(path)\n",[14,169272,169273],{},"创建目录：",[67,169275,169277],{"className":69,"code":169276,"language":71,"meta":58,"style":58},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[73,169278,169279,169289,169293,169306],{"__ignoreMap":58},[76,169280,169281,169283,169285,169287],{"class":78,"line":79},[76,169282,30807],{"class":89},[76,169284,108352],{"class":93},[76,169286,90],{"class":89},[76,169288,108357],{"class":93},[76,169290,169291],{"class":78,"line":86},[76,169292,2472],{"emptyLinePlaceholder":125},[76,169294,169295,169298,169300,169302,169304],{"class":78,"line":97},[76,169296,169297],{"class":93},"data_dir ",[76,169299,247],{"class":89},[76,169301,108586],{"class":93},[76,169303,169256],{"class":305},[76,169305,208],{"class":93},[76,169307,169308,169311,169314,169316,169318],{"class":78,"line":103},[76,169309,169310],{"class":93},"data_dir.mkdir(",[76,169312,169313],{"class":5288},"exist_ok",[76,169315,247],{"class":89},[76,169317,31546],{"class":250},[76,169319,208],{"class":93},[14,169321,169322],{},"判断文件是否存在：",[67,169324,169326],{"className":69,"code":169325,"language":71,"meta":58,"style":58},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[73,169327,169328,169341,169345,169352],{"__ignoreMap":58},[76,169329,169330,169332,169334,169336,169339],{"class":78,"line":79},[76,169331,168352],{"class":93},[76,169333,247],{"class":89},[76,169335,108586],{"class":93},[76,169337,169338],{"class":305},"\"data\u002Fstudents.txt\"",[76,169340,208],{"class":93},[76,169342,169343],{"class":78,"line":86},[76,169344,2472],{"emptyLinePlaceholder":125},[76,169346,169347,169349],{"class":78,"line":97},[76,169348,1603],{"class":89},[76,169350,169351],{"class":93}," path.exists():\n",[76,169353,169354,169356,169358,169361],{"class":78,"line":103},[76,169355,31369],{"class":250},[76,169357,202],{"class":93},[76,169359,169360],{"class":305},"\"文件存在\"",[76,169362,208],{"class":93},[14,169364,169365],{},"读写文本：",[67,169367,169369],{"className":69,"code":169368,"language":71,"meta":58,"style":58},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[73,169370,169371,169383,169387,169404,169421],{"__ignoreMap":58},[76,169372,169373,169375,169377,169379,169381],{"class":78,"line":79},[76,169374,168352],{"class":93},[76,169376,247],{"class":89},[76,169378,108586],{"class":93},[76,169380,146837],{"class":305},[76,169382,208],{"class":93},[76,169384,169385],{"class":78,"line":86},[76,169386,2472],{"emptyLinePlaceholder":125},[76,169388,169389,169392,169394,169396,169398,169400,169402],{"class":78,"line":97},[76,169390,169391],{"class":93},"path.write_text(",[76,169393,145917],{"class":305},[76,169395,12507],{"class":93},[76,169397,146847],{"class":5288},[76,169399,247],{"class":89},[76,169401,146852],{"class":305},[76,169403,208],{"class":93},[76,169405,169406,169408,169410,169413,169415,169417,169419],{"class":78,"line":103},[76,169407,168535],{"class":93},[76,169409,247],{"class":89},[76,169411,169412],{"class":93}," path.read_text(",[76,169414,146847],{"class":5288},[76,169416,247],{"class":89},[76,169418,146852],{"class":305},[76,169420,208],{"class":93},[76,169422,169423,169425],{"class":78,"line":1273},[76,169424,30485],{"class":250},[76,169426,168549],{"class":93},[140,169428,169430],{"id":169429},"_810-json文件","8.10 JSON文件",[14,169432,169433],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[67,169435,169437],{"className":69,"code":169436,"language":71,"meta":58,"style":58},"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",[73,169438,169439,169445,169449,169457,169467,169477,169485,169489,169493,169518],{"__ignoreMap":58},[76,169440,169441,169443],{"class":78,"line":79},[76,169442,90],{"class":89},[76,169444,147132],{"class":93},[76,169446,169447],{"class":78,"line":86},[76,169448,2472],{"emptyLinePlaceholder":125},[76,169450,169451,169453,169455],{"class":78,"line":97},[76,169452,149522],{"class":93},[76,169454,247],{"class":89},[76,169456,15644],{"class":93},[76,169458,169459,169461,169463,169465],{"class":78,"line":103},[76,169460,147061],{"class":305},[76,169462,51507],{"class":93},[76,169464,149929],{"class":305},[76,169466,31536],{"class":93},[76,169468,169469,169471,169473,169475],{"class":78,"line":1273},[76,169470,164578],{"class":305},[76,169472,51507],{"class":93},[76,169474,849],{"class":250},[76,169476,31536],{"class":93},[76,169478,169479,169481,169483],{"class":78,"line":1287},[76,169480,164589],{"class":305},[76,169482,51507],{"class":93},[76,169484,164594],{"class":250},[76,169486,169487],{"class":78,"line":1293},[76,169488,1637],{"class":93},[76,169490,169491],{"class":78,"line":1384},[76,169492,2472],{"emptyLinePlaceholder":125},[76,169494,169495,169497,169499,169502,169504,169506,169508,169510,169512,169514,169516],{"class":78,"line":1390},[76,169496,156485],{"class":93},[76,169498,247],{"class":89},[76,169500,169501],{"class":93}," json.dumps(student, ",[76,169503,147178],{"class":5288},[76,169505,247],{"class":89},[76,169507,34057],{"class":250},[76,169509,12507],{"class":93},[76,169511,152053],{"class":5288},[76,169513,247],{"class":89},[76,169515,278],{"class":250},[76,169517,208],{"class":93},[76,169519,169520,169522],{"class":78,"line":1402},[76,169521,30485],{"class":250},[76,169523,164112],{"class":93},[14,169525,169526],{},"写入 JSON 文件：",[67,169528,169530],{"className":69,"code":169529,"language":71,"meta":58,"style":58},"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",[73,169531,169532,169538,169542,169550,169578,169606,169610,169614,169644],{"__ignoreMap":58},[76,169533,169534,169536],{"class":78,"line":79},[76,169535,90],{"class":89},[76,169537,147132],{"class":93},[76,169539,169540],{"class":78,"line":86},[76,169541,2472],{"emptyLinePlaceholder":125},[76,169543,169544,169546,169548],{"class":78,"line":97},[76,169545,159757],{"class":93},[76,169547,247],{"class":89},[76,169549,55517],{"class":93},[76,169551,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576],{"class":78,"line":103},[76,169553,148426],{"class":93},[76,169555,62749],{"class":305},[76,169557,51507],{"class":93},[76,169559,149929],{"class":305},[76,169561,12507],{"class":93},[76,169563,69194],{"class":305},[76,169565,51507],{"class":93},[76,169567,849],{"class":250},[76,169569,12507],{"class":93},[76,169571,151513],{"class":305},[76,169573,51507],{"class":93},[76,169575,1188],{"class":250},[76,169577,5002],{"class":93},[76,169579,169580,169582,169584,169586,169588,169590,169592,169594,169596,169598,169600,169602,169604],{"class":78,"line":1273},[76,169581,148426],{"class":93},[76,169583,62749],{"class":305},[76,169585,51507],{"class":93},[76,169587,150977],{"class":305},[76,169589,12507],{"class":93},[76,169591,69194],{"class":305},[76,169593,51507],{"class":93},[76,169595,824],{"class":250},[76,169597,12507],{"class":93},[76,169599,151513],{"class":305},[76,169601,51507],{"class":93},[76,169603,1010],{"class":250},[76,169605,5002],{"class":93},[76,169607,169608],{"class":78,"line":1287},[76,169609,33316],{"class":93},[76,169611,169612],{"class":78,"line":1293},[76,169613,2472],{"emptyLinePlaceholder":125},[76,169615,169616,169618,169620,169622,169624,169626,169628,169630,169632,169634,169636,169638,169640,169642],{"class":78,"line":1384},[76,169617,107874],{"class":89},[76,169619,146832],{"class":250},[76,169621,202],{"class":93},[76,169623,151872],{"class":305},[76,169625,12507],{"class":93},[76,169627,152017],{"class":305},[76,169629,12507],{"class":93},[76,169631,146847],{"class":5288},[76,169633,247],{"class":89},[76,169635,146852],{"class":305},[76,169637,13786],{"class":93},[76,169639,31453],{"class":89},[76,169641,148194],{"class":5288},[76,169643,3811],{"class":93},[76,169645,169646,169649,169651,169653,169655,169657,169659,169661,169663,169665,169667],{"class":78,"line":1390},[76,169647,169648],{"class":93},"    json.dump(students, ",[76,169650,45424],{"class":5288},[76,169652,12507],{"class":93},[76,169654,147178],{"class":5288},[76,169656,247],{"class":89},[76,169658,34057],{"class":250},[76,169660,12507],{"class":93},[76,169662,152053],{"class":5288},[76,169664,247],{"class":89},[76,169666,278],{"class":250},[76,169668,208],{"class":93},[14,169670,169671],{},"读取 JSON 文件：",[67,169673,169675],{"className":69,"code":169674,"language":71,"meta":58,"style":58},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[73,169676,169677,169683,169687,169717,169729,169733],{"__ignoreMap":58},[76,169678,169679,169681],{"class":78,"line":79},[76,169680,90],{"class":89},[76,169682,147132],{"class":93},[76,169684,169685],{"class":78,"line":86},[76,169686,2472],{"emptyLinePlaceholder":125},[76,169688,169689,169691,169693,169695,169697,169699,169701,169703,169705,169707,169709,169711,169713,169715],{"class":78,"line":97},[76,169690,107874],{"class":89},[76,169692,146832],{"class":250},[76,169694,202],{"class":93},[76,169696,151872],{"class":305},[76,169698,12507],{"class":93},[76,169700,146842],{"class":305},[76,169702,12507],{"class":93},[76,169704,146847],{"class":5288},[76,169706,247],{"class":89},[76,169708,146852],{"class":305},[76,169710,13786],{"class":93},[76,169712,31453],{"class":89},[76,169714,148194],{"class":5288},[76,169716,3811],{"class":93},[76,169718,169719,169721,169723,169725,169727],{"class":78,"line":103},[76,169720,153078],{"class":93},[76,169722,247],{"class":89},[76,169724,148205],{"class":93},[76,169726,45424],{"class":5288},[76,169728,208],{"class":93},[76,169730,169731],{"class":78,"line":1273},[76,169732,2472],{"emptyLinePlaceholder":125},[76,169734,169735,169737],{"class":78,"line":1287},[76,169736,30485],{"class":250},[76,169738,165036],{"class":93},[140,169740,169742],{"id":169741},"_811-csv文件","8.11 CSV文件",[14,169744,169745],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169747,169748],{},"写入 CSV：",[67,169750,169752],{"className":69,"code":169751,"language":71,"meta":58,"style":58},"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",[73,169753,169754,169761,169765,169773,169791,169807,169823,169827,169831,169871,169885],{"__ignoreMap":58},[76,169755,169756,169758],{"class":78,"line":79},[76,169757,90],{"class":89},[76,169759,169760],{"class":93}," csv\n",[76,169762,169763],{"class":78,"line":86},[76,169764,2472],{"emptyLinePlaceholder":125},[76,169766,169767,169769,169771],{"class":78,"line":97},[76,169768,159757],{"class":93},[76,169770,247],{"class":89},[76,169772,55517],{"class":93},[76,169774,169775,169778,169780,169782,169784,169786,169789],{"class":78,"line":103},[76,169776,169777],{"class":93},"    [",[76,169779,73169],{"class":305},[76,169781,12507],{"class":93},[76,169783,73202],{"class":305},[76,169785,12507],{"class":93},[76,169787,169788],{"class":305},"\"成绩\"",[76,169790,87906],{"class":93},[76,169792,169793,169795,169797,169799,169801,169803,169805],{"class":78,"line":1273},[76,169794,169777],{"class":93},[76,169796,149929],{"class":305},[76,169798,12507],{"class":93},[76,169800,849],{"class":250},[76,169802,12507],{"class":93},[76,169804,1188],{"class":250},[76,169806,87906],{"class":93},[76,169808,169809,169811,169813,169815,169817,169819,169821],{"class":78,"line":1287},[76,169810,169777],{"class":93},[76,169812,150977],{"class":305},[76,169814,12507],{"class":93},[76,169816,824],{"class":250},[76,169818,12507],{"class":93},[76,169820,1010],{"class":250},[76,169822,87906],{"class":93},[76,169824,169825],{"class":78,"line":1293},[76,169826,33316],{"class":93},[76,169828,169829],{"class":78,"line":1384},[76,169830,2472],{"emptyLinePlaceholder":125},[76,169832,169833,169835,169837,169839,169842,169844,169846,169848,169850,169852,169854,169856,169859,169861,169863,169865,169867,169869],{"class":78,"line":1390},[76,169834,107874],{"class":89},[76,169836,146832],{"class":250},[76,169838,202],{"class":93},[76,169840,169841],{"class":305},"\"students.csv\"",[76,169843,12507],{"class":93},[76,169845,152017],{"class":305},[76,169847,12507],{"class":93},[76,169849,146847],{"class":5288},[76,169851,247],{"class":89},[76,169853,146852],{"class":305},[76,169855,12507],{"class":93},[76,169857,169858],{"class":5288},"newline",[76,169860,247],{"class":89},[76,169862,7724],{"class":305},[76,169864,13786],{"class":93},[76,169866,31453],{"class":89},[76,169868,148194],{"class":5288},[76,169870,3811],{"class":93},[76,169872,169873,169876,169878,169881,169883],{"class":78,"line":1402},[76,169874,169875],{"class":93},"    writer ",[76,169877,247],{"class":89},[76,169879,169880],{"class":93}," csv.writer(",[76,169882,45424],{"class":5288},[76,169884,208],{"class":93},[76,169886,169887],{"class":78,"line":1684},[76,169888,169889],{"class":93},"    writer.writerows(students)\n",[14,169891,169892],{},"读取 CSV：",[67,169894,169896],{"className":69,"code":169895,"language":71,"meta":58,"style":58},"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",[73,169897,169898,169904,169908,169938,169952,169964],{"__ignoreMap":58},[76,169899,169900,169902],{"class":78,"line":79},[76,169901,90],{"class":89},[76,169903,169760],{"class":93},[76,169905,169906],{"class":78,"line":86},[76,169907,2472],{"emptyLinePlaceholder":125},[76,169909,169910,169912,169914,169916,169918,169920,169922,169924,169926,169928,169930,169932,169934,169936],{"class":78,"line":97},[76,169911,107874],{"class":89},[76,169913,146832],{"class":250},[76,169915,202],{"class":93},[76,169917,169841],{"class":305},[76,169919,12507],{"class":93},[76,169921,146842],{"class":305},[76,169923,12507],{"class":93},[76,169925,146847],{"class":5288},[76,169927,247],{"class":89},[76,169929,146852],{"class":305},[76,169931,13786],{"class":93},[76,169933,31453],{"class":89},[76,169935,148194],{"class":5288},[76,169937,3811],{"class":93},[76,169939,169940,169943,169945,169948,169950],{"class":78,"line":103},[76,169941,169942],{"class":93},"    reader ",[76,169944,247],{"class":89},[76,169946,169947],{"class":93}," csv.reader(",[76,169949,45424],{"class":5288},[76,169951,208],{"class":93},[76,169953,169954,169956,169959,169961],{"class":78,"line":1273},[76,169955,3273],{"class":89},[76,169957,169958],{"class":93}," row ",[76,169960,26116],{"class":89},[76,169962,169963],{"class":93}," reader:\n",[76,169965,169966,169968],{"class":78,"line":1287},[76,169967,32521],{"class":250},[76,169969,169970],{"class":93},"(row)\n",[14,169972,169973],{},"使用字典写入：",[67,169975,169977],{"className":69,"code":169976,"language":71,"meta":58,"style":58},"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",[73,169978,169979,169985,169989,169997,170025,170053,170057,170061,170099,170120,170141,170146],{"__ignoreMap":58},[76,169980,169981,169983],{"class":78,"line":79},[76,169982,90],{"class":89},[76,169984,169760],{"class":93},[76,169986,169987],{"class":78,"line":86},[76,169988,2472],{"emptyLinePlaceholder":125},[76,169990,169991,169993,169995],{"class":78,"line":97},[76,169992,159757],{"class":93},[76,169994,247],{"class":89},[76,169996,55517],{"class":93},[76,169998,169999,170001,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023],{"class":78,"line":103},[76,170000,148426],{"class":93},[76,170002,62749],{"class":305},[76,170004,51507],{"class":93},[76,170006,149929],{"class":305},[76,170008,12507],{"class":93},[76,170010,69194],{"class":305},[76,170012,51507],{"class":93},[76,170014,849],{"class":250},[76,170016,12507],{"class":93},[76,170018,151513],{"class":305},[76,170020,51507],{"class":93},[76,170022,1188],{"class":250},[76,170024,5002],{"class":93},[76,170026,170027,170029,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051],{"class":78,"line":1273},[76,170028,148426],{"class":93},[76,170030,62749],{"class":305},[76,170032,51507],{"class":93},[76,170034,150977],{"class":305},[76,170036,12507],{"class":93},[76,170038,69194],{"class":305},[76,170040,51507],{"class":93},[76,170042,824],{"class":250},[76,170044,12507],{"class":93},[76,170046,151513],{"class":305},[76,170048,51507],{"class":93},[76,170050,1010],{"class":250},[76,170052,5002],{"class":93},[76,170054,170055],{"class":78,"line":1287},[76,170056,33316],{"class":93},[76,170058,170059],{"class":78,"line":1293},[76,170060,2472],{"emptyLinePlaceholder":125},[76,170062,170063,170065,170067,170069,170071,170073,170075,170077,170079,170081,170083,170085,170087,170089,170091,170093,170095,170097],{"class":78,"line":1384},[76,170064,107874],{"class":89},[76,170066,146832],{"class":250},[76,170068,202],{"class":93},[76,170070,169841],{"class":305},[76,170072,12507],{"class":93},[76,170074,152017],{"class":305},[76,170076,12507],{"class":93},[76,170078,146847],{"class":5288},[76,170080,247],{"class":89},[76,170082,146852],{"class":305},[76,170084,12507],{"class":93},[76,170086,169858],{"class":5288},[76,170088,247],{"class":89},[76,170090,7724],{"class":305},[76,170092,13786],{"class":93},[76,170094,31453],{"class":89},[76,170096,148194],{"class":5288},[76,170098,3811],{"class":93},[76,170100,170101,170104,170106,170108,170110,170112,170114,170116,170118],{"class":78,"line":1390},[76,170102,170103],{"class":93},"    fieldnames ",[76,170105,247],{"class":89},[76,170107,52296],{"class":93},[76,170109,62749],{"class":305},[76,170111,12507],{"class":93},[76,170113,69194],{"class":305},[76,170115,12507],{"class":93},[76,170117,151513],{"class":305},[76,170119,33316],{"class":93},[76,170121,170122,170124,170126,170129,170131,170133,170136,170138],{"class":78,"line":1402},[76,170123,169875],{"class":93},[76,170125,247],{"class":89},[76,170127,170128],{"class":93}," csv.DictWriter(",[76,170130,45424],{"class":5288},[76,170132,12507],{"class":93},[76,170134,170135],{"class":5288},"fieldnames",[76,170137,247],{"class":89},[76,170139,170140],{"class":93},"fieldnames)\n",[76,170142,170143],{"class":78,"line":1684},[76,170144,170145],{"class":93},"    writer.writeheader()\n",[76,170147,170148],{"class":78,"line":1689},[76,170149,169889],{"class":93},[140,170151,170153],{"id":170152},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170155,123333],{},[152,170157,170158,170161,170164],{},[155,170159,170160],{},"读取文本文件。",[155,170162,170163],{},"统计每个单词出现次数。",[155,170165,170166],{},"输出出现次数最多的前 10 个单词。",[14,170168,10107],{},[67,170170,170172],{"className":69,"code":170171,"language":71,"meta":58,"style":58},"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",[73,170173,170174,170184,170188,170201,170217,170221,170231,170240,170244,170256,170276,170285,170289,170307,170311,170341,170345,170361],{"__ignoreMap":58},[76,170175,170176,170178,170180,170182],{"class":78,"line":79},[76,170177,30807],{"class":89},[76,170179,108352],{"class":93},[76,170181,90],{"class":89},[76,170183,108357],{"class":93},[76,170185,170186],{"class":78,"line":86},[76,170187,2472],{"emptyLinePlaceholder":125},[76,170189,170190,170192,170194,170196,170199],{"class":78,"line":97},[76,170191,168352],{"class":93},[76,170193,247],{"class":89},[76,170195,108586],{"class":93},[76,170197,170198],{"class":305},"\"article.txt\"",[76,170200,208],{"class":93},[76,170202,170203,170205,170207,170209,170211,170213,170215],{"class":78,"line":103},[76,170204,168535],{"class":93},[76,170206,247],{"class":89},[76,170208,169412],{"class":93},[76,170210,146847],{"class":5288},[76,170212,247],{"class":89},[76,170214,146852],{"class":305},[76,170216,208],{"class":93},[76,170218,170219],{"class":78,"line":1273},[76,170220,2472],{"emptyLinePlaceholder":125},[76,170222,170223,170226,170228],{"class":78,"line":1287},[76,170224,170225],{"class":93},"words ",[76,170227,247],{"class":89},[76,170229,170230],{"class":93}," content.lower().split()\n",[76,170232,170233,170236,170238],{"class":78,"line":1293},[76,170234,170235],{"class":93},"counter ",[76,170237,247],{"class":89},[76,170239,87938],{"class":93},[76,170241,170242],{"class":78,"line":1384},[76,170243,2472],{"emptyLinePlaceholder":125},[76,170245,170246,170248,170251,170253],{"class":78,"line":1390},[76,170247,3097],{"class":89},[76,170249,170250],{"class":93}," word ",[76,170252,26116],{"class":89},[76,170254,170255],{"class":93}," words:\n",[76,170257,170258,170261,170263,170266,170269,170271,170274],{"class":78,"line":1402},[76,170259,170260],{"class":93},"    word ",[76,170262,247],{"class":89},[76,170264,170265],{"class":93}," word.strip(",[76,170267,170268],{"class":305},"\".,!?;:",[76,170270,156536],{"class":250},[76,170272,170273],{"class":305},"'()[]\"",[76,170275,208],{"class":93},[76,170277,170278,170280,170282],{"class":78,"line":1684},[76,170279,3173],{"class":89},[76,170281,39000],{"class":89},[76,170283,170284],{"class":93}," word:\n",[76,170286,170287],{"class":78,"line":1689},[76,170288,148553],{"class":89},[76,170290,170291,170294,170296,170299,170301,170303,170305],{"class":78,"line":1695},[76,170292,170293],{"class":93},"    counter[word] ",[76,170295,247],{"class":89},[76,170297,170298],{"class":93}," counter.get(word, ",[76,170300,392],{"class":250},[76,170302,13786],{"class":93},[76,170304,681],{"class":89},[76,170306,55769],{"class":250},[76,170308,170309],{"class":78,"line":1700},[76,170310,2472],{"emptyLinePlaceholder":125},[76,170312,170313,170316,170318,170320,170323,170325,170327,170329,170331,170333,170335,170337,170339],{"class":78,"line":1714},[76,170314,170315],{"class":93},"items ",[76,170317,247],{"class":89},[76,170319,163645],{"class":250},[76,170321,170322],{"class":93},"(counter.items(), ",[76,170324,153987],{"class":5288},[76,170326,153990],{"class":89},[76,170328,153993],{"class":93},[76,170330,418],{"class":250},[76,170332,112243],{"class":93},[76,170334,163569],{"class":5288},[76,170336,247],{"class":89},[76,170338,31546],{"class":250},[76,170340,208],{"class":93},[76,170342,170343],{"class":78,"line":1719},[76,170344,2472],{"emptyLinePlaceholder":125},[76,170346,170347,170349,170352,170354,170357,170359],{"class":78,"line":1725},[76,170348,3097],{"class":89},[76,170350,170351],{"class":93}," word, count ",[76,170353,26116],{"class":89},[76,170355,170356],{"class":93}," items[:",[76,170358,646],{"class":250},[76,170360,165796],{"class":93},[76,170362,170363,170365],{"class":78,"line":1746},[76,170364,31369],{"class":250},[76,170366,170367],{"class":93},"(word, count)\n",[140,170369,170371],{"id":170370},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[67,170373,170375],{"className":69,"code":170374,"language":71,"meta":58,"style":58},"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",[73,170376,170377,170383,170393,170397,170409,170413,170417,170425,170435,170441,170445,170475,170485,170489,170493,170501,170531,170555,170559,170563,170571,170600,170605],{"__ignoreMap":58},[76,170378,170379,170381],{"class":78,"line":79},[76,170380,90],{"class":89},[76,170382,147132],{"class":93},[76,170384,170385,170387,170389,170391],{"class":78,"line":86},[76,170386,30807],{"class":89},[76,170388,108352],{"class":93},[76,170390,90],{"class":89},[76,170392,108357],{"class":93},[76,170394,170395],{"class":78,"line":97},[76,170396,2472],{"emptyLinePlaceholder":125},[76,170398,170399,170401,170403,170405,170407],{"class":78,"line":103},[76,170400,151865],{"class":250},[76,170402,13636],{"class":89},[76,170404,108586],{"class":93},[76,170406,151872],{"class":305},[76,170408,208],{"class":93},[76,170410,170411],{"class":78,"line":1273},[76,170412,2472],{"emptyLinePlaceholder":125},[76,170414,170415],{"class":78,"line":1287},[76,170416,2472],{"emptyLinePlaceholder":125},[76,170418,170419,170421,170423],{"class":78,"line":1293},[76,170420,32017],{"class":89},[76,170422,151889],{"class":2035},[76,170424,32023],{"class":93},[76,170426,170427,170429,170431,170433],{"class":78,"line":1384},[76,170428,3173],{"class":89},[76,170430,39000],{"class":89},[76,170432,151900],{"class":250},[76,170434,151903],{"class":93},[76,170436,170437,170439],{"class":78,"line":1390},[76,170438,14824],{"class":89},[76,170440,51908],{"class":93},[76,170442,170443],{"class":78,"line":1402},[76,170444,2472],{"emptyLinePlaceholder":125},[76,170446,170447,170449,170451,170453,170455,170457,170459,170461,170463,170465,170467,170469,170471,170473],{"class":78,"line":1684},[76,170448,34248],{"class":89},[76,170450,146832],{"class":250},[76,170452,202],{"class":93},[76,170454,151865],{"class":250},[76,170456,12507],{"class":93},[76,170458,146842],{"class":305},[76,170460,12507],{"class":93},[76,170462,146847],{"class":5288},[76,170464,247],{"class":89},[76,170466,146852],{"class":305},[76,170468,13786],{"class":93},[76,170470,31453],{"class":89},[76,170472,148194],{"class":5288},[76,170474,3811],{"class":93},[76,170476,170477,170479,170481,170483],{"class":78,"line":1689},[76,170478,14824],{"class":89},[76,170480,148205],{"class":93},[76,170482,45424],{"class":5288},[76,170484,208],{"class":93},[76,170486,170487],{"class":78,"line":1695},[76,170488,2472],{"emptyLinePlaceholder":125},[76,170490,170491],{"class":78,"line":1700},[76,170492,2472],{"emptyLinePlaceholder":125},[76,170494,170495,170497,170499],{"class":78,"line":1714},[76,170496,32017],{"class":89},[76,170498,151999],{"class":2035},[76,170500,152002],{"class":93},[76,170502,170503,170505,170507,170509,170511,170513,170515,170517,170519,170521,170523,170525,170527,170529],{"class":78,"line":1719},[76,170504,34248],{"class":89},[76,170506,146832],{"class":250},[76,170508,202],{"class":93},[76,170510,151865],{"class":250},[76,170512,12507],{"class":93},[76,170514,152017],{"class":305},[76,170516,12507],{"class":93},[76,170518,146847],{"class":5288},[76,170520,247],{"class":89},[76,170522,146852],{"class":305},[76,170524,13786],{"class":93},[76,170526,31453],{"class":89},[76,170528,148194],{"class":5288},[76,170530,3811],{"class":93},[76,170532,170533,170535,170537,170539,170541,170543,170545,170547,170549,170551,170553],{"class":78,"line":1725},[76,170534,152038],{"class":93},[76,170536,45424],{"class":5288},[76,170538,12507],{"class":93},[76,170540,147178],{"class":5288},[76,170542,247],{"class":89},[76,170544,34057],{"class":250},[76,170546,12507],{"class":93},[76,170548,152053],{"class":5288},[76,170550,247],{"class":89},[76,170552,278],{"class":250},[76,170554,208],{"class":93},[76,170556,170557],{"class":78,"line":1746},[76,170558,2472],{"emptyLinePlaceholder":125},[76,170560,170561],{"class":78,"line":1751},[76,170562,2472],{"emptyLinePlaceholder":125},[76,170564,170565,170567,170569],{"class":78,"line":1765},[76,170566,159757],{"class":93},[76,170568,247],{"class":89},[76,170570,153083],{"class":93},[76,170572,170573,170576,170578,170580,170582,170584,170586,170588,170590,170592,170594,170596,170598],{"class":78,"line":1770},[76,170574,170575],{"class":93},"students.append({",[76,170577,62749],{"class":305},[76,170579,51507],{"class":93},[76,170581,149929],{"class":305},[76,170583,12507],{"class":93},[76,170585,69194],{"class":305},[76,170587,51507],{"class":93},[76,170589,849],{"class":250},[76,170591,12507],{"class":93},[76,170593,151513],{"class":305},[76,170595,51507],{"class":93},[76,170597,1188],{"class":250},[76,170599,165193],{"class":93},[76,170601,170602],{"class":78,"line":1799},[76,170603,170604],{"class":93},"save_students(students)\n",[76,170606,170607,170609,170611,170614],{"class":78,"line":1804},[76,170608,30485],{"class":250},[76,170610,202],{"class":93},[76,170612,170613],{"class":305},"\"保存成功\"",[76,170615,208],{"class":93},[140,170617,170619],{"id":170618},"_814-易错点","8.14 易错点",[152,170621,170622,170626,170632,170637,170644,170651],{},[155,170623,170624,168885],{},[73,170625,994],{},[155,170627,170628,170629,28458],{},"读写中文要指定 ",[73,170630,170631],{},"encoding=\"utf-8\"",[155,170633,170634,170635,28458],{},"打开文件后要关闭，推荐使用 ",[73,170636,107874],{},[155,170638,170639,170640,170643],{},"读取大文件不要直接 ",[73,170641,170642],{},"read()"," 全部内容。",[155,170645,170646,170647,170650],{},"Windows 写 CSV 时建议加 ",[73,170648,170649],{},"newline=\"\"","，避免空行。",[155,170652,170653],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[140,170655,170657],{"id":170656},"_815-本章练习","8.15 本章练习",[152,170659,170660,170667,170672,170675,170678],{},[155,170661,170662,170663,170666],{},"写入一个 ",[73,170664,170665],{},"students.txt","，每行保存一个学生姓名。",[155,170668,104396,170669,170671],{},[73,170670,170665],{}," 并输出所有学生。",[155,170673,170674],{},"把学生列表保存为 JSON 文件。",[155,170676,170677],{},"从 JSON 文件读取学生数据，计算平均分。",[155,170679,170680,170681,170684,170685,170688],{},"写一个日志函数 ",[73,170682,170683],{},"write_log(message)","，每次调用向 ",[73,170686,170687],{},"app.log"," 追加一行。",[117,170690,170691],{},"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":58,"searchDepth":86,"depth":86,"links":170693},[170694,170695,170699,170700,170706,170707,170708,170709,170710,170711,170712,170713,170714,170715,170716],{"id":168205,"depth":86,"text":168206},{"id":168246,"depth":86,"text":168247,"children":170696},[170697,170698],{"id":168250,"depth":97,"text":168251},{"id":168284,"depth":97,"text":168285},{"id":168398,"depth":86,"text":168399},{"id":168491,"depth":86,"text":168492,"children":170701},[170702,170703,170704,170705],{"id":168495,"depth":97,"text":168496},{"id":168582,"depth":97,"text":168583},{"id":168652,"depth":97,"text":168653},{"id":168746,"depth":97,"text":168747},{"id":168816,"depth":86,"text":168817},{"id":168879,"depth":86,"text":168880},{"id":169040,"depth":86,"text":169041},{"id":169103,"depth":86,"text":169104},{"id":169219,"depth":86,"text":169220},{"id":169429,"depth":86,"text":169430},{"id":169741,"depth":86,"text":169742},{"id":170152,"depth":86,"text":170153},{"id":170370,"depth":86,"text":170371},{"id":170618,"depth":86,"text":170619},{"id":170656,"depth":86,"text":170657},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168197,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170723,"title":170724,"body":170725,"description":122,"extension":123,"meta":172911,"navigation":125,"path":172912,"seo":172913,"stem":172914,"__hash__":172915},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170726,"toc":172878},[170727,170730,170734,170737,170740,170832,170834,170853,170858,170862,170865,170868,170897,170904,170907,170911,170914,170943,170945,170997,171003,171056,171060,171158,171161,171228,171232,171289,171291,171297,171301,171306,171312,171403,171408,171412,171415,171493,171496,171534,171538,171656,171659,171663,171666,171711,171714,171718,171723,171729,171779,171782,171813,171817,171821,171851,171855,171890,171894,171929,171969,171973,171989,171992,171996,172000,172079,172083,172124,172128,172183,172187,172221,172225,172255,172264,172271,172277,172334,172337,172345,172348,172352,172359,172362,172368,172371,172388,172393,172397,172403,172416,172419,172456,172459,172470,172473,172487,172490,172504,172508,172515,172548,172551,172553,172559,172562,172566,172568,172574,172579,172752,172756,172819,172823,172847,172851,172875],[10,170728,170724],{"id":170729},"_9-异常模块与包",[140,170731,170733],{"id":170732},"_91-什么是异常","9.1 什么是异常",[14,170735,170736],{},"异常是程序运行过程中出现的错误。",[14,170738,170739],{},"常见异常：",[338,170741,170742,170751],{},[341,170743,170744],{},[344,170745,170746,170749],{},[347,170747,170748],{},"异常",[347,170750,25942],{},[385,170752,170753,170763,170773,170782,170792,170802,170812,170822],{},[344,170754,170755,170760],{},[390,170756,170757],{},[73,170758,170759],{},"NameError",[390,170761,170762],{},"使用了未定义变量",[344,170764,170765,170770],{},[390,170766,170767],{},[73,170768,170769],{},"TypeError",[390,170771,170772],{},"类型不匹配",[344,170774,170775,170779],{},[390,170776,170777],{},[73,170778,154875],{},[390,170780,170781],{},"值不合法",[344,170783,170784,170789],{},[390,170785,170786],{},[73,170787,170788],{},"IndexError",[390,170790,170791],{},"列表索引越界",[344,170793,170794,170799],{},[390,170795,170796],{},[73,170797,170798],{},"KeyError",[390,170800,170801],{},"字典 key 不存在",[344,170803,170804,170809],{},[390,170805,170806],{},[73,170807,170808],{},"FileNotFoundError",[390,170810,170811],{},"文件不存在",[344,170813,170814,170819],{},[390,170815,170816],{},[73,170817,170818],{},"ZeroDivisionError",[390,170820,170821],{},"除数为 0",[344,170823,170824,170829],{},[390,170825,170826],{},[73,170827,170828],{},"ImportError",[390,170830,170831],{},"导入失败",[14,170833,15207],{},[67,170835,170837],{"className":69,"code":170836,"language":71,"meta":58,"style":58},"num = int(\"abc\")\n",[73,170838,170839],{"__ignoreMap":58},[76,170840,170841,170843,170845,170847,170849,170851],{"class":78,"line":79},[76,170842,155828],{"class":93},[76,170844,247],{"class":89},[76,170846,2454],{"class":250},[76,170848,202],{"class":93},[76,170850,155921],{"class":305},[76,170852,208],{"class":93},[14,170854,170855,170856,28458],{},"会触发 ",[73,170857,154875],{},[140,170859,170861],{"id":170860},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170863,170864],{},"如果不处理异常，程序会直接终止。",[14,170866,170867],{},"例如用户输入年龄：",[67,170869,170871],{"className":69,"code":170870,"language":71,"meta":58,"style":58},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[73,170872,170873,170891],{"__ignoreMap":58},[76,170874,170875,170877,170879,170881,170883,170885,170887,170889],{"class":78,"line":79},[76,170876,146587],{"class":93},[76,170878,247],{"class":89},[76,170880,2454],{"class":250},[76,170882,202],{"class":93},[76,170884,53891],{"class":250},[76,170886,202],{"class":93},[76,170888,152435],{"class":305},[76,170890,30567],{"class":93},[76,170892,170893,170895],{"class":78,"line":86},[76,170894,30485],{"class":250},[76,170896,155802],{"class":93},[14,170898,170899,170900,170903],{},"用户输入 ",[73,170901,170902],{},"abc","，程序就会报错退出。",[14,170905,170906],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[140,170908,170910],{"id":170909},"_93-try-except","9.3 try except",[14,170912,170913],{},"基础语法：",[67,170915,170917],{"className":69,"code":170916,"language":71,"meta":58,"style":58},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[73,170918,170919,170926,170931,170938],{"__ignoreMap":58},[76,170920,170921,170924],{"class":78,"line":79},[76,170922,170923],{"class":89},"try",[76,170925,3811],{"class":93},[76,170927,170928],{"class":78,"line":86},[76,170929,170930],{"class":93},"    可能出错的代码\n",[76,170932,170933,170936],{"class":78,"line":97},[76,170934,170935],{"class":89},"except",[76,170937,3811],{"class":93},[76,170939,170940],{"class":78,"line":103},[76,170941,170942],{"class":93},"    出错后的处理代码\n",[14,170944,15207],{},[67,170946,170948],{"className":69,"code":170947,"language":71,"meta":58,"style":58},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[73,170949,170950,170956,170974,170980,170986],{"__ignoreMap":58},[76,170951,170952,170954],{"class":78,"line":79},[76,170953,170923],{"class":89},[76,170955,3811],{"class":93},[76,170957,170958,170960,170962,170964,170966,170968,170970,170972],{"class":78,"line":86},[76,170959,152427],{"class":93},[76,170961,247],{"class":89},[76,170963,2454],{"class":250},[76,170965,202],{"class":93},[76,170967,53891],{"class":250},[76,170969,202],{"class":93},[76,170971,152435],{"class":305},[76,170973,30567],{"class":93},[76,170975,170976,170978],{"class":78,"line":97},[76,170977,31369],{"class":250},[76,170979,155802],{"class":93},[76,170981,170982,170984],{"class":78,"line":103},[76,170983,170935],{"class":89},[76,170985,3811],{"class":93},[76,170987,170988,170990,170992,170995],{"class":78,"line":1273},[76,170989,31369],{"class":250},[76,170991,202],{"class":93},[76,170993,170994],{"class":305},"\"年龄必须是数字\"",[76,170996,208],{"class":93},[14,170998,170999,171000,171002],{},"不建议裸写 ",[73,171001,170935],{},"，最好指定异常类型。",[67,171004,171006],{"className":69,"code":171005,"language":71,"meta":58,"style":58},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[73,171007,171008,171014,171032,171038,171046],{"__ignoreMap":58},[76,171009,171010,171012],{"class":78,"line":79},[76,171011,170923],{"class":89},[76,171013,3811],{"class":93},[76,171015,171016,171018,171020,171022,171024,171026,171028,171030],{"class":78,"line":86},[76,171017,152427],{"class":93},[76,171019,247],{"class":89},[76,171021,2454],{"class":250},[76,171023,202],{"class":93},[76,171025,53891],{"class":250},[76,171027,202],{"class":93},[76,171029,152435],{"class":305},[76,171031,30567],{"class":93},[76,171033,171034,171036],{"class":78,"line":97},[76,171035,31369],{"class":250},[76,171037,155802],{"class":93},[76,171039,171040,171042,171044],{"class":78,"line":103},[76,171041,170935],{"class":89},[76,171043,152267],{"class":250},[76,171045,3811],{"class":93},[76,171047,171048,171050,171052,171054],{"class":78,"line":1273},[76,171049,31369],{"class":250},[76,171051,202],{"class":93},[76,171053,170994],{"class":305},[76,171055,208],{"class":93},[140,171057,171059],{"id":171058},"_94-捕获多个异常","9.4 捕获多个异常",[67,171061,171063],{"className":69,"code":171062,"language":71,"meta":58,"style":58},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[73,171064,171065,171071,171092,171112,171119,171127,171138,171147],{"__ignoreMap":58},[76,171066,171067,171069],{"class":78,"line":79},[76,171068,170923],{"class":89},[76,171070,3811],{"class":93},[76,171072,171073,171076,171078,171080,171082,171084,171086,171088,171090],{"class":78,"line":86},[76,171074,171075],{"class":93},"    nums ",[76,171077,247],{"class":89},[76,171079,52296],{"class":93},[76,171081,418],{"class":250},[76,171083,12507],{"class":93},[76,171085,278],{"class":250},[76,171087,12507],{"class":93},[76,171089,272],{"class":250},[76,171091,33316],{"class":93},[76,171093,171094,171097,171099,171101,171103,171105,171107,171110],{"class":78,"line":97},[76,171095,171096],{"class":93},"    index ",[76,171098,247],{"class":89},[76,171100,2454],{"class":250},[76,171102,202],{"class":93},[76,171104,53891],{"class":250},[76,171106,202],{"class":93},[76,171108,171109],{"class":305},"\"请输入索引:\"",[76,171111,30567],{"class":93},[76,171113,171114,171116],{"class":78,"line":103},[76,171115,31369],{"class":250},[76,171117,171118],{"class":93},"(nums[index])\n",[76,171120,171121,171123,171125],{"class":78,"line":1273},[76,171122,170935],{"class":89},[76,171124,152267],{"class":250},[76,171126,3811],{"class":93},[76,171128,171129,171131,171133,171136],{"class":78,"line":1287},[76,171130,31369],{"class":250},[76,171132,202],{"class":93},[76,171134,171135],{"class":305},"\"索引必须是整数\"",[76,171137,208],{"class":93},[76,171139,171140,171142,171145],{"class":78,"line":1293},[76,171141,170935],{"class":89},[76,171143,171144],{"class":250}," IndexError",[76,171146,3811],{"class":93},[76,171148,171149,171151,171153,171156],{"class":78,"line":1384},[76,171150,31369],{"class":250},[76,171152,202],{"class":93},[76,171154,171155],{"class":305},"\"索引越界\"",[76,171157,208],{"class":93},[14,171159,171160],{},"多个异常使用相同处理逻辑：",[67,171162,171164],{"className":69,"code":171163,"language":71,"meta":58,"style":58},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[73,171165,171166,171172,171190,171203,171217],{"__ignoreMap":58},[76,171167,171168,171170],{"class":78,"line":79},[76,171169,170923],{"class":89},[76,171171,3811],{"class":93},[76,171173,171174,171176,171178,171180,171182,171184,171186,171188],{"class":78,"line":86},[76,171175,45663],{"class":93},[76,171177,247],{"class":89},[76,171179,2454],{"class":250},[76,171181,202],{"class":93},[76,171183,53891],{"class":250},[76,171185,202],{"class":93},[76,171187,155837],{"class":305},[76,171189,30567],{"class":93},[76,171191,171192,171194,171196,171198,171200],{"class":78,"line":97},[76,171193,31369],{"class":250},[76,171195,202],{"class":93},[76,171197,646],{"class":250},[76,171199,156087],{"class":89},[76,171201,171202],{"class":93}," num)\n",[76,171204,171205,171207,171209,171211,171213,171215],{"class":78,"line":103},[76,171206,170935],{"class":89},[76,171208,1730],{"class":93},[76,171210,154875],{"class":250},[76,171212,12507],{"class":93},[76,171214,170818],{"class":250},[76,171216,30856],{"class":93},[76,171218,171219,171221,171223,171226],{"class":78,"line":1273},[76,171220,31369],{"class":250},[76,171222,202],{"class":93},[76,171224,171225],{"class":305},"\"输入不合法\"",[76,171227,208],{"class":93},[140,171229,171231],{"id":171230},"_95-获取异常信息","9.5 获取异常信息",[67,171233,171235],{"className":69,"code":171234,"language":71,"meta":58,"style":58},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[73,171236,171237,171243,171257,171268],{"__ignoreMap":58},[76,171238,171239,171241],{"class":78,"line":79},[76,171240,170923],{"class":89},[76,171242,3811],{"class":93},[76,171244,171245,171247,171249,171251,171253,171255],{"class":78,"line":86},[76,171246,45663],{"class":93},[76,171248,247],{"class":89},[76,171250,2454],{"class":250},[76,171252,202],{"class":93},[76,171254,155921],{"class":305},[76,171256,208],{"class":93},[76,171258,171259,171261,171263,171265],{"class":78,"line":97},[76,171260,170935],{"class":89},[76,171262,152267],{"class":250},[76,171264,64674],{"class":89},[76,171266,171267],{"class":93}," e:\n",[76,171269,171270,171272,171274,171276,171279,171281,171283,171285,171287],{"class":78,"line":103},[76,171271,31369],{"class":250},[76,171273,202],{"class":93},[76,171275,254],{"class":89},[76,171277,171278],{"class":305},"\"出错了:",[76,171280,1095],{"class":250},[76,171282,275],{"class":93},[76,171284,1145],{"class":250},[76,171286,452],{"class":305},[76,171288,208],{"class":93},[14,171290,146498],{},[67,171292,171295],{"className":171293,"code":171294,"language":5259,"meta":58},[5257],"出错了:invalid literal for int() with base 10: 'abc'\n",[73,171296,171294],{"__ignoreMap":58},[140,171298,171300],{"id":171299},"_96-else和finally","9.6 else和finally",[14,171302,171303,171305],{},[73,171304,1773],{},"：没有异常时执行。",[14,171307,171308,171311],{},[73,171309,171310],{},"finally","：无论是否异常都会执行。",[67,171313,171315],{"className":69,"code":171314,"language":71,"meta":58,"style":58},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[73,171316,171317,171323,171341,171349,171359,171365,171386,171392],{"__ignoreMap":58},[76,171318,171319,171321],{"class":78,"line":79},[76,171320,170923],{"class":89},[76,171322,3811],{"class":93},[76,171324,171325,171327,171329,171331,171333,171335,171337,171339],{"class":78,"line":86},[76,171326,45663],{"class":93},[76,171328,247],{"class":89},[76,171330,2454],{"class":250},[76,171332,202],{"class":93},[76,171334,53891],{"class":250},[76,171336,202],{"class":93},[76,171338,155837],{"class":305},[76,171340,30567],{"class":93},[76,171342,171343,171345,171347],{"class":78,"line":97},[76,171344,170935],{"class":89},[76,171346,152267],{"class":250},[76,171348,3811],{"class":93},[76,171350,171351,171353,171355,171357],{"class":78,"line":103},[76,171352,31369],{"class":250},[76,171354,202],{"class":93},[76,171356,153255],{"class":305},[76,171358,208],{"class":93},[76,171360,171361,171363],{"class":78,"line":1273},[76,171362,1773],{"class":89},[76,171364,3811],{"class":93},[76,171366,171367,171369,171371,171373,171376,171378,171380,171382,171384],{"class":78,"line":1287},[76,171368,31369],{"class":250},[76,171370,202],{"class":93},[76,171372,254],{"class":89},[76,171374,171375],{"class":305},"\"输入正确:",[76,171377,1095],{"class":250},[76,171379,1737],{"class":93},[76,171381,1145],{"class":250},[76,171383,452],{"class":305},[76,171385,208],{"class":93},[76,171387,171388,171390],{"class":78,"line":1293},[76,171389,171310],{"class":89},[76,171391,3811],{"class":93},[76,171393,171394,171396,171398,171401],{"class":78,"line":1384},[76,171395,31369],{"class":250},[76,171397,202],{"class":93},[76,171399,171400],{"class":305},"\"程序结束\"",[76,171402,208],{"class":93},[14,171404,171405,171407],{},[73,171406,171310],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[140,171409,171411],{"id":171410},"_97-抛出异常","9.7 抛出异常",[14,171413,171414],{},"程序可以主动抛出异常。",[67,171416,171418],{"className":69,"code":171417,"language":71,"meta":58,"style":58},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[73,171419,171420,171429,171441,171454,171474,171478,171482],{"__ignoreMap":58},[76,171421,171422,171424,171427],{"class":78,"line":79},[76,171423,32017],{"class":89},[76,171425,171426],{"class":2035}," set_age",[76,171428,161456],{"class":93},[76,171430,171431,171433,171435,171437,171439],{"class":78,"line":86},[76,171432,3173],{"class":89},[76,171434,15779],{"class":93},[76,171436,1109],{"class":89},[76,171438,4165],{"class":250},[76,171440,3811],{"class":93},[76,171442,171443,171445,171447,171449,171452],{"class":78,"line":97},[76,171444,103473],{"class":89},[76,171446,152267],{"class":250},[76,171448,202],{"class":93},[76,171450,171451],{"class":305},"\"年龄不能为负数\"",[76,171453,208],{"class":93},[76,171455,171456,171458,171460,171462,171464,171466,171468,171470,171472],{"class":78,"line":103},[76,171457,31369],{"class":250},[76,171459,202],{"class":93},[76,171461,254],{"class":89},[76,171463,162024],{"class":305},[76,171465,1095],{"class":250},[76,171467,70291],{"class":93},[76,171469,1145],{"class":250},[76,171471,452],{"class":305},[76,171473,208],{"class":93},[76,171475,171476],{"class":78,"line":1273},[76,171477,2472],{"emptyLinePlaceholder":125},[76,171479,171480],{"class":78,"line":1287},[76,171481,2472],{"emptyLinePlaceholder":125},[76,171483,171484,171487,171489,171491],{"class":78,"line":1293},[76,171485,171486],{"class":93},"set_age(",[76,171488,112],{"class":89},[76,171490,418],{"class":250},[76,171492,208],{"class":93},[14,171494,171495],{},"调用者可以捕获：",[67,171497,171499],{"className":69,"code":171498,"language":71,"meta":58,"style":58},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[73,171500,171501,171507,171518,171528],{"__ignoreMap":58},[76,171502,171503,171505],{"class":78,"line":79},[76,171504,170923],{"class":89},[76,171506,3811],{"class":93},[76,171508,171509,171512,171514,171516],{"class":78,"line":86},[76,171510,171511],{"class":93},"    set_age(",[76,171513,112],{"class":89},[76,171515,418],{"class":250},[76,171517,208],{"class":93},[76,171519,171520,171522,171524,171526],{"class":78,"line":97},[76,171521,170935],{"class":89},[76,171523,152267],{"class":250},[76,171525,64674],{"class":89},[76,171527,171267],{"class":93},[76,171529,171530,171532],{"class":78,"line":103},[76,171531,31369],{"class":250},[76,171533,67069],{"class":93},[140,171535,171537],{"id":171536},"_98-自定义异常","9.8 自定义异常",[67,171539,171541],{"className":69,"code":171540,"language":71,"meta":58,"style":58},"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",[73,171542,171543,171557,171561,171565,171569,171577,171587,171598,171608,171612,171616,171622,171639,171650],{"__ignoreMap":58},[76,171544,171545,171547,171550,171552,171555],{"class":78,"line":79},[76,171546,14766],{"class":89},[76,171548,171549],{"class":2035}," BalanceNotEnoughError",[76,171551,202],{"class":93},[76,171553,171554],{"class":250},"Exception",[76,171556,30856],{"class":93},[76,171558,171559],{"class":78,"line":86},[76,171560,149578],{"class":89},[76,171562,171563],{"class":78,"line":97},[76,171564,2472],{"emptyLinePlaceholder":125},[76,171566,171567],{"class":78,"line":103},[76,171568,2472],{"emptyLinePlaceholder":125},[76,171570,171571,171573,171575],{"class":78,"line":1273},[76,171572,32017],{"class":89},[76,171574,150227],{"class":2035},[76,171576,162853],{"class":93},[76,171578,171579,171581,171583,171585],{"class":78,"line":1287},[76,171580,3173],{"class":89},[76,171582,150183],{"class":93},[76,171584,1159],{"class":89},[76,171586,162630],{"class":93},[76,171588,171589,171591,171594,171596],{"class":78,"line":1293},[76,171590,103473],{"class":89},[76,171592,171593],{"class":93}," BalanceNotEnoughError(",[76,171595,150278],{"class":305},[76,171597,208],{"class":93},[76,171599,171600,171602,171604,171606],{"class":78,"line":1384},[76,171601,4162],{"class":89},[76,171603,162860],{"class":93},[76,171605,112],{"class":89},[76,171607,150216],{"class":93},[76,171609,171610],{"class":78,"line":1390},[76,171611,2472],{"emptyLinePlaceholder":125},[76,171613,171614],{"class":78,"line":1402},[76,171615,2472],{"emptyLinePlaceholder":125},[76,171617,171618,171620],{"class":78,"line":1684},[76,171619,170923],{"class":89},[76,171621,3811],{"class":93},[76,171623,171624,171626,171628,171631,171633,171635,171637],{"class":78,"line":1689},[76,171625,162531],{"class":93},[76,171627,247],{"class":89},[76,171629,171630],{"class":93}," withdraw(",[76,171632,512],{"class":250},[76,171634,12507],{"class":93},[76,171636,1794],{"class":250},[76,171638,208],{"class":93},[76,171640,171641,171643,171646,171648],{"class":78,"line":1695},[76,171642,170935],{"class":89},[76,171644,171645],{"class":93}," BalanceNotEnoughError ",[76,171647,31453],{"class":89},[76,171649,171267],{"class":93},[76,171651,171652,171654],{"class":78,"line":1700},[76,171653,31369],{"class":250},[76,171655,67069],{"class":93},[14,171657,171658],{},"入门阶段大多数情况使用内置异常即可。",[140,171660,171662],{"id":171661},"_99-traceback","9.9 traceback",[14,171664,171665],{},"调试时可以输出完整异常堆栈。",[67,171667,171669],{"className":69,"code":171668,"language":71,"meta":58,"style":58},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[73,171670,171671,171678,171682,171688,171698,171706],{"__ignoreMap":58},[76,171672,171673,171675],{"class":78,"line":79},[76,171674,90],{"class":89},[76,171676,171677],{"class":93}," traceback\n",[76,171679,171680],{"class":78,"line":86},[76,171681,2472],{"emptyLinePlaceholder":125},[76,171683,171684,171686],{"class":78,"line":97},[76,171685,170923],{"class":89},[76,171687,3811],{"class":93},[76,171689,171690,171692,171694,171696],{"class":78,"line":103},[76,171691,2057],{"class":250},[76,171693,202],{"class":93},[76,171695,155921],{"class":305},[76,171697,208],{"class":93},[76,171699,171700,171702,171704],{"class":78,"line":1273},[76,171701,170935],{"class":89},[76,171703,152267],{"class":250},[76,171705,3811],{"class":93},[76,171707,171708],{"class":78,"line":1287},[76,171709,171710],{"class":93},"    traceback.print_exc()\n",[14,171712,171713],{},"日志系统中常把异常堆栈记录到文件。",[140,171715,171717],{"id":171716},"_910-什么是模块","9.10 什么是模块",[14,171719,171720,171721,126024],{},"模块就是一个 ",[73,171722,146393],{},[14,171724,171725,171726,24691],{},"例如创建 ",[73,171727,171728],{},"my_math.py",[67,171730,171732],{"className":69,"code":171731,"language":71,"meta":58,"style":58},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[73,171733,171734,171742,171752,171756,171760,171769],{"__ignoreMap":58},[76,171735,171736,171738,171740],{"class":78,"line":79},[76,171737,32017],{"class":89},[76,171739,5281],{"class":2035},[76,171741,151134],{"class":93},[76,171743,171744,171746,171748,171750],{"class":78,"line":86},[76,171745,4162],{"class":89},[76,171747,10941],{"class":93},[76,171749,681],{"class":89},[76,171751,151145],{"class":93},[76,171753,171754],{"class":78,"line":97},[76,171755,2472],{"emptyLinePlaceholder":125},[76,171757,171758],{"class":78,"line":103},[76,171759,2472],{"emptyLinePlaceholder":125},[76,171761,171762,171764,171767],{"class":78,"line":1273},[76,171763,32017],{"class":89},[76,171765,171766],{"class":2035}," sub",[76,171768,151134],{"class":93},[76,171770,171771,171773,171775,171777],{"class":78,"line":1287},[76,171772,4162],{"class":89},[76,171774,10941],{"class":93},[76,171776,112],{"class":89},[76,171778,151145],{"class":93},[14,171780,171781],{},"在另一个文件中导入：",[67,171783,171785],{"className":69,"code":171784,"language":71,"meta":58,"style":58},"import my_math\n\nprint(my_math.add(1, 2))\n",[73,171786,171787,171794,171798],{"__ignoreMap":58},[76,171788,171789,171791],{"class":78,"line":79},[76,171790,90],{"class":89},[76,171792,171793],{"class":93}," my_math\n",[76,171795,171796],{"class":78,"line":86},[76,171797,2472],{"emptyLinePlaceholder":125},[76,171799,171800,171802,171805,171807,171809,171811],{"class":78,"line":97},[76,171801,30485],{"class":250},[76,171803,171804],{"class":93},"(my_math.add(",[76,171806,418],{"class":250},[76,171808,12507],{"class":93},[76,171810,278],{"class":250},[76,171812,30567],{"class":93},[140,171814,171816],{"id":171815},"_911-import导入","9.11 import导入",[169,171818,171820],{"id":171819},"_9111-导入模块","9.11.1 导入模块",[67,171822,171824],{"className":69,"code":171823,"language":71,"meta":58,"style":58},"import random\n\nprint(random.randint(1, 10))\n",[73,171825,171826,171832,171836],{"__ignoreMap":58},[76,171827,171828,171830],{"class":78,"line":79},[76,171829,90],{"class":89},[76,171831,45398],{"class":93},[76,171833,171834],{"class":78,"line":86},[76,171835,2472],{"emptyLinePlaceholder":125},[76,171837,171838,171840,171843,171845,171847,171849],{"class":78,"line":97},[76,171839,30485],{"class":250},[76,171841,171842],{"class":93},"(random.randint(",[76,171844,418],{"class":250},[76,171846,12507],{"class":93},[76,171848,646],{"class":250},[76,171850,30567],{"class":93},[169,171852,171854],{"id":171853},"_9112-导入指定内容","9.11.2 导入指定内容",[67,171856,171858],{"className":69,"code":171857,"language":71,"meta":58,"style":58},"from random import randint\n\nprint(randint(1, 10))\n",[73,171859,171860,171871,171875],{"__ignoreMap":58},[76,171861,171862,171864,171866,171868],{"class":78,"line":79},[76,171863,30807],{"class":89},[76,171865,57866],{"class":93},[76,171867,90],{"class":89},[76,171869,171870],{"class":93}," randint\n",[76,171872,171873],{"class":78,"line":86},[76,171874,2472],{"emptyLinePlaceholder":125},[76,171876,171877,171879,171882,171884,171886,171888],{"class":78,"line":97},[76,171878,30485],{"class":250},[76,171880,171881],{"class":93},"(randint(",[76,171883,418],{"class":250},[76,171885,12507],{"class":93},[76,171887,646],{"class":250},[76,171889,30567],{"class":93},[169,171891,171893],{"id":171892},"_9113-起别名","9.11.3 起别名",[67,171895,171897],{"className":69,"code":171896,"language":71,"meta":58,"style":58},"import random as rd\n\nprint(rd.randint(1, 10))\n",[73,171898,171899,171910,171914],{"__ignoreMap":58},[76,171900,171901,171903,171905,171907],{"class":78,"line":79},[76,171902,90],{"class":89},[76,171904,57866],{"class":93},[76,171906,31453],{"class":89},[76,171908,171909],{"class":93}," rd\n",[76,171911,171912],{"class":78,"line":86},[76,171913,2472],{"emptyLinePlaceholder":125},[76,171915,171916,171918,171921,171923,171925,171927],{"class":78,"line":97},[76,171917,30485],{"class":250},[76,171919,171920],{"class":93},"(rd.randint(",[76,171922,418],{"class":250},[76,171924,12507],{"class":93},[76,171926,646],{"class":250},[76,171928,30567],{"class":93},[67,171930,171932],{"className":69,"code":171931,"language":71,"meta":58,"style":58},"from random import randint as rint\n\nprint(rint(1, 10))\n",[73,171933,171934,171950,171954],{"__ignoreMap":58},[76,171935,171936,171938,171940,171942,171945,171947],{"class":78,"line":79},[76,171937,30807],{"class":89},[76,171939,57866],{"class":93},[76,171941,90],{"class":89},[76,171943,171944],{"class":93}," randint ",[76,171946,31453],{"class":89},[76,171948,171949],{"class":93}," rint\n",[76,171951,171952],{"class":78,"line":86},[76,171953,2472],{"emptyLinePlaceholder":125},[76,171955,171956,171958,171961,171963,171965,171967],{"class":78,"line":97},[76,171957,30485],{"class":250},[76,171959,171960],{"class":93},"(rint(",[76,171962,418],{"class":250},[76,171964,12507],{"class":93},[76,171966,646],{"class":250},[76,171968,30567],{"class":93},[169,171970,171972],{"id":171971},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[67,171974,171976],{"className":69,"code":171975,"language":71,"meta":58,"style":58},"from random import *\n",[73,171977,171978],{"__ignoreMap":58},[76,171979,171980,171982,171984,171986],{"class":78,"line":79},[76,171981,30807],{"class":89},[76,171983,57866],{"class":93},[76,171985,90],{"class":89},[76,171987,171988],{"class":89}," *\n",[14,171990,171991],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[140,171993,171995],{"id":171994},"_912-常用内置模块","9.12 常用内置模块",[169,171997,171999],{"id":171998},"_9121-random","9.12.1 random",[67,172001,172003],{"className":69,"code":172002,"language":71,"meta":58,"style":58},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[73,172004,172005,172011,172015,172029,172048],{"__ignoreMap":58},[76,172006,172007,172009],{"class":78,"line":79},[76,172008,90],{"class":89},[76,172010,45398],{"class":93},[76,172012,172013],{"class":78,"line":86},[76,172014,2472],{"emptyLinePlaceholder":125},[76,172016,172017,172019,172021,172023,172025,172027],{"class":78,"line":97},[76,172018,30485],{"class":250},[76,172020,171842],{"class":93},[76,172022,418],{"class":250},[76,172024,12507],{"class":93},[76,172026,646],{"class":250},[76,172028,30567],{"class":93},[76,172030,172031,172033,172036,172038,172040,172042,172044,172046],{"class":78,"line":103},[76,172032,30485],{"class":250},[76,172034,172035],{"class":93},"(random.choice([",[76,172037,149929],{"class":305},[76,172039,12507],{"class":93},[76,172041,150977],{"class":305},[76,172043,12507],{"class":93},[76,172045,159772],{"class":305},[76,172047,33213],{"class":93},[76,172049,172050,172052,172055,172057,172059,172061,172063,172065,172067,172069,172071,172073,172075,172077],{"class":78,"line":1273},[76,172051,30485],{"class":250},[76,172053,172054],{"class":93},"(random.sample([",[76,172056,418],{"class":250},[76,172058,12507],{"class":93},[76,172060,278],{"class":250},[76,172062,12507],{"class":93},[76,172064,272],{"class":250},[76,172066,12507],{"class":93},[76,172068,494],{"class":250},[76,172070,12507],{"class":93},[76,172072,520],{"class":250},[76,172074,112243],{"class":93},[76,172076,278],{"class":250},[76,172078,30567],{"class":93},[169,172080,172082],{"id":172081},"_9122-time","9.12.2 time",[67,172084,172086],{"className":69,"code":172085,"language":71,"meta":58,"style":58},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[73,172087,172088,172094,172098,172105,172113],{"__ignoreMap":58},[76,172089,172090,172092],{"class":78,"line":79},[76,172091,90],{"class":89},[76,172093,31899],{"class":93},[76,172095,172096],{"class":78,"line":86},[76,172097,2472],{"emptyLinePlaceholder":125},[76,172099,172100,172102],{"class":78,"line":97},[76,172101,30485],{"class":250},[76,172103,172104],{"class":93},"(time.time())\n",[76,172106,172107,172109,172111],{"class":78,"line":103},[76,172108,95141],{"class":93},[76,172110,418],{"class":250},[76,172112,208],{"class":93},[76,172114,172115,172117,172119,172122],{"class":78,"line":1273},[76,172116,30485],{"class":250},[76,172118,202],{"class":93},[76,172120,172121],{"class":305},"\"1秒后执行\"",[76,172123,208],{"class":93},[169,172125,172127],{"id":172126},"_9123-datetime","9.12.3 datetime",[67,172129,172131],{"className":69,"code":172130,"language":71,"meta":58,"style":58},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[73,172132,172133,172145,172149,172159,172166],{"__ignoreMap":58},[76,172134,172135,172137,172140,172142],{"class":78,"line":79},[76,172136,30807],{"class":89},[76,172138,172139],{"class":93}," datetime ",[76,172141,90],{"class":89},[76,172143,172144],{"class":93}," datetime\n",[76,172146,172147],{"class":78,"line":86},[76,172148,2472],{"emptyLinePlaceholder":125},[76,172150,172151,172154,172156],{"class":78,"line":97},[76,172152,172153],{"class":93},"now ",[76,172155,247],{"class":89},[76,172157,172158],{"class":93}," datetime.now()\n",[76,172160,172161,172163],{"class":78,"line":103},[76,172162,30485],{"class":250},[76,172164,172165],{"class":93},"(now)\n",[76,172167,172168,172170,172173,172176,172178,172181],{"class":78,"line":1273},[76,172169,30485],{"class":250},[76,172171,172172],{"class":93},"(now.strftime(",[76,172174,172175],{"class":305},"\"%Y-%m-",[76,172177,156732],{"class":250},[76,172179,172180],{"class":305}," %H:%M:%S\"",[76,172182,30567],{"class":93},[169,172184,172186],{"id":172185},"_9124-os","9.12.4 os",[67,172188,172190],{"className":69,"code":172189,"language":71,"meta":58,"style":58},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[73,172191,172192,172198,172202,172209],{"__ignoreMap":58},[76,172193,172194,172196],{"class":78,"line":79},[76,172195,90],{"class":89},[76,172197,45375],{"class":93},[76,172199,172200],{"class":78,"line":86},[76,172201,2472],{"emptyLinePlaceholder":125},[76,172203,172204,172206],{"class":78,"line":97},[76,172205,30485],{"class":250},[76,172207,172208],{"class":93},"(os.getcwd())\n",[76,172210,172211,172213,172216,172219],{"class":78,"line":103},[76,172212,30485],{"class":250},[76,172214,172215],{"class":93},"(os.listdir(",[76,172217,172218],{"class":305},"\".\"",[76,172220,30567],{"class":93},[169,172222,172224],{"id":172223},"_9125-sys","9.12.5 sys",[67,172226,172228],{"className":69,"code":172227,"language":71,"meta":58,"style":58},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[73,172229,172230,172237,172241,172248],{"__ignoreMap":58},[76,172231,172232,172234],{"class":78,"line":79},[76,172233,90],{"class":89},[76,172235,172236],{"class":93}," sys\n",[76,172238,172239],{"class":78,"line":86},[76,172240,2472],{"emptyLinePlaceholder":125},[76,172242,172243,172245],{"class":78,"line":97},[76,172244,30485],{"class":250},[76,172246,172247],{"class":93},"(sys.version)\n",[76,172249,172250,172252],{"class":78,"line":103},[76,172251,30485],{"class":250},[76,172253,172254],{"class":93},"(sys.path)\n",[140,172256,172258,172259,172261,172262,452],{"id":172257},"_913-if-name-main","9.13 if ",[350,172260,79880],{}," == \"",[350,172263,102099],{},[14,172265,172266,172267,172270],{},"模块被直接运行和被导入时，",[73,172268,172269],{},"__name__"," 的值不同。",[14,172272,172273,172274,24691],{},"创建 ",[73,172275,172276],{},"my_module.py",[67,172278,172280],{"className":69,"code":172279,"language":71,"meta":58,"style":58},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[73,172281,172282,172290,172300,172304,172308,172320],{"__ignoreMap":58},[76,172283,172284,172286,172288],{"class":78,"line":79},[76,172285,32017],{"class":89},[76,172287,5281],{"class":2035},[76,172289,151134],{"class":93},[76,172291,172292,172294,172296,172298],{"class":78,"line":86},[76,172293,4162],{"class":89},[76,172295,10941],{"class":93},[76,172297,681],{"class":89},[76,172299,151145],{"class":93},[76,172301,172302],{"class":78,"line":97},[76,172303,2472],{"emptyLinePlaceholder":125},[76,172305,172306],{"class":78,"line":103},[76,172307,2472],{"emptyLinePlaceholder":125},[76,172309,172310,172312,172314,172316,172318],{"class":78,"line":1273},[76,172311,1603],{"class":89},[76,172313,31290],{"class":250},[76,172315,101600],{"class":89},[76,172317,101603],{"class":305},[76,172319,3811],{"class":93},[76,172321,172322,172324,172326,172328,172330,172332],{"class":78,"line":1287},[76,172323,31369],{"class":250},[76,172325,166641],{"class":93},[76,172327,418],{"class":250},[76,172329,12507],{"class":93},[76,172331,278],{"class":250},[76,172333,30567],{"class":93},[14,172335,172336],{},"作用：",[152,172338,172339,172342],{},[155,172340,172341],{},"直接运行该文件时，执行测试代码。",[155,172343,172344],{},"被其他文件导入时，不执行测试代码。",[14,172346,172347],{},"这是写模块时很常用的习惯。",[140,172349,172351],{"id":172350},"_914-包","9.14 包",[14,172353,172354,172355,172358],{},"包是包含 ",[73,172356,172357],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172360,172361],{},"目录结构：",[67,172363,172366],{"className":172364,"code":172365,"language":5259,"meta":58},[5257],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[73,172367,172365],{"__ignoreMap":58},[14,172369,172370],{},"导入：",[67,172372,172374],{"className":69,"code":172373,"language":71,"meta":58,"style":58},"from utils.file_utils import read_file\n",[73,172375,172376],{"__ignoreMap":58},[76,172377,172378,172380,172383,172385],{"class":78,"line":79},[76,172379,30807],{"class":89},[76,172381,172382],{"class":93}," utils.file_utils ",[76,172384,90],{"class":89},[76,172386,172387],{"class":93}," read_file\n",[14,172389,172390,172392],{},[73,172391,172357],{}," 可以为空，也可以写包初始化逻辑。",[140,172394,172396],{"id":172395},"_915-第三方包","9.15 第三方包",[14,172398,172399,172400,172402],{},"第三方包通过 ",[73,172401,23903],{}," 安装。",[67,172404,172406],{"className":23894,"code":172405,"language":23896,"meta":58,"style":58},"pip install requests\n",[73,172407,172408],{"__ignoreMap":58},[76,172409,172410,172412,172414],{"class":78,"line":79},[76,172411,23903],{"class":2035},[76,172413,23906],{"class":305},[76,172415,146139],{"class":305},[14,172417,172418],{},"使用：",[67,172420,172422],{"className":69,"code":172421,"language":71,"meta":58,"style":58},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[73,172423,172424,172430,172434,172449],{"__ignoreMap":58},[76,172425,172426,172428],{"class":78,"line":79},[76,172427,90],{"class":89},[76,172429,146139],{"class":93},[76,172431,172432],{"class":78,"line":86},[76,172433,2472],{"emptyLinePlaceholder":125},[76,172435,172436,172439,172441,172444,172447],{"class":78,"line":97},[76,172437,172438],{"class":93},"response ",[76,172440,247],{"class":89},[76,172442,172443],{"class":93}," requests.get(",[76,172445,172446],{"class":305},"\"https:\u002F\u002Fwww.example.com\"",[76,172448,208],{"class":93},[76,172450,172451,172453],{"class":78,"line":103},[76,172452,30485],{"class":250},[76,172454,172455],{"class":93},"(response.status_code)\n",[14,172457,172458],{},"查看已安装包：",[67,172460,172462],{"className":23894,"code":172461,"language":23896,"meta":58,"style":58},"pip list\n",[73,172463,172464],{"__ignoreMap":58},[76,172465,172466,172468],{"class":78,"line":79},[76,172467,23903],{"class":2035},[76,172469,118996],{"class":305},[14,172471,172472],{},"导出项目依赖：",[67,172474,172475],{"className":23894,"code":146334,"language":23896,"meta":58,"style":58},[73,172476,172477],{"__ignoreMap":58},[76,172478,172479,172481,172483,172485],{"class":78,"line":79},[76,172480,23903],{"class":2035},[76,172482,146343],{"class":305},[76,172484,26295],{"class":89},[76,172486,146348],{"class":305},[14,172488,172489],{},"安装项目依赖：",[67,172491,172492],{"className":23894,"code":146354,"language":23896,"meta":58,"style":58},[73,172493,172494],{"__ignoreMap":58},[76,172495,172496,172498,172500,172502],{"class":78,"line":79},[76,172497,23903],{"class":2035},[76,172499,23906],{"class":305},[76,172501,119680],{"class":250},[76,172503,146348],{"class":305},[140,172505,172507],{"id":172506},"_916-模块搜索路径","9.16 模块搜索路径",[14,172509,172510,172511,172514],{},"Python 导入模块时会在 ",[73,172512,172513],{},"sys.path"," 中查找。",[67,172516,172518],{"className":69,"code":172517,"language":71,"meta":58,"style":58},"import sys\n\nfor path in sys.path:\n    print(path)\n",[73,172519,172520,172526,172530,172542],{"__ignoreMap":58},[76,172521,172522,172524],{"class":78,"line":79},[76,172523,90],{"class":89},[76,172525,172236],{"class":93},[76,172527,172528],{"class":78,"line":86},[76,172529,2472],{"emptyLinePlaceholder":125},[76,172531,172532,172534,172537,172539],{"class":78,"line":97},[76,172533,3097],{"class":89},[76,172535,172536],{"class":93}," path ",[76,172538,26116],{"class":89},[76,172540,172541],{"class":93}," sys.path:\n",[76,172543,172544,172546],{"class":78,"line":103},[76,172545,31369],{"class":250},[76,172547,169270],{"class":93},[14,172549,172550],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172552,157664],{},[67,172554,172557],{"className":172555,"code":172556,"language":5259,"meta":58},[5257],"random.py\njson.py\ntime.py\n",[73,172558,172556],{"__ignoreMap":58},[14,172560,172561],{},"这些文件名可能导致导入异常。",[140,172563,172565],{"id":172564},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172567,172361],{},[67,172569,172572],{"className":172570,"code":172571,"language":5259,"meta":58},[5257],"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",[73,172573,172571],{"__ignoreMap":58},[14,172575,172576,24691],{},[73,172577,172578],{},"utils\u002Ffile_utils.py",[67,172580,172582],{"className":69,"code":172581,"language":71,"meta":58,"style":58},"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",[73,172583,172584,172590,172600,172604,172608,172618,172628,172636,172642,172646,172673,172683,172687,172691,172701,172727],{"__ignoreMap":58},[76,172585,172586,172588],{"class":78,"line":79},[76,172587,90],{"class":89},[76,172589,147132],{"class":93},[76,172591,172592,172594,172596,172598],{"class":78,"line":86},[76,172593,30807],{"class":89},[76,172595,108352],{"class":93},[76,172597,90],{"class":89},[76,172599,108357],{"class":93},[76,172601,172602],{"class":78,"line":97},[76,172603,2472],{"emptyLinePlaceholder":125},[76,172605,172606],{"class":78,"line":103},[76,172607,2472],{"emptyLinePlaceholder":125},[76,172609,172610,172612,172615],{"class":78,"line":1273},[76,172611,32017],{"class":89},[76,172613,172614],{"class":2035}," read_json",[76,172616,172617],{"class":93},"(path):\n",[76,172619,172620,172623,172625],{"class":78,"line":1287},[76,172621,172622],{"class":93},"    path ",[76,172624,247],{"class":89},[76,172626,172627],{"class":93}," Path(path)\n",[76,172629,172630,172632,172634],{"class":78,"line":1293},[76,172631,3173],{"class":89},[76,172633,39000],{"class":89},[76,172635,169351],{"class":93},[76,172637,172638,172640],{"class":78,"line":1384},[76,172639,14824],{"class":89},[76,172641,51908],{"class":93},[76,172643,172644],{"class":78,"line":1390},[76,172645,2472],{"emptyLinePlaceholder":125},[76,172647,172648,172650,172652,172655,172657,172659,172661,172663,172665,172667,172669,172671],{"class":78,"line":1402},[76,172649,34248],{"class":89},[76,172651,146832],{"class":250},[76,172653,172654],{"class":93},"(path, ",[76,172656,146842],{"class":305},[76,172658,12507],{"class":93},[76,172660,146847],{"class":5288},[76,172662,247],{"class":89},[76,172664,146852],{"class":305},[76,172666,13786],{"class":93},[76,172668,31453],{"class":89},[76,172670,148194],{"class":5288},[76,172672,3811],{"class":93},[76,172674,172675,172677,172679,172681],{"class":78,"line":1684},[76,172676,14824],{"class":89},[76,172678,148205],{"class":93},[76,172680,45424],{"class":5288},[76,172682,208],{"class":93},[76,172684,172685],{"class":78,"line":1689},[76,172686,2472],{"emptyLinePlaceholder":125},[76,172688,172689],{"class":78,"line":1695},[76,172690,2472],{"emptyLinePlaceholder":125},[76,172692,172693,172695,172698],{"class":78,"line":1700},[76,172694,32017],{"class":89},[76,172696,172697],{"class":2035}," write_json",[76,172699,172700],{"class":93},"(path, data):\n",[76,172702,172703,172705,172707,172709,172711,172713,172715,172717,172719,172721,172723,172725],{"class":78,"line":1714},[76,172704,34248],{"class":89},[76,172706,146832],{"class":250},[76,172708,172654],{"class":93},[76,172710,152017],{"class":305},[76,172712,12507],{"class":93},[76,172714,146847],{"class":5288},[76,172716,247],{"class":89},[76,172718,146852],{"class":305},[76,172720,13786],{"class":93},[76,172722,31453],{"class":89},[76,172724,148194],{"class":5288},[76,172726,3811],{"class":93},[76,172728,172729,172732,172734,172736,172738,172740,172742,172744,172746,172748,172750],{"class":78,"line":1719},[76,172730,172731],{"class":93},"        json.dump(data, ",[76,172733,45424],{"class":5288},[76,172735,12507],{"class":93},[76,172737,147178],{"class":5288},[76,172739,247],{"class":89},[76,172741,34057],{"class":250},[76,172743,12507],{"class":93},[76,172745,152053],{"class":5288},[76,172747,247],{"class":89},[76,172749,278],{"class":250},[76,172751,208],{"class":93},[14,172753,172754,24691],{},[73,172755,154648],{},[67,172757,172759],{"className":69,"code":172758,"language":71,"meta":58,"style":58},"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",[73,172760,172761,172772,172776,172789,172809],{"__ignoreMap":58},[76,172762,172763,172765,172767,172769],{"class":78,"line":79},[76,172764,30807],{"class":89},[76,172766,172382],{"class":93},[76,172768,90],{"class":89},[76,172770,172771],{"class":93}," read_json, write_json\n",[76,172773,172774],{"class":78,"line":86},[76,172775,2472],{"emptyLinePlaceholder":125},[76,172777,172778,172780,172782,172785,172787],{"class":78,"line":97},[76,172779,159757],{"class":93},[76,172781,247],{"class":89},[76,172783,172784],{"class":93}," read_json(",[76,172786,151872],{"class":305},[76,172788,208],{"class":93},[76,172790,172791,172793,172795,172797,172799,172801,172803,172805,172807],{"class":78,"line":103},[76,172792,170575],{"class":93},[76,172794,62749],{"class":305},[76,172796,51507],{"class":93},[76,172798,149929],{"class":305},[76,172800,12507],{"class":93},[76,172802,151513],{"class":305},[76,172804,51507],{"class":93},[76,172806,1188],{"class":250},[76,172808,165193],{"class":93},[76,172810,172811,172814,172816],{"class":78,"line":1273},[76,172812,172813],{"class":93},"write_json(",[76,172815,151872],{"class":305},[76,172817,172818],{"class":93},", students)\n",[140,172820,172822],{"id":172821},"_918-易错点","9.18 易错点",[152,172824,172825,172828,172833,172838,172841,172844],{},[155,172826,172827],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[155,172829,172830,172831,28458],{},"能指定异常类型就不要裸写 ",[73,172832,170935],{},[155,172834,172835,172837],{},[73,172836,171310],{}," 无论是否出错都会执行。",[155,172839,172840],{},"模块文件名不要和标准库重名。",[155,172842,172843],{},"导入自己写的模块时，要注意运行目录。",[155,172845,172846],{},"第三方包要安装到当前解释器或虚拟环境中。",[140,172848,172850],{"id":172849},"_919-本章练习","9.19 本章练习",[152,172852,172853,172856,172859,172865,172872],{},[155,172854,172855],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[155,172857,172858],{},"写函数读取文件，如果文件不存在则返回空字符串。",[155,172860,172273,172861,172864],{},[73,172862,172863],{},"math_utils.py","，实现加减乘除函数并导入使用。",[155,172866,172867,172868,172871],{},"创建一个 ",[73,172869,172870],{},"utils"," 包，把 JSON 读写函数放进去。",[155,172873,172874],{},"写一个程序，捕获除零异常和输入格式异常。",[117,172876,172877],{},"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":58,"searchDepth":86,"depth":86,"links":172879},[172880,172881,172882,172883,172884,172885,172886,172887,172888,172889,172890,172896,172903,172905,172906,172907,172908,172909,172910],{"id":170732,"depth":86,"text":170733},{"id":170860,"depth":86,"text":170861},{"id":170909,"depth":86,"text":170910},{"id":171058,"depth":86,"text":171059},{"id":171230,"depth":86,"text":171231},{"id":171299,"depth":86,"text":171300},{"id":171410,"depth":86,"text":171411},{"id":171536,"depth":86,"text":171537},{"id":171661,"depth":86,"text":171662},{"id":171716,"depth":86,"text":171717},{"id":171815,"depth":86,"text":171816,"children":172891},[172892,172893,172894,172895],{"id":171819,"depth":97,"text":171820},{"id":171853,"depth":97,"text":171854},{"id":171892,"depth":97,"text":171893},{"id":171971,"depth":97,"text":171972},{"id":171994,"depth":86,"text":171995,"children":172897},[172898,172899,172900,172901,172902],{"id":171998,"depth":97,"text":171999},{"id":172081,"depth":97,"text":172082},{"id":172126,"depth":97,"text":172127},{"id":172185,"depth":97,"text":172186},{"id":172223,"depth":97,"text":172224},{"id":172257,"depth":86,"text":172904},"9.13 if name == \"main\"",{"id":172350,"depth":86,"text":172351},{"id":172395,"depth":86,"text":172396},{"id":172506,"depth":86,"text":172507},{"id":172564,"depth":86,"text":172565},{"id":172821,"depth":86,"text":172822},{"id":172849,"depth":86,"text":172850},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170724,"description":122},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172917,"title":172918,"body":172919,"description":173082,"extension":123,"meta":173083,"navigation":125,"path":173084,"seo":173085,"stem":173086,"__hash__":173087},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172920,"toc":173077},[172921,172924,172927,172930,172941,172943,173017,173020,173023,173026,173029,173032,173035,173038,173041,173044,173047],[10,172922,172918],{"id":172923},"python教程",[14,172925,172926],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172928,172929],{},"建议学习环境：",[152,172931,172932,172935,172938],{},[155,172933,172934],{},"Python 版本：Python 3.10 及以上。",[155,172936,172937],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[155,172939,172940],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[140,172942,117119],{"id":117119},[152,172944,172945,172951,172957,172963,172969,172975,172981,172987,172993,172999,173005,173011],{},[155,172946,172947],{},[439,172948,172950],{"href":172949},".\u002Fch1-Python","Python环境与第一个程序",[155,172952,172953],{},[439,172954,172956],{"href":172955},".\u002Fch2","基础语法、变量与字符串",[155,172958,172959],{},[439,172960,172962],{"href":172961},".\u002Fch3","判断语句",[155,172964,172965],{},[439,172966,172968],{"href":172967},".\u002Fch4","循环语句",[155,172970,172971],{},[439,172972,172974],{"href":172973},".\u002Fch5","函数基础",[155,172976,172977],{},[439,172978,172980],{"href":172979},".\u002Fch6","数据容器",[155,172982,172983],{},[439,172984,172986],{"href":172985},".\u002Fch7","函数进阶",[155,172988,172989],{},[439,172990,172992],{"href":172991},".\u002Fch8","文件操作",[155,172994,172995],{},[439,172996,172998],{"href":172997},".\u002Fch9","异常、模块与包",[155,173000,173001],{},[439,173002,173004],{"href":173003},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[155,173006,173007],{},[439,173008,173010],{"href":173009},".\u002Fch11","面向对象基础",[155,173012,173013],{},[439,173014,173016],{"href":173015},".\u002Fch12","综合案例与复习路线",[140,173018,173019],{"id":173019},"学习路线",[14,173021,173022],{},"第一阶段：能运行程序。",[14,173024,173025],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173027,173028],{},"第二阶段：能组织数据。",[14,173030,173031],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173033,173034],{},"第三阶段：能封装逻辑。",[14,173036,173037],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173039,173040],{},"第四阶段：能做小项目。",[14,173042,173043],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[140,173045,173046],{"id":173046},"参考资料",[152,173048,173049,173056,173063,173070],{},[155,173050,173051,173052],{},"黑马程序员 Python 入门教程推荐：",[439,173053,173054],{"href":173054,"rel":173055},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23937],[155,173057,173058,173059],{},"Python 官方中文教程：",[439,173060,173061],{"href":173061,"rel":173062},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23937],[155,173064,173065,173066],{},"Python 标准库文档：",[439,173067,173068],{"href":173068,"rel":173069},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23937],[155,173071,173072,173073],{},"pyecharts 文档：",[439,173074,173075],{"href":173075,"rel":173076},"https:\u002F\u002Fpyecharts.org\u002F",[23937],{"title":58,"searchDepth":86,"depth":86,"links":173078},[173079,173080,173081],{"id":117119,"depth":86,"text":117119},{"id":173019,"depth":86,"text":173019},{"id":173046,"depth":86,"text":173046},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23450},"\u002Fwiki\u002F2024-10-10-python",{"title":172918,"description":173082},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331461956]