[{"data":1,"prerenderedAt":173098},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-an-zhuang":3,"wiki-doc-nav":138},{"id":4,"title":5,"body":6,"description":130,"extension":131,"meta":132,"navigation":133,"path":134,"seo":135,"stem":136,"__hash__":137},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":8,"toc":124},"minimark",[9,19,23,26,29,34,52,55,58,62,71,74,78,81,103,106,120],[10,11,12],"p",{},[13,14,18],"a",{"href":15,"rel":16},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[17],"nofollow","https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[20,21,5],"h1",{"id":22},"_1安装",[10,24,25],{},"numpy是科学计算基础库,底层是C语言",[10,27,28],{},"三种方式：",[30,31,33],"h2",{"id":32},"_11-通过pip安装","1.1 通过pip安装",[35,36,41],"pre",{"className":37,"code":38,"language":39,"meta":40,"style":40},"language-python shiki shiki-themes github-light github-dark","pip install numpy\n","python","",[42,43,44],"code",{"__ignoreMap":40},[45,46,49],"span",{"class":47,"line":48},"line",1,[45,50,38],{"class":51},"sVt8B",[10,53,54],{},"首选方式，自动处理依赖项",[10,56,57],{},"在提示系统命令符中使用cmd",[30,59,61],{"id":60},"_12-通过anaconda安装","1.2 通过Anaconda安装",[35,63,65],{"className":37,"code":64,"language":39,"meta":40,"style":40},"conda install numpy\n",[42,66,67],{"__ignoreMap":40},[45,68,69],{"class":47,"line":48},[45,70,64],{"class":51},[10,72,73],{},"自动解决环境依赖",[30,75,77],{"id":76},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[10,79,80],{},"对于Debian\u002FUbuntu",[35,82,84],{"className":37,"code":83,"language":39,"meta":40,"style":40},"sudo apt-get install python3-numpy\n",[42,85,86],{"__ignoreMap":40},[45,87,88,91,95,98,100],{"class":47,"line":48},[45,89,90],{"class":51},"sudo apt",[45,92,94],{"class":93},"szBVR","-",[45,96,97],{"class":51},"get install python3",[45,99,94],{"class":93},[45,101,102],{"class":51},"numpy\n",[10,104,105],{},"对于Fedora:",[35,107,109],{"className":37,"code":108,"language":39,"meta":40,"style":40},"sudo dnf install python3-numpy\n",[42,110,111],{"__ignoreMap":40},[45,112,113,116,118],{"class":47,"line":48},[45,114,115],{"class":51},"sudo dnf install python3",[45,117,94],{"class":93},[45,119,102],{"class":51},[121,122,123],"style",{},"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":40,"searchDepth":125,"depth":125,"links":126},2,[127,128,129],{"id":32,"depth":125,"text":33},{"id":60,"depth":125,"text":61},{"id":76,"depth":125,"text":77},null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":5,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",[139,5245,6353,7773,10762,12113,13602,14691,23454,23466,24064,24090,24214,24455,24520,24538,24551,24598,24722,24891,25090,25270,25475,25611,25706,25743,25756,26066,26807,27515,27536,28556,30187,30338,30351,30363,30662,50474,50489,50506,50539,53411,76759,92904,92925,93008,93129,93899,94562,94923,94961,95067,95167,95210,95236,95297,96951,97052,97077,97568,98068,99148,99431,100173,100675,100687,102703,104367,105870,107568,109485,111404,113426,116896,117328,117791,118540,121484,121832,121854,122210,125517,125529,125932,125955,126102,126269,126474,126775,127332,127989,129920,131518,132167,133661,135092,136327,138021,139773,142183,142299,143234,143445,144330,145565,145793,145806,146961,149373,151741,155062,157539,159183,160960,162973,166025,168205,170732,172926],{"id":140,"title":141,"body":142,"description":40,"extension":131,"meta":5240,"navigation":133,"path":5241,"seo":5242,"stem":5243,"__hash__":5244},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":143,"toc":5212},[144,147,151,154,158,171,175,180,183,186,189,192,195,223,227,230,233,236,239,292,296,315,317,331,334,342,345,1206,1213,1230,1234,1325,1329,1335,1424,1428,1466,1470,1534,1538,1542,1549,1560,1564,1569,1573,1578,1582,1587,1591,1595,1600,1870,1875,2013,2018,2275,2278,2286,2290,2295,2398,2401,2707,2716,2817,2820,2823,2826,2829,3089,3094,3234,3237,3416,3419,3547,3550,3702,3706,3711,3714,3725,3733,3736,3843,3847,3851,3856,3906,3911,3916,3940,3945,3998,4001,4006,4183,4188,4473,4478,4875,4879,4884,4941,4946,4954,4957,5097,5100,5209],[20,145,141],{"id":146},"_1基础入门",[30,148,150],{"id":149},"_11注释","1.1注释",[10,152,153],{},"\u002F\u002F或者\u002F* *\u002F",[30,155,157],{"id":156},"_12命名","1.2命名",[159,160,161,165,168],"ol",{},[162,163,164],"li",{},"字母数字下划线",[162,166,167],{},"开头必须是字母或_",[162,169,170],{},"不能使用关键词",[30,172,174],{"id":173},"_13数据类型","1.3数据类型",[176,177,179],"h3",{"id":178},"_131整形","1.3.1整形",[10,181,182],{},"short 短整形 2",[10,184,185],{},"int 整形 4",[10,187,188],{},"long 长整形 win4 linux32位4 linux64位8",[10,190,191],{},"long long 长长整形 8",[10,193,194],{},"利用sizeof可以求数据类型占用的内存空间大小",[35,196,200],{"className":197,"code":198,"language":199,"meta":40,"style":40},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[42,201,202,216],{"__ignoreMap":40},[45,203,204,207,210,213],{"class":47,"line":48},[45,205,206],{"class":93},"sizeof",[45,208,209],{"class":51},"(",[45,211,212],{"class":93},"int",[45,214,215],{"class":51},")\n",[45,217,218,220],{"class":47,"line":125},[45,219,206],{"class":93},[45,221,222],{"class":51},"(num)\n",[176,224,226],{"id":225},"_132浮点型","1.3.2浮点型",[10,228,229],{},"float 单精度 4节 7位有效数字",[10,231,232],{},"double 双精度 8节 15-16有效数字",[10,234,235],{},"默认情况下，输出一个小数，会显示6位有效数字",[10,237,238],{},"注意点：",[35,240,242],{"className":197,"code":241,"language":199,"meta":40,"style":40},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[42,243,244,269],{"__ignoreMap":40},[45,245,246,249,252,255,259,262,265],{"class":47,"line":48},[45,247,248],{"class":93},"float",[45,250,251],{"class":51}," f1",[45,253,254],{"class":93},"=",[45,256,258],{"class":257},"sj4cs","3.14",[45,260,261],{"class":93},"f",[45,263,264],{"class":51},";",[45,266,268],{"class":267},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[45,270,271,273,276,278,281,284,287,289],{"class":47,"line":125},[45,272,248],{"class":93},[45,274,275],{"class":51}," f2",[45,277,254],{"class":93},[45,279,280],{"class":257},"3",[45,282,283],{"class":93},"e",[45,285,286],{"class":257},"2",[45,288,264],{"class":51},[45,290,291],{"class":267}," \u002F\u002F科学记数法\n",[176,293,295],{"id":294},"_133字符型","1.3.3字符型",[35,297,299],{"className":197,"code":298,"language":199,"meta":40,"style":40},"char ch='a'\n",[42,300,301],{"__ignoreMap":40},[45,302,303,306,309,311],{"class":47,"line":48},[45,304,305],{"class":93},"char",[45,307,308],{"class":51}," ch",[45,310,254],{"class":93},[45,312,314],{"class":313},"sZZnC","'a'\n",[10,316,238],{},[159,318,319,322,325,328],{},[162,320,321],{},"在显示字符型变量时，只能单引号，双引号x",[162,323,324],{},"单引号内只能一个字符，不能字符串",[162,326,327],{},"c和c++字符型变量只占用一个字符",[162,329,330],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[10,332,333],{},"ASCII码大致由以下两部分组成：",[159,335,336,339],{},[162,337,338],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[162,340,341],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[10,343,344],{},"ASCII码表格：",[346,347,348,392],"table",{},[349,350,351],"thead",{},[352,353,354,362,367,371,376,380,384,388],"tr",{},[355,356,357,361],"th",{},[358,359,360],"strong",{},"ASCII","值",[355,363,364],{},[358,365,366],{},"控制字符",[355,368,369,361],{},[358,370,360],{},[355,372,373],{},[358,374,375],{},"字符",[355,377,378,361],{},[358,379,360],{},[355,381,382],{},[358,383,375],{},[355,385,386,361],{},[358,387,360],{},[355,389,390],{},[358,391,375],{},[393,394,395,422,447,472,497,523,548,573,599,624,650,676,702,727,752,778,804,828,853,878,903,928,953,978,1003,1028,1053,1079,1104,1129,1154,1180],"tbody",{},[352,396,397,401,404,407,410,413,416,419],{},[398,399,400],"td",{},"0",[398,402,403],{},"NUT",[398,405,406],{},"32",[398,408,409],{},"(space)",[398,411,412],{},"64",[398,414,415],{},"@",[398,417,418],{},"96",[398,420,421],{},"、",[352,423,424,427,430,433,436,439,442,445],{},[398,425,426],{},"1",[398,428,429],{},"SOH",[398,431,432],{},"33",[398,434,435],{},"!",[398,437,438],{},"65",[398,440,441],{},"A",[398,443,444],{},"97",[398,446,13],{},[352,448,449,451,454,457,460,463,466,469],{},[398,450,286],{},[398,452,453],{},"STX",[398,455,456],{},"34",[398,458,459],{},"\"",[398,461,462],{},"66",[398,464,465],{},"B",[398,467,468],{},"98",[398,470,471],{},"b",[352,473,474,476,479,482,485,488,491,494],{},[398,475,280],{},[398,477,478],{},"ETX",[398,480,481],{},"35",[398,483,484],{},"#",[398,486,487],{},"67",[398,489,490],{},"C",[398,492,493],{},"99",[398,495,496],{},"c",[352,498,499,502,505,508,511,514,517,520],{},[398,500,501],{},"4",[398,503,504],{},"EOT",[398,506,507],{},"36",[398,509,510],{},"$",[398,512,513],{},"68",[398,515,516],{},"D",[398,518,519],{},"100",[398,521,522],{},"d",[352,524,525,528,531,534,537,540,543,546],{},[398,526,527],{},"5",[398,529,530],{},"ENQ",[398,532,533],{},"37",[398,535,536],{},"%",[398,538,539],{},"69",[398,541,542],{},"E",[398,544,545],{},"101",[398,547,283],{},[352,549,550,553,556,559,562,565,568,571],{},[398,551,552],{},"6",[398,554,555],{},"ACK",[398,557,558],{},"38",[398,560,561],{},"&",[398,563,564],{},"70",[398,566,567],{},"F",[398,569,570],{},"102",[398,572,261],{},[352,574,575,578,581,584,587,590,593,596],{},[398,576,577],{},"7",[398,579,580],{},"BEL",[398,582,583],{},"39",[398,585,586],{},",",[398,588,589],{},"71",[398,591,592],{},"G",[398,594,595],{},"103",[398,597,598],{},"g",[352,600,601,604,607,610,612,615,618,621],{},[398,602,603],{},"8",[398,605,606],{},"BS",[398,608,609],{},"40",[398,611,209],{},[398,613,614],{},"72",[398,616,617],{},"H",[398,619,620],{},"104",[398,622,623],{},"h",[352,625,626,629,632,635,638,641,644,647],{},[398,627,628],{},"9",[398,630,631],{},"HT",[398,633,634],{},"41",[398,636,637],{},")",[398,639,640],{},"73",[398,642,643],{},"I",[398,645,646],{},"105",[398,648,649],{},"i",[352,651,652,655,658,661,664,667,670,673],{},[398,653,654],{},"10",[398,656,657],{},"LF",[398,659,660],{},"42",[398,662,663],{},"*",[398,665,666],{},"74",[398,668,669],{},"J",[398,671,672],{},"106",[398,674,675],{},"j",[352,677,678,681,684,687,690,693,696,699],{},[398,679,680],{},"11",[398,682,683],{},"VT",[398,685,686],{},"43",[398,688,689],{},"+",[398,691,692],{},"75",[398,694,695],{},"K",[398,697,698],{},"107",[398,700,701],{},"k",[352,703,704,707,710,713,715,718,721,724],{},[398,705,706],{},"12",[398,708,709],{},"FF",[398,711,712],{},"44",[398,714,586],{},[398,716,717],{},"76",[398,719,720],{},"L",[398,722,723],{},"108",[398,725,726],{},"l",[352,728,729,732,735,738,740,743,746,749],{},[398,730,731],{},"13",[398,733,734],{},"CR",[398,736,737],{},"45",[398,739,94],{},[398,741,742],{},"77",[398,744,745],{},"M",[398,747,748],{},"109",[398,750,751],{},"m",[352,753,754,757,760,763,766,769,772,775],{},[398,755,756],{},"14",[398,758,759],{},"SO",[398,761,762],{},"46",[398,764,765],{},".",[398,767,768],{},"78",[398,770,771],{},"N",[398,773,774],{},"110",[398,776,777],{},"n",[352,779,780,783,786,789,792,795,798,801],{},[398,781,782],{},"15",[398,784,785],{},"SI",[398,787,788],{},"47",[398,790,791],{},"\u002F",[398,793,794],{},"79",[398,796,797],{},"O",[398,799,800],{},"111",[398,802,803],{},"o",[352,805,806,809,812,815,817,820,823,826],{},[398,807,808],{},"16",[398,810,811],{},"DLE",[398,813,814],{},"48",[398,816,400],{},[398,818,819],{},"80",[398,821,822],{},"P",[398,824,825],{},"112",[398,827,10],{},[352,829,830,833,836,839,841,844,847,850],{},[398,831,832],{},"17",[398,834,835],{},"DCI",[398,837,838],{},"49",[398,840,426],{},[398,842,843],{},"81",[398,845,846],{},"Q",[398,848,849],{},"113",[398,851,852],{},"q",[352,854,855,858,861,864,866,869,872,875],{},[398,856,857],{},"18",[398,859,860],{},"DC2",[398,862,863],{},"50",[398,865,286],{},[398,867,868],{},"82",[398,870,871],{},"R",[398,873,874],{},"114",[398,876,877],{},"r",[352,879,880,883,886,889,891,894,897,900],{},[398,881,882],{},"19",[398,884,885],{},"DC3",[398,887,888],{},"51",[398,890,280],{},[398,892,893],{},"83",[398,895,896],{},"S",[398,898,899],{},"115",[398,901,902],{},"s",[352,904,905,908,911,914,916,919,922,925],{},[398,906,907],{},"20",[398,909,910],{},"DC4",[398,912,913],{},"52",[398,915,501],{},[398,917,918],{},"84",[398,920,921],{},"T",[398,923,924],{},"116",[398,926,927],{},"t",[352,929,930,933,936,939,941,944,947,950],{},[398,931,932],{},"21",[398,934,935],{},"NAK",[398,937,938],{},"53",[398,940,527],{},[398,942,943],{},"85",[398,945,946],{},"U",[398,948,949],{},"117",[398,951,952],{},"u",[352,954,955,958,961,964,966,969,972,975],{},[398,956,957],{},"22",[398,959,960],{},"SYN",[398,962,963],{},"54",[398,965,552],{},[398,967,968],{},"86",[398,970,971],{},"V",[398,973,974],{},"118",[398,976,977],{},"v",[352,979,980,983,986,989,991,994,997,1000],{},[398,981,982],{},"23",[398,984,985],{},"TB",[398,987,988],{},"55",[398,990,577],{},[398,992,993],{},"87",[398,995,996],{},"W",[398,998,999],{},"119",[398,1001,1002],{},"w",[352,1004,1005,1008,1011,1014,1016,1019,1022,1025],{},[398,1006,1007],{},"24",[398,1009,1010],{},"CAN",[398,1012,1013],{},"56",[398,1015,603],{},[398,1017,1018],{},"88",[398,1020,1021],{},"X",[398,1023,1024],{},"120",[398,1026,1027],{},"x",[352,1029,1030,1033,1036,1039,1041,1044,1047,1050],{},[398,1031,1032],{},"25",[398,1034,1035],{},"EM",[398,1037,1038],{},"57",[398,1040,628],{},[398,1042,1043],{},"89",[398,1045,1046],{},"Y",[398,1048,1049],{},"121",[398,1051,1052],{},"y",[352,1054,1055,1058,1061,1064,1067,1070,1073,1076],{},[398,1056,1057],{},"26",[398,1059,1060],{},"SUB",[398,1062,1063],{},"58",[398,1065,1066],{},":",[398,1068,1069],{},"90",[398,1071,1072],{},"Z",[398,1074,1075],{},"122",[398,1077,1078],{},"z",[352,1080,1081,1084,1087,1090,1092,1095,1098,1101],{},[398,1082,1083],{},"27",[398,1085,1086],{},"ESC",[398,1088,1089],{},"59",[398,1091,264],{},[398,1093,1094],{},"91",[398,1096,1097],{},"[",[398,1099,1100],{},"123",[398,1102,1103],{},"{",[352,1105,1106,1109,1112,1115,1118,1121,1123,1126],{},[398,1107,1108],{},"28",[398,1110,1111],{},"FS",[398,1113,1114],{},"60",[398,1116,1117],{},"\u003C",[398,1119,1120],{},"92",[398,1122,791],{},[398,1124,1125],{},"124",[398,1127,1128],{},"|",[352,1130,1131,1134,1137,1140,1142,1145,1148,1151],{},[398,1132,1133],{},"29",[398,1135,1136],{},"GS",[398,1138,1139],{},"61",[398,1141,254],{},[398,1143,1144],{},"93",[398,1146,1147],{},"]",[398,1149,1150],{},"125",[398,1152,1153],{},"}",[352,1155,1156,1159,1162,1165,1168,1171,1174,1177],{},[398,1157,1158],{},"30",[398,1160,1161],{},"RS",[398,1163,1164],{},"62",[398,1166,1167],{},">",[398,1169,1170],{},"94",[398,1172,1173],{},"^",[398,1175,1176],{},"126",[398,1178,1179],{},"`",[352,1181,1182,1185,1188,1191,1194,1197,1200,1203],{},[398,1183,1184],{},"31",[398,1186,1187],{},"US",[398,1189,1190],{},"63",[398,1192,1193],{},"?",[398,1195,1196],{},"95",[398,1198,1199],{},"_",[398,1201,1202],{},"127",[398,1204,1205],{},"DEL",[10,1207,1208,1209,1212],{},"ASCII 码大致由以下",[358,1210,1211],{},"两部分组","成：",[1214,1215,1216,1223],"ul",{},[162,1217,1218,1219,1222],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[358,1220,1221],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[162,1224,1225,1226,1229],{},"ASCII 打印字符：数字 ",[358,1227,1228],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[176,1231,1233],{"id":1232},"_134转义字符","1.3.4转义字符",[35,1235,1237],{"className":197,"code":1236,"language":199,"meta":40,"style":40},"\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",[42,1238,1239,1244,1260,1275,1281,1295,1301],{"__ignoreMap":40},[45,1240,1241],{"class":47,"line":48},[45,1242,1243],{"class":267},"\u002F\u002F换行符\n",[45,1245,1246,1249,1252,1255,1257],{"class":47,"line":125},[45,1247,1248],{"class":51},"cout ",[45,1250,1251],{"class":93},"\u003C\u003C",[45,1253,1254],{"class":313},"\"hello world\u002Fn\"",[45,1256,264],{"class":51},[45,1258,1259],{"class":267}," \u002F\u002F就等同于如下：\n",[45,1261,1263,1265,1267,1270,1272],{"class":47,"line":1262},3,[45,1264,1248],{"class":51},[45,1266,1251],{"class":93},[45,1268,1269],{"class":313},"\"hello world\"",[45,1271,1251],{"class":93},[45,1273,1274],{"class":51},"endl;\n",[45,1276,1278],{"class":47,"line":1277},4,[45,1279,1280],{"class":267},"\u002F\u002F反斜杠\n",[45,1282,1284,1286,1288,1291,1293],{"class":47,"line":1283},5,[45,1285,1248],{"class":51},[45,1287,1251],{"class":93},[45,1289,1290],{"class":313},"\"\u002F\u002F\"",[45,1292,1251],{"class":93},[45,1294,1274],{"class":51},[45,1296,1298],{"class":47,"line":1297},6,[45,1299,1300],{"class":267},"\u002F\u002F水平制表符\n",[45,1302,1304,1306,1308,1311,1314,1317,1319,1322],{"class":47,"line":1303},7,[45,1305,1248],{"class":51},[45,1307,1251],{"class":93},[45,1309,1310],{"class":313},"\"aaaa",[45,1312,1313],{"class":257},"\\t",[45,1315,1316],{"class":313},"helloworld\"",[45,1318,1251],{"class":93},[45,1320,1321],{"class":51},"endl;",[45,1323,1324],{"class":267}," \u002F\u002F输出窗口时有对齐效果\n",[176,1326,1328],{"id":1327},"_135字符串型","1.3.5字符串型",[10,1330,1331,1332,1334],{},"char 变量名",[45,1333],{},"=\"字符串值\"",[35,1336,1338],{"className":197,"code":1337,"language":199,"meta":40,"style":40},"\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",[42,1339,1340,1345,1350,1355,1360,1374,1387,1392,1398,1410],{"__ignoreMap":40},[45,1341,1342],{"class":47,"line":48},[45,1343,1344],{"class":267},"\u002F\u002Fc风格字符串\n",[45,1346,1347],{"class":47,"line":125},[45,1348,1349],{"class":267},"\u002F\u002F注意事项：\n",[45,1351,1352],{"class":47,"line":1262},[45,1353,1354],{"class":267},"\u002F\u002F1.char字符串名[]\n",[45,1356,1357],{"class":47,"line":1277},[45,1358,1359],{"class":267},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[45,1361,1362,1364,1367,1369,1371],{"class":47,"line":1283},[45,1363,305],{"class":93},[45,1365,1366],{"class":51}," str[]",[45,1368,254],{"class":93},[45,1370,1269],{"class":313},[45,1372,1373],{"class":51},";\n",[45,1375,1376,1378,1380,1383,1385],{"class":47,"line":1297},[45,1377,1248],{"class":51},[45,1379,1251],{"class":93},[45,1381,1382],{"class":51},"str",[45,1384,1251],{"class":93},[45,1386,1274],{"class":51},[45,1388,1389],{"class":47,"line":1303},[45,1390,1391],{"class":267},"\u002F\u002Fc++风格字符串\n",[45,1393,1395],{"class":47,"line":1394},8,[45,1396,1397],{"class":267},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[45,1399,1401,1404,1406,1408],{"class":47,"line":1400},9,[45,1402,1403],{"class":51},"string str2",[45,1405,254],{"class":93},[45,1407,1269],{"class":313},[45,1409,1373],{"class":51},[45,1411,1413,1415,1417,1420,1422],{"class":47,"line":1412},10,[45,1414,1248],{"class":51},[45,1416,1251],{"class":93},[45,1418,1419],{"class":51},"str2",[45,1421,1251],{"class":93},[45,1423,1274],{"class":51},[176,1425,1427],{"id":1426},"_136布尔类型bool","1.3.6布尔类型bool",[35,1429,1431],{"className":197,"code":1430,"language":199,"meta":40,"style":40},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[42,1432,1433,1448],{"__ignoreMap":40},[45,1434,1435,1438,1441,1443,1446],{"class":47,"line":48},[45,1436,1437],{"class":93},"bool",[45,1439,1440],{"class":51}," flag",[45,1442,254],{"class":93},[45,1444,1445],{"class":257},"true",[45,1447,1373],{"class":51},[45,1449,1450,1453,1456,1459,1461,1463],{"class":47,"line":125},[45,1451,1452],{"class":51},"cout",[45,1454,1455],{"class":93},"\u003C\u003Csizeof",[45,1457,1458],{"class":51},"(flag)",[45,1460,1251],{"class":93},[45,1462,1321],{"class":51},[45,1464,1465],{"class":267}," \u002F\u002F查看布尔占内存空间\n",[30,1467,1469],{"id":1468},"_14键盘输入cin","1.4键盘输入cin",[35,1471,1473],{"className":197,"code":1472,"language":199,"meta":40,"style":40},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[42,1474,1475,1488,1505,1516],{"__ignoreMap":40},[45,1476,1477,1479,1482,1484,1486],{"class":47,"line":48},[45,1478,212],{"class":93},[45,1480,1481],{"class":51}," a",[45,1483,254],{"class":93},[45,1485,400],{"class":257},[45,1487,1373],{"class":51},[45,1489,1490,1492,1494,1497,1499,1501,1503],{"class":47,"line":125},[45,1491,1452],{"class":51},[45,1493,1251],{"class":93},[45,1495,1496],{"class":313},"\"请给整型变量a赋值\"",[45,1498,1251],{"class":93},[45,1500,13],{"class":51},[45,1502,1251],{"class":93},[45,1504,1274],{"class":51},[45,1506,1507,1510,1513],{"class":47,"line":1262},[45,1508,1509],{"class":51},"cin ",[45,1511,1512],{"class":93},">>",[45,1514,1515],{"class":51}," a;\n",[45,1517,1518,1520,1522,1525,1528,1530,1532],{"class":47,"line":1277},[45,1519,1248],{"class":51},[45,1521,1251],{"class":93},[45,1523,1524],{"class":313}," \"整型变量a=\"",[45,1526,1527],{"class":93}," \u003C\u003C",[45,1529,13],{"class":51},[45,1531,1251],{"class":93},[45,1533,1274],{"class":51},[30,1535,1537],{"id":1536},"_15运算符","1.5运算符",[176,1539,1541],{"id":1540},"_151算术运算符","1.5.1算术运算符",[10,1543,1544,1548],{},[1545,1546],"img",{"alt":40,"src":1547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[159,1550,1551,1554,1557],{},[162,1552,1553],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[162,1555,1556],{},"两个小数不可以做取模运算",[162,1558,1559],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[176,1561,1563],{"id":1562},"_152赋值运算符","1.5.2赋值运算符",[10,1565,1566],{},[1545,1567],{"alt":40,"src":1568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[176,1570,1572],{"id":1571},"_153比较运算符","1.5.3比较运算符",[10,1574,1575],{},[1545,1576],{"alt":40,"src":1577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[176,1579,1581],{"id":1580},"_154逻辑运算符","1.5.4逻辑运算符",[10,1583,1584],{},[1545,1585],{"alt":40,"src":1586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[30,1588,1590],{"id":1589},"_16程序流程结构","1.6程序流程结构",[176,1592,1594],{"id":1593},"_161选择结构","1.6.1选择结构",[159,1596,1597],{},[162,1598,1599],{},"if语句\n单行、多行、多条件if语句",[35,1601,1603],{"className":197,"code":1602,"language":199,"meta":40,"style":40},"\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",[42,1604,1605,1610,1625,1630,1644,1649,1654,1663,1676,1680,1693,1698,1704,1709,1723,1728,1734,1755,1760,1774,1779,1808,1813,1830,1835,1840,1845,1859,1864],{"__ignoreMap":40},[45,1606,1607],{"class":47,"line":48},[45,1608,1609],{"class":267},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[45,1611,1612,1615,1618,1620,1623],{"class":47,"line":125},[45,1613,1614],{"class":93},"if",[45,1616,1617],{"class":51},"(score",[45,1619,1167],{"class":93},[45,1621,1622],{"class":257},"600",[45,1624,215],{"class":51},[45,1626,1627],{"class":47,"line":1262},[45,1628,1629],{"class":51},"{\n",[45,1631,1632,1635,1637,1640,1642],{"class":47,"line":1277},[45,1633,1634],{"class":51},"    cout",[45,1636,1251],{"class":93},[45,1638,1639],{"class":313},"'这是单行if语句'",[45,1641,1251],{"class":93},[45,1643,1274],{"class":51},[45,1645,1646],{"class":47,"line":1283},[45,1647,1648],{"class":51},"}\n",[45,1650,1651],{"class":47,"line":1297},[45,1652,1653],{"class":267},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[45,1655,1656,1658,1660],{"class":47,"line":1303},[45,1657,1509],{"class":51},[45,1659,1512],{"class":93},[45,1661,1662],{"class":51}," score\n",[45,1664,1665,1667,1669,1672,1674],{"class":47,"line":1394},[45,1666,1614],{"class":93},[45,1668,1617],{"class":51},[45,1670,1671],{"class":93},"\u003C=",[45,1673,1622],{"class":257},[45,1675,215],{"class":51},[45,1677,1678],{"class":47,"line":1400},[45,1679,1629],{"class":51},[45,1681,1682,1684,1686,1689,1691],{"class":47,"line":1412},[45,1683,1634],{"class":51},[45,1685,1512],{"class":93},[45,1687,1688],{"class":313},"\"小于等于600\"",[45,1690,1251],{"class":93},[45,1692,1274],{"class":51},[45,1694,1696],{"class":47,"line":1695},11,[45,1697,1648],{"class":51},[45,1699,1701],{"class":47,"line":1700},12,[45,1702,1703],{"class":93},"else\n",[45,1705,1707],{"class":47,"line":1706},13,[45,1708,1629],{"class":51},[45,1710,1712,1714,1716,1719,1721],{"class":47,"line":1711},14,[45,1713,1634],{"class":51},[45,1715,1512],{"class":93},[45,1717,1718],{"class":313},"\"大于600\"",[45,1720,1512],{"class":93},[45,1722,1274],{"class":51},[45,1724,1726],{"class":47,"line":1725},15,[45,1727,1648],{"class":51},[45,1729,1731],{"class":47,"line":1730},16,[45,1732,1733],{"class":267},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[45,1735,1737,1739,1742,1744,1746,1749,1751,1753],{"class":47,"line":1736},17,[45,1738,1614],{"class":93},[45,1740,1741],{"class":51}," (",[45,1743,400],{"class":257},[45,1745,1117],{"class":93},[45,1747,1748],{"class":51},"num",[45,1750,1117],{"class":93},[45,1752,519],{"class":257},[45,1754,215],{"class":51},[45,1756,1758],{"class":47,"line":1757},18,[45,1759,1629],{"class":51},[45,1761,1763,1765,1767,1770,1772],{"class":47,"line":1762},19,[45,1764,1634],{"class":51},[45,1766,1251],{"class":93},[45,1768,1769],{"class":313},"\"小于100\"",[45,1771,1251],{"class":93},[45,1773,1274],{"class":51},[45,1775,1777],{"class":47,"line":1776},20,[45,1778,1648],{"class":51},[45,1780,1782,1785,1788,1791,1794,1796,1799,1801,1803,1806],{"class":47,"line":1781},21,[45,1783,1784],{"class":93},"else",[45,1786,1787],{"class":93}," if",[45,1789,1790],{"class":51}," (nmu",[45,1792,1793],{"class":93},">=",[45,1795,519],{"class":257},[45,1797,1798],{"class":93},"&&",[45,1800,1748],{"class":51},[45,1802,1117],{"class":93},[45,1804,1805],{"class":257},"200",[45,1807,215],{"class":51},[45,1809,1811],{"class":47,"line":1810},22,[45,1812,1629],{"class":51},[45,1814,1816,1818,1820,1823,1825,1827],{"class":47,"line":1815},23,[45,1817,1634],{"class":51},[45,1819,1251],{"class":93},[45,1821,1822],{"class":313},"\"不小于100且小于200\"",[45,1824,1251],{"class":93},[45,1826,1321],{"class":51},[45,1828,1829],{"class":267}," \u002F\u002F可以无限else if,python中是elif：\n",[45,1831,1833],{"class":47,"line":1832},24,[45,1834,1648],{"class":51},[45,1836,1838],{"class":47,"line":1837},25,[45,1839,1703],{"class":93},[45,1841,1843],{"class":47,"line":1842},26,[45,1844,1629],{"class":51},[45,1846,1848,1850,1852,1855,1857],{"class":47,"line":1847},27,[45,1849,1634],{"class":51},[45,1851,1251],{"class":93},[45,1853,1854],{"class":313},"\"不小于200\"",[45,1856,1251],{"class":93},[45,1858,1274],{"class":51},[45,1860,1862],{"class":47,"line":1861},28,[45,1863,1648],{"class":51},[45,1865,1867],{"class":47,"line":1866},29,[45,1868,1869],{"class":267},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[159,1871,1872],{"start":125},[162,1873,1874],{},"三目运算符",[35,1876,1878],{"className":197,"code":1877,"language":199,"meta":40,"style":40},"\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",[42,1879,1880,1885,1890,1916,1938,1955,1960,1983,1998],{"__ignoreMap":40},[45,1881,1882],{"class":47,"line":48},[45,1883,1884],{"class":267},"\u002F\u002F创建三个变量a,b,c\n",[45,1886,1887],{"class":47,"line":125},[45,1888,1889],{"class":267},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[45,1891,1892,1894,1896,1898,1900,1903,1905,1907,1910,1912,1914],{"class":47,"line":1262},[45,1893,212],{"class":93},[45,1895,1481],{"class":51},[45,1897,254],{"class":93},[45,1899,907],{"class":257},[45,1901,1902],{"class":51},",b",[45,1904,254],{"class":93},[45,1906,654],{"class":257},[45,1908,1909],{"class":51},",c",[45,1911,254],{"class":93},[45,1913,400],{"class":257},[45,1915,1373],{"class":51},[45,1917,1918,1920,1922,1925,1927,1929,1931,1933,1935],{"class":47,"line":1277},[45,1919,496],{"class":51},[45,1921,254],{"class":93},[45,1923,1924],{"class":51},"(a",[45,1926,1167],{"class":93},[45,1928,471],{"class":51},[45,1930,1193],{"class":93},[45,1932,13],{"class":51},[45,1934,1066],{"class":93},[45,1936,1937],{"class":51},"b)\n",[45,1939,1940,1942,1944,1947,1949,1951,1953],{"class":47,"line":1283},[45,1941,1452],{"class":51},[45,1943,1251],{"class":93},[45,1945,1946],{"class":313},"\"c=\"",[45,1948,1251],{"class":93},[45,1950,496],{"class":51},[45,1952,1251],{"class":93},[45,1954,1274],{"class":51},[45,1956,1957],{"class":47,"line":1297},[45,1958,1959],{"class":267},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[45,1961,1962,1964,1966,1968,1970,1972,1974,1977,1979,1981],{"class":47,"line":1303},[45,1963,1924],{"class":51},[45,1965,1167],{"class":93},[45,1967,471],{"class":51},[45,1969,1193],{"class":93},[45,1971,13],{"class":51},[45,1973,1066],{"class":93},[45,1975,1976],{"class":51},"b)",[45,1978,254],{"class":93},[45,1980,519],{"class":257},[45,1982,1373],{"class":51},[45,1984,1985,1987,1989,1991,1993,1995],{"class":47,"line":1394},[45,1986,1452],{"class":51},[45,1988,1251],{"class":93},[45,1990,13],{"class":51},[45,1992,1251],{"class":93},[45,1994,1321],{"class":51},[45,1996,1997],{"class":267}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[45,1999,2000,2002,2004,2006,2008,2010],{"class":47,"line":1400},[45,2001,1452],{"class":51},[45,2003,1251],{"class":93},[45,2005,471],{"class":51},[45,2007,1251],{"class":93},[45,2009,1321],{"class":51},[45,2011,2012],{"class":267}," \u002F\u002F10   a>b,b还是原值\n",[159,2014,2015],{"start":1262},[162,2016,2017],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[35,2019,2021],{"className":197,"code":2020,"language":199,"meta":40,"style":40},"\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",[42,2022,2023,2028,2036,2050,2060,2064,2078,2091,2101,2109,2114,2139,2160,2182,2203,2225,2246,2266,2271],{"__ignoreMap":40},[45,2024,2025],{"class":47,"line":48},[45,2026,2027],{"class":267},"\u002F\u002F案例-电影打分\n",[45,2029,2030,2033],{"class":47,"line":125},[45,2031,2032],{"class":93},"#include",[45,2034,2035],{"class":313},"\u003Ciostream>\n",[45,2037,2038,2041,2044,2048],{"class":47,"line":1262},[45,2039,2040],{"class":93},"using",[45,2042,2043],{"class":93}," namespace",[45,2045,2047],{"class":2046},"sScJk"," std",[45,2049,1373],{"class":51},[45,2051,2052,2054,2057],{"class":47,"line":1277},[45,2053,212],{"class":93},[45,2055,2056],{"class":2046}," main",[45,2058,2059],{"class":51},"()\n",[45,2061,2062],{"class":47,"line":1283},[45,2063,1629],{"class":51},[45,2065,2066,2069,2072,2074,2076],{"class":47,"line":1297},[45,2067,2068],{"class":93},"    int",[45,2070,2071],{"class":51}," score",[45,2073,254],{"class":93},[45,2075,400],{"class":257},[45,2077,1373],{"class":51},[45,2079,2080,2082,2084,2087,2089],{"class":47,"line":1303},[45,2081,1634],{"class":51},[45,2083,1251],{"class":93},[45,2085,2086],{"class":313},"\"电影打分：\"",[45,2088,1251],{"class":93},[45,2090,1274],{"class":51},[45,2092,2093,2096,2098],{"class":47,"line":1394},[45,2094,2095],{"class":51},"    cin",[45,2097,1512],{"class":93},[45,2099,2100],{"class":51},"score;\n",[45,2102,2103,2106],{"class":47,"line":1400},[45,2104,2105],{"class":93},"    switch",[45,2107,2108],{"class":51},"(score)\n",[45,2110,2111],{"class":47,"line":1412},[45,2112,2113],{"class":51},"    {\n",[45,2115,2116,2119,2122,2125,2127,2130,2132,2134,2137],{"class":47,"line":1695},[45,2117,2118],{"class":93},"        case",[45,2120,2121],{"class":257}," 10",[45,2123,2124],{"class":51},":cout",[45,2126,1251],{"class":93},[45,2128,2129],{"class":313},"\"经典\"",[45,2131,1251],{"class":93},[45,2133,1321],{"class":51},[45,2135,2136],{"class":93},"break",[45,2138,1373],{"class":51},[45,2140,2141,2143,2146,2148,2150,2152,2154,2156,2158],{"class":47,"line":1700},[45,2142,2118],{"class":93},[45,2144,2145],{"class":257}," 9",[45,2147,2124],{"class":51},[45,2149,1251],{"class":93},[45,2151,2129],{"class":313},[45,2153,1251],{"class":93},[45,2155,1321],{"class":51},[45,2157,2136],{"class":93},[45,2159,1373],{"class":51},[45,2161,2162,2164,2167,2169,2171,2174,2176,2178,2180],{"class":47,"line":1706},[45,2163,2118],{"class":93},[45,2165,2166],{"class":257}," 8",[45,2168,2124],{"class":51},[45,2170,1251],{"class":93},[45,2172,2173],{"class":313},"\"非常好\"",[45,2175,1251],{"class":93},[45,2177,1321],{"class":51},[45,2179,2136],{"class":93},[45,2181,1373],{"class":51},[45,2183,2184,2186,2189,2191,2193,2195,2197,2199,2201],{"class":47,"line":1711},[45,2185,2118],{"class":93},[45,2187,2188],{"class":257}," 7",[45,2190,2124],{"class":51},[45,2192,1251],{"class":93},[45,2194,2173],{"class":313},[45,2196,1251],{"class":93},[45,2198,1321],{"class":51},[45,2200,2136],{"class":93},[45,2202,1373],{"class":51},[45,2204,2205,2207,2210,2212,2214,2217,2219,2221,2223],{"class":47,"line":1725},[45,2206,2118],{"class":93},[45,2208,2209],{"class":257}," 6",[45,2211,2124],{"class":51},[45,2213,1251],{"class":93},[45,2215,2216],{"class":313},"\"一般\"",[45,2218,1251],{"class":93},[45,2220,1321],{"class":51},[45,2222,2136],{"class":93},[45,2224,1373],{"class":51},[45,2226,2227,2229,2232,2234,2236,2238,2240,2242,2244],{"class":47,"line":1730},[45,2228,2118],{"class":93},[45,2230,2231],{"class":257}," 5",[45,2233,2124],{"class":51},[45,2235,1251],{"class":93},[45,2237,2216],{"class":313},[45,2239,1251],{"class":93},[45,2241,1321],{"class":51},[45,2243,2136],{"class":93},[45,2245,1373],{"class":51},[45,2247,2248,2251,2253,2255,2258,2260,2262,2264],{"class":47,"line":1736},[45,2249,2250],{"class":93},"        default",[45,2252,2124],{"class":51},[45,2254,1251],{"class":93},[45,2256,2257],{"class":313},"\"烂片\"",[45,2259,1251],{"class":93},[45,2261,1321],{"class":51},[45,2263,2136],{"class":93},[45,2265,1373],{"class":51},[45,2267,2268],{"class":47,"line":1757},[45,2269,2270],{"class":51},"    }\n",[45,2272,2273],{"class":47,"line":1762},[45,2274,1648],{"class":51},[10,2276,2277],{},"if和switch区别：",[1214,2279,2280,2283],{},[162,2281,2282],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[162,2284,2285],{},"switch优点：结构清晰，执行效率高",[176,2287,2289],{"id":2288},"_162循环结构","1.6.2循环结构",[159,2291,2292],{},[162,2293,2294],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[35,2296,2298],{"className":197,"code":2297,"language":199,"meta":40,"style":40},"\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",[42,2299,2300,2305,2313,2317,2330,2344,2348,2368,2378,2382,2394],{"__ignoreMap":40},[45,2301,2302],{"class":47,"line":48},[45,2303,2304],{"class":267},"\u002F\u002F打印0-9数字\n",[45,2306,2307,2309,2311],{"class":47,"line":125},[45,2308,212],{"class":93},[45,2310,2056],{"class":2046},[45,2312,2059],{"class":51},[45,2314,2315],{"class":47,"line":1262},[45,2316,1629],{"class":51},[45,2318,2319,2321,2324,2326,2328],{"class":47,"line":1277},[45,2320,2068],{"class":93},[45,2322,2323],{"class":51}," num",[45,2325,254],{"class":93},[45,2327,400],{"class":257},[45,2329,1373],{"class":51},[45,2331,2332,2335,2338,2340,2342],{"class":47,"line":1283},[45,2333,2334],{"class":93},"    while",[45,2336,2337],{"class":51},"(num",[45,2339,1117],{"class":93},[45,2341,654],{"class":257},[45,2343,215],{"class":51},[45,2345,2346],{"class":47,"line":1297},[45,2347,2113],{"class":51},[45,2349,2350,2353,2356,2358,2360,2362,2365],{"class":47,"line":1303},[45,2351,2352],{"class":2046},"       std",[45,2354,2355],{"class":51},"::cout",[45,2357,1251],{"class":93},[45,2359,1748],{"class":51},[45,2361,1251],{"class":93},[45,2363,2364],{"class":2046},"std",[45,2366,2367],{"class":51},"::endl;\n",[45,2369,2370,2373,2376],{"class":47,"line":1394},[45,2371,2372],{"class":51},"        num",[45,2374,2375],{"class":93},"++",[45,2377,1373],{"class":51},[45,2379,2380],{"class":47,"line":1400},[45,2381,2270],{"class":51},[45,2383,2384,2387,2389,2392],{"class":47,"line":1412},[45,2385,2386],{"class":2046},"    system",[45,2388,209],{"class":51},[45,2390,2391],{"class":313},"\"pause\"",[45,2393,215],{"class":51},[45,2395,2396],{"class":47,"line":1695},[45,2397,1648],{"class":51},[10,2399,2400],{},"注意：写好循环条件，避免死循环情况",[35,2402,2404],{"className":197,"code":2403,"language":199,"meta":40,"style":40},"\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",[42,2405,2406,2411,2418,2425,2435,2443,2447,2452,2479,2484,2489,2497,2524,2529,2534,2547,2557,2561,2571,2576,2589,2594,2608,2613,2628,2632,2645,2649,2654,2658,2672,2680,2685,2691,2697,2702],{"__ignoreMap":40},[45,2407,2408],{"class":47,"line":48},[45,2409,2410],{"class":267},"\u002F\u002F循环结构-猜数字\n",[45,2412,2413,2415],{"class":47,"line":125},[45,2414,2032],{"class":93},[45,2416,2417],{"class":313}," \u003Ciostream>\n",[45,2419,2420,2422],{"class":47,"line":1262},[45,2421,2032],{"class":93},[45,2423,2424],{"class":313}," \u003Cctime>\n",[45,2426,2427,2429,2431,2433],{"class":47,"line":1277},[45,2428,2040],{"class":93},[45,2430,2043],{"class":93},[45,2432,2047],{"class":2046},[45,2434,1373],{"class":51},[45,2436,2437,2439,2441],{"class":47,"line":1283},[45,2438,212],{"class":93},[45,2440,2056],{"class":2046},[45,2442,2059],{"class":51},[45,2444,2445],{"class":47,"line":1297},[45,2446,1629],{"class":51},[45,2448,2449],{"class":47,"line":1303},[45,2450,2451],{"class":267},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[45,2453,2454,2457,2460,2463,2466,2468,2471,2473,2476],{"class":47,"line":1394},[45,2455,2456],{"class":2046},"    srand",[45,2458,2459],{"class":51},"((",[45,2461,2462],{"class":93},"unsigned",[45,2464,2465],{"class":93}," int",[45,2467,637],{"class":51},[45,2469,2470],{"class":2046},"time",[45,2472,209],{"class":51},[45,2474,2475],{"class":257},"NULL",[45,2477,2478],{"class":51},"));\n",[45,2480,2481],{"class":47,"line":1400},[45,2482,2483],{"emptyLinePlaceholder":133},"\n",[45,2485,2486],{"class":47,"line":1412},[45,2487,2488],{"class":267},"    \u002F\u002F1.系统生成随机数\n",[45,2490,2491,2494],{"class":47,"line":1695},[45,2492,2493],{"class":267},"    \u002F\u002Frand()%100",[45,2495,2496],{"class":267}," \u002F\u002F生成0-99的随机数\n",[45,2498,2499,2501,2503,2505,2508,2511,2513,2515,2517,2519,2521],{"class":47,"line":1700},[45,2500,2068],{"class":93},[45,2502,2323],{"class":51},[45,2504,254],{"class":93},[45,2506,2507],{"class":2046},"rand",[45,2509,2510],{"class":51},"()",[45,2512,536],{"class":93},[45,2514,519],{"class":257},[45,2516,689],{"class":93},[45,2518,426],{"class":257},[45,2520,264],{"class":51},[45,2522,2523],{"class":267}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[45,2525,2526],{"class":47,"line":1706},[45,2527,2528],{"class":267},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[45,2530,2531],{"class":47,"line":1711},[45,2532,2533],{"class":267},"    \u002F\u002F2.玩家猜测\n",[45,2535,2536,2538,2541,2543,2545],{"class":47,"line":1725},[45,2537,2068],{"class":93},[45,2539,2540],{"class":51}," val",[45,2542,254],{"class":93},[45,2544,400],{"class":257},[45,2546,1373],{"class":51},[45,2548,2549,2551,2553,2555],{"class":47,"line":1730},[45,2550,2334],{"class":93},[45,2552,1741],{"class":51},[45,2554,426],{"class":257},[45,2556,215],{"class":51},[45,2558,2559],{"class":47,"line":1736},[45,2560,2113],{"class":51},[45,2562,2563,2566,2568],{"class":47,"line":1757},[45,2564,2565],{"class":51},"        cin",[45,2567,1512],{"class":93},[45,2569,2570],{"class":51},"val;\n",[45,2572,2573],{"class":47,"line":1762},[45,2574,2575],{"class":267},"        \u002F\u002F3.判断玩家猜测\n",[45,2577,2578,2581,2584,2586],{"class":47,"line":1776},[45,2579,2580],{"class":93},"        if",[45,2582,2583],{"class":51},"(val",[45,2585,1117],{"class":93},[45,2587,2588],{"class":51},"num) \n",[45,2590,2591],{"class":47,"line":1781},[45,2592,2593],{"class":51},"        {\n",[45,2595,2596,2599,2601,2604,2606],{"class":47,"line":1810},[45,2597,2598],{"class":51},"            cout",[45,2600,1251],{"class":93},[45,2602,2603],{"class":313},"\"猜小了！\"",[45,2605,1251],{"class":93},[45,2607,1274],{"class":51},[45,2609,2610],{"class":47,"line":1815},[45,2611,2612],{"class":51},"        }\n",[45,2614,2615,2618,2620,2623,2625],{"class":47,"line":1832},[45,2616,2617],{"class":93},"        else",[45,2619,1787],{"class":93},[45,2621,2622],{"class":51}," (val",[45,2624,1167],{"class":93},[45,2626,2627],{"class":51},"num)\n",[45,2629,2630],{"class":47,"line":1837},[45,2631,2593],{"class":51},[45,2633,2634,2636,2638,2641,2643],{"class":47,"line":1842},[45,2635,2598],{"class":51},[45,2637,1251],{"class":93},[45,2639,2640],{"class":313},"\"猜大了！\"",[45,2642,1251],{"class":93},[45,2644,1274],{"class":51},[45,2646,2647],{"class":47,"line":1847},[45,2648,2612],{"class":51},[45,2650,2651],{"class":47,"line":1861},[45,2652,2653],{"class":93},"        else\n",[45,2655,2656],{"class":47,"line":1866},[45,2657,2593],{"class":51},[45,2659,2661,2663,2665,2668,2670],{"class":47,"line":2660},30,[45,2662,2598],{"class":51},[45,2664,1251],{"class":93},[45,2666,2667],{"class":313},"\"猜对了！\"",[45,2669,1251],{"class":93},[45,2671,1274],{"class":51},[45,2673,2675,2678],{"class":47,"line":2674},31,[45,2676,2677],{"class":93},"            break",[45,2679,1373],{"class":51},[45,2681,2683],{"class":47,"line":2682},32,[45,2684,2612],{"class":51},[45,2686,2688],{"class":47,"line":2687},33,[45,2689,2690],{"class":267},"        \u002F\u002F猜对 退出游戏\n",[45,2692,2694],{"class":47,"line":2693},34,[45,2695,2696],{"class":267},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[45,2698,2700],{"class":47,"line":2699},35,[45,2701,2270],{"class":51},[45,2703,2705],{"class":47,"line":2704},36,[45,2706,1648],{"class":51},[159,2708,2709],{"start":125},[162,2710,2711,2712,2715],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[358,2713,2714],{},"do...while会先执行一次循环语句","，在判断循环语句",[35,2717,2719],{"className":197,"code":2718,"language":199,"meta":40,"style":40},"\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",[42,2720,2721,2726,2734,2738,2750,2758,2762,2779,2786,2790,2803,2813],{"__ignoreMap":40},[45,2722,2723],{"class":47,"line":48},[45,2724,2725],{"class":267},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[45,2727,2728,2730,2732],{"class":47,"line":125},[45,2729,212],{"class":93},[45,2731,2056],{"class":2046},[45,2733,2059],{"class":51},[45,2735,2736],{"class":47,"line":1262},[45,2737,1629],{"class":51},[45,2739,2740,2742,2744,2746,2748],{"class":47,"line":1277},[45,2741,2068],{"class":93},[45,2743,2323],{"class":51},[45,2745,254],{"class":93},[45,2747,400],{"class":257},[45,2749,1373],{"class":51},[45,2751,2752,2755],{"class":47,"line":1283},[45,2753,2754],{"class":93},"    do",[45,2756,2757],{"class":51}," \n",[45,2759,2760],{"class":47,"line":1297},[45,2761,2113],{"class":51},[45,2763,2764,2767,2769,2771,2773,2775,2777],{"class":47,"line":1303},[45,2765,2766],{"class":2046},"        std",[45,2768,2355],{"class":51},[45,2770,1251],{"class":93},[45,2772,1748],{"class":51},[45,2774,1251],{"class":93},[45,2776,2364],{"class":2046},[45,2778,2367],{"class":51},[45,2780,2781,2783],{"class":47,"line":1394},[45,2782,2372],{"class":51},[45,2784,2785],{"class":93},"++\n",[45,2787,2788],{"class":47,"line":1400},[45,2789,2270],{"class":51},[45,2791,2792,2794,2796,2798,2800],{"class":47,"line":1412},[45,2793,2334],{"class":93},[45,2795,2337],{"class":51},[45,2797,1117],{"class":93},[45,2799,654],{"class":257},[45,2801,2802],{"class":51},");\n",[45,2804,2805,2807,2809,2811],{"class":47,"line":1695},[45,2806,2386],{"class":2046},[45,2808,209],{"class":51},[45,2810,2391],{"class":313},[45,2812,2802],{"class":51},[45,2814,2815],{"class":47,"line":1700},[45,2816,1648],{"class":51},[10,2818,2819],{},"案例-水仙花数",[10,2821,2822],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[10,2824,2825],{},"例如：1^3+5^3+3^3=153",[10,2827,2828],{},"请用do...while语句，求出所有3位数的水仙花数",[35,2830,2832],{"className":197,"code":2831,"language":199,"meta":40,"style":40},"#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",[42,2833,2834,2840,2850,2858,2862,2867,2879,2885,2889,2894,2910,2926,2942,2957,2976,2991,3039,3043,3055,3059,3067,3071,3085],{"__ignoreMap":40},[45,2835,2836,2838],{"class":47,"line":48},[45,2837,2032],{"class":93},[45,2839,2417],{"class":313},[45,2841,2842,2844,2846,2848],{"class":47,"line":125},[45,2843,2040],{"class":93},[45,2845,2043],{"class":93},[45,2847,2047],{"class":2046},[45,2849,1373],{"class":51},[45,2851,2852,2854,2856],{"class":47,"line":1262},[45,2853,212],{"class":93},[45,2855,2056],{"class":2046},[45,2857,2059],{"class":51},[45,2859,2860],{"class":47,"line":1277},[45,2861,1629],{"class":51},[45,2863,2864],{"class":47,"line":1283},[45,2865,2866],{"class":267},"    \u002F\u002F1.先打印所有三位数字\n",[45,2868,2869,2871,2873,2875,2877],{"class":47,"line":1297},[45,2870,2068],{"class":93},[45,2872,2323],{"class":51},[45,2874,254],{"class":93},[45,2876,519],{"class":257},[45,2878,1373],{"class":51},[45,2880,2881,2883],{"class":47,"line":1303},[45,2882,2754],{"class":93},[45,2884,2757],{"class":51},[45,2886,2887],{"class":47,"line":1394},[45,2888,2113],{"class":51},[45,2890,2891],{"class":47,"line":1400},[45,2892,2893],{"class":267},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[45,2895,2896,2899,2901,2903,2905,2907],{"class":47,"line":1412},[45,2897,2898],{"class":93},"        int",[45,2900,1481],{"class":51},[45,2902,254],{"class":93},[45,2904,400],{"class":257},[45,2906,264],{"class":51},[45,2908,2909],{"class":267}," \u002F\u002F个位\n",[45,2911,2912,2914,2917,2919,2921,2923],{"class":47,"line":1695},[45,2913,2898],{"class":93},[45,2915,2916],{"class":51}," b",[45,2918,254],{"class":93},[45,2920,400],{"class":257},[45,2922,264],{"class":51},[45,2924,2925],{"class":267}," \u002F\u002F十位\n",[45,2927,2928,2930,2933,2935,2937,2939],{"class":47,"line":1700},[45,2929,2898],{"class":93},[45,2931,2932],{"class":51}," c",[45,2934,254],{"class":93},[45,2936,400],{"class":257},[45,2938,264],{"class":51},[45,2940,2941],{"class":267}," \u002F\u002F百位\n",[45,2943,2944,2947,2949,2951,2953,2955],{"class":47,"line":1706},[45,2945,2946],{"class":51},"        a",[45,2948,254],{"class":93},[45,2950,1748],{"class":51},[45,2952,536],{"class":93},[45,2954,654],{"class":257},[45,2956,1373],{"class":51},[45,2958,2959,2962,2964,2966,2968,2970,2972,2974],{"class":47,"line":1711},[45,2960,2961],{"class":51},"        b",[45,2963,254],{"class":93},[45,2965,1748],{"class":51},[45,2967,791],{"class":93},[45,2969,654],{"class":257},[45,2971,536],{"class":93},[45,2973,654],{"class":257},[45,2975,1373],{"class":51},[45,2977,2978,2981,2983,2985,2987,2989],{"class":47,"line":1725},[45,2979,2980],{"class":51},"        c",[45,2982,254],{"class":93},[45,2984,1748],{"class":51},[45,2986,791],{"class":93},[45,2988,519],{"class":257},[45,2990,1373],{"class":51},[45,2992,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3030,3033,3036],{"class":47,"line":1730},[45,2994,2580],{"class":93},[45,2996,1924],{"class":51},[45,2998,663],{"class":93},[45,3000,13],{"class":51},[45,3002,663],{"class":93},[45,3004,13],{"class":51},[45,3006,689],{"class":93},[45,3008,471],{"class":51},[45,3010,663],{"class":93},[45,3012,471],{"class":51},[45,3014,663],{"class":93},[45,3016,471],{"class":51},[45,3018,689],{"class":93},[45,3020,496],{"class":51},[45,3022,663],{"class":93},[45,3024,496],{"class":51},[45,3026,663],{"class":93},[45,3028,3029],{"class":51},"c ",[45,3031,3032],{"class":93},"==",[45,3034,3035],{"class":51}," num)",[45,3037,3038],{"class":267}," \u002F\u002F如果是水仙花数，才打印\n",[45,3040,3041],{"class":47,"line":1736},[45,3042,2593],{"class":51},[45,3044,3045,3047,3049,3051,3053],{"class":47,"line":1757},[45,3046,2598],{"class":51},[45,3048,1251],{"class":93},[45,3050,1748],{"class":51},[45,3052,1251],{"class":93},[45,3054,1274],{"class":51},[45,3056,3057],{"class":47,"line":1762},[45,3058,2612],{"class":51},[45,3060,3061,3063,3065],{"class":47,"line":1776},[45,3062,2372],{"class":51},[45,3064,2375],{"class":93},[45,3066,1373],{"class":51},[45,3068,3069],{"class":47,"line":1781},[45,3070,2270],{"class":51},[45,3072,3073,3075,3078,3080,3083],{"class":47,"line":1810},[45,3074,2334],{"class":93},[45,3076,3077],{"class":51}," (num ",[45,3079,1117],{"class":93},[45,3081,3082],{"class":257}," 1000",[45,3084,2802],{"class":51},[45,3086,3087],{"class":47,"line":1815},[45,3088,1648],{"class":51},[159,3090,3091],{"start":1262},[162,3092,3093],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[35,3095,3097],{"className":197,"code":3096,"language":199,"meta":40,"style":40},"\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",[42,3098,3099,3104,3133,3137,3149,3153,3158,3169,3176,3180,3194,3198,3205,3209,3221,3230],{"__ignoreMap":40},[45,3100,3101],{"class":47,"line":48},[45,3102,3103],{"class":267},"\u002F\u002F从数字0-9打印\n",[45,3105,3106,3109,3111,3113,3116,3118,3120,3123,3125,3127,3129,3131],{"class":47,"line":125},[45,3107,3108],{"class":93},"for",[45,3110,209],{"class":51},[45,3112,212],{"class":93},[45,3114,3115],{"class":51}," i",[45,3117,254],{"class":93},[45,3119,400],{"class":257},[45,3121,3122],{"class":51},";i",[45,3124,1117],{"class":93},[45,3126,654],{"class":257},[45,3128,3122],{"class":51},[45,3130,2375],{"class":93},[45,3132,215],{"class":51},[45,3134,3135],{"class":47,"line":1262},[45,3136,1629],{"class":51},[45,3138,3139,3141,3143,3145,3147],{"class":47,"line":1277},[45,3140,1634],{"class":51},[45,3142,1251],{"class":93},[45,3144,649],{"class":51},[45,3146,1251],{"class":93},[45,3148,1274],{"class":51},[45,3150,3151],{"class":47,"line":1283},[45,3152,1648],{"class":51},[45,3154,3155],{"class":47,"line":1297},[45,3156,3157],{"class":267},"\u002F\u002F上式可以进行拆分\n",[45,3159,3160,3162,3164,3166],{"class":47,"line":1303},[45,3161,212],{"class":93},[45,3163,3115],{"class":51},[45,3165,254],{"class":93},[45,3167,3168],{"class":257},"0\n",[45,3170,3171,3173],{"class":47,"line":1394},[45,3172,3108],{"class":93},[45,3174,3175],{"class":51},"(;;;)\n",[45,3177,3178],{"class":47,"line":1400},[45,3179,1629],{"class":51},[45,3181,3182,3185,3188,3190,3192],{"class":47,"line":1412},[45,3183,3184],{"class":93},"    if",[45,3186,3187],{"class":51},"(i",[45,3189,1793],{"class":93},[45,3191,654],{"class":257},[45,3193,215],{"class":51},[45,3195,3196],{"class":47,"line":1695},[45,3197,2113],{"class":51},[45,3199,3200,3203],{"class":47,"line":1700},[45,3201,3202],{"class":93},"        break",[45,3204,1373],{"class":51},[45,3206,3207],{"class":47,"line":1706},[45,3208,2270],{"class":51},[45,3210,3211,3213,3215,3217,3219],{"class":47,"line":1711},[45,3212,1634],{"class":51},[45,3214,1251],{"class":93},[45,3216,649],{"class":51},[45,3218,1251],{"class":93},[45,3220,1274],{"class":51},[45,3222,3223,3226,3228],{"class":47,"line":1725},[45,3224,3225],{"class":51},"    i",[45,3227,2375],{"class":93},[45,3229,1373],{"class":51},[45,3231,3232],{"class":47,"line":1730},[45,3233,1648],{"class":51},[10,3235,3236],{},"小练习",[35,3238,3240],{"className":197,"code":3239,"language":199,"meta":40,"style":40},"#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",[42,3241,3242,3248,3258,3266,3270,3275,3280,3308,3312,3317,3322,3363,3367,3380,3384,3388,3392,3404,3408,3412],{"__ignoreMap":40},[45,3243,3244,3246],{"class":47,"line":48},[45,3245,2032],{"class":93},[45,3247,2035],{"class":313},[45,3249,3250,3252,3254,3256],{"class":47,"line":125},[45,3251,2040],{"class":93},[45,3253,2043],{"class":93},[45,3255,2047],{"class":2046},[45,3257,1373],{"class":51},[45,3259,3260,3262,3264],{"class":47,"line":1262},[45,3261,212],{"class":93},[45,3263,2056],{"class":2046},[45,3265,2059],{"class":51},[45,3267,3268],{"class":47,"line":1277},[45,3269,1629],{"class":51},[45,3271,3272],{"class":47,"line":1283},[45,3273,3274],{"class":267},"    \u002F\u002F敲桌子案例\n",[45,3276,3277],{"class":47,"line":1297},[45,3278,3279],{"class":267},"    \u002F\u002F1.先输出1-100的数字\n",[45,3281,3282,3285,3287,3289,3291,3293,3295,3298,3300,3302,3304,3306],{"class":47,"line":1303},[45,3283,3284],{"class":93},"    for",[45,3286,209],{"class":51},[45,3288,212],{"class":93},[45,3290,3115],{"class":51},[45,3292,254],{"class":93},[45,3294,426],{"class":257},[45,3296,3297],{"class":51},"; i",[45,3299,1671],{"class":93},[45,3301,519],{"class":257},[45,3303,3297],{"class":51},[45,3305,2375],{"class":93},[45,3307,215],{"class":51},[45,3309,3310],{"class":47,"line":1394},[45,3311,2113],{"class":51},[45,3313,3314],{"class":47,"line":1400},[45,3315,3316],{"class":267},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[45,3318,3319],{"class":47,"line":1412},[45,3320,3321],{"class":267},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[45,3323,3324,3326,3328,3330,3332,3334,3336,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361],{"class":47,"line":1695},[45,3325,2580],{"class":93},[45,3327,3187],{"class":51},[45,3329,536],{"class":93},[45,3331,577],{"class":257},[45,3333,3032],{"class":93},[45,3335,400],{"class":257},[45,3337,3338],{"class":93}," ||",[45,3340,3115],{"class":51},[45,3342,536],{"class":93},[45,3344,654],{"class":257},[45,3346,3032],{"class":93},[45,3348,577],{"class":257},[45,3350,3338],{"class":93},[45,3352,3115],{"class":51},[45,3354,791],{"class":93},[45,3356,654],{"class":257},[45,3358,3032],{"class":93},[45,3360,577],{"class":257},[45,3362,215],{"class":51},[45,3364,3365],{"class":47,"line":1700},[45,3366,2593],{"class":51},[45,3368,3369,3371,3373,3376,3378],{"class":47,"line":1706},[45,3370,2598],{"class":51},[45,3372,1251],{"class":93},[45,3374,3375],{"class":313},"\"敲桌子\"",[45,3377,1251],{"class":93},[45,3379,1274],{"class":51},[45,3381,3382],{"class":47,"line":1711},[45,3383,2612],{"class":51},[45,3385,3386],{"class":47,"line":1725},[45,3387,2653],{"class":93},[45,3389,3390],{"class":47,"line":1730},[45,3391,2593],{"class":51},[45,3393,3394,3396,3398,3400,3402],{"class":47,"line":1736},[45,3395,2598],{"class":51},[45,3397,1251],{"class":93},[45,3399,649],{"class":51},[45,3401,1251],{"class":93},[45,3403,1274],{"class":51},[45,3405,3406],{"class":47,"line":1757},[45,3407,2612],{"class":51},[45,3409,3410],{"class":47,"line":1762},[45,3411,2270],{"class":51},[45,3413,3414],{"class":47,"line":1776},[45,3415,1648],{"class":51},[10,3417,3418],{},"嵌套实现星图",[35,3420,3422],{"className":197,"code":3421,"language":199,"meta":40,"style":40},"#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",[42,3423,3424,3430,3440,3448,3452,3478,3482,3511,3515,3526,3530,3539,3543],{"__ignoreMap":40},[45,3425,3426,3428],{"class":47,"line":48},[45,3427,2032],{"class":93},[45,3429,2035],{"class":313},[45,3431,3432,3434,3436,3438],{"class":47,"line":125},[45,3433,2040],{"class":93},[45,3435,2043],{"class":93},[45,3437,2047],{"class":2046},[45,3439,1373],{"class":51},[45,3441,3442,3444,3446],{"class":47,"line":1262},[45,3443,212],{"class":93},[45,3445,2056],{"class":2046},[45,3447,2059],{"class":51},[45,3449,3450],{"class":47,"line":1277},[45,3451,1629],{"class":51},[45,3453,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476],{"class":47,"line":1283},[45,3455,3284],{"class":93},[45,3457,1741],{"class":51},[45,3459,212],{"class":93},[45,3461,3115],{"class":51},[45,3463,254],{"class":93},[45,3465,400],{"class":257},[45,3467,3122],{"class":51},[45,3469,1117],{"class":93},[45,3471,654],{"class":257},[45,3473,3122],{"class":51},[45,3475,2375],{"class":93},[45,3477,215],{"class":51},[45,3479,3480],{"class":47,"line":1297},[45,3481,2113],{"class":51},[45,3483,3484,3487,3489,3491,3494,3496,3498,3501,3503,3505,3507,3509],{"class":47,"line":1303},[45,3485,3486],{"class":93},"        for",[45,3488,1741],{"class":51},[45,3490,212],{"class":93},[45,3492,3493],{"class":51}," j",[45,3495,254],{"class":93},[45,3497,400],{"class":257},[45,3499,3500],{"class":51},";j",[45,3502,1117],{"class":93},[45,3504,654],{"class":257},[45,3506,3500],{"class":51},[45,3508,2375],{"class":93},[45,3510,215],{"class":51},[45,3512,3513],{"class":47,"line":1394},[45,3514,2593],{"class":51},[45,3516,3517,3519,3521,3524],{"class":47,"line":1400},[45,3518,2598],{"class":51},[45,3520,1251],{"class":93},[45,3522,3523],{"class":313},"\"*\"",[45,3525,1373],{"class":51},[45,3527,3528],{"class":47,"line":1412},[45,3529,2612],{"class":51},[45,3531,3532,3535,3537],{"class":47,"line":1695},[45,3533,3534],{"class":51},"        cout",[45,3536,1251],{"class":93},[45,3538,1274],{"class":51},[45,3540,3541],{"class":47,"line":1700},[45,3542,2270],{"class":51},[45,3544,3545],{"class":47,"line":1706},[45,3546,1648],{"class":51},[10,3548,3549],{},"乘法口诀表",[35,3551,3553],{"className":197,"code":3552,"language":199,"meta":40,"style":40},"#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",[42,3554,3555,3561,3571,3579,3583,3609,3613,3638,3642,3682,3686,3694,3698],{"__ignoreMap":40},[45,3556,3557,3559],{"class":47,"line":48},[45,3558,2032],{"class":93},[45,3560,2417],{"class":313},[45,3562,3563,3565,3567,3569],{"class":47,"line":125},[45,3564,2040],{"class":93},[45,3566,2043],{"class":93},[45,3568,2047],{"class":2046},[45,3570,1373],{"class":51},[45,3572,3573,3575,3577],{"class":47,"line":1262},[45,3574,212],{"class":93},[45,3576,2056],{"class":2046},[45,3578,2059],{"class":51},[45,3580,3581],{"class":47,"line":1277},[45,3582,1629],{"class":51},[45,3584,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607],{"class":47,"line":1283},[45,3586,3284],{"class":93},[45,3588,209],{"class":51},[45,3590,212],{"class":93},[45,3592,3115],{"class":51},[45,3594,254],{"class":93},[45,3596,426],{"class":257},[45,3598,3122],{"class":51},[45,3600,1117],{"class":93},[45,3602,654],{"class":257},[45,3604,3122],{"class":51},[45,3606,2375],{"class":93},[45,3608,215],{"class":51},[45,3610,3611],{"class":47,"line":1297},[45,3612,2113],{"class":51},[45,3614,3615,3617,3619,3621,3623,3625,3627,3629,3631,3634,3636],{"class":47,"line":1303},[45,3616,3486],{"class":93},[45,3618,209],{"class":51},[45,3620,212],{"class":93},[45,3622,3493],{"class":51},[45,3624,254],{"class":93},[45,3626,426],{"class":257},[45,3628,3500],{"class":51},[45,3630,1671],{"class":93},[45,3632,3633],{"class":51},"i;j",[45,3635,2375],{"class":93},[45,3637,215],{"class":51},[45,3639,3640],{"class":47,"line":1394},[45,3641,2593],{"class":51},[45,3643,3644,3646,3648,3650,3652,3654,3656,3658,3660,3663,3665,3667,3669,3671,3673,3676,3678,3680],{"class":47,"line":1400},[45,3645,2598],{"class":51},[45,3647,1251],{"class":93},[45,3649,675],{"class":51},[45,3651,1251],{"class":93},[45,3653,3523],{"class":313},[45,3655,1251],{"class":93},[45,3657,649],{"class":51},[45,3659,1251],{"class":93},[45,3661,3662],{"class":313},"\"=\"",[45,3664,1251],{"class":93},[45,3666,649],{"class":51},[45,3668,663],{"class":93},[45,3670,675],{"class":51},[45,3672,1251],{"class":93},[45,3674,3675],{"class":313},"'",[45,3677,1313],{"class":257},[45,3679,3675],{"class":313},[45,3681,1373],{"class":51},[45,3683,3684],{"class":47,"line":1412},[45,3685,2612],{"class":51},[45,3687,3688,3690,3692],{"class":47,"line":1695},[45,3689,3534],{"class":51},[45,3691,1251],{"class":93},[45,3693,1274],{"class":51},[45,3695,3696],{"class":47,"line":1700},[45,3697,2270],{"class":51},[45,3699,3700],{"class":47,"line":1706},[45,3701,1648],{"class":51},[176,3703,3705],{"id":3704},"_163跳出语句","1.6.3跳出语句",[159,3707,3708],{},[162,3709,3710],{},"break语句\n作用：用于跳出选择结构或者循环结构",[10,3712,3713],{},"break使用时机：",[1214,3715,3716,3719,3722],{},[162,3717,3718],{},"出现在switch条件语句中，作用是终止case并跳出switch",[162,3720,3721],{},"出现在循环结构中，作用是跳出当前的循环结构",[162,3723,3724],{},"出现在嵌套循环中，跳出最近的内层循环语句",[159,3726,3727,3730],{"start":125},[162,3728,3729],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[162,3731,3732],{},"goto语句\n语法：goto 标记;",[10,3734,3735],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[35,3737,3739],{"className":197,"code":3738,"language":199,"meta":40,"style":40},"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",[42,3740,3741,3749,3753,3766,3776,3789,3802,3815,3823,3839],{"__ignoreMap":40},[45,3742,3743,3745,3747],{"class":47,"line":48},[45,3744,212],{"class":93},[45,3746,2056],{"class":2046},[45,3748,2059],{"class":51},[45,3750,3751],{"class":47,"line":125},[45,3752,1629],{"class":51},[45,3754,3755,3757,3759,3762,3764],{"class":47,"line":1262},[45,3756,1634],{"class":51},[45,3758,1251],{"class":93},[45,3760,3761],{"class":313},"\"1\"",[45,3763,1251],{"class":93},[45,3765,1274],{"class":51},[45,3767,3768,3771,3774],{"class":47,"line":1277},[45,3769,3770],{"class":93},"    goto",[45,3772,3773],{"class":2046}," FLAG",[45,3775,1373],{"class":51},[45,3777,3778,3780,3782,3785,3787],{"class":47,"line":1283},[45,3779,1634],{"class":51},[45,3781,1251],{"class":93},[45,3783,3784],{"class":313},"\"2\"",[45,3786,1251],{"class":93},[45,3788,1274],{"class":51},[45,3790,3791,3793,3795,3798,3800],{"class":47,"line":1297},[45,3792,1634],{"class":51},[45,3794,1251],{"class":93},[45,3796,3797],{"class":313},"\"3\"",[45,3799,1251],{"class":93},[45,3801,1274],{"class":51},[45,3803,3804,3806,3808,3811,3813],{"class":47,"line":1303},[45,3805,1634],{"class":51},[45,3807,1251],{"class":93},[45,3809,3810],{"class":313},"\"4\"",[45,3812,1251],{"class":93},[45,3814,1274],{"class":51},[45,3816,3817,3820],{"class":47,"line":1394},[45,3818,3819],{"class":2046},"    FLAG",[45,3821,3822],{"class":51},":\n",[45,3824,3825,3827,3829,3832,3834,3836],{"class":47,"line":1400},[45,3826,1634],{"class":51},[45,3828,1251],{"class":93},[45,3830,3831],{"class":313},"\"5\"",[45,3833,1251],{"class":93},[45,3835,1321],{"class":51},[45,3837,3838],{"class":267},"\u002F\u002F跳过了2,3,4,直接到5\n",[45,3840,3841],{"class":47,"line":1412},[45,3842,1648],{"class":51},[30,3844,3846],{"id":3845},"_17数组","1.7数组",[176,3848,3850],{"id":3849},"_171一维数组","1.7.1一维数组",[159,3852,3853],{},[162,3854,3855],{},"一维数组定义方式",[346,3857,3858,3868],{},[349,3859,3860],{},[352,3861,3862,3865],{},[355,3863,3864],{},"方式",[355,3866,3867],{},"注意事项",[393,3869,3870,3884,3894],{},[352,3871,3872,3878],{},[398,3873,3874,3875,264],{},"数据类型 数组名",[45,3876,3877],{},"数组长度",[398,3879,3880,3881,3883],{},"这种方式是先定义再arr",[45,3882,649],{},"赋值",[352,3885,3886,3891],{},[398,3887,3874,3888,3890],{},[45,3889,3877],{},"={值1,值2....};",[398,3892,3893],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[352,3895,3896,3900],{},[398,3897,3874,3898,3890],{},[45,3899],{},[398,3901,3902,3903,3905],{},"int arr",[45,3904],{},";这是不正确的，按照这样的方式定义必须有初始长度",[159,3907,3908],{"start":125},[162,3909,3910],{},"一维数组数组名\n用途：",[1214,3912,3913],{},[162,3914,3915],{},"1.可以统计整个数组在内存中的长度：",[35,3917,3919],{"className":197,"code":3918,"language":199,"meta":40,"style":40},"sizeof(arr);\nsizeof(arr[0]);\n",[42,3920,3921,3928],{"__ignoreMap":40},[45,3922,3923,3925],{"class":47,"line":48},[45,3924,206],{"class":93},[45,3926,3927],{"class":51},"(arr);\n",[45,3929,3930,3932,3935,3937],{"class":47,"line":125},[45,3931,206],{"class":93},[45,3933,3934],{"class":51},"(arr[",[45,3936,400],{"class":257},[45,3938,3939],{"class":51},"]);\n",[1214,3941,3942],{},[162,3943,3944],{},"2.可以获取数组在内存中的首地址:",[35,3946,3948],{"className":197,"code":3947,"language":199,"meta":40,"style":40},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[42,3949,3950,3955,3968,3973],{"__ignoreMap":40},[45,3951,3952],{"class":47,"line":48},[45,3953,3954],{"class":267},"\u002F\u002F查看16进制的首地址\n",[45,3956,3957,3959,3961,3964,3966],{"class":47,"line":125},[45,3958,1452],{"class":51},[45,3960,1251],{"class":93},[45,3962,3963],{"class":51},"arr",[45,3965,1251],{"class":93},[45,3967,1274],{"class":51},[45,3969,3970],{"class":47,"line":1262},[45,3971,3972],{"class":267},"\u002F\u002F看10进制数\n",[45,3974,3975,3977,3979,3981,3983,3985,3987,3990,3992,3994,3996],{"class":47,"line":1277},[45,3976,1452],{"class":51},[45,3978,1251],{"class":93},[45,3980,209],{"class":51},[45,3982,212],{"class":93},[45,3984,637],{"class":51},[45,3986,561],{"class":93},[45,3988,3989],{"class":51},"arr[",[45,3991,400],{"class":257},[45,3993,1147],{"class":51},[45,3995,1251],{"class":93},[45,3997,1274],{"class":51},[10,3999,4000],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1214,4002,4003],{},[162,4004,4005],{},"1️⃣五只小猪称体重",[35,4007,4009],{"className":197,"code":4008,"language":199,"meta":40,"style":40},"#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",[42,4010,4011,4017,4027,4035,4039,4079,4092,4118,4122,4134,4138,4148,4152,4156,4169,4179],{"__ignoreMap":40},[45,4012,4013,4015],{"class":47,"line":48},[45,4014,2032],{"class":93},[45,4016,2035],{"class":313},[45,4018,4019,4021,4023,4025],{"class":47,"line":125},[45,4020,2040],{"class":93},[45,4022,2043],{"class":93},[45,4024,2047],{"class":2046},[45,4026,1373],{"class":51},[45,4028,4029,4031,4033],{"class":47,"line":1262},[45,4030,212],{"class":93},[45,4032,2056],{"class":2046},[45,4034,2059],{"class":51},[45,4036,4037],{"class":47,"line":1277},[45,4038,1629],{"class":51},[45,4040,4041,4043,4046,4048,4050,4052,4054,4057,4059,4062,4064,4066,4068,4071,4073,4076],{"class":47,"line":1283},[45,4042,2068],{"class":93},[45,4044,4045],{"class":51}," arr[",[45,4047,527],{"class":257},[45,4049,1147],{"class":51},[45,4051,254],{"class":93},[45,4053,1103],{"class":51},[45,4055,4056],{"class":257},"300",[45,4058,586],{"class":51},[45,4060,4061],{"class":257},"350",[45,4063,586],{"class":51},[45,4065,1805],{"class":257},[45,4067,586],{"class":51},[45,4069,4070],{"class":257},"400",[45,4072,586],{"class":51},[45,4074,4075],{"class":257},"250",[45,4077,4078],{"class":51},"};\n",[45,4080,4081,4083,4086,4088,4090],{"class":47,"line":1297},[45,4082,2068],{"class":93},[45,4084,4085],{"class":51}," tmp",[45,4087,254],{"class":93},[45,4089,400],{"class":257},[45,4091,1373],{"class":51},[45,4093,4094,4096,4098,4100,4102,4104,4106,4108,4110,4112,4114,4116],{"class":47,"line":1303},[45,4095,3284],{"class":93},[45,4097,1741],{"class":51},[45,4099,212],{"class":93},[45,4101,3115],{"class":51},[45,4103,254],{"class":93},[45,4105,400],{"class":257},[45,4107,3122],{"class":51},[45,4109,1117],{"class":93},[45,4111,527],{"class":257},[45,4113,3122],{"class":51},[45,4115,2375],{"class":93},[45,4117,215],{"class":51},[45,4119,4120],{"class":47,"line":1394},[45,4121,2113],{"class":51},[45,4123,4124,4126,4129,4131],{"class":47,"line":1400},[45,4125,2580],{"class":93},[45,4127,4128],{"class":51},"(tmp",[45,4130,1117],{"class":93},[45,4132,4133],{"class":51},"arr[i])\n",[45,4135,4136],{"class":47,"line":1412},[45,4137,2593],{"class":51},[45,4139,4140,4143,4145],{"class":47,"line":1695},[45,4141,4142],{"class":51},"            tmp",[45,4144,254],{"class":93},[45,4146,4147],{"class":51},"arr[i];\n",[45,4149,4150],{"class":47,"line":1700},[45,4151,2612],{"class":51},[45,4153,4154],{"class":47,"line":1706},[45,4155,2270],{"class":51},[45,4157,4158,4160,4162,4165,4167],{"class":47,"line":1711},[45,4159,1634],{"class":51},[45,4161,1251],{"class":93},[45,4163,4164],{"class":51},"tmp",[45,4166,1251],{"class":93},[45,4168,1274],{"class":51},[45,4170,4171,4174,4177],{"class":47,"line":1725},[45,4172,4173],{"class":93},"    return",[45,4175,4176],{"class":257}," 0",[45,4178,1373],{"class":51},[45,4180,4181],{"class":47,"line":1730},[45,4182,1648],{"class":51},[1214,4184,4185],{},[162,4186,4187],{},"2️⃣数组元素逆置",[35,4189,4191],{"className":197,"code":4190,"language":199,"meta":40,"style":40},"\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",[42,4192,4193,4198,4204,4214,4222,4226,4261,4277,4309,4322,4327,4332,4344,4354,4364,4369,4378,4388,4393,4398,4425,4429,4445,4449,4460,4469],{"__ignoreMap":40},[45,4194,4195],{"class":47,"line":48},[45,4196,4197],{"class":267},"\u002F\u002F元素逆置\n",[45,4199,4200,4202],{"class":47,"line":125},[45,4201,2032],{"class":93},[45,4203,2035],{"class":313},[45,4205,4206,4208,4210,4212],{"class":47,"line":1262},[45,4207,2040],{"class":93},[45,4209,2043],{"class":93},[45,4211,2047],{"class":2046},[45,4213,1373],{"class":51},[45,4215,4216,4218,4220],{"class":47,"line":1277},[45,4217,212],{"class":93},[45,4219,2056],{"class":2046},[45,4221,2059],{"class":51},[45,4223,4224],{"class":47,"line":1283},[45,4225,1629],{"class":51},[45,4227,4228,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251,4253,4255,4257,4259],{"class":47,"line":1297},[45,4229,4230],{"class":93},"   int",[45,4232,4045],{"class":51},[45,4234,527],{"class":257},[45,4236,1147],{"class":51},[45,4238,254],{"class":93},[45,4240,1103],{"class":51},[45,4242,426],{"class":257},[45,4244,586],{"class":51},[45,4246,286],{"class":257},[45,4248,586],{"class":51},[45,4250,280],{"class":257},[45,4252,586],{"class":51},[45,4254,501],{"class":257},[45,4256,586],{"class":51},[45,4258,527],{"class":257},[45,4260,4078],{"class":51},[45,4262,4263,4265,4268,4270,4272,4274],{"class":47,"line":1303},[45,4264,4230],{"class":93},[45,4266,4267],{"class":51}," start",[45,4269,254],{"class":93},[45,4271,400],{"class":257},[45,4273,264],{"class":51},[45,4275,4276],{"class":267},"\u002F\u002F起始下标\n",[45,4278,4279,4281,4284,4287,4290,4293,4295,4297,4300,4302,4304,4306],{"class":47,"line":1394},[45,4280,4230],{"class":93},[45,4282,4283],{"class":51}," end",[45,4285,4286],{"class":93},"=sizeof",[45,4288,4289],{"class":51},"(arr)",[45,4291,4292],{"class":93},"\u002Fsizeof",[45,4294,3934],{"class":51},[45,4296,400],{"class":257},[45,4298,4299],{"class":51},"])",[45,4301,94],{"class":93},[45,4303,426],{"class":257},[45,4305,264],{"class":51},[45,4307,4308],{"class":267},"\u002F\u002F结束下标\n",[45,4310,4311,4314,4317,4319],{"class":47,"line":1400},[45,4312,4313],{"class":93},"   while",[45,4315,4316],{"class":51}," (start",[45,4318,1117],{"class":93},[45,4320,4321],{"class":51},"end)\n",[45,4323,4324],{"class":47,"line":1412},[45,4325,4326],{"class":51},"   {\n",[45,4328,4329],{"class":47,"line":1695},[45,4330,4331],{"class":267},"    \u002F\u002F实现元素互换代码\n",[45,4333,4334,4336,4339,4341],{"class":47,"line":1700},[45,4335,2068],{"class":93},[45,4337,4338],{"class":51}," temp",[45,4340,254],{"class":93},[45,4342,4343],{"class":51},"arr[start];\n",[45,4345,4346,4349,4351],{"class":47,"line":1706},[45,4347,4348],{"class":51},"    arr[start]",[45,4350,254],{"class":93},[45,4352,4353],{"class":51},"arr[end];\n",[45,4355,4356,4359,4361],{"class":47,"line":1711},[45,4357,4358],{"class":51},"    arr[end]",[45,4360,254],{"class":93},[45,4362,4363],{"class":51},"temp;\n",[45,4365,4366],{"class":47,"line":1725},[45,4367,4368],{"class":267},"    \u002F\u002F下标更新\n",[45,4370,4371,4374,4376],{"class":47,"line":1730},[45,4372,4373],{"class":51},"    start",[45,4375,2375],{"class":93},[45,4377,1373],{"class":51},[45,4379,4380,4383,4386],{"class":47,"line":1736},[45,4381,4382],{"class":51},"    end",[45,4384,4385],{"class":93},"--",[45,4387,1373],{"class":51},[45,4389,4390],{"class":47,"line":1757},[45,4391,4392],{"class":51},"   }\n",[45,4394,4395],{"class":47,"line":1762},[45,4396,4397],{"class":267},"   \u002F\u002F输出逆置后的数组\n",[45,4399,4400,4403,4405,4407,4409,4411,4413,4415,4417,4419,4421,4423],{"class":47,"line":1776},[45,4401,4402],{"class":93},"   for",[45,4404,1741],{"class":51},[45,4406,212],{"class":93},[45,4408,3115],{"class":51},[45,4410,254],{"class":93},[45,4412,400],{"class":257},[45,4414,3122],{"class":51},[45,4416,1117],{"class":93},[45,4418,527],{"class":257},[45,4420,3122],{"class":51},[45,4422,2375],{"class":93},[45,4424,215],{"class":51},[45,4426,4427],{"class":47,"line":1781},[45,4428,4326],{"class":51},[45,4430,4431,4433,4435,4438,4440,4443],{"class":47,"line":1810},[45,4432,1634],{"class":51},[45,4434,1251],{"class":93},[45,4436,4437],{"class":51},"arr[i]",[45,4439,1251],{"class":93},[45,4441,4442],{"class":313},"\" \"",[45,4444,1373],{"class":51},[45,4446,4447],{"class":47,"line":1815},[45,4448,4392],{"class":51},[45,4450,4451,4454,4456,4458],{"class":47,"line":1832},[45,4452,4453],{"class":2046},"   system",[45,4455,209],{"class":51},[45,4457,2391],{"class":313},[45,4459,2802],{"class":51},[45,4461,4462,4465,4467],{"class":47,"line":1837},[45,4463,4464],{"class":93},"   return",[45,4466,4176],{"class":257},[45,4468,1373],{"class":51},[45,4470,4471],{"class":47,"line":1842},[45,4472,1648],{"class":51},[1214,4474,4475],{},[162,4476,4477],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[35,4479,4481],{"className":197,"code":4480,"language":199,"meta":40,"style":40},"\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",[42,4482,4483,4488,4494,4504,4512,4516,4568,4581,4607,4611,4625,4629,4634,4639,4669,4673,4678,4712,4716,4721,4741,4746,4758,4774,4789,4794,4798,4802,4815,4841,4845,4859,4863,4871],{"__ignoreMap":40},[45,4484,4485],{"class":47,"line":48},[45,4486,4487],{"class":267},"\u002F\u002F冒泡排序,升序\n",[45,4489,4490,4492],{"class":47,"line":125},[45,4491,2032],{"class":93},[45,4493,2035],{"class":313},[45,4495,4496,4498,4500,4502],{"class":47,"line":1262},[45,4497,2040],{"class":93},[45,4499,2043],{"class":93},[45,4501,2047],{"class":2046},[45,4503,1373],{"class":51},[45,4505,4506,4508,4510],{"class":47,"line":1277},[45,4507,212],{"class":93},[45,4509,2056],{"class":2046},[45,4511,2059],{"class":51},[45,4513,4514],{"class":47,"line":1283},[45,4515,1629],{"class":51},[45,4517,4518,4520,4522,4524,4527,4529,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564,4566],{"class":47,"line":1297},[45,4519,2068],{"class":93},[45,4521,4045],{"class":51},[45,4523,628],{"class":257},[45,4525,4526],{"class":51},"] ",[45,4528,254],{"class":93},[45,4530,4531],{"class":51}," {",[45,4533,501],{"class":257},[45,4535,586],{"class":51},[45,4537,286],{"class":257},[45,4539,586],{"class":51},[45,4541,603],{"class":257},[45,4543,586],{"class":51},[45,4545,400],{"class":257},[45,4547,586],{"class":51},[45,4549,527],{"class":257},[45,4551,586],{"class":51},[45,4553,577],{"class":257},[45,4555,586],{"class":51},[45,4557,426],{"class":257},[45,4559,586],{"class":51},[45,4561,280],{"class":257},[45,4563,586],{"class":51},[45,4565,628],{"class":257},[45,4567,4078],{"class":51},[45,4569,4570,4572,4574,4577,4579],{"class":47,"line":1303},[45,4571,1634],{"class":51},[45,4573,1251],{"class":93},[45,4575,4576],{"class":313},"\"排序前：\"",[45,4578,1251],{"class":93},[45,4580,1274],{"class":51},[45,4582,4583,4585,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605],{"class":47,"line":1394},[45,4584,3284],{"class":93},[45,4586,1741],{"class":51},[45,4588,212],{"class":93},[45,4590,3115],{"class":51},[45,4592,254],{"class":93},[45,4594,400],{"class":257},[45,4596,3122],{"class":51},[45,4598,1117],{"class":93},[45,4600,628],{"class":257},[45,4602,3122],{"class":51},[45,4604,2375],{"class":93},[45,4606,215],{"class":51},[45,4608,4609],{"class":47,"line":1400},[45,4610,2113],{"class":51},[45,4612,4613,4615,4617,4619,4621,4623],{"class":47,"line":1412},[45,4614,3534],{"class":51},[45,4616,1251],{"class":93},[45,4618,4437],{"class":51},[45,4620,1251],{"class":93},[45,4622,4442],{"class":313},[45,4624,1373],{"class":51},[45,4626,4627],{"class":47,"line":1695},[45,4628,2270],{"class":51},[45,4630,4631],{"class":47,"line":1700},[45,4632,4633],{"class":267},"    \u002F\u002F开始冒泡排序\n",[45,4635,4636],{"class":47,"line":1706},[45,4637,4638],{"class":267},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[45,4640,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665,4667],{"class":47,"line":1711},[45,4642,3284],{"class":93},[45,4644,1741],{"class":51},[45,4646,212],{"class":93},[45,4648,3115],{"class":51},[45,4650,254],{"class":93},[45,4652,400],{"class":257},[45,4654,3122],{"class":51},[45,4656,1117],{"class":93},[45,4658,628],{"class":257},[45,4660,94],{"class":93},[45,4662,426],{"class":257},[45,4664,3122],{"class":51},[45,4666,2375],{"class":93},[45,4668,215],{"class":51},[45,4670,4671],{"class":47,"line":1725},[45,4672,2113],{"class":51},[45,4674,4675],{"class":47,"line":1730},[45,4676,4677],{"class":267},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[45,4679,4680,4682,4684,4686,4688,4690,4692,4694,4696,4698,4700,4702,4704,4706,4708,4710],{"class":47,"line":1736},[45,4681,3486],{"class":93},[45,4683,1741],{"class":51},[45,4685,212],{"class":93},[45,4687,3493],{"class":51},[45,4689,254],{"class":93},[45,4691,400],{"class":257},[45,4693,3500],{"class":51},[45,4695,1117],{"class":93},[45,4697,628],{"class":257},[45,4699,94],{"class":93},[45,4701,649],{"class":51},[45,4703,94],{"class":93},[45,4705,426],{"class":257},[45,4707,3500],{"class":51},[45,4709,2375],{"class":93},[45,4711,215],{"class":51},[45,4713,4714],{"class":47,"line":1757},[45,4715,2593],{"class":51},[45,4717,4718],{"class":47,"line":1762},[45,4719,4720],{"class":267},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[45,4722,4723,4726,4729,4731,4734,4736,4738],{"class":47,"line":1776},[45,4724,4725],{"class":93},"            if",[45,4727,4728],{"class":51},"(arr[j]",[45,4730,1167],{"class":93},[45,4732,4733],{"class":51},"arr[j",[45,4735,689],{"class":93},[45,4737,426],{"class":257},[45,4739,4740],{"class":51},"])\n",[45,4742,4743],{"class":47,"line":1781},[45,4744,4745],{"class":51},"            {\n",[45,4747,4748,4751,4753,4755],{"class":47,"line":1810},[45,4749,4750],{"class":93},"                int",[45,4752,4338],{"class":51},[45,4754,254],{"class":93},[45,4756,4757],{"class":51},"arr[j];\n",[45,4759,4760,4763,4765,4767,4769,4771],{"class":47,"line":1815},[45,4761,4762],{"class":51},"                arr[j]",[45,4764,254],{"class":93},[45,4766,4733],{"class":51},[45,4768,689],{"class":93},[45,4770,426],{"class":257},[45,4772,4773],{"class":51},"];\n",[45,4775,4776,4779,4781,4783,4785,4787],{"class":47,"line":1832},[45,4777,4778],{"class":51},"                arr[j",[45,4780,689],{"class":93},[45,4782,426],{"class":257},[45,4784,1147],{"class":51},[45,4786,254],{"class":93},[45,4788,4363],{"class":51},[45,4790,4791],{"class":47,"line":1837},[45,4792,4793],{"class":51},"            }\n",[45,4795,4796],{"class":47,"line":1842},[45,4797,2612],{"class":51},[45,4799,4800],{"class":47,"line":1847},[45,4801,2270],{"class":51},[45,4803,4804,4806,4808,4811,4813],{"class":47,"line":1861},[45,4805,1634],{"class":51},[45,4807,1251],{"class":93},[45,4809,4810],{"class":313},"\"排序后：\"",[45,4812,1251],{"class":93},[45,4814,1274],{"class":51},[45,4816,4817,4819,4821,4823,4825,4827,4829,4831,4833,4835,4837,4839],{"class":47,"line":1866},[45,4818,3284],{"class":93},[45,4820,1741],{"class":51},[45,4822,212],{"class":93},[45,4824,3115],{"class":51},[45,4826,254],{"class":93},[45,4828,400],{"class":257},[45,4830,3122],{"class":51},[45,4832,1117],{"class":93},[45,4834,628],{"class":257},[45,4836,3122],{"class":51},[45,4838,2375],{"class":93},[45,4840,215],{"class":51},[45,4842,4843],{"class":47,"line":2660},[45,4844,2113],{"class":51},[45,4846,4847,4849,4851,4853,4855,4857],{"class":47,"line":2674},[45,4848,3534],{"class":51},[45,4850,1251],{"class":93},[45,4852,4437],{"class":51},[45,4854,1251],{"class":93},[45,4856,4442],{"class":313},[45,4858,1373],{"class":51},[45,4860,4861],{"class":47,"line":2682},[45,4862,2270],{"class":51},[45,4864,4865,4867,4869],{"class":47,"line":2687},[45,4866,4173],{"class":93},[45,4868,4176],{"class":257},[45,4870,1373],{"class":51},[45,4872,4873],{"class":47,"line":2693},[45,4874,1648],{"class":51},[176,4876,4878],{"id":4877},"_172二维数组","1.7.2二维数组",[159,4880,4881],{},[162,4882,4883],{},"二维数组的四种定义方式",[346,4885,4886,4895],{},[349,4887,4888],{},[352,4889,4890,4893],{},[355,4891,4892],{},"序号",[355,4894,3864],{},[393,4896,4897,4907,4916,4925,4934],{},[352,4898,4899,4901],{},[398,4900,426],{},[398,4902,4903,4904,264],{},"数据类型 数组名[行数]",[45,4905,4906],{},"列数",[352,4908,4909,4911],{},[398,4910,286],{},[398,4912,4903,4913,4915],{},[45,4914,4906],{},"={ {数据1,数据2}，{数据3，数据4}... }",[352,4917,4918,4920],{},[398,4919,280],{},[398,4921,4903,4922,4924],{},[45,4923,4906],{},"={数据1,数据2,数据3...}",[352,4926,4927,4929],{},[398,4928,501],{},[398,4930,4931,4932,4924],{},"数据类型 数组名[]",[45,4933,4906],{},[352,4935,4936,4939],{},[398,4937,4938],{},"注意：不能只省略列数",[398,4940],{},[159,4942,4943],{"start":125},[162,4944,4945],{},"二维数组数组名",[1214,4947,4948,4951],{},[162,4949,4950],{},"1.查看二维数组所占内存空间",[162,4952,4953],{},"2.获取二维数组首地址",[10,4955,4956],{},"已知二维数组，求二维数组的行数与列数",[35,4958,4960],{"className":197,"code":4959,"language":199,"meta":40,"style":40},"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",[42,4961,4962,4970,4974,4992,4996,5014,5030,5035,5060,5093],{"__ignoreMap":40},[45,4963,4964,4966,4968],{"class":47,"line":48},[45,4965,212],{"class":93},[45,4967,2056],{"class":2046},[45,4969,2059],{"class":51},[45,4971,4972],{"class":47,"line":125},[45,4973,1629],{"class":51},[45,4975,4976,4978,4980,4982,4985,4987,4989],{"class":47,"line":1262},[45,4977,2068],{"class":93},[45,4979,4045],{"class":51},[45,4981,286],{"class":257},[45,4983,4984],{"class":51},"][",[45,4986,280],{"class":257},[45,4988,1147],{"class":51},[45,4990,4991],{"class":93},"=\n",[45,4993,4994],{"class":47,"line":1277},[45,4995,2113],{"class":51},[45,4997,4998,5001,5003,5005,5007,5009,5011],{"class":47,"line":1283},[45,4999,5000],{"class":51},"        {",[45,5002,426],{"class":257},[45,5004,586],{"class":51},[45,5006,286],{"class":257},[45,5008,586],{"class":51},[45,5010,280],{"class":257},[45,5012,5013],{"class":51},"},\n",[45,5015,5016,5018,5020,5022,5024,5026,5028],{"class":47,"line":1297},[45,5017,5000],{"class":51},[45,5019,501],{"class":257},[45,5021,586],{"class":51},[45,5023,527],{"class":257},[45,5025,586],{"class":51},[45,5027,552],{"class":257},[45,5029,1648],{"class":51},[45,5031,5032],{"class":47,"line":1303},[45,5033,5034],{"class":51},"    };\n",[45,5036,5037,5039,5041,5044,5046,5048,5050,5052,5054,5056,5058],{"class":47,"line":1394},[45,5038,1634],{"class":51},[45,5040,1251],{"class":93},[45,5042,5043],{"class":313},"\"二维数组的行数\"",[45,5045,1455],{"class":93},[45,5047,4289],{"class":51},[45,5049,4292],{"class":93},[45,5051,3934],{"class":51},[45,5053,400],{"class":257},[45,5055,4299],{"class":51},[45,5057,1251],{"class":93},[45,5059,1274],{"class":51},[45,5061,5062,5064,5066,5069,5071,5073,5075,5077,5079,5081,5083,5085,5087,5089,5091],{"class":47,"line":1400},[45,5063,1634],{"class":51},[45,5065,1251],{"class":93},[45,5067,5068],{"class":313},"\"二维数组的列数\"",[45,5070,1455],{"class":93},[45,5072,3934],{"class":51},[45,5074,400],{"class":257},[45,5076,4299],{"class":51},[45,5078,4292],{"class":93},[45,5080,3934],{"class":51},[45,5082,400],{"class":257},[45,5084,4984],{"class":51},[45,5086,400],{"class":257},[45,5088,4299],{"class":51},[45,5090,1251],{"class":93},[45,5092,1274],{"class":51},[45,5094,5095],{"class":47,"line":1412},[45,5096,1648],{"class":51},[10,5098,5099],{},"查看二维数组首地址",[35,5101,5103],{"className":197,"code":5102,"language":199,"meta":40,"style":40},"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",[42,5104,5105,5122,5148,5173],{"__ignoreMap":40},[45,5106,5107,5109,5111,5114,5116,5118,5120],{"class":47,"line":48},[45,5108,1452],{"class":51},[45,5110,1251],{"class":93},[45,5112,5113],{"class":313},"\"二维数组首地址：\"",[45,5115,1251],{"class":93},[45,5117,3963],{"class":51},[45,5119,1251],{"class":93},[45,5121,1274],{"class":51},[45,5123,5124,5126,5128,5131,5133,5135,5137,5140,5142,5144,5146],{"class":47,"line":125},[45,5125,1452],{"class":51},[45,5127,1251],{"class":93},[45,5129,5130],{"class":313},"\"二维数组第一行的首地址：\"",[45,5132,1251],{"class":93},[45,5134,209],{"class":51},[45,5136,212],{"class":93},[45,5138,5139],{"class":51},")arr[",[45,5141,400],{"class":257},[45,5143,1147],{"class":51},[45,5145,1251],{"class":93},[45,5147,1274],{"class":51},[45,5149,5150,5152,5154,5157,5159,5161,5163,5165,5167,5169,5171],{"class":47,"line":1262},[45,5151,1452],{"class":51},[45,5153,1251],{"class":93},[45,5155,5156],{"class":313},"\"二维数组第二行的首地址：\"",[45,5158,1251],{"class":93},[45,5160,209],{"class":51},[45,5162,212],{"class":93},[45,5164,5139],{"class":51},[45,5166,426],{"class":257},[45,5168,1147],{"class":51},[45,5170,1251],{"class":93},[45,5172,1274],{"class":51},[45,5174,5175,5177,5179,5182,5184,5186,5188,5190,5192,5194,5196,5198,5200,5202,5204,5206],{"class":47,"line":1277},[45,5176,1452],{"class":51},[45,5178,1251],{"class":93},[45,5180,5181],{"class":313},"\"二维数组第一个元素的首地址:\"",[45,5183,1251],{"class":93},[45,5185,209],{"class":51},[45,5187,212],{"class":93},[45,5189,637],{"class":51},[45,5191,561],{"class":93},[45,5193,3989],{"class":51},[45,5195,400],{"class":257},[45,5197,4984],{"class":51},[45,5199,400],{"class":257},[45,5201,1147],{"class":51},[45,5203,1251],{"class":93},[45,5205,1321],{"class":51},[45,5207,5208],{"class":267},"\u002F\u002F对于数，要加取址符\n",[121,5210,5211],{},"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":40,"searchDepth":125,"depth":125,"links":5213},[5214,5215,5216,5224,5225,5231,5236],{"id":149,"depth":125,"text":150},{"id":156,"depth":125,"text":157},{"id":173,"depth":125,"text":174,"children":5217},[5218,5219,5220,5221,5222,5223],{"id":178,"depth":1262,"text":179},{"id":225,"depth":1262,"text":226},{"id":294,"depth":1262,"text":295},{"id":1232,"depth":1262,"text":1233},{"id":1327,"depth":1262,"text":1328},{"id":1426,"depth":1262,"text":1427},{"id":1468,"depth":125,"text":1469},{"id":1536,"depth":125,"text":1537,"children":5226},[5227,5228,5229,5230],{"id":1540,"depth":1262,"text":1541},{"id":1562,"depth":1262,"text":1563},{"id":1571,"depth":1262,"text":1572},{"id":1580,"depth":1262,"text":1581},{"id":1589,"depth":125,"text":1590,"children":5232},[5233,5234,5235],{"id":1593,"depth":1262,"text":1594},{"id":2288,"depth":1262,"text":2289},{"id":3704,"depth":1262,"text":3705},{"id":3845,"depth":125,"text":3846,"children":5237},[5238,5239],{"id":3849,"depth":1262,"text":3850},{"id":4877,"depth":1262,"text":4878},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":141,"description":40},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5246,"title":5247,"body":5248,"description":40,"extension":131,"meta":6348,"navigation":133,"path":6349,"seo":6350,"stem":6351,"__hash__":6352},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5249,"toc":6340},[5250,5253,5257,5265,5273,5276,5342,5346,5349,5425,5429,5432,5435,5438,5651,5655,5660,5724,5729,5796,5801,5892,5895,6000,6004,6007,6013,6157,6161,6164,6178,6181,6226,6229,6337],[20,5251,5247],{"id":5252},"_2函数",[30,5254,5256],{"id":5255},"_21函数概述","2.1函数概述",[159,5258,5259,5262],{},[162,5260,5261],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[162,5263,5264],{},"语法：",[35,5266,5271],{"className":5267,"code":5269,"language":5270,"meta":40},[5268],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[42,5272,5269],{"__ignoreMap":40},[10,5274,5275],{},"小案例",[35,5277,5279],{"className":197,"code":5278,"language":199,"meta":40,"style":40},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[42,5280,5281,5286,5310,5314,5331,5338],{"__ignoreMap":40},[45,5282,5283],{"class":47,"line":48},[45,5284,5285],{"class":267},"\u002F\u002Fnum1,num2形参\n",[45,5287,5288,5290,5293,5295,5297,5301,5303,5305,5308],{"class":47,"line":125},[45,5289,212],{"class":93},[45,5291,5292],{"class":2046}," add",[45,5294,209],{"class":51},[45,5296,212],{"class":93},[45,5298,5300],{"class":5299},"s4XuR"," num1",[45,5302,586],{"class":51},[45,5304,212],{"class":93},[45,5306,5307],{"class":5299}," num2",[45,5309,215],{"class":51},[45,5311,5312],{"class":47,"line":1262},[45,5313,1629],{"class":51},[45,5315,5316,5318,5321,5323,5326,5328],{"class":47,"line":1277},[45,5317,2068],{"class":93},[45,5319,5320],{"class":51}," sum",[45,5322,254],{"class":93},[45,5324,5325],{"class":51},"num1",[45,5327,689],{"class":93},[45,5329,5330],{"class":51},"num2;\n",[45,5332,5333,5335],{"class":47,"line":1283},[45,5334,4173],{"class":93},[45,5336,5337],{"class":51}," sum;\n",[45,5339,5340],{"class":47,"line":1297},[45,5341,1648],{"class":51},[30,5343,5345],{"id":5344},"_22函数调用","2.2函数调用",[10,5347,5348],{},"调用刚刚写的求和函数",[35,5350,5352],{"className":197,"code":5351,"language":199,"meta":40,"style":40},"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",[42,5353,5354,5362,5366,5371,5383,5395,5404,5409,5421],{"__ignoreMap":40},[45,5355,5356,5358,5360],{"class":47,"line":48},[45,5357,212],{"class":93},[45,5359,2056],{"class":2046},[45,5361,2059],{"class":51},[45,5363,5364],{"class":47,"line":125},[45,5365,1629],{"class":51},[45,5367,5368],{"class":47,"line":1262},[45,5369,5370],{"class":267},"    \u002F\u002Fa,b实参\n",[45,5372,5373,5375,5377,5379,5381],{"class":47,"line":1277},[45,5374,2068],{"class":93},[45,5376,1481],{"class":51},[45,5378,254],{"class":93},[45,5380,400],{"class":257},[45,5382,1373],{"class":51},[45,5384,5385,5387,5389,5391,5393],{"class":47,"line":1283},[45,5386,2068],{"class":93},[45,5388,2916],{"class":51},[45,5390,254],{"class":93},[45,5392,400],{"class":257},[45,5394,1373],{"class":51},[45,5396,5397,5399,5401],{"class":47,"line":1297},[45,5398,2095],{"class":51},[45,5400,1512],{"class":93},[45,5402,5403],{"class":51},"a,b;\n",[45,5405,5406],{"class":47,"line":1303},[45,5407,5408],{"class":267},"    \u002F\u002F调用函数时，实参值传给了形参\n",[45,5410,5411,5413,5415,5418],{"class":47,"line":1394},[45,5412,1634],{"class":51},[45,5414,1251],{"class":93},[45,5416,5417],{"class":2046},"add",[45,5419,5420],{"class":51},"(a,b);\n",[45,5422,5423],{"class":47,"line":1400},[45,5424,1648],{"class":51},[30,5426,5428],{"id":5427},"_23值传递","2.3值传递",[10,5430,5431],{},"值传递就是函数调用时实参将数值传给形参",[10,5433,5434],{},"值传递时，如果形参发生任何改变，不会影响实参",[10,5436,5437],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[35,5439,5441],{"className":197,"code":5440,"language":199,"meta":40,"style":40},"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",[42,5442,5443,5465,5469,5482,5499,5517,5528,5537,5546,5559,5575,5591,5600,5604,5612,5616,5628,5640,5647],{"__ignoreMap":40},[45,5444,5445,5448,5451,5453,5455,5457,5459,5461,5463],{"class":47,"line":48},[45,5446,5447],{"class":93},"void",[45,5449,5450],{"class":2046}," swap",[45,5452,209],{"class":51},[45,5454,212],{"class":93},[45,5456,5300],{"class":5299},[45,5458,586],{"class":51},[45,5460,212],{"class":93},[45,5462,5307],{"class":5299},[45,5464,215],{"class":51},[45,5466,5467],{"class":47,"line":125},[45,5468,1629],{"class":51},[45,5470,5471,5473,5475,5478,5480],{"class":47,"line":1262},[45,5472,1634],{"class":51},[45,5474,1251],{"class":93},[45,5476,5477],{"class":313},"\"交换前：\"",[45,5479,1251],{"class":93},[45,5481,1274],{"class":51},[45,5483,5484,5486,5488,5491,5493,5495,5497],{"class":47,"line":1277},[45,5485,1634],{"class":51},[45,5487,1251],{"class":93},[45,5489,5490],{"class":313},"\"num1=\"",[45,5492,1251],{"class":93},[45,5494,5325],{"class":51},[45,5496,1251],{"class":93},[45,5498,1274],{"class":51},[45,5500,5501,5503,5505,5508,5510,5513,5515],{"class":47,"line":1283},[45,5502,1634],{"class":51},[45,5504,1251],{"class":93},[45,5506,5507],{"class":313},"\"num2=\"",[45,5509,1251],{"class":93},[45,5511,5512],{"class":51},"num2",[45,5514,1251],{"class":93},[45,5516,1274],{"class":51},[45,5518,5519,5521,5523,5525],{"class":47,"line":1297},[45,5520,2068],{"class":93},[45,5522,4338],{"class":51},[45,5524,254],{"class":93},[45,5526,5527],{"class":51},"num1;\n",[45,5529,5530,5533,5535],{"class":47,"line":1303},[45,5531,5532],{"class":51},"    num1",[45,5534,254],{"class":93},[45,5536,5330],{"class":51},[45,5538,5539,5542,5544],{"class":47,"line":1394},[45,5540,5541],{"class":51},"    num2",[45,5543,254],{"class":93},[45,5545,4363],{"class":51},[45,5547,5548,5550,5552,5555,5557],{"class":47,"line":1400},[45,5549,1634],{"class":51},[45,5551,1251],{"class":93},[45,5553,5554],{"class":313},"\"交换后：\"",[45,5556,1251],{"class":93},[45,5558,1274],{"class":51},[45,5560,5561,5563,5565,5567,5569,5571,5573],{"class":47,"line":1412},[45,5562,1634],{"class":51},[45,5564,1251],{"class":93},[45,5566,5490],{"class":313},[45,5568,1251],{"class":93},[45,5570,5325],{"class":51},[45,5572,1251],{"class":93},[45,5574,1274],{"class":51},[45,5576,5577,5579,5581,5583,5585,5587,5589],{"class":47,"line":1695},[45,5578,1634],{"class":51},[45,5580,1251],{"class":93},[45,5582,5507],{"class":313},[45,5584,1251],{"class":93},[45,5586,5512],{"class":51},[45,5588,1251],{"class":93},[45,5590,1274],{"class":51},[45,5592,5593,5595,5597],{"class":47,"line":1700},[45,5594,4173],{"class":93},[45,5596,264],{"class":51},[45,5598,5599],{"class":267},"\u002F\u002F或者不写\n",[45,5601,5602],{"class":47,"line":1706},[45,5603,1648],{"class":51},[45,5605,5606,5608,5610],{"class":47,"line":1711},[45,5607,212],{"class":93},[45,5609,2056],{"class":2046},[45,5611,2059],{"class":51},[45,5613,5614],{"class":47,"line":1725},[45,5615,1629],{"class":51},[45,5617,5618,5620,5622,5624,5626],{"class":47,"line":1730},[45,5619,2068],{"class":93},[45,5621,1481],{"class":51},[45,5623,254],{"class":93},[45,5625,654],{"class":257},[45,5627,1373],{"class":51},[45,5629,5630,5632,5634,5636,5638],{"class":47,"line":1736},[45,5631,2068],{"class":93},[45,5633,2916],{"class":51},[45,5635,254],{"class":93},[45,5637,907],{"class":257},[45,5639,1373],{"class":51},[45,5641,5642,5645],{"class":47,"line":1757},[45,5643,5644],{"class":2046},"    swap",[45,5646,5420],{"class":51},[45,5648,5649],{"class":47,"line":1762},[45,5650,1648],{"class":51},[30,5652,5654],{"id":5653},"_24函数的常见形式","2.4函数的常见形式",[159,5656,5657],{},[162,5658,5659],{},"无参无返",[35,5661,5663],{"className":197,"code":5662,"language":199,"meta":40,"style":40},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[42,5664,5665,5674,5678,5691,5695,5703,5707,5712,5720],{"__ignoreMap":40},[45,5666,5667,5669,5672],{"class":47,"line":48},[45,5668,5447],{"class":93},[45,5670,5671],{"class":2046}," test01",[45,5673,2059],{"class":51},[45,5675,5676],{"class":47,"line":125},[45,5677,1629],{"class":51},[45,5679,5680,5682,5684,5687,5689],{"class":47,"line":1262},[45,5681,1634],{"class":51},[45,5683,1251],{"class":93},[45,5685,5686],{"class":313},"\"你好\"",[45,5688,1251],{"class":93},[45,5690,1274],{"class":51},[45,5692,5693],{"class":47,"line":1277},[45,5694,1648],{"class":51},[45,5696,5697,5699,5701],{"class":47,"line":1283},[45,5698,212],{"class":93},[45,5700,2056],{"class":2046},[45,5702,2059],{"class":51},[45,5704,5705],{"class":47,"line":1297},[45,5706,1629],{"class":51},[45,5708,5709],{"class":47,"line":1303},[45,5710,5711],{"class":267},"    \u002F\u002F函数调用\n",[45,5713,5714,5717],{"class":47,"line":1394},[45,5715,5716],{"class":2046},"    test01",[45,5718,5719],{"class":51},"();\n",[45,5721,5722],{"class":47,"line":1400},[45,5723,1648],{"class":51},[159,5725,5726],{"start":125},[162,5727,5728],{},"有参无返",[35,5730,5732],{"className":197,"code":5731,"language":199,"meta":40,"style":40},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[42,5733,5734,5749,5753,5765,5769,5777,5781,5792],{"__ignoreMap":40},[45,5735,5736,5738,5741,5743,5745,5747],{"class":47,"line":48},[45,5737,5447],{"class":93},[45,5739,5740],{"class":2046}," test02",[45,5742,209],{"class":51},[45,5744,212],{"class":93},[45,5746,1481],{"class":5299},[45,5748,215],{"class":51},[45,5750,5751],{"class":47,"line":125},[45,5752,1629],{"class":51},[45,5754,5755,5757,5759,5761,5763],{"class":47,"line":1262},[45,5756,1634],{"class":51},[45,5758,1251],{"class":93},[45,5760,5686],{"class":313},[45,5762,1251],{"class":93},[45,5764,1274],{"class":51},[45,5766,5767],{"class":47,"line":1277},[45,5768,1648],{"class":51},[45,5770,5771,5773,5775],{"class":47,"line":1283},[45,5772,212],{"class":93},[45,5774,2056],{"class":2046},[45,5776,2059],{"class":51},[45,5778,5779],{"class":47,"line":1297},[45,5780,1629],{"class":51},[45,5782,5783,5786,5788,5790],{"class":47,"line":1303},[45,5784,5785],{"class":2046},"    test02",[45,5787,209],{"class":51},[45,5789,519],{"class":257},[45,5791,2802],{"class":51},[45,5793,5794],{"class":47,"line":1394},[45,5795,1648],{"class":51},[159,5797,5798],{"start":1262},[162,5799,5800],{},"无参有返",[35,5802,5804],{"className":197,"code":5803,"language":199,"meta":40,"style":40},"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",[42,5805,5806,5815,5819,5831,5840,5844,5852,5856,5869,5888],{"__ignoreMap":40},[45,5807,5808,5810,5813],{"class":47,"line":48},[45,5809,212],{"class":93},[45,5811,5812],{"class":2046}," test03",[45,5814,2059],{"class":51},[45,5816,5817],{"class":47,"line":125},[45,5818,1629],{"class":51},[45,5820,5821,5823,5825,5827,5829],{"class":47,"line":1262},[45,5822,1634],{"class":51},[45,5824,1251],{"class":93},[45,5826,5686],{"class":313},[45,5828,1251],{"class":93},[45,5830,1274],{"class":51},[45,5832,5833,5835,5838],{"class":47,"line":1277},[45,5834,4173],{"class":93},[45,5836,5837],{"class":257}," 100",[45,5839,1373],{"class":51},[45,5841,5842],{"class":47,"line":1283},[45,5843,1648],{"class":51},[45,5845,5846,5848,5850],{"class":47,"line":1297},[45,5847,212],{"class":93},[45,5849,2056],{"class":2046},[45,5851,2059],{"class":51},[45,5853,5854],{"class":47,"line":1303},[45,5855,1629],{"class":51},[45,5857,5858,5860,5862,5864,5867],{"class":47,"line":1394},[45,5859,2068],{"class":93},[45,5861,5300],{"class":51},[45,5863,254],{"class":93},[45,5865,5866],{"class":2046},"test03",[45,5868,5719],{"class":51},[45,5870,5871,5873,5875,5877,5879,5881,5883,5885],{"class":47,"line":1400},[45,5872,1634],{"class":51},[45,5874,1251],{"class":93},[45,5876,5490],{"class":313},[45,5878,1251],{"class":93},[45,5880,5325],{"class":51},[45,5882,1251],{"class":93},[45,5884,1321],{"class":51},[45,5886,5887],{"class":267}," \u002F\u002F100\n",[45,5889,5890],{"class":47,"line":1412},[45,5891,1648],{"class":51},[10,5893,5894],{},"4.有参有返",[35,5896,5898],{"className":197,"code":5897,"language":199,"meta":40,"style":40},"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",[42,5899,5900,5915,5919,5932,5938,5942,5951,5955,5967,5981,5996],{"__ignoreMap":40},[45,5901,5902,5904,5907,5909,5911,5913],{"class":47,"line":48},[45,5903,212],{"class":93},[45,5905,5906],{"class":2046}," test04",[45,5908,209],{"class":51},[45,5910,212],{"class":93},[45,5912,1481],{"class":5299},[45,5914,215],{"class":51},[45,5916,5917],{"class":47,"line":125},[45,5918,1629],{"class":51},[45,5920,5921,5923,5925,5928,5930],{"class":47,"line":1262},[45,5922,1634],{"class":51},[45,5924,1251],{"class":93},[45,5926,5927],{"class":313},"\"hello\"",[45,5929,1251],{"class":93},[45,5931,1274],{"class":51},[45,5933,5934,5936],{"class":47,"line":1277},[45,5935,4173],{"class":93},[45,5937,1515],{"class":51},[45,5939,5940],{"class":47,"line":1283},[45,5941,1648],{"class":51},[45,5943,5944,5946,5949],{"class":47,"line":1297},[45,5945,212],{"class":93},[45,5947,5948],{"class":2046}," mian",[45,5950,2059],{"class":51},[45,5952,5953],{"class":47,"line":1303},[45,5954,1629],{"class":51},[45,5956,5957,5959,5961,5963,5965],{"class":47,"line":1394},[45,5958,2068],{"class":93},[45,5960,2916],{"class":51},[45,5962,254],{"class":93},[45,5964,426],{"class":257},[45,5966,1373],{"class":51},[45,5968,5969,5971,5973,5975,5978],{"class":47,"line":1400},[45,5970,2068],{"class":93},[45,5972,2932],{"class":51},[45,5974,254],{"class":93},[45,5976,5977],{"class":2046},"test04",[45,5979,5980],{"class":51},"(b);\n",[45,5982,5983,5985,5987,5989,5991,5993],{"class":47,"line":1412},[45,5984,1634],{"class":51},[45,5986,1251],{"class":93},[45,5988,496],{"class":51},[45,5990,1251],{"class":93},[45,5992,1321],{"class":51},[45,5994,5995],{"class":267}," \u002F\u002F1\n",[45,5997,5998],{"class":47,"line":1695},[45,5999,1648],{"class":51},[30,6001,6003],{"id":6002},"_25函数的声明","2.5函数的声明",[10,6005,6006],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[10,6008,6009,6010],{},"函数的",[358,6011,6012],{},"声明可以多次，但是函数的定义只能有一次",[35,6014,6016],{"className":197,"code":6015,"language":199,"meta":40,"style":40},"\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",[42,6017,6018,6023,6028,6053,6062,6066,6078,6090,6106,6110,6130,6134,6153],{"__ignoreMap":40},[45,6019,6020],{"class":47,"line":48},[45,6021,6022],{"class":267},"\u002F\u002F函数声明\n",[45,6024,6025],{"class":47,"line":125},[45,6026,6027],{"class":267},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[45,6029,6030,6032,6035,6037,6039,6041,6043,6045,6047,6050],{"class":47,"line":1262},[45,6031,212],{"class":93},[45,6033,6034],{"class":2046}," max",[45,6036,209],{"class":51},[45,6038,212],{"class":93},[45,6040,1481],{"class":5299},[45,6042,586],{"class":51},[45,6044,212],{"class":93},[45,6046,2916],{"class":5299},[45,6048,6049],{"class":51},");",[45,6051,6052],{"class":267},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[45,6054,6055,6057,6059],{"class":47,"line":1277},[45,6056,212],{"class":93},[45,6058,2056],{"class":2046},[45,6060,6061],{"class":51},"() \n",[45,6063,6064],{"class":47,"line":1283},[45,6065,1629],{"class":51},[45,6067,6068,6070,6072,6074,6076],{"class":47,"line":1297},[45,6069,2068],{"class":93},[45,6071,1481],{"class":51},[45,6073,254],{"class":93},[45,6075,654],{"class":257},[45,6077,1373],{"class":51},[45,6079,6080,6082,6084,6086,6088],{"class":47,"line":1303},[45,6081,2068],{"class":93},[45,6083,2916],{"class":51},[45,6085,254],{"class":93},[45,6087,907],{"class":257},[45,6089,1373],{"class":51},[45,6091,6092,6094,6096,6099,6102,6104],{"class":47,"line":1394},[45,6093,1634],{"class":51},[45,6095,1251],{"class":93},[45,6097,6098],{"class":2046},"max",[45,6100,6101],{"class":51},"(a,b)",[45,6103,1251],{"class":93},[45,6105,1274],{"class":51},[45,6107,6108],{"class":47,"line":1400},[45,6109,1648],{"class":51},[45,6111,6112,6114,6116,6118,6120,6122,6124,6126,6128],{"class":47,"line":1412},[45,6113,212],{"class":93},[45,6115,6034],{"class":2046},[45,6117,209],{"class":51},[45,6119,212],{"class":93},[45,6121,1481],{"class":5299},[45,6123,586],{"class":51},[45,6125,212],{"class":93},[45,6127,2916],{"class":5299},[45,6129,215],{"class":51},[45,6131,6132],{"class":47,"line":1695},[45,6133,1629],{"class":51},[45,6135,6136,6138,6140,6142,6144,6146,6148,6150],{"class":47,"line":1700},[45,6137,4173],{"class":93},[45,6139,1481],{"class":51},[45,6141,1167],{"class":93},[45,6143,471],{"class":51},[45,6145,1193],{"class":93},[45,6147,13],{"class":51},[45,6149,1066],{"class":93},[45,6151,6152],{"class":51},"b;\n",[45,6154,6155],{"class":47,"line":1706},[45,6156,1648],{"class":51},[30,6158,6160],{"id":6159},"_26函数的分文件编写","2.6函数的分文件编写",[10,6162,6163],{},"4个步骤：",[1214,6165,6166,6169,6172,6175],{},[162,6167,6168],{},"1.创建后缀名为.h的头文件",[162,6170,6171],{},"2.创建后缀名为.cpp的源文件",[162,6173,6174],{},"3.在头文件中写函数的定义",[162,6176,6177],{},"4.在源文件中写函数的定义\n示例：",[10,6179,6180],{},"头文件：swap.h",[35,6182,6184],{"className":197,"code":6183,"language":199,"meta":40,"style":40},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[42,6185,6186,6192,6202,6206],{"__ignoreMap":40},[45,6187,6188,6190],{"class":47,"line":48},[45,6189,2032],{"class":93},[45,6191,2035],{"class":313},[45,6193,6194,6196,6198,6200],{"class":47,"line":125},[45,6195,2040],{"class":93},[45,6197,2043],{"class":93},[45,6199,2047],{"class":2046},[45,6201,1373],{"class":51},[45,6203,6204],{"class":47,"line":1262},[45,6205,6022],{"class":267},[45,6207,6208,6210,6212,6214,6216,6218,6220,6222,6224],{"class":47,"line":1277},[45,6209,5447],{"class":93},[45,6211,5450],{"class":2046},[45,6213,209],{"class":51},[45,6215,212],{"class":93},[45,6217,1481],{"class":5299},[45,6219,586],{"class":51},[45,6221,212],{"class":93},[45,6223,2916],{"class":5299},[45,6225,2802],{"class":51},[10,6227,6228],{},"源文件：swap.cpp",[35,6230,6232],{"className":197,"code":6231,"language":199,"meta":40,"style":40},"#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",[42,6233,6234,6241,6246,6266,6270,6281,6290,6299,6316,6333],{"__ignoreMap":40},[45,6235,6236,6238],{"class":47,"line":48},[45,6237,2032],{"class":93},[45,6239,6240],{"class":313}," \"swap.h\"\n",[45,6242,6243],{"class":47,"line":125},[45,6244,6245],{"class":267},"\u002F\u002F函数的定义\n",[45,6247,6248,6250,6252,6254,6256,6258,6260,6262,6264],{"class":47,"line":1262},[45,6249,5447],{"class":93},[45,6251,5450],{"class":2046},[45,6253,209],{"class":51},[45,6255,212],{"class":93},[45,6257,1481],{"class":5299},[45,6259,586],{"class":51},[45,6261,212],{"class":93},[45,6263,2916],{"class":5299},[45,6265,215],{"class":51},[45,6267,6268],{"class":47,"line":1277},[45,6269,1629],{"class":51},[45,6271,6272,6274,6276,6278],{"class":47,"line":1283},[45,6273,2068],{"class":93},[45,6275,4338],{"class":51},[45,6277,254],{"class":93},[45,6279,6280],{"class":51},"a;\n",[45,6282,6283,6286,6288],{"class":47,"line":1297},[45,6284,6285],{"class":51},"    a",[45,6287,254],{"class":93},[45,6289,6152],{"class":51},[45,6291,6292,6295,6297],{"class":47,"line":1303},[45,6293,6294],{"class":51},"    b",[45,6296,254],{"class":93},[45,6298,4363],{"class":51},[45,6300,6301,6303,6305,6308,6310,6312,6314],{"class":47,"line":1394},[45,6302,1634],{"class":51},[45,6304,1251],{"class":93},[45,6306,6307],{"class":313},"\"a=\"",[45,6309,1251],{"class":93},[45,6311,13],{"class":51},[45,6313,1251],{"class":93},[45,6315,1274],{"class":51},[45,6317,6318,6320,6322,6325,6327,6329,6331],{"class":47,"line":1400},[45,6319,1634],{"class":51},[45,6321,1251],{"class":93},[45,6323,6324],{"class":313},"\"b=\"",[45,6326,1251],{"class":93},[45,6328,471],{"class":51},[45,6330,1251],{"class":93},[45,6332,1274],{"class":51},[45,6334,6335],{"class":47,"line":1412},[45,6336,1648],{"class":51},[121,6338,6339],{},"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":40,"searchDepth":125,"depth":125,"links":6341},[6342,6343,6344,6345,6346,6347],{"id":5255,"depth":125,"text":5256},{"id":5344,"depth":125,"text":5345},{"id":5427,"depth":125,"text":5428},{"id":5653,"depth":125,"text":5654},{"id":6002,"depth":125,"text":6003},{"id":6159,"depth":125,"text":6160},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5247,"description":40},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6354,"title":6355,"body":6356,"description":6363,"extension":131,"meta":7768,"navigation":133,"path":7769,"seo":7770,"stem":7771,"__hash__":7772},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6357,"toc":7758},[6358,6361,6364,6368,6530,6534,6537,6540,6543,6546,6686,6690,6693,6696,6699,6764,6768,6773,6840,6843,6847,6850,6861,6866,6886,6889,6894,6913,6916,6920,6939,6942,6946,7181,7185,7188,7191,7194,7356,7359,7363,7366,7372,7755],[20,6359,6355],{"id":6360},"_3指针",[10,6362,6363],{},"通过指针保存一个地址，指针就是个地址",[30,6365,6367],{"id":6366},"_31定义指针","3.1定义指针",[35,6369,6371],{"className":197,"code":6370,"language":199,"meta":40,"style":40},"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",[42,6372,6373,6381,6385,6390,6402,6407,6415,6425,6443,6463,6467,6472,6477,6482,6496,6512,6526],{"__ignoreMap":40},[45,6374,6375,6377,6379],{"class":47,"line":48},[45,6376,212],{"class":93},[45,6378,2056],{"class":2046},[45,6380,2059],{"class":51},[45,6382,6383],{"class":47,"line":125},[45,6384,1629],{"class":51},[45,6386,6387],{"class":47,"line":1262},[45,6388,6389],{"class":267},"    \u002F\u002F1.定义指针\n",[45,6391,6392,6394,6396,6398,6400],{"class":47,"line":1277},[45,6393,2068],{"class":93},[45,6395,1481],{"class":51},[45,6397,254],{"class":93},[45,6399,654],{"class":257},[45,6401,1373],{"class":51},[45,6403,6404],{"class":47,"line":1283},[45,6405,6406],{"class":267},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[45,6408,6409,6412],{"class":47,"line":1297},[45,6410,6411],{"class":93},"    int*",[45,6413,6414],{"class":51},"p;\n",[45,6416,6417,6420,6423],{"class":47,"line":1303},[45,6418,6419],{"class":51},"    p",[45,6421,6422],{"class":93},"=&",[45,6424,6280],{"class":51},[45,6426,6427,6429,6431,6434,6437,6439,6441],{"class":47,"line":1394},[45,6428,1634],{"class":51},[45,6430,1251],{"class":93},[45,6432,6433],{"class":313},"\"a的地址为：\"",[45,6435,6436],{"class":93},"\u003C\u003C&",[45,6438,13],{"class":51},[45,6440,1251],{"class":93},[45,6442,1274],{"class":51},[45,6444,6445,6447,6449,6452,6454,6456,6458,6460],{"class":47,"line":1400},[45,6446,1634],{"class":51},[45,6448,1251],{"class":93},[45,6450,6451],{"class":313},"\"指针p为：\"",[45,6453,1251],{"class":93},[45,6455,10],{"class":51},[45,6457,1251],{"class":93},[45,6459,1321],{"class":51},[45,6461,6462],{"class":267},"\u002F\u002F指针p表示的就是a的地址\n",[45,6464,6465],{"class":47,"line":1412},[45,6466,2483],{"emptyLinePlaceholder":133},[45,6468,6469],{"class":47,"line":1695},[45,6470,6471],{"class":267},"    \u002F\u002F2.使用指针\n",[45,6473,6474],{"class":47,"line":1700},[45,6475,6476],{"class":267},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[45,6478,6479],{"class":47,"line":1706},[45,6480,6481],{"class":267},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[45,6483,6484,6487,6489,6491,6494],{"class":47,"line":1711},[45,6485,6486],{"class":93},"    *",[45,6488,10],{"class":51},[45,6490,254],{"class":93},[45,6492,6493],{"class":257},"1000",[45,6495,1373],{"class":51},[45,6497,6498,6500,6503,6505,6507,6509],{"class":47,"line":1725},[45,6499,1634],{"class":51},[45,6501,6502],{"class":93},"\u003C\u003C*",[45,6504,10],{"class":51},[45,6506,1251],{"class":93},[45,6508,1321],{"class":51},[45,6510,6511],{"class":267},"\u002F\u002F1000\n",[45,6513,6514,6516,6518,6520,6522,6524],{"class":47,"line":1730},[45,6515,1634],{"class":51},[45,6517,1251],{"class":93},[45,6519,13],{"class":51},[45,6521,1251],{"class":93},[45,6523,1321],{"class":51},[45,6525,6511],{"class":267},[45,6527,6528],{"class":47,"line":1736},[45,6529,1648],{"class":51},[30,6531,6533],{"id":6532},"_32指针所占的内存空间","3.2指针所占的内存空间",[10,6535,6536],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[10,6538,6539],{},"在32位操作系统下：占用4个字节空间",[10,6541,6542],{},"在64位操作系统下：占用8个字节空间",[10,6544,6545],{},"上方是不管啥数据类型的",[35,6547,6549],{"className":197,"code":6548,"language":199,"meta":40,"style":40},"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",[42,6550,6551,6559,6563,6568,6580,6585,6590,6595,6608,6630,6656,6682],{"__ignoreMap":40},[45,6552,6553,6555,6557],{"class":47,"line":48},[45,6554,212],{"class":93},[45,6556,2056],{"class":2046},[45,6558,2059],{"class":51},[45,6560,6561],{"class":47,"line":125},[45,6562,1629],{"class":51},[45,6564,6565],{"class":47,"line":1262},[45,6566,6567],{"class":267},"    \u002F\u002F指针所占内存空间\n",[45,6569,6570,6572,6574,6576,6578],{"class":47,"line":1277},[45,6571,2068],{"class":93},[45,6573,1481],{"class":51},[45,6575,254],{"class":93},[45,6577,654],{"class":257},[45,6579,1373],{"class":51},[45,6581,6582],{"class":47,"line":1283},[45,6583,6584],{"class":267},"    \u002F\u002Fint *p;\n",[45,6586,6587],{"class":47,"line":1297},[45,6588,6589],{"class":267},"    \u002F\u002Fp=&a;\n",[45,6591,6592],{"class":47,"line":1303},[45,6593,6594],{"class":267},"    \u002F\u002F上述可以写为以下：\n",[45,6596,6597,6599,6602,6604,6606],{"class":47,"line":1394},[45,6598,2068],{"class":93},[45,6600,6601],{"class":93}," *",[45,6603,10],{"class":51},[45,6605,6422],{"class":93},[45,6607,6280],{"class":51},[45,6609,6610,6613,6615,6618,6620,6623,6625,6627],{"class":47,"line":1400},[45,6611,6612],{"class":51},"    cout ",[45,6614,1251],{"class":93},[45,6616,6617],{"class":313},"\"sizeof(int *)\"",[45,6619,1455],{"class":93},[45,6621,6622],{"class":51},"(p)",[45,6624,1251],{"class":93},[45,6626,1321],{"class":51},[45,6628,6629],{"class":267},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[45,6631,6632,6634,6636,6638,6640,6642,6644,6646,6648,6650,6653],{"class":47,"line":1412},[45,6633,6612],{"class":51},[45,6635,1251],{"class":93},[45,6637,6617],{"class":313},[45,6639,1455],{"class":93},[45,6641,209],{"class":51},[45,6643,212],{"class":93},[45,6645,6601],{"class":93},[45,6647,637],{"class":51},[45,6649,1251],{"class":93},[45,6651,6652],{"class":51},"endl",[45,6654,6655],{"class":267},"  \u002F\u002F4字节(32位的话)\n",[45,6657,6658,6660,6662,6665,6667,6669,6671,6673,6675,6677,6679],{"class":47,"line":1695},[45,6659,6612],{"class":51},[45,6661,1251],{"class":93},[45,6663,6664],{"class":313},"\"sizeof(char *)\"",[45,6666,1455],{"class":93},[45,6668,209],{"class":51},[45,6670,305],{"class":93},[45,6672,6601],{"class":93},[45,6674,637],{"class":51},[45,6676,1251],{"class":93},[45,6678,1321],{"class":51},[45,6680,6681],{"class":267}," \u002F\u002F4字节(32位的话)\n",[45,6683,6684],{"class":47,"line":1700},[45,6685,1648],{"class":51},[30,6687,6689],{"id":6688},"_33空指针","3.3空指针",[10,6691,6692],{},"空指针：指针变量指向内存中编号为0的空间",[10,6694,6695],{},"用途：初始化指针变量",[10,6697,6698],{},"注意：空指针指向的内存是不可以访问的",[35,6700,6702],{"className":197,"code":6701,"language":199,"meta":40,"style":40},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[42,6703,6704,6712,6716,6721,6735,6740,6755,6760],{"__ignoreMap":40},[45,6705,6706,6708,6710],{"class":47,"line":48},[45,6707,212],{"class":93},[45,6709,2056],{"class":2046},[45,6711,2059],{"class":51},[45,6713,6714],{"class":47,"line":125},[45,6715,1629],{"class":51},[45,6717,6718],{"class":47,"line":1262},[45,6719,6720],{"class":267},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[45,6722,6723,6725,6727,6729,6731,6733],{"class":47,"line":1277},[45,6724,2068],{"class":93},[45,6726,6601],{"class":93},[45,6728,10],{"class":51},[45,6730,254],{"class":93},[45,6732,2475],{"class":257},[45,6734,1373],{"class":51},[45,6736,6737],{"class":47,"line":1283},[45,6738,6739],{"class":267},"    \u002F\u002F2.空指针不能进行访问\n",[45,6741,6742,6744,6746,6748,6750,6752],{"class":47,"line":1297},[45,6743,6486],{"class":93},[45,6745,10],{"class":51},[45,6747,254],{"class":93},[45,6749,519],{"class":257},[45,6751,264],{"class":51},[45,6753,6754],{"class":267},"\u002F\u002F直接报错，压根不能访问\n",[45,6756,6757],{"class":47,"line":1303},[45,6758,6759],{"class":267},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[45,6761,6762],{"class":47,"line":1394},[45,6763,1648],{"class":51},[30,6765,6767],{"id":6766},"_34野指针","3.4野指针",[10,6769,6770],{},[358,6771,6772],{},"指针变量指向非法的内存空间",[35,6774,6776],{"className":197,"code":6775,"language":199,"meta":40,"style":40},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[42,6777,6778,6786,6790,6819,6824,6836],{"__ignoreMap":40},[45,6779,6780,6782,6784],{"class":47,"line":48},[45,6781,212],{"class":93},[45,6783,2056],{"class":2046},[45,6785,2059],{"class":51},[45,6787,6788],{"class":47,"line":125},[45,6789,1629],{"class":51},[45,6791,6792,6794,6796,6798,6800,6802,6804,6806,6808,6811,6814,6816],{"class":47,"line":1262},[45,6793,2068],{"class":93},[45,6795,6601],{"class":93},[45,6797,10],{"class":51},[45,6799,254],{"class":93},[45,6801,209],{"class":51},[45,6803,212],{"class":93},[45,6805,6601],{"class":93},[45,6807,637],{"class":51},[45,6809,6810],{"class":93},"0x",[45,6812,6813],{"class":257},"1100",[45,6815,264],{"class":51},[45,6817,6818],{"class":267}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[45,6820,6821],{"class":47,"line":1277},[45,6822,6823],{"class":267},"    \u002F\u002F访问野指针报错\n",[45,6825,6826,6828,6830,6832,6834],{"class":47,"line":1283},[45,6827,1634],{"class":51},[45,6829,6502],{"class":93},[45,6831,10],{"class":51},[45,6833,1251],{"class":93},[45,6835,1274],{"class":51},[45,6837,6838],{"class":47,"line":1297},[45,6839,1648],{"class":51},[10,6841,6842],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[30,6844,6846],{"id":6845},"_35const修饰指针","3.5const修饰指针",[10,6848,6849],{},"三种情况：",[1214,6851,6852,6855,6858],{},[162,6853,6854],{},"const修饰指针 常量指针",[162,6856,6857],{},"const修饰常量 指针常量",[162,6859,6860],{},"const即修饰指针，又修饰常量",[159,6862,6863],{},[162,6864,6865],{},"常量指针",[35,6867,6869],{"className":197,"code":6868,"language":199,"meta":40,"style":40},"const int *p=&a;\n",[42,6870,6871],{"__ignoreMap":40},[45,6872,6873,6876,6878,6880,6882,6884],{"class":47,"line":48},[45,6874,6875],{"class":93},"const",[45,6877,2465],{"class":93},[45,6879,6601],{"class":93},[45,6881,10],{"class":51},[45,6883,6422],{"class":93},[45,6885,6280],{"class":51},[10,6887,6888],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[159,6890,6891],{"start":125},[162,6892,6893],{},"指针常量",[35,6895,6897],{"className":197,"code":6896,"language":199,"meta":40,"style":40},"int *const p=&a;\n",[42,6898,6899],{"__ignoreMap":40},[45,6900,6901,6903,6906,6909,6911],{"class":47,"line":48},[45,6902,212],{"class":93},[45,6904,6905],{"class":93}," *const",[45,6907,6908],{"class":51}," p",[45,6910,6422],{"class":93},[45,6912,6280],{"class":51},[10,6914,6915],{},"指针的指向不可以改，指针指向的值可以改",[159,6917,6918],{"start":1262},[162,6919,6860],{},[35,6921,6923],{"className":197,"code":6922,"language":199,"meta":40,"style":40},"const int *const p=&a;\n",[42,6924,6925],{"__ignoreMap":40},[45,6926,6927,6929,6931,6933,6935,6937],{"class":47,"line":48},[45,6928,6875],{"class":93},[45,6930,2465],{"class":93},[45,6932,6905],{"class":93},[45,6934,6908],{"class":51},[45,6936,6422],{"class":93},[45,6938,6280],{"class":51},[10,6940,6941],{},"指针的指向和指针指向的值都不可以改变",[30,6943,6945],{"id":6944},"_36指针和数组","3.6指针和数组",[35,6947,6949],{"className":197,"code":6948,"language":199,"meta":40,"style":40},"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",[42,6950,6951,6959,6963,6968,7022,7043,7059,7075,7086,7103,7108,7122,7148,7152,7164,7173,7177],{"__ignoreMap":40},[45,6952,6953,6955,6957],{"class":47,"line":48},[45,6954,212],{"class":93},[45,6956,2056],{"class":2046},[45,6958,2059],{"class":51},[45,6960,6961],{"class":47,"line":125},[45,6962,1629],{"class":51},[45,6964,6965],{"class":47,"line":1262},[45,6966,6967],{"class":267},"    \u002F\u002F利用指针访问数组中的元素\n",[45,6969,6970,6972,6974,6976,6978,6980,6982,6984,6986,6988,6990,6992,6994,6996,6998,7000,7002,7004,7006,7008,7010,7012,7014,7016,7018,7020],{"class":47,"line":1277},[45,6971,2068],{"class":93},[45,6973,4045],{"class":51},[45,6975,654],{"class":257},[45,6977,1147],{"class":51},[45,6979,254],{"class":93},[45,6981,1103],{"class":51},[45,6983,426],{"class":257},[45,6985,586],{"class":51},[45,6987,286],{"class":257},[45,6989,586],{"class":51},[45,6991,280],{"class":257},[45,6993,586],{"class":51},[45,6995,501],{"class":257},[45,6997,586],{"class":51},[45,6999,527],{"class":257},[45,7001,586],{"class":51},[45,7003,552],{"class":257},[45,7005,586],{"class":51},[45,7007,577],{"class":257},[45,7009,586],{"class":51},[45,7011,603],{"class":257},[45,7013,586],{"class":51},[45,7015,628],{"class":257},[45,7017,586],{"class":51},[45,7019,654],{"class":257},[45,7021,4078],{"class":51},[45,7023,7024,7026,7028,7031,7033,7035,7037,7039,7041],{"class":47,"line":1283},[45,7025,1634],{"class":51},[45,7027,1251],{"class":93},[45,7029,7030],{"class":313},"\"数组的第一个元素为：\"",[45,7032,1251],{"class":93},[45,7034,3989],{"class":51},[45,7036,400],{"class":257},[45,7038,1147],{"class":51},[45,7040,1251],{"class":93},[45,7042,1274],{"class":51},[45,7044,7045,7047,7049,7051,7053,7056],{"class":47,"line":1297},[45,7046,2068],{"class":93},[45,7048,6601],{"class":93},[45,7050,10],{"class":51},[45,7052,254],{"class":93},[45,7054,7055],{"class":51},"arr;",[45,7057,7058],{"class":267},"\u002F\u002F注意数才要加取地址符号&\n",[45,7060,7061,7063,7065,7067,7069,7071,7073],{"class":47,"line":1303},[45,7062,1634],{"class":51},[45,7064,1251],{"class":93},[45,7066,7030],{"class":313},[45,7068,6502],{"class":93},[45,7070,10],{"class":51},[45,7072,1251],{"class":93},[45,7074,1274],{"class":51},[45,7076,7077,7079,7081,7083],{"class":47,"line":1394},[45,7078,6419],{"class":51},[45,7080,2375],{"class":93},[45,7082,264],{"class":51},[45,7084,7085],{"class":267}," \u002F\u002F让指针向后偏移4个字节\n",[45,7087,7088,7090,7092,7095,7097,7099,7101],{"class":47,"line":1400},[45,7089,1634],{"class":51},[45,7091,1251],{"class":93},[45,7093,7094],{"class":313},"\"数组的第二个元素为：\"",[45,7096,6502],{"class":93},[45,7098,10],{"class":51},[45,7100,1251],{"class":93},[45,7102,1274],{"class":51},[45,7104,7105],{"class":47,"line":1412},[45,7106,7107],{"class":267},"    \u002F\u002F利用指针遍历数组\n",[45,7109,7110,7112,7114,7117,7119],{"class":47,"line":1695},[45,7111,2068],{"class":93},[45,7113,6601],{"class":93},[45,7115,7116],{"class":51},"p2",[45,7118,254],{"class":93},[45,7120,7121],{"class":51},"arr;\n",[45,7123,7124,7126,7128,7130,7132,7134,7136,7138,7140,7142,7144,7146],{"class":47,"line":1700},[45,7125,3284],{"class":93},[45,7127,1741],{"class":51},[45,7129,212],{"class":93},[45,7131,3115],{"class":51},[45,7133,254],{"class":93},[45,7135,400],{"class":257},[45,7137,3122],{"class":51},[45,7139,1117],{"class":93},[45,7141,654],{"class":257},[45,7143,3122],{"class":51},[45,7145,2375],{"class":93},[45,7147,215],{"class":51},[45,7149,7150],{"class":47,"line":1706},[45,7151,2113],{"class":51},[45,7153,7154,7156,7158,7160,7162],{"class":47,"line":1711},[45,7155,3534],{"class":51},[45,7157,6502],{"class":93},[45,7159,7116],{"class":51},[45,7161,1251],{"class":93},[45,7163,1274],{"class":51},[45,7165,7166,7169,7171],{"class":47,"line":1725},[45,7167,7168],{"class":51},"        p2",[45,7170,2375],{"class":93},[45,7172,1373],{"class":51},[45,7174,7175],{"class":47,"line":1730},[45,7176,2270],{"class":51},[45,7178,7179],{"class":47,"line":1736},[45,7180,1648],{"class":51},[30,7182,7184],{"id":7183},"_37指针和函数","3.7指针和函数",[10,7186,7187],{},"利用指针做函数参数，可以修改实参的值",[10,7189,7190],{},"值传递：只改变形参，不改变实参",[10,7192,7193],{},"地址传递：",[35,7195,7197],{"className":197,"code":7196,"language":199,"meta":40,"style":40},"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",[42,7198,7199,7224,7228,7240,7251,7261,7265,7273,7277,7289,7301,7306,7322,7337,7352],{"__ignoreMap":40},[45,7200,7201,7203,7205,7207,7209,7211,7214,7216,7218,7220,7222],{"class":47,"line":48},[45,7202,5447],{"class":93},[45,7204,5450],{"class":2046},[45,7206,209],{"class":51},[45,7208,212],{"class":93},[45,7210,6601],{"class":93},[45,7212,7213],{"class":5299},"p1",[45,7215,586],{"class":51},[45,7217,212],{"class":93},[45,7219,6601],{"class":93},[45,7221,7116],{"class":5299},[45,7223,215],{"class":51},[45,7225,7226],{"class":47,"line":125},[45,7227,1629],{"class":51},[45,7229,7230,7232,7234,7237],{"class":47,"line":1262},[45,7231,2068],{"class":93},[45,7233,4338],{"class":51},[45,7235,7236],{"class":93},"=*",[45,7238,7239],{"class":51},"p1;\n",[45,7241,7242,7244,7246,7248],{"class":47,"line":1277},[45,7243,6486],{"class":93},[45,7245,7213],{"class":51},[45,7247,7236],{"class":93},[45,7249,7250],{"class":51},"p2;\n",[45,7252,7253,7255,7257,7259],{"class":47,"line":1283},[45,7254,6486],{"class":93},[45,7256,7116],{"class":51},[45,7258,254],{"class":93},[45,7260,4363],{"class":51},[45,7262,7263],{"class":47,"line":1297},[45,7264,1648],{"class":51},[45,7266,7267,7269,7271],{"class":47,"line":1303},[45,7268,212],{"class":93},[45,7270,2056],{"class":2046},[45,7272,2059],{"class":51},[45,7274,7275],{"class":47,"line":1394},[45,7276,1629],{"class":51},[45,7278,7279,7281,7283,7285,7287],{"class":47,"line":1400},[45,7280,2068],{"class":93},[45,7282,1481],{"class":51},[45,7284,254],{"class":93},[45,7286,654],{"class":257},[45,7288,1373],{"class":51},[45,7290,7291,7293,7295,7297,7299],{"class":47,"line":1412},[45,7292,2068],{"class":93},[45,7294,2916],{"class":51},[45,7296,254],{"class":93},[45,7298,907],{"class":257},[45,7300,1373],{"class":51},[45,7302,7303],{"class":47,"line":1695},[45,7304,7305],{"class":267},"    \u002F\u002F地址传递\n",[45,7307,7308,7310,7312,7314,7317,7319],{"class":47,"line":1700},[45,7309,5644],{"class":2046},[45,7311,209],{"class":51},[45,7313,561],{"class":93},[45,7315,7316],{"class":51},"a,",[45,7318,561],{"class":93},[45,7320,7321],{"class":51},"b);\n",[45,7323,7324,7326,7328,7330,7332,7334],{"class":47,"line":1706},[45,7325,1634],{"class":51},[45,7327,1251],{"class":93},[45,7329,13],{"class":51},[45,7331,1251],{"class":93},[45,7333,1321],{"class":51},[45,7335,7336],{"class":267},"\u002F\u002F20\n",[45,7338,7339,7341,7343,7345,7347,7349],{"class":47,"line":1711},[45,7340,1634],{"class":51},[45,7342,1251],{"class":93},[45,7344,471],{"class":51},[45,7346,1251],{"class":93},[45,7348,1321],{"class":51},[45,7350,7351],{"class":267},"\u002F\u002F10\n",[45,7353,7354],{"class":47,"line":1725},[45,7355,1648],{"class":51},[10,7357,7358],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[30,7360,7362],{"id":7361},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[10,7364,7365],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[10,7367,7368,7369,7371],{},"例如数组：int arr",[45,7370,654],{},"={4,3,6,9,1,2,10,8,7,5}",[35,7373,7375],{"className":197,"code":7374,"language":199,"meta":40,"style":40},"#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",[42,7376,7377,7383,7393,7417,7421,7452,7456,7490,7494,7512,7516,7527,7542,7557,7561,7565,7569,7573,7577,7585,7589,7594,7648,7660,7672,7677,7685,7689,7694,7719,7723,7738,7747,7751],{"__ignoreMap":40},[45,7378,7379,7381],{"class":47,"line":48},[45,7380,2032],{"class":93},[45,7382,2035],{"class":313},[45,7384,7385,7387,7389,7391],{"class":47,"line":125},[45,7386,2040],{"class":93},[45,7388,2043],{"class":93},[45,7390,2047],{"class":2046},[45,7392,1373],{"class":51},[45,7394,7395,7397,7400,7402,7404,7406,7408,7410,7412,7415],{"class":47,"line":1262},[45,7396,5447],{"class":93},[45,7398,7399],{"class":2046}," bubbleSort",[45,7401,209],{"class":51},[45,7403,212],{"class":93},[45,7405,6601],{"class":93},[45,7407,10],{"class":5299},[45,7409,586],{"class":51},[45,7411,212],{"class":93},[45,7413,7414],{"class":5299}," len",[45,7416,215],{"class":51},[45,7418,7419],{"class":47,"line":1277},[45,7420,1629],{"class":51},[45,7422,7423,7425,7427,7429,7431,7433,7435,7437,7439,7442,7444,7446,7448,7450],{"class":47,"line":1283},[45,7424,3284],{"class":93},[45,7426,209],{"class":51},[45,7428,212],{"class":93},[45,7430,3115],{"class":51},[45,7432,254],{"class":93},[45,7434,400],{"class":257},[45,7436,3122],{"class":51},[45,7438,1117],{"class":93},[45,7440,7441],{"class":51},"len",[45,7443,94],{"class":93},[45,7445,426],{"class":257},[45,7447,3122],{"class":51},[45,7449,2375],{"class":93},[45,7451,215],{"class":51},[45,7453,7454],{"class":47,"line":1297},[45,7455,2113],{"class":51},[45,7457,7458,7460,7462,7464,7466,7468,7470,7472,7474,7476,7478,7480,7482,7484,7486,7488],{"class":47,"line":1303},[45,7459,3486],{"class":93},[45,7461,209],{"class":51},[45,7463,212],{"class":93},[45,7465,3493],{"class":51},[45,7467,254],{"class":93},[45,7469,400],{"class":257},[45,7471,3500],{"class":51},[45,7473,1117],{"class":93},[45,7475,7441],{"class":51},[45,7477,94],{"class":93},[45,7479,649],{"class":51},[45,7481,94],{"class":93},[45,7483,426],{"class":257},[45,7485,3500],{"class":51},[45,7487,2375],{"class":93},[45,7489,215],{"class":51},[45,7491,7492],{"class":47,"line":1394},[45,7493,2593],{"class":51},[45,7495,7496,7498,7501,7503,7506,7508,7510],{"class":47,"line":1400},[45,7497,4725],{"class":93},[45,7499,7500],{"class":51},"(p[j]",[45,7502,1167],{"class":93},[45,7504,7505],{"class":51},"p[j",[45,7507,689],{"class":93},[45,7509,426],{"class":257},[45,7511,4740],{"class":51},[45,7513,7514],{"class":47,"line":1412},[45,7515,4745],{"class":51},[45,7517,7518,7520,7522,7524],{"class":47,"line":1695},[45,7519,4750],{"class":93},[45,7521,4338],{"class":51},[45,7523,254],{"class":93},[45,7525,7526],{"class":51},"p[j];\n",[45,7528,7529,7532,7534,7536,7538,7540],{"class":47,"line":1700},[45,7530,7531],{"class":51},"                p[j]",[45,7533,254],{"class":93},[45,7535,7505],{"class":51},[45,7537,689],{"class":93},[45,7539,426],{"class":257},[45,7541,4773],{"class":51},[45,7543,7544,7547,7549,7551,7553,7555],{"class":47,"line":1706},[45,7545,7546],{"class":51},"                p[j",[45,7548,689],{"class":93},[45,7550,426],{"class":257},[45,7552,1147],{"class":51},[45,7554,254],{"class":93},[45,7556,4363],{"class":51},[45,7558,7559],{"class":47,"line":1711},[45,7560,4793],{"class":51},[45,7562,7563],{"class":47,"line":1725},[45,7564,2612],{"class":51},[45,7566,7567],{"class":47,"line":1730},[45,7568,2270],{"class":51},[45,7570,7571],{"class":47,"line":1736},[45,7572,1648],{"class":51},[45,7574,7575],{"class":47,"line":1757},[45,7576,2483],{"emptyLinePlaceholder":133},[45,7578,7579,7581,7583],{"class":47,"line":1762},[45,7580,212],{"class":93},[45,7582,2056],{"class":2046},[45,7584,2059],{"class":51},[45,7586,7587],{"class":47,"line":1776},[45,7588,1629],{"class":51},[45,7590,7591],{"class":47,"line":1781},[45,7592,7593],{"class":267},"    \u002F\u002F 1.创建数组\n",[45,7595,7596,7598,7600,7602,7604,7606,7608,7610,7612,7614,7616,7618,7620,7622,7624,7626,7628,7630,7632,7634,7636,7638,7640,7642,7644,7646],{"class":47,"line":1810},[45,7597,2068],{"class":93},[45,7599,4045],{"class":51},[45,7601,654],{"class":257},[45,7603,1147],{"class":51},[45,7605,254],{"class":93},[45,7607,1103],{"class":51},[45,7609,501],{"class":257},[45,7611,586],{"class":51},[45,7613,280],{"class":257},[45,7615,586],{"class":51},[45,7617,552],{"class":257},[45,7619,586],{"class":51},[45,7621,628],{"class":257},[45,7623,586],{"class":51},[45,7625,426],{"class":257},[45,7627,586],{"class":51},[45,7629,286],{"class":257},[45,7631,586],{"class":51},[45,7633,654],{"class":257},[45,7635,586],{"class":51},[45,7637,603],{"class":257},[45,7639,586],{"class":51},[45,7641,577],{"class":257},[45,7643,586],{"class":51},[45,7645,527],{"class":257},[45,7647,4078],{"class":51},[45,7649,7650,7652,7654,7656,7658],{"class":47,"line":1815},[45,7651,2068],{"class":93},[45,7653,7414],{"class":51},[45,7655,254],{"class":93},[45,7657,654],{"class":257},[45,7659,1373],{"class":51},[45,7661,7662,7664,7666,7668,7670],{"class":47,"line":1832},[45,7663,2068],{"class":93},[45,7665,6601],{"class":93},[45,7667,10],{"class":51},[45,7669,254],{"class":93},[45,7671,7121],{"class":51},[45,7673,7674],{"class":47,"line":1837},[45,7675,7676],{"class":267},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[45,7678,7679,7682],{"class":47,"line":1842},[45,7680,7681],{"class":2046},"    bubbleSort",[45,7683,7684],{"class":51},"(p,len);\n",[45,7686,7687],{"class":47,"line":1847},[45,7688,2483],{"emptyLinePlaceholder":133},[45,7690,7691],{"class":47,"line":1861},[45,7692,7693],{"class":267},"    \u002F\u002F 3.打印排序后的数组\n",[45,7695,7696,7698,7700,7702,7704,7706,7708,7710,7712,7715,7717],{"class":47,"line":1866},[45,7697,3284],{"class":93},[45,7699,1741],{"class":51},[45,7701,212],{"class":93},[45,7703,3115],{"class":51},[45,7705,254],{"class":93},[45,7707,400],{"class":257},[45,7709,3297],{"class":51},[45,7711,1117],{"class":93},[45,7713,7714],{"class":51},"len; i",[45,7716,2375],{"class":93},[45,7718,215],{"class":51},[45,7720,7721],{"class":47,"line":2660},[45,7722,2113],{"class":51},[45,7724,7725,7727,7729,7731,7733,7736],{"class":47,"line":2674},[45,7726,3534],{"class":51},[45,7728,6502],{"class":93},[45,7730,10],{"class":51},[45,7732,1251],{"class":93},[45,7734,7735],{"class":313},"\"\"",[45,7737,1373],{"class":51},[45,7739,7740,7743,7745],{"class":47,"line":2682},[45,7741,7742],{"class":51},"        p",[45,7744,2375],{"class":93},[45,7746,1373],{"class":51},[45,7748,7749],{"class":47,"line":2687},[45,7750,2270],{"class":51},[45,7752,7753],{"class":47,"line":2693},[45,7754,1648],{"class":51},[121,7756,7757],{},"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":40,"searchDepth":125,"depth":125,"links":7759},[7760,7761,7762,7763,7764,7765,7766,7767],{"id":6366,"depth":125,"text":6367},{"id":6532,"depth":125,"text":6533},{"id":6688,"depth":125,"text":6689},{"id":6766,"depth":125,"text":6767},{"id":6845,"depth":125,"text":6846},{"id":6944,"depth":125,"text":6945},{"id":7183,"depth":125,"text":7184},{"id":7361,"depth":125,"text":7362},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6355,"description":6363},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7774,"title":7775,"body":7776,"description":7783,"extension":131,"meta":10757,"navigation":133,"path":10758,"seo":10759,"stem":10760,"__hash__":10761},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7777,"toc":10748},[7778,7781,7784,7788,7791,7794,7805,8143,8146,8150,8153,8160,8415,8419,8422,8425,8580,8584,8587,8590,8796,8800,8803,9106,9109,9117,9121,9124,9275,9277,9288,9345,9349,9354,10011,10019,10022,10116,10119,10739,10745],[20,7779,7775],{"id":7780},"_4结构体",[10,7782,7783],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[30,7785,7787],{"id":7786},"_41结构体定义与使用","4.1结构体定义与使用",[10,7789,7790],{},"语法：struct 结构体名 {结构体成员列表}；",[10,7792,7793],{},"通过结构体创建变量的方式：",[1214,7795,7796,7799,7802],{},[162,7797,7798],{},"struct 结构体名 变量名",[162,7800,7801],{},"struct 结构体名 变量名={成员1值，成员2值...}",[162,7803,7804],{},"定义结构体时顺便创建变量",[35,7806,7808],{"className":197,"code":7807,"language":199,"meta":40,"style":40},"#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",[42,7809,7810,7816,7826,7833,7838,7846,7850,7855,7859,7864,7869,7874,7881,7886,7893,7897,7904,7908,7912,7916,7920,7924,7928,7934,7938,7944,7952,7960,7964,7969,7974,7985,7990,8002,8013,8024,8029,8053,8058,8064,8091,8096,8102,8114,8126,8138],{"__ignoreMap":40},[45,7811,7812,7814],{"class":47,"line":48},[45,7813,2032],{"class":93},[45,7815,2035],{"class":313},[45,7817,7818,7820,7822,7824],{"class":47,"line":125},[45,7819,2040],{"class":93},[45,7821,2043],{"class":93},[45,7823,2047],{"class":2046},[45,7825,1373],{"class":51},[45,7827,7828,7830],{"class":47,"line":1262},[45,7829,2032],{"class":93},[45,7831,7832],{"class":313},"\u003Cstring>\n",[45,7834,7835],{"class":47,"line":1277},[45,7836,7837],{"class":267},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[45,7839,7840,7843],{"class":47,"line":1283},[45,7841,7842],{"class":93},"struct",[45,7844,7845],{"class":2046}," Student\n",[45,7847,7848],{"class":47,"line":1297},[45,7849,1629],{"class":51},[45,7851,7852],{"class":47,"line":1303},[45,7853,7854],{"class":267},"    \u002F\u002F成员列表\n",[45,7856,7857],{"class":47,"line":1394},[45,7858,2483],{"emptyLinePlaceholder":133},[45,7860,7861],{"class":47,"line":1400},[45,7862,7863],{"class":267},"    \u002F\u002F姓名\n",[45,7865,7866],{"class":47,"line":1412},[45,7867,7868],{"class":51},"    string name;\n",[45,7870,7871],{"class":47,"line":1695},[45,7872,7873],{"class":267},"    \u002F\u002F年龄\n",[45,7875,7876,7878],{"class":47,"line":1700},[45,7877,2068],{"class":93},[45,7879,7880],{"class":51}," age;\n",[45,7882,7883],{"class":47,"line":1706},[45,7884,7885],{"class":267},"    \u002F\u002F分数\n",[45,7887,7888,7890],{"class":47,"line":1711},[45,7889,2068],{"class":93},[45,7891,7892],{"class":51}," score;\n",[45,7894,7895],{"class":47,"line":1725},[45,7896,4078],{"class":51},[45,7898,7899,7901],{"class":47,"line":1730},[45,7900,7842],{"class":93},[45,7902,7903],{"class":2046}," School\n",[45,7905,7906],{"class":47,"line":1736},[45,7907,1629],{"class":51},[45,7909,7910],{"class":47,"line":1757},[45,7911,7854],{"class":267},[45,7913,7914],{"class":47,"line":1762},[45,7915,2483],{"emptyLinePlaceholder":133},[45,7917,7918],{"class":47,"line":1776},[45,7919,7863],{"class":267},[45,7921,7922],{"class":47,"line":1781},[45,7923,7868],{"class":51},[45,7925,7926],{"class":47,"line":1810},[45,7927,7873],{"class":267},[45,7929,7930,7932],{"class":47,"line":1815},[45,7931,2068],{"class":93},[45,7933,7880],{"class":51},[45,7935,7936],{"class":47,"line":1832},[45,7937,7885],{"class":267},[45,7939,7940,7942],{"class":47,"line":1837},[45,7941,2068],{"class":93},[45,7943,7892],{"class":51},[45,7945,7946,7949],{"class":47,"line":1842},[45,7947,7948],{"class":51},"} s3;",[45,7950,7951],{"class":267}," \u002F\u002F创建结构体时就创建了变量\n",[45,7953,7954,7956,7958],{"class":47,"line":1847},[45,7955,212],{"class":93},[45,7957,2056],{"class":2046},[45,7959,2059],{"class":51},[45,7961,7962],{"class":47,"line":1861},[45,7963,1629],{"class":51},[45,7965,7966],{"class":47,"line":1866},[45,7967,7968],{"class":267},"    \u002F\u002F2.通过学生类型创建具体学生\n",[45,7970,7971],{"class":47,"line":2660},[45,7972,7973],{"class":267},"    \u002F\u002F2.1 struct Student s1;\n",[45,7975,7976,7979,7982],{"class":47,"line":2674},[45,7977,7978],{"class":93},"    struct",[45,7980,7981],{"class":2046}," Student",[45,7983,7984],{"class":51}," s1;\n",[45,7986,7987],{"class":47,"line":2682},[45,7988,7989],{"class":267},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[45,7991,7992,7995,7997,8000],{"class":47,"line":2687},[45,7993,7994],{"class":51},"    s1.name",[45,7996,254],{"class":93},[45,7998,7999],{"class":313},"\"张三\"",[45,8001,1373],{"class":51},[45,8003,8004,8007,8009,8011],{"class":47,"line":2693},[45,8005,8006],{"class":51},"    s1.age",[45,8008,254],{"class":93},[45,8010,857],{"class":257},[45,8012,1373],{"class":51},[45,8014,8015,8018,8020,8022],{"class":47,"line":2699},[45,8016,8017],{"class":51},"    s1.score",[45,8019,254],{"class":93},[45,8021,462],{"class":257},[45,8023,1373],{"class":51},[45,8025,8026],{"class":47,"line":2704},[45,8027,8028],{"class":267},"    \u002F\u002F输出结果\n",[45,8030,8032,8034,8036,8039,8041,8044,8046,8049,8051],{"class":47,"line":8031},37,[45,8033,1634],{"class":51},[45,8035,1251],{"class":93},[45,8037,8038],{"class":51},"s1.name",[45,8040,1251],{"class":93},[45,8042,8043],{"class":51},"s1.age",[45,8045,1251],{"class":93},[45,8047,8048],{"class":51},"s1.score",[45,8050,1251],{"class":93},[45,8052,1274],{"class":51},[45,8054,8056],{"class":47,"line":8055},38,[45,8057,2483],{"emptyLinePlaceholder":133},[45,8059,8061],{"class":47,"line":8060},39,[45,8062,8063],{"class":267},"    \u002F\u002F2.2 struct Student s2={...}\n",[45,8065,8067,8069,8071,8074,8076,8078,8081,8083,8085,8087,8089],{"class":47,"line":8066},40,[45,8068,7978],{"class":93},[45,8070,7981],{"class":2046},[45,8072,8073],{"class":51}," s2",[45,8075,254],{"class":93},[45,8077,1103],{"class":51},[45,8079,8080],{"class":313},"\"王五\"",[45,8082,586],{"class":51},[45,8084,857],{"class":257},[45,8086,586],{"class":51},[45,8088,462],{"class":257},[45,8090,4078],{"class":51},[45,8092,8094],{"class":47,"line":8093},41,[45,8095,2483],{"emptyLinePlaceholder":133},[45,8097,8099],{"class":47,"line":8098},42,[45,8100,8101],{"class":267},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[45,8103,8105,8108,8110,8112],{"class":47,"line":8104},43,[45,8106,8107],{"class":51},"    s3.name",[45,8109,254],{"class":93},[45,8111,3761],{"class":313},[45,8113,1373],{"class":51},[45,8115,8117,8120,8122,8124],{"class":47,"line":8116},44,[45,8118,8119],{"class":51},"    s3.age",[45,8121,254],{"class":93},[45,8123,857],{"class":257},[45,8125,1373],{"class":51},[45,8127,8129,8132,8134,8136],{"class":47,"line":8128},45,[45,8130,8131],{"class":51},"    s3.score",[45,8133,254],{"class":93},[45,8135,907],{"class":257},[45,8137,1373],{"class":51},[45,8139,8141],{"class":47,"line":8140},46,[45,8142,1648],{"class":51},[10,8144,8145],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[30,8147,8149],{"id":8148},"_42结构体数组","4.2结构体数组",[10,8151,8152],{},"将自定义的结构体放入到数组中方便维护",[10,8154,8155,8156,8159],{},"语法：struct 结构体名 数组名",[45,8157,8158],{},"元素个数","={ {}，{},...{} };",[35,8161,8163],{"className":197,"code":8162,"language":199,"meta":40,"style":40},"#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",[42,8164,8165,8171,8181,8187,8192,8198,8202,8206,8212,8218,8222,8226,8234,8238,8243,8258,8262,8278,8294,8298,8303,8319,8334,8349,8354,8380,8384,8407,8411],{"__ignoreMap":40},[45,8166,8167,8169],{"class":47,"line":48},[45,8168,2032],{"class":93},[45,8170,2035],{"class":313},[45,8172,8173,8175,8177,8179],{"class":47,"line":125},[45,8174,2040],{"class":93},[45,8176,2043],{"class":93},[45,8178,2047],{"class":2046},[45,8180,1373],{"class":51},[45,8182,8183,8185],{"class":47,"line":1262},[45,8184,2032],{"class":93},[45,8186,7832],{"class":313},[45,8188,8189],{"class":47,"line":1277},[45,8190,8191],{"class":267},"\u002F\u002F1.定义结构体\n",[45,8193,8194,8196],{"class":47,"line":1283},[45,8195,7842],{"class":93},[45,8197,7845],{"class":2046},[45,8199,8200],{"class":47,"line":1297},[45,8201,1629],{"class":51},[45,8203,8204],{"class":47,"line":1303},[45,8205,7868],{"class":51},[45,8207,8208,8210],{"class":47,"line":1394},[45,8209,2068],{"class":93},[45,8211,7880],{"class":51},[45,8213,8214,8216],{"class":47,"line":1400},[45,8215,2068],{"class":93},[45,8217,7892],{"class":51},[45,8219,8220],{"class":47,"line":1412},[45,8221,2483],{"emptyLinePlaceholder":133},[45,8223,8224],{"class":47,"line":1695},[45,8225,4078],{"class":51},[45,8227,8228,8230,8232],{"class":47,"line":1700},[45,8229,212],{"class":93},[45,8231,2056],{"class":2046},[45,8233,2059],{"class":51},[45,8235,8236],{"class":47,"line":1706},[45,8237,1629],{"class":51},[45,8239,8240],{"class":47,"line":1711},[45,8241,8242],{"class":267},"    \u002F\u002F2.创建结构体数组\n",[45,8244,8245,8247,8249,8252,8254,8256],{"class":47,"line":1725},[45,8246,7978],{"class":93},[45,8248,7981],{"class":2046},[45,8250,8251],{"class":51}," stuArray[",[45,8253,286],{"class":257},[45,8255,1147],{"class":51},[45,8257,4991],{"class":93},[45,8259,8260],{"class":47,"line":1730},[45,8261,2113],{"class":51},[45,8263,8264,8266,8268,8270,8272,8274,8276],{"class":47,"line":1736},[45,8265,5000],{"class":51},[45,8267,7999],{"class":313},[45,8269,586],{"class":51},[45,8271,857],{"class":257},[45,8273,586],{"class":51},[45,8275,519],{"class":257},[45,8277,5013],{"class":51},[45,8279,8280,8282,8284,8286,8288,8290,8292],{"class":47,"line":1757},[45,8281,5000],{"class":51},[45,8283,3761],{"class":313},[45,8285,586],{"class":51},[45,8287,782],{"class":257},[45,8289,586],{"class":51},[45,8291,782],{"class":257},[45,8293,1648],{"class":51},[45,8295,8296],{"class":47,"line":1762},[45,8297,2270],{"class":51},[45,8299,8300],{"class":47,"line":1776},[45,8301,8302],{"class":267},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[45,8304,8305,8308,8310,8313,8315,8317],{"class":47,"line":1781},[45,8306,8307],{"class":51},"    stuArray[",[45,8309,426],{"class":257},[45,8311,8312],{"class":51},"].name",[45,8314,254],{"class":93},[45,8316,3784],{"class":313},[45,8318,1373],{"class":51},[45,8320,8321,8323,8325,8328,8330,8332],{"class":47,"line":1810},[45,8322,8307],{"class":51},[45,8324,426],{"class":257},[45,8326,8327],{"class":51},"].age",[45,8329,254],{"class":93},[45,8331,286],{"class":257},[45,8333,1373],{"class":51},[45,8335,8336,8338,8340,8343,8345,8347],{"class":47,"line":1815},[45,8337,8307],{"class":51},[45,8339,426],{"class":257},[45,8341,8342],{"class":51},"].score",[45,8344,254],{"class":93},[45,8346,286],{"class":257},[45,8348,1373],{"class":51},[45,8350,8351],{"class":47,"line":1832},[45,8352,8353],{"class":267},"    \u002F\u002F4.遍历结构体数组\n",[45,8355,8356,8358,8360,8362,8364,8366,8368,8370,8372,8374,8376,8378],{"class":47,"line":1837},[45,8357,3284],{"class":93},[45,8359,1741],{"class":51},[45,8361,212],{"class":93},[45,8363,3115],{"class":51},[45,8365,254],{"class":93},[45,8367,400],{"class":257},[45,8369,3122],{"class":51},[45,8371,1117],{"class":93},[45,8373,286],{"class":257},[45,8375,3122],{"class":51},[45,8377,2375],{"class":93},[45,8379,215],{"class":51},[45,8381,8382],{"class":47,"line":1842},[45,8383,2113],{"class":51},[45,8385,8386,8388,8390,8393,8395,8398,8400,8403,8405],{"class":47,"line":1847},[45,8387,3534],{"class":51},[45,8389,1251],{"class":93},[45,8391,8392],{"class":51},"stuArray[i].name",[45,8394,1251],{"class":93},[45,8396,8397],{"class":51},"stuArray[i].age",[45,8399,1251],{"class":93},[45,8401,8402],{"class":51},"stuArray[i].score",[45,8404,1251],{"class":93},[45,8406,1274],{"class":51},[45,8408,8409],{"class":47,"line":1861},[45,8410,2270],{"class":51},[45,8412,8413],{"class":47,"line":1866},[45,8414,1648],{"class":51},[30,8416,8418],{"id":8417},"_43结构体指针","4.3结构体指针",[10,8420,8421],{},"作用：通过指针访问结构体中的成员",[10,8423,8424],{},"利用操作符->可以通过结构体指针访问结构体属性",[35,8426,8428],{"className":197,"code":8427,"language":199,"meta":40,"style":40},"#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",[42,8429,8430,8436,8446,8452,8456,8462,8466,8470,8476,8482,8486,8494,8498,8503,8528,8533,8548,8553,8576],{"__ignoreMap":40},[45,8431,8432,8434],{"class":47,"line":48},[45,8433,2032],{"class":93},[45,8435,2035],{"class":313},[45,8437,8438,8440,8442,8444],{"class":47,"line":125},[45,8439,2040],{"class":93},[45,8441,2043],{"class":93},[45,8443,2047],{"class":2046},[45,8445,1373],{"class":51},[45,8447,8448,8450],{"class":47,"line":1262},[45,8449,2032],{"class":93},[45,8451,7832],{"class":313},[45,8453,8454],{"class":47,"line":1277},[45,8455,8191],{"class":267},[45,8457,8458,8460],{"class":47,"line":1283},[45,8459,7842],{"class":93},[45,8461,7845],{"class":2046},[45,8463,8464],{"class":47,"line":1297},[45,8465,1629],{"class":51},[45,8467,8468],{"class":47,"line":1303},[45,8469,7868],{"class":51},[45,8471,8472,8474],{"class":47,"line":1394},[45,8473,2068],{"class":93},[45,8475,7880],{"class":51},[45,8477,8478,8480],{"class":47,"line":1400},[45,8479,2068],{"class":93},[45,8481,7892],{"class":51},[45,8483,8484],{"class":47,"line":1412},[45,8485,4078],{"class":51},[45,8487,8488,8490,8492],{"class":47,"line":1695},[45,8489,212],{"class":93},[45,8491,2056],{"class":2046},[45,8493,2059],{"class":51},[45,8495,8496],{"class":47,"line":1700},[45,8497,1629],{"class":51},[45,8499,8500],{"class":47,"line":1706},[45,8501,8502],{"class":267},"    \u002F\u002F创建学生结构体变量\n",[45,8504,8505,8507,8509,8512,8514,8516,8518,8520,8522,8524,8526],{"class":47,"line":1711},[45,8506,7978],{"class":93},[45,8508,7981],{"class":2046},[45,8510,8511],{"class":51}," s",[45,8513,254],{"class":93},[45,8515,1103],{"class":51},[45,8517,7999],{"class":313},[45,8519,586],{"class":51},[45,8521,857],{"class":257},[45,8523,586],{"class":51},[45,8525,1805],{"class":257},[45,8527,4078],{"class":51},[45,8529,8530],{"class":47,"line":1725},[45,8531,8532],{"class":267},"    \u002F\u002F通过指针指向结构体变量\n",[45,8534,8535,8537,8539,8541,8543,8545],{"class":47,"line":1730},[45,8536,7978],{"class":93},[45,8538,7981],{"class":2046},[45,8540,6601],{"class":93},[45,8542,10],{"class":51},[45,8544,6422],{"class":93},[45,8546,8547],{"class":51},"s\n",[45,8549,8550],{"class":47,"line":1736},[45,8551,8552],{"class":267},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[45,8554,8555,8557,8559,8562,8564,8567,8569,8572,8574],{"class":47,"line":1757},[45,8556,1634],{"class":51},[45,8558,1251],{"class":93},[45,8560,8561],{"class":51},"p->name",[45,8563,1251],{"class":93},[45,8565,8566],{"class":51},"p->age",[45,8568,1251],{"class":93},[45,8570,8571],{"class":51},"p->score",[45,8573,1251],{"class":93},[45,8575,1274],{"class":51},[45,8577,8578],{"class":47,"line":1762},[45,8579,1648],{"class":51},[30,8581,8583],{"id":8582},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[10,8585,8586],{},"作用：结构体中的成员可以是另一个结构体",[10,8588,8589],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[35,8591,8593],{"className":197,"code":8592,"language":199,"meta":40,"style":40},"#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",[42,8594,8595,8601,8611,8617,8622,8630,8634,8638,8644,8650,8654,8659,8666,8670,8677,8681,8687,8692,8696,8704,8708,8713,8718,8723,8734,8746,8757,8770,8781,8792],{"__ignoreMap":40},[45,8596,8597,8599],{"class":47,"line":48},[45,8598,2032],{"class":93},[45,8600,2035],{"class":313},[45,8602,8603,8605,8607,8609],{"class":47,"line":125},[45,8604,2040],{"class":93},[45,8606,2043],{"class":93},[45,8608,2047],{"class":2046},[45,8610,1373],{"class":51},[45,8612,8613,8615],{"class":47,"line":1262},[45,8614,2032],{"class":93},[45,8616,7832],{"class":313},[45,8618,8619],{"class":47,"line":1277},[45,8620,8621],{"class":267},"\u002F\u002F定义学生结构体\n",[45,8623,8624,8626,8628],{"class":47,"line":1283},[45,8625,7842],{"class":93},[45,8627,7981],{"class":2046},[45,8629,2757],{"class":51},[45,8631,8632],{"class":47,"line":1297},[45,8633,1629],{"class":51},[45,8635,8636],{"class":47,"line":1303},[45,8637,7868],{"class":51},[45,8639,8640,8642],{"class":47,"line":1394},[45,8641,2068],{"class":93},[45,8643,7880],{"class":51},[45,8645,8646,8648],{"class":47,"line":1400},[45,8647,2068],{"class":93},[45,8649,7892],{"class":51},[45,8651,8652],{"class":47,"line":1412},[45,8653,1648],{"class":51},[45,8655,8656],{"class":47,"line":1695},[45,8657,8658],{"class":267},"\u002F\u002F定义老师结构体\n",[45,8660,8661,8663],{"class":47,"line":1700},[45,8662,7842],{"class":93},[45,8664,8665],{"class":2046}," Teacher\n",[45,8667,8668],{"class":47,"line":1706},[45,8669,1629],{"class":51},[45,8671,8672,8674],{"class":47,"line":1711},[45,8673,2068],{"class":93},[45,8675,8676],{"class":51}," id;\n",[45,8678,8679],{"class":47,"line":1725},[45,8680,7868],{"class":51},[45,8682,8683,8685],{"class":47,"line":1730},[45,8684,2068],{"class":93},[45,8686,7880],{"class":51},[45,8688,8689],{"class":47,"line":1736},[45,8690,8691],{"class":51},"    Student stu;\n",[45,8693,8694],{"class":47,"line":1757},[45,8695,1648],{"class":51},[45,8697,8698,8700,8702],{"class":47,"line":1762},[45,8699,212],{"class":93},[45,8701,2056],{"class":2046},[45,8703,6061],{"class":51},[45,8705,8706],{"class":47,"line":1776},[45,8707,1629],{"class":51},[45,8709,8710],{"class":47,"line":1781},[45,8711,8712],{"class":267},"    \u002F\u002F结构体嵌套结构体\n",[45,8714,8715],{"class":47,"line":1810},[45,8716,8717],{"class":267},"    \u002F\u002F创建老师\n",[45,8719,8720],{"class":47,"line":1815},[45,8721,8722],{"class":51},"    Teacher t;\n",[45,8724,8725,8728,8730,8732],{"class":47,"line":1832},[45,8726,8727],{"class":51},"    t.id",[45,8729,254],{"class":93},[45,8731,519],{"class":257},[45,8733,1373],{"class":51},[45,8735,8736,8739,8741,8744],{"class":47,"line":1837},[45,8737,8738],{"class":51},"    t.name",[45,8740,254],{"class":93},[45,8742,8743],{"class":313},"\"老王\"",[45,8745,1373],{"class":51},[45,8747,8748,8751,8753,8755],{"class":47,"line":1842},[45,8749,8750],{"class":51},"    t.age",[45,8752,254],{"class":93},[45,8754,857],{"class":257},[45,8756,1373],{"class":51},[45,8758,8759,8762,8764,8767],{"class":47,"line":1847},[45,8760,8761],{"class":51},"    t.stu.name",[45,8763,254],{"class":93},[45,8765,8766],{"class":313},"\"小王\"",[45,8768,8769],{"class":51},"；\n",[45,8771,8772,8775,8777,8779],{"class":47,"line":1861},[45,8773,8774],{"class":51},"    t.stu.age",[45,8776,254],{"class":93},[45,8778,907],{"class":257},[45,8780,1373],{"class":51},[45,8782,8783,8786,8788,8790],{"class":47,"line":1866},[45,8784,8785],{"class":51},"    t.stu.score",[45,8787,254],{"class":93},[45,8789,552],{"class":257},[45,8791,1373],{"class":51},[45,8793,8794],{"class":47,"line":2660},[45,8795,1648],{"class":51},[30,8797,8799],{"id":8798},"_45结构体做函数参数","4.5结构体做函数参数",[10,8801,8802],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[35,8804,8806],{"className":197,"code":8805,"language":199,"meta":40,"style":40},"#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",[42,8807,8808,8814,8824,8830,8836,8840,8844,8850,8856,8860,8865,8870,8887,8891,8924,8928,8933,8952,8956,8987,8991,8999,9003,9012,9024,9036,9048,9061,9069,9082,9094,9102],{"__ignoreMap":40},[45,8809,8810,8812],{"class":47,"line":48},[45,8811,2032],{"class":93},[45,8813,2035],{"class":313},[45,8815,8816,8818,8820,8822],{"class":47,"line":125},[45,8817,2040],{"class":93},[45,8819,2043],{"class":93},[45,8821,2047],{"class":2046},[45,8823,1373],{"class":51},[45,8825,8826,8828],{"class":47,"line":1262},[45,8827,2032],{"class":93},[45,8829,7832],{"class":313},[45,8831,8832,8834],{"class":47,"line":1277},[45,8833,7842],{"class":93},[45,8835,7845],{"class":2046},[45,8837,8838],{"class":47,"line":1283},[45,8839,1629],{"class":51},[45,8841,8842],{"class":47,"line":1297},[45,8843,7868],{"class":51},[45,8845,8846,8848],{"class":47,"line":1303},[45,8847,2068],{"class":93},[45,8849,7880],{"class":51},[45,8851,8852,8854],{"class":47,"line":1394},[45,8853,2068],{"class":93},[45,8855,7892],{"class":51},[45,8857,8858],{"class":47,"line":1400},[45,8859,4078],{"class":51},[45,8861,8862],{"class":47,"line":1412},[45,8863,8864],{"class":267},"\u002F\u002F打印学生信息的函数\n",[45,8866,8867],{"class":47,"line":1695},[45,8868,8869],{"class":267},"\u002F\u002F值传递\n",[45,8871,8872,8874,8877,8879,8881,8883,8885],{"class":47,"line":1700},[45,8873,5447],{"class":93},[45,8875,8876],{"class":2046}," printStudent1",[45,8878,209],{"class":51},[45,8880,7842],{"class":93},[45,8882,7981],{"class":2046},[45,8884,8511],{"class":5299},[45,8886,215],{"class":51},[45,8888,8889],{"class":47,"line":1706},[45,8890,1629],{"class":51},[45,8892,8893,8895,8897,8900,8902,8905,8907,8910,8912,8914,8916,8919,8921],{"class":47,"line":1711},[45,8894,6612],{"class":51},[45,8896,1251],{"class":93},[45,8898,8899],{"class":51}," s.name ",[45,8901,1251],{"class":93},[45,8903,8904],{"class":313}," \" \"",[45,8906,1527],{"class":93},[45,8908,8909],{"class":51}," s.age ",[45,8911,1251],{"class":93},[45,8913,8904],{"class":313},[45,8915,1527],{"class":93},[45,8917,8918],{"class":51}," s.score ",[45,8920,1251],{"class":93},[45,8922,8923],{"class":51}," endl;\n",[45,8925,8926],{"class":47,"line":1725},[45,8927,1648],{"class":51},[45,8929,8930],{"class":47,"line":1730},[45,8931,8932],{"class":267},"\u002F\u002F地址传递\n",[45,8934,8935,8937,8940,8942,8944,8946,8948,8950],{"class":47,"line":1736},[45,8936,5447],{"class":93},[45,8938,8939],{"class":2046}," printStudent2",[45,8941,209],{"class":51},[45,8943,7842],{"class":93},[45,8945,7981],{"class":2046},[45,8947,6601],{"class":93},[45,8949,902],{"class":5299},[45,8951,215],{"class":51},[45,8953,8954],{"class":47,"line":1757},[45,8955,1629],{"class":51},[45,8957,8958,8960,8962,8965,8967,8969,8971,8974,8976,8978,8980,8983,8985],{"class":47,"line":1762},[45,8959,6612],{"class":51},[45,8961,1251],{"class":93},[45,8963,8964],{"class":51}," s->name ",[45,8966,1251],{"class":93},[45,8968,8904],{"class":313},[45,8970,1527],{"class":93},[45,8972,8973],{"class":51}," s->age ",[45,8975,1251],{"class":93},[45,8977,8904],{"class":313},[45,8979,1527],{"class":93},[45,8981,8982],{"class":51}," s->score ",[45,8984,1251],{"class":93},[45,8986,8923],{"class":51},[45,8988,8989],{"class":47,"line":1776},[45,8990,1648],{"class":51},[45,8992,8993,8995,8997],{"class":47,"line":1781},[45,8994,212],{"class":93},[45,8996,2056],{"class":2046},[45,8998,2059],{"class":51},[45,9000,9001],{"class":47,"line":1810},[45,9002,1629],{"class":51},[45,9004,9005,9007,9009],{"class":47,"line":1815},[45,9006,7978],{"class":93},[45,9008,7981],{"class":2046},[45,9010,9011],{"class":51}," s;\n",[45,9013,9014,9017,9019,9022],{"class":47,"line":1832},[45,9015,9016],{"class":51},"    s.name ",[45,9018,254],{"class":93},[45,9020,9021],{"class":313}," \"张三\"",[45,9023,1373],{"class":51},[45,9025,9026,9029,9031,9034],{"class":47,"line":1837},[45,9027,9028],{"class":51},"    s.age ",[45,9030,254],{"class":93},[45,9032,9033],{"class":257}," 20",[45,9035,1373],{"class":51},[45,9037,9038,9041,9043,9046],{"class":47,"line":1842},[45,9039,9040],{"class":51},"    s.score ",[45,9042,254],{"class":93},[45,9044,9045],{"class":257}," 85",[45,9047,1373],{"class":51},[45,9049,9050,9052,9054,9057,9059],{"class":47,"line":1847},[45,9051,1634],{"class":51},[45,9053,1251],{"class":93},[45,9055,9056],{"class":313},"\"值传递:\"",[45,9058,1251],{"class":93},[45,9060,1274],{"class":51},[45,9062,9063,9066],{"class":47,"line":1861},[45,9064,9065],{"class":2046},"    printStudent1",[45,9067,9068],{"class":51},"(s);\n",[45,9070,9071,9073,9075,9078,9080],{"class":47,"line":1866},[45,9072,1634],{"class":51},[45,9074,1251],{"class":93},[45,9076,9077],{"class":313},"\"地址传递:\"",[45,9079,1251],{"class":93},[45,9081,1274],{"class":51},[45,9083,9084,9087,9089,9091],{"class":47,"line":2660},[45,9085,9086],{"class":2046},"    printStudent2",[45,9088,209],{"class":51},[45,9090,561],{"class":93},[45,9092,9093],{"class":51},"s); \n",[45,9095,9096,9098,9100],{"class":47,"line":2674},[45,9097,4173],{"class":93},[45,9099,4176],{"class":257},[45,9101,1373],{"class":51},[45,9103,9104],{"class":47,"line":2682},[45,9105,1648],{"class":51},[10,9107,9108],{},"注意：",[1214,9110,9111,9114],{},[162,9112,9113],{},"1.先定义结构体，不要在函数中写结构体的定义",[162,9115,9116],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[30,9118,9120],{"id":9119},"_46结构体中const使用场景","4.6结构体中const使用场景",[10,9122,9123],{},"用const防止误操作",[35,9125,9127],{"className":197,"code":9126,"language":199,"meta":40,"style":40},"#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",[42,9128,9129,9135,9145,9151,9156,9160,9164,9170,9176,9180,9196,9200,9223,9227,9235,9239,9260,9267,9271],{"__ignoreMap":40},[45,9130,9131,9133],{"class":47,"line":48},[45,9132,2032],{"class":93},[45,9134,2035],{"class":313},[45,9136,9137,9139,9141,9143],{"class":47,"line":125},[45,9138,2040],{"class":93},[45,9140,2043],{"class":93},[45,9142,2047],{"class":2046},[45,9144,1373],{"class":51},[45,9146,9147,9149],{"class":47,"line":1262},[45,9148,2032],{"class":93},[45,9150,7832],{"class":313},[45,9152,9153],{"class":47,"line":1277},[45,9154,9155],{"class":51},"sctuct Student\n",[45,9157,9158],{"class":47,"line":1283},[45,9159,1629],{"class":51},[45,9161,9162],{"class":47,"line":1297},[45,9163,7868],{"class":51},[45,9165,9166,9168],{"class":47,"line":1303},[45,9167,2068],{"class":93},[45,9169,7880],{"class":51},[45,9171,9172,9174],{"class":47,"line":1394},[45,9173,2068],{"class":93},[45,9175,7892],{"class":51},[45,9177,9178],{"class":47,"line":1400},[45,9179,4078],{"class":51},[45,9181,9182,9184,9187,9189,9192,9194],{"class":47,"line":1412},[45,9183,5447],{"class":93},[45,9185,9186],{"class":2046}," printStudents",[45,9188,209],{"class":51},[45,9190,9191],{"class":2046},"student",[45,9193,8511],{"class":5299},[45,9195,215],{"class":51},[45,9197,9198],{"class":47,"line":1695},[45,9199,1629],{"class":51},[45,9201,9202,9204,9206,9209,9211,9214,9216,9219,9221],{"class":47,"line":1700},[45,9203,1634],{"class":51},[45,9205,1251],{"class":93},[45,9207,9208],{"class":51},"s.name",[45,9210,1251],{"class":93},[45,9212,9213],{"class":51},"s.age",[45,9215,1251],{"class":93},[45,9217,9218],{"class":51},"s.score",[45,9220,1251],{"class":93},[45,9222,1274],{"class":51},[45,9224,9225],{"class":47,"line":1706},[45,9226,1648],{"class":51},[45,9228,9229,9231,9233],{"class":47,"line":1711},[45,9230,212],{"class":93},[45,9232,2056],{"class":2046},[45,9234,6061],{"class":51},[45,9236,9237],{"class":47,"line":1725},[45,9238,1629],{"class":51},[45,9240,9241,9244,9246,9248,9250,9252,9254,9256,9258],{"class":47,"line":1730},[45,9242,9243],{"class":51},"    Student s",[45,9245,254],{"class":93},[45,9247,1103],{"class":51},[45,9249,7999],{"class":313},[45,9251,586],{"class":51},[45,9253,857],{"class":257},[45,9255,586],{"class":51},[45,9257,857],{"class":257},[45,9259,4078],{"class":51},[45,9261,9262,9265],{"class":47,"line":1736},[45,9263,9264],{"class":2046},"    printStudent",[45,9266,9068],{"class":51},[45,9268,9269],{"class":47,"line":1757},[45,9270,2483],{"emptyLinePlaceholder":133},[45,9272,9273],{"class":47,"line":1762},[45,9274,1648],{"class":51},[10,9276,9108],{},[1214,9278,9279,9282,9285],{},[162,9280,9281],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[162,9283,9284],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[162,9286,9287],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[35,9289,9291],{"className":197,"code":9290,"language":199,"meta":40,"style":40},"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",[42,9292,9293,9312,9316,9321,9341],{"__ignoreMap":40},[45,9294,9295,9297,9299,9301,9303,9306,9308,9310],{"class":47,"line":48},[45,9296,5447],{"class":93},[45,9298,9186],{"class":2046},[45,9300,209],{"class":51},[45,9302,6875],{"class":93},[45,9304,9305],{"class":2046}," student",[45,9307,6601],{"class":93},[45,9309,902],{"class":5299},[45,9311,215],{"class":51},[45,9313,9314],{"class":47,"line":125},[45,9315,1629],{"class":51},[45,9317,9318],{"class":47,"line":1262},[45,9319,9320],{"class":267},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[45,9322,9323,9325,9327,9329,9331,9333,9335,9337,9339],{"class":47,"line":1277},[45,9324,1634],{"class":51},[45,9326,1251],{"class":93},[45,9328,9208],{"class":51},[45,9330,1251],{"class":93},[45,9332,9213],{"class":51},[45,9334,1251],{"class":93},[45,9336,9218],{"class":51},[45,9338,1251],{"class":93},[45,9340,1274],{"class":51},[45,9342,9343],{"class":47,"line":1283},[45,9344,1648],{"class":51},[30,9346,9348],{"id":9347},"_47案例","4.7案例",[159,9350,9351],{},[162,9352,9353],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[35,9355,9357],{"className":197,"code":9356,"language":199,"meta":40,"style":40},"#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",[42,9358,9359,9365,9375,9381,9388,9392,9398,9402,9407,9413,9419,9423,9427,9433,9437,9442,9447,9460,9464,9469,9495,9499,9511,9538,9542,9554,9564,9568,9573,9602,9606,9618,9627,9654,9665,9675,9679,9683,9687,9692,9716,9720,9744,9748,9767,9793,9797,9822,9845,9869,9874,9879,9884,9893,9898,9904,9925,9931,9945,9951,9978,9987,9993,10001,10006],{"__ignoreMap":40},[45,9360,9361,9363],{"class":47,"line":48},[45,9362,2032],{"class":93},[45,9364,2035],{"class":313},[45,9366,9367,9369,9371,9373],{"class":47,"line":125},[45,9368,2040],{"class":93},[45,9370,2043],{"class":93},[45,9372,2047],{"class":2046},[45,9374,1373],{"class":51},[45,9376,9377,9379],{"class":47,"line":1262},[45,9378,2032],{"class":93},[45,9380,7832],{"class":313},[45,9382,9383,9385],{"class":47,"line":1277},[45,9384,2032],{"class":93},[45,9386,9387],{"class":313},"\u003Cctime>\n",[45,9389,9390],{"class":47,"line":1283},[45,9391,8621],{"class":267},[45,9393,9394,9396],{"class":47,"line":1297},[45,9395,7842],{"class":93},[45,9397,7845],{"class":2046},[45,9399,9400],{"class":47,"line":1303},[45,9401,1629],{"class":51},[45,9403,9404],{"class":47,"line":1394},[45,9405,9406],{"class":51},"    string sName;\n",[45,9408,9409,9411],{"class":47,"line":1400},[45,9410,2068],{"class":93},[45,9412,7880],{"class":51},[45,9414,9415,9417],{"class":47,"line":1412},[45,9416,2068],{"class":93},[45,9418,7892],{"class":51},[45,9420,9421],{"class":47,"line":1695},[45,9422,4078],{"class":51},[45,9424,9425],{"class":47,"line":1700},[45,9426,8658],{"class":267},[45,9428,9429,9431],{"class":47,"line":1706},[45,9430,7842],{"class":93},[45,9432,8665],{"class":2046},[45,9434,9435],{"class":47,"line":1711},[45,9436,1629],{"class":51},[45,9438,9439],{"class":47,"line":1725},[45,9440,9441],{"class":51},"    string tName;\n",[45,9443,9444],{"class":47,"line":1730},[45,9445,9446],{"class":267},"    \u002F\u002F学生数组\n",[45,9448,9449,9451,9453,9456,9458],{"class":47,"line":1736},[45,9450,7978],{"class":93},[45,9452,7981],{"class":2046},[45,9454,9455],{"class":51}," sArray[",[45,9457,527],{"class":257},[45,9459,4773],{"class":51},[45,9461,9462],{"class":47,"line":1757},[45,9463,4078],{"class":51},[45,9465,9466],{"class":47,"line":1762},[45,9467,9468],{"class":267},"\u002F\u002F给老师和学生赋值的函数\n",[45,9470,9471,9473,9476,9478,9480,9483,9486,9489,9491,9493],{"class":47,"line":1776},[45,9472,5447],{"class":93},[45,9474,9475],{"class":2046}," allocateSpace",[45,9477,209],{"class":51},[45,9479,7842],{"class":93},[45,9481,9482],{"class":2046}," Teacher",[45,9484,9485],{"class":5299}," tArray",[45,9487,9488],{"class":51},"[],",[45,9490,212],{"class":93},[45,9492,7414],{"class":5299},[45,9494,215],{"class":51},[45,9496,9497],{"class":47,"line":1781},[45,9498,1629],{"class":51},[45,9500,9501,9504,9506,9509],{"class":47,"line":1810},[45,9502,9503],{"class":51},"    string nameSeed",[45,9505,254],{"class":93},[45,9507,9508],{"class":313},"\"ABCDE\"",[45,9510,1373],{"class":51},[45,9512,9513,9515,9517,9519,9522,9524,9526,9529,9531,9534,9536],{"class":47,"line":1815},[45,9514,3284],{"class":93},[45,9516,1741],{"class":51},[45,9518,212],{"class":93},[45,9520,9521],{"class":51}," i ",[45,9523,254],{"class":93},[45,9525,4176],{"class":257},[45,9527,9528],{"class":51},"; i ",[45,9530,1117],{"class":93},[45,9532,9533],{"class":51}," len; i",[45,9535,2375],{"class":93},[45,9537,215],{"class":51},[45,9539,9540],{"class":47,"line":1832},[45,9541,2113],{"class":51},[45,9543,9544,9547,9549,9552],{"class":47,"line":1837},[45,9545,9546],{"class":51},"        tArray[i].tName ",[45,9548,254],{"class":93},[45,9550,9551],{"class":313}," \"Teacher_\"",[45,9553,1373],{"class":51},[45,9555,9556,9558,9561],{"class":47,"line":1842},[45,9557,9546],{"class":51},[45,9559,9560],{"class":93},"+=",[45,9562,9563],{"class":51},"nameSeed[i];\n",[45,9565,9566],{"class":47,"line":1847},[45,9567,2483],{"emptyLinePlaceholder":133},[45,9569,9570],{"class":47,"line":1861},[45,9571,9572],{"class":267},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[45,9574,9575,9577,9579,9581,9584,9586,9588,9591,9593,9595,9598,9600],{"class":47,"line":1866},[45,9576,3486],{"class":93},[45,9578,1741],{"class":51},[45,9580,212],{"class":93},[45,9582,9583],{"class":51}," j ",[45,9585,254],{"class":93},[45,9587,4176],{"class":257},[45,9589,9590],{"class":51},"; j ",[45,9592,1117],{"class":93},[45,9594,2231],{"class":257},[45,9596,9597],{"class":51},"; j",[45,9599,2375],{"class":93},[45,9601,215],{"class":51},[45,9603,9604],{"class":47,"line":2660},[45,9605,2593],{"class":51},[45,9607,9608,9611,9613,9616],{"class":47,"line":2674},[45,9609,9610],{"class":51},"            tArray[i].sArray[j].sName ",[45,9612,254],{"class":93},[45,9614,9615],{"class":313}," \"Student_\"",[45,9617,1373],{"class":51},[45,9619,9620,9622,9624],{"class":47,"line":2682},[45,9621,9610],{"class":51},[45,9623,9560],{"class":93},[45,9625,9626],{"class":51}," nameSeed[j];\n",[45,9628,9629,9632,9635,9637,9639,9641,9643,9645,9647,9649,9651],{"class":47,"line":2687},[45,9630,9631],{"class":93},"            int",[45,9633,9634],{"class":51}," random",[45,9636,254],{"class":93},[45,9638,2507],{"class":2046},[45,9640,2510],{"class":51},[45,9642,536],{"class":93},[45,9644,1114],{"class":257},[45,9646,689],{"class":93},[45,9648,609],{"class":257},[45,9650,264],{"class":51},[45,9652,9653],{"class":267},"\u002F\u002F40~99\n",[45,9655,9656,9659,9661,9663],{"class":47,"line":2693},[45,9657,9658],{"class":51},"            tArray[i].sArray[j].age ",[45,9660,254],{"class":93},[45,9662,9033],{"class":257},[45,9664,1373],{"class":51},[45,9666,9667,9670,9672],{"class":47,"line":2699},[45,9668,9669],{"class":51},"            tArray[i].sArray[j].score ",[45,9671,254],{"class":93},[45,9673,9674],{"class":51}," random;\n",[45,9676,9677],{"class":47,"line":2704},[45,9678,2612],{"class":51},[45,9680,9681],{"class":47,"line":8031},[45,9682,2270],{"class":51},[45,9684,9685],{"class":47,"line":8055},[45,9686,1648],{"class":51},[45,9688,9689],{"class":47,"line":8060},[45,9690,9691],{"class":267},"\u002F\u002F打印所有信息的函数\n",[45,9693,9694,9696,9699,9701,9703,9705,9707,9710,9712,9714],{"class":47,"line":8066},[45,9695,5447],{"class":93},[45,9697,9698],{"class":2046}," printInfo",[45,9700,209],{"class":51},[45,9702,7842],{"class":93},[45,9704,9482],{"class":2046},[45,9706,9485],{"class":5299},[45,9708,9709],{"class":51},"[], ",[45,9711,212],{"class":93},[45,9713,7414],{"class":5299},[45,9715,215],{"class":51},[45,9717,9718],{"class":47,"line":8093},[45,9719,1629],{"class":51},[45,9721,9722,9724,9726,9728,9730,9732,9734,9736,9738,9740,9742],{"class":47,"line":8098},[45,9723,3284],{"class":93},[45,9725,1741],{"class":51},[45,9727,212],{"class":93},[45,9729,9521],{"class":51},[45,9731,254],{"class":93},[45,9733,4176],{"class":257},[45,9735,9528],{"class":51},[45,9737,1117],{"class":93},[45,9739,9533],{"class":51},[45,9741,2375],{"class":93},[45,9743,215],{"class":51},[45,9745,9746],{"class":47,"line":8104},[45,9747,2113],{"class":51},[45,9749,9750,9753,9755,9758,9760,9763,9765],{"class":47,"line":8116},[45,9751,9752],{"class":51},"        cout ",[45,9754,1251],{"class":93},[45,9756,9757],{"class":313}," \"Teacher: \"",[45,9759,1527],{"class":93},[45,9761,9762],{"class":51}," tArray[i].tName ",[45,9764,1251],{"class":93},[45,9766,8923],{"class":51},[45,9768,9769,9771,9773,9775,9777,9779,9781,9783,9785,9787,9789,9791],{"class":47,"line":8128},[45,9770,3486],{"class":93},[45,9772,1741],{"class":51},[45,9774,212],{"class":93},[45,9776,9583],{"class":51},[45,9778,254],{"class":93},[45,9780,4176],{"class":257},[45,9782,9590],{"class":51},[45,9784,1117],{"class":93},[45,9786,2231],{"class":257},[45,9788,9597],{"class":51},[45,9790,2375],{"class":93},[45,9792,215],{"class":51},[45,9794,9795],{"class":47,"line":8140},[45,9796,2593],{"class":51},[45,9798,9800,9803,9805,9808,9810,9813,9815,9818,9820],{"class":47,"line":9799},47,[45,9801,9802],{"class":51},"            cout ",[45,9804,1251],{"class":93},[45,9806,9807],{"class":313}," \"",[45,9809,1313],{"class":257},[45,9811,9812],{"class":313},"Student: \"",[45,9814,1527],{"class":93},[45,9816,9817],{"class":51}," tArray[i].sArray[j].sName",[45,9819,1251],{"class":93},[45,9821,1274],{"class":51},[45,9823,9825,9827,9829,9831,9833,9836,9838,9841,9843],{"class":47,"line":9824},48,[45,9826,9802],{"class":51},[45,9828,1251],{"class":93},[45,9830,9807],{"class":313},[45,9832,1313],{"class":257},[45,9834,9835],{"class":313},"Age: \"",[45,9837,1527],{"class":93},[45,9839,9840],{"class":51}," tArray[i].sArray[j].age ",[45,9842,1251],{"class":93},[45,9844,8923],{"class":51},[45,9846,9848,9850,9852,9854,9856,9859,9861,9864,9866],{"class":47,"line":9847},49,[45,9849,9802],{"class":51},[45,9851,1251],{"class":93},[45,9853,9807],{"class":313},[45,9855,1313],{"class":257},[45,9857,9858],{"class":313},"Score: \"",[45,9860,1527],{"class":93},[45,9862,9863],{"class":51}," tArray[i].sArray[j].score ",[45,9865,1251],{"class":93},[45,9867,9868],{"class":51}," endl;   \n",[45,9870,9872],{"class":47,"line":9871},50,[45,9873,2612],{"class":51},[45,9875,9877],{"class":47,"line":9876},51,[45,9878,2270],{"class":51},[45,9880,9882],{"class":47,"line":9881},52,[45,9883,1648],{"class":51},[45,9885,9887,9889,9891],{"class":47,"line":9886},53,[45,9888,212],{"class":93},[45,9890,2056],{"class":2046},[45,9892,2059],{"class":51},[45,9894,9896],{"class":47,"line":9895},54,[45,9897,1629],{"class":51},[45,9899,9901],{"class":47,"line":9900},55,[45,9902,9903],{"class":267},"    \u002F\u002F随机数种子\n",[45,9905,9907,9909,9911,9913,9915,9917,9919,9921,9923],{"class":47,"line":9906},56,[45,9908,2456],{"class":2046},[45,9910,2459],{"class":51},[45,9912,2462],{"class":93},[45,9914,2465],{"class":93},[45,9916,637],{"class":51},[45,9918,2470],{"class":2046},[45,9920,209],{"class":51},[45,9922,2475],{"class":257},[45,9924,2478],{"class":51},[45,9926,9928],{"class":47,"line":9927},57,[45,9929,9930],{"class":267},"    \u002F\u002F1.创建3名老师的数组\n",[45,9932,9934,9936,9938,9941,9943],{"class":47,"line":9933},58,[45,9935,7978],{"class":93},[45,9937,9482],{"class":2046},[45,9939,9940],{"class":51}," tArray[",[45,9942,280],{"class":257},[45,9944,4773],{"class":51},[45,9946,9948],{"class":47,"line":9947},59,[45,9949,9950],{"class":267},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[45,9952,9954,9956,9959,9961,9964,9967,9969,9971,9974,9976],{"class":47,"line":9953},60,[45,9955,2068],{"class":93},[45,9957,9958],{"class":51}," len ",[45,9960,254],{"class":93},[45,9962,9963],{"class":93}," sizeof",[45,9965,9966],{"class":51},"(tArray) ",[45,9968,791],{"class":93},[45,9970,9963],{"class":93},[45,9972,9973],{"class":51},"(tArray[",[45,9975,400],{"class":257},[45,9977,3939],{"class":51},[45,9979,9981,9984],{"class":47,"line":9980},61,[45,9982,9983],{"class":2046},"    allocateSpace",[45,9985,9986],{"class":51},"(tArray, len);\n",[45,9988,9990],{"class":47,"line":9989},62,[45,9991,9992],{"class":267},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[45,9994,9996,9999],{"class":47,"line":9995},63,[45,9997,9998],{"class":2046},"    printInfo",[45,10000,9986],{"class":51},[45,10002,10004],{"class":47,"line":10003},64,[45,10005,2483],{"emptyLinePlaceholder":133},[45,10007,10009],{"class":47,"line":10008},65,[45,10010,1648],{"class":51},[159,10012,10013],{"start":125},[162,10014,10015,10018],{},[358,10016,10017],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[10,10020,10021],{},"五名英雄信息如下：",[35,10023,10027],{"className":10024,"code":10025,"language":10026,"meta":40,"style":40},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[42,10028,10029,10047,10064,10081,10098],{"__ignoreMap":40},[45,10030,10031,10033,10036,10038,10040,10042,10045],{"class":47,"line":48},[45,10032,5000],{"class":51},[45,10034,10035],{"class":313},"\"刘备\"",[45,10037,586],{"class":51},[45,10039,982],{"class":257},[45,10041,586],{"class":51},[45,10043,10044],{"class":313},"\"男\"",[45,10046,5013],{"class":51},[45,10048,10049,10051,10054,10056,10058,10060,10062],{"class":47,"line":125},[45,10050,5000],{"class":51},[45,10052,10053],{"class":313},"\"关羽\"",[45,10055,586],{"class":51},[45,10057,957],{"class":257},[45,10059,586],{"class":51},[45,10061,10044],{"class":313},[45,10063,5013],{"class":51},[45,10065,10066,10068,10071,10073,10075,10077,10079],{"class":47,"line":1262},[45,10067,5000],{"class":51},[45,10069,10070],{"class":313},"\"张飞\"",[45,10072,586],{"class":51},[45,10074,907],{"class":257},[45,10076,586],{"class":51},[45,10078,10044],{"class":313},[45,10080,5013],{"class":51},[45,10082,10083,10085,10088,10090,10092,10094,10096],{"class":47,"line":1277},[45,10084,5000],{"class":51},[45,10086,10087],{"class":313},"\"赵云\"",[45,10089,586],{"class":51},[45,10091,932],{"class":257},[45,10093,586],{"class":51},[45,10095,10044],{"class":313},[45,10097,5013],{"class":51},[45,10099,10100,10102,10105,10107,10109,10111,10114],{"class":47,"line":1283},[45,10101,5000],{"class":51},[45,10103,10104],{"class":313},"\"貂蝉\"",[45,10106,586],{"class":51},[45,10108,882],{"class":257},[45,10110,586],{"class":51},[45,10112,10113],{"class":313},"\"女\"",[45,10115,5013],{"class":51},[10,10117,10118],{},"代码：",[35,10120,10122],{"className":197,"code":10121,"language":199,"meta":40,"style":40},"#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",[42,10123,10124,10130,10140,10146,10153,10157,10161,10167,10172,10176,10181,10204,10208,10233,10237,10270,10275,10304,10309,10324,10350,10370,10375,10380,10384,10388,10393,10415,10419,10443,10447,10509,10513,10517,10525,10529,10534,10545,10549,10565,10581,10597,10613,10629,10633,10653,10675,10680,10693,10700,10705,10711,10716,10729,10735],{"__ignoreMap":40},[45,10125,10126,10128],{"class":47,"line":48},[45,10127,2032],{"class":93},[45,10129,2035],{"class":313},[45,10131,10132,10134,10136,10138],{"class":47,"line":125},[45,10133,2040],{"class":93},[45,10135,2043],{"class":93},[45,10137,2047],{"class":2046},[45,10139,1373],{"class":51},[45,10141,10142,10144],{"class":47,"line":1262},[45,10143,2032],{"class":93},[45,10145,7832],{"class":313},[45,10147,10148,10150],{"class":47,"line":1277},[45,10149,7842],{"class":93},[45,10151,10152],{"class":2046}," Sanguo\n",[45,10154,10155],{"class":47,"line":1283},[45,10156,1629],{"class":51},[45,10158,10159],{"class":47,"line":1297},[45,10160,7868],{"class":51},[45,10162,10163,10165],{"class":47,"line":1303},[45,10164,2068],{"class":93},[45,10166,7880],{"class":51},[45,10168,10169],{"class":47,"line":1394},[45,10170,10171],{"class":51},"    string gender;\n",[45,10173,10174],{"class":47,"line":1400},[45,10175,4078],{"class":51},[45,10177,10178],{"class":47,"line":1412},[45,10179,10180],{"class":267},"\u002F\u002F定义排序函数\n",[45,10182,10183,10185,10187,10189,10192,10194,10196,10198,10200,10202],{"class":47,"line":1695},[45,10184,5447],{"class":93},[45,10186,7399],{"class":2046},[45,10188,209],{"class":51},[45,10190,10191],{"class":2046},"Sanguo",[45,10193,6601],{"class":93},[45,10195,902],{"class":5299},[45,10197,586],{"class":51},[45,10199,212],{"class":93},[45,10201,7414],{"class":5299},[45,10203,215],{"class":51},[45,10205,10206],{"class":47,"line":1700},[45,10207,1629],{"class":51},[45,10209,10210,10212,10214,10216,10218,10220,10222,10224,10226,10229,10231],{"class":47,"line":1706},[45,10211,3284],{"class":93},[45,10213,209],{"class":51},[45,10215,212],{"class":93},[45,10217,3115],{"class":51},[45,10219,254],{"class":93},[45,10221,400],{"class":257},[45,10223,3122],{"class":51},[45,10225,1117],{"class":93},[45,10227,10228],{"class":51},"len;i",[45,10230,2375],{"class":93},[45,10232,215],{"class":51},[45,10234,10235],{"class":47,"line":1711},[45,10236,2113],{"class":51},[45,10238,10239,10242,10244,10246,10248,10250,10252,10254,10256,10258,10260,10262,10264,10266,10268],{"class":47,"line":1725},[45,10240,10241],{"class":93},"     for",[45,10243,1741],{"class":51},[45,10245,212],{"class":93},[45,10247,3493],{"class":51},[45,10249,254],{"class":93},[45,10251,400],{"class":257},[45,10253,3500],{"class":51},[45,10255,1117],{"class":93},[45,10257,7441],{"class":51},[45,10259,94],{"class":93},[45,10261,426],{"class":257},[45,10263,94],{"class":93},[45,10265,3633],{"class":51},[45,10267,2375],{"class":93},[45,10269,215],{"class":51},[45,10271,10272],{"class":47,"line":1730},[45,10273,10274],{"class":51},"     {\n",[45,10276,10277,10280,10283,10285,10288,10290,10293,10295,10297,10299,10301],{"class":47,"line":1736},[45,10278,10279],{"class":93},"         if",[45,10281,10282],{"class":51}," ((s",[45,10284,689],{"class":93},[45,10286,10287],{"class":51},"j)->age ",[45,10289,1167],{"class":93},[45,10291,10292],{"class":51}," (s",[45,10294,689],{"class":93},[45,10296,675],{"class":51},[45,10298,689],{"class":93},[45,10300,426],{"class":257},[45,10302,10303],{"class":51},")->age)\n",[45,10305,10306],{"class":47,"line":1757},[45,10307,10308],{"class":51},"         {\n",[45,10310,10311,10314,10316,10319,10321],{"class":47,"line":1762},[45,10312,10313],{"class":51},"             Sanguo temp",[45,10315,7236],{"class":93},[45,10317,10318],{"class":51},"(s",[45,10320,689],{"class":93},[45,10322,10323],{"class":51},"j);\n",[45,10325,10326,10329,10331,10333,10336,10338,10340,10342,10344,10346,10348],{"class":47,"line":1776},[45,10327,10328],{"class":93},"             *",[45,10330,10318],{"class":51},[45,10332,689],{"class":93},[45,10334,10335],{"class":51},"j)",[45,10337,7236],{"class":93},[45,10339,10318],{"class":51},[45,10341,689],{"class":93},[45,10343,675],{"class":51},[45,10345,689],{"class":93},[45,10347,426],{"class":257},[45,10349,2802],{"class":51},[45,10351,10352,10354,10356,10358,10360,10362,10364,10366,10368],{"class":47,"line":1781},[45,10353,10328],{"class":93},[45,10355,10318],{"class":51},[45,10357,689],{"class":93},[45,10359,675],{"class":51},[45,10361,689],{"class":93},[45,10363,426],{"class":257},[45,10365,637],{"class":51},[45,10367,254],{"class":93},[45,10369,4363],{"class":51},[45,10371,10372],{"class":47,"line":1810},[45,10373,10374],{"class":51},"         }\n",[45,10376,10377],{"class":47,"line":1815},[45,10378,10379],{"class":51},"     }\n",[45,10381,10382],{"class":47,"line":1832},[45,10383,2270],{"class":51},[45,10385,10386],{"class":47,"line":1837},[45,10387,1648],{"class":51},[45,10389,10390],{"class":47,"line":1842},[45,10391,10392],{"class":267},"\u002F\u002F定义打印函数\n",[45,10394,10395,10397,10399,10401,10403,10405,10407,10409,10411,10413],{"class":47,"line":1847},[45,10396,5447],{"class":93},[45,10398,9698],{"class":2046},[45,10400,209],{"class":51},[45,10402,10191],{"class":2046},[45,10404,6601],{"class":93},[45,10406,902],{"class":5299},[45,10408,586],{"class":51},[45,10410,212],{"class":93},[45,10412,7414],{"class":5299},[45,10414,215],{"class":51},[45,10416,10417],{"class":47,"line":1861},[45,10418,1629],{"class":51},[45,10420,10421,10423,10425,10427,10429,10431,10433,10435,10437,10439,10441],{"class":47,"line":1866},[45,10422,3284],{"class":93},[45,10424,1741],{"class":51},[45,10426,212],{"class":93},[45,10428,3115],{"class":51},[45,10430,254],{"class":93},[45,10432,400],{"class":257},[45,10434,3122],{"class":51},[45,10436,1117],{"class":93},[45,10438,10228],{"class":51},[45,10440,2375],{"class":93},[45,10442,215],{"class":51},[45,10444,10445],{"class":47,"line":2660},[45,10446,2113],{"class":51},[45,10448,10449,10451,10453,10455,10457,10460,10462,10464,10466,10469,10471,10473,10475,10478,10480,10482,10484,10487,10489,10491,10493,10496,10498,10500,10502,10505,10507],{"class":47,"line":2674},[45,10450,3534],{"class":51},[45,10452,1251],{"class":93},[45,10454,459],{"class":313},[45,10456,1313],{"class":257},[45,10458,10459],{"class":313},"姓名：\"",[45,10461,1251],{"class":93},[45,10463,10318],{"class":51},[45,10465,689],{"class":93},[45,10467,10468],{"class":51},"i)->name",[45,10470,1251],{"class":93},[45,10472,459],{"class":313},[45,10474,1313],{"class":257},[45,10476,10477],{"class":313},"年龄：\"",[45,10479,1251],{"class":93},[45,10481,10318],{"class":51},[45,10483,689],{"class":93},[45,10485,10486],{"class":51},"i)->age",[45,10488,1251],{"class":93},[45,10490,459],{"class":313},[45,10492,1313],{"class":257},[45,10494,10495],{"class":313},"性别：\"",[45,10497,1251],{"class":93},[45,10499,10318],{"class":51},[45,10501,689],{"class":93},[45,10503,10504],{"class":51},"i)->gender",[45,10506,1251],{"class":93},[45,10508,1274],{"class":51},[45,10510,10511],{"class":47,"line":2682},[45,10512,2270],{"class":51},[45,10514,10515],{"class":47,"line":2687},[45,10516,1648],{"class":51},[45,10518,10519,10521,10523],{"class":47,"line":2693},[45,10520,212],{"class":93},[45,10522,2056],{"class":2046},[45,10524,2059],{"class":51},[45,10526,10527],{"class":47,"line":2699},[45,10528,1629],{"class":51},[45,10530,10531],{"class":47,"line":2704},[45,10532,10533],{"class":267},"    \u002F\u002F定义结构体变量\n",[45,10535,10536,10539,10541,10543],{"class":47,"line":8031},[45,10537,10538],{"class":51},"    Sanguo s1[",[45,10540,527],{"class":257},[45,10542,1147],{"class":51},[45,10544,4991],{"class":93},[45,10546,10547],{"class":47,"line":8055},[45,10548,2113],{"class":51},[45,10550,10551,10553,10555,10557,10559,10561,10563],{"class":47,"line":8060},[45,10552,5000],{"class":51},[45,10554,10035],{"class":313},[45,10556,586],{"class":51},[45,10558,982],{"class":257},[45,10560,586],{"class":51},[45,10562,10044],{"class":313},[45,10564,5013],{"class":51},[45,10566,10567,10569,10571,10573,10575,10577,10579],{"class":47,"line":8066},[45,10568,5000],{"class":51},[45,10570,10053],{"class":313},[45,10572,586],{"class":51},[45,10574,957],{"class":257},[45,10576,586],{"class":51},[45,10578,10044],{"class":313},[45,10580,5013],{"class":51},[45,10582,10583,10585,10587,10589,10591,10593,10595],{"class":47,"line":8093},[45,10584,5000],{"class":51},[45,10586,10070],{"class":313},[45,10588,586],{"class":51},[45,10590,907],{"class":257},[45,10592,586],{"class":51},[45,10594,10044],{"class":313},[45,10596,5013],{"class":51},[45,10598,10599,10601,10603,10605,10607,10609,10611],{"class":47,"line":8098},[45,10600,5000],{"class":51},[45,10602,10087],{"class":313},[45,10604,586],{"class":51},[45,10606,932],{"class":257},[45,10608,586],{"class":51},[45,10610,10044],{"class":313},[45,10612,5013],{"class":51},[45,10614,10615,10617,10619,10621,10623,10625,10627],{"class":47,"line":8104},[45,10616,5000],{"class":51},[45,10618,10104],{"class":313},[45,10620,586],{"class":51},[45,10622,882],{"class":257},[45,10624,586],{"class":51},[45,10626,10113],{"class":313},[45,10628,5013],{"class":51},[45,10630,10631],{"class":47,"line":8116},[45,10632,5034],{"class":51},[45,10634,10635,10637,10639,10641,10644,10646,10649,10651],{"class":47,"line":8128},[45,10636,2068],{"class":93},[45,10638,7414],{"class":51},[45,10640,4286],{"class":93},[45,10642,10643],{"class":51},"(s1)",[45,10645,4292],{"class":93},[45,10647,10648],{"class":51},"(s1[",[45,10650,400],{"class":257},[45,10652,3939],{"class":51},[45,10654,10655,10658,10660,10663,10665,10668,10671,10673],{"class":47,"line":8140},[45,10656,10657],{"class":51},"    Sanguo ",[45,10659,663],{"class":93},[45,10661,10662],{"class":51},"s ",[45,10664,254],{"class":93},[45,10666,10667],{"class":93}," &",[45,10669,10670],{"class":51},"s1[",[45,10672,400],{"class":257},[45,10674,4773],{"class":51},[45,10676,10677],{"class":47,"line":9799},[45,10678,10679],{"class":267},"    \u002F\u002F排序前：\n",[45,10681,10682,10684,10686,10689,10691],{"class":47,"line":9824},[45,10683,6612],{"class":51},[45,10685,1251],{"class":93},[45,10687,10688],{"class":313}," \"排序前：\"",[45,10690,1527],{"class":93},[45,10692,8923],{"class":51},[45,10694,10695,10697],{"class":47,"line":9847},[45,10696,9998],{"class":2046},[45,10698,10699],{"class":51},"(s,len);\n",[45,10701,10702],{"class":47,"line":9871},[45,10703,10704],{"class":267},"    \u002F\u002F调用排序函数\n",[45,10706,10707,10709],{"class":47,"line":9876},[45,10708,7681],{"class":2046},[45,10710,10699],{"class":51},[45,10712,10713],{"class":47,"line":9881},[45,10714,10715],{"class":267},"    \u002F\u002F排序后\n",[45,10717,10718,10720,10722,10725,10727],{"class":47,"line":9886},[45,10719,6612],{"class":51},[45,10721,1251],{"class":93},[45,10723,10724],{"class":313}," \"排序后：\"",[45,10726,1527],{"class":93},[45,10728,8923],{"class":51},[45,10730,10731,10733],{"class":47,"line":9895},[45,10732,9998],{"class":2046},[45,10734,10699],{"class":51},[45,10736,10737],{"class":47,"line":9900},[45,10738,1648],{"class":51},[10,10740,10741,10742,10744],{},"注意：使用指针时直接用传首地址**&s",[45,10743,400],{},"**",[121,10746,10747],{},"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":40,"searchDepth":125,"depth":125,"links":10749},[10750,10751,10752,10753,10754,10755,10756],{"id":7786,"depth":125,"text":7787},{"id":8148,"depth":125,"text":8149},{"id":8417,"depth":125,"text":8418},{"id":8582,"depth":125,"text":8583},{"id":8798,"depth":125,"text":8799},{"id":9119,"depth":125,"text":9120},{"id":9347,"depth":125,"text":9348},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7775,"description":7783},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10763,"title":10764,"body":10765,"description":40,"extension":131,"meta":12108,"navigation":133,"path":12109,"seo":12110,"stem":12111,"__hash__":12112},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10766,"toc":12102},[10767,10770,10774,10780,10794,10799,10802,10806,10813,10819,10822,10829,10835,10840,10843,10846,10849,11413,11416,11430,11434,11439,11455,11595,11598,11604,11607,11612,11620,11728,11731,11736,11739,11744,11747,11753,11756,12099],[20,10768,10764],{"id":10769},"_5程序内存模型",[30,10771,10773],{"id":10772},"_51内存分区模型","5.1内存分区模型",[10,10775,10776,10777],{},"C++程序在执行时，将内存大方向划分为",[358,10778,10779],{},"4个区域",[1214,10781,10782,10785,10788,10791],{},[162,10783,10784],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[162,10786,10787],{},"全局区：存放全局变量和静态变量以及常量",[162,10789,10790],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[162,10792,10793],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[10,10795,10796],{},[358,10797,10798],{},"内存四区意义：",[10,10800,10801],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[176,10803,10805],{"id":10804},"_511程序运行前","5.1.1程序运行前",[10,10807,10808,10809,10812],{},"​\t在程序编译后，生成了exe可执行程序，",[358,10810,10811],{},"未执行该程序前","分为两个区域",[10,10814,10815,10816],{},"​\t",[358,10817,10818],{},"代码区：",[10,10820,10821],{},"​\t\t存放 CPU 执行的机器指令",[10,10823,10824,10825,10828],{},"​\t\t代码区是",[358,10826,10827],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[10,10830,10824,10831,10834],{},[358,10832,10833],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[10,10836,10815,10837],{},[358,10838,10839],{},"全局区：",[10,10841,10842],{},"​\t\t全局变量和静态变量存放在此.",[10,10844,10845],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[10,10847,10848],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[35,10850,10852],{"className":197,"code":10851,"language":199,"meta":40,"style":40},"\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",[42,10853,10854,10859,10872,10885,10889,10894,10909,10924,10928,10937,10941,10946,10959,10972,10976,10981,11007,11033,11037,11064,11090,11094,11099,11115,11130,11134,11160,11186,11190,11215,11240,11244,11270,11296,11300,11316,11331,11357,11383,11387,11397,11401,11409],{"__ignoreMap":40},[45,10855,10856],{"class":47,"line":48},[45,10857,10858],{"class":267},"\u002F\u002F全局变量\n",[45,10860,10861,10863,10866,10868,10870],{"class":47,"line":125},[45,10862,212],{"class":93},[45,10864,10865],{"class":51}," g_a ",[45,10867,254],{"class":93},[45,10869,2121],{"class":257},[45,10871,1373],{"class":51},[45,10873,10874,10876,10879,10881,10883],{"class":47,"line":1262},[45,10875,212],{"class":93},[45,10877,10878],{"class":51}," g_b ",[45,10880,254],{"class":93},[45,10882,2121],{"class":257},[45,10884,1373],{"class":51},[45,10886,10887],{"class":47,"line":1277},[45,10888,2483],{"emptyLinePlaceholder":133},[45,10890,10891],{"class":47,"line":1283},[45,10892,10893],{"class":267},"\u002F\u002F全局常量\n",[45,10895,10896,10898,10900,10903,10905,10907],{"class":47,"line":1297},[45,10897,6875],{"class":93},[45,10899,2465],{"class":93},[45,10901,10902],{"class":51}," c_g_a ",[45,10904,254],{"class":93},[45,10906,2121],{"class":257},[45,10908,1373],{"class":51},[45,10910,10911,10913,10915,10918,10920,10922],{"class":47,"line":1303},[45,10912,6875],{"class":93},[45,10914,2465],{"class":93},[45,10916,10917],{"class":51}," c_g_b ",[45,10919,254],{"class":93},[45,10921,2121],{"class":257},[45,10923,1373],{"class":51},[45,10925,10926],{"class":47,"line":1394},[45,10927,2483],{"emptyLinePlaceholder":133},[45,10929,10930,10932,10934],{"class":47,"line":1400},[45,10931,212],{"class":93},[45,10933,2056],{"class":2046},[45,10935,10936],{"class":51},"() {\n",[45,10938,10939],{"class":47,"line":1412},[45,10940,2483],{"emptyLinePlaceholder":133},[45,10942,10943],{"class":47,"line":1695},[45,10944,10945],{"class":267},"    \u002F\u002F局部变量\n",[45,10947,10948,10950,10953,10955,10957],{"class":47,"line":1700},[45,10949,2068],{"class":93},[45,10951,10952],{"class":51}," a ",[45,10954,254],{"class":93},[45,10956,2121],{"class":257},[45,10958,1373],{"class":51},[45,10960,10961,10963,10966,10968,10970],{"class":47,"line":1706},[45,10962,2068],{"class":93},[45,10964,10965],{"class":51}," b ",[45,10967,254],{"class":93},[45,10969,2121],{"class":257},[45,10971,1373],{"class":51},[45,10973,10974],{"class":47,"line":1711},[45,10975,2483],{"emptyLinePlaceholder":133},[45,10977,10978],{"class":47,"line":1725},[45,10979,10980],{"class":267},"    \u002F\u002F打印地址\n",[45,10982,10983,10985,10987,10990,10992,10994,10996,10998,11000,11003,11005],{"class":47,"line":1730},[45,10984,6612],{"class":51},[45,10986,1251],{"class":93},[45,10988,10989],{"class":313}," \"局部变量a地址为： \"",[45,10991,1527],{"class":93},[45,10993,1741],{"class":51},[45,10995,212],{"class":93},[45,10997,637],{"class":51},[45,10999,561],{"class":93},[45,11001,11002],{"class":51},"a ",[45,11004,1251],{"class":93},[45,11006,8923],{"class":51},[45,11008,11009,11011,11013,11016,11018,11020,11022,11024,11026,11029,11031],{"class":47,"line":1736},[45,11010,6612],{"class":51},[45,11012,1251],{"class":93},[45,11014,11015],{"class":313}," \"局部变量b地址为： \"",[45,11017,1527],{"class":93},[45,11019,1741],{"class":51},[45,11021,212],{"class":93},[45,11023,637],{"class":51},[45,11025,561],{"class":93},[45,11027,11028],{"class":51},"b ",[45,11030,1251],{"class":93},[45,11032,8923],{"class":51},[45,11034,11035],{"class":47,"line":1757},[45,11036,2483],{"emptyLinePlaceholder":133},[45,11038,11039,11041,11043,11046,11048,11051,11053,11055,11057,11060,11062],{"class":47,"line":1762},[45,11040,6612],{"class":51},[45,11042,1251],{"class":93},[45,11044,11045],{"class":313}," \"全局变量g_a地址为： \"",[45,11047,1527],{"class":93},[45,11049,11050],{"class":51},"  (",[45,11052,212],{"class":93},[45,11054,637],{"class":51},[45,11056,561],{"class":93},[45,11058,11059],{"class":51},"g_a ",[45,11061,1251],{"class":93},[45,11063,8923],{"class":51},[45,11065,11066,11068,11070,11073,11075,11077,11079,11081,11083,11086,11088],{"class":47,"line":1776},[45,11067,6612],{"class":51},[45,11069,1251],{"class":93},[45,11071,11072],{"class":313}," \"全局变量g_b地址为： \"",[45,11074,1527],{"class":93},[45,11076,11050],{"class":51},[45,11078,212],{"class":93},[45,11080,637],{"class":51},[45,11082,561],{"class":93},[45,11084,11085],{"class":51},"g_b ",[45,11087,1251],{"class":93},[45,11089,8923],{"class":51},[45,11091,11092],{"class":47,"line":1781},[45,11093,2483],{"emptyLinePlaceholder":133},[45,11095,11096],{"class":47,"line":1810},[45,11097,11098],{"class":267},"    \u002F\u002F静态变量\n",[45,11100,11101,11104,11106,11109,11111,11113],{"class":47,"line":1815},[45,11102,11103],{"class":93},"    static",[45,11105,2465],{"class":93},[45,11107,11108],{"class":51}," s_a ",[45,11110,254],{"class":93},[45,11112,2121],{"class":257},[45,11114,1373],{"class":51},[45,11116,11117,11119,11121,11124,11126,11128],{"class":47,"line":1832},[45,11118,11103],{"class":93},[45,11120,2465],{"class":93},[45,11122,11123],{"class":51}," s_b ",[45,11125,254],{"class":93},[45,11127,2121],{"class":257},[45,11129,1373],{"class":51},[45,11131,11132],{"class":47,"line":1837},[45,11133,2483],{"emptyLinePlaceholder":133},[45,11135,11136,11138,11140,11143,11145,11147,11149,11151,11153,11156,11158],{"class":47,"line":1842},[45,11137,6612],{"class":51},[45,11139,1251],{"class":93},[45,11141,11142],{"class":313}," \"静态变量s_a地址为： \"",[45,11144,1527],{"class":93},[45,11146,1741],{"class":51},[45,11148,212],{"class":93},[45,11150,637],{"class":51},[45,11152,561],{"class":93},[45,11154,11155],{"class":51},"s_a ",[45,11157,1251],{"class":93},[45,11159,8923],{"class":51},[45,11161,11162,11164,11166,11169,11171,11173,11175,11177,11179,11182,11184],{"class":47,"line":1847},[45,11163,6612],{"class":51},[45,11165,1251],{"class":93},[45,11167,11168],{"class":313}," \"静态变量s_b地址为： \"",[45,11170,1527],{"class":93},[45,11172,1741],{"class":51},[45,11174,212],{"class":93},[45,11176,637],{"class":51},[45,11178,561],{"class":93},[45,11180,11181],{"class":51},"s_b ",[45,11183,1251],{"class":93},[45,11185,8923],{"class":51},[45,11187,11188],{"class":47,"line":1861},[45,11189,2483],{"emptyLinePlaceholder":133},[45,11191,11192,11194,11196,11199,11201,11203,11205,11207,11209,11211,11213],{"class":47,"line":1866},[45,11193,6612],{"class":51},[45,11195,1251],{"class":93},[45,11197,11198],{"class":313}," \"字符串常量地址为： \"",[45,11200,1527],{"class":93},[45,11202,1741],{"class":51},[45,11204,212],{"class":93},[45,11206,637],{"class":51},[45,11208,561],{"class":93},[45,11210,1269],{"class":313},[45,11212,1527],{"class":93},[45,11214,8923],{"class":51},[45,11216,11217,11219,11221,11223,11225,11227,11229,11231,11233,11236,11238],{"class":47,"line":2660},[45,11218,6612],{"class":51},[45,11220,1251],{"class":93},[45,11222,11198],{"class":313},[45,11224,1527],{"class":93},[45,11226,1741],{"class":51},[45,11228,212],{"class":93},[45,11230,637],{"class":51},[45,11232,561],{"class":93},[45,11234,11235],{"class":313},"\"hello world1\"",[45,11237,1527],{"class":93},[45,11239,8923],{"class":51},[45,11241,11242],{"class":47,"line":2674},[45,11243,2483],{"emptyLinePlaceholder":133},[45,11245,11246,11248,11250,11253,11255,11257,11259,11261,11263,11266,11268],{"class":47,"line":2682},[45,11247,6612],{"class":51},[45,11249,1251],{"class":93},[45,11251,11252],{"class":313}," \"全局常量c_g_a地址为： \"",[45,11254,1527],{"class":93},[45,11256,1741],{"class":51},[45,11258,212],{"class":93},[45,11260,637],{"class":51},[45,11262,561],{"class":93},[45,11264,11265],{"class":51},"c_g_a ",[45,11267,1251],{"class":93},[45,11269,8923],{"class":51},[45,11271,11272,11274,11276,11279,11281,11283,11285,11287,11289,11292,11294],{"class":47,"line":2687},[45,11273,6612],{"class":51},[45,11275,1251],{"class":93},[45,11277,11278],{"class":313}," \"全局常量c_g_b地址为： \"",[45,11280,1527],{"class":93},[45,11282,1741],{"class":51},[45,11284,212],{"class":93},[45,11286,637],{"class":51},[45,11288,561],{"class":93},[45,11290,11291],{"class":51},"c_g_b ",[45,11293,1251],{"class":93},[45,11295,8923],{"class":51},[45,11297,11298],{"class":47,"line":2693},[45,11299,2483],{"emptyLinePlaceholder":133},[45,11301,11302,11305,11307,11310,11312,11314],{"class":47,"line":2699},[45,11303,11304],{"class":93},"    const",[45,11306,2465],{"class":93},[45,11308,11309],{"class":51}," c_l_a ",[45,11311,254],{"class":93},[45,11313,2121],{"class":257},[45,11315,1373],{"class":51},[45,11317,11318,11320,11322,11325,11327,11329],{"class":47,"line":2704},[45,11319,11304],{"class":93},[45,11321,2465],{"class":93},[45,11323,11324],{"class":51}," c_l_b ",[45,11326,254],{"class":93},[45,11328,2121],{"class":257},[45,11330,1373],{"class":51},[45,11332,11333,11335,11337,11340,11342,11344,11346,11348,11350,11353,11355],{"class":47,"line":8031},[45,11334,6612],{"class":51},[45,11336,1251],{"class":93},[45,11338,11339],{"class":313}," \"局部常量c_l_a地址为： \"",[45,11341,1527],{"class":93},[45,11343,1741],{"class":51},[45,11345,212],{"class":93},[45,11347,637],{"class":51},[45,11349,561],{"class":93},[45,11351,11352],{"class":51},"c_l_a ",[45,11354,1251],{"class":93},[45,11356,8923],{"class":51},[45,11358,11359,11361,11363,11366,11368,11370,11372,11374,11376,11379,11381],{"class":47,"line":8055},[45,11360,6612],{"class":51},[45,11362,1251],{"class":93},[45,11364,11365],{"class":313}," \"局部常量c_l_b地址为： \"",[45,11367,1527],{"class":93},[45,11369,1741],{"class":51},[45,11371,212],{"class":93},[45,11373,637],{"class":51},[45,11375,561],{"class":93},[45,11377,11378],{"class":51},"c_l_b ",[45,11380,1251],{"class":93},[45,11382,8923],{"class":51},[45,11384,11385],{"class":47,"line":8060},[45,11386,2483],{"emptyLinePlaceholder":133},[45,11388,11389,11391,11393,11395],{"class":47,"line":8066},[45,11390,2386],{"class":2046},[45,11392,209],{"class":51},[45,11394,2391],{"class":313},[45,11396,2802],{"class":51},[45,11398,11399],{"class":47,"line":8093},[45,11400,2483],{"emptyLinePlaceholder":133},[45,11402,11403,11405,11407],{"class":47,"line":8098},[45,11404,4173],{"class":93},[45,11406,4176],{"class":257},[45,11408,1373],{"class":51},[45,11410,11411],{"class":47,"line":8104},[45,11412,1648],{"class":51},[10,11414,11415],{},"总结：",[1214,11417,11418,11421,11424,11427],{},[162,11419,11420],{},"c++中程序运行前分为全局区和代码区",[162,11422,11423],{},"代码区特点是共享和只读",[162,11425,11426],{},"全局区中存放全局变量、静态变量、常量",[162,11428,11429],{},"常量区中存放const修饰的全局常量和字符串常量",[176,11431,11433],{"id":11432},"_512程序运行后","5.1.2程序运行后",[159,11435,11436],{},[162,11437,11438],{},"栈区：",[1214,11440,11441,11448],{},[162,11442,11443,11444,11447],{},"由编译器自动分配释放, 存放",[358,11445,11446],{},"函数的参数值,局部变量","等",[162,11449,11450,11451,11454],{},"注意事项：",[358,11452,11453],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[35,11456,11458],{"className":197,"code":11457,"language":199,"meta":40,"style":40},"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",[42,11459,11460,11471,11475,11490,11502,11506,11510,11518,11523,11538,11556,11573,11583,11591],{"__ignoreMap":40},[45,11461,11462,11464,11466,11469],{"class":47,"line":48},[45,11463,212],{"class":93},[45,11465,6601],{"class":93},[45,11467,11468],{"class":2046}," func",[45,11470,2059],{"class":51},[45,11472,11473],{"class":47,"line":125},[45,11474,1629],{"class":51},[45,11476,11477,11479,11481,11483,11485,11487],{"class":47,"line":1262},[45,11478,2068],{"class":93},[45,11480,10952],{"class":51},[45,11482,254],{"class":93},[45,11484,2121],{"class":257},[45,11486,264],{"class":51},[45,11488,11489],{"class":267}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[45,11491,11492,11494,11496,11499],{"class":47,"line":1277},[45,11493,4173],{"class":93},[45,11495,10667],{"class":93},[45,11497,11498],{"class":51},"a;",[45,11500,11501],{"class":267}," \u002F\u002F放回局部变量的地址\n",[45,11503,11504],{"class":47,"line":1283},[45,11505,1648],{"class":51},[45,11507,11508],{"class":47,"line":1297},[45,11509,2483],{"emptyLinePlaceholder":133},[45,11511,11512,11514,11516],{"class":47,"line":1303},[45,11513,212],{"class":93},[45,11515,2056],{"class":2046},[45,11517,10936],{"class":51},[45,11519,11520],{"class":47,"line":1394},[45,11521,11522],{"class":267},"    \u002F\u002F接受func的返回值\n",[45,11524,11525,11527,11529,11532,11534,11536],{"class":47,"line":1400},[45,11526,2068],{"class":93},[45,11528,6601],{"class":93},[45,11530,11531],{"class":51},"p ",[45,11533,254],{"class":93},[45,11535,11468],{"class":2046},[45,11537,5719],{"class":51},[45,11539,11540,11542,11544,11546,11548,11550,11553],{"class":47,"line":1412},[45,11541,6612],{"class":51},[45,11543,1251],{"class":93},[45,11545,6601],{"class":93},[45,11547,11531],{"class":51},[45,11549,1251],{"class":93},[45,11551,11552],{"class":51}," endl;",[45,11554,11555],{"class":267}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[45,11557,11558,11560,11562,11564,11566,11568,11570],{"class":47,"line":1695},[45,11559,6612],{"class":51},[45,11561,1251],{"class":93},[45,11563,6601],{"class":93},[45,11565,11531],{"class":51},[45,11567,1251],{"class":93},[45,11569,11552],{"class":51},[45,11571,11572],{"class":267}," \u002F\u002F第二次这个数据不再保留\n",[45,11574,11575,11577,11579,11581],{"class":47,"line":1700},[45,11576,2386],{"class":2046},[45,11578,209],{"class":51},[45,11580,2391],{"class":313},[45,11582,2802],{"class":51},[45,11584,11585,11587,11589],{"class":47,"line":1706},[45,11586,4173],{"class":93},[45,11588,4176],{"class":257},[45,11590,1373],{"class":51},[45,11592,11593],{"class":47,"line":1711},[45,11594,1648],{"class":51},[10,11596,11597],{},"输出结果：",[10,11599,11600],{},[1545,11601],{"alt":11602,"src":11603},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[10,11605,11606],{},"总结：不要返回局部变量的地址",[159,11608,11609],{"start":125},[162,11610,11611],{},"堆区",[1214,11613,11614,11617],{},[162,11615,11616],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[162,11618,11619],{},"在c++中主要利用new在堆区开辟内存",[35,11621,11623],{"className":197,"code":11622,"language":199,"meta":40,"style":40},"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",[42,11624,11625,11640,11644,11649,11670,11677,11681,11689,11693,11698,11712,11724],{"__ignoreMap":40},[45,11626,11627,11629,11632,11635,11637],{"class":47,"line":48},[45,11628,212],{"class":93},[45,11630,11631],{"class":93},"  *",[45,11633,11634],{"class":2046},"func",[45,11636,2510],{"class":51},[45,11638,11639],{"class":267},"  \u002F\u002F函数返回指针\n",[45,11641,11642],{"class":47,"line":125},[45,11643,1629],{"class":51},[45,11645,11646],{"class":47,"line":1262},[45,11647,11648],{"class":267},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[45,11650,11651,11653,11655,11657,11659,11662,11664,11666,11668],{"class":47,"line":1277},[45,11652,4230],{"class":93},[45,11654,6601],{"class":93},[45,11656,10],{"class":51},[45,11658,254],{"class":93},[45,11660,11661],{"class":93}," new",[45,11663,2465],{"class":93},[45,11665,209],{"class":51},[45,11667,654],{"class":257},[45,11669,2802],{"class":51},[45,11671,11672,11674],{"class":47,"line":1283},[45,11673,4464],{"class":93},[45,11675,11676],{"class":51}," p;\n",[45,11678,11679],{"class":47,"line":1297},[45,11680,1648],{"class":51},[45,11682,11683,11685,11687],{"class":47,"line":1303},[45,11684,212],{"class":93},[45,11686,2056],{"class":2046},[45,11688,2059],{"class":51},[45,11690,11691],{"class":47,"line":1394},[45,11692,1629],{"class":51},[45,11694,11695],{"class":47,"line":1400},[45,11696,11697],{"class":267},"    \u002F\u002F在堆区开辟数据\n",[45,11699,11700,11702,11704,11706,11708,11710],{"class":47,"line":1412},[45,11701,2068],{"class":93},[45,11703,6601],{"class":93},[45,11705,10],{"class":51},[45,11707,254],{"class":93},[45,11709,11634],{"class":2046},[45,11711,5719],{"class":51},[45,11713,11714,11716,11718,11720,11722],{"class":47,"line":1695},[45,11715,1634],{"class":51},[45,11717,6502],{"class":93},[45,11719,10],{"class":51},[45,11721,1251],{"class":93},[45,11723,1274],{"class":51},[45,11725,11726],{"class":47,"line":1700},[45,11727,1648],{"class":51},[10,11729,11730],{},"图片展示：",[10,11732,11733],{},[1545,11734],{"alt":11602,"src":11735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[10,11737,11738],{},"堆区内存由程序员管生死！！！",[159,11740,11741],{"start":1262},[162,11742,11743],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[10,11745,11746],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[10,11748,11749,11750],{},"​语法：",[42,11751,11752],{}," new 数据类型",[10,11754,11755],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[35,11757,11759],{"className":197,"code":11758,"language":199,"meta":40,"style":40},"\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",[42,11760,11761,11766,11776,11780,11785,11790,11812,11816,11824,11828,11842,11854,11866,11878,11883,11888,11899,11903,11908,11916,11920,11925,11947,11973,11977,11995,11999,12025,12029,12041,12045,12050,12055,12063,12067,12071,12079,12083,12089,12095],{"__ignoreMap":40},[45,11762,11763],{"class":47,"line":48},[45,11764,11765],{"class":267},"\u002F\u002F1.new的基本语法\n",[45,11767,11768,11770,11772,11774],{"class":47,"line":125},[45,11769,212],{"class":93},[45,11771,6601],{"class":93},[45,11773,11634],{"class":2046},[45,11775,2059],{"class":51},[45,11777,11778],{"class":47,"line":1262},[45,11779,1629],{"class":51},[45,11781,11782],{"class":47,"line":1277},[45,11783,11784],{"class":267},"    \u002F\u002F在堆区创建整型数据\n",[45,11786,11787],{"class":47,"line":1283},[45,11788,11789],{"class":267},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[45,11791,11792,11794,11796,11798,11801,11803,11805,11807,11809],{"class":47,"line":1297},[45,11793,2068],{"class":93},[45,11795,6601],{"class":93},[45,11797,10],{"class":51},[45,11799,11800],{"class":93},"=new",[45,11802,2465],{"class":93},[45,11804,209],{"class":51},[45,11806,654],{"class":257},[45,11808,6049],{"class":51},[45,11810,11811],{"class":267},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[45,11813,11814],{"class":47,"line":1303},[45,11815,1648],{"class":51},[45,11817,11818,11820,11822],{"class":47,"line":1394},[45,11819,5447],{"class":93},[45,11821,5671],{"class":2046},[45,11823,2059],{"class":51},[45,11825,11826],{"class":47,"line":1400},[45,11827,1629],{"class":51},[45,11829,11830,11832,11834,11836,11838,11840],{"class":47,"line":1412},[45,11831,2068],{"class":93},[45,11833,6601],{"class":93},[45,11835,10],{"class":51},[45,11837,254],{"class":93},[45,11839,11634],{"class":2046},[45,11841,5719],{"class":51},[45,11843,11844,11846,11848,11850,11852],{"class":47,"line":1695},[45,11845,1634],{"class":51},[45,11847,6502],{"class":93},[45,11849,10],{"class":51},[45,11851,1251],{"class":93},[45,11853,1274],{"class":51},[45,11855,11856,11858,11860,11862,11864],{"class":47,"line":1700},[45,11857,1634],{"class":51},[45,11859,6502],{"class":93},[45,11861,10],{"class":51},[45,11863,1251],{"class":93},[45,11865,1274],{"class":51},[45,11867,11868,11870,11872,11874,11876],{"class":47,"line":1706},[45,11869,1634],{"class":51},[45,11871,6502],{"class":93},[45,11873,10],{"class":51},[45,11875,1251],{"class":93},[45,11877,1274],{"class":51},[45,11879,11880],{"class":47,"line":1711},[45,11881,11882],{"class":267},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[45,11884,11885],{"class":47,"line":1725},[45,11886,11887],{"class":267},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[45,11889,11890,11893,11896],{"class":47,"line":1730},[45,11891,11892],{"class":93},"    delete",[45,11894,11895],{"class":51}," p;",[45,11897,11898],{"class":267},"\u002F\u002F删除这块地址\n",[45,11900,11901],{"class":47,"line":1736},[45,11902,1648],{"class":51},[45,11904,11905],{"class":47,"line":1757},[45,11906,11907],{"class":267},"\u002F\u002F2.在堆区利用new开辟数组\n",[45,11909,11910,11912,11914],{"class":47,"line":1762},[45,11911,5447],{"class":93},[45,11913,5740],{"class":2046},[45,11915,2059],{"class":51},[45,11917,11918],{"class":47,"line":1776},[45,11919,1629],{"class":51},[45,11921,11922],{"class":47,"line":1781},[45,11923,11924],{"class":267},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[45,11926,11927,11929,11931,11933,11935,11937,11939,11941,11944],{"class":47,"line":1810},[45,11928,2068],{"class":93},[45,11930,6601],{"class":93},[45,11932,3963],{"class":51},[45,11934,11800],{"class":93},[45,11936,2465],{"class":93},[45,11938,1097],{"class":51},[45,11940,654],{"class":257},[45,11942,11943],{"class":51},"];",[45,11945,11946],{"class":267},"\u002F\u002F10代表数组有10个元素\n",[45,11948,11949,11951,11953,11955,11957,11959,11961,11963,11965,11967,11969,11971],{"class":47,"line":1815},[45,11950,3284],{"class":93},[45,11952,1741],{"class":51},[45,11954,212],{"class":93},[45,11956,3115],{"class":51},[45,11958,254],{"class":93},[45,11960,400],{"class":257},[45,11962,3122],{"class":51},[45,11964,1117],{"class":93},[45,11966,654],{"class":257},[45,11968,3122],{"class":51},[45,11970,2375],{"class":93},[45,11972,215],{"class":51},[45,11974,11975],{"class":47,"line":1832},[45,11976,2113],{"class":51},[45,11978,11979,11982,11984,11986,11988,11990,11992],{"class":47,"line":1837},[45,11980,11981],{"class":51},"        arr[i]",[45,11983,254],{"class":93},[45,11985,649],{"class":51},[45,11987,689],{"class":93},[45,11989,519],{"class":257},[45,11991,264],{"class":51},[45,11993,11994],{"class":267},"\u002F\u002F给10个元素赋值100～109\n",[45,11996,11997],{"class":47,"line":1842},[45,11998,2270],{"class":51},[45,12000,12001,12003,12005,12007,12009,12011,12013,12015,12017,12019,12021,12023],{"class":47,"line":1847},[45,12002,3284],{"class":93},[45,12004,1741],{"class":51},[45,12006,212],{"class":93},[45,12008,3115],{"class":51},[45,12010,254],{"class":93},[45,12012,400],{"class":257},[45,12014,3122],{"class":51},[45,12016,1117],{"class":93},[45,12018,654],{"class":257},[45,12020,3122],{"class":51},[45,12022,2375],{"class":93},[45,12024,215],{"class":51},[45,12026,12027],{"class":47,"line":1861},[45,12028,2113],{"class":51},[45,12030,12031,12033,12035,12037,12039],{"class":47,"line":1866},[45,12032,3534],{"class":51},[45,12034,1251],{"class":93},[45,12036,4437],{"class":51},[45,12038,1251],{"class":93},[45,12040,1274],{"class":51},[45,12042,12043],{"class":47,"line":2660},[45,12044,2270],{"class":51},[45,12046,12047],{"class":47,"line":2674},[45,12048,12049],{"class":267},"    \u002F\u002F释放堆区数组\n",[45,12051,12052],{"class":47,"line":2682},[45,12053,12054],{"class":267},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[45,12056,12057,12060],{"class":47,"line":2687},[45,12058,12059],{"class":93},"    delete[]",[45,12061,12062],{"class":51}," arr;\n",[45,12064,12065],{"class":47,"line":2693},[45,12066,1648],{"class":51},[45,12068,12069],{"class":47,"line":2699},[45,12070,2483],{"emptyLinePlaceholder":133},[45,12072,12073,12075,12077],{"class":47,"line":2704},[45,12074,212],{"class":93},[45,12076,2056],{"class":2046},[45,12078,2059],{"class":51},[45,12080,12081],{"class":47,"line":8031},[45,12082,1629],{"class":51},[45,12084,12085,12087],{"class":47,"line":8055},[45,12086,5716],{"class":2046},[45,12088,5719],{"class":51},[45,12090,12091,12093],{"class":47,"line":8060},[45,12092,5785],{"class":2046},[45,12094,5719],{"class":51},[45,12096,12097],{"class":47,"line":8066},[45,12098,1648],{"class":51},[121,12100,12101],{},"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":40,"searchDepth":125,"depth":125,"links":12103},[12104],{"id":10772,"depth":125,"text":10773,"children":12105},[12106,12107],{"id":10804,"depth":1262,"text":10805},{"id":11432,"depth":1262,"text":11433},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10764,"description":40},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12114,"title":12115,"body":12116,"description":40,"extension":131,"meta":13597,"navigation":133,"path":13598,"seo":13599,"stem":13600,"__hash__":13601},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12117,"toc":13589},[12118,12121,12125,12128,12131,12300,12304,12309,12326,12331,12483,12487,12490,12493,12887,12891,12894,12899,12902,13214,13218,13224,13384,13386,13394,13398,13401,13408,13586],[20,12119,12115],{"id":12120},"_6引用",[30,12122,12124],{"id":12123},"_61引用基本用法","6.1引用基本用法",[10,12126,12127],{},"引用的本质：给变量起别名",[10,12129,12130],{},"语法：数据类型 &别名=原名",[35,12132,12134],{"className":197,"code":12133,"language":199,"meta":40,"style":40},"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",[42,12135,12136,12144,12148,12160,12172,12176,12195,12214,12218,12229,12233,12252,12270,12274,12284,12288,12296],{"__ignoreMap":40},[45,12137,12138,12140,12142],{"class":47,"line":48},[45,12139,212],{"class":93},[45,12141,2056],{"class":2046},[45,12143,10936],{"class":51},[45,12145,12146],{"class":47,"line":125},[45,12147,2483],{"emptyLinePlaceholder":133},[45,12149,12150,12152,12154,12156,12158],{"class":47,"line":1262},[45,12151,2068],{"class":93},[45,12153,10952],{"class":51},[45,12155,254],{"class":93},[45,12157,2121],{"class":257},[45,12159,1373],{"class":51},[45,12161,12162,12164,12166,12168,12170],{"class":47,"line":1277},[45,12163,2068],{"class":93},[45,12165,10667],{"class":93},[45,12167,11028],{"class":51},[45,12169,254],{"class":93},[45,12171,1515],{"class":51},[45,12173,12174],{"class":47,"line":1283},[45,12175,2483],{"emptyLinePlaceholder":133},[45,12177,12178,12180,12182,12185,12187,12189,12191,12193],{"class":47,"line":1297},[45,12179,6612],{"class":51},[45,12181,1251],{"class":93},[45,12183,12184],{"class":313}," \"a = \"",[45,12186,1527],{"class":93},[45,12188,10952],{"class":51},[45,12190,1251],{"class":93},[45,12192,11552],{"class":51},[45,12194,7351],{"class":267},[45,12196,12197,12199,12201,12204,12206,12208,12210,12212],{"class":47,"line":1303},[45,12198,6612],{"class":51},[45,12200,1251],{"class":93},[45,12202,12203],{"class":313}," \"b = \"",[45,12205,1527],{"class":93},[45,12207,10965],{"class":51},[45,12209,1251],{"class":93},[45,12211,11552],{"class":51},[45,12213,7351],{"class":267},[45,12215,12216],{"class":47,"line":1394},[45,12217,2483],{"emptyLinePlaceholder":133},[45,12219,12220,12223,12225,12227],{"class":47,"line":1400},[45,12221,12222],{"class":51},"    b ",[45,12224,254],{"class":93},[45,12226,5837],{"class":257},[45,12228,1373],{"class":51},[45,12230,12231],{"class":47,"line":1412},[45,12232,2483],{"emptyLinePlaceholder":133},[45,12234,12235,12237,12239,12241,12243,12245,12247,12249],{"class":47,"line":1695},[45,12236,6612],{"class":51},[45,12238,1251],{"class":93},[45,12240,12184],{"class":313},[45,12242,1527],{"class":93},[45,12244,10952],{"class":51},[45,12246,1251],{"class":93},[45,12248,11552],{"class":51},[45,12250,12251],{"class":267},"\u002F\u002F100\n",[45,12253,12254,12256,12258,12260,12262,12264,12266,12268],{"class":47,"line":1700},[45,12255,6612],{"class":51},[45,12257,1251],{"class":93},[45,12259,12203],{"class":313},[45,12261,1527],{"class":93},[45,12263,10965],{"class":51},[45,12265,1251],{"class":93},[45,12267,11552],{"class":51},[45,12269,12251],{"class":267},[45,12271,12272],{"class":47,"line":1706},[45,12273,2483],{"emptyLinePlaceholder":133},[45,12275,12276,12278,12280,12282],{"class":47,"line":1711},[45,12277,2386],{"class":2046},[45,12279,209],{"class":51},[45,12281,2391],{"class":313},[45,12283,2802],{"class":51},[45,12285,12286],{"class":47,"line":1725},[45,12287,2483],{"emptyLinePlaceholder":133},[45,12289,12290,12292,12294],{"class":47,"line":1730},[45,12291,4173],{"class":93},[45,12293,4176],{"class":257},[45,12295,1373],{"class":51},[45,12297,12298],{"class":47,"line":1736},[45,12299,1648],{"class":51},[30,12301,12303],{"id":12302},"_62引用的注意事项","6.2引用的注意事项",[159,12305,12306],{},[162,12307,12308],{},"引用必须要初始化",[35,12310,12312],{"className":197,"code":12311,"language":199,"meta":40,"style":40},"int &b;\u002F\u002F非常错误！\n",[42,12313,12314],{"__ignoreMap":40},[45,12315,12316,12318,12320,12323],{"class":47,"line":48},[45,12317,212],{"class":93},[45,12319,10667],{"class":93},[45,12321,12322],{"class":51},"b;",[45,12324,12325],{"class":267},"\u002F\u002F非常错误！\n",[159,12327,12328],{"start":125},[162,12329,12330],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[35,12332,12334],{"className":197,"code":12333,"language":199,"meta":40,"style":40},"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",[42,12335,12336,12344,12356,12368,12376,12392,12405,12423,12441,12461,12471,12479],{"__ignoreMap":40},[45,12337,12338,12340,12342],{"class":47,"line":48},[45,12339,212],{"class":93},[45,12341,2056],{"class":2046},[45,12343,10936],{"class":51},[45,12345,12346,12348,12350,12352,12354],{"class":47,"line":125},[45,12347,2068],{"class":93},[45,12349,10952],{"class":51},[45,12351,254],{"class":93},[45,12353,2121],{"class":257},[45,12355,1373],{"class":51},[45,12357,12358,12360,12362,12364,12366],{"class":47,"line":1262},[45,12359,2068],{"class":93},[45,12361,10965],{"class":51},[45,12363,254],{"class":93},[45,12365,9033],{"class":257},[45,12367,1373],{"class":51},[45,12369,12370,12373],{"class":47,"line":1277},[45,12371,12372],{"class":267},"    \u002F\u002Fint &c;",[45,12374,12375],{"class":267}," \u002F\u002F错误，引用必须初始化\n",[45,12377,12378,12380,12382,12384,12386,12389],{"class":47,"line":1283},[45,12379,2068],{"class":93},[45,12381,10667],{"class":93},[45,12383,3029],{"class":51},[45,12385,254],{"class":93},[45,12387,12388],{"class":51}," a;",[45,12390,12391],{"class":267}," \u002F\u002F一旦初始化后，就不可以更改\n",[45,12393,12394,12397,12399,12402],{"class":47,"line":1297},[45,12395,12396],{"class":51},"    c ",[45,12398,254],{"class":93},[45,12400,12401],{"class":51}," b;",[45,12403,12404],{"class":267}," \u002F\u002F这是赋值操作，不是更改引用\n",[45,12406,12407,12409,12411,12413,12415,12417,12419,12421],{"class":47,"line":1303},[45,12408,6612],{"class":51},[45,12410,1251],{"class":93},[45,12412,12184],{"class":313},[45,12414,1527],{"class":93},[45,12416,10952],{"class":51},[45,12418,1251],{"class":93},[45,12420,11552],{"class":51},[45,12422,7336],{"class":267},[45,12424,12425,12427,12429,12431,12433,12435,12437,12439],{"class":47,"line":1394},[45,12426,6612],{"class":51},[45,12428,1251],{"class":93},[45,12430,12203],{"class":313},[45,12432,1527],{"class":93},[45,12434,10965],{"class":51},[45,12436,1251],{"class":93},[45,12438,11552],{"class":51},[45,12440,7336],{"class":267},[45,12442,12443,12445,12447,12450,12452,12455,12457,12459],{"class":47,"line":1400},[45,12444,6612],{"class":51},[45,12446,1251],{"class":93},[45,12448,12449],{"class":313}," \"c = \"",[45,12451,1527],{"class":93},[45,12453,12454],{"class":51}," c ",[45,12456,1251],{"class":93},[45,12458,11552],{"class":51},[45,12460,7336],{"class":267},[45,12462,12463,12465,12467,12469],{"class":47,"line":1412},[45,12464,2386],{"class":2046},[45,12466,209],{"class":51},[45,12468,2391],{"class":313},[45,12470,2802],{"class":51},[45,12472,12473,12475,12477],{"class":47,"line":1695},[45,12474,4173],{"class":93},[45,12476,4176],{"class":257},[45,12478,1373],{"class":51},[45,12480,12481],{"class":47,"line":1700},[45,12482,1648],{"class":51},[30,12484,12486],{"id":12485},"_63引用做函数参数","6.3引用做函数参数",[10,12488,12489],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[10,12491,12492],{},"优点：可以简化指针修改实参",[35,12494,12496],{"className":197,"code":12495,"language":199,"meta":40,"style":40},"\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",[42,12497,12498,12503,12526,12537,12547,12556,12560,12564,12569,12591,12603,12615,12625,12629,12633,12638,12660,12670,12678,12686,12690,12694,12702,12706,12718,12730,12734,12745,12771,12775,12795,12819,12823,12833,12857,12861,12871,12875,12883],{"__ignoreMap":40},[45,12499,12500],{"class":47,"line":48},[45,12501,12502],{"class":267},"\u002F\u002F1. 值传递\n",[45,12504,12505,12507,12510,12512,12514,12516,12519,12521,12523],{"class":47,"line":125},[45,12506,5447],{"class":93},[45,12508,12509],{"class":2046}," mySwap01",[45,12511,209],{"class":51},[45,12513,212],{"class":93},[45,12515,1481],{"class":5299},[45,12517,12518],{"class":51},", ",[45,12520,212],{"class":93},[45,12522,2916],{"class":5299},[45,12524,12525],{"class":51},") {\n",[45,12527,12528,12530,12533,12535],{"class":47,"line":1262},[45,12529,2068],{"class":93},[45,12531,12532],{"class":51}," temp ",[45,12534,254],{"class":93},[45,12536,1515],{"class":51},[45,12538,12539,12542,12544],{"class":47,"line":1277},[45,12540,12541],{"class":51},"    a ",[45,12543,254],{"class":93},[45,12545,12546],{"class":51}," b;\n",[45,12548,12549,12551,12553],{"class":47,"line":1283},[45,12550,12222],{"class":51},[45,12552,254],{"class":93},[45,12554,12555],{"class":51}," temp;\n",[45,12557,12558],{"class":47,"line":1297},[45,12559,1648],{"class":51},[45,12561,12562],{"class":47,"line":1303},[45,12563,2483],{"emptyLinePlaceholder":133},[45,12565,12566],{"class":47,"line":1394},[45,12567,12568],{"class":267},"\u002F\u002F2. 地址传递\n",[45,12570,12571,12573,12576,12578,12581,12583,12585,12587,12589],{"class":47,"line":1400},[45,12572,5447],{"class":93},[45,12574,12575],{"class":2046}," mySwap02",[45,12577,209],{"class":51},[45,12579,12580],{"class":93},"int*",[45,12582,1481],{"class":5299},[45,12584,12518],{"class":51},[45,12586,12580],{"class":93},[45,12588,2916],{"class":5299},[45,12590,12525],{"class":51},[45,12592,12593,12595,12597,12599,12601],{"class":47,"line":1412},[45,12594,2068],{"class":93},[45,12596,12532],{"class":51},[45,12598,254],{"class":93},[45,12600,6601],{"class":93},[45,12602,6280],{"class":51},[45,12604,12605,12607,12609,12611,12613],{"class":47,"line":1695},[45,12606,6486],{"class":93},[45,12608,11002],{"class":51},[45,12610,254],{"class":93},[45,12612,6601],{"class":93},[45,12614,6152],{"class":51},[45,12616,12617,12619,12621,12623],{"class":47,"line":1700},[45,12618,6486],{"class":93},[45,12620,11028],{"class":51},[45,12622,254],{"class":93},[45,12624,12555],{"class":51},[45,12626,12627],{"class":47,"line":1706},[45,12628,1648],{"class":51},[45,12630,12631],{"class":47,"line":1711},[45,12632,2483],{"emptyLinePlaceholder":133},[45,12634,12635],{"class":47,"line":1725},[45,12636,12637],{"class":267},"\u002F\u002F3. 引用传递\n",[45,12639,12640,12642,12645,12647,12650,12652,12654,12656,12658],{"class":47,"line":1730},[45,12641,5447],{"class":93},[45,12643,12644],{"class":2046}," mySwap03",[45,12646,209],{"class":51},[45,12648,12649],{"class":93},"int&",[45,12651,1481],{"class":5299},[45,12653,12518],{"class":51},[45,12655,12649],{"class":93},[45,12657,2916],{"class":5299},[45,12659,12525],{"class":51},[45,12661,12662,12664,12666,12668],{"class":47,"line":1736},[45,12663,2068],{"class":93},[45,12665,12532],{"class":51},[45,12667,254],{"class":93},[45,12669,1515],{"class":51},[45,12671,12672,12674,12676],{"class":47,"line":1757},[45,12673,12541],{"class":51},[45,12675,254],{"class":93},[45,12677,12546],{"class":51},[45,12679,12680,12682,12684],{"class":47,"line":1762},[45,12681,12222],{"class":51},[45,12683,254],{"class":93},[45,12685,12555],{"class":51},[45,12687,12688],{"class":47,"line":1776},[45,12689,1648],{"class":51},[45,12691,12692],{"class":47,"line":1781},[45,12693,2483],{"emptyLinePlaceholder":133},[45,12695,12696,12698,12700],{"class":47,"line":1810},[45,12697,212],{"class":93},[45,12699,2056],{"class":2046},[45,12701,10936],{"class":51},[45,12703,12704],{"class":47,"line":1815},[45,12705,2483],{"emptyLinePlaceholder":133},[45,12707,12708,12710,12712,12714,12716],{"class":47,"line":1832},[45,12709,2068],{"class":93},[45,12711,10952],{"class":51},[45,12713,254],{"class":93},[45,12715,2121],{"class":257},[45,12717,1373],{"class":51},[45,12719,12720,12722,12724,12726,12728],{"class":47,"line":1837},[45,12721,2068],{"class":93},[45,12723,10965],{"class":51},[45,12725,254],{"class":93},[45,12727,9033],{"class":257},[45,12729,1373],{"class":51},[45,12731,12732],{"class":47,"line":1842},[45,12733,2483],{"emptyLinePlaceholder":133},[45,12735,12736,12739,12742],{"class":47,"line":1847},[45,12737,12738],{"class":2046},"    mySwap01",[45,12740,12741],{"class":51},"(a, b);",[45,12743,12744],{"class":267},"\u002F\u002F值传递，形参不会修饰实参\n",[45,12746,12747,12749,12751,12754,12756,12758,12760,12763,12765,12767,12769],{"class":47,"line":1861},[45,12748,6612],{"class":51},[45,12750,1251],{"class":93},[45,12752,12753],{"class":313}," \"a:\"",[45,12755,1527],{"class":93},[45,12757,10952],{"class":51},[45,12759,1251],{"class":93},[45,12761,12762],{"class":313}," \" b:\"",[45,12764,1527],{"class":93},[45,12766,10965],{"class":51},[45,12768,1251],{"class":93},[45,12770,8923],{"class":51},[45,12772,12773],{"class":47,"line":1866},[45,12774,2483],{"emptyLinePlaceholder":133},[45,12776,12777,12780,12782,12784,12787,12789,12792],{"class":47,"line":2660},[45,12778,12779],{"class":2046},"    mySwap02",[45,12781,209],{"class":51},[45,12783,561],{"class":93},[45,12785,12786],{"class":51},"a, ",[45,12788,561],{"class":93},[45,12790,12791],{"class":51},"b);",[45,12793,12794],{"class":267},"\u002F\u002F地址传递，形参会修饰实参\n",[45,12796,12797,12799,12801,12803,12805,12807,12809,12811,12813,12815,12817],{"class":47,"line":2674},[45,12798,6612],{"class":51},[45,12800,1251],{"class":93},[45,12802,12753],{"class":313},[45,12804,1527],{"class":93},[45,12806,10952],{"class":51},[45,12808,1251],{"class":93},[45,12810,12762],{"class":313},[45,12812,1527],{"class":93},[45,12814,10965],{"class":51},[45,12816,1251],{"class":93},[45,12818,8923],{"class":51},[45,12820,12821],{"class":47,"line":2682},[45,12822,2483],{"emptyLinePlaceholder":133},[45,12824,12825,12828,12830],{"class":47,"line":2687},[45,12826,12827],{"class":2046},"    mySwap03",[45,12829,12741],{"class":51},[45,12831,12832],{"class":267},"\u002F\u002F引用传递，形参会修饰实参\n",[45,12834,12835,12837,12839,12841,12843,12845,12847,12849,12851,12853,12855],{"class":47,"line":2693},[45,12836,6612],{"class":51},[45,12838,1251],{"class":93},[45,12840,12753],{"class":313},[45,12842,1527],{"class":93},[45,12844,10952],{"class":51},[45,12846,1251],{"class":93},[45,12848,12762],{"class":313},[45,12850,1527],{"class":93},[45,12852,10965],{"class":51},[45,12854,1251],{"class":93},[45,12856,8923],{"class":51},[45,12858,12859],{"class":47,"line":2699},[45,12860,2483],{"emptyLinePlaceholder":133},[45,12862,12863,12865,12867,12869],{"class":47,"line":2704},[45,12864,2386],{"class":2046},[45,12866,209],{"class":51},[45,12868,2391],{"class":313},[45,12870,2802],{"class":51},[45,12872,12873],{"class":47,"line":8031},[45,12874,2483],{"emptyLinePlaceholder":133},[45,12876,12877,12879,12881],{"class":47,"line":8055},[45,12878,4173],{"class":93},[45,12880,4176],{"class":257},[45,12882,1373],{"class":51},[45,12884,12885],{"class":47,"line":8060},[45,12886,1648],{"class":51},[30,12888,12890],{"id":12889},"_64引用做函数的返回值","6.4引用做函数的返回值",[10,12892,12893],{},"作用：引用是可以作为函数的返回值存在的",[10,12895,9108,12896],{},[358,12897,12898],{},"不要返回局部变量引用",[10,12900,12901],{},"用法：函数调用作为左值",[35,12903,12905],{"className":10024,"code":12904,"language":10026,"meta":40,"style":40},"\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",[42,12906,12907,12912,12920,12935,12941,12945,12949,12954,12962,12979,12985,12989,12993,13001,13005,13010,13024,13044,13063,13067,13072,13085,13105,13123,13127,13143,13147,13166,13184,13188,13198,13202,13210],{"__ignoreMap":40},[45,12908,12909],{"class":47,"line":48},[45,12910,12911],{"class":267},"\u002F\u002F返回局部变量引用\n",[45,12913,12914,12916,12918],{"class":47,"line":125},[45,12915,12649],{"class":93},[45,12917,5671],{"class":2046},[45,12919,10936],{"class":51},[45,12921,12922,12924,12926,12928,12930,12932],{"class":47,"line":1262},[45,12923,2068],{"class":93},[45,12925,10952],{"class":51},[45,12927,254],{"class":93},[45,12929,2121],{"class":257},[45,12931,264],{"class":51},[45,12933,12934],{"class":267}," \u002F\u002F局部变量\n",[45,12936,12937,12939],{"class":47,"line":1277},[45,12938,4173],{"class":93},[45,12940,1515],{"class":51},[45,12942,12943],{"class":47,"line":1283},[45,12944,1648],{"class":51},[45,12946,12947],{"class":47,"line":1297},[45,12948,2483],{"emptyLinePlaceholder":133},[45,12950,12951],{"class":47,"line":1303},[45,12952,12953],{"class":267},"\u002F\u002F返回静态变量引用\n",[45,12955,12956,12958,12960],{"class":47,"line":1394},[45,12957,12649],{"class":93},[45,12959,5740],{"class":2046},[45,12961,10936],{"class":51},[45,12963,12964,12966,12968,12970,12972,12974,12976],{"class":47,"line":1400},[45,12965,11103],{"class":93},[45,12967,2465],{"class":93},[45,12969,10952],{"class":51},[45,12971,254],{"class":93},[45,12973,9033],{"class":257},[45,12975,264],{"class":51},[45,12977,12978],{"class":267},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[45,12980,12981,12983],{"class":47,"line":1412},[45,12982,4173],{"class":93},[45,12984,1515],{"class":51},[45,12986,12987],{"class":47,"line":1695},[45,12988,1648],{"class":51},[45,12990,12991],{"class":47,"line":1700},[45,12992,2483],{"emptyLinePlaceholder":133},[45,12994,12995,12997,12999],{"class":47,"line":1706},[45,12996,212],{"class":93},[45,12998,2056],{"class":2046},[45,13000,10936],{"class":51},[45,13002,13003],{"class":47,"line":1711},[45,13004,2483],{"emptyLinePlaceholder":133},[45,13006,13007],{"class":47,"line":1725},[45,13008,13009],{"class":267},"    \u002F\u002F不能返回局部变量的引用\n",[45,13011,13012,13015,13018,13020,13022],{"class":47,"line":1730},[45,13013,13014],{"class":93},"    int&",[45,13016,13017],{"class":51}," ref ",[45,13019,254],{"class":93},[45,13021,5671],{"class":2046},[45,13023,5719],{"class":51},[45,13025,13026,13028,13030,13033,13035,13037,13039,13041],{"class":47,"line":1736},[45,13027,6612],{"class":51},[45,13029,1251],{"class":93},[45,13031,13032],{"class":313}," \"ref = \"",[45,13034,1527],{"class":93},[45,13036,13017],{"class":51},[45,13038,1251],{"class":93},[45,13040,11552],{"class":51},[45,13042,13043],{"class":267},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[45,13045,13046,13048,13050,13052,13054,13056,13058,13060],{"class":47,"line":1757},[45,13047,6612],{"class":51},[45,13049,1251],{"class":93},[45,13051,13032],{"class":313},[45,13053,1527],{"class":93},[45,13055,13017],{"class":51},[45,13057,1251],{"class":93},[45,13059,11552],{"class":51},[45,13061,13062],{"class":267},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[45,13064,13065],{"class":47,"line":1762},[45,13066,2483],{"emptyLinePlaceholder":133},[45,13068,13069],{"class":47,"line":1776},[45,13070,13071],{"class":267},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[45,13073,13074,13076,13079,13081,13083],{"class":47,"line":1781},[45,13075,13014],{"class":93},[45,13077,13078],{"class":51}," ref2 ",[45,13080,254],{"class":93},[45,13082,5740],{"class":2046},[45,13084,5719],{"class":51},[45,13086,13087,13089,13091,13094,13096,13098,13100,13102],{"class":47,"line":1810},[45,13088,6612],{"class":51},[45,13090,1251],{"class":93},[45,13092,13093],{"class":313}," \"ref2 = \"",[45,13095,1527],{"class":93},[45,13097,13078],{"class":51},[45,13099,1251],{"class":93},[45,13101,11552],{"class":51},[45,13103,13104],{"class":267}," \u002F\u002F20\n",[45,13106,13107,13109,13111,13113,13115,13117,13119,13121],{"class":47,"line":1815},[45,13108,6612],{"class":51},[45,13110,1251],{"class":93},[45,13112,13093],{"class":313},[45,13114,1527],{"class":93},[45,13116,13078],{"class":51},[45,13118,1251],{"class":93},[45,13120,11552],{"class":51},[45,13122,13104],{"class":267},[45,13124,13125],{"class":47,"line":1832},[45,13126,2483],{"emptyLinePlaceholder":133},[45,13128,13129,13131,13134,13136,13138,13140],{"class":47,"line":1837},[45,13130,5785],{"class":2046},[45,13132,13133],{"class":51},"() ",[45,13135,254],{"class":93},[45,13137,3082],{"class":257},[45,13139,264],{"class":51},[45,13141,13142],{"class":267},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[45,13144,13145],{"class":47,"line":1842},[45,13146,2483],{"emptyLinePlaceholder":133},[45,13148,13149,13151,13153,13155,13157,13159,13161,13163],{"class":47,"line":1847},[45,13150,6612],{"class":51},[45,13152,1251],{"class":93},[45,13154,13093],{"class":313},[45,13156,1527],{"class":93},[45,13158,13078],{"class":51},[45,13160,1251],{"class":93},[45,13162,11552],{"class":51},[45,13164,13165],{"class":267}," \u002F\u002F1000\n",[45,13167,13168,13170,13172,13174,13176,13178,13180,13182],{"class":47,"line":1861},[45,13169,6612],{"class":51},[45,13171,1251],{"class":93},[45,13173,13093],{"class":313},[45,13175,1527],{"class":93},[45,13177,13078],{"class":51},[45,13179,1251],{"class":93},[45,13181,11552],{"class":51},[45,13183,13165],{"class":267},[45,13185,13186],{"class":47,"line":1866},[45,13187,2483],{"emptyLinePlaceholder":133},[45,13189,13190,13192,13194,13196],{"class":47,"line":2660},[45,13191,2386],{"class":2046},[45,13193,209],{"class":51},[45,13195,2391],{"class":313},[45,13197,2802],{"class":51},[45,13199,13200],{"class":47,"line":2674},[45,13201,2483],{"emptyLinePlaceholder":133},[45,13203,13204,13206,13208],{"class":47,"line":2682},[45,13205,4173],{"class":93},[45,13207,4176],{"class":257},[45,13209,1373],{"class":51},[45,13211,13212],{"class":47,"line":2687},[45,13213,1648],{"class":51},[30,13215,13217],{"id":13216},"_65引用的本质","6.5引用的本质",[10,13219,13220,13221],{},"本质：",[358,13222,13223],{},"引用的本质在c++内部实现是一个指针常量.",[35,13225,13227],{"className":197,"code":13226,"language":199,"meta":40,"style":40},"\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",[42,13228,13229,13234,13250,13264,13268,13277,13289,13294,13299,13310,13323,13327,13343,13360,13364,13372,13380],{"__ignoreMap":40},[45,13230,13231],{"class":47,"line":48},[45,13232,13233],{"class":267},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[45,13235,13236,13238,13240,13242,13244,13247],{"class":47,"line":125},[45,13237,5447],{"class":93},[45,13239,11468],{"class":2046},[45,13241,209],{"class":51},[45,13243,12649],{"class":93},[45,13245,13246],{"class":5299}," ref",[45,13248,13249],{"class":51},"){\n",[45,13251,13252,13255,13257,13259,13261],{"class":47,"line":1262},[45,13253,13254],{"class":51},"    ref ",[45,13256,254],{"class":93},[45,13258,5837],{"class":257},[45,13260,264],{"class":51},[45,13262,13263],{"class":267}," \u002F\u002F ref是引用，转换为*ref = 100\n",[45,13265,13266],{"class":47,"line":1277},[45,13267,1648],{"class":51},[45,13269,13270,13272,13274],{"class":47,"line":1283},[45,13271,212],{"class":93},[45,13273,2056],{"class":2046},[45,13275,13276],{"class":51},"(){\n",[45,13278,13279,13281,13283,13285,13287],{"class":47,"line":1297},[45,13280,2068],{"class":93},[45,13282,10952],{"class":51},[45,13284,254],{"class":93},[45,13286,2121],{"class":257},[45,13288,1373],{"class":51},[45,13290,13291],{"class":47,"line":1303},[45,13292,13293],{"class":51},"    \n",[45,13295,13296],{"class":47,"line":1394},[45,13297,13298],{"class":267},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[45,13300,13301,13303,13305,13307],{"class":47,"line":1400},[45,13302,13014],{"class":93},[45,13304,13017],{"class":51},[45,13306,254],{"class":93},[45,13308,13309],{"class":51}," a; \n",[45,13311,13312,13314,13316,13318,13320],{"class":47,"line":1412},[45,13313,13254],{"class":51},[45,13315,254],{"class":93},[45,13317,9033],{"class":257},[45,13319,264],{"class":51},[45,13321,13322],{"class":267}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[45,13324,13325],{"class":47,"line":1695},[45,13326,13293],{"class":51},[45,13328,13329,13331,13333,13335,13337,13339,13341],{"class":47,"line":1700},[45,13330,6612],{"class":51},[45,13332,1251],{"class":93},[45,13334,12753],{"class":313},[45,13336,1527],{"class":93},[45,13338,10952],{"class":51},[45,13340,1251],{"class":93},[45,13342,8923],{"class":51},[45,13344,13345,13347,13349,13352,13354,13356,13358],{"class":47,"line":1706},[45,13346,6612],{"class":51},[45,13348,1251],{"class":93},[45,13350,13351],{"class":313}," \"ref:\"",[45,13353,1527],{"class":93},[45,13355,13017],{"class":51},[45,13357,1251],{"class":93},[45,13359,8923],{"class":51},[45,13361,13362],{"class":47,"line":1711},[45,13363,13293],{"class":51},[45,13365,13366,13369],{"class":47,"line":1725},[45,13367,13368],{"class":2046},"    func",[45,13370,13371],{"class":51},"(a);\n",[45,13373,13374,13376,13378],{"class":47,"line":1730},[45,13375,4173],{"class":93},[45,13377,4176],{"class":257},[45,13379,1373],{"class":51},[45,13381,13382],{"class":47,"line":1736},[45,13383,1648],{"class":51},[10,13385,11415],{},[159,13387,13388,13391],{},[162,13389,13390],{},"引用的本质，就是一个指针常量",[162,13392,13393],{},"引用一旦初始化，就不可以发生改变",[30,13395,13397],{"id":13396},"_66常量引用","6.6常量引用",[10,13399,13400],{},"作用：常量引用主要用来修饰形参",[10,13402,13403,13404,13407],{},"在函数形参列表中，可以加",[358,13405,13406],{},"const修饰形参","，防止形参改变实参",[35,13409,13411],{"className":197,"code":13410,"language":199,"meta":40,"style":40},"\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",[42,13412,13413,13418,13423,13442,13447,13460,13464,13468,13476,13480,13485,13490,13504,13508,13516,13528,13532,13537,13549,13556,13560,13570,13574,13582],{"__ignoreMap":40},[45,13414,13415],{"class":47,"line":48},[45,13416,13417],{"class":267},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[45,13419,13420],{"class":47,"line":125},[45,13421,13422],{"class":267},"\u002F\u002F加上const就不能修改实参的\n",[45,13424,13425,13427,13430,13432,13434,13437,13440],{"class":47,"line":1262},[45,13426,5447],{"class":93},[45,13428,13429],{"class":2046}," showValue",[45,13431,209],{"class":51},[45,13433,6875],{"class":93},[45,13435,13436],{"class":93}," int&",[45,13438,13439],{"class":5299}," v",[45,13441,12525],{"class":51},[45,13443,13444],{"class":47,"line":1277},[45,13445,13446],{"class":267},"    \u002F\u002Fv += 100;\n",[45,13448,13449,13451,13453,13456,13458],{"class":47,"line":1283},[45,13450,6612],{"class":51},[45,13452,1251],{"class":93},[45,13454,13455],{"class":51}," v ",[45,13457,1251],{"class":93},[45,13459,8923],{"class":51},[45,13461,13462],{"class":47,"line":1297},[45,13463,1648],{"class":51},[45,13465,13466],{"class":47,"line":1303},[45,13467,2483],{"emptyLinePlaceholder":133},[45,13469,13470,13472,13474],{"class":47,"line":1394},[45,13471,212],{"class":93},[45,13473,2056],{"class":2046},[45,13475,10936],{"class":51},[45,13477,13478],{"class":47,"line":1400},[45,13479,2483],{"emptyLinePlaceholder":133},[45,13481,13482],{"class":47,"line":1412},[45,13483,13484],{"class":267},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[45,13486,13487],{"class":47,"line":1695},[45,13488,13489],{"class":267},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[45,13491,13492,13494,13496,13498,13500,13502],{"class":47,"line":1700},[45,13493,11304],{"class":93},[45,13495,13436],{"class":93},[45,13497,13017],{"class":51},[45,13499,254],{"class":93},[45,13501,2121],{"class":257},[45,13503,1373],{"class":51},[45,13505,13506],{"class":47,"line":1706},[45,13507,2483],{"emptyLinePlaceholder":133},[45,13509,13510,13513],{"class":47,"line":1711},[45,13511,13512],{"class":267},"    \u002F\u002Fref = 100;",[45,13514,13515],{"class":267},"  \u002F\u002F加入const后不可以修改变量\n",[45,13517,13518,13520,13522,13524,13526],{"class":47,"line":1725},[45,13519,6612],{"class":51},[45,13521,1251],{"class":93},[45,13523,13017],{"class":51},[45,13525,1251],{"class":93},[45,13527,8923],{"class":51},[45,13529,13530],{"class":47,"line":1730},[45,13531,2483],{"emptyLinePlaceholder":133},[45,13533,13534],{"class":47,"line":1736},[45,13535,13536],{"class":267},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[45,13538,13539,13541,13543,13545,13547],{"class":47,"line":1757},[45,13540,2068],{"class":93},[45,13542,10952],{"class":51},[45,13544,254],{"class":93},[45,13546,2121],{"class":257},[45,13548,1373],{"class":51},[45,13550,13551,13554],{"class":47,"line":1762},[45,13552,13553],{"class":2046},"    showValue",[45,13555,13371],{"class":51},[45,13557,13558],{"class":47,"line":1776},[45,13559,2483],{"emptyLinePlaceholder":133},[45,13561,13562,13564,13566,13568],{"class":47,"line":1781},[45,13563,2386],{"class":2046},[45,13565,209],{"class":51},[45,13567,2391],{"class":313},[45,13569,2802],{"class":51},[45,13571,13572],{"class":47,"line":1810},[45,13573,2483],{"emptyLinePlaceholder":133},[45,13575,13576,13578,13580],{"class":47,"line":1815},[45,13577,4173],{"class":93},[45,13579,4176],{"class":257},[45,13581,1373],{"class":51},[45,13583,13584],{"class":47,"line":1832},[45,13585,1648],{"class":51},[121,13587,13588],{},"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":40,"searchDepth":125,"depth":125,"links":13590},[13591,13592,13593,13594,13595,13596],{"id":12123,"depth":125,"text":12124},{"id":12302,"depth":125,"text":12303},{"id":12485,"depth":125,"text":12486},{"id":12889,"depth":125,"text":12890},{"id":13216,"depth":125,"text":13217},{"id":13396,"depth":125,"text":13397},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12115,"description":40},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13603,"title":13604,"body":13605,"description":40,"extension":131,"meta":14686,"navigation":133,"path":14687,"seo":14688,"stem":14689,"__hash__":14690},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13606,"toc":14678},[13607,13610,13614,13617,13622,13854,13856,13867,13871,13874,13882,13986,13989,13993,13996,14000,14003,14008,14030,14036,14363,14366,14370,14378,14675],[20,13608,13604],{"id":13609},"_7函数高级部分",[30,13611,13613],{"id":13612},"_71函数默认参数","7.1函数默认参数",[10,13615,13616],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[10,13618,5264,13619],{},[42,13620,13621],{}," 返回值类型  函数名 （参数= 默认值）{}",[35,13623,13625],{"className":197,"code":13624,"language":199,"meta":40,"style":40},"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",[42,13626,13627,13662,13677,13681,13685,13690,13695,13724,13744,13754,13758,13762,13770,13774,13802,13824,13828,13838,13842,13850],{"__ignoreMap":40},[45,13628,13629,13631,13633,13635,13637,13639,13641,13643,13645,13648,13650,13652,13654,13656,13658,13660],{"class":47,"line":48},[45,13630,212],{"class":93},[45,13632,11468],{"class":2046},[45,13634,209],{"class":51},[45,13636,212],{"class":93},[45,13638,1481],{"class":5299},[45,13640,12518],{"class":51},[45,13642,212],{"class":93},[45,13644,2916],{"class":5299},[45,13646,13647],{"class":93}," =",[45,13649,2121],{"class":257},[45,13651,12518],{"class":51},[45,13653,212],{"class":93},[45,13655,2932],{"class":5299},[45,13657,13647],{"class":93},[45,13659,2121],{"class":257},[45,13661,12525],{"class":51},[45,13663,13664,13666,13668,13670,13672,13674],{"class":47,"line":125},[45,13665,4173],{"class":93},[45,13667,10952],{"class":51},[45,13669,689],{"class":93},[45,13671,10965],{"class":51},[45,13673,689],{"class":93},[45,13675,13676],{"class":51}," c;\n",[45,13678,13679],{"class":47,"line":1262},[45,13680,1648],{"class":51},[45,13682,13683],{"class":47,"line":1277},[45,13684,2483],{"emptyLinePlaceholder":133},[45,13686,13687],{"class":47,"line":1283},[45,13688,13689],{"class":267},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[45,13691,13692],{"class":47,"line":1297},[45,13693,13694],{"class":267},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[45,13696,13697,13699,13702,13704,13706,13708,13710,13712,13714,13716,13718,13720,13722],{"class":47,"line":1303},[45,13698,212],{"class":93},[45,13700,13701],{"class":2046}," func2",[45,13703,209],{"class":51},[45,13705,212],{"class":93},[45,13707,1481],{"class":5299},[45,13709,13647],{"class":93},[45,13711,2121],{"class":257},[45,13713,12518],{"class":51},[45,13715,212],{"class":93},[45,13717,2916],{"class":5299},[45,13719,13647],{"class":93},[45,13721,2121],{"class":257},[45,13723,2802],{"class":51},[45,13725,13726,13728,13730,13732,13734,13736,13738,13740,13742],{"class":47,"line":1394},[45,13727,212],{"class":93},[45,13729,13701],{"class":2046},[45,13731,209],{"class":51},[45,13733,212],{"class":93},[45,13735,1481],{"class":5299},[45,13737,12518],{"class":51},[45,13739,212],{"class":93},[45,13741,2916],{"class":5299},[45,13743,12525],{"class":51},[45,13745,13746,13748,13750,13752],{"class":47,"line":1400},[45,13747,4173],{"class":93},[45,13749,10952],{"class":51},[45,13751,689],{"class":93},[45,13753,12546],{"class":51},[45,13755,13756],{"class":47,"line":1412},[45,13757,1648],{"class":51},[45,13759,13760],{"class":47,"line":1695},[45,13761,2483],{"emptyLinePlaceholder":133},[45,13763,13764,13766,13768],{"class":47,"line":1700},[45,13765,212],{"class":93},[45,13767,2056],{"class":2046},[45,13769,10936],{"class":51},[45,13771,13772],{"class":47,"line":1706},[45,13773,2483],{"emptyLinePlaceholder":133},[45,13775,13776,13778,13780,13783,13785,13787,13789,13791,13793,13795,13798,13800],{"class":47,"line":1711},[45,13777,6612],{"class":51},[45,13779,1251],{"class":93},[45,13781,13782],{"class":313}," \"ret = \"",[45,13784,1527],{"class":93},[45,13786,11468],{"class":2046},[45,13788,209],{"class":51},[45,13790,907],{"class":257},[45,13792,12518],{"class":51},[45,13794,907],{"class":257},[45,13796,13797],{"class":51},") ",[45,13799,1251],{"class":93},[45,13801,8923],{"class":51},[45,13803,13804,13806,13808,13810,13812,13814,13816,13818,13820,13822],{"class":47,"line":1725},[45,13805,6612],{"class":51},[45,13807,1251],{"class":93},[45,13809,13782],{"class":313},[45,13811,1527],{"class":93},[45,13813,11468],{"class":2046},[45,13815,209],{"class":51},[45,13817,519],{"class":257},[45,13819,13797],{"class":51},[45,13821,1251],{"class":93},[45,13823,8923],{"class":51},[45,13825,13826],{"class":47,"line":1730},[45,13827,2483],{"emptyLinePlaceholder":133},[45,13829,13830,13832,13834,13836],{"class":47,"line":1736},[45,13831,2386],{"class":2046},[45,13833,209],{"class":51},[45,13835,2391],{"class":313},[45,13837,2802],{"class":51},[45,13839,13840],{"class":47,"line":1757},[45,13841,2483],{"emptyLinePlaceholder":133},[45,13843,13844,13846,13848],{"class":47,"line":1762},[45,13845,4173],{"class":93},[45,13847,4176],{"class":257},[45,13849,1373],{"class":51},[45,13851,13852],{"class":47,"line":1776},[45,13853,1648],{"class":51},[10,13855,11415],{},[159,13857,13858,13861,13864],{},[162,13859,13860],{},"我传就用我；没传就用你",[162,13862,13863],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[162,13865,13866],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[30,13868,13870],{"id":13869},"_72函数的占位参数","7.2函数的占位参数",[10,13872,13873],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[10,13875,13876,13878,13879],{},[358,13877,5264],{}," ",[42,13880,13881],{},"返回值类型 函数名 (数据类型){}",[35,13883,13885],{"className":197,"code":13884,"language":199,"meta":40,"style":40},"\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",[42,13886,13887,13892,13910,13923,13927,13935,13939,13956,13960,13970,13974,13982],{"__ignoreMap":40},[45,13888,13889],{"class":47,"line":48},[45,13890,13891],{"class":267},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[45,13893,13894,13896,13898,13900,13902,13904,13906,13908],{"class":47,"line":125},[45,13895,5447],{"class":93},[45,13897,11468],{"class":2046},[45,13899,209],{"class":51},[45,13901,212],{"class":93},[45,13903,1481],{"class":5299},[45,13905,12518],{"class":51},[45,13907,212],{"class":93},[45,13909,12525],{"class":51},[45,13911,13912,13914,13916,13919,13921],{"class":47,"line":1262},[45,13913,6612],{"class":51},[45,13915,1251],{"class":93},[45,13917,13918],{"class":313}," \"this is func\"",[45,13920,1527],{"class":93},[45,13922,8923],{"class":51},[45,13924,13925],{"class":47,"line":1277},[45,13926,1648],{"class":51},[45,13928,13929,13931,13933],{"class":47,"line":1283},[45,13930,212],{"class":93},[45,13932,2056],{"class":2046},[45,13934,10936],{"class":51},[45,13936,13937],{"class":47,"line":1297},[45,13938,2483],{"emptyLinePlaceholder":133},[45,13940,13941,13943,13945,13947,13949,13951,13953],{"class":47,"line":1303},[45,13942,13368],{"class":2046},[45,13944,209],{"class":51},[45,13946,654],{"class":257},[45,13948,586],{"class":51},[45,13950,654],{"class":257},[45,13952,6049],{"class":51},[45,13954,13955],{"class":267}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[45,13957,13958],{"class":47,"line":1394},[45,13959,2483],{"emptyLinePlaceholder":133},[45,13961,13962,13964,13966,13968],{"class":47,"line":1400},[45,13963,2386],{"class":2046},[45,13965,209],{"class":51},[45,13967,2391],{"class":313},[45,13969,2802],{"class":51},[45,13971,13972],{"class":47,"line":1412},[45,13973,2483],{"emptyLinePlaceholder":133},[45,13975,13976,13978,13980],{"class":47,"line":1695},[45,13977,4173],{"class":93},[45,13979,4176],{"class":257},[45,13981,1373],{"class":51},[45,13983,13984],{"class":47,"line":1700},[45,13985,1648],{"class":51},[10,13987,13988],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[30,13990,13992],{"id":13991},"_73函数重载","7.3函数重载",[10,13994,13995],{},"意思是函数名是可以相同的",[176,13997,13999],{"id":13998},"_731基本语法","7.3.1基本语法",[10,14001,14002],{},"作用：函数名可以相同，提高复用性",[10,14004,14005],{},[358,14006,14007],{},"函数重载满足条件：",[1214,14009,14010,14013,14016],{},[162,14011,14012],{},"同一个作用域下",[162,14014,14015],{},"函数名称相同",[162,14017,14018,14019,14022,14023,14026,14027],{},"函数参数",[358,14020,14021],{},"类型不同","  或者 ",[358,14024,14025],{},"个数不同"," 或者 ",[358,14028,14029],{},"顺序不同",[10,14031,14032,14035],{},[358,14033,14034],{},"注意:","  函数的返回值不可以作为函数重载的条件",[35,14037,14039],{"className":10024,"code":14038,"language":10026,"meta":40,"style":40},"\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",[42,14040,14041,14046,14054,14058,14071,14075,14089,14093,14106,14110,14125,14129,14142,14146,14167,14171,14184,14188,14208,14212,14225,14229,14233,14238,14243,14248,14253,14258,14262,14266,14274,14278,14284,14294,14304,14318,14333,14337,14347,14351,14359],{"__ignoreMap":40},[45,14042,14043],{"class":47,"line":48},[45,14044,14045],{"class":267},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[45,14047,14048,14050,14052],{"class":47,"line":125},[45,14049,5447],{"class":93},[45,14051,11468],{"class":2046},[45,14053,2059],{"class":51},[45,14055,14056],{"class":47,"line":1262},[45,14057,1629],{"class":51},[45,14059,14060,14062,14064,14067,14069],{"class":47,"line":1277},[45,14061,6612],{"class":51},[45,14063,1251],{"class":93},[45,14065,14066],{"class":313}," \"func 的调用！\"",[45,14068,1527],{"class":93},[45,14070,8923],{"class":51},[45,14072,14073],{"class":47,"line":1283},[45,14074,1648],{"class":51},[45,14076,14077,14079,14081,14083,14085,14087],{"class":47,"line":1297},[45,14078,5447],{"class":93},[45,14080,11468],{"class":2046},[45,14082,209],{"class":51},[45,14084,212],{"class":93},[45,14086,1481],{"class":5299},[45,14088,215],{"class":51},[45,14090,14091],{"class":47,"line":1303},[45,14092,1629],{"class":51},[45,14094,14095,14097,14099,14102,14104],{"class":47,"line":1394},[45,14096,6612],{"class":51},[45,14098,1251],{"class":93},[45,14100,14101],{"class":313}," \"func (int a) 的调用！\"",[45,14103,1527],{"class":93},[45,14105,8923],{"class":51},[45,14107,14108],{"class":47,"line":1400},[45,14109,1648],{"class":51},[45,14111,14112,14114,14116,14118,14121,14123],{"class":47,"line":1412},[45,14113,5447],{"class":93},[45,14115,11468],{"class":2046},[45,14117,209],{"class":51},[45,14119,14120],{"class":93},"double",[45,14122,1481],{"class":5299},[45,14124,215],{"class":51},[45,14126,14127],{"class":47,"line":1695},[45,14128,1629],{"class":51},[45,14130,14131,14133,14135,14138,14140],{"class":47,"line":1700},[45,14132,6612],{"class":51},[45,14134,1251],{"class":93},[45,14136,14137],{"class":313}," \"func (double a)的调用！\"",[45,14139,1527],{"class":93},[45,14141,8923],{"class":51},[45,14143,14144],{"class":47,"line":1706},[45,14145,1648],{"class":51},[45,14147,14148,14150,14152,14154,14156,14158,14161,14163,14165],{"class":47,"line":1711},[45,14149,5447],{"class":93},[45,14151,11468],{"class":2046},[45,14153,209],{"class":51},[45,14155,212],{"class":93},[45,14157,1481],{"class":5299},[45,14159,14160],{"class":51}," ,",[45,14162,14120],{"class":93},[45,14164,2916],{"class":5299},[45,14166,215],{"class":51},[45,14168,14169],{"class":47,"line":1725},[45,14170,1629],{"class":51},[45,14172,14173,14175,14177,14180,14182],{"class":47,"line":1730},[45,14174,6612],{"class":51},[45,14176,1251],{"class":93},[45,14178,14179],{"class":313}," \"func (int a ,double b) 的调用！\"",[45,14181,1527],{"class":93},[45,14183,8923],{"class":51},[45,14185,14186],{"class":47,"line":1736},[45,14187,1648],{"class":51},[45,14189,14190,14192,14194,14196,14198,14200,14202,14204,14206],{"class":47,"line":1757},[45,14191,5447],{"class":93},[45,14193,11468],{"class":2046},[45,14195,209],{"class":51},[45,14197,14120],{"class":93},[45,14199,1481],{"class":5299},[45,14201,14160],{"class":51},[45,14203,212],{"class":93},[45,14205,2916],{"class":5299},[45,14207,215],{"class":51},[45,14209,14210],{"class":47,"line":1762},[45,14211,1629],{"class":51},[45,14213,14214,14216,14218,14221,14223],{"class":47,"line":1776},[45,14215,6612],{"class":51},[45,14217,1251],{"class":93},[45,14219,14220],{"class":313}," \"func (double a ,int b)的调用！\"",[45,14222,1527],{"class":93},[45,14224,8923],{"class":51},[45,14226,14227],{"class":47,"line":1781},[45,14228,1648],{"class":51},[45,14230,14231],{"class":47,"line":1810},[45,14232,2483],{"emptyLinePlaceholder":133},[45,14234,14235],{"class":47,"line":1815},[45,14236,14237],{"class":267},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[45,14239,14240],{"class":47,"line":1832},[45,14241,14242],{"class":267},"\u002F\u002Fint func(double a, int b)\n",[45,14244,14245],{"class":47,"line":1837},[45,14246,14247],{"class":267},"\u002F\u002F{\n",[45,14249,14250],{"class":47,"line":1842},[45,14251,14252],{"class":267},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[45,14254,14255],{"class":47,"line":1847},[45,14256,14257],{"class":267},"\u002F\u002F}\n",[45,14259,14260],{"class":47,"line":1861},[45,14261,2483],{"emptyLinePlaceholder":133},[45,14263,14264],{"class":47,"line":1866},[45,14265,2483],{"emptyLinePlaceholder":133},[45,14267,14268,14270,14272],{"class":47,"line":2660},[45,14269,212],{"class":93},[45,14271,2056],{"class":2046},[45,14273,10936],{"class":51},[45,14275,14276],{"class":47,"line":2674},[45,14277,2483],{"emptyLinePlaceholder":133},[45,14279,14280,14282],{"class":47,"line":2682},[45,14281,13368],{"class":2046},[45,14283,5719],{"class":51},[45,14285,14286,14288,14290,14292],{"class":47,"line":2687},[45,14287,13368],{"class":2046},[45,14289,209],{"class":51},[45,14291,654],{"class":257},[45,14293,2802],{"class":51},[45,14295,14296,14298,14300,14302],{"class":47,"line":2693},[45,14297,13368],{"class":2046},[45,14299,209],{"class":51},[45,14301,258],{"class":257},[45,14303,2802],{"class":51},[45,14305,14306,14308,14310,14312,14314,14316],{"class":47,"line":2699},[45,14307,13368],{"class":2046},[45,14309,209],{"class":51},[45,14311,654],{"class":257},[45,14313,586],{"class":51},[45,14315,258],{"class":257},[45,14317,2802],{"class":51},[45,14319,14320,14322,14324,14326,14329,14331],{"class":47,"line":2704},[45,14321,13368],{"class":2046},[45,14323,209],{"class":51},[45,14325,258],{"class":257},[45,14327,14328],{"class":51}," , ",[45,14330,654],{"class":257},[45,14332,2802],{"class":51},[45,14334,14335],{"class":47,"line":8031},[45,14336,13293],{"class":51},[45,14338,14339,14341,14343,14345],{"class":47,"line":8055},[45,14340,2386],{"class":2046},[45,14342,209],{"class":51},[45,14344,2391],{"class":313},[45,14346,2802],{"class":51},[45,14348,14349],{"class":47,"line":8060},[45,14350,2483],{"emptyLinePlaceholder":133},[45,14352,14353,14355,14357],{"class":47,"line":8066},[45,14354,4173],{"class":93},[45,14356,4176],{"class":257},[45,14358,1373],{"class":51},[45,14360,14361],{"class":47,"line":8093},[45,14362,1648],{"class":51},[10,14364,14365],{},"重点：函数返回值不可以作为函数重载条件！",[176,14367,14369],{"id":14368},"_732注意事项","7.3.2注意事项",[1214,14371,14372,14375],{},[162,14373,14374],{},"引用作为重载条件!!!",[162,14376,14377],{},"函数重载碰到函数默认参数",[35,14379,14381],{"className":197,"code":14380,"language":199,"meta":40,"style":40},"\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",[42,14382,14383,14388,14393,14397,14413,14417,14430,14434,14438,14456,14460,14473,14477,14481,14485,14490,14494,14518,14522,14535,14539,14543,14557,14561,14574,14578,14582,14590,14594,14606,14616,14629,14633,14637,14645,14649,14659,14663,14671],{"__ignoreMap":40},[45,14384,14385],{"class":47,"line":48},[45,14386,14387],{"class":267},"\u002F\u002F函数重载注意事项\n",[45,14389,14390],{"class":47,"line":125},[45,14391,14392],{"class":267},"\u002F\u002F1、引用作为重载条件\n",[45,14394,14395],{"class":47,"line":1262},[45,14396,2483],{"emptyLinePlaceholder":133},[45,14398,14399,14401,14403,14405,14407,14409,14411],{"class":47,"line":1277},[45,14400,5447],{"class":93},[45,14402,11468],{"class":2046},[45,14404,209],{"class":51},[45,14406,212],{"class":93},[45,14408,10667],{"class":93},[45,14410,13],{"class":5299},[45,14412,215],{"class":51},[45,14414,14415],{"class":47,"line":1283},[45,14416,1629],{"class":51},[45,14418,14419,14421,14423,14426,14428],{"class":47,"line":1297},[45,14420,6612],{"class":51},[45,14422,1251],{"class":93},[45,14424,14425],{"class":313}," \"func (int &a) 调用 \"",[45,14427,1527],{"class":93},[45,14429,8923],{"class":51},[45,14431,14432],{"class":47,"line":1303},[45,14433,1648],{"class":51},[45,14435,14436],{"class":47,"line":1394},[45,14437,2483],{"emptyLinePlaceholder":133},[45,14439,14440,14442,14444,14446,14448,14450,14452,14454],{"class":47,"line":1400},[45,14441,5447],{"class":93},[45,14443,11468],{"class":2046},[45,14445,209],{"class":51},[45,14447,6875],{"class":93},[45,14449,2465],{"class":93},[45,14451,10667],{"class":93},[45,14453,13],{"class":5299},[45,14455,215],{"class":51},[45,14457,14458],{"class":47,"line":1412},[45,14459,1629],{"class":51},[45,14461,14462,14464,14466,14469,14471],{"class":47,"line":1695},[45,14463,6612],{"class":51},[45,14465,1251],{"class":93},[45,14467,14468],{"class":313}," \"func (const int &a) 调用 \"",[45,14470,1527],{"class":93},[45,14472,8923],{"class":51},[45,14474,14475],{"class":47,"line":1700},[45,14476,1648],{"class":51},[45,14478,14479],{"class":47,"line":1706},[45,14480,2483],{"emptyLinePlaceholder":133},[45,14482,14483],{"class":47,"line":1711},[45,14484,2483],{"emptyLinePlaceholder":133},[45,14486,14487],{"class":47,"line":1725},[45,14488,14489],{"class":267},"\u002F\u002F2、函数重载碰到函数默认参数\n",[45,14491,14492],{"class":47,"line":1730},[45,14493,2483],{"emptyLinePlaceholder":133},[45,14495,14496,14498,14500,14502,14504,14506,14508,14510,14512,14514,14516],{"class":47,"line":1736},[45,14497,5447],{"class":93},[45,14499,13701],{"class":2046},[45,14501,209],{"class":51},[45,14503,212],{"class":93},[45,14505,1481],{"class":5299},[45,14507,12518],{"class":51},[45,14509,212],{"class":93},[45,14511,2916],{"class":5299},[45,14513,13647],{"class":93},[45,14515,2121],{"class":257},[45,14517,215],{"class":51},[45,14519,14520],{"class":47,"line":1757},[45,14521,1629],{"class":51},[45,14523,14524,14526,14528,14531,14533],{"class":47,"line":1762},[45,14525,6612],{"class":51},[45,14527,1251],{"class":93},[45,14529,14530],{"class":313}," \"func2(int a, int b = 10) 调用\"",[45,14532,1527],{"class":93},[45,14534,8923],{"class":51},[45,14536,14537],{"class":47,"line":1776},[45,14538,1648],{"class":51},[45,14540,14541],{"class":47,"line":1781},[45,14542,2483],{"emptyLinePlaceholder":133},[45,14544,14545,14547,14549,14551,14553,14555],{"class":47,"line":1810},[45,14546,5447],{"class":93},[45,14548,13701],{"class":2046},[45,14550,209],{"class":51},[45,14552,212],{"class":93},[45,14554,1481],{"class":5299},[45,14556,215],{"class":51},[45,14558,14559],{"class":47,"line":1815},[45,14560,1629],{"class":51},[45,14562,14563,14565,14567,14570,14572],{"class":47,"line":1832},[45,14564,6612],{"class":51},[45,14566,1251],{"class":93},[45,14568,14569],{"class":313}," \"func2(int a) 调用\"",[45,14571,1527],{"class":93},[45,14573,8923],{"class":51},[45,14575,14576],{"class":47,"line":1837},[45,14577,1648],{"class":51},[45,14579,14580],{"class":47,"line":1842},[45,14581,2483],{"emptyLinePlaceholder":133},[45,14583,14584,14586,14588],{"class":47,"line":1847},[45,14585,212],{"class":93},[45,14587,2056],{"class":2046},[45,14589,10936],{"class":51},[45,14591,14592],{"class":47,"line":1861},[45,14593,13293],{"class":51},[45,14595,14596,14598,14600,14602,14604],{"class":47,"line":1866},[45,14597,2068],{"class":93},[45,14599,10952],{"class":51},[45,14601,254],{"class":93},[45,14603,2121],{"class":257},[45,14605,1373],{"class":51},[45,14607,14608,14610,14613],{"class":47,"line":2660},[45,14609,13368],{"class":2046},[45,14611,14612],{"class":51},"(a);",[45,14614,14615],{"class":267}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[45,14617,14618,14620,14622,14624,14626],{"class":47,"line":2674},[45,14619,13368],{"class":2046},[45,14621,209],{"class":51},[45,14623,654],{"class":257},[45,14625,6049],{"class":51},[45,14627,14628],{"class":267},"\u002F\u002F调用有const   10是个常量\n",[45,14630,14631],{"class":47,"line":2682},[45,14632,2483],{"emptyLinePlaceholder":133},[45,14634,14635],{"class":47,"line":2687},[45,14636,2483],{"emptyLinePlaceholder":133},[45,14638,14639,14642],{"class":47,"line":2693},[45,14640,14641],{"class":267},"    \u002F\u002Ffunc2(10);",[45,14643,14644],{"class":267}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[45,14646,14647],{"class":47,"line":2699},[45,14648,2483],{"emptyLinePlaceholder":133},[45,14650,14651,14653,14655,14657],{"class":47,"line":2704},[45,14652,2386],{"class":2046},[45,14654,209],{"class":51},[45,14656,2391],{"class":313},[45,14658,2802],{"class":51},[45,14660,14661],{"class":47,"line":8031},[45,14662,2483],{"emptyLinePlaceholder":133},[45,14664,14665,14667,14669],{"class":47,"line":8055},[45,14666,4173],{"class":93},[45,14668,4176],{"class":257},[45,14670,1373],{"class":51},[45,14672,14673],{"class":47,"line":8060},[45,14674,1648],{"class":51},[121,14676,14677],{},"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":40,"searchDepth":125,"depth":125,"links":14679},[14680,14681,14682],{"id":13612,"depth":125,"text":13613},{"id":13869,"depth":125,"text":13870},{"id":13991,"depth":125,"text":13992,"children":14683},[14684,14685],{"id":13998,"depth":1262,"text":13999},{"id":14368,"depth":1262,"text":14369},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13604,"description":40},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14692,"title":14693,"body":14694,"description":23448,"extension":131,"meta":23449,"navigation":133,"path":23450,"seo":23451,"stem":23452,"__hash__":23453},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14695,"toc":23429},[14696,14699,14705,14712,14717,14720,14723,14726,14730,14734,14737,14740,14748,14753,14756,14763,14768,14927,14930,15183,15186,15189,15192,15197,15200,15203,15214,15219,15455,15459,15469,15472,15480,15627,15631,15634,15637,15641,16086,16090,16098,16106,17018,17025,17030,17658,17661,17664,17667,17786,17789,17876,17879,18005,18008,18102,18105,18458,18462,18470,18474,18481,18484,18487,18498,18504,18509,18521,18529,18549,18557,18574,18760,18763,18767,18770,18773,18776,18779,18782,18785,18788,19248,19254,19258,19261,19272,19859,19862,20351,20355,20358,20361,20364,20367,20370,20378,20774,20778,20781,20784,21231,21234,21237,21242,21245,21250,21253,21257,21260,21262,21268,21271,21577,21587,21628,21632,21635,21637,21670,21673,21980,21982,21997,22000,22023,22032,22038,22041,22045,22048,22051,22056,22067,22072,22080,22085,22215,22218,22221,22396,22401,22613,22617,22620,22734,22739,22978,22982,22986,22989,22992,22997,23102,23105,23108,23111,23115,23226,23229,23232,23237,23289,23292,23295,23300,23346,23349,23354,23422,23424,23427],[20,14697,14693],{"id":14698},"_8类和对象",[10,14700,14701,14702],{},"C++面向对象的三大特性为",[358,14703,14704],{},"封装、继承、多态",[10,14706,14707,14708,14711],{},"C++认为",[358,14709,14710],{},"万事万物都皆为对象","，对象上有其属性和行为",[10,14713,14714],{},[358,14715,14716],{},"例如：",[10,14718,14719],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[10,14721,14722],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[10,14724,14725],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[30,14727,14729],{"id":14728},"_81封装","8.1封装",[176,14731,14733],{"id":14732},"_811封装的意义","8.1.1封装的意义",[10,14735,14736],{},"封装是C++面向对象三大特性之一",[10,14738,14739],{},"封装的意义：",[1214,14741,14742,14745],{},[162,14743,14744],{},"将属性和行为作为一个整体，表现生活中的事物",[162,14746,14747],{},"将属性和行为加以权限控制",[10,14749,14750],{},[358,14751,14752],{},"封装意义一：",[10,14754,14755],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[10,14757,14758,13878,14760],{},[358,14759,5264],{},[42,14761,14762],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[159,14764,14765],{},[162,14766,14767],{},"**示例1：**设计一个圆类，求圆的周长",[35,14769,14771],{"className":197,"code":14770,"language":199,"meta":40,"style":40},"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",[42,14772,14773,14781,14785,14790,14795,14800,14805,14812,14817,14827,14831,14849,14853,14857,14865,14869,14874,14879,14884,14889,14900,14923],{"__ignoreMap":40},[45,14774,14775,14778],{"class":47,"line":48},[45,14776,14777],{"class":93},"class",[45,14779,14780],{"class":2046}," Circle\n",[45,14782,14783],{"class":47,"line":125},[45,14784,1629],{"class":51},[45,14786,14787],{"class":47,"line":1262},[45,14788,14789],{"class":267},"    \u002F\u002F访问权限\n",[45,14791,14792],{"class":47,"line":1277},[45,14793,14794],{"class":267},"    \u002F\u002F公共权限\n",[45,14796,14797],{"class":47,"line":1283},[45,14798,14799],{"class":93},"public:\n",[45,14801,14802],{"class":47,"line":1297},[45,14803,14804],{"class":267},"    \u002F\u002F属性\n",[45,14806,14807,14809],{"class":47,"line":1303},[45,14808,2068],{"class":93},[45,14810,14811],{"class":51}," m_r;\n",[45,14813,14814],{"class":47,"line":1394},[45,14815,14816],{"class":267},"    \u002F\u002F行为\n",[45,14818,14819,14822,14825],{"class":47,"line":1400},[45,14820,14821],{"class":93},"    double",[45,14823,14824],{"class":2046}," calculateZC",[45,14826,2059],{"class":51},[45,14828,14829],{"class":47,"line":1412},[45,14830,2113],{"class":51},[45,14832,14833,14836,14839,14841,14844,14846],{"class":47,"line":1695},[45,14834,14835],{"class":93},"        return",[45,14837,14838],{"class":257}," 2",[45,14840,663],{"class":93},[45,14842,14843],{"class":51},"PI",[45,14845,663],{"class":93},[45,14847,14848],{"class":51},"m_r;\n",[45,14850,14851],{"class":47,"line":1700},[45,14852,2270],{"class":51},[45,14854,14855],{"class":47,"line":1706},[45,14856,4078],{"class":51},[45,14858,14859,14861,14863],{"class":47,"line":1711},[45,14860,212],{"class":93},[45,14862,2056],{"class":2046},[45,14864,2059],{"class":51},[45,14866,14867],{"class":47,"line":1725},[45,14868,1629],{"class":51},[45,14870,14871],{"class":47,"line":1730},[45,14872,14873],{"class":267},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[45,14875,14876],{"class":47,"line":1736},[45,14877,14878],{"class":267},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[45,14880,14881],{"class":47,"line":1757},[45,14882,14883],{"class":51},"    Circle c1;\n",[45,14885,14886],{"class":47,"line":1762},[45,14887,14888],{"class":267},"    \u002F\u002F给圆对象 的属性进行赋值\n",[45,14890,14891,14894,14896,14898],{"class":47,"line":1776},[45,14892,14893],{"class":51},"    c1.m_r",[45,14895,254],{"class":93},[45,14897,654],{"class":257},[45,14899,1373],{"class":51},[45,14901,14902,14904,14906,14909,14911,14914,14917,14919,14921],{"class":47,"line":1781},[45,14903,1634],{"class":51},[45,14905,1251],{"class":93},[45,14907,14908],{"class":313},"\"圆的周长\"",[45,14910,1251],{"class":93},[45,14912,14913],{"class":51},"c1.",[45,14915,14916],{"class":2046},"calculateZC",[45,14918,2510],{"class":51},[45,14920,1251],{"class":93},[45,14922,1274],{"class":51},[45,14924,14925],{"class":47,"line":1810},[45,14926,1648],{"class":51},[10,14928,14929],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[35,14931,14933],{"className":197,"code":14932,"language":199,"meta":40,"style":40},"#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",[42,14934,14935,14941,14951,14957,14963,14967,14971,14976,14983,14988,15006,15010,15020,15024,15029,15045,15049,15059,15063,15068,15076,15080,15112,15116,15120,15128,15132,15137,15142,15156,15170,15179],{"__ignoreMap":40},[45,14936,14937,14939],{"class":47,"line":48},[45,14938,2032],{"class":93},[45,14940,2035],{"class":313},[45,14942,14943,14945,14947,14949],{"class":47,"line":125},[45,14944,2040],{"class":93},[45,14946,2043],{"class":93},[45,14948,2047],{"class":2046},[45,14950,1373],{"class":51},[45,14952,14953,14955],{"class":47,"line":1262},[45,14954,2032],{"class":93},[45,14956,7832],{"class":313},[45,14958,14959,14961],{"class":47,"line":1277},[45,14960,14777],{"class":93},[45,14962,7845],{"class":2046},[45,14964,14965],{"class":47,"line":1283},[45,14966,1629],{"class":51},[45,14968,14969],{"class":47,"line":1297},[45,14970,14799],{"class":93},[45,14972,14973],{"class":47,"line":1303},[45,14974,14975],{"class":51},"    string m_name;\n",[45,14977,14978,14980],{"class":47,"line":1394},[45,14979,2068],{"class":93},[45,14981,14982],{"class":51}," m_id;\n",[45,14984,14985],{"class":47,"line":1400},[45,14986,14987],{"class":267},"    \u002F\u002F赋值姓名\n",[45,14989,14990,14993,14996,14998,15001,15004],{"class":47,"line":1412},[45,14991,14992],{"class":93},"    void",[45,14994,14995],{"class":2046}," setName",[45,14997,209],{"class":51},[45,14999,15000],{"class":2046},"string",[45,15002,15003],{"class":5299}," name",[45,15005,215],{"class":51},[45,15007,15008],{"class":47,"line":1695},[45,15009,2113],{"class":51},[45,15011,15012,15015,15017],{"class":47,"line":1700},[45,15013,15014],{"class":51},"        m_name",[45,15016,254],{"class":93},[45,15018,15019],{"class":51},"name;\n",[45,15021,15022],{"class":47,"line":1706},[45,15023,2270],{"class":51},[45,15025,15026],{"class":47,"line":1711},[45,15027,15028],{"class":267},"    \u002F\u002F赋值学号\n",[45,15030,15031,15033,15036,15038,15040,15043],{"class":47,"line":1725},[45,15032,14992],{"class":93},[45,15034,15035],{"class":2046}," setId",[45,15037,209],{"class":51},[45,15039,212],{"class":93},[45,15041,15042],{"class":5299}," id",[45,15044,215],{"class":51},[45,15046,15047],{"class":47,"line":1730},[45,15048,2113],{"class":51},[45,15050,15051,15054,15056],{"class":47,"line":1736},[45,15052,15053],{"class":51},"        m_id",[45,15055,254],{"class":93},[45,15057,15058],{"class":51},"id;\n",[45,15060,15061],{"class":47,"line":1757},[45,15062,2270],{"class":51},[45,15064,15065],{"class":47,"line":1762},[45,15066,15067],{"class":267},"    \u002F\u002F打印学生信息\n",[45,15069,15070,15072,15074],{"class":47,"line":1776},[45,15071,14992],{"class":93},[45,15073,9698],{"class":2046},[45,15075,2059],{"class":51},[45,15077,15078],{"class":47,"line":1781},[45,15079,2113],{"class":51},[45,15081,15082,15084,15086,15089,15091,15094,15096,15098,15100,15103,15105,15108,15110],{"class":47,"line":1810},[45,15083,3534],{"class":51},[45,15085,1251],{"class":93},[45,15087,15088],{"class":313},"\"姓名：\"",[45,15090,1251],{"class":93},[45,15092,15093],{"class":51},"m_name",[45,15095,1251],{"class":93},[45,15097,4442],{"class":313},[45,15099,1251],{"class":93},[45,15101,15102],{"class":313},"\"学号：\"",[45,15104,1251],{"class":93},[45,15106,15107],{"class":51},"m_id",[45,15109,1251],{"class":93},[45,15111,1274],{"class":51},[45,15113,15114],{"class":47,"line":1815},[45,15115,2270],{"class":51},[45,15117,15118],{"class":47,"line":1832},[45,15119,4078],{"class":51},[45,15121,15122,15124,15126],{"class":47,"line":1837},[45,15123,212],{"class":93},[45,15125,2056],{"class":2046},[45,15127,2059],{"class":51},[45,15129,15130],{"class":47,"line":1842},[45,15131,1629],{"class":51},[45,15133,15134],{"class":47,"line":1847},[45,15135,15136],{"class":267},"    \u002F\u002F实例化\n",[45,15138,15139],{"class":47,"line":1861},[45,15140,15141],{"class":51},"    Student s1;\n",[45,15143,15144,15147,15150,15152,15154],{"class":47,"line":1866},[45,15145,15146],{"class":51},"    s1.",[45,15148,15149],{"class":2046},"setName",[45,15151,209],{"class":51},[45,15153,7999],{"class":313},[45,15155,2802],{"class":51},[45,15157,15158,15160,15163,15165,15168],{"class":47,"line":2660},[45,15159,15146],{"class":51},[45,15161,15162],{"class":2046},"setId",[45,15164,209],{"class":51},[45,15166,15167],{"class":257},"123456",[45,15169,2802],{"class":51},[45,15171,15172,15174,15177],{"class":47,"line":2674},[45,15173,15146],{"class":51},[45,15175,15176],{"class":2046},"printInfo",[45,15178,5719],{"class":51},[45,15180,15181],{"class":47,"line":2682},[45,15182,1648],{"class":51},[10,15184,15185],{},"类中的属性和行为统称为成员",[10,15187,15188],{},"属性：成员属性(成员变量)",[10,15190,15191],{},"方法：成员函数(成员方法)",[10,15193,15194],{},[358,15195,15196],{},"封装意义二：",[10,15198,15199],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[10,15201,15202],{},"访问权限有三种：",[159,15204,15205,15208,15211],{},[162,15206,15207],{},"public        公共权限",[162,15209,15210],{},"protected 保护权限",[162,15212,15213],{},"private      私有权限",[10,15215,15216],{},[358,15217,15218],{},"示例：",[35,15220,15222],{"className":10024,"code":15221,"language":10026,"meta":40,"style":40},"\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",[42,15223,15224,15229,15234,15239,15244,15248,15255,15259,15264,15268,15273,15277,15282,15287,15292,15296,15301,15306,15313,15317,15321,15329,15333,15344,15356,15368,15372,15376,15380,15388,15392,15397,15409,15417,15425,15429,15439,15443,15451],{"__ignoreMap":40},[45,15225,15226],{"class":47,"line":48},[45,15227,15228],{"class":267},"\u002F\u002F三种权限\n",[45,15230,15231],{"class":47,"line":125},[45,15232,15233],{"class":267},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[45,15235,15236],{"class":47,"line":1262},[45,15237,15238],{"class":267},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[45,15240,15241],{"class":47,"line":1277},[45,15242,15243],{"class":267},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[45,15245,15246],{"class":47,"line":1283},[45,15247,2483],{"emptyLinePlaceholder":133},[45,15249,15250,15252],{"class":47,"line":1297},[45,15251,14777],{"class":93},[45,15253,15254],{"class":2046}," Person\n",[45,15256,15257],{"class":47,"line":1303},[45,15258,1629],{"class":51},[45,15260,15261],{"class":47,"line":1394},[45,15262,15263],{"class":267},"    \u002F\u002F姓名  公共权限\n",[45,15265,15266],{"class":47,"line":1400},[45,15267,14799],{"class":93},[45,15269,15270],{"class":47,"line":1412},[45,15271,15272],{"class":51},"    string m_Name;\n",[45,15274,15275],{"class":47,"line":1695},[45,15276,2483],{"emptyLinePlaceholder":133},[45,15278,15279],{"class":47,"line":1700},[45,15280,15281],{"class":267},"    \u002F\u002F汽车  保护权限\n",[45,15283,15284],{"class":47,"line":1706},[45,15285,15286],{"class":93},"protected:\n",[45,15288,15289],{"class":47,"line":1711},[45,15290,15291],{"class":51},"    string m_Car;\n",[45,15293,15294],{"class":47,"line":1725},[45,15295,2483],{"emptyLinePlaceholder":133},[45,15297,15298],{"class":47,"line":1730},[45,15299,15300],{"class":267},"    \u002F\u002F银行卡密码  私有权限\n",[45,15302,15303],{"class":47,"line":1736},[45,15304,15305],{"class":93},"private:\n",[45,15307,15308,15310],{"class":47,"line":1757},[45,15309,2068],{"class":93},[45,15311,15312],{"class":51}," m_Password;\n",[45,15314,15315],{"class":47,"line":1762},[45,15316,2483],{"emptyLinePlaceholder":133},[45,15318,15319],{"class":47,"line":1776},[45,15320,14799],{"class":93},[45,15322,15323,15325,15327],{"class":47,"line":1781},[45,15324,14992],{"class":93},[45,15326,11468],{"class":2046},[45,15328,2059],{"class":51},[45,15330,15331],{"class":47,"line":1810},[45,15332,2113],{"class":51},[45,15334,15335,15338,15340,15342],{"class":47,"line":1815},[45,15336,15337],{"class":51},"        m_Name ",[45,15339,254],{"class":93},[45,15341,9021],{"class":313},[45,15343,1373],{"class":51},[45,15345,15346,15349,15351,15354],{"class":47,"line":1832},[45,15347,15348],{"class":51},"        m_Car ",[45,15350,254],{"class":93},[45,15352,15353],{"class":313}," \"拖拉机\"",[45,15355,1373],{"class":51},[45,15357,15358,15361,15363,15366],{"class":47,"line":1837},[45,15359,15360],{"class":51},"        m_Password ",[45,15362,254],{"class":93},[45,15364,15365],{"class":257}," 123456",[45,15367,1373],{"class":51},[45,15369,15370],{"class":47,"line":1842},[45,15371,2270],{"class":51},[45,15373,15374],{"class":47,"line":1847},[45,15375,4078],{"class":51},[45,15377,15378],{"class":47,"line":1861},[45,15379,2483],{"emptyLinePlaceholder":133},[45,15381,15382,15384,15386],{"class":47,"line":1866},[45,15383,212],{"class":93},[45,15385,2056],{"class":2046},[45,15387,10936],{"class":51},[45,15389,15390],{"class":47,"line":2660},[45,15391,2483],{"emptyLinePlaceholder":133},[45,15393,15394],{"class":47,"line":2674},[45,15395,15396],{"class":51},"    Person p;\n",[45,15398,15399,15402,15404,15407],{"class":47,"line":2682},[45,15400,15401],{"class":51},"    p.m_Name ",[45,15403,254],{"class":93},[45,15405,15406],{"class":313}," \"李四\"",[45,15408,1373],{"class":51},[45,15410,15411,15414],{"class":47,"line":2687},[45,15412,15413],{"class":267},"    \u002F\u002Fp.m_Car = \"奔驰\";",[45,15415,15416],{"class":267},"  \u002F\u002F保护权限类外访问不到\n",[45,15418,15419,15422],{"class":47,"line":2693},[45,15420,15421],{"class":267},"    \u002F\u002Fp.m_Password = 123;",[45,15423,15424],{"class":267}," \u002F\u002F私有权限类外访问不到\n",[45,15426,15427],{"class":47,"line":2699},[45,15428,2483],{"emptyLinePlaceholder":133},[45,15430,15431,15433,15435,15437],{"class":47,"line":2704},[45,15432,2386],{"class":2046},[45,15434,209],{"class":51},[45,15436,2391],{"class":313},[45,15438,2802],{"class":51},[45,15440,15441],{"class":47,"line":8031},[45,15442,2483],{"emptyLinePlaceholder":133},[45,15444,15445,15447,15449],{"class":47,"line":8055},[45,15446,4173],{"class":93},[45,15448,4176],{"class":257},[45,15450,1373],{"class":51},[45,15452,15453],{"class":47,"line":8060},[45,15454,1648],{"class":51},[176,15456,15458],{"id":15457},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[10,15460,15461,15462,15465,15466],{},"在C++中 struct和class唯一的",[358,15463,15464],{},"区别","就在于 ",[358,15467,15468],{},"默认的访问权限不同",[10,15470,15471],{},"区别：",[1214,15473,15474,15477],{},[162,15475,15476],{},"struct 默认权限为公共",[162,15478,15479],{},"class   默认权限为私有",[35,15481,15483],{"className":10024,"code":15482,"language":10026,"meta":40,"style":40},"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",[42,15484,15485,15492,15496,15506,15510,15514,15521,15525,15535,15539,15543,15551,15555,15560,15574,15578,15583,15597,15601,15611,15615,15623],{"__ignoreMap":40},[45,15486,15487,15489],{"class":47,"line":48},[45,15488,14777],{"class":93},[45,15490,15491],{"class":2046}," C1\n",[45,15493,15494],{"class":47,"line":125},[45,15495,1629],{"class":51},[45,15497,15498,15500,15503],{"class":47,"line":1262},[45,15499,2068],{"class":93},[45,15501,15502],{"class":51},"  m_A;",[45,15504,15505],{"class":267}," \u002F\u002F默认是私有权限\n",[45,15507,15508],{"class":47,"line":1277},[45,15509,4078],{"class":51},[45,15511,15512],{"class":47,"line":1283},[45,15513,2483],{"emptyLinePlaceholder":133},[45,15515,15516,15518],{"class":47,"line":1297},[45,15517,7842],{"class":93},[45,15519,15520],{"class":2046}," C2\n",[45,15522,15523],{"class":47,"line":1303},[45,15524,1629],{"class":51},[45,15526,15527,15529,15532],{"class":47,"line":1394},[45,15528,2068],{"class":93},[45,15530,15531],{"class":51}," m_A;",[45,15533,15534],{"class":267},"  \u002F\u002F默认是公共权限\n",[45,15536,15537],{"class":47,"line":1400},[45,15538,4078],{"class":51},[45,15540,15541],{"class":47,"line":1412},[45,15542,2483],{"emptyLinePlaceholder":133},[45,15544,15545,15547,15549],{"class":47,"line":1695},[45,15546,212],{"class":93},[45,15548,2056],{"class":2046},[45,15550,10936],{"class":51},[45,15552,15553],{"class":47,"line":1700},[45,15554,2483],{"emptyLinePlaceholder":133},[45,15556,15557],{"class":47,"line":1706},[45,15558,15559],{"class":51},"    C1 c1;\n",[45,15561,15562,15565,15567,15569,15571],{"class":47,"line":1711},[45,15563,15564],{"class":51},"    c1.m_A ",[45,15566,254],{"class":93},[45,15568,2121],{"class":257},[45,15570,264],{"class":51},[45,15572,15573],{"class":267}," \u002F\u002F错误，访问权限是私有\n",[45,15575,15576],{"class":47,"line":1725},[45,15577,2483],{"emptyLinePlaceholder":133},[45,15579,15580],{"class":47,"line":1730},[45,15581,15582],{"class":51},"    C2 c2;\n",[45,15584,15585,15588,15590,15592,15594],{"class":47,"line":1736},[45,15586,15587],{"class":51},"    c2.m_A ",[45,15589,254],{"class":93},[45,15591,2121],{"class":257},[45,15593,264],{"class":51},[45,15595,15596],{"class":267}," \u002F\u002F正确，访问权限是公共\n",[45,15598,15599],{"class":47,"line":1757},[45,15600,2483],{"emptyLinePlaceholder":133},[45,15602,15603,15605,15607,15609],{"class":47,"line":1762},[45,15604,2386],{"class":2046},[45,15606,209],{"class":51},[45,15608,2391],{"class":313},[45,15610,2802],{"class":51},[45,15612,15613],{"class":47,"line":1776},[45,15614,2483],{"emptyLinePlaceholder":133},[45,15616,15617,15619,15621],{"class":47,"line":1781},[45,15618,4173],{"class":93},[45,15620,4176],{"class":257},[45,15622,1373],{"class":51},[45,15624,15625],{"class":47,"line":1810},[45,15626,1648],{"class":51},[176,15628,15630],{"id":15629},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[10,15632,15633],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[10,15635,15636],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[10,15638,15639],{},[358,15640,15218],{},[35,15642,15644],{"className":10024,"code":15643,"language":10026,"meta":40,"style":40},"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",[42,15645,15646,15656,15660,15664,15669,15683,15692,15696,15706,15710,15717,15721,15725,15729,15734,15743,15750,15754,15759,15775,15798,15811,15818,15822,15831,15835,15839,15844,15860,15870,15874,15878,15882,15890,15894,15904,15908,15916,15920,15924,15932,15936,15940,15945,15958,15981,15985,15990,16003,16025,16029,16034,16048,16056,16060,16070,16074,16082],{"__ignoreMap":40},[45,15647,15648,15650,15653],{"class":47,"line":48},[45,15649,14777],{"class":93},[45,15651,15652],{"class":2046}," Person",[45,15654,15655],{"class":51}," {\n",[45,15657,15658],{"class":47,"line":125},[45,15659,14799],{"class":93},[45,15661,15662],{"class":47,"line":1262},[45,15663,2483],{"emptyLinePlaceholder":133},[45,15665,15666],{"class":47,"line":1277},[45,15667,15668],{"class":267},"    \u002F\u002F姓名设置可读可写\n",[45,15670,15671,15673,15675,15677,15679,15681],{"class":47,"line":1283},[45,15672,14992],{"class":93},[45,15674,14995],{"class":2046},[45,15676,209],{"class":51},[45,15678,15000],{"class":2046},[45,15680,15003],{"class":5299},[45,15682,12525],{"class":51},[45,15684,15685,15687,15689],{"class":47,"line":1297},[45,15686,15337],{"class":51},[45,15688,254],{"class":93},[45,15690,15691],{"class":51}," name;\n",[45,15693,15694],{"class":47,"line":1303},[45,15695,2270],{"class":51},[45,15697,15698,15701,15704],{"class":47,"line":1394},[45,15699,15700],{"class":2046},"    string",[45,15702,15703],{"class":2046}," getName",[45,15705,2059],{"class":51},[45,15707,15708],{"class":47,"line":1400},[45,15709,2113],{"class":51},[45,15711,15712,15714],{"class":47,"line":1412},[45,15713,14835],{"class":93},[45,15715,15716],{"class":51}," m_Name;\n",[45,15718,15719],{"class":47,"line":1695},[45,15720,2270],{"class":51},[45,15722,15723],{"class":47,"line":1700},[45,15724,2483],{"emptyLinePlaceholder":133},[45,15726,15727],{"class":47,"line":1706},[45,15728,2483],{"emptyLinePlaceholder":133},[45,15730,15731],{"class":47,"line":1711},[45,15732,15733],{"class":267},"    \u002F\u002F获取年龄 \n",[45,15735,15736,15738,15741],{"class":47,"line":1725},[45,15737,2068],{"class":93},[45,15739,15740],{"class":2046}," getAge",[45,15742,10936],{"class":51},[45,15744,15745,15747],{"class":47,"line":1730},[45,15746,14835],{"class":93},[45,15748,15749],{"class":51}," m_Age;\n",[45,15751,15752],{"class":47,"line":1736},[45,15753,2270],{"class":51},[45,15755,15756],{"class":47,"line":1757},[45,15757,15758],{"class":267},"    \u002F\u002F设置年龄\n",[45,15760,15761,15763,15766,15768,15770,15773],{"class":47,"line":1762},[45,15762,14992],{"class":93},[45,15764,15765],{"class":2046}," setAge",[45,15767,209],{"class":51},[45,15769,212],{"class":93},[45,15771,15772],{"class":5299}," age",[45,15774,12525],{"class":51},[45,15776,15777,15779,15782,15784,15786,15788,15791,15793,15796],{"class":47,"line":1776},[45,15778,2580],{"class":93},[45,15780,15781],{"class":51}," (age ",[45,15783,1117],{"class":93},[45,15785,4176],{"class":257},[45,15787,3338],{"class":93},[45,15789,15790],{"class":51}," age ",[45,15792,1167],{"class":93},[45,15794,15795],{"class":257}," 150",[45,15797,12525],{"class":51},[45,15799,15800,15802,15804,15807,15809],{"class":47,"line":1781},[45,15801,9802],{"class":51},[45,15803,1251],{"class":93},[45,15805,15806],{"class":313}," \"你个老妖精!\"",[45,15808,1527],{"class":93},[45,15810,8923],{"class":51},[45,15812,15813,15816],{"class":47,"line":1810},[45,15814,15815],{"class":93},"            return",[45,15817,1373],{"class":51},[45,15819,15820],{"class":47,"line":1815},[45,15821,2612],{"class":51},[45,15823,15824,15827,15829],{"class":47,"line":1832},[45,15825,15826],{"class":51},"        m_Age ",[45,15828,254],{"class":93},[45,15830,7880],{"class":51},[45,15832,15833],{"class":47,"line":1837},[45,15834,2270],{"class":51},[45,15836,15837],{"class":47,"line":1842},[45,15838,2483],{"emptyLinePlaceholder":133},[45,15840,15841],{"class":47,"line":1847},[45,15842,15843],{"class":267},"    \u002F\u002F情人设置为只写\n",[45,15845,15846,15848,15851,15853,15855,15858],{"class":47,"line":1861},[45,15847,14992],{"class":93},[45,15849,15850],{"class":2046}," setLover",[45,15852,209],{"class":51},[45,15854,15000],{"class":2046},[45,15856,15857],{"class":5299}," lover",[45,15859,12525],{"class":51},[45,15861,15862,15865,15867],{"class":47,"line":1866},[45,15863,15864],{"class":51},"        m_Lover ",[45,15866,254],{"class":93},[45,15868,15869],{"class":51}," lover;\n",[45,15871,15872],{"class":47,"line":2660},[45,15873,2270],{"class":51},[45,15875,15876],{"class":47,"line":2674},[45,15877,2483],{"emptyLinePlaceholder":133},[45,15879,15880],{"class":47,"line":2682},[45,15881,15305],{"class":93},[45,15883,15884,15887],{"class":47,"line":2687},[45,15885,15886],{"class":51},"    string m_Name;",[45,15888,15889],{"class":267}," \u002F\u002F可读可写  姓名\n",[45,15891,15892],{"class":47,"line":2693},[45,15893,13293],{"class":51},[45,15895,15896,15898,15901],{"class":47,"line":2699},[45,15897,2068],{"class":93},[45,15899,15900],{"class":51}," m_Age;",[45,15902,15903],{"class":267}," \u002F\u002F只读  年龄\n",[45,15905,15906],{"class":47,"line":2704},[45,15907,2483],{"emptyLinePlaceholder":133},[45,15909,15910,15913],{"class":47,"line":8031},[45,15911,15912],{"class":51},"    string m_Lover;",[45,15914,15915],{"class":267}," \u002F\u002F只写  情人\n",[45,15917,15918],{"class":47,"line":8055},[45,15919,4078],{"class":51},[45,15921,15922],{"class":47,"line":8060},[45,15923,2483],{"emptyLinePlaceholder":133},[45,15925,15926,15928,15930],{"class":47,"line":8066},[45,15927,212],{"class":93},[45,15929,2056],{"class":2046},[45,15931,10936],{"class":51},[45,15933,15934],{"class":47,"line":8093},[45,15935,2483],{"emptyLinePlaceholder":133},[45,15937,15938],{"class":47,"line":8098},[45,15939,15396],{"class":51},[45,15941,15942],{"class":47,"line":8104},[45,15943,15944],{"class":267},"    \u002F\u002F姓名设置\n",[45,15946,15947,15950,15952,15954,15956],{"class":47,"line":8116},[45,15948,15949],{"class":51},"    p.",[45,15951,15149],{"class":2046},[45,15953,209],{"class":51},[45,15955,7999],{"class":313},[45,15957,2802],{"class":51},[45,15959,15960,15962,15964,15967,15969,15972,15975,15977,15979],{"class":47,"line":8128},[45,15961,6612],{"class":51},[45,15963,1251],{"class":93},[45,15965,15966],{"class":313}," \"姓名： \"",[45,15968,1527],{"class":93},[45,15970,15971],{"class":51}," p.",[45,15973,15974],{"class":2046},"getName",[45,15976,13133],{"class":51},[45,15978,1251],{"class":93},[45,15980,8923],{"class":51},[45,15982,15983],{"class":47,"line":8140},[45,15984,2483],{"emptyLinePlaceholder":133},[45,15986,15987],{"class":47,"line":9799},[45,15988,15989],{"class":267},"    \u002F\u002F年龄设置\n",[45,15991,15992,15994,15997,15999,16001],{"class":47,"line":9824},[45,15993,15949],{"class":51},[45,15995,15996],{"class":2046},"setAge",[45,15998,209],{"class":51},[45,16000,863],{"class":257},[45,16002,2802],{"class":51},[45,16004,16005,16007,16009,16012,16014,16016,16019,16021,16023],{"class":47,"line":9847},[45,16006,6612],{"class":51},[45,16008,1251],{"class":93},[45,16010,16011],{"class":313}," \"年龄： \"",[45,16013,1527],{"class":93},[45,16015,15971],{"class":51},[45,16017,16018],{"class":2046},"getAge",[45,16020,13133],{"class":51},[45,16022,1251],{"class":93},[45,16024,8923],{"class":51},[45,16026,16027],{"class":47,"line":9871},[45,16028,2483],{"emptyLinePlaceholder":133},[45,16030,16031],{"class":47,"line":9876},[45,16032,16033],{"class":267},"    \u002F\u002F情人设置\n",[45,16035,16036,16038,16041,16043,16046],{"class":47,"line":9881},[45,16037,15949],{"class":51},[45,16039,16040],{"class":2046},"setLover",[45,16042,209],{"class":51},[45,16044,16045],{"class":313},"\"苍井\"",[45,16047,2802],{"class":51},[45,16049,16050,16053],{"class":47,"line":9886},[45,16051,16052],{"class":267},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[45,16054,16055],{"class":267},"  \u002F\u002F只写属性，不可以读取\n",[45,16057,16058],{"class":47,"line":9895},[45,16059,2483],{"emptyLinePlaceholder":133},[45,16061,16062,16064,16066,16068],{"class":47,"line":9900},[45,16063,2386],{"class":2046},[45,16065,209],{"class":51},[45,16067,2391],{"class":313},[45,16069,2802],{"class":51},[45,16071,16072],{"class":47,"line":9906},[45,16073,2483],{"emptyLinePlaceholder":133},[45,16075,16076,16078,16080],{"class":47,"line":9927},[45,16077,4173],{"class":93},[45,16079,4176],{"class":257},[45,16081,1373],{"class":51},[45,16083,16084],{"class":47,"line":9933},[45,16085,1648],{"class":51},[176,16087,16089],{"id":16088},"_814封装案例","8.1.4封装案例",[159,16091,16092],{},[162,16093,16094,16097],{},[358,16095,16096],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1214,16099,16100,16103],{},[162,16101,16102],{},"求出立方体的面积和体积",[162,16104,16105],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[35,16107,16109],{"className":197,"code":16108,"language":199,"meta":40,"style":40},"#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",[42,16110,16111,16117,16127,16134,16138,16142,16147,16177,16181,16191,16201,16211,16215,16224,16228,16264,16268,16277,16281,16297,16301,16306,16315,16319,16326,16330,16339,16343,16350,16354,16363,16367,16374,16378,16383,16400,16404,16450,16454,16463,16467,16471,16475,16484,16488,16492,16497,16501,16507,16513,16519,16523,16527,16532,16554,16558,16612,16616,16624,16628,16633,16638,16651,16658,16674,16685,16691,16714,16720,16743,16757,16777,16783,16794,16817,16839,16844,16850,16864,16877,16882,16896,16901,16907,16912,16926,16931,16936,16950,16962,16967,16980,16985,16990,16995,17008,17013],{"__ignoreMap":40},[45,16112,16113,16115],{"class":47,"line":48},[45,16114,2032],{"class":93},[45,16116,2035],{"class":313},[45,16118,16119,16121,16123,16125],{"class":47,"line":125},[45,16120,2040],{"class":93},[45,16122,2043],{"class":93},[45,16124,2047],{"class":2046},[45,16126,1373],{"class":51},[45,16128,16129,16131],{"class":47,"line":1262},[45,16130,14777],{"class":93},[45,16132,16133],{"class":2046}," Cube\n",[45,16135,16136],{"class":47,"line":1277},[45,16137,1629],{"class":51},[45,16139,16140],{"class":47,"line":1283},[45,16141,14799],{"class":93},[45,16143,16144],{"class":47,"line":1297},[45,16145,16146],{"class":267},"    \u002F\u002F输入长宽高\n",[45,16148,16149,16151,16154,16156,16158,16161,16163,16165,16168,16170,16172,16175],{"class":47,"line":1303},[45,16150,14992],{"class":93},[45,16152,16153],{"class":2046}," setLwh",[45,16155,209],{"class":51},[45,16157,212],{"class":93},[45,16159,16160],{"class":5299}," l",[45,16162,586],{"class":51},[45,16164,212],{"class":93},[45,16166,16167],{"class":5299}," w",[45,16169,586],{"class":51},[45,16171,212],{"class":93},[45,16173,16174],{"class":5299}," h",[45,16176,215],{"class":51},[45,16178,16179],{"class":47,"line":1394},[45,16180,2113],{"class":51},[45,16182,16183,16186,16188],{"class":47,"line":1400},[45,16184,16185],{"class":51},"        m_L",[45,16187,254],{"class":93},[45,16189,16190],{"class":51},"l;\n",[45,16192,16193,16196,16198],{"class":47,"line":1412},[45,16194,16195],{"class":51},"        m_W",[45,16197,254],{"class":93},[45,16199,16200],{"class":51},"w;\n",[45,16202,16203,16206,16208],{"class":47,"line":1695},[45,16204,16205],{"class":51},"        m_H",[45,16207,254],{"class":93},[45,16209,16210],{"class":51},"h;\n",[45,16212,16213],{"class":47,"line":1700},[45,16214,2270],{"class":51},[45,16216,16217,16219,16222],{"class":47,"line":1706},[45,16218,2068],{"class":93},[45,16220,16221],{"class":2046}," mianji",[45,16223,2059],{"class":51},[45,16225,16226],{"class":47,"line":1711},[45,16227,2113],{"class":51},[45,16229,16230,16232,16234,16236,16239,16241,16244,16246,16249,16251,16254,16256,16259,16261],{"class":47,"line":1725},[45,16231,14835],{"class":93},[45,16233,14838],{"class":257},[45,16235,663],{"class":93},[45,16237,16238],{"class":51},"(m_L",[45,16240,663],{"class":93},[45,16242,16243],{"class":51},"m_W ",[45,16245,689],{"class":93},[45,16247,16248],{"class":51}," m_L",[45,16250,663],{"class":93},[45,16252,16253],{"class":51},"m_H ",[45,16255,689],{"class":93},[45,16257,16258],{"class":51}," m_W",[45,16260,663],{"class":93},[45,16262,16263],{"class":51},"m_H);\n",[45,16265,16266],{"class":47,"line":1730},[45,16267,2270],{"class":51},[45,16269,16270,16272,16275],{"class":47,"line":1736},[45,16271,2068],{"class":93},[45,16273,16274],{"class":2046}," tiji",[45,16276,2059],{"class":51},[45,16278,16279],{"class":47,"line":1757},[45,16280,2113],{"class":51},[45,16282,16283,16285,16287,16289,16292,16294],{"class":47,"line":1762},[45,16284,14835],{"class":93},[45,16286,16248],{"class":51},[45,16288,663],{"class":93},[45,16290,16291],{"class":51},"m_W",[45,16293,663],{"class":93},[45,16295,16296],{"class":51},"m_H;\n",[45,16298,16299],{"class":47,"line":1776},[45,16300,2270],{"class":51},[45,16302,16303],{"class":47,"line":1781},[45,16304,16305],{"class":267},"    \u002F\u002F获取长宽高\n",[45,16307,16308,16310,16313],{"class":47,"line":1810},[45,16309,2068],{"class":93},[45,16311,16312],{"class":2046}," getLength",[45,16314,2059],{"class":51},[45,16316,16317],{"class":47,"line":1815},[45,16318,2113],{"class":51},[45,16320,16321,16323],{"class":47,"line":1832},[45,16322,14835],{"class":93},[45,16324,16325],{"class":51}," m_L;\n",[45,16327,16328],{"class":47,"line":1837},[45,16329,2270],{"class":51},[45,16331,16332,16334,16337],{"class":47,"line":1842},[45,16333,2068],{"class":93},[45,16335,16336],{"class":2046}," getWidth",[45,16338,2059],{"class":51},[45,16340,16341],{"class":47,"line":1847},[45,16342,2113],{"class":51},[45,16344,16345,16347],{"class":47,"line":1861},[45,16346,14835],{"class":93},[45,16348,16349],{"class":51}," m_W;\n",[45,16351,16352],{"class":47,"line":1866},[45,16353,2270],{"class":51},[45,16355,16356,16358,16361],{"class":47,"line":2660},[45,16357,2068],{"class":93},[45,16359,16360],{"class":2046}," getHeight",[45,16362,2059],{"class":51},[45,16364,16365],{"class":47,"line":2674},[45,16366,2113],{"class":51},[45,16368,16369,16371],{"class":47,"line":2682},[45,16370,14835],{"class":93},[45,16372,16373],{"class":51}," m_H;\n",[45,16375,16376],{"class":47,"line":2687},[45,16377,2270],{"class":51},[45,16379,16380],{"class":47,"line":2693},[45,16381,16382],{"class":267},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[45,16384,16385,16388,16391,16393,16396,16398],{"class":47,"line":2699},[45,16386,16387],{"class":93},"    bool",[45,16389,16390],{"class":2046}," isEqual",[45,16392,209],{"class":51},[45,16394,16395],{"class":2046},"Cube",[45,16397,2932],{"class":5299},[45,16399,215],{"class":51},[45,16401,16402],{"class":47,"line":2704},[45,16403,2113],{"class":51},[45,16405,16406,16408,16411,16414,16416,16418,16421,16423,16426,16429,16431,16433,16436,16438,16440,16443,16445,16447],{"class":47,"line":8031},[45,16407,2580],{"class":93},[45,16409,16410],{"class":51}," (c.",[45,16412,16413],{"class":2046},"getLength",[45,16415,13133],{"class":51},[45,16417,3032],{"class":93},[45,16419,16420],{"class":51}," m_L ",[45,16422,1798],{"class":93},[45,16424,16425],{"class":51}," c.",[45,16427,16428],{"class":2046},"getWidth",[45,16430,13133],{"class":51},[45,16432,3032],{"class":93},[45,16434,16435],{"class":51}," m_W ",[45,16437,1798],{"class":93},[45,16439,16425],{"class":51},[45,16441,16442],{"class":2046},"getHeight",[45,16444,13133],{"class":51},[45,16446,3032],{"class":93},[45,16448,16449],{"class":51}," m_H)\n",[45,16451,16452],{"class":47,"line":8055},[45,16453,2593],{"class":51},[45,16455,16456,16458,16461],{"class":47,"line":8060},[45,16457,15815],{"class":93},[45,16459,16460],{"class":257}," true",[45,16462,1373],{"class":51},[45,16464,16465],{"class":47,"line":8066},[45,16466,2612],{"class":51},[45,16468,16469],{"class":47,"line":8093},[45,16470,2653],{"class":93},[45,16472,16473],{"class":47,"line":8098},[45,16474,2593],{"class":51},[45,16476,16477,16479,16482],{"class":47,"line":8104},[45,16478,15815],{"class":93},[45,16480,16481],{"class":257}," false",[45,16483,1373],{"class":51},[45,16485,16486],{"class":47,"line":8116},[45,16487,2612],{"class":51},[45,16489,16490],{"class":47,"line":8128},[45,16491,2270],{"class":51},[45,16493,16494],{"class":47,"line":8140},[45,16495,16496],{"class":267},"    \u002F\u002F私有属性\n",[45,16498,16499],{"class":47,"line":9799},[45,16500,15305],{"class":93},[45,16502,16503,16505],{"class":47,"line":9824},[45,16504,2068],{"class":93},[45,16506,16325],{"class":51},[45,16508,16509,16511],{"class":47,"line":9847},[45,16510,2068],{"class":93},[45,16512,16349],{"class":51},[45,16514,16515,16517],{"class":47,"line":9871},[45,16516,2068],{"class":93},[45,16518,16373],{"class":51},[45,16520,16521],{"class":47,"line":9876},[45,16522,2483],{"emptyLinePlaceholder":133},[45,16524,16525],{"class":47,"line":9881},[45,16526,4078],{"class":51},[45,16528,16529],{"class":47,"line":9886},[45,16530,16531],{"class":267},"\u002F\u002F全局函数判断两个立方体是否相等\n",[45,16533,16534,16536,16538,16540,16542,16545,16547,16549,16552],{"class":47,"line":9895},[45,16535,1437],{"class":93},[45,16537,16390],{"class":2046},[45,16539,209],{"class":51},[45,16541,16395],{"class":2046},[45,16543,16544],{"class":5299}," c1",[45,16546,586],{"class":51},[45,16548,16395],{"class":2046},[45,16550,16551],{"class":5299}," c2",[45,16553,215],{"class":51},[45,16555,16556],{"class":47,"line":9900},[45,16557,1629],{"class":51},[45,16559,16560,16562,16565,16567,16569,16571,16574,16576,16579,16581,16583,16585,16587,16589,16591,16593,16595,16597,16599,16601,16603,16605,16607,16609],{"class":47,"line":9906},[45,16561,4173],{"class":93},[45,16563,16564],{"class":51}," (c1.",[45,16566,16413],{"class":2046},[45,16568,13133],{"class":51},[45,16570,3032],{"class":93},[45,16572,16573],{"class":51}," c2.",[45,16575,16413],{"class":2046},[45,16577,16578],{"class":51},"()) ",[45,16580,1798],{"class":93},[45,16582,16564],{"class":51},[45,16584,16428],{"class":2046},[45,16586,13133],{"class":51},[45,16588,3032],{"class":93},[45,16590,16573],{"class":51},[45,16592,16428],{"class":2046},[45,16594,16578],{"class":51},[45,16596,1798],{"class":93},[45,16598,16564],{"class":51},[45,16600,16442],{"class":2046},[45,16602,13133],{"class":51},[45,16604,3032],{"class":93},[45,16606,16573],{"class":51},[45,16608,16442],{"class":2046},[45,16610,16611],{"class":51},"());\n",[45,16613,16614],{"class":47,"line":9927},[45,16615,1648],{"class":51},[45,16617,16618,16620,16622],{"class":47,"line":9933},[45,16619,212],{"class":93},[45,16621,2056],{"class":2046},[45,16623,2059],{"class":51},[45,16625,16626],{"class":47,"line":9947},[45,16627,1629],{"class":51},[45,16629,16630],{"class":47,"line":9953},[45,16631,16632],{"class":51},"    Cube c1;\n",[45,16634,16635],{"class":47,"line":9980},[45,16636,16637],{"class":267},"    \u002F\u002F输入立方体的长宽高\n",[45,16639,16640,16642,16644,16647,16649],{"class":47,"line":9989},[45,16641,1634],{"class":51},[45,16643,1251],{"class":93},[45,16645,16646],{"class":313},"\"请输入第一个立方体的长、宽、高：\"",[45,16648,1251],{"class":93},[45,16650,1274],{"class":51},[45,16652,16653,16655],{"class":47,"line":9995},[45,16654,2068],{"class":93},[45,16656,16657],{"class":51}," l,w,h,l1,w1,h1;\n",[45,16659,16660,16662,16664,16666,16668,16670,16672],{"class":47,"line":10003},[45,16661,2095],{"class":51},[45,16663,1512],{"class":93},[45,16665,726],{"class":51},[45,16667,1512],{"class":93},[45,16669,1002],{"class":51},[45,16671,1512],{"class":93},[45,16673,16210],{"class":51},[45,16675,16676,16679,16682],{"class":47,"line":10008},[45,16677,16678],{"class":51},"    c1.",[45,16680,16681],{"class":2046},"setLwh",[45,16683,16684],{"class":51},"(l,w,h);\n",[45,16686,16688],{"class":47,"line":16687},66,[45,16689,16690],{"class":267},"    \u002F\u002F面积\n",[45,16692,16694,16696,16698,16701,16703,16705,16708,16710,16712],{"class":47,"line":16693},67,[45,16695,1634],{"class":51},[45,16697,1251],{"class":93},[45,16699,16700],{"class":313},"\"立方体的表面积为：\"",[45,16702,1251],{"class":93},[45,16704,14913],{"class":51},[45,16706,16707],{"class":2046},"mianji",[45,16709,2510],{"class":51},[45,16711,1251],{"class":93},[45,16713,1274],{"class":51},[45,16715,16717],{"class":47,"line":16716},68,[45,16718,16719],{"class":267},"    \u002F\u002F体积\n",[45,16721,16723,16725,16727,16730,16732,16734,16737,16739,16741],{"class":47,"line":16722},69,[45,16724,1634],{"class":51},[45,16726,1251],{"class":93},[45,16728,16729],{"class":313},"\"立方体的体积为：\"",[45,16731,1251],{"class":93},[45,16733,14913],{"class":51},[45,16735,16736],{"class":2046},"tiji",[45,16738,2510],{"class":51},[45,16740,1251],{"class":93},[45,16742,1274],{"class":51},[45,16744,16746,16748,16750,16753,16755],{"class":47,"line":16745},70,[45,16747,1634],{"class":51},[45,16749,1251],{"class":93},[45,16751,16752],{"class":313},"\"请输入第二个立方体的长、宽、高：\"",[45,16754,1251],{"class":93},[45,16756,1274],{"class":51},[45,16758,16760,16762,16764,16767,16769,16772,16774],{"class":47,"line":16759},71,[45,16761,2095],{"class":51},[45,16763,1512],{"class":93},[45,16765,16766],{"class":51},"l1",[45,16768,1512],{"class":93},[45,16770,16771],{"class":51},"w1",[45,16773,1512],{"class":93},[45,16775,16776],{"class":51},"h1;\n",[45,16778,16780],{"class":47,"line":16779},72,[45,16781,16782],{"class":51},"    Cube c2;\n",[45,16784,16786,16789,16791],{"class":47,"line":16785},73,[45,16787,16788],{"class":51},"    c2.",[45,16790,16681],{"class":2046},[45,16792,16793],{"class":51},"(l1,w1,h1);\n",[45,16795,16797,16799,16801,16804,16806,16809,16811,16813,16815],{"class":47,"line":16796},74,[45,16798,1634],{"class":51},[45,16800,1251],{"class":93},[45,16802,16803],{"class":313},"\"第二个立方体的表面积为：\"",[45,16805,1251],{"class":93},[45,16807,16808],{"class":51},"c2.",[45,16810,16707],{"class":2046},[45,16812,2510],{"class":51},[45,16814,1251],{"class":93},[45,16816,1274],{"class":51},[45,16818,16820,16822,16824,16827,16829,16831,16833,16835,16837],{"class":47,"line":16819},75,[45,16821,1634],{"class":51},[45,16823,1251],{"class":93},[45,16825,16826],{"class":313},"\"第二个立方体的体积为：\"",[45,16828,1251],{"class":93},[45,16830,16808],{"class":51},[45,16832,16736],{"class":2046},[45,16834,2510],{"class":51},[45,16836,1251],{"class":93},[45,16838,1274],{"class":51},[45,16840,16842],{"class":47,"line":16841},76,[45,16843,2483],{"emptyLinePlaceholder":133},[45,16845,16847],{"class":47,"line":16846},77,[45,16848,16849],{"class":267},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[45,16851,16853,16855,16857,16860,16862],{"class":47,"line":16852},78,[45,16854,1634],{"class":51},[45,16856,1251],{"class":93},[45,16858,16859],{"class":313},"\"内部函数判断结果：\"",[45,16861,1251],{"class":93},[45,16863,1274],{"class":51},[45,16865,16867,16869,16871,16874],{"class":47,"line":16866},79,[45,16868,3184],{"class":93},[45,16870,16564],{"class":51},[45,16872,16873],{"class":2046},"isEqual",[45,16875,16876],{"class":51},"(c2))\n",[45,16878,16880],{"class":47,"line":16879},80,[45,16881,2113],{"class":51},[45,16883,16885,16887,16889,16892,16894],{"class":47,"line":16884},81,[45,16886,3534],{"class":51},[45,16888,1251],{"class":93},[45,16890,16891],{"class":313},"\"两个立方体相等\"",[45,16893,1251],{"class":93},[45,16895,1274],{"class":51},[45,16897,16899],{"class":47,"line":16898},82,[45,16900,2270],{"class":51},[45,16902,16904],{"class":47,"line":16903},83,[45,16905,16906],{"class":93},"    else\n",[45,16908,16910],{"class":47,"line":16909},84,[45,16911,2113],{"class":51},[45,16913,16915,16917,16919,16922,16924],{"class":47,"line":16914},85,[45,16916,3534],{"class":51},[45,16918,1251],{"class":93},[45,16920,16921],{"class":313},"\"两个立方体不相等\"",[45,16923,1251],{"class":93},[45,16925,1274],{"class":51},[45,16927,16929],{"class":47,"line":16928},86,[45,16930,2270],{"class":51},[45,16932,16934],{"class":47,"line":16933},87,[45,16935,2483],{"emptyLinePlaceholder":133},[45,16937,16939,16941,16943,16946,16948],{"class":47,"line":16938},88,[45,16940,1634],{"class":51},[45,16942,1251],{"class":93},[45,16944,16945],{"class":313},"\"全局函数判断结果：\"",[45,16947,1251],{"class":93},[45,16949,1274],{"class":51},[45,16951,16953,16955,16957,16959],{"class":47,"line":16952},89,[45,16954,3184],{"class":93},[45,16956,1741],{"class":51},[45,16958,16873],{"class":2046},[45,16960,16961],{"class":51},"(c1, c2))\n",[45,16963,16965],{"class":47,"line":16964},90,[45,16966,2113],{"class":51},[45,16968,16970,16972,16974,16976,16978],{"class":47,"line":16969},91,[45,16971,3534],{"class":51},[45,16973,1251],{"class":93},[45,16975,16891],{"class":313},[45,16977,1251],{"class":93},[45,16979,1274],{"class":51},[45,16981,16983],{"class":47,"line":16982},92,[45,16984,2270],{"class":51},[45,16986,16988],{"class":47,"line":16987},93,[45,16989,16906],{"class":93},[45,16991,16993],{"class":47,"line":16992},94,[45,16994,2113],{"class":51},[45,16996,16998,17000,17002,17004,17006],{"class":47,"line":16997},95,[45,16999,3534],{"class":51},[45,17001,1251],{"class":93},[45,17003,16921],{"class":313},[45,17005,1251],{"class":93},[45,17007,1274],{"class":51},[45,17009,17011],{"class":47,"line":17010},96,[45,17012,2270],{"class":51},[45,17014,17016],{"class":47,"line":17015},97,[45,17017,1648],{"class":51},[159,17019,17020],{"start":125},[162,17021,17022],{},[358,17023,17024],{},"练习案例2：点和圆的关系",[1214,17026,17027],{},[162,17028,17029],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[35,17031,17033],{"className":197,"code":17032,"language":199,"meta":40,"style":40},"#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",[42,17034,17035,17041,17051,17058,17065,17069,17073,17078,17112,17117,17133,17147,17151,17155,17162,17169,17173,17179,17183,17187,17191,17213,17236,17241,17255,17270,17274,17278,17284,17289,17294,17298,17324,17328,17358,17386,17414,17431,17435,17448,17452,17456,17460,17473,17477,17481,17489,17493,17497,17501,17506,17510,17521,17528,17537,17547,17558,17565,17578,17589,17599,17610,17617,17631,17636,17646,17654],{"__ignoreMap":40},[45,17036,17037,17039],{"class":47,"line":48},[45,17038,2032],{"class":93},[45,17040,2035],{"class":313},[45,17042,17043,17045,17047,17049],{"class":47,"line":125},[45,17044,2040],{"class":93},[45,17046,2043],{"class":93},[45,17048,2047],{"class":2046},[45,17050,1373],{"class":51},[45,17052,17053,17055],{"class":47,"line":1262},[45,17054,2032],{"class":93},[45,17056,17057],{"class":313},"\u003Ccmath>\n",[45,17059,17060,17062],{"class":47,"line":1277},[45,17061,14777],{"class":93},[45,17063,17064],{"class":2046}," Point\n",[45,17066,17067],{"class":47,"line":1283},[45,17068,1629],{"class":51},[45,17070,17071],{"class":47,"line":1297},[45,17072,14799],{"class":93},[45,17074,17075],{"class":47,"line":1303},[45,17076,17077],{"class":267},"    \u002F\u002F赋值\n",[45,17079,17080,17082,17085,17087,17089,17092,17094,17096,17099,17102,17104,17107,17109],{"class":47,"line":1394},[45,17081,14992],{"class":93},[45,17083,17084],{"class":2046}," setPoint",[45,17086,209],{"class":51},[45,17088,14120],{"class":93},[45,17090,17091],{"class":5299}," x",[45,17093,12518],{"class":51},[45,17095,14120],{"class":93},[45,17097,17098],{"class":5299}," y",[45,17100,17101],{"class":51},") { m_x ",[45,17103,254],{"class":93},[45,17105,17106],{"class":51}," x; m_y ",[45,17108,254],{"class":93},[45,17110,17111],{"class":51}," y; }\n",[45,17113,17114],{"class":47,"line":1400},[45,17115,17116],{"class":267},"    \u002F\u002F获取坐标\n",[45,17118,17119,17121,17124,17127,17130],{"class":47,"line":1412},[45,17120,14821],{"class":93},[45,17122,17123],{"class":2046}," getX",[45,17125,17126],{"class":51},"() { ",[45,17128,17129],{"class":93},"return",[45,17131,17132],{"class":51}," m_x; }\n",[45,17134,17135,17137,17140,17142,17144],{"class":47,"line":1695},[45,17136,14821],{"class":93},[45,17138,17139],{"class":2046}," getY",[45,17141,17126],{"class":51},[45,17143,17129],{"class":93},[45,17145,17146],{"class":51}," m_y; }\n",[45,17148,17149],{"class":47,"line":1700},[45,17150,2483],{"emptyLinePlaceholder":133},[45,17152,17153],{"class":47,"line":1706},[45,17154,15305],{"class":93},[45,17156,17157,17159],{"class":47,"line":1711},[45,17158,14821],{"class":93},[45,17160,17161],{"class":51}," m_x;\n",[45,17163,17164,17166],{"class":47,"line":1725},[45,17165,14821],{"class":93},[45,17167,17168],{"class":51}," m_y;\n",[45,17170,17171],{"class":47,"line":1730},[45,17172,4078],{"class":51},[45,17174,17175,17177],{"class":47,"line":1736},[45,17176,14777],{"class":93},[45,17178,14780],{"class":2046},[45,17180,17181],{"class":47,"line":1757},[45,17182,1629],{"class":51},[45,17184,17185],{"class":47,"line":1762},[45,17186,14799],{"class":93},[45,17188,17189],{"class":47,"line":1776},[45,17190,17077],{"class":267},[45,17192,17193,17195,17198,17200,17202,17205,17208,17210],{"class":47,"line":1781},[45,17194,14992],{"class":93},[45,17196,17197],{"class":2046}," setRadius",[45,17199,209],{"class":51},[45,17201,14120],{"class":93},[45,17203,17204],{"class":5299}," r",[45,17206,17207],{"class":51},") { m_r ",[45,17209,254],{"class":93},[45,17211,17212],{"class":51}," r; }\n",[45,17214,17215,17217,17220,17222,17225,17228,17231,17233],{"class":47,"line":1810},[45,17216,14992],{"class":93},[45,17218,17219],{"class":2046}," setCenter",[45,17221,209],{"class":51},[45,17223,17224],{"class":2046},"Point",[45,17226,17227],{"class":5299}," center",[45,17229,17230],{"class":51},") { m_center ",[45,17232,254],{"class":93},[45,17234,17235],{"class":51}," center; }\n",[45,17237,17238],{"class":47,"line":1815},[45,17239,17240],{"class":267},"    \u002F\u002F获取属性\n",[45,17242,17243,17245,17248,17250,17252],{"class":47,"line":1832},[45,17244,14821],{"class":93},[45,17246,17247],{"class":2046}," getRadius",[45,17249,17126],{"class":51},[45,17251,17129],{"class":93},[45,17253,17254],{"class":51}," m_r; }\n",[45,17256,17257,17260,17263,17265,17267],{"class":47,"line":1837},[45,17258,17259],{"class":2046},"    Point",[45,17261,17262],{"class":2046}," getCenter",[45,17264,17126],{"class":51},[45,17266,17129],{"class":93},[45,17268,17269],{"class":51}," m_center; }\n",[45,17271,17272],{"class":47,"line":1842},[45,17273,2483],{"emptyLinePlaceholder":133},[45,17275,17276],{"class":47,"line":1847},[45,17277,15305],{"class":93},[45,17279,17280,17282],{"class":47,"line":1861},[45,17281,14821],{"class":93},[45,17283,14811],{"class":51},[45,17285,17286],{"class":47,"line":1866},[45,17287,17288],{"class":267},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[45,17290,17291],{"class":47,"line":2660},[45,17292,17293],{"class":51},"    Point m_center;\n",[45,17295,17296],{"class":47,"line":2674},[45,17297,4078],{"class":51},[45,17299,17300,17302,17305,17307,17310,17312,17314,17316,17318,17320,17322],{"class":47,"line":2682},[45,17301,5447],{"class":93},[45,17303,17304],{"class":2046}," isInCircle",[45,17306,209],{"class":51},[45,17308,17309],{"class":2046},"Circle",[45,17311,10667],{"class":93},[45,17313,496],{"class":5299},[45,17315,586],{"class":51},[45,17317,17224],{"class":2046},[45,17319,10667],{"class":93},[45,17321,10],{"class":5299},[45,17323,215],{"class":51},[45,17325,17326],{"class":47,"line":2687},[45,17327,1629],{"class":51},[45,17329,17330,17332,17335,17337,17339,17342,17345,17348,17350,17352,17354,17356],{"class":47,"line":2693},[45,17331,14821],{"class":93},[45,17333,17334],{"class":51}," dx ",[45,17336,254],{"class":93},[45,17338,16425],{"class":51},[45,17340,17341],{"class":2046},"getCenter",[45,17343,17344],{"class":51},"().",[45,17346,17347],{"class":2046},"getX",[45,17349,13133],{"class":51},[45,17351,94],{"class":93},[45,17353,15971],{"class":51},[45,17355,17347],{"class":2046},[45,17357,5719],{"class":51},[45,17359,17360,17362,17365,17367,17369,17371,17373,17376,17378,17380,17382,17384],{"class":47,"line":2699},[45,17361,14821],{"class":93},[45,17363,17364],{"class":51}," dy ",[45,17366,254],{"class":93},[45,17368,16425],{"class":51},[45,17370,17341],{"class":2046},[45,17372,17344],{"class":51},[45,17374,17375],{"class":2046},"getY",[45,17377,13133],{"class":51},[45,17379,94],{"class":93},[45,17381,15971],{"class":51},[45,17383,17375],{"class":2046},[45,17385,5719],{"class":51},[45,17387,17388,17390,17393,17395,17398,17401,17403,17405,17407,17409,17411],{"class":47,"line":2704},[45,17389,14821],{"class":93},[45,17391,17392],{"class":51}," distance ",[45,17394,254],{"class":93},[45,17396,17397],{"class":2046}," sqrt",[45,17399,17400],{"class":51},"(dx ",[45,17402,663],{"class":93},[45,17404,17334],{"class":51},[45,17406,689],{"class":93},[45,17408,17364],{"class":51},[45,17410,663],{"class":93},[45,17412,17413],{"class":51}," dy);\n",[45,17415,17416,17418,17421,17423,17425,17428],{"class":47,"line":8031},[45,17417,3184],{"class":93},[45,17419,17420],{"class":51}," (distance ",[45,17422,1117],{"class":93},[45,17424,16425],{"class":51},[45,17426,17427],{"class":2046},"getRadius",[45,17429,17430],{"class":51},"())\n",[45,17432,17433],{"class":47,"line":8055},[45,17434,2113],{"class":51},[45,17436,17437,17439,17441,17444,17446],{"class":47,"line":8060},[45,17438,9752],{"class":51},[45,17440,1251],{"class":93},[45,17442,17443],{"class":313}," \"点在圆内\"",[45,17445,1527],{"class":93},[45,17447,8923],{"class":51},[45,17449,17450],{"class":47,"line":8066},[45,17451,2270],{"class":51},[45,17453,17454],{"class":47,"line":8093},[45,17455,16906],{"class":93},[45,17457,17458],{"class":47,"line":8098},[45,17459,2113],{"class":51},[45,17461,17462,17464,17466,17469,17471],{"class":47,"line":8104},[45,17463,9752],{"class":51},[45,17465,1251],{"class":93},[45,17467,17468],{"class":313}," \"点在圆外\"",[45,17470,1527],{"class":93},[45,17472,8923],{"class":51},[45,17474,17475],{"class":47,"line":8116},[45,17476,2270],{"class":51},[45,17478,17479],{"class":47,"line":8128},[45,17480,1648],{"class":51},[45,17482,17483,17485,17487],{"class":47,"line":8140},[45,17484,212],{"class":93},[45,17486,2056],{"class":2046},[45,17488,2059],{"class":51},[45,17490,17491],{"class":47,"line":9799},[45,17492,1629],{"class":51},[45,17494,17495],{"class":47,"line":9824},[45,17496,15136],{"class":267},[45,17498,17499],{"class":47,"line":9847},[45,17500,14883],{"class":51},[45,17502,17503],{"class":47,"line":9871},[45,17504,17505],{"class":51},"    Point p1;\n",[45,17507,17508],{"class":47,"line":9876},[45,17509,17077],{"class":267},[45,17511,17512,17514,17516,17519],{"class":47,"line":9881},[45,17513,1634],{"class":51},[45,17515,1251],{"class":93},[45,17517,17518],{"class":313},"\"请输入圆的半径：\"",[45,17520,1373],{"class":51},[45,17522,17523,17525],{"class":47,"line":9886},[45,17524,14821],{"class":93},[45,17526,17527],{"class":51}," r;\n",[45,17529,17530,17532,17534],{"class":47,"line":9895},[45,17531,2095],{"class":51},[45,17533,1512],{"class":93},[45,17535,17536],{"class":51},"r;\n",[45,17538,17539,17541,17544],{"class":47,"line":9900},[45,17540,16678],{"class":51},[45,17542,17543],{"class":2046},"setRadius",[45,17545,17546],{"class":51},"(r);\n",[45,17548,17549,17551,17553,17556],{"class":47,"line":9906},[45,17550,1634],{"class":51},[45,17552,1251],{"class":93},[45,17554,17555],{"class":313},"\"请输入圆心坐标：\"",[45,17557,1373],{"class":51},[45,17559,17560,17562],{"class":47,"line":9927},[45,17561,14821],{"class":93},[45,17563,17564],{"class":51}," x, y;\n",[45,17566,17567,17569,17571,17573,17575],{"class":47,"line":9933},[45,17568,2095],{"class":51},[45,17570,1512],{"class":93},[45,17572,1027],{"class":51},[45,17574,1512],{"class":93},[45,17576,17577],{"class":51},"y;\n",[45,17579,17580,17583,17586],{"class":47,"line":9947},[45,17581,17582],{"class":51},"    p1.",[45,17584,17585],{"class":2046},"setPoint",[45,17587,17588],{"class":51},"(x, y);\n",[45,17590,17591,17593,17596],{"class":47,"line":9953},[45,17592,16678],{"class":51},[45,17594,17595],{"class":2046},"setCenter",[45,17597,17598],{"class":51},"(p1);\n",[45,17600,17601,17603,17605,17608],{"class":47,"line":9980},[45,17602,1634],{"class":51},[45,17604,1251],{"class":93},[45,17606,17607],{"class":313},"\"请输入测试点坐标：\"",[45,17609,1373],{"class":51},[45,17611,17612,17614],{"class":47,"line":9989},[45,17613,14821],{"class":93},[45,17615,17616],{"class":51}," x1, y1;\n",[45,17618,17619,17621,17623,17626,17628],{"class":47,"line":9995},[45,17620,2095],{"class":51},[45,17622,1512],{"class":93},[45,17624,17625],{"class":51},"x1",[45,17627,1512],{"class":93},[45,17629,17630],{"class":51},"y1;\n",[45,17632,17633],{"class":47,"line":10003},[45,17634,17635],{"class":51},"    Point p2;\n",[45,17637,17638,17641,17643],{"class":47,"line":10008},[45,17639,17640],{"class":51},"    p2.",[45,17642,17585],{"class":2046},[45,17644,17645],{"class":51},"(x1, y1);\n",[45,17647,17648,17651],{"class":47,"line":16687},[45,17649,17650],{"class":2046},"    isInCircle",[45,17652,17653],{"class":51},"(c1, p2);\n",[45,17655,17656],{"class":47,"line":16693},[45,17657,1648],{"class":51},[10,17659,17660],{},"在类中可以让另一个类作为本来的成员",[10,17662,17663],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[10,17665,17666],{},"创建point.h",[35,17668,17670],{"className":197,"code":17669,"language":199,"meta":40,"style":40},"#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",[42,17671,17672,17683,17689,17699,17705,17709,17714,17718,17722,17742,17746,17754,17762,17766,17770,17776,17782],{"__ignoreMap":40},[45,17673,17674,17677,17680],{"class":47,"line":48},[45,17675,17676],{"class":93},"#pragma",[45,17678,17679],{"class":2046}," once",[45,17681,17682],{"class":267}," \u002F\u002F防止头文件重复包含\n",[45,17684,17685,17687],{"class":47,"line":125},[45,17686,2032],{"class":93},[45,17688,2035],{"class":313},[45,17690,17691,17693,17695,17697],{"class":47,"line":1262},[45,17692,2040],{"class":93},[45,17694,2043],{"class":93},[45,17696,2047],{"class":2046},[45,17698,1373],{"class":51},[45,17700,17701,17703],{"class":47,"line":1277},[45,17702,14777],{"class":93},[45,17704,17064],{"class":2046},[45,17706,17707],{"class":47,"line":1283},[45,17708,1629],{"class":51},[45,17710,17711],{"class":47,"line":1297},[45,17712,17713],{"class":267},"\u002F\u002F做好声明与变量定义就可以\n",[45,17715,17716],{"class":47,"line":1303},[45,17717,14799],{"class":93},[45,17719,17720],{"class":47,"line":1394},[45,17721,17077],{"class":267},[45,17723,17724,17726,17728,17730,17732,17734,17736,17738,17740],{"class":47,"line":1400},[45,17725,14992],{"class":93},[45,17727,17084],{"class":2046},[45,17729,209],{"class":51},[45,17731,14120],{"class":93},[45,17733,17091],{"class":5299},[45,17735,12518],{"class":51},[45,17737,14120],{"class":93},[45,17739,17098],{"class":5299},[45,17741,2802],{"class":51},[45,17743,17744],{"class":47,"line":1412},[45,17745,17116],{"class":267},[45,17747,17748,17750,17752],{"class":47,"line":1695},[45,17749,14821],{"class":93},[45,17751,17123],{"class":2046},[45,17753,5719],{"class":51},[45,17755,17756,17758,17760],{"class":47,"line":1700},[45,17757,14821],{"class":93},[45,17759,17139],{"class":2046},[45,17761,5719],{"class":51},[45,17763,17764],{"class":47,"line":1706},[45,17765,2483],{"emptyLinePlaceholder":133},[45,17767,17768],{"class":47,"line":1711},[45,17769,15305],{"class":93},[45,17771,17772,17774],{"class":47,"line":1725},[45,17773,14821],{"class":93},[45,17775,17161],{"class":51},[45,17777,17778,17780],{"class":47,"line":1730},[45,17779,14821],{"class":93},[45,17781,17168],{"class":51},[45,17783,17784],{"class":47,"line":1736},[45,17785,4078],{"class":51},[10,17787,17788],{},"创建point.cpp",[35,17790,17792],{"className":197,"code":17791,"language":199,"meta":40,"style":40},"#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",[42,17793,17794,17801,17806,17840,17844,17860],{"__ignoreMap":40},[45,17795,17796,17798],{"class":47,"line":48},[45,17797,2032],{"class":93},[45,17799,17800],{"class":313},"\u003Cpoint.h>\n",[45,17802,17803],{"class":47,"line":125},[45,17804,17805],{"class":267},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[45,17807,17808,17810,17813,17816,17818,17820,17822,17824,17826,17828,17830,17832,17834,17836,17838],{"class":47,"line":1262},[45,17809,14992],{"class":93},[45,17811,17812],{"class":2046}," Point",[45,17814,17815],{"class":51},"::",[45,17817,17585],{"class":2046},[45,17819,209],{"class":51},[45,17821,14120],{"class":93},[45,17823,17091],{"class":5299},[45,17825,12518],{"class":51},[45,17827,14120],{"class":93},[45,17829,17098],{"class":5299},[45,17831,17101],{"class":51},[45,17833,254],{"class":93},[45,17835,17106],{"class":51},[45,17837,254],{"class":93},[45,17839,17111],{"class":51},[45,17841,17842],{"class":47,"line":1277},[45,17843,17116],{"class":267},[45,17845,17846,17848,17850,17852,17854,17856,17858],{"class":47,"line":1283},[45,17847,14821],{"class":93},[45,17849,17812],{"class":2046},[45,17851,17815],{"class":51},[45,17853,17347],{"class":2046},[45,17855,17126],{"class":51},[45,17857,17129],{"class":93},[45,17859,17132],{"class":51},[45,17861,17862,17864,17866,17868,17870,17872,17874],{"class":47,"line":1297},[45,17863,14821],{"class":93},[45,17865,17812],{"class":2046},[45,17867,17815],{"class":51},[45,17869,17375],{"class":2046},[45,17871,17126],{"class":51},[45,17873,17129],{"class":93},[45,17875,17146],{"class":51},[10,17877,17878],{},"创建circle.h",[35,17880,17882],{"className":197,"code":17881,"language":199,"meta":40,"style":40},"#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",[42,17883,17884,17891,17897,17907,17913,17919,17923,17927,17931,17945,17959,17963,17971,17979,17983,17987,17993,17997,18001],{"__ignoreMap":40},[45,17885,17886,17888],{"class":47,"line":48},[45,17887,17676],{"class":93},[45,17889,17890],{"class":2046}," once\n",[45,17892,17893,17895],{"class":47,"line":125},[45,17894,2032],{"class":93},[45,17896,2035],{"class":313},[45,17898,17899,17901,17903,17905],{"class":47,"line":1262},[45,17900,2040],{"class":93},[45,17902,2043],{"class":93},[45,17904,2047],{"class":2046},[45,17906,1373],{"class":51},[45,17908,17909,17911],{"class":47,"line":1277},[45,17910,2032],{"class":93},[45,17912,17800],{"class":313},[45,17914,17915,17917],{"class":47,"line":1283},[45,17916,14777],{"class":93},[45,17918,14780],{"class":2046},[45,17920,17921],{"class":47,"line":1297},[45,17922,1629],{"class":51},[45,17924,17925],{"class":47,"line":1303},[45,17926,14799],{"class":93},[45,17928,17929],{"class":47,"line":1394},[45,17930,17077],{"class":267},[45,17932,17933,17935,17937,17939,17941,17943],{"class":47,"line":1400},[45,17934,14992],{"class":93},[45,17936,17197],{"class":2046},[45,17938,209],{"class":51},[45,17940,14120],{"class":93},[45,17942,17204],{"class":5299},[45,17944,2802],{"class":51},[45,17946,17947,17949,17951,17953,17955,17957],{"class":47,"line":1412},[45,17948,14992],{"class":93},[45,17950,17219],{"class":2046},[45,17952,209],{"class":51},[45,17954,17224],{"class":2046},[45,17956,17227],{"class":5299},[45,17958,2802],{"class":51},[45,17960,17961],{"class":47,"line":1695},[45,17962,17240],{"class":267},[45,17964,17965,17967,17969],{"class":47,"line":1700},[45,17966,14821],{"class":93},[45,17968,17247],{"class":2046},[45,17970,5719],{"class":51},[45,17972,17973,17975,17977],{"class":47,"line":1706},[45,17974,17259],{"class":2046},[45,17976,17262],{"class":2046},[45,17978,5719],{"class":51},[45,17980,17981],{"class":47,"line":1711},[45,17982,2483],{"emptyLinePlaceholder":133},[45,17984,17985],{"class":47,"line":1725},[45,17986,15305],{"class":93},[45,17988,17989,17991],{"class":47,"line":1730},[45,17990,14821],{"class":93},[45,17992,14811],{"class":51},[45,17994,17995],{"class":47,"line":1736},[45,17996,17288],{"class":267},[45,17998,17999],{"class":47,"line":1757},[45,18000,17293],{"class":51},[45,18002,18003],{"class":47,"line":1762},[45,18004,4078],{"class":51},[10,18006,18007],{},"创建circle.cpp",[35,18009,18011],{"className":197,"code":18010,"language":199,"meta":40,"style":40},"#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",[42,18012,18013,18020,18043,18065,18070,18086],{"__ignoreMap":40},[45,18014,18015,18017],{"class":47,"line":48},[45,18016,2032],{"class":93},[45,18018,18019],{"class":313},"\u003Ccircle.h>\n",[45,18021,18022,18024,18027,18029,18031,18033,18035,18037,18039,18041],{"class":47,"line":125},[45,18023,5447],{"class":93},[45,18025,18026],{"class":2046}," Circle",[45,18028,17815],{"class":51},[45,18030,17543],{"class":2046},[45,18032,209],{"class":51},[45,18034,14120],{"class":93},[45,18036,17204],{"class":5299},[45,18038,17207],{"class":51},[45,18040,254],{"class":93},[45,18042,17212],{"class":51},[45,18044,18045,18047,18049,18051,18053,18055,18057,18059,18061,18063],{"class":47,"line":1262},[45,18046,5447],{"class":93},[45,18048,18026],{"class":2046},[45,18050,17815],{"class":51},[45,18052,17595],{"class":2046},[45,18054,209],{"class":51},[45,18056,17224],{"class":2046},[45,18058,17227],{"class":5299},[45,18060,17230],{"class":51},[45,18062,254],{"class":93},[45,18064,17235],{"class":51},[45,18066,18067],{"class":47,"line":1277},[45,18068,18069],{"class":267},"\u002F\u002F获取属性\n",[45,18071,18072,18074,18076,18078,18080,18082,18084],{"class":47,"line":1283},[45,18073,14120],{"class":93},[45,18075,18026],{"class":2046},[45,18077,17815],{"class":51},[45,18079,17427],{"class":2046},[45,18081,17126],{"class":51},[45,18083,17129],{"class":93},[45,18085,17254],{"class":51},[45,18087,18088,18090,18092,18094,18096,18098,18100],{"class":47,"line":1297},[45,18089,17224],{"class":2046},[45,18091,18026],{"class":2046},[45,18093,17815],{"class":51},[45,18095,17341],{"class":2046},[45,18097,17126],{"class":51},[45,18099,17129],{"class":93},[45,18101,17269],{"class":51},[10,18103,18104],{},"使用封装的类",[35,18106,18108],{"className":197,"code":18107,"language":199,"meta":40,"style":40},"#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",[42,18109,18110,18116,18126,18132,18138,18162,18166,18192,18218,18242,18256,18260,18272,18276,18280,18284,18296,18300,18304,18312,18316,18320,18324,18328,18332,18342,18348,18356,18364,18374,18380,18392,18400,18408,18418,18424,18436,18440,18448,18454],{"__ignoreMap":40},[45,18111,18112,18114],{"class":47,"line":48},[45,18113,2032],{"class":93},[45,18115,2035],{"class":313},[45,18117,18118,18120,18122,18124],{"class":47,"line":125},[45,18119,2040],{"class":93},[45,18121,2043],{"class":93},[45,18123,2047],{"class":2046},[45,18125,1373],{"class":51},[45,18127,18128,18130],{"class":47,"line":1262},[45,18129,2032],{"class":93},[45,18131,18019],{"class":313},[45,18133,18134,18136],{"class":47,"line":1277},[45,18135,2032],{"class":93},[45,18137,17800],{"class":313},[45,18139,18140,18142,18144,18146,18148,18150,18152,18154,18156,18158,18160],{"class":47,"line":1283},[45,18141,5447],{"class":93},[45,18143,17304],{"class":2046},[45,18145,209],{"class":51},[45,18147,17309],{"class":2046},[45,18149,10667],{"class":93},[45,18151,496],{"class":5299},[45,18153,586],{"class":51},[45,18155,17224],{"class":2046},[45,18157,10667],{"class":93},[45,18159,10],{"class":5299},[45,18161,215],{"class":51},[45,18163,18164],{"class":47,"line":1297},[45,18165,1629],{"class":51},[45,18167,18168,18170,18172,18174,18176,18178,18180,18182,18184,18186,18188,18190],{"class":47,"line":1303},[45,18169,14821],{"class":93},[45,18171,17334],{"class":51},[45,18173,254],{"class":93},[45,18175,16425],{"class":51},[45,18177,17341],{"class":2046},[45,18179,17344],{"class":51},[45,18181,17347],{"class":2046},[45,18183,13133],{"class":51},[45,18185,94],{"class":93},[45,18187,15971],{"class":51},[45,18189,17347],{"class":2046},[45,18191,5719],{"class":51},[45,18193,18194,18196,18198,18200,18202,18204,18206,18208,18210,18212,18214,18216],{"class":47,"line":1394},[45,18195,14821],{"class":93},[45,18197,17364],{"class":51},[45,18199,254],{"class":93},[45,18201,16425],{"class":51},[45,18203,17341],{"class":2046},[45,18205,17344],{"class":51},[45,18207,17375],{"class":2046},[45,18209,13133],{"class":51},[45,18211,94],{"class":93},[45,18213,15971],{"class":51},[45,18215,17375],{"class":2046},[45,18217,5719],{"class":51},[45,18219,18220,18222,18224,18226,18228,18230,18232,18234,18236,18238,18240],{"class":47,"line":1400},[45,18221,14821],{"class":93},[45,18223,17392],{"class":51},[45,18225,254],{"class":93},[45,18227,17397],{"class":2046},[45,18229,17400],{"class":51},[45,18231,663],{"class":93},[45,18233,17334],{"class":51},[45,18235,689],{"class":93},[45,18237,17364],{"class":51},[45,18239,663],{"class":93},[45,18241,17413],{"class":51},[45,18243,18244,18246,18248,18250,18252,18254],{"class":47,"line":1412},[45,18245,3184],{"class":93},[45,18247,17420],{"class":51},[45,18249,1117],{"class":93},[45,18251,16425],{"class":51},[45,18253,17427],{"class":2046},[45,18255,17430],{"class":51},[45,18257,18258],{"class":47,"line":1695},[45,18259,2113],{"class":51},[45,18261,18262,18264,18266,18268,18270],{"class":47,"line":1700},[45,18263,9752],{"class":51},[45,18265,1251],{"class":93},[45,18267,17443],{"class":313},[45,18269,1527],{"class":93},[45,18271,8923],{"class":51},[45,18273,18274],{"class":47,"line":1706},[45,18275,2270],{"class":51},[45,18277,18278],{"class":47,"line":1711},[45,18279,16906],{"class":93},[45,18281,18282],{"class":47,"line":1725},[45,18283,2113],{"class":51},[45,18285,18286,18288,18290,18292,18294],{"class":47,"line":1730},[45,18287,9752],{"class":51},[45,18289,1251],{"class":93},[45,18291,17468],{"class":313},[45,18293,1527],{"class":93},[45,18295,8923],{"class":51},[45,18297,18298],{"class":47,"line":1736},[45,18299,2270],{"class":51},[45,18301,18302],{"class":47,"line":1757},[45,18303,1648],{"class":51},[45,18305,18306,18308,18310],{"class":47,"line":1762},[45,18307,212],{"class":93},[45,18309,2056],{"class":2046},[45,18311,2059],{"class":51},[45,18313,18314],{"class":47,"line":1776},[45,18315,1629],{"class":51},[45,18317,18318],{"class":47,"line":1781},[45,18319,15136],{"class":267},[45,18321,18322],{"class":47,"line":1810},[45,18323,14883],{"class":51},[45,18325,18326],{"class":47,"line":1815},[45,18327,17505],{"class":51},[45,18329,18330],{"class":47,"line":1832},[45,18331,17077],{"class":267},[45,18333,18334,18336,18338,18340],{"class":47,"line":1837},[45,18335,1634],{"class":51},[45,18337,1251],{"class":93},[45,18339,17518],{"class":313},[45,18341,1373],{"class":51},[45,18343,18344,18346],{"class":47,"line":1842},[45,18345,14821],{"class":93},[45,18347,17527],{"class":51},[45,18349,18350,18352,18354],{"class":47,"line":1847},[45,18351,2095],{"class":51},[45,18353,1512],{"class":93},[45,18355,17536],{"class":51},[45,18357,18358,18360,18362],{"class":47,"line":1861},[45,18359,16678],{"class":51},[45,18361,17543],{"class":2046},[45,18363,17546],{"class":51},[45,18365,18366,18368,18370,18372],{"class":47,"line":1866},[45,18367,1634],{"class":51},[45,18369,1251],{"class":93},[45,18371,17555],{"class":313},[45,18373,1373],{"class":51},[45,18375,18376,18378],{"class":47,"line":2660},[45,18377,14821],{"class":93},[45,18379,17564],{"class":51},[45,18381,18382,18384,18386,18388,18390],{"class":47,"line":2674},[45,18383,2095],{"class":51},[45,18385,1512],{"class":93},[45,18387,1027],{"class":51},[45,18389,1512],{"class":93},[45,18391,17577],{"class":51},[45,18393,18394,18396,18398],{"class":47,"line":2682},[45,18395,17582],{"class":51},[45,18397,17585],{"class":2046},[45,18399,17588],{"class":51},[45,18401,18402,18404,18406],{"class":47,"line":2687},[45,18403,16678],{"class":51},[45,18405,17595],{"class":2046},[45,18407,17598],{"class":51},[45,18409,18410,18412,18414,18416],{"class":47,"line":2693},[45,18411,1634],{"class":51},[45,18413,1251],{"class":93},[45,18415,17607],{"class":313},[45,18417,1373],{"class":51},[45,18419,18420,18422],{"class":47,"line":2699},[45,18421,14821],{"class":93},[45,18423,17616],{"class":51},[45,18425,18426,18428,18430,18432,18434],{"class":47,"line":2704},[45,18427,2095],{"class":51},[45,18429,1512],{"class":93},[45,18431,17625],{"class":51},[45,18433,1512],{"class":93},[45,18435,17630],{"class":51},[45,18437,18438],{"class":47,"line":8031},[45,18439,17635],{"class":51},[45,18441,18442,18444,18446],{"class":47,"line":8055},[45,18443,17640],{"class":51},[45,18445,17585],{"class":2046},[45,18447,17645],{"class":51},[45,18449,18450,18452],{"class":47,"line":8060},[45,18451,17650],{"class":2046},[45,18453,17653],{"class":51},[45,18455,18456],{"class":47,"line":8066},[45,18457,1648],{"class":51},[30,18459,18461],{"id":18460},"_82对象的初始化清理","8.2对象的初始化清理",[1214,18463,18464,18467],{},[162,18465,18466],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[162,18468,18469],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[176,18471,18473],{"id":18472},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[10,18475,18476,18477,18480],{},"对象的",[358,18478,18479],{},"初始化和清理","也是两个非常重要的安全问题",[10,18482,18483],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[10,18485,18486],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[10,18488,18489,18490,18493,18494,18497],{},"c++利用了",[358,18491,18492],{},"构造函数","和",[358,18495,18496],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[10,18499,18500,18501],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[358,18502,18503],{},"我们不提供构造和析构，编译器会提供",[10,18505,18506],{},[358,18507,18508],{},"编译器提供的构造函数和析构函数是空实现。",[1214,18510,18511,18514],{},[162,18512,18513],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[162,18515,18516,18517,18520],{},"析构函数：主要作用在于对象",[358,18518,18519],{},"销毁前","系统自动调用，执行一些清理工作。",[10,18522,18523,18526],{},[358,18524,18525],{},"构造函数语法：",[42,18527,18528],{},"类名(){}",[159,18530,18531,18534,18537,18540,18543],{},[162,18532,18533],{},"构造函数，没有返回值也不写void",[162,18535,18536],{},"函数名称与类名相同",[162,18538,18539],{},"构造函数可以有参数，因此可以发生重载",[162,18541,18542],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[162,18544,18545,18546,637],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[42,18547,18548],{},"Person(){}",[10,18550,18551,13878,18554],{},[358,18552,18553],{},"析构函数语法：",[42,18555,18556],{},"~类名(){}",[159,18558,18559,18562,18565,18571],{},[162,18560,18561],{},"析构函数，没有返回值也不写void",[162,18563,18564],{},"函数名称与类名相同,在名称前加上符号  ~",[162,18566,18567,18568],{},"析构函数不可以有参数，因此",[358,18569,18570],{},"不可以发生重载",[162,18572,18573],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[35,18575,18577],{"className":197,"code":18576,"language":199,"meta":40,"style":40},"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",[42,18578,18579,18585,18589,18593,18598,18605,18609,18622,18626,18631,18638,18642,18655,18659,18663,18667,18671,18679,18683,18691,18695,18699,18707,18711,18716,18720,18727,18731,18744,18748,18756],{"__ignoreMap":40},[45,18580,18581,18583],{"class":47,"line":48},[45,18582,14777],{"class":93},[45,18584,15254],{"class":2046},[45,18586,18587],{"class":47,"line":125},[45,18588,1629],{"class":51},[45,18590,18591],{"class":47,"line":1262},[45,18592,14799],{"class":93},[45,18594,18595],{"class":47,"line":1277},[45,18596,18597],{"class":267},"    \u002F\u002F构造函数\n",[45,18599,18600,18603],{"class":47,"line":1283},[45,18601,18602],{"class":2046},"    Person",[45,18604,2059],{"class":51},[45,18606,18607],{"class":47,"line":1297},[45,18608,2113],{"class":51},[45,18610,18611,18613,18615,18618,18620],{"class":47,"line":1303},[45,18612,9752],{"class":51},[45,18614,1251],{"class":93},[45,18616,18617],{"class":313}," \"Person的构造函数调用\"",[45,18619,1527],{"class":93},[45,18621,8923],{"class":51},[45,18623,18624],{"class":47,"line":1394},[45,18625,2270],{"class":51},[45,18627,18628],{"class":47,"line":1400},[45,18629,18630],{"class":267},"    \u002F\u002F析构函数\n",[45,18632,18633,18636],{"class":47,"line":1412},[45,18634,18635],{"class":2046},"    ~Person",[45,18637,2059],{"class":51},[45,18639,18640],{"class":47,"line":1695},[45,18641,2113],{"class":51},[45,18643,18644,18646,18648,18651,18653],{"class":47,"line":1700},[45,18645,9752],{"class":51},[45,18647,1251],{"class":93},[45,18649,18650],{"class":313}," \"Person的析构函数调用\"",[45,18652,1527],{"class":93},[45,18654,8923],{"class":51},[45,18656,18657],{"class":47,"line":1706},[45,18658,2270],{"class":51},[45,18660,18661],{"class":47,"line":1711},[45,18662,2483],{"emptyLinePlaceholder":133},[45,18664,18665],{"class":47,"line":1725},[45,18666,4078],{"class":51},[45,18668,18669],{"class":47,"line":1730},[45,18670,2483],{"emptyLinePlaceholder":133},[45,18672,18673,18675,18677],{"class":47,"line":1736},[45,18674,5447],{"class":93},[45,18676,5671],{"class":2046},[45,18678,2059],{"class":51},[45,18680,18681],{"class":47,"line":1757},[45,18682,1629],{"class":51},[45,18684,18685,18688],{"class":47,"line":1762},[45,18686,18687],{"class":51},"    Person p;",[45,18689,18690],{"class":267},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[45,18692,18693],{"class":47,"line":1776},[45,18694,1648],{"class":51},[45,18696,18697],{"class":47,"line":1781},[45,18698,2483],{"emptyLinePlaceholder":133},[45,18700,18701,18703,18705],{"class":47,"line":1810},[45,18702,212],{"class":93},[45,18704,2056],{"class":2046},[45,18706,10936],{"class":51},[45,18708,18709],{"class":47,"line":1815},[45,18710,13293],{"class":51},[45,18712,18713],{"class":47,"line":1832},[45,18714,18715],{"class":267},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[45,18717,18718],{"class":47,"line":1837},[45,18719,2483],{"emptyLinePlaceholder":133},[45,18721,18722,18724],{"class":47,"line":1842},[45,18723,18687],{"class":51},[45,18725,18726],{"class":267},"\u002F\u002F只有构造函数\n",[45,18728,18729],{"class":47,"line":1847},[45,18730,2483],{"emptyLinePlaceholder":133},[45,18732,18733,18735,18737,18739,18741],{"class":47,"line":1861},[45,18734,2386],{"class":2046},[45,18736,209],{"class":51},[45,18738,2391],{"class":313},[45,18740,6049],{"class":51},[45,18742,18743],{"class":267},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[45,18745,18746],{"class":47,"line":1866},[45,18747,2483],{"emptyLinePlaceholder":133},[45,18749,18750,18752,18754],{"class":47,"line":2660},[45,18751,4173],{"class":93},[45,18753,4176],{"class":257},[45,18755,1373],{"class":51},[45,18757,18758],{"class":47,"line":2674},[45,18759,1648],{"class":51},[10,18761,18762],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[176,18764,18766],{"id":18765},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[10,18768,18769],{},"两种分类方式：",[10,18771,18772],{},"​\t按参数分为： 有参构造和无参构造",[10,18774,18775],{},"​\t按类型分为： 普通构造和拷贝构造",[10,18777,18778],{},"三种调用方式：",[10,18780,18781],{},"​\t括号法",[10,18783,18784],{},"​\t显示法",[10,18786,18787],{},"​\t隐式转换法",[35,18789,18791],{"className":197,"code":18790,"language":199,"meta":40,"style":40},"#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",[42,18792,18793,18799,18809,18814,18819,18824,18829,18833,18841,18845,18849,18853,18859,18863,18876,18880,18892,18896,18905,18918,18922,18926,18932,18936,18949,18953,18958,18974,18978,18983,18992,19005,19009,19015,19019,19024,19032,19036,19041,19045,19053,19057,19062,19067,19072,19077,19082,19086,19091,19096,19101,19106,19110,19115,19120,19136,19148,19153,19157,19162,19167,19172,19176,19181,19195,19208,19212,19220,19224,19230,19236,19244],{"__ignoreMap":40},[45,18794,18795,18797],{"class":47,"line":48},[45,18796,2032],{"class":93},[45,18798,2035],{"class":313},[45,18800,18801,18803,18805,18807],{"class":47,"line":125},[45,18802,2040],{"class":93},[45,18804,2043],{"class":93},[45,18806,2047],{"class":2046},[45,18808,1373],{"class":51},[45,18810,18811],{"class":47,"line":1262},[45,18812,18813],{"class":267},"\u002F\u002F1.构造函数的分类及调用\n",[45,18815,18816],{"class":47,"line":1277},[45,18817,18818],{"class":267},"\u002F\u002F分类\n",[45,18820,18821],{"class":47,"line":1283},[45,18822,18823],{"class":267},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[45,18825,18826],{"class":47,"line":1297},[45,18827,18828],{"class":267},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[45,18830,18831],{"class":47,"line":1303},[45,18832,2483],{"emptyLinePlaceholder":133},[45,18834,18835,18837,18839],{"class":47,"line":1394},[45,18836,14777],{"class":93},[45,18838,15652],{"class":2046},[45,18840,2757],{"class":51},[45,18842,18843],{"class":47,"line":1400},[45,18844,1629],{"class":51},[45,18846,18847],{"class":47,"line":1412},[45,18848,14799],{"class":93},[45,18850,18851],{"class":47,"line":1695},[45,18852,18597],{"class":267},[45,18854,18855,18857],{"class":47,"line":1700},[45,18856,18602],{"class":2046},[45,18858,2059],{"class":51},[45,18860,18861],{"class":47,"line":1706},[45,18862,2113],{"class":51},[45,18864,18865,18867,18869,18872,18874],{"class":47,"line":1711},[45,18866,3534],{"class":51},[45,18868,1251],{"class":93},[45,18870,18871],{"class":313},"\"Person构造函数无参构造\"",[45,18873,1251],{"class":93},[45,18875,1274],{"class":51},[45,18877,18878],{"class":47,"line":1725},[45,18879,2270],{"class":51},[45,18881,18882,18884,18886,18888,18890],{"class":47,"line":1730},[45,18883,18602],{"class":2046},[45,18885,209],{"class":51},[45,18887,212],{"class":93},[45,18889,1481],{"class":5299},[45,18891,215],{"class":51},[45,18893,18894],{"class":47,"line":1736},[45,18895,2113],{"class":51},[45,18897,18898,18901,18903],{"class":47,"line":1757},[45,18899,18900],{"class":51},"        age",[45,18902,254],{"class":93},[45,18904,6280],{"class":51},[45,18906,18907,18909,18911,18914,18916],{"class":47,"line":1762},[45,18908,3534],{"class":51},[45,18910,1251],{"class":93},[45,18912,18913],{"class":313},"\"Person构造函数有参构造\"",[45,18915,1251],{"class":93},[45,18917,1274],{"class":51},[45,18919,18920],{"class":47,"line":1776},[45,18921,2270],{"class":51},[45,18923,18924],{"class":47,"line":1781},[45,18925,18630],{"class":267},[45,18927,18928,18930],{"class":47,"line":1810},[45,18929,18635],{"class":2046},[45,18931,2059],{"class":51},[45,18933,18934],{"class":47,"line":1815},[45,18935,2113],{"class":51},[45,18937,18938,18940,18942,18945,18947],{"class":47,"line":1832},[45,18939,3534],{"class":51},[45,18941,1251],{"class":93},[45,18943,18944],{"class":313},"\"Person析构函数被调用\"",[45,18946,1251],{"class":93},[45,18948,1274],{"class":51},[45,18950,18951],{"class":47,"line":1837},[45,18952,2270],{"class":51},[45,18954,18955],{"class":47,"line":1842},[45,18956,18957],{"class":267},"    \u002F\u002F拷贝构造函数\n",[45,18959,18960,18962,18964,18966,18968,18970,18972],{"class":47,"line":1847},[45,18961,18602],{"class":2046},[45,18963,209],{"class":51},[45,18965,6875],{"class":93},[45,18967,15652],{"class":2046},[45,18969,10667],{"class":93},[45,18971,10],{"class":5299},[45,18973,215],{"class":51},[45,18975,18976],{"class":47,"line":1861},[45,18977,2113],{"class":51},[45,18979,18980],{"class":47,"line":1866},[45,18981,18982],{"class":267},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[45,18984,18985,18987,18989],{"class":47,"line":2660},[45,18986,18900],{"class":51},[45,18988,254],{"class":93},[45,18990,18991],{"class":51},"p.age;\n",[45,18993,18994,18996,18998,19001,19003],{"class":47,"line":2674},[45,18995,3534],{"class":51},[45,18997,1251],{"class":93},[45,18999,19000],{"class":313},"\"Person拷贝构造函数被调用\"",[45,19002,1251],{"class":93},[45,19004,1274],{"class":51},[45,19006,19007],{"class":47,"line":2682},[45,19008,2270],{"class":51},[45,19010,19011,19013],{"class":47,"line":2687},[45,19012,2068],{"class":93},[45,19014,7880],{"class":51},[45,19016,19017],{"class":47,"line":2693},[45,19018,4078],{"class":51},[45,19020,19021],{"class":47,"line":2699},[45,19022,19023],{"class":267},"\u002F\u002F调用\n",[45,19025,19026,19028,19030],{"class":47,"line":2704},[45,19027,5447],{"class":93},[45,19029,5671],{"class":2046},[45,19031,2059],{"class":51},[45,19033,19034],{"class":47,"line":8031},[45,19035,1629],{"class":51},[45,19037,19038],{"class":47,"line":8055},[45,19039,19040],{"class":267},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[45,19042,19043],{"class":47,"line":8060},[45,19044,1648],{"class":51},[45,19046,19047,19049,19051],{"class":47,"line":8066},[45,19048,5447],{"class":93},[45,19050,5740],{"class":2046},[45,19052,2059],{"class":51},[45,19054,19055],{"class":47,"line":8093},[45,19056,1629],{"class":51},[45,19058,19059],{"class":47,"line":8098},[45,19060,19061],{"class":267},"    \u002F\u002F1.括号法\n",[45,19063,19064],{"class":47,"line":8104},[45,19065,19066],{"class":267},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[45,19068,19069],{"class":47,"line":8116},[45,19070,19071],{"class":267},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[45,19073,19074],{"class":47,"line":8128},[45,19075,19076],{"class":267},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[45,19078,19079],{"class":47,"line":8140},[45,19080,19081],{"class":267},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[45,19083,19084],{"class":47,"line":9799},[45,19085,2483],{"emptyLinePlaceholder":133},[45,19087,19088],{"class":47,"line":9824},[45,19089,19090],{"class":267},"    \u002F\u002F注意事项\n",[45,19092,19093],{"class":47,"line":9847},[45,19094,19095],{"class":267},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[45,19097,19098],{"class":47,"line":9871},[45,19099,19100],{"class":267},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[45,19102,19103],{"class":47,"line":9876},[45,19104,19105],{"class":267},"    \u002F\u002F Person p4();\n",[45,19107,19108],{"class":47,"line":9881},[45,19109,2483],{"emptyLinePlaceholder":133},[45,19111,19112],{"class":47,"line":9886},[45,19113,19114],{"class":267},"    \u002F\u002F2.显示法\n",[45,19116,19117],{"class":47,"line":9895},[45,19118,19119],{"class":51},"    Person p1;\n",[45,19121,19122,19125,19127,19130,19132,19134],{"class":47,"line":9900},[45,19123,19124],{"class":51},"    Person p2",[45,19126,254],{"class":93},[45,19128,19129],{"class":2046},"Person",[45,19131,209],{"class":51},[45,19133,654],{"class":257},[45,19135,2802],{"class":51},[45,19137,19138,19141,19143,19145],{"class":47,"line":9906},[45,19139,19140],{"class":51},"    Person p3",[45,19142,254],{"class":93},[45,19144,19129],{"class":2046},[45,19146,19147],{"class":51},"(p2);\n",[45,19149,19150],{"class":47,"line":9927},[45,19151,19152],{"class":267},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[45,19154,19155],{"class":47,"line":9933},[45,19156,2483],{"emptyLinePlaceholder":133},[45,19158,19159],{"class":47,"line":9947},[45,19160,19161],{"class":267},"    \u002F\u002F 注意事项2\n",[45,19163,19164],{"class":47,"line":9953},[45,19165,19166],{"class":267},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[45,19168,19169],{"class":47,"line":9980},[45,19170,19171],{"class":267},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[45,19173,19174],{"class":47,"line":9989},[45,19175,2483],{"emptyLinePlaceholder":133},[45,19177,19178],{"class":47,"line":9995},[45,19179,19180],{"class":267},"    \u002F\u002F3.隐士转换法\n",[45,19182,19183,19186,19188,19190,19192],{"class":47,"line":10003},[45,19184,19185],{"class":51},"    Person p4",[45,19187,254],{"class":93},[45,19189,654],{"class":257},[45,19191,264],{"class":51},[45,19193,19194],{"class":267},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[45,19196,19197,19200,19202,19205],{"class":47,"line":10008},[45,19198,19199],{"class":51},"    Person p5",[45,19201,254],{"class":93},[45,19203,19204],{"class":51},"p4;",[45,19206,19207],{"class":267}," \u002F\u002F 这里会调用拷贝构造函数\n",[45,19209,19210],{"class":47,"line":16687},[45,19211,1648],{"class":51},[45,19213,19214,19216,19218],{"class":47,"line":16693},[45,19215,212],{"class":93},[45,19217,2056],{"class":2046},[45,19219,2059],{"class":51},[45,19221,19222],{"class":47,"line":16716},[45,19223,1629],{"class":51},[45,19225,19226,19228],{"class":47,"line":16722},[45,19227,5716],{"class":2046},[45,19229,5719],{"class":51},[45,19231,19232,19234],{"class":47,"line":16745},[45,19233,5785],{"class":2046},[45,19235,5719],{"class":51},[45,19237,19238,19240,19242],{"class":47,"line":16759},[45,19239,4173],{"class":93},[45,19241,4176],{"class":257},[45,19243,1373],{"class":51},[45,19245,19246],{"class":47,"line":16779},[45,19247,1648],{"class":51},[10,19249,19250,19253],{},[358,19251,19252],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[176,19255,19257],{"id":19256},"_823拷贝构造函数","8.2.3拷贝构造函数",[10,19259,19260],{},"C++中拷贝构造函数调用时机通常有三种情况",[1214,19262,19263,19266,19269],{},[162,19264,19265],{},"使用一个已经创建完毕的对象来初始化一个新对象",[162,19267,19268],{},"值传递的方式给函数参数传值",[162,19270,19271],{},"以值方式返回局部对象",[35,19273,19275],{"className":197,"code":19274,"language":199,"meta":40,"style":40},"#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",[42,19276,19277,19283,19293,19297,19302,19306,19311,19316,19321,19327,19331,19335,19341,19345,19358,19362,19367,19379,19383,19391,19404,19408,19412,19428,19432,19441,19454,19458,19464,19468,19480,19484,19490,19494,19498,19506,19510,19523,19531,19549,19553,19558,19563,19578,19582,19595,19599,19607,19611,19615,19623,19627,19632,19641,19645,19649,19674,19684,19688,19696,19700,19711,19736,19740,19744,19748,19756,19760,19765,19770,19777,19782,19787,19792,19797,19801,19806,19810,19815,19819,19824,19829,19833,19837,19842,19847,19855],{"__ignoreMap":40},[45,19278,19279,19281],{"class":47,"line":48},[45,19280,2032],{"class":93},[45,19282,2035],{"class":313},[45,19284,19285,19287,19289,19291],{"class":47,"line":125},[45,19286,2040],{"class":93},[45,19288,2043],{"class":93},[45,19290,2047],{"class":2046},[45,19292,1373],{"class":51},[45,19294,19295],{"class":47,"line":1262},[45,19296,2483],{"emptyLinePlaceholder":133},[45,19298,19299],{"class":47,"line":1277},[45,19300,19301],{"class":267},"\u002F\u002F拷贝构造函数调用时机\n",[45,19303,19304],{"class":47,"line":1283},[45,19305,2483],{"emptyLinePlaceholder":133},[45,19307,19308],{"class":47,"line":1297},[45,19309,19310],{"class":267},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[45,19312,19313],{"class":47,"line":1303},[45,19314,19315],{"class":267},"\u002F\u002F2.值传递的方式给函数参数传值\n",[45,19317,19318],{"class":47,"line":1394},[45,19319,19320],{"class":267},"\u002F\u002F3.以值方式返回局部对象\n",[45,19322,19323,19325],{"class":47,"line":1400},[45,19324,14777],{"class":93},[45,19326,15254],{"class":2046},[45,19328,19329],{"class":47,"line":1412},[45,19330,1629],{"class":51},[45,19332,19333],{"class":47,"line":1695},[45,19334,14799],{"class":93},[45,19336,19337,19339],{"class":47,"line":1700},[45,19338,18602],{"class":2046},[45,19340,2059],{"class":51},[45,19342,19343],{"class":47,"line":1706},[45,19344,2113],{"class":51},[45,19346,19347,19349,19351,19354,19356],{"class":47,"line":1711},[45,19348,9752],{"class":51},[45,19350,1251],{"class":93},[45,19352,19353],{"class":313}," \"Person的默认构造函数调用\"",[45,19355,1527],{"class":93},[45,19357,8923],{"class":51},[45,19359,19360],{"class":47,"line":1725},[45,19361,2270],{"class":51},[45,19363,19364],{"class":47,"line":1730},[45,19365,19366],{"class":267},"    \u002F\u002F有参构造\n",[45,19368,19369,19371,19373,19375,19377],{"class":47,"line":1736},[45,19370,18602],{"class":2046},[45,19372,209],{"class":51},[45,19374,212],{"class":93},[45,19376,15772],{"class":5299},[45,19378,215],{"class":51},[45,19380,19381],{"class":47,"line":1757},[45,19382,2113],{"class":51},[45,19384,19385,19387,19389],{"class":47,"line":1762},[45,19386,15826],{"class":51},[45,19388,254],{"class":93},[45,19390,7880],{"class":51},[45,19392,19393,19395,19397,19400,19402],{"class":47,"line":1776},[45,19394,9752],{"class":51},[45,19396,1251],{"class":93},[45,19398,19399],{"class":313}," \"Person的有参构造函数调用\"",[45,19401,1527],{"class":93},[45,19403,8923],{"class":51},[45,19405,19406],{"class":47,"line":1781},[45,19407,2270],{"class":51},[45,19409,19410],{"class":47,"line":1810},[45,19411,18957],{"class":267},[45,19413,19414,19416,19418,19420,19422,19424,19426],{"class":47,"line":1815},[45,19415,18602],{"class":2046},[45,19417,209],{"class":51},[45,19419,6875],{"class":93},[45,19421,15652],{"class":2046},[45,19423,10667],{"class":93},[45,19425,10],{"class":5299},[45,19427,215],{"class":51},[45,19429,19430],{"class":47,"line":1832},[45,19431,2113],{"class":51},[45,19433,19434,19436,19438],{"class":47,"line":1837},[45,19435,15826],{"class":51},[45,19437,254],{"class":93},[45,19439,19440],{"class":51}," p.m_Age;\n",[45,19442,19443,19445,19447,19450,19452],{"class":47,"line":1842},[45,19444,9752],{"class":51},[45,19446,1251],{"class":93},[45,19448,19449],{"class":313}," \"Person的拷贝构造函数调用\"",[45,19451,1527],{"class":93},[45,19453,8923],{"class":51},[45,19455,19456],{"class":47,"line":1847},[45,19457,2270],{"class":51},[45,19459,19460,19462],{"class":47,"line":1861},[45,19461,18635],{"class":2046},[45,19463,2059],{"class":51},[45,19465,19466],{"class":47,"line":1866},[45,19467,2113],{"class":51},[45,19469,19470,19472,19474,19476,19478],{"class":47,"line":2660},[45,19471,9752],{"class":51},[45,19473,1251],{"class":93},[45,19475,18650],{"class":313},[45,19477,1527],{"class":93},[45,19479,8923],{"class":51},[45,19481,19482],{"class":47,"line":2674},[45,19483,2270],{"class":51},[45,19485,19486,19488],{"class":47,"line":2682},[45,19487,2068],{"class":93},[45,19489,15749],{"class":51},[45,19491,19492],{"class":47,"line":2687},[45,19493,4078],{"class":51},[45,19495,19496],{"class":47,"line":2693},[45,19497,19310],{"class":267},[45,19499,19500,19502,19504],{"class":47,"line":2699},[45,19501,5447],{"class":93},[45,19503,5671],{"class":2046},[45,19505,2059],{"class":51},[45,19507,19508],{"class":47,"line":2704},[45,19509,1629],{"class":51},[45,19511,19512,19515,19517,19519,19521],{"class":47,"line":8031},[45,19513,19514],{"class":51},"    Person ",[45,19516,7213],{"class":2046},[45,19518,209],{"class":51},[45,19520,907],{"class":257},[45,19522,2802],{"class":51},[45,19524,19525,19527,19529],{"class":47,"line":8055},[45,19526,19514],{"class":51},[45,19528,7116],{"class":2046},[45,19530,17598],{"class":51},[45,19532,19533,19535,19537,19540,19542,19545,19547],{"class":47,"line":8060},[45,19534,1634],{"class":51},[45,19536,1251],{"class":93},[45,19538,19539],{"class":313},"\"P2的年龄为：\"",[45,19541,1251],{"class":93},[45,19543,19544],{"class":51},"p2.m_Age",[45,19546,1251],{"class":93},[45,19548,1274],{"class":51},[45,19550,19551],{"class":47,"line":8066},[45,19552,1648],{"class":51},[45,19554,19555],{"class":47,"line":8093},[45,19556,19557],{"class":267},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[45,19559,19560],{"class":47,"line":8098},[45,19561,19562],{"class":267},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[45,19564,19565,19567,19570,19572,19574,19576],{"class":47,"line":8104},[45,19566,5447],{"class":93},[45,19568,19569],{"class":2046}," doWork",[45,19571,209],{"class":51},[45,19573,19129],{"class":2046},[45,19575,6908],{"class":5299},[45,19577,215],{"class":51},[45,19579,19580],{"class":47,"line":8116},[45,19581,1629],{"class":51},[45,19583,19584,19586,19588,19591,19593],{"class":47,"line":8128},[45,19585,6612],{"class":51},[45,19587,1251],{"class":93},[45,19589,19590],{"class":313}," \"doWork函数调用\"",[45,19592,1527],{"class":93},[45,19594,8923],{"class":51},[45,19596,19597],{"class":47,"line":8140},[45,19598,1648],{"class":51},[45,19600,19601,19603,19605],{"class":47,"line":9799},[45,19602,5447],{"class":93},[45,19604,5740],{"class":2046},[45,19606,2059],{"class":51},[45,19608,19609],{"class":47,"line":9824},[45,19610,1629],{"class":51},[45,19612,19613],{"class":47,"line":9847},[45,19614,15396],{"class":51},[45,19616,19617,19620],{"class":47,"line":9871},[45,19618,19619],{"class":2046},"    doWork",[45,19621,19622],{"class":51},"(p);\n",[45,19624,19625],{"class":47,"line":9876},[45,19626,1648],{"class":51},[45,19628,19629],{"class":47,"line":9881},[45,19630,19631],{"class":267},"\u002F\u002F 3.以值方式返回局部对象\n",[45,19633,19634,19636,19639],{"class":47,"line":9886},[45,19635,19129],{"class":2046},[45,19637,19638],{"class":2046}," doWork2",[45,19640,2059],{"class":51},[45,19642,19643],{"class":47,"line":9895},[45,19644,1629],{"class":51},[45,19646,19647],{"class":47,"line":9900},[45,19648,19119],{"class":51},[45,19650,19651,19653,19655,19657,19659,19661,19663,19665,19667,19669,19671],{"class":47,"line":9906},[45,19652,1634],{"class":51},[45,19654,1251],{"class":93},[45,19656,209],{"class":51},[45,19658,212],{"class":93},[45,19660,6601],{"class":93},[45,19662,637],{"class":51},[45,19664,561],{"class":93},[45,19666,7213],{"class":51},[45,19668,1251],{"class":93},[45,19670,1321],{"class":51},[45,19672,19673],{"class":267},"\u002F\u002F打印p1的地址\n",[45,19675,19676,19678,19681],{"class":47,"line":9927},[45,19677,4173],{"class":93},[45,19679,19680],{"class":51}," p1;",[45,19682,19683],{"class":267},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[45,19685,19686],{"class":47,"line":9933},[45,19687,1648],{"class":51},[45,19689,19690,19692,19694],{"class":47,"line":9947},[45,19691,5447],{"class":93},[45,19693,5812],{"class":2046},[45,19695,2059],{"class":51},[45,19697,19698],{"class":47,"line":9953},[45,19699,1629],{"class":51},[45,19701,19702,19705,19707,19709],{"class":47,"line":9980},[45,19703,19704],{"class":51},"    Person p ",[45,19706,254],{"class":93},[45,19708,19638],{"class":2046},[45,19710,5719],{"class":51},[45,19712,19713,19715,19717,19719,19721,19723,19725,19727,19729,19731,19733],{"class":47,"line":9989},[45,19714,1634],{"class":51},[45,19716,1251],{"class":93},[45,19718,209],{"class":51},[45,19720,212],{"class":93},[45,19722,6601],{"class":93},[45,19724,637],{"class":51},[45,19726,561],{"class":93},[45,19728,10],{"class":51},[45,19730,1251],{"class":93},[45,19732,1321],{"class":51},[45,19734,19735],{"class":267},"\u002F\u002F打印p的地址\n",[45,19737,19738],{"class":47,"line":9995},[45,19739,1648],{"class":51},[45,19741,19742],{"class":47,"line":10003},[45,19743,2483],{"emptyLinePlaceholder":133},[45,19745,19746],{"class":47,"line":10008},[45,19747,2483],{"emptyLinePlaceholder":133},[45,19749,19750,19752,19754],{"class":47,"line":16687},[45,19751,212],{"class":93},[45,19753,2056],{"class":2046},[45,19755,2059],{"class":51},[45,19757,19758],{"class":47,"line":16693},[45,19759,1629],{"class":51},[45,19761,19762],{"class":47,"line":16716},[45,19763,19764],{"class":267},"    \u002F\u002F test01();\n",[45,19766,19767],{"class":47,"line":16722},[45,19768,19769],{"class":267},"    \u002F\u002F test02();\n",[45,19771,19772,19775],{"class":47,"line":16745},[45,19773,19774],{"class":2046},"    test03",[45,19776,5719],{"class":51},[45,19778,19779],{"class":47,"line":16759},[45,19780,19781],{"class":267},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[45,19783,19784],{"class":47,"line":16779},[45,19785,19786],{"class":267},"\u002F\u002F 输出结果如下：\n",[45,19788,19789],{"class":47,"line":16785},[45,19790,19791],{"class":267},"\u002F\u002F Person的默认构造函数调用\n",[45,19793,19794],{"class":47,"line":16796},[45,19795,19796],{"class":267},"\u002F\u002F 0x7fffffffceec\n",[45,19798,19799],{"class":47,"line":16819},[45,19800,19796],{"class":267},[45,19802,19803],{"class":47,"line":16841},[45,19804,19805],{"class":267},"\u002F\u002F Person的析构函数调用\n",[45,19807,19808],{"class":47,"line":16846},[45,19809,2483],{"emptyLinePlaceholder":133},[45,19811,19812],{"class":47,"line":16852},[45,19813,19814],{"class":267},"\u002F\u002F 之前的输出结果如下：\n",[45,19816,19817],{"class":47,"line":16866},[45,19818,19791],{"class":267},[45,19820,19821],{"class":47,"line":16879},[45,19822,19823],{"class":267},"\u002F\u002F 地址\n",[45,19825,19826],{"class":47,"line":16884},[45,19827,19828],{"class":267},"\u002F\u002F Person的拷贝构造函数调用\n",[45,19830,19831],{"class":47,"line":16898},[45,19832,19805],{"class":267},[45,19834,19835],{"class":47,"line":16903},[45,19836,19823],{"class":267},[45,19838,19839],{"class":47,"line":16909},[45,19840,19841],{"class":267},"\u002F\u002F (这两次输出的地址也是不同的) \n",[45,19843,19844],{"class":47,"line":16914},[45,19845,19846],{"class":267},"\u002F\u002F Person的析构函数调用     \n",[45,19848,19849,19851,19853],{"class":47,"line":16928},[45,19850,4173],{"class":93},[45,19852,4176],{"class":257},[45,19854,1373],{"class":51},[45,19856,19857],{"class":47,"line":16933},[45,19858,1648],{"class":51},[10,19860,19861],{},"简化版理解",[35,19863,19865],{"className":197,"code":19864,"language":199,"meta":40,"style":40},"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",[42,19866,19867,19875,19879,19885,19898,19909,19913,19925,19938,19946,19950,19966,19979,19988,19992,19997,20003,20016,20020,20024,20031,20035,20039,20044,20052,20056,20072,20085,20098,20102,20107,20115,20119,20123,20128,20133,20149,20157,20164,20170,20174,20178,20183,20191,20195,20199,20222,20229,20233,20237,20245,20249,20259,20281,20285,20289,20293,20301,20305,20310,20315,20321,20325,20335,20339,20347],{"__ignoreMap":40},[45,19868,19869,19871,19873],{"class":47,"line":48},[45,19870,14777],{"class":93},[45,19872,15652],{"class":2046},[45,19874,15655],{"class":51},[45,19876,19877],{"class":47,"line":125},[45,19878,14799],{"class":93},[45,19880,19881,19883],{"class":47,"line":1262},[45,19882,18602],{"class":2046},[45,19884,10936],{"class":51},[45,19886,19887,19889,19891,19894,19896],{"class":47,"line":1277},[45,19888,9752],{"class":51},[45,19890,1251],{"class":93},[45,19892,19893],{"class":313}," \"无参构造函数!\"",[45,19895,1527],{"class":93},[45,19897,8923],{"class":51},[45,19899,19900,19903,19905,19907],{"class":47,"line":1283},[45,19901,19902],{"class":51},"        mAge ",[45,19904,254],{"class":93},[45,19906,4176],{"class":257},[45,19908,1373],{"class":51},[45,19910,19911],{"class":47,"line":1297},[45,19912,2270],{"class":51},[45,19914,19915,19917,19919,19921,19923],{"class":47,"line":1303},[45,19916,18602],{"class":2046},[45,19918,209],{"class":51},[45,19920,212],{"class":93},[45,19922,15772],{"class":5299},[45,19924,12525],{"class":51},[45,19926,19927,19929,19931,19934,19936],{"class":47,"line":1394},[45,19928,9752],{"class":51},[45,19930,1251],{"class":93},[45,19932,19933],{"class":313}," \"有参构造函数!\"",[45,19935,1527],{"class":93},[45,19937,8923],{"class":51},[45,19939,19940,19942,19944],{"class":47,"line":1400},[45,19941,19902],{"class":51},[45,19943,254],{"class":93},[45,19945,7880],{"class":51},[45,19947,19948],{"class":47,"line":1412},[45,19949,2270],{"class":51},[45,19951,19952,19954,19956,19958,19960,19962,19964],{"class":47,"line":1695},[45,19953,18602],{"class":2046},[45,19955,209],{"class":51},[45,19957,6875],{"class":93},[45,19959,15652],{"class":2046},[45,19961,561],{"class":93},[45,19963,6908],{"class":5299},[45,19965,12525],{"class":51},[45,19967,19968,19970,19972,19975,19977],{"class":47,"line":1700},[45,19969,9752],{"class":51},[45,19971,1251],{"class":93},[45,19973,19974],{"class":313}," \"拷贝构造函数!\"",[45,19976,1527],{"class":93},[45,19978,8923],{"class":51},[45,19980,19981,19983,19985],{"class":47,"line":1706},[45,19982,19902],{"class":51},[45,19984,254],{"class":93},[45,19986,19987],{"class":51}," p.mAge;\n",[45,19989,19990],{"class":47,"line":1711},[45,19991,2270],{"class":51},[45,19993,19994],{"class":47,"line":1725},[45,19995,19996],{"class":267},"    \u002F\u002F析构函数在释放内存之前调用\n",[45,19998,19999,20001],{"class":47,"line":1730},[45,20000,18635],{"class":2046},[45,20002,10936],{"class":51},[45,20004,20005,20007,20009,20012,20014],{"class":47,"line":1736},[45,20006,9752],{"class":51},[45,20008,1251],{"class":93},[45,20010,20011],{"class":313}," \"析构函数!\"",[45,20013,1527],{"class":93},[45,20015,8923],{"class":51},[45,20017,20018],{"class":47,"line":1757},[45,20019,2270],{"class":51},[45,20021,20022],{"class":47,"line":1762},[45,20023,14799],{"class":93},[45,20025,20026,20028],{"class":47,"line":1776},[45,20027,2068],{"class":93},[45,20029,20030],{"class":51}," mAge;\n",[45,20032,20033],{"class":47,"line":1781},[45,20034,4078],{"class":51},[45,20036,20037],{"class":47,"line":1810},[45,20038,2483],{"emptyLinePlaceholder":133},[45,20040,20041],{"class":47,"line":1815},[45,20042,20043],{"class":267},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[45,20045,20046,20048,20050],{"class":47,"line":1832},[45,20047,5447],{"class":93},[45,20049,5671],{"class":2046},[45,20051,10936],{"class":51},[45,20053,20054],{"class":47,"line":1837},[45,20055,2483],{"emptyLinePlaceholder":133},[45,20057,20058,20060,20063,20065,20067,20069],{"class":47,"line":1842},[45,20059,19514],{"class":51},[45,20061,20062],{"class":2046},"man",[45,20064,209],{"class":51},[45,20066,519],{"class":257},[45,20068,6049],{"class":51},[45,20070,20071],{"class":267}," \u002F\u002Fp对象已经创建完毕\n",[45,20073,20074,20076,20079,20082],{"class":47,"line":1847},[45,20075,19514],{"class":51},[45,20077,20078],{"class":2046},"newman",[45,20080,20081],{"class":51},"(man);",[45,20083,20084],{"class":267}," \u002F\u002F调用拷贝构造函数\n",[45,20086,20087,20090,20092,20095],{"class":47,"line":1861},[45,20088,20089],{"class":51},"    Person newman2 ",[45,20091,254],{"class":93},[45,20093,20094],{"class":51}," man;",[45,20096,20097],{"class":267}," \u002F\u002F拷贝构造\n",[45,20099,20100],{"class":47,"line":1866},[45,20101,2483],{"emptyLinePlaceholder":133},[45,20103,20104],{"class":47,"line":2660},[45,20105,20106],{"class":267},"    \u002F\u002FPerson newman3;\n",[45,20108,20109,20112],{"class":47,"line":2674},[45,20110,20111],{"class":267},"    \u002F\u002Fnewman3 = man;",[45,20113,20114],{"class":267}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[45,20116,20117],{"class":47,"line":2682},[45,20118,1648],{"class":51},[45,20120,20121],{"class":47,"line":2687},[45,20122,2483],{"emptyLinePlaceholder":133},[45,20124,20125],{"class":47,"line":2693},[45,20126,20127],{"class":267},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[45,20129,20130],{"class":47,"line":2699},[45,20131,20132],{"class":267},"\u002F\u002F相当于Person p1 = p;\n",[45,20134,20135,20137,20139,20141,20143,20146],{"class":47,"line":2704},[45,20136,5447],{"class":93},[45,20138,19569],{"class":2046},[45,20140,209],{"class":51},[45,20142,19129],{"class":2046},[45,20144,20145],{"class":5299}," p1",[45,20147,20148],{"class":51},") {}\n",[45,20150,20151,20153,20155],{"class":47,"line":8031},[45,20152,5447],{"class":93},[45,20154,5740],{"class":2046},[45,20156,10936],{"class":51},[45,20158,20159,20161],{"class":47,"line":8055},[45,20160,18687],{"class":51},[45,20162,20163],{"class":267}," \u002F\u002F无参构造函数\n",[45,20165,20166,20168],{"class":47,"line":8060},[45,20167,19619],{"class":2046},[45,20169,19622],{"class":51},[45,20171,20172],{"class":47,"line":8066},[45,20173,1648],{"class":51},[45,20175,20176],{"class":47,"line":8093},[45,20177,2483],{"emptyLinePlaceholder":133},[45,20179,20180],{"class":47,"line":8098},[45,20181,20182],{"class":267},"\u002F\u002F3. 以值方式返回局部对象\n",[45,20184,20185,20187,20189],{"class":47,"line":8104},[45,20186,19129],{"class":2046},[45,20188,19638],{"class":2046},[45,20190,2059],{"class":51},[45,20192,20193],{"class":47,"line":8116},[45,20194,1629],{"class":51},[45,20196,20197],{"class":47,"line":8128},[45,20198,19119],{"class":51},[45,20200,20201,20203,20205,20207,20209,20211,20213,20215,20218,20220],{"class":47,"line":8140},[45,20202,6612],{"class":51},[45,20204,1251],{"class":93},[45,20206,1741],{"class":51},[45,20208,212],{"class":93},[45,20210,6601],{"class":93},[45,20212,637],{"class":51},[45,20214,561],{"class":93},[45,20216,20217],{"class":51},"p1 ",[45,20219,1251],{"class":93},[45,20221,8923],{"class":51},[45,20223,20224,20226],{"class":47,"line":9799},[45,20225,4173],{"class":93},[45,20227,20228],{"class":51}," p1;\n",[45,20230,20231],{"class":47,"line":9824},[45,20232,1648],{"class":51},[45,20234,20235],{"class":47,"line":9847},[45,20236,2483],{"emptyLinePlaceholder":133},[45,20238,20239,20241,20243],{"class":47,"line":9871},[45,20240,5447],{"class":93},[45,20242,5812],{"class":2046},[45,20244,2059],{"class":51},[45,20246,20247],{"class":47,"line":9876},[45,20248,1629],{"class":51},[45,20250,20251,20253,20255,20257],{"class":47,"line":9881},[45,20252,19704],{"class":51},[45,20254,254],{"class":93},[45,20256,19638],{"class":2046},[45,20258,5719],{"class":51},[45,20260,20261,20263,20265,20267,20269,20271,20273,20275,20277,20279],{"class":47,"line":9886},[45,20262,6612],{"class":51},[45,20264,1251],{"class":93},[45,20266,1741],{"class":51},[45,20268,212],{"class":93},[45,20270,6601],{"class":93},[45,20272,637],{"class":51},[45,20274,561],{"class":93},[45,20276,11531],{"class":51},[45,20278,1251],{"class":93},[45,20280,8923],{"class":51},[45,20282,20283],{"class":47,"line":9895},[45,20284,1648],{"class":51},[45,20286,20287],{"class":47,"line":9900},[45,20288,2483],{"emptyLinePlaceholder":133},[45,20290,20291],{"class":47,"line":9906},[45,20292,2483],{"emptyLinePlaceholder":133},[45,20294,20295,20297,20299],{"class":47,"line":9927},[45,20296,212],{"class":93},[45,20298,2056],{"class":2046},[45,20300,10936],{"class":51},[45,20302,20303],{"class":47,"line":9933},[45,20304,2483],{"emptyLinePlaceholder":133},[45,20306,20307],{"class":47,"line":9947},[45,20308,20309],{"class":267},"    \u002F\u002Ftest01();\n",[45,20311,20312],{"class":47,"line":9953},[45,20313,20314],{"class":267},"    \u002F\u002Ftest02();\n",[45,20316,20317,20319],{"class":47,"line":9980},[45,20318,19774],{"class":2046},[45,20320,5719],{"class":51},[45,20322,20323],{"class":47,"line":9989},[45,20324,2483],{"emptyLinePlaceholder":133},[45,20326,20327,20329,20331,20333],{"class":47,"line":9995},[45,20328,2386],{"class":2046},[45,20330,209],{"class":51},[45,20332,2391],{"class":313},[45,20334,2802],{"class":51},[45,20336,20337],{"class":47,"line":10003},[45,20338,2483],{"emptyLinePlaceholder":133},[45,20340,20341,20343,20345],{"class":47,"line":10008},[45,20342,4173],{"class":93},[45,20344,4176],{"class":257},[45,20346,1373],{"class":51},[45,20348,20349],{"class":47,"line":16687},[45,20350,1648],{"class":51},[176,20352,20354],{"id":20353},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[10,20356,20357],{},"默认情况下，c++编译器至少给一个类添加3个函数",[10,20359,20360],{},"1．默认构造函数(无参，函数体为空)",[10,20362,20363],{},"2．默认析构函数(无参，函数体为空)",[10,20365,20366],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[10,20368,20369],{},"构造函数调用规则如下：",[1214,20371,20372,20375],{},[162,20373,20374],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[162,20376,20377],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[35,20379,20381],{"className":197,"code":20380,"language":199,"meta":40,"style":40},"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",[42,20382,20383,20391,20395,20400,20406,20418,20422,20427,20439,20448,20460,20464,20468,20484,20493,20505,20509,20513,20519,20531,20535,20539,20545,20549,20553,20561,20565,20577,20582,20590,20594,20612,20616,20620,20628,20632,20637,20645,20660,20673,20677,20682,20689,20705,20718,20722,20726,20734,20738,20744,20748,20758,20762,20770],{"__ignoreMap":40},[45,20384,20385,20387,20389],{"class":47,"line":48},[45,20386,14777],{"class":93},[45,20388,15652],{"class":2046},[45,20390,15655],{"class":51},[45,20392,20393],{"class":47,"line":125},[45,20394,14799],{"class":93},[45,20396,20397],{"class":47,"line":1262},[45,20398,20399],{"class":267},"    \u002F\u002F无参（默认）构造函数\n",[45,20401,20402,20404],{"class":47,"line":1277},[45,20403,18602],{"class":2046},[45,20405,10936],{"class":51},[45,20407,20408,20410,20412,20414,20416],{"class":47,"line":1283},[45,20409,9752],{"class":51},[45,20411,1251],{"class":93},[45,20413,19893],{"class":313},[45,20415,1527],{"class":93},[45,20417,8923],{"class":51},[45,20419,20420],{"class":47,"line":1297},[45,20421,2270],{"class":51},[45,20423,20424],{"class":47,"line":1303},[45,20425,20426],{"class":267},"    \u002F\u002F有参构造函数\n",[45,20428,20429,20431,20433,20435,20437],{"class":47,"line":1394},[45,20430,18602],{"class":2046},[45,20432,209],{"class":51},[45,20434,212],{"class":93},[45,20436,1481],{"class":5299},[45,20438,12525],{"class":51},[45,20440,20441,20444,20446],{"class":47,"line":1400},[45,20442,20443],{"class":51},"        age ",[45,20445,254],{"class":93},[45,20447,1515],{"class":51},[45,20449,20450,20452,20454,20456,20458],{"class":47,"line":1412},[45,20451,9752],{"class":51},[45,20453,1251],{"class":93},[45,20455,19933],{"class":313},[45,20457,1527],{"class":93},[45,20459,8923],{"class":51},[45,20461,20462],{"class":47,"line":1695},[45,20463,2270],{"class":51},[45,20465,20466],{"class":47,"line":1700},[45,20467,18957],{"class":267},[45,20469,20470,20472,20474,20476,20478,20480,20482],{"class":47,"line":1706},[45,20471,18602],{"class":2046},[45,20473,209],{"class":51},[45,20475,6875],{"class":93},[45,20477,15652],{"class":2046},[45,20479,561],{"class":93},[45,20481,6908],{"class":5299},[45,20483,12525],{"class":51},[45,20485,20486,20488,20490],{"class":47,"line":1711},[45,20487,20443],{"class":51},[45,20489,254],{"class":93},[45,20491,20492],{"class":51}," p.age;\n",[45,20494,20495,20497,20499,20501,20503],{"class":47,"line":1725},[45,20496,9752],{"class":51},[45,20498,1251],{"class":93},[45,20500,19974],{"class":313},[45,20502,1527],{"class":93},[45,20504,8923],{"class":51},[45,20506,20507],{"class":47,"line":1730},[45,20508,2270],{"class":51},[45,20510,20511],{"class":47,"line":1736},[45,20512,18630],{"class":267},[45,20514,20515,20517],{"class":47,"line":1757},[45,20516,18635],{"class":2046},[45,20518,10936],{"class":51},[45,20520,20521,20523,20525,20527,20529],{"class":47,"line":1762},[45,20522,9752],{"class":51},[45,20524,1251],{"class":93},[45,20526,20011],{"class":313},[45,20528,1527],{"class":93},[45,20530,8923],{"class":51},[45,20532,20533],{"class":47,"line":1776},[45,20534,2270],{"class":51},[45,20536,20537],{"class":47,"line":1781},[45,20538,14799],{"class":93},[45,20540,20541,20543],{"class":47,"line":1810},[45,20542,2068],{"class":93},[45,20544,7880],{"class":51},[45,20546,20547],{"class":47,"line":1815},[45,20548,4078],{"class":51},[45,20550,20551],{"class":47,"line":1832},[45,20552,2483],{"emptyLinePlaceholder":133},[45,20554,20555,20557,20559],{"class":47,"line":1837},[45,20556,5447],{"class":93},[45,20558,5671],{"class":2046},[45,20560,2059],{"class":51},[45,20562,20563],{"class":47,"line":1842},[45,20564,1629],{"class":51},[45,20566,20567,20569,20571,20573,20575],{"class":47,"line":1847},[45,20568,19514],{"class":51},[45,20570,7213],{"class":2046},[45,20572,209],{"class":51},[45,20574,857],{"class":257},[45,20576,2802],{"class":51},[45,20578,20579],{"class":47,"line":1861},[45,20580,20581],{"class":267},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[45,20583,20584,20586,20588],{"class":47,"line":1866},[45,20585,19514],{"class":51},[45,20587,7116],{"class":2046},[45,20589,17598],{"class":51},[45,20591,20592],{"class":47,"line":2660},[45,20593,2483],{"emptyLinePlaceholder":133},[45,20595,20596,20598,20600,20603,20605,20608,20610],{"class":47,"line":2674},[45,20597,6612],{"class":51},[45,20599,1251],{"class":93},[45,20601,20602],{"class":313}," \"p2的年龄为： \"",[45,20604,1527],{"class":93},[45,20606,20607],{"class":51}," p2.age ",[45,20609,1251],{"class":93},[45,20611,8923],{"class":51},[45,20613,20614],{"class":47,"line":2682},[45,20615,1648],{"class":51},[45,20617,20618],{"class":47,"line":2687},[45,20619,2483],{"emptyLinePlaceholder":133},[45,20621,20622,20624,20626],{"class":47,"line":2693},[45,20623,5447],{"class":93},[45,20625,5740],{"class":2046},[45,20627,2059],{"class":51},[45,20629,20630],{"class":47,"line":2699},[45,20631,1629],{"class":51},[45,20633,20634],{"class":47,"line":2704},[45,20635,20636],{"class":267},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[45,20638,20639,20642],{"class":47,"line":8031},[45,20640,20641],{"class":51},"    Person p1;",[45,20643,20644],{"class":267}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[45,20646,20647,20649,20651,20653,20655,20657],{"class":47,"line":8055},[45,20648,19514],{"class":51},[45,20650,7116],{"class":2046},[45,20652,209],{"class":51},[45,20654,654],{"class":257},[45,20656,6049],{"class":51},[45,20658,20659],{"class":267}," \u002F\u002F用户提供的有参\n",[45,20661,20662,20664,20667,20670],{"class":47,"line":8060},[45,20663,19514],{"class":51},[45,20665,20666],{"class":2046},"p3",[45,20668,20669],{"class":51},"(p2);",[45,20671,20672],{"class":267}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[45,20674,20675],{"class":47,"line":8066},[45,20676,2483],{"emptyLinePlaceholder":133},[45,20678,20679],{"class":47,"line":8093},[45,20680,20681],{"class":267},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[45,20683,20684,20687],{"class":47,"line":8098},[45,20685,20686],{"class":51},"    Person p4;",[45,20688,20644],{"class":267},[45,20690,20691,20693,20696,20698,20700,20702],{"class":47,"line":8104},[45,20692,19514],{"class":51},[45,20694,20695],{"class":2046},"p5",[45,20697,209],{"class":51},[45,20699,654],{"class":257},[45,20701,6049],{"class":51},[45,20703,20704],{"class":267}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[45,20706,20707,20709,20712,20715],{"class":47,"line":8116},[45,20708,19514],{"class":51},[45,20710,20711],{"class":2046},"p6",[45,20713,20714],{"class":51},"(p5);",[45,20716,20717],{"class":267}," \u002F\u002F用户自己提供拷贝构造\n",[45,20719,20720],{"class":47,"line":8128},[45,20721,1648],{"class":51},[45,20723,20724],{"class":47,"line":8140},[45,20725,2483],{"emptyLinePlaceholder":133},[45,20727,20728,20730,20732],{"class":47,"line":9799},[45,20729,212],{"class":93},[45,20731,2056],{"class":2046},[45,20733,10936],{"class":51},[45,20735,20736],{"class":47,"line":9824},[45,20737,2483],{"emptyLinePlaceholder":133},[45,20739,20740,20742],{"class":47,"line":9847},[45,20741,5716],{"class":2046},[45,20743,5719],{"class":51},[45,20745,20746],{"class":47,"line":9871},[45,20747,2483],{"emptyLinePlaceholder":133},[45,20749,20750,20752,20754,20756],{"class":47,"line":9876},[45,20751,2386],{"class":2046},[45,20753,209],{"class":51},[45,20755,2391],{"class":313},[45,20757,2802],{"class":51},[45,20759,20760],{"class":47,"line":9881},[45,20761,2483],{"emptyLinePlaceholder":133},[45,20763,20764,20766,20768],{"class":47,"line":9886},[45,20765,4173],{"class":93},[45,20767,4176],{"class":257},[45,20769,1373],{"class":51},[45,20771,20772],{"class":47,"line":9895},[45,20773,1648],{"class":51},[176,20775,20777],{"id":20776},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[10,20779,20780],{},"浅拷贝：简单的赋值拷贝操作",[10,20782,20783],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[35,20785,20787],{"className":197,"code":20786,"language":199,"meta":40,"style":40},"#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",[42,20788,20789,20795,20805,20811,20815,20819,20824,20830,20834,20847,20851,20855,20862,20866,20876,20891,20904,20908,20913,20918,20934,20938,20951,20956,20961,20966,20975,20980,20995,20999,21003,21007,21013,21017,21022,21037,21041,21052,21066,21070,21079,21083,21089,21101,21105,21113,21117,21134,21165,21173,21201,21205,21209,21217,21221,21227],{"__ignoreMap":40},[45,20790,20791,20793],{"class":47,"line":48},[45,20792,2032],{"class":93},[45,20794,2035],{"class":313},[45,20796,20797,20799,20801,20803],{"class":47,"line":125},[45,20798,2040],{"class":93},[45,20800,2043],{"class":93},[45,20802,2047],{"class":2046},[45,20804,1373],{"class":51},[45,20806,20807,20809],{"class":47,"line":1262},[45,20808,14777],{"class":93},[45,20810,15254],{"class":2046},[45,20812,20813],{"class":47,"line":1277},[45,20814,1629],{"class":51},[45,20816,20817],{"class":47,"line":1283},[45,20818,14799],{"class":93},[45,20820,20821],{"class":47,"line":1297},[45,20822,20823],{"class":267},"    \u002F\u002F默认构造函数\n",[45,20825,20826,20828],{"class":47,"line":1303},[45,20827,18602],{"class":2046},[45,20829,2059],{"class":51},[45,20831,20832],{"class":47,"line":1394},[45,20833,2113],{"class":51},[45,20835,20836,20838,20840,20843,20845],{"class":47,"line":1400},[45,20837,3534],{"class":51},[45,20839,1251],{"class":93},[45,20841,20842],{"class":313},"\"默认构造函数\"",[45,20844,1251],{"class":93},[45,20846,1274],{"class":51},[45,20848,20849],{"class":47,"line":1412},[45,20850,2270],{"class":51},[45,20852,20853],{"class":47,"line":1695},[45,20854,20426],{"class":267},[45,20856,20857,20859],{"class":47,"line":1700},[45,20858,18635],{"class":2046},[45,20860,20861],{"class":51},"(int age,int height)\n",[45,20863,20864],{"class":47,"line":1706},[45,20865,2113],{"class":51},[45,20867,20868,20871,20873],{"class":47,"line":1711},[45,20869,20870],{"class":51},"        m_Age",[45,20872,254],{"class":93},[45,20874,20875],{"class":51},"age;\n",[45,20877,20878,20881,20883,20885,20888],{"class":47,"line":1725},[45,20879,20880],{"class":51},"        m_Height",[45,20882,11800],{"class":93},[45,20884,2465],{"class":93},[45,20886,20887],{"class":51},"(height);",[45,20889,20890],{"class":267},"\u002F\u002F放到堆区\n",[45,20892,20893,20895,20897,20900,20902],{"class":47,"line":1730},[45,20894,3534],{"class":51},[45,20896,1251],{"class":93},[45,20898,20899],{"class":313},"\"有参构造函数\"",[45,20901,1251],{"class":93},[45,20903,1274],{"class":51},[45,20905,20906],{"class":47,"line":1736},[45,20907,2270],{"class":51},[45,20909,20910],{"class":47,"line":1757},[45,20911,20912],{"class":267},"    \u002F\u002F深拷贝解决上述问题\n",[45,20914,20915],{"class":47,"line":1762},[45,20916,20917],{"class":267},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[45,20919,20920,20922,20924,20926,20928,20930,20932],{"class":47,"line":1776},[45,20921,18602],{"class":2046},[45,20923,209],{"class":51},[45,20925,6875],{"class":93},[45,20927,15652],{"class":2046},[45,20929,10667],{"class":93},[45,20931,10],{"class":5299},[45,20933,215],{"class":51},[45,20935,20936],{"class":47,"line":1781},[45,20937,2113],{"class":51},[45,20939,20940,20942,20944,20947,20949],{"class":47,"line":1810},[45,20941,3534],{"class":51},[45,20943,1251],{"class":93},[45,20945,20946],{"class":313},"\"拷贝构造函数\"",[45,20948,1251],{"class":93},[45,20950,1274],{"class":51},[45,20952,20953],{"class":47,"line":1815},[45,20954,20955],{"class":267},"        \u002F\u002F编译器默认的写如下注释部分\n",[45,20957,20958],{"class":47,"line":1832},[45,20959,20960],{"class":267},"        \u002F\u002Fm_Age=p.m_Age;\n",[45,20962,20963],{"class":47,"line":1837},[45,20964,20965],{"class":267},"        \u002F\u002Fm_Height=p.m_Height;\n",[45,20967,20968,20970,20972],{"class":47,"line":1842},[45,20969,20870],{"class":51},[45,20971,254],{"class":93},[45,20973,20974],{"class":51},"p.m_Age;\n",[45,20976,20977],{"class":47,"line":1847},[45,20978,20979],{"class":267},"        \u002F\u002F深拷贝操作\n",[45,20981,20982,20984,20986,20988,20990,20992],{"class":47,"line":1861},[45,20983,20880],{"class":51},[45,20985,11800],{"class":93},[45,20987,2465],{"class":93},[45,20989,209],{"class":51},[45,20991,663],{"class":93},[45,20993,20994],{"class":51},"p.m_Height);\n",[45,20996,20997],{"class":47,"line":1866},[45,20998,2270],{"class":51},[45,21000,21001],{"class":47,"line":2660},[45,21002,2483],{"emptyLinePlaceholder":133},[45,21004,21005],{"class":47,"line":2674},[45,21006,18630],{"class":267},[45,21008,21009,21011],{"class":47,"line":2682},[45,21010,18635],{"class":2046},[45,21012,2059],{"class":51},[45,21014,21015],{"class":47,"line":2687},[45,21016,2113],{"class":51},[45,21018,21019],{"class":47,"line":2693},[45,21020,21021],{"class":267},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[45,21023,21024,21026,21029,21032,21035],{"class":47,"line":2699},[45,21025,2580],{"class":93},[45,21027,21028],{"class":51},"(m_Height ",[45,21030,21031],{"class":93},"!=",[45,21033,21034],{"class":257}," NULL",[45,21036,215],{"class":51},[45,21038,21039],{"class":47,"line":2704},[45,21040,2593],{"class":51},[45,21042,21043,21046,21049],{"class":47,"line":8031},[45,21044,21045],{"class":93},"            delete",[45,21047,21048],{"class":51}," m_Height;",[45,21050,21051],{"class":267}," \u002F\u002F释放堆区内存\n",[45,21053,21054,21057,21059,21061,21063],{"class":47,"line":8055},[45,21055,21056],{"class":51},"            m_Height",[45,21058,254],{"class":93},[45,21060,2475],{"class":257},[45,21062,264],{"class":51},[45,21064,21065],{"class":267}," \u002F\u002F防止野指针\n",[45,21067,21068],{"class":47,"line":8060},[45,21069,2612],{"class":51},[45,21071,21072,21074,21076],{"class":47,"line":8066},[45,21073,3534],{"class":51},[45,21075,1251],{"class":93},[45,21077,21078],{"class":313},"\"Person的析构函数调用\"\n",[45,21080,21081],{"class":47,"line":8093},[45,21082,2270],{"class":51},[45,21084,21085,21087],{"class":47,"line":8098},[45,21086,2068],{"class":93},[45,21088,15749],{"class":51},[45,21090,21091,21093,21095,21098],{"class":47,"line":8104},[45,21092,2068],{"class":93},[45,21094,6601],{"class":93},[45,21096,21097],{"class":51},"m_Height;",[45,21099,21100],{"class":267}," \u002F\u002F定义一个指针，指向身高\n",[45,21102,21103],{"class":47,"line":8116},[45,21104,4078],{"class":51},[45,21106,21107,21109,21111],{"class":47,"line":8128},[45,21108,5447],{"class":93},[45,21110,5671],{"class":2046},[45,21112,2059],{"class":51},[45,21114,21115],{"class":47,"line":8140},[45,21116,1629],{"class":51},[45,21118,21119,21121,21123,21125,21127,21129,21132],{"class":47,"line":9799},[45,21120,19514],{"class":51},[45,21122,7213],{"class":2046},[45,21124,209],{"class":51},[45,21126,857],{"class":257},[45,21128,586],{"class":51},[45,21130,21131],{"class":257},"160",[45,21133,2802],{"class":51},[45,21135,21136,21138,21140,21143,21145,21148,21150,21153,21155,21158,21160,21162],{"class":47,"line":9824},[45,21137,1634],{"class":51},[45,21139,1251],{"class":93},[45,21141,21142],{"class":313},"\"p1的年龄为:\"",[45,21144,1251],{"class":93},[45,21146,21147],{"class":51},"p1.m_Age",[45,21149,1251],{"class":93},[45,21151,21152],{"class":313},"\"身高为：\"",[45,21154,6502],{"class":93},[45,21156,21157],{"class":51},"p1.m_Height",[45,21159,1251],{"class":93},[45,21161,1321],{"class":51},[45,21163,21164],{"class":267},"  \u002F\u002F18\n",[45,21166,21167,21169,21171],{"class":47,"line":9847},[45,21168,19514],{"class":51},[45,21170,7116],{"class":2046},[45,21172,17598],{"class":51},[45,21174,21175,21177,21179,21182,21184,21186,21188,21190,21192,21195,21197,21199],{"class":47,"line":9871},[45,21176,1634],{"class":51},[45,21178,1251],{"class":93},[45,21180,21181],{"class":313},"\"p2的年龄为：\"",[45,21183,1251],{"class":93},[45,21185,19544],{"class":51},[45,21187,1251],{"class":93},[45,21189,21152],{"class":313},[45,21191,6502],{"class":93},[45,21193,21194],{"class":51},"p2.m_Height",[45,21196,1251],{"class":93},[45,21198,1321],{"class":51},[45,21200,21164],{"class":267},[45,21202,21203],{"class":47,"line":9876},[45,21204,13293],{"class":51},[45,21206,21207],{"class":47,"line":9881},[45,21208,1648],{"class":51},[45,21210,21211,21213,21215],{"class":47,"line":9886},[45,21212,212],{"class":93},[45,21214,2056],{"class":2046},[45,21216,2059],{"class":51},[45,21218,21219],{"class":47,"line":9895},[45,21220,1629],{"class":51},[45,21222,21223,21225],{"class":47,"line":9900},[45,21224,5716],{"class":2046},[45,21226,5719],{"class":51},[45,21228,21229],{"class":47,"line":9906},[45,21230,1648],{"class":51},[10,21232,21233],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[10,21235,21236],{},"浅拷贝带来的问题是堆区的内存重复释放",[10,21238,21239],{},[1545,21240],{"alt":40,"src":21241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[10,21243,21244],{},"浅拷贝问题要使用深拷贝来解决",[10,21246,21247],{},[1545,21248],{"alt":40,"src":21249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[10,21251,21252],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[176,21254,21256],{"id":21255},"_826初始化列表","8.2.6初始化列表",[10,21258,21259],{},"作用：初始化属性",[10,21261,5264],{},[35,21263,21266],{"className":21264,"code":21265,"language":5270},[5268],"构造函数():属性1(值1),属性2(值2).....{}\n",[42,21267,21265],{"__ignoreMap":40},[10,21269,21270],{},"例子",[35,21272,21274],{"className":197,"code":21273,"language":199,"meta":40,"style":40},"#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",[42,21275,21276,21282,21292,21298,21302,21307,21311,21316,21321,21326,21331,21336,21341,21345,21350,21355,21398,21407,21425,21443,21461,21465,21469,21476,21483,21490,21494,21498,21506,21510,21514,21534,21543,21547,21551,21561,21565,21573],{"__ignoreMap":40},[45,21277,21278,21280],{"class":47,"line":48},[45,21279,2032],{"class":93},[45,21281,2035],{"class":313},[45,21283,21284,21286,21288,21290],{"class":47,"line":125},[45,21285,2040],{"class":93},[45,21287,2043],{"class":93},[45,21289,2047],{"class":2046},[45,21291,1373],{"class":51},[45,21293,21294,21296],{"class":47,"line":1262},[45,21295,14777],{"class":93},[45,21297,15254],{"class":2046},[45,21299,21300],{"class":47,"line":1277},[45,21301,1629],{"class":51},[45,21303,21304],{"class":47,"line":1283},[45,21305,21306],{"class":93},"    public:\n",[45,21308,21309],{"class":47,"line":1297},[45,21310,2483],{"emptyLinePlaceholder":133},[45,21312,21313],{"class":47,"line":1303},[45,21314,21315],{"class":267},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[45,21317,21318],{"class":47,"line":1394},[45,21319,21320],{"class":267},"    \u002F\u002FPerson(int a, int b, int c) {\n",[45,21322,21323],{"class":47,"line":1400},[45,21324,21325],{"class":267},"    \u002F\u002F  m_A = a;\n",[45,21327,21328],{"class":47,"line":1412},[45,21329,21330],{"class":267},"    \u002F\u002F  m_B = b;\n",[45,21332,21333],{"class":47,"line":1695},[45,21334,21335],{"class":267},"    \u002F\u002F  m_C = c;\n",[45,21337,21338],{"class":47,"line":1700},[45,21339,21340],{"class":267},"    \u002F\u002F}\n",[45,21342,21343],{"class":47,"line":1706},[45,21344,2483],{"emptyLinePlaceholder":133},[45,21346,21347],{"class":47,"line":1711},[45,21348,21349],{"class":267},"    \u002F\u002F初始化列表方式初始化\n",[45,21351,21352],{"class":47,"line":1725},[45,21353,21354],{"class":267},"    \u002F\u002F使用有参构造函数\n",[45,21356,21357,21359,21361,21363,21365,21367,21369,21371,21373,21375,21377,21380,21383,21386,21389,21392,21395],{"class":47,"line":1730},[45,21358,18602],{"class":2046},[45,21360,209],{"class":51},[45,21362,212],{"class":93},[45,21364,1481],{"class":5299},[45,21366,12518],{"class":51},[45,21368,212],{"class":93},[45,21370,2916],{"class":5299},[45,21372,12518],{"class":51},[45,21374,212],{"class":93},[45,21376,2932],{"class":5299},[45,21378,21379],{"class":51},") :",[45,21381,21382],{"class":2046},"m_A",[45,21384,21385],{"class":51},"(a), ",[45,21387,21388],{"class":2046},"m_B",[45,21390,21391],{"class":51},"(b), ",[45,21393,21394],{"class":2046},"m_C",[45,21396,21397],{"class":51},"(c) {}\n",[45,21399,21400,21402,21405],{"class":47,"line":1736},[45,21401,14992],{"class":93},[45,21403,21404],{"class":2046}," PrintPerson",[45,21406,10936],{"class":51},[45,21408,21409,21411,21413,21416,21418,21421,21423],{"class":47,"line":1757},[45,21410,9752],{"class":51},[45,21412,1251],{"class":93},[45,21414,21415],{"class":313}," \"mA:\"",[45,21417,1527],{"class":93},[45,21419,21420],{"class":51}," m_A ",[45,21422,1251],{"class":93},[45,21424,8923],{"class":51},[45,21426,21427,21429,21431,21434,21436,21439,21441],{"class":47,"line":1762},[45,21428,9752],{"class":51},[45,21430,1251],{"class":93},[45,21432,21433],{"class":313}," \"mB:\"",[45,21435,1527],{"class":93},[45,21437,21438],{"class":51}," m_B ",[45,21440,1251],{"class":93},[45,21442,8923],{"class":51},[45,21444,21445,21447,21449,21452,21454,21457,21459],{"class":47,"line":1776},[45,21446,9752],{"class":51},[45,21448,1251],{"class":93},[45,21450,21451],{"class":313}," \"mC:\"",[45,21453,1527],{"class":93},[45,21455,21456],{"class":51}," m_C ",[45,21458,1251],{"class":93},[45,21460,8923],{"class":51},[45,21462,21463],{"class":47,"line":1781},[45,21464,2270],{"class":51},[45,21466,21467],{"class":47,"line":1810},[45,21468,15305],{"class":93},[45,21470,21471,21473],{"class":47,"line":1815},[45,21472,2068],{"class":93},[45,21474,21475],{"class":51}," m_A;\n",[45,21477,21478,21480],{"class":47,"line":1832},[45,21479,2068],{"class":93},[45,21481,21482],{"class":51}," m_B;\n",[45,21484,21485,21487],{"class":47,"line":1837},[45,21486,2068],{"class":93},[45,21488,21489],{"class":51}," m_C;\n",[45,21491,21492],{"class":47,"line":1842},[45,21493,4078],{"class":51},[45,21495,21496],{"class":47,"line":1847},[45,21497,2483],{"emptyLinePlaceholder":133},[45,21499,21500,21502,21504],{"class":47,"line":1861},[45,21501,212],{"class":93},[45,21503,2056],{"class":2046},[45,21505,6061],{"class":51},[45,21507,21508],{"class":47,"line":1866},[45,21509,1629],{"class":51},[45,21511,21512],{"class":47,"line":2660},[45,21513,2483],{"emptyLinePlaceholder":133},[45,21515,21516,21518,21520,21522,21524,21526,21528,21530,21532],{"class":47,"line":2674},[45,21517,19514],{"class":51},[45,21519,10],{"class":2046},[45,21521,209],{"class":51},[45,21523,426],{"class":257},[45,21525,12518],{"class":51},[45,21527,286],{"class":257},[45,21529,12518],{"class":51},[45,21531,280],{"class":257},[45,21533,2802],{"class":51},[45,21535,21536,21538,21541],{"class":47,"line":2682},[45,21537,15949],{"class":51},[45,21539,21540],{"class":2046},"PrintPerson",[45,21542,5719],{"class":51},[45,21544,21545],{"class":47,"line":2687},[45,21546,2483],{"emptyLinePlaceholder":133},[45,21548,21549],{"class":47,"line":2693},[45,21550,2483],{"emptyLinePlaceholder":133},[45,21552,21553,21555,21557,21559],{"class":47,"line":2699},[45,21554,2386],{"class":2046},[45,21556,209],{"class":51},[45,21558,2391],{"class":313},[45,21560,2802],{"class":51},[45,21562,21563],{"class":47,"line":2704},[45,21564,2483],{"emptyLinePlaceholder":133},[45,21566,21567,21569,21571],{"class":47,"line":8031},[45,21568,4173],{"class":93},[45,21570,4176],{"class":257},[45,21572,1373],{"class":51},[45,21574,21575],{"class":47,"line":8055},[45,21576,1648],{"class":51},[10,21578,21579,21580,21583,21584],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[358,21581,21582],{},"参数名就是定义的对象属性","，",[358,21585,21586],{},"属性后面的值为有参构造函数的形参",[35,21588,21590],{"className":197,"code":21589,"language":199,"meta":40,"style":40},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[42,21591,21592],{"__ignoreMap":40},[45,21593,21594,21596,21598,21600,21603,21605,21608,21610,21613,21615,21618,21620,21623,21625],{"class":47,"line":48},[45,21595,19129],{"class":2046},[45,21597,209],{"class":51},[45,21599,212],{"class":93},[45,21601,21602],{"class":51}," a.",[45,21604,212],{"class":93},[45,21606,21607],{"class":51}," b,",[45,21609,212],{"class":93},[45,21611,21612],{"class":51}," b):",[45,21614,21382],{"class":2046},[45,21616,21617],{"class":51},"(a),",[45,21619,21388],{"class":2046},[45,21621,21622],{"class":51},"(c),",[45,21624,21394],{"class":2046},[45,21626,21627],{"class":51},"(b) {}\n",[176,21629,21631],{"id":21630},"_827类对象作为类成员","8.2.7类对象作为类成员",[10,21633,21634],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[10,21636,14716],{},[35,21638,21640],{"className":197,"code":21639,"language":199,"meta":40,"style":40},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[42,21641,21642,21647,21652,21656,21661,21665],{"__ignoreMap":40},[45,21643,21644],{"class":47,"line":48},[45,21645,21646],{"class":51},"A{};\n",[45,21648,21649],{"class":47,"line":125},[45,21650,21651],{"class":51},"B\n",[45,21653,21654],{"class":47,"line":1262},[45,21655,1629],{"class":51},[45,21657,21658],{"class":47,"line":1277},[45,21659,21660],{"class":51},"    A a;\n",[45,21662,21663],{"class":47,"line":1283},[45,21664,1648],{"class":51},[45,21666,21667],{"class":47,"line":1297},[45,21668,21669],{"class":267},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[10,21671,21672],{},"案例",[35,21674,21676],{"className":197,"code":21675,"language":199,"meta":40,"style":40},"\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",[42,21677,21678,21683,21690,21694,21699,21704,21718,21722,21732,21743,21747,21754,21758,21771,21775,21780,21785,21789,21795,21799,21803,21807,21838,21842,21853,21857,21863,21867,21880,21884,21888,21892,21897,21902,21906,21914,21918,21935,21954,21958,21966,21970,21976],{"__ignoreMap":40},[45,21679,21680],{"class":47,"line":48},[45,21681,21682],{"class":267},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[45,21684,21685,21687],{"class":47,"line":125},[45,21686,14777],{"class":93},[45,21688,21689],{"class":2046}," Phone\n",[45,21691,21692],{"class":47,"line":1262},[45,21693,1629],{"class":51},[45,21695,21696],{"class":47,"line":1277},[45,21697,21698],{"class":51},"public：\n",[45,21700,21701],{"class":47,"line":1283},[45,21702,21703],{"class":267},"    \u002F\u002F 赋值(构造函数)\n",[45,21705,21706,21709,21711,21713,21716],{"class":47,"line":1297},[45,21707,21708],{"class":2046},"    Phone",[45,21710,209],{"class":51},[45,21712,15000],{"class":2046},[45,21714,21715],{"class":5299}," pName",[45,21717,215],{"class":51},[45,21719,21720],{"class":47,"line":1303},[45,21721,2113],{"class":51},[45,21723,21724,21727,21729],{"class":47,"line":1394},[45,21725,21726],{"class":51},"        m_pName",[45,21728,254],{"class":93},[45,21730,21731],{"class":51},"pName;\n",[45,21733,21734,21736,21738,21741],{"class":47,"line":1400},[45,21735,3534],{"class":51},[45,21737,1251],{"class":93},[45,21739,21740],{"class":313},"\"Phone的构造函数调用\"",[45,21742,1373],{"class":51},[45,21744,21745],{"class":47,"line":1412},[45,21746,2270],{"class":51},[45,21748,21749,21752],{"class":47,"line":1695},[45,21750,21751],{"class":2046},"    ~Phone",[45,21753,2059],{"class":51},[45,21755,21756],{"class":47,"line":1700},[45,21757,2113],{"class":51},[45,21759,21760,21762,21764,21767,21769],{"class":47,"line":1706},[45,21761,3534],{"class":51},[45,21763,1251],{"class":93},[45,21765,21766],{"class":313},"\"Phone析构函数调用\"",[45,21768,1251],{"class":93},[45,21770,1274],{"class":51},[45,21772,21773],{"class":47,"line":1711},[45,21774,2270],{"class":51},[45,21776,21777],{"class":47,"line":1725},[45,21778,21779],{"class":267},"    \u002F\u002F\n",[45,21781,21782],{"class":47,"line":1730},[45,21783,21784],{"class":51},"    string m_PName;\n",[45,21786,21787],{"class":47,"line":1736},[45,21788,4078],{"class":51},[45,21790,21791,21793],{"class":47,"line":1757},[45,21792,14777],{"class":93},[45,21794,15254],{"class":2046},[45,21796,21797],{"class":47,"line":1762},[45,21798,1629],{"class":51},[45,21800,21801],{"class":47,"line":1776},[45,21802,14799],{"class":93},[45,21804,21805],{"class":47,"line":1781},[45,21806,17077],{"class":267},[45,21808,21809,21811,21813,21815,21817,21819,21821,21824,21827,21829,21832,21835],{"class":47,"line":1810},[45,21810,18602],{"class":2046},[45,21812,209],{"class":51},[45,21814,15000],{"class":2046},[45,21816,15003],{"class":5299},[45,21818,586],{"class":51},[45,21820,15000],{"class":2046},[45,21822,21823],{"class":5299}," pname",[45,21825,21826],{"class":51},"):",[45,21828,15093],{"class":2046},[45,21830,21831],{"class":51},"(name),m_phone.",[45,21833,21834],{"class":2046},"m_PName",[45,21836,21837],{"class":51},"(pname) \n",[45,21839,21840],{"class":47,"line":1815},[45,21841,2113],{"class":51},[45,21843,21844,21846,21848,21851],{"class":47,"line":1832},[45,21845,3534],{"class":51},[45,21847,1251],{"class":93},[45,21849,21850],{"class":313},"\"Person的构造函数调用\"",[45,21852,1373],{"class":51},[45,21854,21855],{"class":47,"line":1837},[45,21856,2270],{"class":51},[45,21858,21859,21861],{"class":47,"line":1842},[45,21860,18635],{"class":2046},[45,21862,2059],{"class":51},[45,21864,21865],{"class":47,"line":1847},[45,21866,2113],{"class":51},[45,21868,21869,21871,21873,21876,21878],{"class":47,"line":1861},[45,21870,3534],{"class":51},[45,21872,1251],{"class":93},[45,21874,21875],{"class":313},"\"Person析构函数调用\"",[45,21877,1251],{"class":93},[45,21879,1274],{"class":51},[45,21881,21882],{"class":47,"line":1866},[45,21883,2270],{"class":51},[45,21885,21886],{"class":47,"line":2660},[45,21887,7863],{"class":267},[45,21889,21890],{"class":47,"line":2674},[45,21891,14975],{"class":51},[45,21893,21894],{"class":47,"line":2682},[45,21895,21896],{"class":267},"    \u002F\u002F手机\n",[45,21898,21899],{"class":47,"line":2687},[45,21900,21901],{"class":51},"    Phone m_Phone;\n",[45,21903,21904],{"class":47,"line":2693},[45,21905,4078],{"class":51},[45,21907,21908,21910,21912],{"class":47,"line":2699},[45,21909,5447],{"class":93},[45,21911,5671],{"class":2046},[45,21913,2059],{"class":51},[45,21915,21916],{"class":47,"line":2704},[45,21917,1629],{"class":51},[45,21919,21920,21922,21924,21926,21928,21930,21933],{"class":47,"line":8031},[45,21921,19514],{"class":51},[45,21923,10],{"class":2046},[45,21925,209],{"class":51},[45,21927,7999],{"class":313},[45,21929,586],{"class":51},[45,21931,21932],{"class":313},"\"安卓\"",[45,21934,2802],{"class":51},[45,21936,21937,21939,21941,21944,21946,21949,21951],{"class":47,"line":8055},[45,21938,1634],{"class":51},[45,21940,1251],{"class":93},[45,21942,21943],{"class":51},"p.Name",[45,21945,1251],{"class":93},[45,21947,21948],{"class":313},"\"拿着：\"",[45,21950,1251],{"class":93},[45,21952,21953],{"class":51},"p.m_phone.m_PName;\n",[45,21955,21956],{"class":47,"line":8060},[45,21957,1648],{"class":51},[45,21959,21960,21962,21964],{"class":47,"line":8066},[45,21961,212],{"class":93},[45,21963,2056],{"class":2046},[45,21965,2059],{"class":51},[45,21967,21968],{"class":47,"line":8093},[45,21969,1629],{"class":51},[45,21971,21972,21974],{"class":47,"line":8098},[45,21973,5716],{"class":2046},[45,21975,5719],{"class":51},[45,21977,21978],{"class":47,"line":8104},[45,21979,1648],{"class":51},[10,21981,9108],{},[35,21983,21985],{"className":197,"code":21984,"language":199,"meta":40,"style":40},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[42,21986,21987,21992],{"__ignoreMap":40},[45,21988,21989],{"class":47,"line":48},[45,21990,21991],{"class":267},"    \u002F\u002F不需要写这个：\n",[45,21993,21994],{"class":47,"line":125},[45,21995,21996],{"class":267},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[10,21998,21999],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[35,22001,22003],{"className":197,"code":22002,"language":199,"meta":40,"style":40},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[42,22004,22005],{"__ignoreMap":40},[45,22006,22007,22009,22012,22014,22017,22020],{"class":47,"line":48},[45,22008,19129],{"class":2046},[45,22010,22011],{"class":51},"(string name.string pname):",[45,22013,15093],{"class":2046},[45,22015,22016],{"class":51},"(name),",[45,22018,22019],{"class":2046},"m_phone",[45,22021,22022],{"class":51},"(pname) {}\n",[10,22024,22025,22026,254,22029],{},"采用的是隐式转换法，实际为如下：\n",[42,22027,22028],{},"m_phone(pname)",[42,22030,22031],{},"Phone m_phone=pname",[10,22033,22034,22037],{},[358,22035,22036],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[10,22039,22040],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[176,22042,22044],{"id":22043},"_828静态对象","8.2.8静态对象",[10,22046,22047],{},"静态对象在成员对象前static，称为静态对象",[10,22049,22050],{},"静态对象分为两类：",[159,22052,22053],{},[162,22054,22055],{},"静态成员变量",[1214,22057,22058,22061,22064],{},[162,22059,22060],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[162,22062,22063],{},"②在编译阶段分配内存",[162,22065,22066],{},"③类内声明，类外初始化",[159,22068,22069],{"start":125},[162,22070,22071],{},"静态成员函数",[1214,22073,22074,22077],{},[162,22075,22076],{},"①所有对象共享同一个函数",[162,22078,22079],{},"②静态成员函数只能访问静态成员变量",[22081,22082,22084],"h4",{"id":22083},"_8281静态成员变量","8.2.8.1静态成员变量",[35,22086,22088],{"className":197,"code":22087,"language":199,"meta":40,"style":40},"#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",[42,22089,22090,22096,22106,22112,22116,22120,22125,22130,22135,22143,22147,22151,22155,22163,22167,22171,22176,22189,22193,22201,22205,22211],{"__ignoreMap":40},[45,22091,22092,22094],{"class":47,"line":48},[45,22093,2032],{"class":93},[45,22095,2035],{"class":313},[45,22097,22098,22100,22102,22104],{"class":47,"line":125},[45,22099,2040],{"class":93},[45,22101,2043],{"class":93},[45,22103,2047],{"class":2046},[45,22105,1373],{"class":51},[45,22107,22108,22110],{"class":47,"line":1262},[45,22109,14777],{"class":93},[45,22111,15254],{"class":2046},[45,22113,22114],{"class":47,"line":1277},[45,22115,1629],{"class":51},[45,22117,22118],{"class":47,"line":1283},[45,22119,14799],{"class":93},[45,22121,22122],{"class":47,"line":1297},[45,22123,22124],{"class":267},"    \u002F\u002F非静态成员变量\n",[45,22126,22127],{"class":47,"line":1303},[45,22128,22129],{"class":267},"    \u002F\u002F int m_A;\n",[45,22131,22132],{"class":47,"line":1394},[45,22133,22134],{"class":267},"    \u002F\u002F定义静态成员变量\n",[45,22136,22137,22139,22141],{"class":47,"line":1400},[45,22138,11103],{"class":93},[45,22140,2465],{"class":93},[45,22142,21475],{"class":51},[45,22144,22145],{"class":47,"line":1412},[45,22146,2483],{"emptyLinePlaceholder":133},[45,22148,22149],{"class":47,"line":1695},[45,22150,2483],{"emptyLinePlaceholder":133},[45,22152,22153],{"class":47,"line":1700},[45,22154,4078],{"class":51},[45,22156,22157,22159,22161],{"class":47,"line":1706},[45,22158,5447],{"class":93},[45,22160,5671],{"class":2046},[45,22162,2059],{"class":51},[45,22164,22165],{"class":47,"line":1711},[45,22166,1629],{"class":51},[45,22168,22169],{"class":47,"line":1725},[45,22170,15396],{"class":51},[45,22172,22173],{"class":47,"line":1730},[45,22174,22175],{"class":267},"    \u002F\u002F输出类成员变量这块内存\n",[45,22177,22178,22180,22182,22185,22187],{"class":47,"line":1736},[45,22179,1634],{"class":51},[45,22181,1251],{"class":93},[45,22183,22184],{"class":51},"p.m_A",[45,22186,1251],{"class":93},[45,22188,1274],{"class":51},[45,22190,22191],{"class":47,"line":1757},[45,22192,1648],{"class":51},[45,22194,22195,22197,22199],{"class":47,"line":1762},[45,22196,212],{"class":93},[45,22198,2056],{"class":2046},[45,22200,2059],{"class":51},[45,22202,22203],{"class":47,"line":1776},[45,22204,1629],{"class":51},[45,22206,22207,22209],{"class":47,"line":1781},[45,22208,5716],{"class":2046},[45,22210,2059],{"class":51},[45,22212,22213],{"class":47,"line":1810},[45,22214,1648],{"class":51},[10,22216,22217],{},"此时输出是报错的：无法解析外部命令",[10,22219,22220],{},"解决这一问题：必须用到类内声明，类外初始化操作",[35,22222,22224],{"className":197,"code":22223,"language":199,"meta":40,"style":40},"#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",[42,22225,22226,22232,22242,22248,22252,22256,22261,22269,22273,22278,22293,22301,22305,22309,22314,22319,22331,22336,22347,22352,22357,22370,22374,22382,22386,22392],{"__ignoreMap":40},[45,22227,22228,22230],{"class":47,"line":48},[45,22229,2032],{"class":93},[45,22231,2035],{"class":313},[45,22233,22234,22236,22238,22240],{"class":47,"line":125},[45,22235,2040],{"class":93},[45,22237,2043],{"class":93},[45,22239,2047],{"class":2046},[45,22241,1373],{"class":51},[45,22243,22244,22246],{"class":47,"line":1262},[45,22245,14777],{"class":93},[45,22247,15254],{"class":2046},[45,22249,22250],{"class":47,"line":1277},[45,22251,1629],{"class":51},[45,22253,22254],{"class":47,"line":1283},[45,22255,14799],{"class":93},[45,22257,22258],{"class":47,"line":1297},[45,22259,22260],{"class":267},"    \u002F\u002F类内声明\n",[45,22262,22263,22265,22267],{"class":47,"line":1303},[45,22264,11103],{"class":93},[45,22266,2465],{"class":93},[45,22268,21475],{"class":51},[45,22270,22271],{"class":47,"line":1394},[45,22272,4078],{"class":51},[45,22274,22275],{"class":47,"line":1400},[45,22276,22277],{"class":267},"\u002F\u002F类外初始化\n",[45,22279,22280,22282,22284,22287,22289,22291],{"class":47,"line":1412},[45,22281,212],{"class":93},[45,22283,15652],{"class":2046},[45,22285,22286],{"class":51},"::m_A",[45,22288,254],{"class":93},[45,22290,654],{"class":257},[45,22292,1373],{"class":51},[45,22294,22295,22297,22299],{"class":47,"line":1695},[45,22296,5447],{"class":93},[45,22298,5671],{"class":2046},[45,22300,2059],{"class":51},[45,22302,22303],{"class":47,"line":1700},[45,22304,1629],{"class":51},[45,22306,22307],{"class":47,"line":1706},[45,22308,15396],{"class":51},[45,22310,22311],{"class":47,"line":1711},[45,22312,22313],{"class":267},"    \u002F\u002F访问变量的原内存空间\n",[45,22315,22316],{"class":47,"line":1725},[45,22317,22318],{"class":267},"    \u002F\u002F100\n",[45,22320,22321,22323,22325,22327,22329],{"class":47,"line":1730},[45,22322,1634],{"class":51},[45,22324,1251],{"class":93},[45,22326,22184],{"class":51},[45,22328,1251],{"class":93},[45,22330,1274],{"class":51},[45,22332,22333],{"class":47,"line":1736},[45,22334,22335],{"class":51},"    Person p2;\n",[45,22337,22338,22341,22343,22345],{"class":47,"line":1757},[45,22339,22340],{"class":51},"    p2.m_A",[45,22342,254],{"class":93},[45,22344,1805],{"class":257},[45,22346,1373],{"class":51},[45,22348,22349],{"class":47,"line":1762},[45,22350,22351],{"class":267},"    \u002F\u002F继续访问这片空间\n",[45,22353,22354],{"class":47,"line":1776},[45,22355,22356],{"class":267},"    \u002F\u002F200\n",[45,22358,22359,22361,22363,22366,22368],{"class":47,"line":1781},[45,22360,1634],{"class":51},[45,22362,1251],{"class":93},[45,22364,22365],{"class":51},"p2.m_A",[45,22367,1251],{"class":93},[45,22369,1274],{"class":51},[45,22371,22372],{"class":47,"line":1810},[45,22373,1648],{"class":51},[45,22375,22376,22378,22380],{"class":47,"line":1815},[45,22377,212],{"class":93},[45,22379,2056],{"class":2046},[45,22381,2059],{"class":51},[45,22383,22384],{"class":47,"line":1832},[45,22385,1629],{"class":51},[45,22387,22388,22390],{"class":47,"line":1837},[45,22389,5716],{"class":2046},[45,22391,5719],{"class":51},[45,22393,22394],{"class":47,"line":1842},[45,22395,1648],{"class":51},[10,22397,22398],{},[358,22399,22400],{},"静态变量的访问",[35,22402,22404],{"className":197,"code":22403,"language":199,"meta":40,"style":40},"#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",[42,22405,22406,22412,22422,22428,22432,22436,22440,22448,22452,22457,22465,22469,22473,22487,22502,22510,22514,22519,22524,22529,22534,22546,22551,22556,22570,22587,22591,22599,22603,22609],{"__ignoreMap":40},[45,22407,22408,22410],{"class":47,"line":48},[45,22409,2032],{"class":93},[45,22411,2035],{"class":313},[45,22413,22414,22416,22418,22420],{"class":47,"line":125},[45,22415,2040],{"class":93},[45,22417,2043],{"class":93},[45,22419,2047],{"class":2046},[45,22421,1373],{"class":51},[45,22423,22424,22426],{"class":47,"line":1262},[45,22425,14777],{"class":93},[45,22427,15254],{"class":2046},[45,22429,22430],{"class":47,"line":1277},[45,22431,1629],{"class":51},[45,22433,22434],{"class":47,"line":1283},[45,22435,14799],{"class":93},[45,22437,22438],{"class":47,"line":1297},[45,22439,22260],{"class":267},[45,22441,22442,22444,22446],{"class":47,"line":1303},[45,22443,11103],{"class":93},[45,22445,2465],{"class":93},[45,22447,21475],{"class":51},[45,22449,22450],{"class":47,"line":1394},[45,22451,15305],{"class":93},[45,22453,22454],{"class":47,"line":1400},[45,22455,22456],{"class":267},"    \u002F\u002F静态成员变量也是有访问权限的\n",[45,22458,22459,22461,22463],{"class":47,"line":1412},[45,22460,11103],{"class":93},[45,22462,2465],{"class":93},[45,22464,21482],{"class":51},[45,22466,22467],{"class":47,"line":1695},[45,22468,4078],{"class":51},[45,22470,22471],{"class":47,"line":1700},[45,22472,22277],{"class":267},[45,22474,22475,22477,22479,22481,22483,22485],{"class":47,"line":1706},[45,22476,212],{"class":93},[45,22478,15652],{"class":2046},[45,22480,22286],{"class":51},[45,22482,254],{"class":93},[45,22484,654],{"class":257},[45,22486,1373],{"class":51},[45,22488,22489,22491,22493,22496,22498,22500],{"class":47,"line":1711},[45,22490,212],{"class":93},[45,22492,15652],{"class":2046},[45,22494,22495],{"class":51},"::m_B",[45,22497,254],{"class":93},[45,22499,907],{"class":257},[45,22501,1373],{"class":51},[45,22503,22504,22506,22508],{"class":47,"line":1725},[45,22505,5447],{"class":93},[45,22507,5740],{"class":2046},[45,22509,2059],{"class":51},[45,22511,22512],{"class":47,"line":1730},[45,22513,1629],{"class":51},[45,22515,22516],{"class":47,"line":1736},[45,22517,22518],{"class":267},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[45,22520,22521],{"class":47,"line":1757},[45,22522,22523],{"class":267},"    \u002F\u002F静态成员变量有两种访问方式：\n",[45,22525,22526],{"class":47,"line":1762},[45,22527,22528],{"class":267},"    \u002F\u002F1.通过对象进行访问\n",[45,22530,22531],{"class":47,"line":1776},[45,22532,22533],{"class":51},"    Person p;  \n",[45,22535,22536,22538,22540,22542,22544],{"class":47,"line":1781},[45,22537,1634],{"class":51},[45,22539,1251],{"class":93},[45,22541,22184],{"class":51},[45,22543,1251],{"class":93},[45,22545,1274],{"class":51},[45,22547,22548],{"class":47,"line":1810},[45,22549,22550],{"class":267},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[45,22552,22553],{"class":47,"line":1815},[45,22554,22555],{"class":267},"    \u002F\u002F2.通过类名进行访问\n",[45,22557,22558,22560,22562,22564,22566,22568],{"class":47,"line":1832},[45,22559,1634],{"class":51},[45,22561,1251],{"class":93},[45,22563,19129],{"class":2046},[45,22565,22286],{"class":51},[45,22567,1251],{"class":93},[45,22569,1274],{"class":51},[45,22571,22572,22574,22576,22578,22580,22582,22584],{"class":47,"line":1837},[45,22573,1634],{"class":51},[45,22575,1251],{"class":93},[45,22577,19129],{"class":2046},[45,22579,22495],{"class":51},[45,22581,1251],{"class":93},[45,22583,1321],{"class":51},[45,22585,22586],{"class":267}," \u002F\u002F没有访问权限，报错\n",[45,22588,22589],{"class":47,"line":1842},[45,22590,1648],{"class":51},[45,22592,22593,22595,22597],{"class":47,"line":1847},[45,22594,212],{"class":93},[45,22596,2056],{"class":2046},[45,22598,2059],{"class":51},[45,22600,22601],{"class":47,"line":1861},[45,22602,1629],{"class":51},[45,22604,22605,22607],{"class":47,"line":1866},[45,22606,5785],{"class":2046},[45,22608,5719],{"class":51},[45,22610,22611],{"class":47,"line":2660},[45,22612,1648],{"class":51},[22081,22614,22616],{"id":22615},"_8282静态成员函数","8.2.8.2静态成员函数",[10,22618,22619],{},"1.静态成员函数定义与访问",[35,22621,22623],{"className":197,"code":22622,"language":199,"meta":40,"style":40},"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",[42,22624,22625,22631,22635,22639,22644,22655,22659,22673,22677,22681,22689,22693,22698,22703,22707,22715,22720,22730],{"__ignoreMap":40},[45,22626,22627,22629],{"class":47,"line":48},[45,22628,14777],{"class":93},[45,22630,15254],{"class":2046},[45,22632,22633],{"class":47,"line":125},[45,22634,1629],{"class":51},[45,22636,22637],{"class":47,"line":1262},[45,22638,14799],{"class":93},[45,22640,22641],{"class":47,"line":1277},[45,22642,22643],{"class":267},"    \u002F\u002F在公共权限下定义静态成员函数\n",[45,22645,22646,22648,22651,22653],{"class":47,"line":1283},[45,22647,11103],{"class":93},[45,22649,22650],{"class":93}," void",[45,22652,11468],{"class":2046},[45,22654,2059],{"class":51},[45,22656,22657],{"class":47,"line":1297},[45,22658,2113],{"class":51},[45,22660,22661,22664,22666,22669,22671],{"class":47,"line":1303},[45,22662,22663],{"class":51},"        coout",[45,22665,1251],{"class":93},[45,22667,22668],{"class":313},"\"静态成员函数的调用\"",[45,22670,1251],{"class":93},[45,22672,1274],{"class":51},[45,22674,22675],{"class":47,"line":1394},[45,22676,2270],{"class":51},[45,22678,22679],{"class":47,"line":1400},[45,22680,4078],{"class":51},[45,22682,22683,22685,22687],{"class":47,"line":1412},[45,22684,5447],{"class":93},[45,22686,5671],{"class":2046},[45,22688,2059],{"class":51},[45,22690,22691],{"class":47,"line":1695},[45,22692,1629],{"class":51},[45,22694,22695],{"class":47,"line":1700},[45,22696,22697],{"class":267},"    \u002F\u002F静态成员函数的调用方式:\n",[45,22699,22700],{"class":47,"line":1706},[45,22701,22702],{"class":267},"    \u002F\u002F1.通过对象访问\n",[45,22704,22705],{"class":47,"line":1711},[45,22706,15396],{"class":51},[45,22708,22709,22711,22713],{"class":47,"line":1725},[45,22710,15949],{"class":51},[45,22712,11634],{"class":2046},[45,22714,5719],{"class":51},[45,22716,22717],{"class":47,"line":1730},[45,22718,22719],{"class":267},"    \u002F\u002F2.通过类名访问\n",[45,22721,22722,22724,22726,22728],{"class":47,"line":1736},[45,22723,18602],{"class":2046},[45,22725,17815],{"class":51},[45,22727,11634],{"class":2046},[45,22729,5719],{"class":51},[45,22731,22732],{"class":47,"line":1757},[45,22733,1648],{"class":51},[159,22735,22736],{"start":125},[162,22737,22738],{},"静态成员函数只能访问静态成员变量",[35,22740,22742],{"className":197,"code":22741,"language":199,"meta":40,"style":40},"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",[42,22743,22744,22750,22754,22758,22762,22772,22776,22790,22795,22807,22811,22822,22832,22836,22840,22844,22854,22858,22871,22875,22879,22883,22887,22901,22909,22913,22917,22921,22925,22933,22937,22947,22952,22956,22964,22968,22974],{"__ignoreMap":40},[45,22745,22746,22748],{"class":47,"line":48},[45,22747,14777],{"class":93},[45,22749,15254],{"class":2046},[45,22751,22752],{"class":47,"line":125},[45,22753,1629],{"class":51},[45,22755,22756],{"class":47,"line":1262},[45,22757,14799],{"class":93},[45,22759,22760],{"class":47,"line":1277},[45,22761,22643],{"class":267},[45,22763,22764,22766,22768,22770],{"class":47,"line":1283},[45,22765,11103],{"class":93},[45,22767,22650],{"class":93},[45,22769,11468],{"class":2046},[45,22771,2059],{"class":51},[45,22773,22774],{"class":47,"line":1297},[45,22775,2113],{"class":51},[45,22777,22778,22781,22783,22785,22787],{"class":47,"line":1303},[45,22779,22780],{"class":51},"        m_A",[45,22782,254],{"class":93},[45,22784,519],{"class":257},[45,22786,264],{"class":51},[45,22788,22789],{"class":267}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[45,22791,22792],{"class":47,"line":1394},[45,22793,22794],{"class":267},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[45,22796,22797,22799,22801,22803,22805],{"class":47,"line":1400},[45,22798,22663],{"class":51},[45,22800,1251],{"class":93},[45,22802,22668],{"class":313},[45,22804,1251],{"class":93},[45,22806,1274],{"class":51},[45,22808,22809],{"class":47,"line":1412},[45,22810,2270],{"class":51},[45,22812,22813,22815,22817,22819],{"class":47,"line":1695},[45,22814,11103],{"class":93},[45,22816,2465],{"class":93},[45,22818,15531],{"class":51},[45,22820,22821],{"class":267}," \u002F\u002F静态成员变量\n",[45,22823,22824,22826,22829],{"class":47,"line":1700},[45,22825,2068],{"class":93},[45,22827,22828],{"class":51}," m_B;",[45,22830,22831],{"class":267}," \u002F\u002F非静态成员变量\n",[45,22833,22834],{"class":47,"line":1706},[45,22835,2483],{"emptyLinePlaceholder":133},[45,22837,22838],{"class":47,"line":1711},[45,22839,15305],{"class":93},[45,22841,22842],{"class":47,"line":1725},[45,22843,22456],{"class":267},[45,22845,22846,22848,22850,22852],{"class":47,"line":1730},[45,22847,11103],{"class":93},[45,22849,22650],{"class":93},[45,22851,13701],{"class":2046},[45,22853,2059],{"class":51},[45,22855,22856],{"class":47,"line":1736},[45,22857,2113],{"class":51},[45,22859,22860,22862,22864,22867,22869],{"class":47,"line":1757},[45,22861,3534],{"class":51},[45,22863,1251],{"class":93},[45,22865,22866],{"class":313},"\"这是私有权限下的静态函数调用\"",[45,22868,1251],{"class":93},[45,22870,1274],{"class":51},[45,22872,22873],{"class":47,"line":1762},[45,22874,2270],{"class":51},[45,22876,22877],{"class":47,"line":1776},[45,22878,2483],{"emptyLinePlaceholder":133},[45,22880,22881],{"class":47,"line":1781},[45,22882,2483],{"emptyLinePlaceholder":133},[45,22884,22885],{"class":47,"line":1810},[45,22886,4078],{"class":51},[45,22888,22889,22891,22893,22895,22897,22899],{"class":47,"line":1815},[45,22890,212],{"class":93},[45,22892,15652],{"class":2046},[45,22894,22286],{"class":51},[45,22896,254],{"class":93},[45,22898,400],{"class":257},[45,22900,1373],{"class":51},[45,22902,22903,22905,22907],{"class":47,"line":1832},[45,22904,5447],{"class":93},[45,22906,5671],{"class":2046},[45,22908,2059],{"class":51},[45,22910,22911],{"class":47,"line":1837},[45,22912,1629],{"class":51},[45,22914,22915],{"class":47,"line":1842},[45,22916,22697],{"class":267},[45,22918,22919],{"class":47,"line":1847},[45,22920,22702],{"class":267},[45,22922,22923],{"class":47,"line":1861},[45,22924,15396],{"class":51},[45,22926,22927,22929,22931],{"class":47,"line":1866},[45,22928,15949],{"class":51},[45,22930,11634],{"class":2046},[45,22932,5719],{"class":51},[45,22934,22935],{"class":47,"line":2660},[45,22936,22719],{"class":267},[45,22938,22939,22941,22943,22945],{"class":47,"line":2674},[45,22940,18602],{"class":2046},[45,22942,17815],{"class":51},[45,22944,11634],{"class":2046},[45,22946,5719],{"class":51},[45,22948,22949],{"class":47,"line":2682},[45,22950,22951],{"class":267},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[45,22953,22954],{"class":47,"line":2687},[45,22955,1648],{"class":51},[45,22957,22958,22960,22962],{"class":47,"line":2693},[45,22959,212],{"class":93},[45,22961,2056],{"class":2046},[45,22963,2059],{"class":51},[45,22965,22966],{"class":47,"line":2699},[45,22967,1629],{"class":51},[45,22969,22970,22972],{"class":47,"line":2704},[45,22971,5716],{"class":2046},[45,22973,5719],{"class":51},[45,22975,22976],{"class":47,"line":8031},[45,22977,1648],{"class":51},[176,22979,22981],{"id":22980},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22081,22983,22985],{"id":22984},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[10,22987,22988],{},"在c++中，类内的成员变量和成员函数分开存储",[10,22990,22991],{},"只有非静态成员变量才属于类的对象上",[22993,22994,22996],"h5",{"id":22995},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[35,22998,23000],{"className":197,"code":22999,"language":199,"meta":40,"style":40},"#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",[42,23001,23002,23009,23019,23025,23029,23033,23037,23045,23049,23053,23076,23080,23088,23092,23098],{"__ignoreMap":40},[45,23003,23004,23006],{"class":47,"line":48},[45,23005,2032],{"class":93},[45,23007,23008],{"class":313},"\u003Ciostraem>\n",[45,23010,23011,23013,23015,23017],{"class":47,"line":125},[45,23012,2040],{"class":93},[45,23014,2043],{"class":93},[45,23016,2047],{"class":2046},[45,23018,1373],{"class":51},[45,23020,23021,23023],{"class":47,"line":1262},[45,23022,14777],{"class":93},[45,23024,15254],{"class":2046},[45,23026,23027],{"class":47,"line":1277},[45,23028,1629],{"class":51},[45,23030,23031],{"class":47,"line":1283},[45,23032,2483],{"emptyLinePlaceholder":133},[45,23034,23035],{"class":47,"line":1297},[45,23036,4078],{"class":51},[45,23038,23039,23041,23043],{"class":47,"line":1303},[45,23040,5447],{"class":93},[45,23042,5671],{"class":2046},[45,23044,2059],{"class":51},[45,23046,23047],{"class":47,"line":1394},[45,23048,1629],{"class":51},[45,23050,23051],{"class":47,"line":1400},[45,23052,15396],{"class":51},[45,23054,23055,23057,23059,23062,23064,23067,23069,23071,23073],{"class":47,"line":1412},[45,23056,1634],{"class":51},[45,23058,1251],{"class":93},[45,23060,23061],{"class":313},"\"size of p=\"",[45,23063,1251],{"class":93},[45,23065,23066],{"class":2046},"sizeoif",[45,23068,6622],{"class":51},[45,23070,1251],{"class":93},[45,23072,1321],{"class":51},[45,23074,23075],{"class":267}," \u002F\u002F查看这个空类的占用的内存空间\n",[45,23077,23078],{"class":47,"line":1695},[45,23079,1648],{"class":51},[45,23081,23082,23084,23086],{"class":47,"line":1700},[45,23083,212],{"class":93},[45,23085,2056],{"class":2046},[45,23087,2059],{"class":51},[45,23089,23090],{"class":47,"line":1706},[45,23091,1629],{"class":51},[45,23093,23094,23096],{"class":47,"line":1711},[45,23095,5716],{"class":2046},[45,23097,5719],{"class":51},[45,23099,23100],{"class":47,"line":1725},[45,23101,1648],{"class":51},[10,23103,23104],{},"输出结果为：size of p=1",[10,23106,23107],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[10,23109,23110],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22993,23112,23114],{"id":23113},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[35,23116,23118],{"className":197,"code":23117,"language":199,"meta":40,"style":40},"#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",[42,23119,23120,23126,23136,23144,23148,23157,23161,23169,23173,23177,23196,23200,23204,23212,23216,23222],{"__ignoreMap":40},[45,23121,23122,23124],{"class":47,"line":48},[45,23123,2032],{"class":93},[45,23125,2035],{"class":313},[45,23127,23128,23130,23132,23134],{"class":47,"line":125},[45,23129,2040],{"class":93},[45,23131,2043],{"class":93},[45,23133,2047],{"class":2046},[45,23135,1373],{"class":51},[45,23137,23138,23140,23142],{"class":47,"line":1262},[45,23139,14777],{"class":93},[45,23141,15652],{"class":2046},[45,23143,2757],{"class":51},[45,23145,23146],{"class":47,"line":1277},[45,23147,1629],{"class":51},[45,23149,23150,23152,23154],{"class":47,"line":1283},[45,23151,2068],{"class":93},[45,23153,15531],{"class":51},[45,23155,23156],{"class":267},"\u002F\u002F非静态成员变量\n",[45,23158,23159],{"class":47,"line":1297},[45,23160,4078],{"class":51},[45,23162,23163,23165,23167],{"class":47,"line":1303},[45,23164,5447],{"class":93},[45,23166,5671],{"class":2046},[45,23168,2059],{"class":51},[45,23170,23171],{"class":47,"line":1394},[45,23172,1629],{"class":51},[45,23174,23175],{"class":47,"line":1400},[45,23176,15396],{"class":51},[45,23178,23179,23181,23183,23185,23187,23189,23191,23193],{"class":47,"line":1412},[45,23180,1634],{"class":51},[45,23182,1251],{"class":93},[45,23184,23061],{"class":313},[45,23186,1455],{"class":93},[45,23188,6622],{"class":51},[45,23190,1251],{"class":93},[45,23192,1321],{"class":51},[45,23194,23195],{"class":267}," \u002F\u002F查看不是空对象时占用多少内存\n",[45,23197,23198],{"class":47,"line":1695},[45,23199,2483],{"emptyLinePlaceholder":133},[45,23201,23202],{"class":47,"line":1700},[45,23203,1648],{"class":51},[45,23205,23206,23208,23210],{"class":47,"line":1706},[45,23207,212],{"class":93},[45,23209,2056],{"class":2046},[45,23211,2059],{"class":51},[45,23213,23214],{"class":47,"line":1711},[45,23215,1629],{"class":51},[45,23217,23218,23220],{"class":47,"line":1725},[45,23219,5716],{"class":2046},[45,23221,5719],{"class":51},[45,23223,23224],{"class":47,"line":1730},[45,23225,1648],{"class":51},[10,23227,23228],{},"输出结果：size of p=4",[10,23230,23231],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[159,23233,23234],{},[162,23235,23236],{},"如果加上非静态成员变量，Person类修改如下",[35,23238,23240],{"className":197,"code":23239,"language":199,"meta":40,"style":40},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[42,23241,23242,23248,23252,23258,23266,23270,23275],{"__ignoreMap":40},[45,23243,23244,23246],{"class":47,"line":48},[45,23245,14777],{"class":93},[45,23247,15254],{"class":2046},[45,23249,23250],{"class":47,"line":125},[45,23251,1629],{"class":51},[45,23253,23254,23256],{"class":47,"line":1262},[45,23255,2068],{"class":93},[45,23257,21475],{"class":51},[45,23259,23260,23262,23264],{"class":47,"line":1277},[45,23261,11103],{"class":93},[45,23263,2465],{"class":93},[45,23265,21482],{"class":51},[45,23267,23268],{"class":47,"line":1283},[45,23269,4078],{"class":51},[45,23271,23272],{"class":47,"line":1297},[45,23273,23274],{"class":267},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[45,23276,23277,23279,23281,23283,23285,23287],{"class":47,"line":1303},[45,23278,212],{"class":93},[45,23280,15652],{"class":2046},[45,23282,22495],{"class":51},[45,23284,254],{"class":93},[45,23286,400],{"class":257},[45,23288,1373],{"class":51},[10,23290,23291],{},"输出结果：4",[10,23293,23294],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[159,23296,23297],{"start":125},[162,23298,23299],{},"加上非静态成员函数",[35,23301,23303],{"className":197,"code":23302,"language":199,"meta":40,"style":40},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[42,23304,23305,23312,23316,23322,23330,23334,23338,23342],{"__ignoreMap":40},[45,23306,23307,23309],{"class":47,"line":48},[45,23308,14777],{"class":93},[45,23310,23311],{"class":2046},"  Person\n",[45,23313,23314],{"class":47,"line":125},[45,23315,1629],{"class":51},[45,23317,23318,23320],{"class":47,"line":1262},[45,23319,2068],{"class":93},[45,23321,21475],{"class":51},[45,23323,23324,23326,23328],{"class":47,"line":1277},[45,23325,14992],{"class":93},[45,23327,11468],{"class":2046},[45,23329,2059],{"class":51},[45,23331,23332],{"class":47,"line":1283},[45,23333,2113],{"class":51},[45,23335,23336],{"class":47,"line":1297},[45,23337,2483],{"emptyLinePlaceholder":133},[45,23339,23340],{"class":47,"line":1303},[45,23341,2270],{"class":51},[45,23343,23344],{"class":47,"line":1394},[45,23345,4078],{"class":51},[10,23347,23348],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[159,23350,23351],{"start":1262},[162,23352,23353],{},"加上静态成员函数",[35,23355,23357],{"className":197,"code":23356,"language":199,"meta":40,"style":40},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[42,23358,23359,23365,23369,23375,23383,23387,23391,23395,23406,23410,23414,23418],{"__ignoreMap":40},[45,23360,23361,23363],{"class":47,"line":48},[45,23362,14777],{"class":93},[45,23364,23311],{"class":2046},[45,23366,23367],{"class":47,"line":125},[45,23368,1629],{"class":51},[45,23370,23371,23373],{"class":47,"line":1262},[45,23372,2068],{"class":93},[45,23374,21475],{"class":51},[45,23376,23377,23379,23381],{"class":47,"line":1277},[45,23378,14992],{"class":93},[45,23380,11468],{"class":2046},[45,23382,2059],{"class":51},[45,23384,23385],{"class":47,"line":1283},[45,23386,2113],{"class":51},[45,23388,23389],{"class":47,"line":1297},[45,23390,2483],{"emptyLinePlaceholder":133},[45,23392,23393],{"class":47,"line":1303},[45,23394,2270],{"class":51},[45,23396,23397,23399,23401,23404],{"class":47,"line":1394},[45,23398,11103],{"class":93},[45,23400,22650],{"class":93},[45,23402,23403],{"class":2046}," func1",[45,23405,2059],{"class":51},[45,23407,23408],{"class":47,"line":1400},[45,23409,2113],{"class":51},[45,23411,23412],{"class":47,"line":1412},[45,23413,2483],{"emptyLinePlaceholder":133},[45,23415,23416],{"class":47,"line":1695},[45,23417,2270],{"class":51},[45,23419,23420],{"class":47,"line":1700},[45,23421,4078],{"class":51},[10,23423,23291],{},[10,23425,23426],{},"解释：静态成员函数也不属于类上",[121,23428,7757],{},{"title":40,"searchDepth":125,"depth":125,"links":23430},[23431,23437],{"id":14728,"depth":125,"text":14729,"children":23432},[23433,23434,23435,23436],{"id":14732,"depth":1262,"text":14733},{"id":15457,"depth":1262,"text":15458},{"id":15629,"depth":1262,"text":15630},{"id":16088,"depth":1262,"text":16089},{"id":18460,"depth":125,"text":18461,"children":23438},[23439,23440,23441,23442,23443,23444,23445,23446,23447],{"id":18472,"depth":1262,"text":18473},{"id":18765,"depth":1262,"text":18766},{"id":19256,"depth":1262,"text":19257},{"id":20353,"depth":1262,"text":20354},{"id":20776,"depth":1262,"text":20777},{"id":21255,"depth":1262,"text":21256},{"id":21630,"depth":1262,"text":21631},{"id":22043,"depth":1262,"text":22044},{"id":22980,"depth":1262,"text":22981},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14693,"description":23448},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23455,"title":199,"body":23456,"description":130,"extension":131,"meta":23460,"navigation":133,"path":23462,"seo":23463,"stem":23464,"__hash__":23465},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23457,"toc":23458},[],{"title":40,"searchDepth":125,"depth":125,"links":23459},[],{"category":23461},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":199,"description":130},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23467,"title":23468,"body":23469,"description":40,"extension":131,"meta":24059,"navigation":133,"path":24060,"seo":24061,"stem":24062,"__hash__":24063},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23470,"toc":24041},[23471,23474,23478,23481,23484,23487,23505,23510,23513,23516,23519,23522,23527,23530,23535,23538,23541,23545,23548,23551,23557,23560,23578,23582,23586,23589,23594,23597,23601,23604,23617,23620,23624,23627,23630,23633,23658,23661,23670,23681,23696,23728,23732,23739,23747,23751,23754,23757,23762,23766,23769,23772,23777,23780,23784,23787,23790,23795,23798,23802,23807,23811,23878,23882,23885,23888,23891,23894,23897,23903,23924,23927,23941,23949,23953,23956,23959,23964,23967,23972,23977,23980,23983,23988,23993,23996,24001,24006,24009,24014,24019,24022,24025,24030,24033,24038],[20,23472,23468],{"id":23473},"_1强化学习基本认识",[30,23475,23477],{"id":23476},"_11什么是强化学习","1.1.什么是强化学习",[10,23479,23480],{},"强化学习有两部分组成：智能体和环境；",[10,23482,23483],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[10,23485,23486],{},"强化学习与监督学习的区别:",[159,23488,23489,23492,23495,23498],{},[162,23490,23491],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[162,23493,23494],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[162,23496,23497],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[162,23499,23500,23501,23504],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[358,23502,23503],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[10,23506,23507],{},[1545,23508],{"alt":40,"src":23509},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[10,23511,23512],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[10,23514,23515],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[10,23517,23518],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[10,23520,23521],{},"获取奖励",[10,23523,23524],{},[1545,23525],{"alt":40,"src":23526},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[10,23528,23529],{},"强化学习可以分成标准强化学习和深度强化学习",[10,23531,23532],{},[1545,23533],{"alt":40,"src":23534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[10,23536,23537],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[10,23539,23540],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[30,23542,23544],{"id":23543},"_12强化学习应用场景","1.2.强化学习应用场景",[10,23546,23547],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[10,23549,23550],{},"具身智能中的应用",[10,23552,23553,23556],{},[358,23554,23555],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[10,23558,23559],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[10,23561,23562,23563,23566,23567,23570,23571,23574,23575],{},"机器人是",[358,23564,23565],{},"躯体","，深度学习是",[358,23568,23569],{},"神经元****网络","，VLA是",[358,23572,23573],{},"通用的行为逻辑","，而强化学习是",[358,23576,23577],{},"教练",[30,23579,23581],{"id":23580},"_13序列决策","1.3.序列决策",[176,23583,23585],{"id":23584},"_131智能体与环境","1.3.1.智能体与环境",[10,23587,23588],{},"强化学习研究的问题是智能体agent与环境交互的问题",[10,23590,23591],{},[1545,23592],{"alt":40,"src":23593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[10,23595,23596],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[176,23598,23600],{"id":23599},"_132奖励","1.3.2.奖励",[10,23602,23603],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[10,23605,23606,23607,23616],{},"取某个策略的表现如何。强化学习的目的就是",[358,23608,23609,23610,23615],{},"最大化",[358,23611,23612],{},[358,23613,23614],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[10,23618,23619],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[176,23621,23623],{"id":23622},"_133序列决策","1.3.3.序列决策",[10,23625,23626],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[10,23628,23629],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[10,23631,23632],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[10,23634,23635,23639,23640,23642,23643,23645,23646,23648,23649,13878,23652,13878,23655],{},[23636,23637,23638],"em",{},"Ht"," = ",[23636,23641,803],{},"1*, a",[23636,23644,426],{},", r",[23636,23647,426],{},", . . . ,* ",[23636,23650,23651],{},"ot",[23636,23653,23654],{},", at ,",[23636,23656,23657],{},"rt",[10,23659,23660],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[10,23662,23663,23639,23666,1741,23668,637],{},[23636,23664,23665],{},"st",[23636,23667,261],{},[23636,23669,23638],{},[10,23671,23672,23673,23676,23677,23680],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[358,23674,23675],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[358,23678,23679],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[10,23682,23683,23684,23687,23688,23691,23692,23695],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[358,23685,23686],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[358,23689,23690],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23636,23693,23694],{},"S, A, T, R, Ω, O, γ",")。",[10,23697,23698,23699,23701,23702,23704,23705,209,23707,23710,23711,23713,23714,209,23717,23720,23721,23723,23724,23727],{},"其中 ",[23636,23700,896],{}," 表示状态空间，为隐变量，",[23636,23703,441],{}," 为动作空间，",[23636,23706,921],{},[23636,23708,23709],{},"s ′ |s, a",") 为状态转移概率，",[23636,23712,871],{}," 为奖励函数，",[23636,23715,23716],{},"Ω",[23636,23718,23719],{},"o|s, a",") 为观测概率，",[23636,23722,797],{}," 为观测空间，",[23636,23725,23726],{},"γ"," 为折扣因子。",[30,23729,23731],{"id":23730},"_14动作空间","1.4.动作空间",[10,23733,23734,23735,23738],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[358,23736,23737],{},"动作空间"," ，动作空间分为:",[159,23740,23741,23744],{},[162,23742,23743],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[162,23745,23746],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[30,23748,23750],{"id":23749},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[10,23752,23753],{},"由策略、价值函数、模型三部分组成",[10,23755,23756],{},"这三者组成马尔可夫决策过程",[10,23758,23759],{},[1545,23760],{"alt":40,"src":23761},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[176,23763,23765],{"id":23764},"_151策略","1.5.1.策略",[10,23767,23768],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[10,23770,23771],{},"策略可分为两种：",[10,23773,23774],{},[1545,23775],{"alt":40,"src":23776},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[10,23778,23779],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[176,23781,23783],{"id":23782},"_152价值函数","1.5.2.价值函数",[10,23785,23786],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[10,23788,23789],{},"价值函数中有一个折扣因子，类似于存款利息",[10,23791,23792],{},[1545,23793],{"alt":40,"src":23794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[10,23796,23797],{},"进入某个状态采取的最优动作可以通过Q函数得到",[176,23799,23801],{"id":23800},"_153模型","1.5.3.模型",[10,23803,23804],{},[1545,23805],{"alt":40,"src":23806},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[30,23808,23810],{"id":23809},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[346,23812,23813,23824],{},[349,23814,23815],{},[352,23816,23817,23821],{},[355,23818,23820],{"align":23819},"left","类型",[355,23822,23823],{"align":23819},"特点",[393,23825,23826,23836,23846,23856,23868],{},[352,23827,23828,23833],{},[398,23829,23830],{"align":23819},[358,23831,23832],{},"基于价值的智能体",[398,23834,23835],{"align":23819},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[352,23837,23838,23843],{},[398,23839,23840],{"align":23819},[358,23841,23842],{},"基于策略的智能体",[398,23844,23845],{"align":23819},"直接学习策略，没有学习价值函数",[352,23847,23848,23853],{},[398,23849,23850],{"align":23819},[358,23851,23852],{},"演员-评论员智能体",[398,23854,23855],{"align":23819},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[352,23857,23858,23863],{},[398,23859,23860],{"align":23819},[358,23861,23862],{},"有模型强化学习智能体",[398,23864,23865],{"align":23819},[1545,23866],{"alt":40,"src":23867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[352,23869,23870,23875],{},[398,23871,23872],{"align":23819},[358,23873,23874],{},"免模型强化学习智能体",[398,23876,23877],{"align":23819},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[30,23879,23881],{"id":23880},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[10,23883,23884],{},"学习和规划是序列决策的两个基本问题",[10,23886,23887],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[10,23889,23890],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[10,23892,23893],{},"强化学习用到的库：Gym",[10,23895,23896],{},"Gym可以检验强化学习算法的优劣",[10,23898,23899,23902],{},[358,23900,23901],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[35,23904,23908],{"className":23905,"code":23906,"language":23907,"meta":40,"style":40},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[42,23909,23910],{"__ignoreMap":40},[45,23911,23912,23915,23918,23921],{"class":47,"line":48},[45,23913,23914],{"class":2046},"pip",[45,23916,23917],{"class":313}," install",[45,23919,23920],{"class":313}," gym==",[45,23922,23923],{"class":257},"0.25.2\n",[10,23925,23926],{},"显示图形界面需要",[35,23928,23930],{"className":23905,"code":23929,"language":23907,"meta":40,"style":40},"pip install pygame\n",[42,23931,23932],{"__ignoreMap":40},[45,23933,23934,23936,23938],{"class":47,"line":48},[45,23935,23914],{"class":2046},[45,23937,23917],{"class":313},[45,23939,23940],{"class":313}," pygame\n",[10,23942,23943,23944],{},"有关Gym库的相关文档介绍：",[13,23945,23948],{"href":23946,"rel":23947},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[17],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[30,23950,23952],{"id":23951},"_18一些补充基础概念","1.8.一些补充基础概念",[10,23954,23955],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[10,23957,23958],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[10,23960,23961],{},[1545,23962],{"alt":40,"src":23963},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[10,23965,23966],{},"折扣率需要自己来设定",[10,23968,23969],{},[1545,23970],{"alt":40,"src":23971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[159,23973,23974],{},[162,23975,23976],{},"状态转移函数：",[10,23978,23979],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[10,23981,23982],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[10,23984,23985],{},[1545,23986],{"alt":40,"src":23987},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[159,23989,23990],{"start":125},[162,23991,23992],{},"动作价值函数：",[10,23994,23995],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[10,23997,23998],{},[1545,23999],{"alt":40,"src":24000},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[159,24002,24003],{"start":1262},[162,24004,24005],{},"最优动作价值函数：",[10,24007,24008],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[10,24010,24011],{},[1545,24012],{"alt":40,"src":24013},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[159,24015,24016],{"start":1277},[162,24017,24018],{},"状态价值函数:",[10,24020,24021],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[10,24023,24024],{},"它衡量的是“一个具体动作”的长期价值",[10,24026,24027],{},[1545,24028],{"alt":40,"src":24029},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[10,24031,24032],{},"几个价值函数之间的比较：",[10,24034,24035],{},[1545,24036],{"alt":40,"src":24037},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[121,24039,24040],{},"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":40,"searchDepth":125,"depth":125,"links":24042},[24043,24044,24045,24050,24051,24056,24057,24058],{"id":23476,"depth":125,"text":23477},{"id":23543,"depth":125,"text":23544},{"id":23580,"depth":125,"text":23581,"children":24046},[24047,24048,24049],{"id":23584,"depth":1262,"text":23585},{"id":23599,"depth":1262,"text":23600},{"id":23622,"depth":1262,"text":23623},{"id":23730,"depth":125,"text":23731},{"id":23749,"depth":125,"text":23750,"children":24052},[24053,24054,24055],{"id":23764,"depth":1262,"text":23765},{"id":23782,"depth":1262,"text":23783},{"id":23800,"depth":1262,"text":23801},{"id":23809,"depth":125,"text":23810},{"id":23880,"depth":125,"text":23881},{"id":23951,"depth":125,"text":23952},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23468,"description":40},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24065,"title":24066,"body":24067,"description":24074,"extension":131,"meta":24085,"navigation":133,"path":24086,"seo":24087,"stem":24088,"__hash__":24089},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24068,"toc":24083},[24069,24072,24075,24080],[20,24070,24066],{"id":24071},"_2马尔可夫决策过程",[10,24073,24074],{},"这是强化学习的基本框架",[10,24076,24077],{},[1545,24078],{"alt":40,"src":24079},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[10,24081,24082],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":40,"searchDepth":125,"depth":125,"links":24084},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24066,"description":24074},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24091,"title":24092,"body":24093,"description":40,"extension":131,"meta":24209,"navigation":133,"path":24210,"seo":24211,"stem":24212,"__hash__":24213},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24094,"toc":24204},[24095,24098,24102,24105,24110,24115,24118,24123,24126,24131,24134,24138,24143,24146,24151,24156,24161,24164,24168,24173,24176,24181,24186,24191,24196,24199],[20,24096,24092],{"id":24097},"_3动作价值函数",[30,24099,24101],{"id":24100},"_31dqn","3.1.DQN",[10,24103,24104],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[10,24106,24107],{},[1545,24108],{"alt":40,"src":24109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[10,24111,24112],{},[1545,24113],{"alt":40,"src":24114},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[10,24116,24117],{},"DQN算法的描述：",[10,24119,24120],{},[1545,24121],{"alt":40,"src":24122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[10,24124,24125],{},"这里的Dense指的是全连接层",[10,24127,24128],{},[1545,24129],{"alt":40,"src":24130},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[10,24132,24133],{},"当前观测的状态为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算法",[30,24135,24137],{"id":24136},"_32dqn的举例","3.2.DQN的举例",[10,24139,24140],{},[1545,24141],{"alt":40,"src":24142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[10,24144,24145],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[10,24147,24148],{},[1545,24149],{"alt":40,"src":24150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[10,24152,24153],{},[1545,24154],{"alt":40,"src":24155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[10,24157,24158],{},[1545,24159],{"alt":40,"src":24160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[10,24162,24163],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[30,24165,24167],{"id":24166},"_33td算法","3.3.TD算法",[10,24169,24170],{},[1545,24171],{"alt":40,"src":24172},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[10,24174,24175],{},"强化学习TD算法公式的粗略解释：",[10,24177,24178],{},[1545,24179],{"alt":40,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[10,24182,24183],{},[1545,24184],{"alt":40,"src":24185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[10,24187,24188],{},[1545,24189],{"alt":40,"src":24190},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[10,24192,24193],{},[1545,24194],{"alt":40,"src":24195},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[10,24197,24198],{},"TD算法总结：",[10,24200,24201],{},[1545,24202],{"alt":40,"src":24203},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":40,"searchDepth":125,"depth":125,"links":24205},[24206,24207,24208],{"id":24100,"depth":125,"text":24101},{"id":24136,"depth":125,"text":24137},{"id":24166,"depth":125,"text":24167},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24092,"description":40},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24215,"title":24216,"body":24217,"description":40,"extension":131,"meta":24450,"navigation":133,"path":24451,"seo":24452,"stem":24453,"__hash__":24454},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24218,"toc":24446},[24219,24222,24226,24229,24232,24237,24242,24245,24250,24255,24258,24263,24266,24271,24274,24279,24282,24287,24290,24295,24300,24303,24308,24311,24314,24319,24322,24327,24332,24336,24339,24342,24347,24352,24355,24360,24365,24368,24373,24376,24379,24384,24387,24392,24395,24400,24405,24408,24413,24418,24421,24426,24429,24434,24437],[20,24220,24216],{"id":24221},"_4策略学习",[30,24223,24225],{"id":24224},"_41概念描述","4.1.概念描述",[10,24227,24228],{},"用神经网络（策略网络）近似策略函数",[10,24230,24231],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[10,24233,24234],{},[1545,24235],{"alt":40,"src":24236},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[10,24238,24239],{},[1545,24240],{"alt":40,"src":24241},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[10,24243,24244],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[10,24246,24247],{},[1545,24248],{"alt":40,"src":24249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[10,24251,24252],{},[1545,24253],{"alt":40,"src":24254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[10,24256,24257],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[10,24259,24260],{},[1545,24261],{"alt":40,"src":24262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[10,24264,24265],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[10,24267,24268],{},[1545,24269],{"alt":40,"src":24270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[10,24272,24273],{},"改进theta要用到策略梯度算法",[10,24275,24276],{},[1545,24277],{"alt":40,"src":24278},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[10,24280,24281],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[10,24283,24284],{},[1545,24285],{"alt":40,"src":24286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[10,24288,24289],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[10,24291,24292],{},[1545,24293],{"alt":40,"src":24294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[10,24296,24297],{},[1545,24298],{"alt":40,"src":24299},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[10,24301,24302],{},"梯度公式总结：",[10,24304,24305],{},[1545,24306],{"alt":40,"src":24307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[10,24309,24310],{},"两个公式的分别应用场景：",[10,24312,24313],{},"对于离散的动作：",[10,24315,24316],{},[1545,24317],{"alt":40,"src":24318},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[10,24320,24321],{},"对于连续的动作：",[10,24323,24324],{},[1545,24325],{"alt":40,"src":24326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[10,24328,24329],{},[1545,24330],{"alt":40,"src":24331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[30,24333,24335],{"id":24334},"_42概率梯度算法总结","4.2.概率梯度算法总结",[10,24337,24338],{},"使用蒙特卡洛来近似计算策略梯度",[10,24340,24341],{},"蒙特卡洛法的解释如下：",[10,24343,24344],{},[1545,24345],{"alt":40,"src":24346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[10,24348,24349],{},[1545,24350],{"alt":40,"src":24351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[10,24353,24354],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[159,24356,24357],{},[162,24358,24359],{},"方法一：reinforce算法",[10,24361,24362],{},[1545,24363],{"alt":40,"src":24364},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[10,24366,24367],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[159,24369,24370],{"start":125},[162,24371,24372],{},"方法二：actor-critic算法",[10,24374,24375],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[10,24377,24378],{},"两个网络的构建：",[10,24380,24381],{},[1545,24382],{"alt":40,"src":24383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[10,24385,24386],{},"actor网路：",[10,24388,24389],{},[1545,24390],{"alt":40,"src":24391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[10,24393,24394],{},"critic网络",[10,24396,24397],{},[1545,24398],{"alt":40,"src":24399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[159,24401,24402],{"start":1262},[162,24403,24404],{},"网络的训练",[10,24406,24407],{},"网络描述",[10,24409,24410],{},[1545,24411],{"alt":40,"src":24412},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[10,24414,24415],{},[1545,24416],{"alt":40,"src":24417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[10,24419,24420],{},"TD算法更新梯度：",[10,24422,24423],{},[1545,24424],{"alt":40,"src":24425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[10,24427,24428],{},"策略网络更新梯度：",[10,24430,24431],{},[1545,24432],{"alt":40,"src":24433},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[10,24435,24436],{},"训练整个流程的具体描述：",[10,24438,24439,24442,24443],{},[1545,24440],{"alt":40,"src":24441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1545,24444],{"alt":40,"src":24445},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":40,"searchDepth":125,"depth":125,"links":24447},[24448,24449],{"id":24224,"depth":125,"text":24225},{"id":24334,"depth":125,"text":24335},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24216,"description":40},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24456,"title":24457,"body":24458,"description":24465,"extension":131,"meta":24515,"navigation":133,"path":24516,"seo":24517,"stem":24518,"__hash__":24519},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24459,"toc":24511},[24460,24463,24466,24470,24473,24478,24482,24485,24490,24493,24498,24503,24506],[20,24461,24457],{"id":24462},"_5alphago算法",[10,24464,24465],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[30,24467,24469],{"id":24468},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[10,24471,24472],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[10,24474,24475],{},[1545,24476],{"alt":40,"src":24477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[30,24479,24481],{"id":24480},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[10,24483,24484],{},"采用强化学习的方式训练策略网络",[10,24486,24487],{},[1545,24488],{"alt":40,"src":24489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[10,24491,24492],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[10,24494,24495],{},[1545,24496],{"alt":40,"src":24497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[10,24499,24500],{},[1545,24501],{"alt":40,"src":24502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[10,24504,24505],{},"强化学习训练策略网络的总结：",[10,24507,24508],{},[1545,24509],{"alt":40,"src":24510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":40,"searchDepth":125,"depth":125,"links":24512},[24513,24514],{"id":24468,"depth":125,"text":24469},{"id":24480,"depth":125,"text":24481},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24457,"description":24465},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24521,"title":24522,"body":24523,"description":24530,"extension":131,"meta":24533,"navigation":133,"path":24534,"seo":24535,"stem":24536,"__hash__":24537},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24524,"toc":24531},[24525,24528],[20,24526,24522],{"id":24527},"_6价值网络",[10,24529,24530],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":40,"searchDepth":125,"depth":125,"links":24532},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24522,"description":24530},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24539,"title":24540,"body":24541,"description":24545,"extension":131,"meta":24546,"navigation":133,"path":24547,"seo":24548,"stem":24549,"__hash__":24550},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24542,"toc":24543},[],{"title":40,"searchDepth":125,"depth":125,"links":24544},[],"记录自己的强化学习笔记。",{"category":23461},"\u002Fwiki\u002F2025-12-04",{"title":24540,"description":24545},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24552,"title":24553,"body":24554,"description":130,"extension":131,"meta":24593,"navigation":133,"path":24594,"seo":24595,"stem":24596,"__hash__":24597},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24555,"toc":24591},[24556,24559,24562,24568,24571,24577,24580,24585,24588],[20,24557,24553],{"id":24558},"_1-项目概览与官方资源",[10,24560,24561],{},"官方文档：",[10,24563,24564],{},[13,24565,24566],{"href":24566,"rel":24567},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[17],[10,24569,24570],{},"官方代码仓库：",[10,24572,24573],{},[13,24574,24575],{"href":24575,"rel":24576},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[17],[10,24578,24579],{},"复现大体流程：",[10,24581,24582],{},[1545,24583],{"alt":40,"src":24584},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[10,24586,24587],{},"本教程的目标是打通这条链路：",[10,24589,24590],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":40,"searchDepth":125,"depth":125,"links":24592},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24553,"description":130},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24599,"title":24600,"body":24601,"description":130,"extension":131,"meta":24717,"navigation":133,"path":24718,"seo":24719,"stem":24720,"__hash__":24721},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24602,"toc":24712},[24603,24606,24610,24613,24620,24624,24627,24636,24646,24650,24680,24683,24709],[20,24604,24600],{"id":24605},"_2-环境准备与设备连接",[30,24607,24609],{"id":24608},"_21-系统与环境","2.1 系统与环境",[10,24611,24612],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[10,24614,24615,24616,24619],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[42,24617,24618],{},"lerobot"," 依赖。",[30,24621,24623],{"id":24622},"_22-机械臂串口识别","2.2 机械臂串口识别",[10,24625,24626],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[35,24628,24630],{"className":23905,"code":24629,"language":23907,"meta":40,"style":40},"lerobot-find-out\n",[42,24631,24632],{"__ignoreMap":40},[45,24633,24634],{"class":47,"line":48},[45,24635,24629],{"class":2046},[10,24637,24638,24639,421,24642,24645],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[42,24640,24641],{},"\u002Fdev\u002FttyACM0",[42,24643,24644],{},"\u002Fdev\u002FttyACM1","）。",[30,24647,24649],{"id":24648},"_23-串口授权","2.3 串口授权",[35,24651,24653],{"className":23905,"code":24652,"language":23907,"meta":40,"style":40},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[42,24654,24655,24669],{"__ignoreMap":40},[45,24656,24657,24660,24663,24666],{"class":47,"line":48},[45,24658,24659],{"class":2046},"sudo",[45,24661,24662],{"class":313}," chmod",[45,24664,24665],{"class":257}," 666",[45,24667,24668],{"class":313}," \u002Fdev\u002FttyACM0\n",[45,24670,24671,24673,24675,24677],{"class":47,"line":125},[45,24672,24659],{"class":2046},[45,24674,24662],{"class":313},[45,24676,24665],{"class":257},[45,24678,24679],{"class":313}," \u002Fdev\u002FttyACM1\n",[10,24681,24682],{},"说明：",[1214,24684,24685,24690,24696,24706],{},[162,24686,24687,24689],{},[42,24688,24659],{},"：以 root 权限执行命令。",[162,24691,24692,24695],{},[42,24693,24694],{},"chmod","：修改设备节点权限。",[162,24697,24698,24701,24702,24705],{},[42,24699,24700],{},"666","：",[42,24703,24704],{},"rw-rw-rw-","，所有用户可读写。",[162,24707,24708],{},"串口号必须替换为你机器上的真实端口。",[121,24710,24711],{},"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":40,"searchDepth":125,"depth":125,"links":24713},[24714,24715,24716],{"id":24608,"depth":125,"text":24609},{"id":24622,"depth":125,"text":24623},{"id":24648,"depth":125,"text":24649},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24600,"description":130},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24723,"title":24724,"body":24725,"description":130,"extension":131,"meta":24886,"navigation":133,"path":24887,"seo":24888,"stem":24889,"__hash__":24890},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24726,"toc":24882},[24727,24731,24735,24741,24744,24801,24804,24808,24811,24879],[20,24728,24730],{"id":24729},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[30,24732,24734],{"id":24733},"_31-配置电机-id","3.1 配置电机 ID",[10,24736,24737,24738,24740],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[42,24739,426],{},"，需要改成机械臂链路里不冲突的编号。",[10,24742,24743],{},"方式一：用 LeRobot 命令逐步写入。",[35,24745,24747],{"className":23905,"code":24746,"language":23907,"meta":40,"style":40},"# 主臂舵机配置 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",[42,24748,24749,24754,24762,24769,24774,24778,24783,24789,24796],{"__ignoreMap":40},[45,24750,24751],{"class":47,"line":48},[45,24752,24753],{"class":267},"# 主臂舵机配置 ID\n",[45,24755,24756,24759],{"class":47,"line":125},[45,24757,24758],{"class":2046},"lerobot-setup-motors",[45,24760,24761],{"class":257}," \\\n",[45,24763,24764,24767],{"class":47,"line":1262},[45,24765,24766],{"class":257},"  --teleop.type=so101_leader",[45,24768,24761],{"class":257},[45,24770,24771],{"class":47,"line":1277},[45,24772,24773],{"class":257},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[45,24775,24776],{"class":47,"line":1283},[45,24777,2483],{"emptyLinePlaceholder":133},[45,24779,24780],{"class":47,"line":1297},[45,24781,24782],{"class":267},"# 从臂舵机配置 ID\n",[45,24784,24785,24787],{"class":47,"line":1303},[45,24786,24758],{"class":2046},[45,24788,24761],{"class":257},[45,24790,24791,24794],{"class":47,"line":1394},[45,24792,24793],{"class":257},"  --robot.type=so101_follower",[45,24795,24761],{"class":257},[45,24797,24798],{"class":47,"line":1400},[45,24799,24800],{"class":257},"  --robot.port=\u002Fdev\u002FttyACM1\n",[10,24802,24803],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[30,24805,24807],{"id":24806},"_32-机械臂校准","3.2 机械臂校准",[10,24809,24810],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[35,24812,24814],{"className":23905,"code":24813,"language":23907,"meta":40,"style":40},"# 主臂校准\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",[42,24815,24816,24821,24828,24834,24841,24846,24850,24855,24861,24867,24874],{"__ignoreMap":40},[45,24817,24818],{"class":47,"line":48},[45,24819,24820],{"class":267},"# 主臂校准\n",[45,24822,24823,24826],{"class":47,"line":125},[45,24824,24825],{"class":2046},"lerobot-calibrate",[45,24827,24761],{"class":257},[45,24829,24830,24832],{"class":47,"line":1262},[45,24831,24766],{"class":257},[45,24833,24761],{"class":257},[45,24835,24836,24839],{"class":47,"line":1277},[45,24837,24838],{"class":257},"  --teleop.port=\u002Fdev\u002FttyACM0",[45,24840,24761],{"class":257},[45,24842,24843],{"class":47,"line":1283},[45,24844,24845],{"class":257},"  --teleop.id=my_awesome_leader_arm\n",[45,24847,24848],{"class":47,"line":1297},[45,24849,2483],{"emptyLinePlaceholder":133},[45,24851,24852],{"class":47,"line":1303},[45,24853,24854],{"class":267},"# 从臂校准\n",[45,24856,24857,24859],{"class":47,"line":1394},[45,24858,24825],{"class":2046},[45,24860,24761],{"class":257},[45,24862,24863,24865],{"class":47,"line":1400},[45,24864,24793],{"class":257},[45,24866,24761],{"class":257},[45,24868,24869,24872],{"class":47,"line":1412},[45,24870,24871],{"class":257},"  --robot.port=\u002Fdev\u002FttyACM1",[45,24873,24761],{"class":257},[45,24875,24876],{"class":47,"line":1695},[45,24877,24878],{"class":257},"  --robot.id=my_awesome_follower_arm\n",[121,24880,24881],{},"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":40,"searchDepth":125,"depth":125,"links":24883},[24884,24885],{"id":24733,"depth":125,"text":24734},{"id":24806,"depth":125,"text":24807},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24724,"description":130},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24892,"title":24893,"body":24894,"description":130,"extension":131,"meta":25085,"navigation":133,"path":25086,"seo":25087,"stem":25088,"__hash__":25089},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24895,"toc":25081},[24896,24899,24903,24950,24954,24967,25030,25033,25078],[20,24897,24893],{"id":24898},"_4-遥操与相机接入",[30,24900,24902],{"id":24901},"_41-不带相机遥操","4.1 不带相机遥操",[35,24904,24906],{"className":23905,"code":24905,"language":23907,"meta":40,"style":40},"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",[42,24907,24908,24915,24921,24927,24934,24940,24946],{"__ignoreMap":40},[45,24909,24910,24913],{"class":47,"line":48},[45,24911,24912],{"class":2046},"lerobot-teleoperate",[45,24914,24761],{"class":257},[45,24916,24917,24919],{"class":47,"line":125},[45,24918,24793],{"class":257},[45,24920,24761],{"class":257},[45,24922,24923,24925],{"class":47,"line":1262},[45,24924,24871],{"class":257},[45,24926,24761],{"class":257},[45,24928,24929,24932],{"class":47,"line":1277},[45,24930,24931],{"class":257},"  --robot.id=my_awesome_follower_arm",[45,24933,24761],{"class":257},[45,24935,24936,24938],{"class":47,"line":1283},[45,24937,24766],{"class":257},[45,24939,24761],{"class":257},[45,24941,24942,24944],{"class":47,"line":1297},[45,24943,24838],{"class":257},[45,24945,24761],{"class":257},[45,24947,24948],{"class":47,"line":1303},[45,24949,24845],{"class":257},[30,24951,24953],{"id":24952},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[35,24955,24957],{"className":23905,"code":24956,"language":23907,"meta":40,"style":40},"lerobot-find-cameras opencv\n",[42,24958,24959],{"__ignoreMap":40},[45,24960,24961,24964],{"class":47,"line":48},[45,24962,24963],{"class":2046},"lerobot-find-cameras",[45,24965,24966],{"class":313}," opencv\n",[35,24968,24970],{"className":23905,"code":24969,"language":23907,"meta":40,"style":40},"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",[42,24971,24972,24978,24984,24990,24996,25006,25012,25018,25025],{"__ignoreMap":40},[45,24973,24974,24976],{"class":47,"line":48},[45,24975,24912],{"class":2046},[45,24977,24761],{"class":257},[45,24979,24980,24982],{"class":47,"line":125},[45,24981,24793],{"class":257},[45,24983,24761],{"class":257},[45,24985,24986,24988],{"class":47,"line":1262},[45,24987,24871],{"class":257},[45,24989,24761],{"class":257},[45,24991,24992,24994],{"class":47,"line":1277},[45,24993,24931],{"class":257},[45,24995,24761],{"class":257},[45,24997,24998,25001,25004],{"class":47,"line":1283},[45,24999,25000],{"class":257},"  --robot.cameras=",[45,25002,25003],{"class":313},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[45,25005,24761],{"class":257},[45,25007,25008,25010],{"class":47,"line":1297},[45,25009,24766],{"class":257},[45,25011,24761],{"class":257},[45,25013,25014,25016],{"class":47,"line":1303},[45,25015,24838],{"class":257},[45,25017,24761],{"class":257},[45,25019,25020,25023],{"class":47,"line":1394},[45,25021,25022],{"class":257},"  --teleop.id=my_awesome_leader_arm",[45,25024,24761],{"class":257},[45,25026,25027],{"class":47,"line":1400},[45,25028,25029],{"class":257},"  --display_data=true\n",[10,25031,25032],{},"相机参数说明：",[1214,25034,25035,25041,25047,25056,25066,25072],{},[162,25036,25037,25040],{},[42,25038,25039],{},"front","：相机名称。",[162,25042,25043,25046],{},[42,25044,25045],{},"type: opencv","：相机驱动类型。",[162,25048,25049,25052,25053,24645],{},[42,25050,25051],{},"index_or_path","：设备编号或设备路径（如 ",[42,25054,25055],{},"\u002Fdev\u002Fvideo4",[162,25057,25058,25061,25062,25065],{},[42,25059,25060],{},"width"," \u002F ",[42,25063,25064],{},"height","：图像分辨率。",[162,25067,25068,25071],{},[42,25069,25070],{},"fps","：采样帧率。",[162,25073,25074,25077],{},[42,25075,25076],{},"--display_data=true","：启用实时可视化。",[121,25079,25080],{},"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":40,"searchDepth":125,"depth":125,"links":25082},[25083,25084],{"id":24901,"depth":125,"text":24902},{"id":24952,"depth":125,"text":24953},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24893,"description":130},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25091,"title":25092,"body":25093,"description":130,"extension":131,"meta":25265,"navigation":133,"path":25266,"seo":25267,"stem":25268,"__hash__":25269},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25094,"toc":25260},[25095,25099,25103,25108,25113,25116,25158,25164,25168,25217,25222,25226,25229,25237,25242,25247,25252,25257],[20,25096,25098],{"id":25097},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[30,25100,25102],{"id":25101},"_51-生成访问令牌","5.1 生成访问令牌",[10,25104,25105],{},[1545,25106],{"alt":40,"src":25107},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[10,25109,25110],{},[1545,25111],{"alt":40,"src":25112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[10,25114,25115],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[35,25117,25119],{"className":23905,"code":25118,"language":23907,"meta":40,"style":40},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[42,25120,25121,25134],{"__ignoreMap":40},[45,25122,25123,25126,25129,25131],{"class":47,"line":48},[45,25124,25125],{"class":93},"export",[45,25127,25128],{"class":51}," HF_TOKEN",[45,25130,254],{"class":93},[45,25132,25133],{"class":313},"\"your_huggingface_token\"\n",[45,25135,25136,25139,25142,25145,25148,25150,25153,25155],{"class":47,"line":125},[45,25137,25138],{"class":2046},"hf",[45,25140,25141],{"class":313}," auth",[45,25143,25144],{"class":313}," login",[45,25146,25147],{"class":257}," --token",[45,25149,9807],{"class":313},[45,25151,25152],{"class":51},"$HF_TOKEN",[45,25154,459],{"class":313},[45,25156,25157],{"class":257}," --add-to-git-credential\n",[10,25159,25160,25163],{},[42,25161,25162],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[30,25165,25167],{"id":25166},"_52-验证登录","5.2 验证登录",[35,25169,25171],{"className":23905,"code":25170,"language":23907,"meta":40,"style":40},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[42,25172,25173,25204],{"__ignoreMap":40},[45,25174,25175,25178,25180,25183,25185,25187,25190,25193,25196,25199,25202],{"class":47,"line":48},[45,25176,25177],{"class":51},"HF_USER",[45,25179,254],{"class":93},[45,25181,25182],{"class":51},"$(",[45,25184,25138],{"class":2046},[45,25186,25141],{"class":313},[45,25188,25189],{"class":313}," whoami",[45,25191,25192],{"class":93}," |",[45,25194,25195],{"class":2046}," head",[45,25197,25198],{"class":257}," -n",[45,25200,25201],{"class":257}," 1",[45,25203,215],{"class":51},[45,25205,25206,25209,25211,25214],{"class":47,"line":125},[45,25207,25208],{"class":257},"echo",[45,25210,9807],{"class":313},[45,25212,25213],{"class":51},"$HF_USER",[45,25215,25216],{"class":313},"\"\n",[10,25218,25219],{},[1545,25220],{"alt":40,"src":25221},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[30,25223,25225],{"id":25224},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[10,25227,25228],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1214,25230,25231,25234],{},[162,25232,25233],{},"Dataset Repo（用于上传演示数据）",[162,25235,25236],{},"Model Repo（用于上传训练后的 ACT 权重）",[10,25238,25239],{},[1545,25240],{"alt":40,"src":25241},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[10,25243,25244],{},[1545,25245],{"alt":40,"src":25246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[10,25248,25249],{},[1545,25250],{"alt":40,"src":25251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[10,25253,25254],{},[1545,25255],{"alt":40,"src":25256},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[121,25258,25259],{},"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":40,"searchDepth":125,"depth":125,"links":25261},[25262,25263,25264],{"id":25101,"depth":125,"text":25102},{"id":25166,"depth":125,"text":25167},{"id":25224,"depth":125,"text":25225},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25092,"description":130},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25271,"title":25272,"body":25273,"description":130,"extension":131,"meta":25470,"navigation":133,"path":25471,"seo":25472,"stem":25473,"__hash__":25474},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25274,"toc":25465},[25275,25279,25283,25379,25387,25392,25396,25412,25415,25419,25462],[20,25276,25278],{"id":25277},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[30,25280,25282],{"id":25281},"_61-录制示教数据","6.1 录制示教数据",[35,25284,25286],{"className":23905,"code":25285,"language":23907,"meta":40,"style":40},"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",[42,25287,25288,25295,25301,25307,25313,25322,25328,25334,25340,25347,25357,25364,25374],{"__ignoreMap":40},[45,25289,25290,25293],{"class":47,"line":48},[45,25291,25292],{"class":2046},"lerobot-record",[45,25294,24761],{"class":257},[45,25296,25297,25299],{"class":47,"line":125},[45,25298,24793],{"class":257},[45,25300,24761],{"class":257},[45,25302,25303,25305],{"class":47,"line":1262},[45,25304,24871],{"class":257},[45,25306,24761],{"class":257},[45,25308,25309,25311],{"class":47,"line":1277},[45,25310,24931],{"class":257},[45,25312,24761],{"class":257},[45,25314,25315,25317,25320],{"class":47,"line":1283},[45,25316,25000],{"class":257},[45,25318,25319],{"class":313},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[45,25321,24761],{"class":257},[45,25323,25324,25326],{"class":47,"line":1297},[45,25325,24766],{"class":257},[45,25327,24761],{"class":257},[45,25329,25330,25332],{"class":47,"line":1303},[45,25331,24838],{"class":257},[45,25333,24761],{"class":257},[45,25335,25336,25338],{"class":47,"line":1394},[45,25337,25022],{"class":257},[45,25339,24761],{"class":257},[45,25341,25342,25345],{"class":47,"line":1400},[45,25343,25344],{"class":257},"  --display_data=true",[45,25346,24761],{"class":257},[45,25348,25349,25352,25355],{"class":47,"line":1412},[45,25350,25351],{"class":257},"  --dataset.repo_id=",[45,25353,25354],{"class":313},"\"Embodied-AI-6\u002Fso101_test\"",[45,25356,24761],{"class":257},[45,25358,25359,25362],{"class":47,"line":1695},[45,25360,25361],{"class":257},"  --dataset.num_episodes=10",[45,25363,24761],{"class":257},[45,25365,25366,25369,25372],{"class":47,"line":1700},[45,25367,25368],{"class":257},"  --dataset.single_task=",[45,25370,25371],{"class":313},"\"Grab the green cube\"",[45,25373,24761],{"class":257},[45,25375,25376],{"class":47,"line":1706},[45,25377,25378],{"class":257},"  --resume=true\n",[1214,25380,25381],{},[162,25382,25383,25386],{},[42,25384,25385],{},"--resume=true","：已有同一数据集时继续追加 episode。",[10,25388,25389],{},[1545,25390],{"alt":40,"src":25391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[30,25393,25395],{"id":25394},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[35,25397,25399],{"className":23905,"code":25398,"language":23907,"meta":40,"style":40},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[42,25400,25401],{"__ignoreMap":40},[45,25402,25403,25406,25409],{"class":47,"line":48},[45,25404,25405],{"class":2046},"rm",[45,25407,25408],{"class":257}," -rf",[45,25410,25411],{"class":313}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[10,25413,25414],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[30,25416,25418],{"id":25417},"_63-回放指定-episode","6.3 回放指定 episode",[35,25420,25422],{"className":23905,"code":25421,"language":23907,"meta":40,"style":40},"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",[42,25423,25424,25431,25437,25443,25449,25457],{"__ignoreMap":40},[45,25425,25426,25429],{"class":47,"line":48},[45,25427,25428],{"class":2046},"lerobot-replay",[45,25430,24761],{"class":257},[45,25432,25433,25435],{"class":47,"line":125},[45,25434,24793],{"class":257},[45,25436,24761],{"class":257},[45,25438,25439,25441],{"class":47,"line":1262},[45,25440,24871],{"class":257},[45,25442,24761],{"class":257},[45,25444,25445,25447],{"class":47,"line":1277},[45,25446,24931],{"class":257},[45,25448,24761],{"class":257},[45,25450,25451,25453,25455],{"class":47,"line":1283},[45,25452,25351],{"class":257},[45,25454,25354],{"class":313},[45,25456,24761],{"class":257},[45,25458,25459],{"class":47,"line":1297},[45,25460,25461],{"class":257},"  --dataset.episode=0\n",[121,25463,25464],{},"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":40,"searchDepth":125,"depth":125,"links":25466},[25467,25468,25469],{"id":25281,"depth":125,"text":25282},{"id":25394,"depth":125,"text":25395},{"id":25417,"depth":125,"text":25418},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25272,"description":130},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25476,"title":25477,"body":25478,"description":130,"extension":131,"meta":25606,"navigation":133,"path":25607,"seo":25608,"stem":25609,"__hash__":25610},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25479,"toc":25604},[25480,25484,25547,25550,25597,25602],[20,25481,25483],{"id":25482},"_7-act-模型训练","7. ACT 模型训练",[35,25485,25487],{"className":23905,"code":25486,"language":23907,"meta":40,"style":40},"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",[42,25488,25489,25496,25504,25511,25518,25525,25532,25539],{"__ignoreMap":40},[45,25490,25491,25494],{"class":47,"line":48},[45,25492,25493],{"class":2046},"lerobot-train",[45,25495,24761],{"class":257},[45,25497,25498,25500,25502],{"class":47,"line":125},[45,25499,25351],{"class":257},[45,25501,25354],{"class":313},[45,25503,24761],{"class":257},[45,25505,25506,25509],{"class":47,"line":1262},[45,25507,25508],{"class":257},"  --policy.type=act",[45,25510,24761],{"class":257},[45,25512,25513,25516],{"class":47,"line":1277},[45,25514,25515],{"class":257},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[45,25517,24761],{"class":257},[45,25519,25520,25523],{"class":47,"line":1283},[45,25521,25522],{"class":257},"  --job_name=act_so101_test",[45,25524,24761],{"class":257},[45,25526,25527,25530],{"class":47,"line":1297},[45,25528,25529],{"class":257},"  --policy.device=cuda",[45,25531,24761],{"class":257},[45,25533,25534,25537],{"class":47,"line":1303},[45,25535,25536],{"class":257},"  --wandb.enable=false",[45,25538,24761],{"class":257},[45,25540,25541,25544],{"class":47,"line":1394},[45,25542,25543],{"class":257},"  --policy.repo_id=",[45,25545,25546],{"class":313},"\"Embodied-AI-6\u002Flerobot_new\"\n",[10,25548,25549],{},"参数说明：",[1214,25551,25552,25558,25564,25570,25576,25585,25591],{},[162,25553,25554,25557],{},[42,25555,25556],{},"--dataset.repo_id","：训练数据集仓库。",[162,25559,25560,25563],{},[42,25561,25562],{},"--policy.type=act","：策略模型类型为 ACT。",[162,25565,25566,25569],{},[42,25567,25568],{},"--output_dir","：本地训练输出目录。",[162,25571,25572,25575],{},[42,25573,25574],{},"--job_name","：训练任务名称。",[162,25577,25578,25581,25582,24645],{},[42,25579,25580],{},"--policy.device","：训练设备（如 ",[42,25583,25584],{},"cuda",[162,25586,25587,25590],{},[42,25588,25589],{},"--wandb.enable","：是否启用 WandB 可视化。",[162,25592,25593,25596],{},[42,25594,25595],{},"--policy.repo_id","：训练后模型推送目标仓库。",[10,25598,25599],{},[1545,25600],{"alt":40,"src":25601},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[121,25603,25464],{},{"title":40,"searchDepth":125,"depth":125,"links":25605},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25477,"description":130},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25612,"title":25613,"body":25614,"description":130,"extension":131,"meta":25701,"navigation":133,"path":25702,"seo":25703,"stem":25704,"__hash__":25705},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25615,"toc":25699},[25616,25619,25622,25689,25697],[20,25617,25613],{"id":25618},"_8-策略部署与自动采集",[10,25620,25621],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[35,25623,25625],{"className":23905,"code":25624,"language":23907,"meta":40,"style":40},"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",[42,25626,25627,25633,25639,25645,25653,25659,25666,25674,25682],{"__ignoreMap":40},[45,25628,25629,25631],{"class":47,"line":48},[45,25630,25292],{"class":2046},[45,25632,24761],{"class":257},[45,25634,25635,25637],{"class":47,"line":125},[45,25636,24793],{"class":257},[45,25638,24761],{"class":257},[45,25640,25641,25643],{"class":47,"line":1262},[45,25642,24871],{"class":257},[45,25644,24761],{"class":257},[45,25646,25647,25649,25651],{"class":47,"line":1277},[45,25648,25000],{"class":257},[45,25650,25319],{"class":313},[45,25652,24761],{"class":257},[45,25654,25655,25657],{"class":47,"line":1283},[45,25656,24931],{"class":257},[45,25658,24761],{"class":257},[45,25660,25661,25664],{"class":47,"line":1297},[45,25662,25663],{"class":257},"  --display_data=false",[45,25665,24761],{"class":257},[45,25667,25668,25670,25672],{"class":47,"line":1303},[45,25669,25351],{"class":257},[45,25671,25354],{"class":313},[45,25673,24761],{"class":257},[45,25675,25676,25678,25680],{"class":47,"line":1394},[45,25677,25368],{"class":257},[45,25679,25371],{"class":313},[45,25681,24761],{"class":257},[45,25683,25684,25687],{"class":47,"line":1400},[45,25685,25686],{"class":257},"  --policy.path=",[45,25688,25546],{"class":313},[1214,25690,25691],{},[162,25692,25693,25696],{},[42,25694,25695],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[121,25698,25464],{},{"title":40,"searchDepth":125,"depth":125,"links":25700},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25613,"description":130},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25707,"title":25708,"body":25709,"description":130,"extension":131,"meta":25738,"navigation":133,"path":25739,"seo":25740,"stem":25741,"__hash__":25742},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25710,"toc":25736},[25711,25715,25718,25724,25727,25733],[20,25712,25714],{"id":25713},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[10,25716,25717],{},"项目地址：",[10,25719,25720],{},[13,25721,25722],{"href":25722,"rel":25723},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[17],[10,25725,25726],{},"参考教程：",[10,25728,25729],{},[13,25730,25731],{"href":25731,"rel":25732},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[17],[10,25734,25735],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":40,"searchDepth":125,"depth":125,"links":25737},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25708,"description":130},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25744,"title":25745,"body":25746,"description":25750,"extension":131,"meta":25751,"navigation":133,"path":25752,"seo":25753,"stem":25754,"__hash__":25755},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25747,"toc":25748},[],{"title":40,"searchDepth":125,"depth":125,"links":25749},[],"act复现",{"category":23461},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25745,"description":25750},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25757,"title":25758,"body":25759,"description":40,"extension":131,"meta":26061,"navigation":133,"path":26062,"seo":26063,"stem":26064,"__hash__":26065},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25760,"toc":26053},[25761,25764,25768,25778,25785,25792,25795,25802,25805,25808,25812,25824,25828,25874,25877,25880,25883,25886,25889,25893,25931,25937,25941,25995,26000,26003,26006,26011,26014,26019,26022,26025,26029,26032,26035,26039],[20,25762,25758],{"id":25763},"_1简介",[176,25765,25767],{"id":25766},"_11什么是-docker","1.1什么是 Docker？",[10,25769,25770,25771,25774,25775],{},"Docker 是一个开源的 ",[358,25772,25773],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[358,25776,25777],{},"一次构建，到处运行。",[10,25779,25780,25781,25784],{},"“ ",[358,25782,25783],{},"一次构建，到处运行"," ”也就是说：",[159,25786,25787],{},[162,25788,25789],{},[358,25790,25791],{},"之前：",[10,25793,25794],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[159,25796,25797],{},[162,25798,25799],{},[358,25800,25801],{},"使用docker后：",[10,25803,25804],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[10,25806,25807],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[176,25809,25811],{"id":25810},"_12它是怎么工作的","1.2.它是怎么工作的？",[1214,25813,25814,25817],{},[162,25815,25816],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[162,25818,25819,25820,25823],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[358,25821,25822],{},"无论在哪运行都一样稳定"," 。",[176,25825,25827],{"id":25826},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[346,25829,25830,25840],{},[349,25831,25832],{},[352,25833,25834,25837],{},[355,25835,25836],{"align":23819},"概念",[355,25838,25839],{"align":23819},"解释",[393,25841,25842,25850,25858,25866],{},[352,25843,25844,25847],{},[398,25845,25846],{"align":23819},"镜像",[398,25848,25849],{"align":23819},"Image，运行容器的模板，像是一个应用快照",[352,25851,25852,25855],{},[398,25853,25854],{"align":23819},"容器",[398,25856,25857],{"align":23819},"Container，运行中的镜像实例，有自己的文件系统、网络等",[352,25859,25860,25863],{},[398,25861,25862],{"align":23819},"Dockerfile",[398,25864,25865],{"align":23819},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[352,25867,25868,25871],{},[398,25869,25870],{"align":23819},"仓库",[398,25872,25873],{"align":23819},"Registry，存放镜像的地方，比如 Docker Hub",[10,25875,25876],{},"抽象化理解:",[10,25878,25879],{},"Docker镜像≈C++类",[10,25881,25882],{},"Docker容器≈C++类实例(即对象)",[10,25884,25885],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[10,25887,25888],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[176,25890,25892],{"id":25891},"_14类比理解","1.4.类比理解",[346,25894,25895,25905],{},[349,25896,25897],{},[352,25898,25899,25902],{},[355,25900,25901],{"align":23819},"传统部署",[355,25903,25904],{"align":23819},"Docker部署",[393,25906,25907,25915,25923],{},[352,25908,25909,25912],{},[398,25910,25911],{"align":23819},"手动安装依赖、调试版本不一致问题",[398,25913,25914],{"align":23819},"一次打包环境和代码",[352,25916,25917,25920],{},[398,25918,25919],{"align":23819},"程序“裸奔”跑在系统上",[398,25921,25922],{"align":23819},"程序“穿着容器”隔离运行",[352,25924,25925,25928],{},[398,25926,25927],{"align":23819},"容易“在我电脑上能跑”",[398,25929,25930],{"align":23819},"保证“无论在哪都能跑”",[10,25932,25933,25934],{},"就像快递包裹： ",[358,25935,25936],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[176,25938,25940],{"id":25939},"_15docker-的核心优势","1.5.Docker 的核心优势",[346,25942,25943,25953],{},[349,25944,25945],{},[352,25946,25947,25950],{},[355,25948,25949],{"align":23819},"优势",[355,25951,25952],{"align":23819},"说明",[393,25954,25955,25963,25971,25979,25987],{},[352,25956,25957,25960],{},[398,25958,25959],{"align":23819},"轻量级",[398,25961,25962],{"align":23819},"基于系统内核共享，启动速度快，占资源少",[352,25964,25965,25968],{},[398,25966,25967],{"align":23819},"跨平台",[398,25969,25970],{"align":23819},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[352,25972,25973,25976],{},[398,25974,25975],{"align":23819},"易于迁移部署",[398,25977,25978],{"align":23819},"应用和环境一起封装，不怕依赖不一致",[352,25980,25981,25984],{},[398,25982,25983],{"align":23819},"易于版本控制",[398,25985,25986],{"align":23819},"镜像版本可控，支持回滚",[352,25988,25989,25992],{},[398,25990,25991],{"align":23819},"生态丰富",[398,25993,25994],{"align":23819},"Docker Hub 上有成千上万的现成镜像可用",[159,25996,25997],{},[162,25998,25999],{},"在Linux上可以几乎实现无性能损失。",[10,26001,26002],{},"docker里的发行版和本机共用Linux内核。",[10,26004,26005],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[159,26007,26008],{},[162,26009,26010],{},"可以快速部署在绝大多数Linux发行版",[10,26012,26013],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[159,26015,26016],{},[162,26017,26018],{},"配置环境简单",[10,26020,26021],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[10,26023,26024],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[159,26026,26027],{},[162,26028,25991],{},[10,26030,26031],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[10,26033,26034],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[176,26036,26038],{"id":26037},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1214,26040,26041,26044,26047,26050],{},[162,26042,26043],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[162,26045,26046],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[162,26048,26049],{},"微服务架构：每个服务一个容器，灵活组合",[162,26051,26052],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":40,"searchDepth":125,"depth":125,"links":26054},[26055,26056,26057,26058,26059,26060],{"id":25766,"depth":1262,"text":25767},{"id":25810,"depth":1262,"text":25811},{"id":25826,"depth":1262,"text":25827},{"id":25891,"depth":1262,"text":25892},{"id":25939,"depth":1262,"text":25940},{"id":26037,"depth":1262,"text":26038},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25758,"description":40},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26067,"title":26068,"body":26069,"description":40,"extension":131,"meta":26802,"navigation":133,"path":26803,"seo":26804,"stem":26805,"__hash__":26806},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26070,"toc":26797},[26071,26074,26078,26081,26084,26090,26096,26100,26109,26112,26169,26172,26223,26226,26309,26312,26349,26353,26364,26377,26384,26387,26467,26470,26520,26523,26546,26550,26557,26560,26576,26582,26585,26601,26607,26610,26626,26640,26646,26666,26672,26675,26687,26693,26696,26710,26716,26719,26739,26744,26747,26750,26754,26757,26760,26763,26770,26773,26776,26779,26784,26789,26794],[20,26072,26068],{"id":26073},"_2安装docker",[176,26075,26077],{"id":26076},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[10,26079,26080],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[10,26082,26083],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[10,26085,26086],{},[13,26087,26088],{"href":26088,"rel":26089},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[17],[10,26091,26092],{},[13,26093,26094],{"href":26094,"rel":26095},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[17],[22081,26097,26099],{"id":26098},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[10,26101,26102,26103,26108],{},"以下内容根据 ",[13,26104,26107],{"href":26105,"rel":26106},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[17],"官方文档"," 修改而来。",[10,26110,26111],{},"如果你过去安装过 docker，先删掉：",[35,26113,26115],{"className":23905,"code":26114,"language":23907,"meta":40,"style":40},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[42,26116,26117],{"__ignoreMap":40},[45,26118,26119,26121,26124,26127,26130,26133,26136,26139,26142,26145,26148,26151,26154,26157,26160,26163,26166],{"class":47,"line":48},[45,26120,3108],{"class":93},[45,26122,26123],{"class":51}," pkg ",[45,26125,26126],{"class":93},"in",[45,26128,26129],{"class":313}," docker.io",[45,26131,26132],{"class":313}," docker-doc",[45,26134,26135],{"class":313}," docker-compose",[45,26137,26138],{"class":313}," docker-compose-v2",[45,26140,26141],{"class":313}," podman-docker",[45,26143,26144],{"class":313}," containerd",[45,26146,26147],{"class":313}," runc",[45,26149,26150],{"class":51},"; ",[45,26152,26153],{"class":93},"do",[45,26155,26156],{"class":2046}," sudo",[45,26158,26159],{"class":313}," apt-get",[45,26161,26162],{"class":313}," remove",[45,26164,26165],{"class":51}," $pkg; ",[45,26167,26168],{"class":93},"done\n",[10,26170,26171],{},"首先安装依赖和GPG：",[35,26173,26177],{"className":26174,"code":26175,"language":26176,"meta":40,"style":40},"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",[42,26178,26179,26184,26189,26194,26199,26204,26209,26213,26218],{"__ignoreMap":40},[45,26180,26181],{"class":47,"line":48},[45,26182,26183],{},"# Add Docker's official GPG key:\n",[45,26185,26186],{"class":47,"line":125},[45,26187,26188],{},"sudo apt-get update\n",[45,26190,26191],{"class":47,"line":1262},[45,26192,26193],{},"sudo apt-get install ca-certificates curl\n",[45,26195,26196],{"class":47,"line":1277},[45,26197,26198],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[45,26200,26201],{"class":47,"line":1283},[45,26202,26203],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[45,26205,26206],{"class":47,"line":1297},[45,26207,26208],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[45,26210,26211],{"class":47,"line":1303},[45,26212,2483],{"emptyLinePlaceholder":133},[45,26214,26215],{"class":47,"line":1394},[45,26216,26217],{},"# 如果上面这行报错就弄下面这行\n",[45,26219,26220],{"class":47,"line":1400},[45,26221,26222],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[10,26224,26225],{},"信任 Docker 的 GPG 公钥并添加仓库：",[35,26227,26229],{"className":23905,"code":26228,"language":23907,"meta":40,"style":40},"# 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",[42,26230,26231,26236,26242,26259,26292],{"__ignoreMap":40},[45,26232,26233],{"class":47,"line":48},[45,26234,26235],{"class":267},"# Add the repository to Apt sources:\n",[45,26237,26238,26240],{"class":47,"line":125},[45,26239,25208],{"class":257},[45,26241,24761],{"class":257},[45,26243,26244,26247,26250,26253,26256],{"class":47,"line":1262},[45,26245,26246],{"class":313},"  \"deb [arch=$(",[45,26248,26249],{"class":2046},"dpkg",[45,26251,26252],{"class":257}," --print-architecture",[45,26254,26255],{"class":313},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[45,26257,26258],{"class":257},"\\\n",[45,26260,26261,26264,26266,26268,26271,26274,26276,26278,26281,26283,26285,26288,26290],{"class":47,"line":1277},[45,26262,26263],{"class":313},"  \"",[45,26265,25182],{"class":51},[45,26267,765],{"class":257},[45,26269,26270],{"class":313}," \u002Fetc\u002Fos-release",[45,26272,26273],{"class":51}," && ",[45,26275,25208],{"class":257},[45,26277,9807],{"class":313},[45,26279,26280],{"class":51},"$VERSION_CODENAME",[45,26282,459],{"class":313},[45,26284,637],{"class":51},[45,26286,26287],{"class":313},"\" stable\"",[45,26289,25192],{"class":93},[45,26291,24761],{"class":257},[45,26293,26294,26297,26300,26303,26306],{"class":47,"line":1283},[45,26295,26296],{"class":2046},"  sudo",[45,26298,26299],{"class":313}," tee",[45,26301,26302],{"class":313}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[45,26304,26305],{"class":93}," >",[45,26307,26308],{"class":313}," \u002Fdev\u002Fnull\n",[10,26310,26311],{},"最后安装",[35,26313,26315],{"className":23905,"code":26314,"language":23907,"meta":40,"style":40},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[42,26316,26317,26326],{"__ignoreMap":40},[45,26318,26319,26321,26323],{"class":47,"line":48},[45,26320,24659],{"class":2046},[45,26322,26159],{"class":313},[45,26324,26325],{"class":313}," update\n",[45,26327,26328,26330,26332,26334,26337,26340,26343,26346],{"class":47,"line":125},[45,26329,24659],{"class":2046},[45,26331,26159],{"class":313},[45,26333,23917],{"class":313},[45,26335,26336],{"class":313}," docker-ce",[45,26338,26339],{"class":313}," docker-ce-cli",[45,26341,26342],{"class":313}," containerd.io",[45,26344,26345],{"class":313}," docker-buildx-plugin",[45,26347,26348],{"class":313}," docker-compose-plugin\n",[22081,26350,26352],{"id":26351},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[10,26354,26355,26356,26359,26360,26363],{},"查看自己自己包管理工具版本（dnf是 ",[358,26357,26358],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[358,26361,26362],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[35,26365,26367],{"className":23905,"code":26366,"language":23907,"meta":40,"style":40},"dnf --version\n",[42,26368,26369],{"__ignoreMap":40},[45,26370,26371,26374],{"class":47,"line":48},[45,26372,26373],{"class":2046},"dnf",[45,26375,26376],{"class":257}," --version\n",[10,26378,26102,26379,26383],{},[13,26380,26107],{"href":26381,"rel":26382},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[17]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[10,26385,26386],{},"如果你之前安装过 docker，请先删掉",[35,26388,26390],{"className":23905,"code":26389,"language":23907,"meta":40,"style":40},"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",[42,26391,26392,26406,26413,26420,26427,26434,26441,26448,26455,26462],{"__ignoreMap":40},[45,26393,26394,26396,26399,26401,26404],{"class":47,"line":48},[45,26395,24659],{"class":2046},[45,26397,26398],{"class":313}," dnf",[45,26400,26162],{"class":313},[45,26402,26403],{"class":313}," docker",[45,26405,24761],{"class":257},[45,26407,26408,26411],{"class":47,"line":125},[45,26409,26410],{"class":313},"                  docker-client",[45,26412,24761],{"class":257},[45,26414,26415,26418],{"class":47,"line":1262},[45,26416,26417],{"class":313},"                  docker-client-latest",[45,26419,24761],{"class":257},[45,26421,26422,26425],{"class":47,"line":1277},[45,26423,26424],{"class":313},"                  docker-common",[45,26426,24761],{"class":257},[45,26428,26429,26432],{"class":47,"line":1283},[45,26430,26431],{"class":313},"                  docker-latest",[45,26433,24761],{"class":257},[45,26435,26436,26439],{"class":47,"line":1297},[45,26437,26438],{"class":313},"                  docker-latest-logrotate",[45,26440,24761],{"class":257},[45,26442,26443,26446],{"class":47,"line":1303},[45,26444,26445],{"class":313},"                  docker-logrotate",[45,26447,24761],{"class":257},[45,26449,26450,26453],{"class":47,"line":1394},[45,26451,26452],{"class":313},"                  docker-selinux",[45,26454,24761],{"class":257},[45,26456,26457,26460],{"class":47,"line":1400},[45,26458,26459],{"class":313},"                  docker-engine-selinux",[45,26461,24761],{"class":257},[45,26463,26464],{"class":47,"line":1412},[45,26465,26466],{"class":313},"                  docker-engine\n",[10,26468,26469],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[35,26471,26473],{"className":23905,"code":26472,"language":23907,"meta":40,"style":40},"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",[42,26474,26475,26489,26504],{"__ignoreMap":40},[45,26476,26477,26479,26481,26484,26486],{"class":47,"line":48},[45,26478,24659],{"class":2046},[45,26480,26398],{"class":313},[45,26482,26483],{"class":257}," -y",[45,26485,23917],{"class":313},[45,26487,26488],{"class":313}," dnf-plugins-core\n",[45,26490,26491,26493,26495,26498,26501],{"class":47,"line":125},[45,26492,24659],{"class":2046},[45,26494,26398],{"class":313},[45,26496,26497],{"class":313}," config-manager",[45,26499,26500],{"class":313}," addrepo",[45,26502,26503],{"class":257}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[45,26505,26506,26508,26511,26514,26517],{"class":47,"line":1262},[45,26507,24659],{"class":2046},[45,26509,26510],{"class":313}," sed",[45,26512,26513],{"class":257}," -i",[45,26515,26516],{"class":313}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[45,26518,26519],{"class":313}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[10,26521,26522],{},"最后安装：",[35,26524,26526],{"className":23905,"code":26525,"language":23907,"meta":40,"style":40},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[42,26527,26528],{"__ignoreMap":40},[45,26529,26530,26532,26534,26536,26538,26540,26542,26544],{"class":47,"line":48},[45,26531,24659],{"class":2046},[45,26533,26398],{"class":313},[45,26535,23917],{"class":313},[45,26537,26336],{"class":313},[45,26539,26339],{"class":313},[45,26541,26342],{"class":313},[45,26543,26345],{"class":313},[45,26545,26348],{"class":313},[176,26547,26549],{"id":26548},"_22配置环境","2.2.配置环境",[22081,26551,26553,26556],{"id":26552},"_221检查-docker-服务状态",[358,26554,26555],{},"2.2.1.检查 Docker 服务状态"," ：",[10,26558,26559],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[35,26561,26563],{"className":23905,"code":26562,"language":23907,"meta":40,"style":40},"systemctl status docker\n",[42,26564,26565],{"__ignoreMap":40},[45,26566,26567,26570,26573],{"class":47,"line":48},[45,26568,26569],{"class":2046},"systemctl",[45,26571,26572],{"class":313}," status",[45,26574,26575],{"class":313}," docker\n",[22081,26577,26579,26556],{"id":26578},"_222启动-docker-服务",[358,26580,26581],{},"2.2.2.启动 Docker 服务",[10,26583,26584],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[35,26586,26588],{"className":23905,"code":26587,"language":23907,"meta":40,"style":40},"sudo systemctl start docker\n",[42,26589,26590],{"__ignoreMap":40},[45,26591,26592,26594,26597,26599],{"class":47,"line":48},[45,26593,24659],{"class":2046},[45,26595,26596],{"class":313}," systemctl",[45,26598,4267],{"class":313},[45,26600,26575],{"class":313},[22081,26602,26604,26556],{"id":26603},"_223设置-docker-开机自启",[358,26605,26606],{},"2.2.3.设置 Docker 开机自启",[10,26608,26609],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[35,26611,26613],{"className":23905,"code":26612,"language":23907,"meta":40,"style":40},"sudo systemctl enable docker\n",[42,26614,26615],{"__ignoreMap":40},[45,26616,26617,26619,26621,26624],{"class":47,"line":48},[45,26618,24659],{"class":2046},[45,26620,26596],{"class":313},[45,26622,26623],{"class":313}," enable",[45,26625,26575],{"class":313},[22081,26627,26629,13878,26632,13878,26637,26556],{"id":26628},"_224将用户添加到-docker-组",[358,26630,26631],{},"2.2.4.将用户添加到",[358,26633,26634],{},[42,26635,26636],{},"docker",[358,26638,26639],{},"组",[10,26641,26642,26643,26645],{},"使用以下命令将当前用户添加到 ",[42,26644,26636],{}," 组：",[35,26647,26649],{"className":23905,"code":26648,"language":23907,"meta":40,"style":40},"sudo usermod -aG docker $USER\n",[42,26650,26651],{"__ignoreMap":40},[45,26652,26653,26655,26658,26661,26663],{"class":47,"line":48},[45,26654,24659],{"class":2046},[45,26656,26657],{"class":313}," usermod",[45,26659,26660],{"class":257}," -aG",[45,26662,26403],{"class":313},[45,26664,26665],{"class":51}," $USER\n",[22081,26667,26669,26556],{"id":26668},"_225退出并重新登录",[358,26670,26671],{},"2.2.5.退出并重新登录",[10,26673,26674],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[35,26676,26678],{"className":23905,"code":26677,"language":23907,"meta":40,"style":40},"newgrp docker\n",[42,26679,26680],{"__ignoreMap":40},[45,26681,26682,26685],{"class":47,"line":48},[45,26683,26684],{"class":2046},"newgrp",[45,26686,26575],{"class":313},[22081,26688,26690,26556],{"id":26689},"_226重新启动-docker-服务如果需要",[358,26691,26692],{},"2.2.6.重新启动 Docker 服务（如果需要）",[10,26694,26695],{},"确保 Docker 服务正在运行，可以使用以下命令：",[35,26697,26698],{"className":23905,"code":26587,"language":23907,"meta":40,"style":40},[42,26699,26700],{"__ignoreMap":40},[45,26701,26702,26704,26706,26708],{"class":47,"line":48},[45,26703,24659],{"class":2046},[45,26705,26596],{"class":313},[45,26707,4267],{"class":313},[45,26709,26575],{"class":313},[22081,26711,26713,26556],{"id":26712},"_227重启电脑后检查-docker-服务状态",[358,26714,26715],{},"2.2.7.重启电脑后检查 Docker 服务状态",[10,26717,26718],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[35,26720,26722],{"className":23905,"code":26721,"language":23907,"meta":40,"style":40},"sudo reboot\nsystemctl status docker\n",[42,26723,26724,26731],{"__ignoreMap":40},[45,26725,26726,26728],{"class":47,"line":48},[45,26727,24659],{"class":2046},[45,26729,26730],{"class":313}," reboot\n",[45,26732,26733,26735,26737],{"class":47,"line":125},[45,26734,26569],{"class":2046},[45,26736,26572],{"class":313},[45,26738,26575],{"class":313},[10,26740,26741],{},[1545,26742],{"alt":40,"src":26743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[10,26745,26746],{},"第三行显示enabled说明开机自启动成功",[10,26748,26749],{},"按q退出",[176,26751,26753],{"id":26752},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[10,26755,26756],{},"优先使用linux来使用docker是比较好的",[10,26758,26759],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[10,26761,26762],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[10,26764,26765,26766],{},"官方下载安装:",[13,26767,26768],{"href":26768,"rel":26769},"https:\u002F\u002Fwww.docker.com\u002F",[17],[10,26771,26772],{},"Windows的Docker显卡直通与USB直通:",[10,26774,26775],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[10,26777,26778],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[10,26780,26781],{},[1545,26782],{"alt":40,"src":26783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[10,26785,26786],{},[1545,26787],{"alt":40,"src":26788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[10,26790,26791],{},[1545,26792],{"alt":40,"src":26793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[121,26795,26796],{},"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":40,"searchDepth":125,"depth":125,"links":26798},[26799,26800,26801],{"id":26076,"depth":1262,"text":26077},{"id":26548,"depth":1262,"text":26549},{"id":26752,"depth":1262,"text":26753},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26068,"description":40},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26808,"title":26809,"body":26810,"description":26817,"extension":131,"meta":27510,"navigation":133,"path":27511,"seo":27512,"stem":27513,"__hash__":27514},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26811,"toc":27504},[26812,26815,26818,26822,26827,26832,26835,26863,26868,26877,26880,26885,26889,26896,26901,26907,26911,26914,26918,26923,27015,27020,27038,27043,27064,27069,27085,27089,27094,27123,27128,27174,27179,27223,27231,27248,27253,27269,27274,27288,27291,27294,27297,27300,27329,27332,27337,27341,27344,27347,27353,27356,27359,27362,27424,27431,27436,27439,27457,27461,27464,27481,27484,27487,27501],[20,26813,26809],{"id":26814},"_3docker直通",[10,26816,26817],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[176,26819,26821],{"id":26820},"_31usb直通","3.1.USB直通",[10,26823,26824],{},[1545,26825],{"alt":40,"src":26826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[159,26828,26829],{},[162,26830,26831],{},"方法一(不是很推荐新手)：",[10,26833,26834],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[35,26836,26838],{"className":23905,"code":26837,"language":23907,"meta":40,"style":40},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[42,26839,26840,26848,26853],{"__ignoreMap":40},[45,26841,26842,26845],{"class":47,"line":48},[45,26843,26844],{"class":2046},"ls",[45,26846,26847],{"class":313}," \u002Fdev\n",[45,26849,26850],{"class":47,"line":125},[45,26851,26852],{"class":267},"#例如\n",[45,26854,26855,26858,26860],{"class":47,"line":1262},[45,26856,26857],{"class":51},"--device",[45,26859,254],{"class":93},[45,26861,26862],{"class":313},"\u002Fdev\u002Ftty_USB0\n",[159,26864,26865],{"start":125},[162,26866,26867],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[35,26869,26871],{"className":23905,"code":26870,"language":23907,"meta":40,"style":40},"--privileged\n",[42,26872,26873],{"__ignoreMap":40},[45,26874,26875],{"class":47,"line":48},[45,26876,26870],{"class":2046},[10,26878,26879],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[10,26881,26882],{},[1545,26883],{"alt":40,"src":26884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[176,26886,26888],{"id":26887},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[10,26890,26891,26892,26895],{},"NVIDIA Container Toolkit使用户 ",[358,26893,26894],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[10,26897,26898],{},[1545,26899],{"alt":40,"src":26900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[10,26902,26903],{},[13,26904,26905],{"href":26905,"rel":26906},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[17],[22081,26908,26910],{"id":26909},"_321安装","3.2.1.安装",[10,26912,26913],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22993,26915,26917],{"id":26916},"_3211ubuntu","3.2.1.1.Ubuntu",[159,26919,26920],{},[162,26921,26922],{},"配置存储库 并更新",[35,26924,26926],{"className":23905,"code":26925,"language":23907,"meta":40,"style":40},"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",[42,26927,26928,26957,26977,26989,27001,27007],{"__ignoreMap":40},[45,26929,26930,26933,26936,26939,26941,26943,26946,26949,26952,26955],{"class":47,"line":48},[45,26931,26932],{"class":2046},"curl",[45,26934,26935],{"class":257}," -fsSL",[45,26937,26938],{"class":313}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[45,26940,25192],{"class":93},[45,26942,26156],{"class":2046},[45,26944,26945],{"class":313}," gpg",[45,26947,26948],{"class":257}," --dearmor",[45,26950,26951],{"class":257}," -o",[45,26953,26954],{"class":313}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[45,26956,24761],{"class":257},[45,26958,26959,26962,26964,26967,26970,26973,26975],{"class":47,"line":125},[45,26960,26961],{"class":51},"  && ",[45,26963,26932],{"class":2046},[45,26965,26966],{"class":257}," -s",[45,26968,26969],{"class":257}," -L",[45,26971,26972],{"class":313}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[45,26974,25192],{"class":93},[45,26976,24761],{"class":257},[45,26978,26979,26982,26985,26987],{"class":47,"line":1262},[45,26980,26981],{"class":2046},"    sed",[45,26983,26984],{"class":313}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[45,26986,25192],{"class":93},[45,26988,24761],{"class":257},[45,26990,26991,26994,26996,26999],{"class":47,"line":1277},[45,26992,26993],{"class":2046},"    sudo",[45,26995,26299],{"class":313},[45,26997,26998],{"class":313}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[45,27000,24761],{"class":257},[45,27002,27003,27005],{"class":47,"line":1283},[45,27004,26961],{"class":51},[45,27006,26258],{"class":257},[45,27008,27009,27011,27013],{"class":47,"line":1297},[45,27010,26993],{"class":2046},[45,27012,26159],{"class":313},[45,27014,26325],{"class":313},[159,27016,27017],{"start":125},[162,27018,27019],{},"安装nvidia-docker2",[35,27021,27023],{"className":23905,"code":27022,"language":23907,"meta":40,"style":40},"sudo apt-get install -y nvidia-docker2\n",[42,27024,27025],{"__ignoreMap":40},[45,27026,27027,27029,27031,27033,27035],{"class":47,"line":48},[45,27028,24659],{"class":2046},[45,27030,26159],{"class":313},[45,27032,23917],{"class":313},[45,27034,26483],{"class":257},[45,27036,27037],{"class":313}," nvidia-docker2\n",[159,27039,27040],{"start":1262},[162,27041,27042],{},"使用nvidia-ctk命令配置container runtime",[35,27044,27046],{"className":23905,"code":27045,"language":23907,"meta":40,"style":40},"sudo nvidia-ctk runtime configure --runtime=docker\n",[42,27047,27048],{"__ignoreMap":40},[45,27049,27050,27052,27055,27058,27061],{"class":47,"line":48},[45,27051,24659],{"class":2046},[45,27053,27054],{"class":313}," nvidia-ctk",[45,27056,27057],{"class":313}," runtime",[45,27059,27060],{"class":313}," configure",[45,27062,27063],{"class":257}," --runtime=docker\n",[159,27065,27066],{"start":1277},[162,27067,27068],{},"重启docker服务:",[35,27070,27072],{"className":23905,"code":27071,"language":23907,"meta":40,"style":40},"sudo systemctl restart docker\n",[42,27073,27074],{"__ignoreMap":40},[45,27075,27076,27078,27080,27083],{"class":47,"line":48},[45,27077,24659],{"class":2046},[45,27079,26596],{"class":313},[45,27081,27082],{"class":313}," restart",[45,27084,26575],{"class":313},[22993,27086,27088],{"id":27087},"_3212fedora","3.2.1.2.Fedora",[159,27090,27091],{},[162,27092,27093],{},"配置存储库",[35,27095,27097],{"className":23905,"code":27096,"language":23907,"meta":40,"style":40},"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",[42,27098,27099,27114],{"__ignoreMap":40},[45,27100,27101,27103,27105,27107,27110,27112],{"class":47,"line":48},[45,27102,26932],{"class":2046},[45,27104,26966],{"class":257},[45,27106,26969],{"class":257},[45,27108,27109],{"class":313}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[45,27111,25192],{"class":93},[45,27113,24761],{"class":257},[45,27115,27116,27118,27120],{"class":47,"line":125},[45,27117,24659],{"class":2046},[45,27119,26299],{"class":313},[45,27121,27122],{"class":313}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[159,27124,27125],{"start":125},[162,27126,27127],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[35,27129,27131],{"className":23905,"code":27130,"language":23907,"meta":40,"style":40},"# 如果是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",[42,27132,27133,27138,27152,27156,27161],{"__ignoreMap":40},[45,27134,27135],{"class":47,"line":48},[45,27136,27137],{"class":267},"# 如果是RHEL或者Rocky（DNF4）\n",[45,27139,27140,27142,27144,27146,27149],{"class":47,"line":125},[45,27141,24659],{"class":2046},[45,27143,26398],{"class":313},[45,27145,26497],{"class":313},[45,27147,27148],{"class":257}," --add-repo",[45,27150,27151],{"class":313}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[45,27153,27154],{"class":47,"line":1262},[45,27155,2483],{"emptyLinePlaceholder":133},[45,27157,27158],{"class":47,"line":1277},[45,27159,27160],{"class":267},"# 如果是Feodra41+（DNF5）\n",[45,27162,27163,27165,27167,27169,27171],{"class":47,"line":1283},[45,27164,24659],{"class":2046},[45,27166,26398],{"class":313},[45,27168,26497],{"class":313},[45,27170,26500],{"class":313},[45,27172,27173],{"class":257}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[159,27175,27176],{"start":1262},[162,27177,27178],{},"安装NVIDIA Container Toolki包",[35,27180,27182],{"className":23905,"code":27181,"language":23907,"meta":40,"style":40},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[42,27183,27184,27189,27202,27206,27211],{"__ignoreMap":40},[45,27185,27186],{"class":47,"line":48},[45,27187,27188],{"class":267},"# 如果是RHEL或者Rocky\n",[45,27190,27191,27193,27195,27197,27199],{"class":47,"line":125},[45,27192,24659],{"class":2046},[45,27194,26398],{"class":313},[45,27196,23917],{"class":313},[45,27198,26483],{"class":257},[45,27200,27201],{"class":313}," nvidia-container-toolkit\n",[45,27203,27204],{"class":47,"line":1262},[45,27205,2483],{"emptyLinePlaceholder":133},[45,27207,27208],{"class":47,"line":1277},[45,27209,27210],{"class":267},"# 如果是Fedora\n",[45,27212,27213,27215,27217,27219,27221],{"class":47,"line":1283},[45,27214,24659],{"class":2046},[45,27216,26398],{"class":313},[45,27218,23917],{"class":313},[45,27220,26483],{"class":257},[45,27222,27201],{"class":313},[159,27224,27225],{"start":1277},[162,27226,27227,27228,27230],{},"安装nvidia-docker2 ： 在Fedora上使用",[42,27229,26373],{},"进行安装",[35,27232,27234],{"className":23905,"code":27233,"language":23907,"meta":40,"style":40},"sudo dnf install -y nvidia-docker2\n",[42,27235,27236],{"__ignoreMap":40},[45,27237,27238,27240,27242,27244,27246],{"class":47,"line":48},[45,27239,24659],{"class":2046},[45,27241,26398],{"class":313},[45,27243,23917],{"class":313},[45,27245,26483],{"class":257},[45,27247,27037],{"class":313},[159,27249,27250],{"start":1283},[162,27251,27252],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[35,27254,27255],{"className":23905,"code":27045,"language":23907,"meta":40,"style":40},[42,27256,27257],{"__ignoreMap":40},[45,27258,27259,27261,27263,27265,27267],{"class":47,"line":48},[45,27260,24659],{"class":2046},[45,27262,27054],{"class":313},[45,27264,27057],{"class":313},[45,27266,27060],{"class":313},[45,27268,27063],{"class":257},[159,27270,27271],{"start":1297},[162,27272,27273],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[35,27275,27276],{"className":23905,"code":27071,"language":23907,"meta":40,"style":40},[42,27277,27278],{"__ignoreMap":40},[45,27279,27280,27282,27284,27286],{"class":47,"line":48},[45,27281,24659],{"class":2046},[45,27283,26596],{"class":313},[45,27285,27082],{"class":313},[45,27287,26575],{"class":313},[10,27289,27290],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[10,27292,27293],{},"方法：",[10,27295,27296],{},"1️⃣nvidia-smi",[10,27298,27299],{},"2️⃣运行nvidia cuda 容器进行测试",[35,27301,27303],{"className":23905,"code":27302,"language":23907,"meta":40,"style":40},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[42,27304,27305],{"__ignoreMap":40},[45,27306,27307,27309,27311,27314,27317,27320,27323,27326],{"class":47,"line":48},[45,27308,24659],{"class":2046},[45,27310,26403],{"class":313},[45,27312,27313],{"class":313}," run",[45,27315,27316],{"class":257}," --rm",[45,27318,27319],{"class":257}," --gpus",[45,27321,27322],{"class":313}," all",[45,27324,27325],{"class":313}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[45,27327,27328],{"class":313}," nvidia-smi\n",[10,27330,27331],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[10,27333,27334],{},[1545,27335],{"alt":40,"src":27336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[176,27338,27340],{"id":27339},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[10,27342,27343],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[10,27345,27346],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[10,27348,27349],{},[13,27350,27351],{"href":27351,"rel":27352},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[17],[10,27354,27355],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[10,27357,27358],{},"我们只需要找到对应的Docker镜像当底包即可。",[10,27360,27361],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[346,27363,27364,27380],{},[349,27365,27366],{},[352,27367,27368,27371,27374,27377],{},[355,27369,27370],{"align":23819},"镜像类型",[355,27372,27373],{"align":23819},"适用场景",[355,27375,27376],{"align":23819},"示例标签",[355,27378,27379],{"align":23819},"大小",[393,27381,27382,27396,27410],{},[352,27383,27384,27387,27390,27393],{},[398,27385,27386],{"align":23819},"base",[398,27388,27389],{"align":23819},"仅需 CUDA 运行时库",[398,27391,27392],{"align":23819},"12.4.0-base-ubuntu22.04",[398,27394,27395],{"align":23819},"~240MB",[352,27397,27398,27401,27404,27407],{},[398,27399,27400],{"align":23819},"runtime",[398,27402,27403],{"align":23819},"部署编译后的应用（含数学库）",[398,27405,27406],{"align":23819},"12.4.0-runtime-ubuntu22.04",[398,27408,27409],{"align":23819},"~2GB",[352,27411,27412,27415,27418,27421],{},[398,27413,27414],{"align":23819},"devel",[398,27416,27417],{"align":23819},"开发环境（含编译工具）",[398,27419,27420],{"align":23819},"12.4.0-devel-ubuntu22.04",[398,27422,27423],{"align":23819},"~3GB",[10,27425,27426,27427,27430],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[42,27428,27429],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[10,27432,27433],{},[1545,27434],{"alt":40,"src":27435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[10,27437,27438],{},"在dockerfile里就可以开头这么写：",[35,27440,27442],{"className":23905,"code":27441,"language":23907,"meta":40,"style":40},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[42,27443,27444,27449],{"__ignoreMap":40},[45,27445,27446],{"class":47,"line":48},[45,27447,27448],{"class":267},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[45,27450,27451,27454],{"class":47,"line":125},[45,27452,27453],{"class":2046},"FROM",[45,27455,27456],{"class":313}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[176,27458,27460],{"id":27459},"_34配置以太网","3.4.配置以太网",[10,27462,27463],{},"指定网络模式",[35,27465,27467],{"className":23905,"code":27466,"language":23907,"meta":40,"style":40},"--net=host \\\n",[42,27468,27469],{"__ignoreMap":40},[45,27470,27471,27474,27476,27479],{"class":47,"line":48},[45,27472,27473],{"class":51},"--net",[45,27475,254],{"class":93},[45,27477,27478],{"class":313},"host",[45,27480,24761],{"class":2046},[10,27482,27483],{},"启动参数里加上这行即可。具体在下方",[10,27485,27486],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1214,27488,27489,27492,27495,27498],{},[162,27490,27491],{},"--net=bridge:默认选项，表示连接到默认的网桥",[162,27493,27494],{},"--net=host:容器使用宿主机的网络",[162,27496,27497],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[162,27499,27500],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[121,27502,27503],{},"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":40,"searchDepth":125,"depth":125,"links":27505},[27506,27507,27508,27509],{"id":26820,"depth":1262,"text":26821},{"id":26887,"depth":1262,"text":26888},{"id":27339,"depth":1262,"text":27340},{"id":27459,"depth":1262,"text":27460},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26809,"description":26817},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27516,"title":27517,"body":27518,"description":27525,"extension":131,"meta":27531,"navigation":133,"path":27532,"seo":27533,"stem":27534,"__hash__":27535},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27519,"toc":27529},[27520,27523,27526],[20,27521,27517],{"id":27522},"_4dockerhub换源",[10,27524,27525],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[10,27527,27528],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":40,"searchDepth":125,"depth":125,"links":27530},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27517,"description":27525},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27537,"title":27538,"body":27539,"description":40,"extension":131,"meta":28551,"navigation":133,"path":28552,"seo":28553,"stem":28554,"__hash__":28555},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27540,"toc":28546},[27541,27544,27548,27554,27558,27561,27901,27904,27907,27910,27915,27920,27923,27926,27929,27932,27951,27954,27965,27971,28153,28163,28179,28442,28444,28469,28484,28493,28543],[20,27542,27538],{"id":27543},"_5docker命令学习",[176,27545,27547],{"id":27546},"_51参考文档","5.1.参考文档",[10,27549,27550],{},[13,27551,27552],{"href":27552,"rel":27553},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[17],[176,27555,27557],{"id":27556},"_52常用命令","5.2.常用命令",[10,27559,27560],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[346,27562,27563,27576],{},[349,27564,27565],{},[352,27566,27567,27570,27573],{},[355,27568,27569],{"align":23819},"命令",[355,27571,27572],{"align":23819},"描述",[355,27574,27575],{"align":23819},"示例",[393,27577,27578,27589,27600,27611,27622,27633,27644,27655,27665,27676,27687,27698,27708,27719,27730,27741,27751,27761,27771,27781,27792,27803,27814,27825,27836,27847,27857,27868,27879,27890],{},[352,27579,27580,27583,27586],{},[398,27581,27582],{"align":23819},"docker run",[398,27584,27585],{"align":23819},"创建并启动一个新的容器。",[398,27587,27588],{"align":23819},"docker run -it ubuntu bash",[352,27590,27591,27594,27597],{},[398,27592,27593],{"align":23819},"docker build",[398,27595,27596],{"align":23819},"通过指定的 Dockerfile 创建一个新的镜像。",[398,27598,27599],{"align":23819},"docker build -t myimage .",[352,27601,27602,27605,27608],{},[398,27603,27604],{"align":23819},"docker pull",[398,27606,27607],{"align":23819},"从 Docker 仓库拉取镜像。",[398,27609,27610],{"align":23819},"docker pull ubuntu",[352,27612,27613,27616,27619],{},[398,27614,27615],{"align":23819},"docker push",[398,27617,27618],{"align":23819},"将本地镜像推送到 Docker 仓库。",[398,27620,27621],{"align":23819},"docker push myimage",[352,27623,27624,27627,27630],{},[398,27625,27626],{"align":23819},"docker stop",[398,27628,27629],{"align":23819},"停止一个正在运行的容器。",[398,27631,27632],{"align":23819},"docker stop container_id",[352,27634,27635,27638,27641],{},[398,27636,27637],{"align":23819},"docker start",[398,27639,27640],{"align":23819},"启动一个已经存在的容器。",[398,27642,27643],{"align":23819},"docker start container_id",[352,27645,27646,27649,27652],{},[398,27647,27648],{"align":23819},"docker restart",[398,27650,27651],{"align":23819},"重新启动容器。",[398,27653,27654],{"align":23819},"docker restart container_id",[352,27656,27657,27660,27663],{},[398,27658,27659],{"align":23819},"docker ps",[398,27661,27662],{"align":23819},"列出当前正在运行的容器。",[398,27664,27659],{"align":23819},[352,27666,27667,27670,27673],{},[398,27668,27669],{"align":23819},"docker rm",[398,27671,27672],{"align":23819},"删除一个或多个停止的容器。",[398,27674,27675],{"align":23819},"docker rm container_id",[352,27677,27678,27681,27684],{},[398,27679,27680],{"align":23819},"docker exec",[398,27682,27683],{"align":23819},"在一个正在运行的容器中执行命令。",[398,27685,27686],{"align":23819},"docker exec -it container_id bash",[352,27688,27689,27692,27695],{},[398,27690,27691],{"align":23819},"docker logs",[398,27693,27694],{"align":23819},"查看容器的日志输出。",[398,27696,27697],{"align":23819},"docker logs container_id",[352,27699,27700,27703,27706],{},[398,27701,27702],{"align":23819},"docker images",[398,27704,27705],{"align":23819},"列出本地所有镜像。",[398,27707,27702],{"align":23819},[352,27709,27710,27713,27716],{},[398,27711,27712],{"align":23819},"docker rmi",[398,27714,27715],{"align":23819},"删除一个或多个镜像。",[398,27717,27718],{"align":23819},"docker rmi myimage",[352,27720,27721,27724,27727],{},[398,27722,27723],{"align":23819},"docker network",[398,27725,27726],{"align":23819},"管理 Docker 网络。",[398,27728,27729],{"align":23819},"docker network ls",[352,27731,27732,27735,27738],{},[398,27733,27734],{"align":23819},"docker volume",[398,27736,27737],{"align":23819},"管理 Docker 数据卷。",[398,27739,27740],{"align":23819},"docker volume ls",[352,27742,27743,27746,27749],{},[398,27744,27745],{"align":23819},"docker-compose up",[398,27747,27748],{"align":23819},"启动 docker-compose.yml 中定义的所有服务。",[398,27750,27745],{"align":23819},[352,27752,27753,27756,27759],{},[398,27754,27755],{"align":23819},"docker-compose down",[398,27757,27758],{"align":23819},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[398,27760,27755],{"align":23819},[352,27762,27763,27766,27769],{},[398,27764,27765],{"align":23819},"docker info",[398,27767,27768],{"align":23819},"显示 Docker 系统的详细信息。",[398,27770,27765],{"align":23819},[352,27772,27773,27776,27779],{},[398,27774,27775],{"align":23819},"docker stats",[398,27777,27778],{"align":23819},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[398,27780,27775],{"align":23819},[352,27782,27783,27786,27789],{},[398,27784,27785],{"align":23819},"docker inspect",[398,27787,27788],{"align":23819},"查看容器或镜像的详细信息（JSON 格式）。",[398,27790,27791],{"align":23819},"docker inspect container_id",[352,27793,27794,27797,27800],{},[398,27795,27796],{"align":23819},"docker save",[398,27798,27799],{"align":23819},"将一个镜像保存为 tar 文件。",[398,27801,27802],{"align":23819},"docker save -o myimage.tar myimage",[352,27804,27805,27808,27811],{},[398,27806,27807],{"align":23819},"docker load",[398,27809,27810],{"align":23819},"从 tar 文件中加载镜像。",[398,27812,27813],{"align":23819},"docker load -i myimage.tar",[352,27815,27816,27819,27822],{},[398,27817,27818],{"align":23819},"docker tag",[398,27820,27821],{"align":23819},"为镜像添加标签（tag）。",[398,27823,27824],{"align":23819},"docker tag myimage myimage:v1",[352,27826,27827,27830,27833],{},[398,27828,27829],{"align":23819},"docker buildx build",[398,27831,27832],{"align":23819},"使用 Buildx 构建多架构镜像。",[398,27834,27835],{"align":23819},"docker buildx build -t myimage .",[352,27837,27838,27841,27844],{},[398,27839,27840],{"align":23819},"docker buildx create",[398,27842,27843],{"align":23819},"创建一个新的 Buildx 构建实例。",[398,27845,27846],{"align":23819},"docker buildx create –use",[352,27848,27849,27852,27855],{},[398,27850,27851],{"align":23819},"docker buildx ls",[398,27853,27854],{"align":23819},"列出所有可用的 Buildx 构建实例。",[398,27856,27851],{"align":23819},[352,27858,27859,27862,27865],{},[398,27860,27861],{"align":23819},"docker buildx use",[398,27863,27864],{"align":23819},"设置当前的 Buildx 构建实例。",[398,27866,27867],{"align":23819},"docker buildx use mybuilder",[352,27869,27870,27873,27876],{},[398,27871,27872],{"align":23819},"docker buildx bake",[398,27874,27875],{"align":23819},"使用 Bake 文件批量构建镜像。",[398,27877,27878],{"align":23819},"docker buildx bake -f bake.hcl",[352,27880,27881,27884,27887],{},[398,27882,27883],{"align":23819},"docker buildx build –push",[398,27885,27886],{"align":23819},"构建镜像并推送到镜像仓库。",[398,27888,27889],{"align":23819},"docker buildx build –push -t myimage .",[352,27891,27892,27895,27898],{},[398,27893,27894],{"align":23819},"docker buildx build –platform",[398,27896,27897],{"align":23819},"构建镜像并为多个平台生成支持。",[398,27899,27900],{"align":23819},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[10,27902,27903],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[10,27905,27906],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[10,27908,27909],{},"docker images 可以查看已经下载的镜像",[10,27911,27912],{},[1545,27913],{"alt":40,"src":27914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[10,27916,27917],{},[358,27918,27919],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[10,27921,27922],{},"docker rmi $(docker images -q) 删除所有的镜像",[10,27924,27925],{},"docker container logs 查看容器日志",[10,27927,27928],{},"docker top 查看容器里的进程",[10,27930,27931],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[35,27933,27935],{"className":23905,"code":27934,"language":23907,"meta":40,"style":40},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[42,27936,27937],{"__ignoreMap":40},[45,27938,27939,27942,27945,27948],{"class":47,"line":48},[45,27940,27941],{"class":2046},"如：docker",[45,27943,27944],{"class":313}," cp",[45,27946,27947],{"class":313}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[45,27949,27950],{"class":313}," \u002Fmydata\u002Fnginx\n",[10,27952,27953],{},"docker run时在启动容器的时候会有几个常用的选项：",[1214,27955,27956,27959,27962],{},[162,27957,27958],{},"-d选项：表示后台运行",[162,27960,27961],{},"-P选项：随机端口映射",[162,27963,27964],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[176,27966,27968],{"id":27967},"_53run命令的参数非常重要",[358,27969,27970],{},"5.3.run命令的参数（非常重要）",[346,27972,27973,27986],{},[349,27974,27975],{},[352,27976,27977,27980,27983],{},[355,27978,27979],{"align":23819},"参数\u002F配置",[355,27981,27982],{"align":23819},"功能说明",[355,27984,27985],{"align":23819},"重要性与参考依据",[393,27987,27988,27999,28010,28021,28032,28043,28054,28065,28076,28087,28098,28109,28120,28131,28142],{},[352,27989,27990,27993,27996],{},[398,27991,27992],{"align":23819},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[398,27994,27995],{"align":23819},"指定容器名称，便于后续管理",[398,27997,27998],{"align":23819},"替代随机生成的容器名。",[352,28000,28001,28004,28007],{},[398,28002,28003],{"align":23819},"–gpus all",[398,28005,28006],{"align":23819},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[398,28008,28009],{"align":23819},"用于CUDA加速等GPU依赖任务。",[352,28011,28012,28015,28018],{},[398,28013,28014],{"align":23819},"-e NVIDIA_DRIVER_CAPABILITIES=all",[398,28016,28017],{"align":23819},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[398,28019,28020],{"align":23819},"确保容器内GPU功能完整67。",[352,28022,28023,28026,28029],{},[398,28024,28025],{"align":23819},"-dit",[398,28027,28028],{"align":23819},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[398,28030,28031],{"align":23819},"允许容器在后台运行并支持交互操作。",[352,28033,28034,28037,28040],{},[398,28035,28036],{"align":23819},"–privileged",[398,28038,28039],{"align":23819},"赋予容器完全主机权限（可访问设备、内核模块等）",[398,28041,28042],{"align":23819},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[352,28044,28045,28048,28051],{},[398,28046,28047],{"align":23819},"–net=host",[398,28049,28050],{"align":23819},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[398,28052,28053],{"align":23819},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[352,28055,28056,28059,28062],{},[398,28057,28058],{"align":23819},"–group-add audio–group-add video–group-add dialout",[398,28060,28061],{"align":23819},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[398,28063,28064],{"align":23819},"避免权限问题（如避免无法调用摄像头、麦克风）。",[352,28066,28067,28070,28073],{},[398,28068,28069],{"align":23819},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[398,28071,28072],{"align":23819},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[398,28074,28075],{"align":23819},"支持容器内运行图形界面应用（如OpenCV可视化）。",[352,28077,28078,28081,28084],{},[398,28079,28080],{"align":23819},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[398,28082,28083],{"align":23819},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[398,28085,28086],{"align":23819},"实现容器内图形显示。",[352,28088,28089,28092,28095],{},[398,28090,28091],{"align":23819},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[398,28093,28094],{"align":23819},"挂载X11认证文件（只读）",[398,28096,28097],{"align":23819},"确保容器有权连接宿主机显示服务。",[352,28099,28100,28103,28106],{},[398,28101,28102],{"align":23819},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[398,28104,28105],{"align":23819},"挂载Wayland显示协议相关目录",[398,28107,28108],{"align":23819},"支持Wayland协议的图形显示。",[352,28110,28111,28114,28117],{},[398,28112,28113],{"align":23819},"–ulimit nofile=1024:524288",[398,28115,28116],{"align":23819},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[398,28118,28119],{"align":23819},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[352,28121,28122,28125,28128],{},[398,28123,28124],{"align":23819},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[398,28126,28127],{"align":23819},"挂载宿主机用户目录到容器内同名路径",[398,28129,28130],{"align":23819},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[352,28132,28133,28136,28139],{},[398,28134,28135],{"align":23819},"-w \u002Fhome\u002Ftungchiahui",[398,28137,28138],{"align":23819},"设置容器启动后的默认工作目录",[398,28140,28141],{"align":23819},"直接进入项目路径，方便执行命令2324。",[352,28143,28144,28147,28150],{},[398,28145,28146],{"align":23819},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[398,28148,28149],{"align":23819},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[398,28151,28152],{"align":23819},"提供预配置的深度学习与机器人开发环境。",[10,28154,28155,28156,28158,28159,28162],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[42,28157,24659],{},"加不加",[42,28160,28161],{},"sudo -E","都无所谓。",[10,28164,28165,28166,28168,28169,28171,28172,28175,28176,28178],{},"用户已经被加到docker组了，不用",[42,28167,24659],{},"也行跑，其次，",[42,28170,24659],{},"运行的话，你的",[42,28173,28174],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[42,28177,28174],{},"更不可能变了。",[35,28180,28182],{"className":23905,"code":28181,"language":23907,"meta":40,"style":40},"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",[42,28183,28184,28197,28207,28217,28229,28236,28243,28250,28260,28269,28278,28292,28304,28316,28325,28335,28344,28359,28392,28419,28430,28437],{"__ignoreMap":40},[45,28185,28186,28188,28190,28192,28195],{"class":47,"line":48},[45,28187,24659],{"class":2046},[45,28189,26403],{"class":313},[45,28191,27313],{"class":313},[45,28193,28194],{"class":257}," --name=ros_opencv_cuda",[45,28196,24761],{"class":257},[45,28198,28199,28202,28205],{"class":47,"line":125},[45,28200,28201],{"class":51},"--gpus ",[45,28203,28204],{"class":313},"all",[45,28206,24761],{"class":257},[45,28208,28209,28212,28215],{"class":47,"line":1262},[45,28210,28211],{"class":51},"-e ",[45,28213,28214],{"class":313},"NVIDIA_DRIVER_CAPABILITIES=all",[45,28216,24761],{"class":257},[45,28218,28219,28221,28224,28227],{"class":47,"line":1277},[45,28220,28211],{"class":51},[45,28222,28223],{"class":313},"DISPLAY=",[45,28225,28226],{"class":51},"$DISPLAY ",[45,28228,26258],{"class":257},[45,28230,28231,28234],{"class":47,"line":1283},[45,28232,28233],{"class":51},"-dit ",[45,28235,26258],{"class":257},[45,28237,28238,28241],{"class":47,"line":1297},[45,28239,28240],{"class":51},"--privileged ",[45,28242,26258],{"class":257},[45,28244,28245,28248],{"class":47,"line":1303},[45,28246,28247],{"class":51},"--net=host ",[45,28249,26258],{"class":257},[45,28251,28252,28255,28258],{"class":47,"line":1394},[45,28253,28254],{"class":51},"--group-add ",[45,28256,28257],{"class":313},"audio",[45,28259,24761],{"class":257},[45,28261,28262,28264,28267],{"class":47,"line":1400},[45,28263,28254],{"class":51},[45,28265,28266],{"class":313},"video",[45,28268,24761],{"class":257},[45,28270,28271,28273,28276],{"class":47,"line":1412},[45,28272,28254],{"class":51},[45,28274,28275],{"class":313},"dialout",[45,28277,24761],{"class":257},[45,28279,28280,28282,28285,28287,28290],{"class":47,"line":1695},[45,28281,28211],{"class":51},[45,28283,28284],{"class":313},"XAUTHORITY=",[45,28286,28174],{"class":51},[45,28288,28289],{"class":313},"\u002F.Xauthority",[45,28291,24761],{"class":257},[45,28293,28294,28296,28299,28302],{"class":47,"line":1700},[45,28295,28211],{"class":51},[45,28297,28298],{"class":313},"WAYLAND_DISPLAY=",[45,28300,28301],{"class":51},"$WAYLAND_DISPLAY ",[45,28303,26258],{"class":257},[45,28305,28306,28308,28311,28314],{"class":47,"line":1706},[45,28307,28211],{"class":51},[45,28309,28310],{"class":313},"XDG_RUNTIME_DIR=",[45,28312,28313],{"class":51},"$XDG_RUNTIME_DIR ",[45,28315,26258],{"class":257},[45,28317,28318,28320,28323],{"class":47,"line":1711},[45,28319,28211],{"class":51},[45,28321,28322],{"class":313},"QT_QPA_PLATFORM=xcb",[45,28324,24761],{"class":257},[45,28326,28327,28330,28333],{"class":47,"line":1725},[45,28328,28329],{"class":51},"-v ",[45,28331,28332],{"class":313},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[45,28334,24761],{"class":257},[45,28336,28337,28339,28342],{"class":47,"line":1730},[45,28338,28329],{"class":51},[45,28340,28341],{"class":313},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[45,28343,24761],{"class":257},[45,28345,28346,28349,28352,28354,28357],{"class":47,"line":1736},[45,28347,28348],{"class":51},"-v $HOME",[45,28350,28351],{"class":313},"\u002F.Xauthority:",[45,28353,28174],{"class":51},[45,28355,28356],{"class":313},"\u002F.Xauthority:ro",[45,28358,24761],{"class":257},[45,28360,28361,28363,28366,28368,28371,28374,28376,28379,28381,28383,28385,28387,28390],{"class":47,"line":1757},[45,28362,28329],{"class":51},[45,28364,28365],{"class":313},"\u002Frun\u002Fuser\u002F",[45,28367,25182],{"class":51},[45,28369,28370],{"class":2046},"id",[45,28372,28373],{"class":257}," -u",[45,28375,637],{"class":51},[45,28377,28378],{"class":313},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[45,28380,25182],{"class":51},[45,28382,28370],{"class":2046},[45,28384,28373],{"class":257},[45,28386,637],{"class":51},[45,28388,28389],{"class":313},"\u002Fwayland-0",[45,28391,24761],{"class":257},[45,28393,28394,28396,28398,28400,28402,28404,28406,28409,28411,28413,28415,28417],{"class":47,"line":1762},[45,28395,28329],{"class":51},[45,28397,28365],{"class":313},[45,28399,25182],{"class":51},[45,28401,28370],{"class":2046},[45,28403,28373],{"class":257},[45,28405,637],{"class":51},[45,28407,28408],{"class":313},":\u002Frun\u002Fuser\u002F",[45,28410,25182],{"class":51},[45,28412,28370],{"class":2046},[45,28414,28373],{"class":257},[45,28416,13797],{"class":51},[45,28418,26258],{"class":257},[45,28420,28421,28423,28425,28428],{"class":47,"line":1776},[45,28422,28348],{"class":51},[45,28424,1066],{"class":313},[45,28426,28427],{"class":51},"$HOME ",[45,28429,26258],{"class":257},[45,28431,28432,28435],{"class":47,"line":1781},[45,28433,28434],{"class":51},"-w $HOME ",[45,28436,26258],{"class":257},[45,28438,28439],{"class":47,"line":1810},[45,28440,28441],{"class":51},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[10,28443,9108],{},[159,28445,28446,28454,28457,28460],{},[162,28447,28448,13878,28450,28453],{},[42,28449,28214],{},[42,28451,28452],{},"--gpus all","没有英伟达显卡请注释。",[162,28455,28456],{},"--name后面请自己为容器起名。",[162,28458,28459],{},"最后一行仓库名称请你自己找对应的镜像填上。",[162,28461,28462,28463,28468],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23636,28464,28465],{},[358,28466,28467],{},"请不要加","。",[35,28470,28472],{"className":23905,"code":28471,"language":23907,"meta":40,"style":40},"--ulimit nofile=1024:524288 \\\n",[42,28473,28474],{"__ignoreMap":40},[45,28475,28476,28479,28482],{"class":47,"line":48},[45,28477,28478],{"class":2046},"--ulimit",[45,28480,28481],{"class":313}," nofile=1024:524288",[45,28483,24761],{"class":257},[10,28485,28486,28487,28492],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23636,28488,28489],{},[358,28490,28491],{},"不建议","**.**",[35,28494,28496],{"className":23905,"code":28495,"language":23907,"meta":40,"style":40},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[42,28497,28498,28525,28534],{"__ignoreMap":40},[45,28499,28500,28503,28506,28508,28510,28512,28514,28516,28518,28521,28523],{"class":47,"line":48},[45,28501,28502],{"class":2046},"--user",[45,28504,28505],{"class":51}," $(",[45,28507,28370],{"class":2046},[45,28509,28373],{"class":257},[45,28511,637],{"class":51},[45,28513,1066],{"class":313},[45,28515,25182],{"class":51},[45,28517,28370],{"class":2046},[45,28519,28520],{"class":257}," -g",[45,28522,13797],{"class":51},[45,28524,26258],{"class":257},[45,28526,28527,28529,28532],{"class":47,"line":125},[45,28528,28329],{"class":51},[45,28530,28531],{"class":313},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[45,28533,24761],{"class":257},[45,28535,28536,28538,28541],{"class":47,"line":1262},[45,28537,28329],{"class":51},[45,28539,28540],{"class":313},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[45,28542,24761],{"class":257},[121,28544,28545],{},"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":40,"searchDepth":125,"depth":125,"links":28547},[28548,28549,28550],{"id":27546,"depth":1262,"text":27547},{"id":27556,"depth":1262,"text":27557},{"id":27967,"depth":1262,"text":27970},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27538,"description":40},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28557,"title":28558,"body":28559,"description":40,"extension":131,"meta":30182,"navigation":133,"path":30183,"seo":30184,"stem":30185,"__hash__":30186},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28560,"toc":30177},[28561,28564,28568,28571,28793,28797,28801,28804,28910,28915,28918,28923,28926,28931,28934,28939,28942,28954,28957,28962,28969,28997,29004,29080,29085,29088,29111,29113,29188,29193,29196,29200,29208,29213,29218,29222,29233,29239,29242,29245,29269,29272,29275,29303,29306,29309,29774,29777,29782,29787,29791,29814,29819,29823,29827,29830,29833,29836,29863,29866,29869,29887,29890,29893,29915,29923,29928,29933,29937,29940,29943,29946,29949,29994,29997,30015,30018,30023,30026,30047,30050,30106,30109,30114,30118,30121,30128,30131,30134,30139,30142,30158,30161,30174],[20,28562,28558],{"id":28563},"_6手动创建docker镜像",[176,28565,28567],{"id":28566},"_61dockerfile","6.1.DockerFile",[10,28569,28570],{},"常用命令：",[346,28572,28573,28584],{},[349,28574,28575],{},[352,28576,28577,28580,28582],{},[355,28578,28579],{"align":23819},"指令",[355,28581,25952],{"align":23819},[355,28583,27575],{"align":23819},[393,28585,28586,28596,28612,28623,28634,28645,28656,28667,28678,28692,28706,28717,28731,28742,28753,28767,28782],{},[352,28587,28588,28590,28593],{},[398,28589,27453],{"align":23819},[398,28591,28592],{"align":23819},"指定基础镜像，是 Dockerfile 的起点",[398,28594,28595],{"align":23819},"FROM ubuntu:22.04",[352,28597,28598,28601,28604],{},[398,28599,28600],{"align":23819},"LABEL",[398,28602,28603],{"align":23819},"添加元数据（如作者、版本等）",[398,28605,28606,28607,28611],{"align":23819},"LABEL maintainer=”",[13,28608,28610],{"href":28609},"mailto:you@example.com","you@example.com","”",[352,28613,28614,28617,28620],{},[398,28615,28616],{"align":23819},"ENV",[398,28618,28619],{"align":23819},"设置环境变量",[398,28621,28622],{"align":23819},"ENV PORT=8080",[352,28624,28625,28628,28631],{},[398,28626,28627],{"align":23819},"ARG",[398,28629,28630],{"align":23819},"构建参数，只在构建期间可用",[398,28632,28633],{"align":23819},"ARG VERSION=1.0",[352,28635,28636,28639,28642],{},[398,28637,28638],{"align":23819},"RUN",[398,28640,28641],{"align":23819},"构建镜像时运行命令",[398,28643,28644],{"align":23819},"RUN apt-get update && apt-get install -y curl",[352,28646,28647,28650,28653],{},[398,28648,28649],{"align":23819},"COPY",[398,28651,28652],{"align":23819},"复制文件到镜像中",[398,28654,28655],{"align":23819},"COPY . \u002Fapp",[352,28657,28658,28661,28664],{},[398,28659,28660],{"align":23819},"ADD",[398,28662,28663],{"align":23819},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[398,28665,28666],{"align":23819},"ADD archive.tar.gz \u002Fdata\u002F",[352,28668,28669,28672,28675],{},[398,28670,28671],{"align":23819},"WORKDIR",[398,28673,28674],{"align":23819},"设置工作目录",[398,28676,28677],{"align":23819},"WORKDIR \u002Fopt",[352,28679,28680,28683,28686],{},[398,28681,28682],{"align":23819},"CMD",[398,28684,28685],{"align":23819},"设置容器启动时默认命令（可被 docker run 覆盖）",[398,28687,28688,28689],{"align":23819},"CMD ",[45,28690,28691],{},"“node”, “index.js”",[352,28693,28694,28697,28700],{},[398,28695,28696],{"align":23819},"ENTRYPOINT",[398,28698,28699],{"align":23819},"设置容器启动时固定命令（通常用于 CLI 工具等）",[398,28701,28702,28703],{"align":23819},"ENTRYPOINT ",[45,28704,28705],{},"“python3”",[352,28707,28708,28711,28714],{},[398,28709,28710],{"align":23819},"EXPOSE",[398,28712,28713],{"align":23819},"声明镜像内服务监听的端口（不会自动映射）",[398,28715,28716],{"align":23819},"EXPOSE 80",[352,28718,28719,28722,28725],{},[398,28720,28721],{"align":23819},"VOLUME",[398,28723,28724],{"align":23819},"声明数据卷挂载点",[398,28726,28727,28728],{"align":23819},"VOLUME ",[45,28729,28730],{},"“\u002Fdata”",[352,28732,28733,28736,28739],{},[398,28734,28735],{"align":23819},"USER",[398,28737,28738],{"align":23819},"设置后续命令执行的用户",[398,28740,28741],{"align":23819},"USER appuser",[352,28743,28744,28747,28750],{},[398,28745,28746],{"align":23819},"ONBUILD",[398,28748,28749],{"align":23819},"当镜像作为其他镜像基础镜像时触发的构建指令",[398,28751,28752],{"align":23819},"ONBUILD COPY . \u002Fsrc",[352,28754,28755,28758,28761],{},[398,28756,28757],{"align":23819},"SHELL",[398,28759,28760],{"align":23819},"更改默认 shell，比如将 sh -c 改为 bash -c",[398,28762,28763,28764],{"align":23819},"SHELL ",[45,28765,28766],{},"“\u002Fbin\u002Fbash”, “-c”",[352,28768,28769,28772,28775],{},[398,28770,28771],{"align":23819},"HEALTHCHECK",[398,28773,28774],{"align":23819},"定义容器运行时的健康检查命令",[398,28776,28777,28778],{"align":23819},"`HEALTHCHECK CMD curl –fail ",[13,28779,28780],{"href":28780,"rel":28781},"http:\u002F\u002Flocalhost:8080",[17],[352,28783,28784,28787,28790],{},[398,28785,28786],{"align":23819},"STOPSIGNAL",[398,28788,28789],{"align":23819},"容器停止时发送的信号",[398,28791,28792],{"align":23819},"STOPSIGNAL SIGKILL",[176,28794,28796],{"id":28795},"_62自己创建容器","6.2.自己创建容器",[22081,28798,28800],{"id":28799},"_621手动创建","6.2.1.手动创建",[10,28802,28803],{},"在x86电脑上编译x86的：",[35,28805,28807],{"className":23905,"code":28806,"language":23907,"meta":40,"style":40},"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",[42,28808,28809,28825,28829,28842,28846,28859,28863,28876,28880,28893,28897],{"__ignoreMap":40},[45,28810,28811,28813,28816,28819,28822],{"class":47,"line":48},[45,28812,26636],{"class":2046},[45,28814,28815],{"class":313}," build",[45,28817,28818],{"class":257}," -t",[45,28820,28821],{"class":313}," ros-melodic-cuda118-cudnn8-bionic:latest",[45,28823,28824],{"class":313}," .\n",[45,28826,28827],{"class":47,"line":125},[45,28828,2483],{"emptyLinePlaceholder":133},[45,28830,28831,28833,28835,28837,28840],{"class":47,"line":1262},[45,28832,26636],{"class":2046},[45,28834,28815],{"class":313},[45,28836,28818],{"class":257},[45,28838,28839],{"class":313}," ros-noetic-focal:latest",[45,28841,28824],{"class":313},[45,28843,28844],{"class":47,"line":1277},[45,28845,2483],{"emptyLinePlaceholder":133},[45,28847,28848,28850,28852,28854,28857],{"class":47,"line":1283},[45,28849,26636],{"class":2046},[45,28851,28815],{"class":313},[45,28853,28818],{"class":257},[45,28855,28856],{"class":313}," ros-humble-jammy:latest",[45,28858,28824],{"class":313},[45,28860,28861],{"class":47,"line":1297},[45,28862,2483],{"emptyLinePlaceholder":133},[45,28864,28865,28867,28869,28871,28874],{"class":47,"line":1303},[45,28866,26636],{"class":2046},[45,28868,28815],{"class":313},[45,28870,28818],{"class":257},[45,28872,28873],{"class":313}," ros-jazzy-noble:latest",[45,28875,28824],{"class":313},[45,28877,28878],{"class":47,"line":1394},[45,28879,2483],{"emptyLinePlaceholder":133},[45,28881,28882,28884,28886,28888,28891],{"class":47,"line":1400},[45,28883,26636],{"class":2046},[45,28885,28815],{"class":313},[45,28887,28818],{"class":257},[45,28889,28890],{"class":313}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[45,28892,28824],{"class":313},[45,28894,28895],{"class":47,"line":1412},[45,28896,2483],{"emptyLinePlaceholder":133},[45,28898,28899,28901,28903,28905,28908],{"class":47,"line":1695},[45,28900,26636],{"class":2046},[45,28902,28815],{"class":313},[45,28904,28818],{"class":257},[45,28906,28907],{"class":313}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[45,28909,28824],{"class":313},[10,28911,28912],{},[1545,28913],{"alt":40,"src":28914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[10,28916,28917],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[10,28919,28920],{},[1545,28921],{"alt":40,"src":28922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[10,28924,28925],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[159,28927,28928],{},[162,28929,28930],{},"创建 Docker Hub 账户",[10,28932,28933],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[159,28935,28936],{"start":125},[162,28937,28938],{},"登录 Docker Hub",[10,28940,28941],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[35,28943,28945],{"className":23905,"code":28944,"language":23907,"meta":40,"style":40},"docker login\n",[42,28946,28947],{"__ignoreMap":40},[45,28948,28949,28951],{"class":47,"line":48},[45,28950,26636],{"class":2046},[45,28952,28953],{"class":313}," login\n",[10,28955,28956],{},"输入你的 Docker Hub 用户名和密码进行验证。",[159,28958,28959],{},[162,28960,28961],{},"为你的镜像打标签",[10,28963,28964,28965,28968],{},"Docker Hub 使用 ",[42,28966,28967],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[35,28970,28972],{"className":23905,"code":28971,"language":23907,"meta":40,"style":40},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[42,28973,28974],{"__ignoreMap":40},[45,28975,28976,28978,28981,28983,28986,28989,28992,28994],{"class":47,"line":48},[45,28977,26636],{"class":2046},[45,28979,28980],{"class":313}," tag",[45,28982,28873],{"class":313},[45,28984,28985],{"class":93}," \u003C",[45,28987,28988],{"class":313},"你的用户",[45,28990,28991],{"class":51},"名",[45,28993,1167],{"class":93},[45,28995,28996],{"class":313},"\u002Fros-jazzy-noble:latest\n",[10,28998,28999,29000,29003],{},"例如，如果你的 Docker Hub 用户名是 ",[42,29001,29002],{},"tungchiahui","，你应该执行：",[35,29005,29007],{"className":23905,"code":29006,"language":23907,"meta":40,"style":40},"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",[42,29008,29009,29020,29024,29035,29039,29050,29054,29065,29069],{"__ignoreMap":40},[45,29010,29011,29013,29015,29017],{"class":47,"line":48},[45,29012,26636],{"class":2046},[45,29014,28980],{"class":313},[45,29016,28839],{"class":313},[45,29018,29019],{"class":313}," tungchiahui\u002Fros-noetic-focal:latest\n",[45,29021,29022],{"class":47,"line":125},[45,29023,2483],{"emptyLinePlaceholder":133},[45,29025,29026,29028,29030,29032],{"class":47,"line":1262},[45,29027,26636],{"class":2046},[45,29029,28980],{"class":313},[45,29031,28856],{"class":313},[45,29033,29034],{"class":313}," tungchiahui\u002Fros-humble-jammy:latest\n",[45,29036,29037],{"class":47,"line":1277},[45,29038,2483],{"emptyLinePlaceholder":133},[45,29040,29041,29043,29045,29047],{"class":47,"line":1283},[45,29042,26636],{"class":2046},[45,29044,28980],{"class":313},[45,29046,28873],{"class":313},[45,29048,29049],{"class":313}," tungchiahui\u002Fros-jazzy-noble:latest\n",[45,29051,29052],{"class":47,"line":1297},[45,29053,2483],{"emptyLinePlaceholder":133},[45,29055,29056,29058,29060,29062],{"class":47,"line":1303},[45,29057,26636],{"class":2046},[45,29059,28980],{"class":313},[45,29061,28890],{"class":313},[45,29063,29064],{"class":313}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[45,29066,29067],{"class":47,"line":1394},[45,29068,2483],{"emptyLinePlaceholder":133},[45,29070,29071,29073,29075,29077],{"class":47,"line":1400},[45,29072,26636],{"class":2046},[45,29074,28980],{"class":313},[45,29076,28907],{"class":313},[45,29078,29079],{"class":313}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[159,29081,29082],{"start":125},[162,29083,29084],{},"推送镜像到 Docker Hub",[10,29086,29087],{},"使用以下命令将镜像推送到 Docker Hub：",[35,29089,29091],{"className":23905,"code":29090,"language":23907,"meta":40,"style":40},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[42,29092,29093],{"__ignoreMap":40},[45,29094,29095,29097,29100,29102,29104,29106,29108],{"class":47,"line":48},[45,29096,26636],{"class":2046},[45,29098,29099],{"class":313}," push",[45,29101,28985],{"class":93},[45,29103,28988],{"class":313},[45,29105,28991],{"class":51},[45,29107,1167],{"class":93},[45,29109,29110],{"class":313},"\u002Fros-noetic-jazzy-noble:latest\n",[10,29112,14716],{},[35,29114,29116],{"className":23905,"code":29115,"language":23907,"meta":40,"style":40},"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",[42,29117,29118,29126,29130,29138,29142,29150,29154,29163,29167,29175,29179],{"__ignoreMap":40},[45,29119,29120,29122,29124],{"class":47,"line":48},[45,29121,26636],{"class":2046},[45,29123,29099],{"class":313},[45,29125,29019],{"class":313},[45,29127,29128],{"class":47,"line":125},[45,29129,2483],{"emptyLinePlaceholder":133},[45,29131,29132,29134,29136],{"class":47,"line":1262},[45,29133,26636],{"class":2046},[45,29135,29099],{"class":313},[45,29137,29034],{"class":313},[45,29139,29140],{"class":47,"line":1277},[45,29141,2483],{"emptyLinePlaceholder":133},[45,29143,29144,29146,29148],{"class":47,"line":1283},[45,29145,26636],{"class":2046},[45,29147,29099],{"class":313},[45,29149,29049],{"class":313},[45,29151,29152],{"class":47,"line":1297},[45,29153,2483],{"emptyLinePlaceholder":133},[45,29155,29156,29158,29160],{"class":47,"line":1303},[45,29157,26636],{"class":2046},[45,29159,29099],{"class":313},[45,29161,29162],{"class":313}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[45,29164,29165],{"class":47,"line":1394},[45,29166,2483],{"emptyLinePlaceholder":133},[45,29168,29169,29171,29173],{"class":47,"line":1400},[45,29170,26636],{"class":2046},[45,29172,29099],{"class":313},[45,29174,29079],{"class":313},[45,29176,29177],{"class":47,"line":1412},[45,29178,2483],{"emptyLinePlaceholder":133},[45,29180,29181,29183,29185],{"class":47,"line":1695},[45,29182,26636],{"class":2046},[45,29184,29099],{"class":313},[45,29186,29187],{"class":313}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[159,29189,29190],{"start":1262},[162,29191,29192],{},"验证推送成功",[10,29194,29195],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[10,29197,29198],{},[358,29199,3867],{},[1214,29201,29202,29205],{},[162,29203,29204],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[162,29206,29207],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[10,29209,29210],{},[1545,29211],{"alt":40,"src":29212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[10,29214,29215],{},[1545,29216],{"alt":40,"src":29217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22081,29219,29221],{"id":29220},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[10,29223,29224,29225,29228,29229,29232],{},"如果您想在 ",[358,29226,29227],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[358,29230,29231],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[10,29234,29235,29236],{},"1. ",[358,29237,29238],{},"启用 Docker 跨平台构建",[10,29240,29241],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[10,29243,29244],{},"第一步：启用 buildx（只需执行一次）",[35,29246,29248],{"className":23905,"code":29247,"language":23907,"meta":40,"style":40},"docker buildx create --name multiarch_builder --use\n",[42,29249,29250],{"__ignoreMap":40},[45,29251,29252,29254,29257,29260,29263,29266],{"class":47,"line":48},[45,29253,26636],{"class":2046},[45,29255,29256],{"class":313}," buildx",[45,29258,29259],{"class":313}," create",[45,29261,29262],{"class":257}," --name",[45,29264,29265],{"class":313}," multiarch_builder",[45,29267,29268],{"class":257}," --use\n",[10,29270,29271],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[10,29273,29274],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[35,29276,29278],{"className":23905,"code":29277,"language":23907,"meta":40,"style":40},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[42,29279,29280],{"__ignoreMap":40},[45,29281,29282,29284,29286,29288,29291,29294,29297,29300],{"class":47,"line":48},[45,29283,26636],{"class":2046},[45,29285,27313],{"class":313},[45,29287,27316],{"class":257},[45,29289,29290],{"class":257}," --privileged",[45,29292,29293],{"class":313}," multiarch\u002Fqemu-user-static",[45,29295,29296],{"class":257}," --reset",[45,29298,29299],{"class":257}," -p",[45,29301,29302],{"class":313}," yes\n",[10,29304,29305],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[10,29307,29308],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[35,29310,29312],{"className":23905,"code":29311,"language":23907,"meta":40,"style":40},"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",[42,29313,29314,29356,29360,29365,29375,29385,29394,29400,29404,29408,29418,29426,29435,29441,29445,29449,29459,29467,29476,29482,29486,29490,29500,29508,29517,29523,29527,29531,29541,29549,29558,29564,29568,29572,29582,29590,29599,29605,29609,29613,29623,29631,29640,29646,29650,29654,29664,29672,29681,29687,29691,29695,29705,29713,29722,29728,29732,29736,29747,29755,29764,29770],{"__ignoreMap":40},[45,29315,29316,29318,29320,29322,29325,29328,29330,29332,29335,29337,29339,29341,29343,29346,29349,29351,29354],{"class":47,"line":48},[45,29317,26636],{"class":2046},[45,29319,29256],{"class":313},[45,29321,28815],{"class":313},[45,29323,29324],{"class":257}," --platform",[45,29326,29327],{"class":313}," linux\u002Famd64,linux\u002Farm64",[45,29329,28818],{"class":257},[45,29331,28985],{"class":93},[45,29333,29334],{"class":313},"你的镜像",[45,29336,28991],{"class":51},[45,29338,1167],{"class":93},[45,29340,1066],{"class":313},[45,29342,1117],{"class":93},[45,29344,29345],{"class":313},"标",[45,29347,29348],{"class":51},"签",[45,29350,1167],{"class":93},[45,29352,29353],{"class":257}," --push",[45,29355,28824],{"class":313},[45,29357,29358],{"class":47,"line":125},[45,29359,2483],{"emptyLinePlaceholder":133},[45,29361,29362],{"class":47,"line":1262},[45,29363,29364],{"class":267},"# 例子：\n",[45,29366,29367,29369,29371,29373],{"class":47,"line":1277},[45,29368,26636],{"class":2046},[45,29370,29256],{"class":313},[45,29372,28815],{"class":313},[45,29374,24761],{"class":257},[45,29376,29377,29380,29383],{"class":47,"line":1283},[45,29378,29379],{"class":51},"--platform ",[45,29381,29382],{"class":313},"linux\u002Famd64,linux\u002Farm64",[45,29384,24761],{"class":257},[45,29386,29387,29389,29392],{"class":47,"line":1297},[45,29388,28818],{"class":257},[45,29390,29391],{"class":313}," tungchiahui\u002Fros:noetic-focal",[45,29393,24761],{"class":257},[45,29395,29396,29398],{"class":47,"line":1303},[45,29397,29353],{"class":257},[45,29399,24761],{"class":257},[45,29401,29402],{"class":47,"line":1394},[45,29403,28824],{"class":313},[45,29405,29406],{"class":47,"line":1400},[45,29407,2483],{"emptyLinePlaceholder":133},[45,29409,29410,29412,29414,29416],{"class":47,"line":1412},[45,29411,26636],{"class":2046},[45,29413,29256],{"class":313},[45,29415,28815],{"class":313},[45,29417,24761],{"class":257},[45,29419,29420,29422,29424],{"class":47,"line":1695},[45,29421,29379],{"class":51},[45,29423,29382],{"class":313},[45,29425,24761],{"class":257},[45,29427,29428,29430,29433],{"class":47,"line":1700},[45,29429,28818],{"class":257},[45,29431,29432],{"class":313}," tungchiahui\u002Fros:humble-jammy",[45,29434,24761],{"class":257},[45,29436,29437,29439],{"class":47,"line":1706},[45,29438,29353],{"class":257},[45,29440,24761],{"class":257},[45,29442,29443],{"class":47,"line":1711},[45,29444,28824],{"class":313},[45,29446,29447],{"class":47,"line":1725},[45,29448,2483],{"emptyLinePlaceholder":133},[45,29450,29451,29453,29455,29457],{"class":47,"line":1730},[45,29452,26636],{"class":2046},[45,29454,29256],{"class":313},[45,29456,28815],{"class":313},[45,29458,24761],{"class":257},[45,29460,29461,29463,29465],{"class":47,"line":1736},[45,29462,29379],{"class":51},[45,29464,29382],{"class":313},[45,29466,24761],{"class":257},[45,29468,29469,29471,29474],{"class":47,"line":1757},[45,29470,28818],{"class":257},[45,29472,29473],{"class":313}," tungchiahui\u002Fros:jazzy-noble",[45,29475,24761],{"class":257},[45,29477,29478,29480],{"class":47,"line":1762},[45,29479,29353],{"class":257},[45,29481,24761],{"class":257},[45,29483,29484],{"class":47,"line":1776},[45,29485,28824],{"class":313},[45,29487,29488],{"class":47,"line":1781},[45,29489,2483],{"emptyLinePlaceholder":133},[45,29491,29492,29494,29496,29498],{"class":47,"line":1810},[45,29493,26403],{"class":2046},[45,29495,29256],{"class":313},[45,29497,28815],{"class":313},[45,29499,24761],{"class":257},[45,29501,29502,29504,29506],{"class":47,"line":1815},[45,29503,29379],{"class":51},[45,29505,29382],{"class":313},[45,29507,24761],{"class":257},[45,29509,29510,29512,29515],{"class":47,"line":1832},[45,29511,28818],{"class":257},[45,29513,29514],{"class":313}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[45,29516,24761],{"class":257},[45,29518,29519,29521],{"class":47,"line":1837},[45,29520,29353],{"class":257},[45,29522,24761],{"class":257},[45,29524,29525],{"class":47,"line":1842},[45,29526,28824],{"class":313},[45,29528,29529],{"class":47,"line":1847},[45,29530,2483],{"emptyLinePlaceholder":133},[45,29532,29533,29535,29537,29539],{"class":47,"line":1861},[45,29534,26636],{"class":2046},[45,29536,29256],{"class":313},[45,29538,28815],{"class":313},[45,29540,24761],{"class":257},[45,29542,29543,29545,29547],{"class":47,"line":1866},[45,29544,29379],{"class":51},[45,29546,29382],{"class":313},[45,29548,24761],{"class":257},[45,29550,29551,29553,29556],{"class":47,"line":2660},[45,29552,28818],{"class":257},[45,29554,29555],{"class":313}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[45,29557,24761],{"class":257},[45,29559,29560,29562],{"class":47,"line":2674},[45,29561,29353],{"class":257},[45,29563,24761],{"class":257},[45,29565,29566],{"class":47,"line":2682},[45,29567,28824],{"class":313},[45,29569,29570],{"class":47,"line":2687},[45,29571,2483],{"emptyLinePlaceholder":133},[45,29573,29574,29576,29578,29580],{"class":47,"line":2693},[45,29575,26403],{"class":2046},[45,29577,29256],{"class":313},[45,29579,28815],{"class":313},[45,29581,24761],{"class":257},[45,29583,29584,29586,29588],{"class":47,"line":2699},[45,29585,29379],{"class":51},[45,29587,29382],{"class":313},[45,29589,24761],{"class":257},[45,29591,29592,29594,29597],{"class":47,"line":2704},[45,29593,28818],{"class":257},[45,29595,29596],{"class":313}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[45,29598,24761],{"class":257},[45,29600,29601,29603],{"class":47,"line":8031},[45,29602,29353],{"class":257},[45,29604,24761],{"class":257},[45,29606,29607],{"class":47,"line":8055},[45,29608,28824],{"class":313},[45,29610,29611],{"class":47,"line":8060},[45,29612,2483],{"emptyLinePlaceholder":133},[45,29614,29615,29617,29619,29621],{"class":47,"line":8066},[45,29616,26636],{"class":2046},[45,29618,29256],{"class":313},[45,29620,28815],{"class":313},[45,29622,24761],{"class":257},[45,29624,29625,29627,29629],{"class":47,"line":8093},[45,29626,29379],{"class":51},[45,29628,29382],{"class":313},[45,29630,24761],{"class":257},[45,29632,29633,29635,29638],{"class":47,"line":8098},[45,29634,28818],{"class":257},[45,29636,29637],{"class":313}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[45,29639,24761],{"class":257},[45,29641,29642,29644],{"class":47,"line":8104},[45,29643,29353],{"class":257},[45,29645,24761],{"class":257},[45,29647,29648],{"class":47,"line":8116},[45,29649,28824],{"class":313},[45,29651,29652],{"class":47,"line":8128},[45,29653,2483],{"emptyLinePlaceholder":133},[45,29655,29656,29658,29660,29662],{"class":47,"line":8140},[45,29657,26636],{"class":2046},[45,29659,29256],{"class":313},[45,29661,28815],{"class":313},[45,29663,24761],{"class":257},[45,29665,29666,29668,29670],{"class":47,"line":9799},[45,29667,29379],{"class":51},[45,29669,29382],{"class":313},[45,29671,24761],{"class":257},[45,29673,29674,29676,29679],{"class":47,"line":9824},[45,29675,28818],{"class":257},[45,29677,29678],{"class":313}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[45,29680,24761],{"class":257},[45,29682,29683,29685],{"class":47,"line":9847},[45,29684,29353],{"class":257},[45,29686,24761],{"class":257},[45,29688,29689],{"class":47,"line":9871},[45,29690,28824],{"class":313},[45,29692,29693],{"class":47,"line":9876},[45,29694,2483],{"emptyLinePlaceholder":133},[45,29696,29697,29699,29701,29703],{"class":47,"line":9881},[45,29698,26403],{"class":2046},[45,29700,29256],{"class":313},[45,29702,28815],{"class":313},[45,29704,24761],{"class":257},[45,29706,29707,29709,29711],{"class":47,"line":9886},[45,29708,29379],{"class":51},[45,29710,29382],{"class":313},[45,29712,24761],{"class":257},[45,29714,29715,29717,29720],{"class":47,"line":9895},[45,29716,28818],{"class":257},[45,29718,29719],{"class":313}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[45,29721,24761],{"class":257},[45,29723,29724,29726],{"class":47,"line":9900},[45,29725,29353],{"class":257},[45,29727,24761],{"class":257},[45,29729,29730],{"class":47,"line":9906},[45,29731,28824],{"class":313},[45,29733,29734],{"class":47,"line":9927},[45,29735,2483],{"emptyLinePlaceholder":133},[45,29737,29738,29741,29743,29745],{"class":47,"line":9933},[45,29739,29740],{"class":2046},"  docker",[45,29742,29256],{"class":313},[45,29744,28815],{"class":313},[45,29746,24761],{"class":257},[45,29748,29749,29751,29753],{"class":47,"line":9947},[45,29750,29379],{"class":51},[45,29752,29382],{"class":313},[45,29754,24761],{"class":257},[45,29756,29757,29759,29762],{"class":47,"line":9953},[45,29758,28818],{"class":257},[45,29760,29761],{"class":313}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[45,29763,24761],{"class":257},[45,29765,29766,29768],{"class":47,"line":9980},[45,29767,29353],{"class":257},[45,29769,24761],{"class":257},[45,29771,29772],{"class":47,"line":9989},[45,29773,28824],{"class":313},[10,29775,29776],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[10,29778,29779],{},[1545,29780],{"alt":40,"src":29781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[10,29783,29784],{},[1545,29785],{"alt":40,"src":29786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22081,29788,29790],{"id":29789},"_623清除构建缓存","6.2.3.清除构建缓存",[35,29792,29794],{"className":23905,"code":29793,"language":23907,"meta":40,"style":40},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[42,29795,29796,29801],{"__ignoreMap":40},[45,29797,29798],{"class":47,"line":48},[45,29799,29800],{"class":267},"# 清理BuildKit构建缓存\n",[45,29802,29803,29805,29808,29811],{"class":47,"line":125},[45,29804,26636],{"class":2046},[45,29806,29807],{"class":313}," builder",[45,29809,29810],{"class":313}," prune",[45,29812,29813],{"class":257}," -f\n",[10,29815,29816],{},[1545,29817],{"alt":40,"src":29818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[176,29820,29822],{"id":29821},"_63补充","6.3.补充",[22081,29824,29826],{"id":29825},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[10,29828,29829],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[10,29831,29832],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[10,29834,29835],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[35,29837,29839],{"className":23905,"code":29838,"language":23907,"meta":40,"style":40},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[42,29840,29841,29848],{"__ignoreMap":40},[45,29842,29843,29845],{"class":47,"line":48},[45,29844,27453],{"class":2046},[45,29846,29847],{"class":313}," nginx\n",[45,29849,29850,29852,29855,29858,29860],{"class":47,"line":125},[45,29851,28638],{"class":2046},[45,29853,29854],{"class":313}," echo",[45,29856,29857],{"class":313}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[45,29859,26305],{"class":93},[45,29861,29862],{"class":313}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[10,29864,29865],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[10,29867,29868],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[35,29870,29872],{"className":23905,"code":29871,"language":23907,"meta":40,"style":40},"docker build -t nginx:tuling .\n",[42,29873,29874],{"__ignoreMap":40},[45,29875,29876,29878,29880,29882,29885],{"class":47,"line":48},[45,29877,26636],{"class":2046},[45,29879,28815],{"class":313},[45,29881,28818],{"class":257},[45,29883,29884],{"class":313}," nginx:tuling",[45,29886,28824],{"class":313},[10,29888,29889],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[10,29891,29892],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[35,29894,29896],{"className":23905,"code":29895,"language":23907,"meta":40,"style":40},"docker run -d -p 92:80 nginx:tuling\n",[42,29897,29898],{"__ignoreMap":40},[45,29899,29900,29902,29904,29907,29909,29912],{"class":47,"line":48},[45,29901,26636],{"class":2046},[45,29903,27313],{"class":313},[45,29905,29906],{"class":257}," -d",[45,29908,29299],{"class":257},[45,29910,29911],{"class":313}," 92:80",[45,29913,29914],{"class":313}," nginx:tuling\n",[10,29916,29917,29918],{},"4、访问 ",[13,29919,29922],{"href":29920,"rel":29921},"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",[17],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[10,29924,29925],{},[1545,29926],{"alt":40,"src":29927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[10,29929,29930],{},[1545,29931],{"alt":40,"src":29932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22081,29934,29936],{"id":29935},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[10,29938,29939],{},"只需要知道大体流程即可",[10,29941,29942],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[10,29944,29945],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[10,29947,29948],{},"2、在Dockerfile中添加以下内容",[35,29950,29952],{"className":26174,"code":29951,"language":26176,"meta":40,"style":40},"# 基于哪个镜像\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",[42,29953,29954,29959,29964,29969,29974,29979,29984,29989],{"__ignoreMap":40},[45,29955,29956],{"class":47,"line":48},[45,29957,29958],{},"# 基于哪个镜像\n",[45,29960,29961],{"class":47,"line":125},[45,29962,29963],{},"From java:8\n",[45,29965,29966],{"class":47,"line":1262},[45,29967,29968],{},"# 复制文件到容器\n",[45,29970,29971],{"class":47,"line":1277},[45,29972,29973],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[45,29975,29976],{"class":47,"line":1283},[45,29977,29978],{},"# 声明需要暴露的端口\n",[45,29980,29981],{"class":47,"line":1297},[45,29982,29983],{},"EXPOSE 8877\n",[45,29985,29986],{"class":47,"line":1303},[45,29987,29988],{},"# 配置容器启动后执行的命令\n",[45,29990,29991],{"class":47,"line":1394},[45,29992,29993],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[10,29995,29996],{},"3、使用docker build命令构建镜像",[35,29998,30000],{"className":23905,"code":29999,"language":23907,"meta":40,"style":40},"docker build -t tulingmall-member:0.0.5 .\n",[42,30001,30002],{"__ignoreMap":40},[45,30003,30004,30006,30008,30010,30013],{"class":47,"line":48},[45,30005,26636],{"class":2046},[45,30007,28815],{"class":313},[45,30009,28818],{"class":257},[45,30011,30012],{"class":313}," tulingmall-member:0.0.5",[45,30014,28824],{"class":313},[10,30016,30017],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[10,30019,30020],{},[1545,30021],{"alt":40,"src":30022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[10,30024,30025],{},"4、启动镜像，加-d可在后台启动",[35,30027,30029],{"className":23905,"code":30028,"language":23907,"meta":40,"style":40},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[42,30030,30031],{"__ignoreMap":40},[45,30032,30033,30035,30037,30039,30041,30044],{"class":47,"line":48},[45,30034,26636],{"class":2046},[45,30036,27313],{"class":313},[45,30038,29906],{"class":257},[45,30040,29299],{"class":257},[45,30042,30043],{"class":313}," 8877:8877",[45,30045,30046],{"class":313}," tulingmall-member:0.0.5\n",[10,30048,30049],{},"加上JVM参数：",[35,30051,30053],{"className":23905,"code":30052,"language":23907,"meta":40,"style":40},"# --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",[42,30054,30055,30060,30075,30085,30094,30101],{"__ignoreMap":40},[45,30056,30057],{"class":47,"line":48},[45,30058,30059],{"class":267},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[45,30061,30062,30064,30066,30069,30071,30073],{"class":47,"line":125},[45,30063,26636],{"class":2046},[45,30065,27313],{"class":313},[45,30067,30068],{"class":257},"  -d",[45,30070,29299],{"class":257},[45,30072,30043],{"class":313},[45,30074,24761],{"class":257},[45,30076,30077,30079,30082],{"class":47,"line":1262},[45,30078,28211],{"class":51},[45,30080,30081],{"class":313},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[45,30083,30084],{"class":257},"  \\\n",[45,30086,30087,30089,30092],{"class":47,"line":1277},[45,30088,28211],{"class":51},[45,30090,30091],{"class":313},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[45,30093,30084],{"class":257},[45,30095,30096,30099],{"class":47,"line":1283},[45,30097,30098],{"class":51},"--cap-add=SYS_PTRACE  ",[45,30100,26258],{"class":257},[45,30102,30103],{"class":47,"line":1297},[45,30104,30105],{"class":51},"tulingmall-member:0.0.5\n",[10,30107,30108],{},"5、访问会员服务接口",[10,30110,30111],{},[1545,30112],{"alt":40,"src":30113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22081,30115,30117],{"id":30116},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[10,30119,30120],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[10,30122,30123,30124],{},"阿里云docker镜像仓库：",[13,30125,30126],{"href":30126,"rel":30127},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[17],[10,30129,30130],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[10,30132,30133],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[10,30135,30136],{},[1545,30137],{"alt":40,"src":30138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[10,30140,30141],{},"要把镜像推送到镜像仓库",[35,30143,30145],{"className":23905,"code":30144,"language":23907,"meta":40,"style":40},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[42,30146,30147],{"__ignoreMap":40},[45,30148,30149,30151,30153,30155],{"class":47,"line":48},[45,30150,26636],{"class":2046},[45,30152,28980],{"class":313},[45,30154,30012],{"class":313},[45,30156,30157],{"class":313}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[10,30159,30160],{},"最后将镜像推送到远程仓库",[35,30162,30164],{"className":23905,"code":30163,"language":23907,"meta":40,"style":40},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[42,30165,30166],{"__ignoreMap":40},[45,30167,30168,30170,30172],{"class":47,"line":48},[45,30169,26636],{"class":2046},[45,30171,29099],{"class":313},[45,30173,30157],{"class":313},[121,30175,30176],{},"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":40,"searchDepth":125,"depth":125,"links":30178},[30179,30180,30181],{"id":28566,"depth":1262,"text":28567},{"id":28795,"depth":1262,"text":28796},{"id":29821,"depth":1262,"text":29822},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28558,"description":40},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30188,"title":30189,"body":30190,"description":40,"extension":131,"meta":30333,"navigation":133,"path":30334,"seo":30335,"stem":30336,"__hash__":30337},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30191,"toc":30331},[30192,30195,30200,30205,30208,30213,30218,30221,30226,30231,30234,30239,30242,30245,30248,30251,30254,30257,30277,30299,30302,30305,30325,30328],[20,30193,30189],{"id":30194},"_7vscode远程开发",[159,30196,30197],{},[162,30198,30199],{},"插件1：微软Docker工具",[10,30201,30202],{},[1545,30203],{"alt":40,"src":30204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[10,30206,30207],{},"docker扩展插件已经进化为container tools了，请安装container tools",[10,30209,30210],{},[1545,30211],{"alt":40,"src":30212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[159,30214,30215],{"start":125},[162,30216,30217],{},"插件2：微软Docker远程开发工具",[10,30219,30220],{},"下面这是远程开发的插件。",[10,30222,30223],{},[1545,30224],{"alt":40,"src":30225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[10,30227,30228],{},[1545,30229],{"alt":40,"src":30230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[10,30232,30233],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[10,30235,30236],{},[1545,30237],{"alt":40,"src":30238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[10,30240,30241],{},"安装完拓展之后，vscode进行链接：",[10,30243,30244],{},"1.按ctrl+shift+p",[10,30246,30247],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[10,30249,30250],{},"3.选择目前运行的容器",[10,30252,30253],{},"4.VS Code 会在新窗口中打开并连接到容器",[10,30255,30256],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[35,30258,30260],{"className":23905,"code":30259,"language":23907,"meta":40,"style":40},"docker run -v 主机目录:容器目录 image-name\n",[42,30261,30262],{"__ignoreMap":40},[45,30263,30264,30266,30268,30271,30274],{"class":47,"line":48},[45,30265,26636],{"class":2046},[45,30267,27313],{"class":313},[45,30269,30270],{"class":257}," -v",[45,30272,30273],{"class":313}," 主机目录:容器目录",[45,30275,30276],{"class":313}," image-name\n",[35,30278,30280],{"className":23905,"code":30279,"language":23907,"meta":40,"style":40},"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",[42,30281,30282],{"__ignoreMap":40},[45,30283,30284,30286,30288,30291,30293,30296],{"class":47,"line":48},[45,30285,26636],{"class":2046},[45,30287,27313],{"class":313},[45,30289,30290],{"class":257}," -it",[45,30292,30270],{"class":257},[45,30294,30295],{"class":313}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[45,30297,30298],{"class":313}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[10,30300,30301],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[10,30303,30304],{},"查看挂载情况：",[35,30306,30308],{"className":23905,"code":30307,"language":23907,"meta":40,"style":40},"mount | grep -i project\n",[42,30309,30310],{"__ignoreMap":40},[45,30311,30312,30315,30317,30320,30322],{"class":47,"line":48},[45,30313,30314],{"class":2046},"mount",[45,30316,25192],{"class":93},[45,30318,30319],{"class":2046}," grep",[45,30321,26513],{"class":257},[45,30323,30324],{"class":313}," project\n",[10,30326,30327],{},"也可以通过ls来进行查看",[121,30329,30330],{},"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":40,"searchDepth":125,"depth":125,"links":30332},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30189,"description":40},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30339,"title":30340,"body":30341,"description":130,"extension":131,"meta":30345,"navigation":133,"path":30347,"seo":30348,"stem":30349,"__hash__":30350},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30342,"toc":30343},[],{"title":40,"searchDepth":125,"depth":125,"links":30344},[],{"category":30346},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30340,"description":130},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30352,"title":30353,"body":30354,"description":130,"extension":131,"meta":30358,"navigation":133,"path":30359,"seo":30360,"stem":30361,"__hash__":30362},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30355,"toc":30356},[],{"title":40,"searchDepth":125,"depth":125,"links":30357},[],{"category":30346},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30353,"description":130},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30364,"title":30365,"body":30366,"description":130,"extension":131,"meta":30657,"navigation":133,"path":30658,"seo":30659,"stem":30660,"__hash__":30661},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30367,"toc":30655},[30368,30371,30379,30394,30399,30450,30453,30459,30644,30649,30652],[20,30369,30365],{"id":30370},"_1验证深度学习环境",[10,30372,30373,30374],{},"关于环境的安装，看",[13,30375,30378],{"href":30376,"rel":30377},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[17],"Pytorch-->深度学习",[10,30380,30381,30382,30385,30386,30389,30390,30393],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[42,30383,30384],{},"pytorch-cuda=12.4"," 是一个“ ",[358,30387,30388],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[358,30391,30392],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[10,30395,30396],{},[1545,30397],{"alt":40,"src":30398},"\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",[35,30400,30402],{"className":23905,"code":30401,"language":23907,"meta":40,"style":40},"# 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",[42,30403,30404,30409],{"__ignoreMap":40},[45,30405,30406],{"class":47,"line":48},[45,30407,30408],{"class":267},"# CUDA 12.4\n",[45,30410,30411,30414,30416,30419,30422,30425,30428,30431,30433,30436,30439,30442,30445,30447],{"class":47,"line":125},[45,30412,30413],{"class":2046},"conda",[45,30415,23917],{"class":313},[45,30417,30418],{"class":313}," pytorch==",[45,30420,30421],{"class":257},"2.5.1",[45,30423,30424],{"class":313}," torchvision==",[45,30426,30427],{"class":257},"0.20.1",[45,30429,30430],{"class":313}," torchaudio==",[45,30432,30421],{"class":257},[45,30434,30435],{"class":313}," pytorch-cuda=",[45,30437,30438],{"class":257},"12.4",[45,30440,30441],{"class":257}," -c",[45,30443,30444],{"class":313}," pytorch",[45,30446,30441],{"class":257},[45,30448,30449],{"class":313}," nvidia\n",[10,30451,30452],{},"）：",[10,30454,30455],{},[13,30456,30457],{"href":30457,"rel":30458},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[17],[35,30460,30462],{"className":37,"code":30461,"language":39,"meta":40,"style":40},"# 对深度学习环境进行测试\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",[42,30463,30464,30469,30477,30482,30492,30508,30513,30523,30560,30567,30579,30595,30600,30610,30622,30632],{"__ignoreMap":40},[45,30465,30466],{"class":47,"line":48},[45,30467,30468],{"class":267},"# 对深度学习环境进行测试\n",[45,30470,30471,30474],{"class":47,"line":125},[45,30472,30473],{"class":93},"import",[45,30475,30476],{"class":51}," torch\n",[45,30478,30479],{"class":47,"line":1262},[45,30480,30481],{"class":267},"# 查看cuda是否被激活\n",[45,30483,30484,30487,30489],{"class":47,"line":1277},[45,30485,30486],{"class":51},"flag",[45,30488,254],{"class":93},[45,30490,30491],{"class":51},"torch.cuda.is_available()\n",[45,30493,30494,30497,30499,30502,30505],{"class":47,"line":1283},[45,30495,30496],{"class":257},"print",[45,30498,209],{"class":51},[45,30500,30501],{"class":313},"\"cuda:\"",[45,30503,30504],{"class":51},", flag)   ",[45,30506,30507],{"class":267},"#返回true的话说明被激活\n",[45,30509,30510],{"class":47,"line":1297},[45,30511,30512],{"class":267},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[45,30514,30515,30518,30520],{"class":47,"line":1303},[45,30516,30517],{"class":51},"ngpu",[45,30519,254],{"class":93},[45,30521,30522],{"class":257},"1\n",[45,30524,30525,30528,30530,30533,30536,30538,30541,30544,30547,30549,30551,30553,30555,30558],{"class":47,"line":1394},[45,30526,30527],{"class":51},"device",[45,30529,254],{"class":93},[45,30531,30532],{"class":51},"torch.device(",[45,30534,30535],{"class":313},"\"cuda:0\"",[45,30537,1787],{"class":93},[45,30539,30540],{"class":51},"(torch.cuda.is_available() ",[45,30542,30543],{"class":93},"and",[45,30545,30546],{"class":51}," ngpu",[45,30548,1167],{"class":93},[45,30550,400],{"class":257},[45,30552,13797],{"class":51},[45,30554,1784],{"class":93},[45,30556,30557],{"class":313}," \"cpu\"",[45,30559,215],{"class":51},[45,30561,30562,30564],{"class":47,"line":1400},[45,30563,30496],{"class":257},[45,30565,30566],{"class":51},"(device)\n",[45,30568,30569,30571,30574,30576],{"class":47,"line":1412},[45,30570,30496],{"class":257},[45,30572,30573],{"class":51},"(torch.cuda.get_device_name(",[45,30575,400],{"class":257},[45,30577,30578],{"class":51},"))\n",[45,30580,30581,30583,30586,30588,30590,30592],{"class":47,"line":1695},[45,30582,30496],{"class":257},[45,30584,30585],{"class":51},"(torch.rand(",[45,30587,280],{"class":257},[45,30589,586],{"class":51},[45,30591,280],{"class":257},[45,30593,30594],{"class":51},").cuda())\n",[45,30596,30597],{"class":47,"line":1700},[45,30598,30599],{"class":267},"# 查看cuda和cudnn的版本\n",[45,30601,30602,30605,30607],{"class":47,"line":1706},[45,30603,30604],{"class":51},"cuda_version",[45,30606,254],{"class":93},[45,30608,30609],{"class":51},"torch.version.cuda\n",[45,30611,30612,30614,30616,30619],{"class":47,"line":1711},[45,30613,30496],{"class":257},[45,30615,209],{"class":51},[45,30617,30618],{"class":313},"\"cuda version\"",[45,30620,30621],{"class":51},",cuda_version)\n",[45,30623,30624,30627,30629],{"class":47,"line":1725},[45,30625,30626],{"class":51},"cudnn_version",[45,30628,254],{"class":93},[45,30630,30631],{"class":51},"torch.backends.cudnn.version()\n",[45,30633,30634,30636,30638,30641],{"class":47,"line":1730},[45,30635,30496],{"class":257},[45,30637,209],{"class":51},[45,30639,30640],{"class":313},"\"cudnn version\"",[45,30642,30643],{"class":51},",cudnn_version)\n",[10,30645,30646],{},[1545,30647],{"alt":40,"src":30648},"\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",[10,30650,30651],{},"cuda:0 指的是一块显卡",[121,30653,30654],{},"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":40,"searchDepth":125,"depth":125,"links":30656},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30365,"description":130},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30663,"title":30664,"body":30665,"description":130,"extension":131,"meta":50469,"navigation":133,"path":50470,"seo":50471,"stem":50472,"__hash__":50473},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30666,"toc":50463},[30667,30670,30674,30678,30681,30686,30691,30694,30699,30704,30709,30712,30716,30721,30725,30730,30733,30738,30741,30744,30747,30750,30755,30758,30763,30768,30773,30778,30781,30785,30788,30793,31397,31402,31405,31410,31413,31416,31880,31883,31886,31889,31892,33943,33946,33951,33956,34751,34754,34759,35537,35541,37200,37204,37918,37922,37926,37931,37936,37941,37944,37949,37954,37959,37964,37969,37973,37978,39260,39265,39268,39271,39274,39429,39432,39435,40651,40656,41351,41355,41359,41364,41369,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41437,41442,41447,41452,41457,41462,41467,41472,41477,41482,41487,41492,41497,41502,41507,41512,41517,41522,41526,41530,41533,43011,43015,44662,44666,45360,45364,45367,45370,45914,45917,45921,45924,47321,47325,47328,47906,49693,49697,49700,50460],[20,30668,30664],{"id":30669},"_2经典神经网络",[176,30671,30673],{"id":30672},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22081,30675,30677],{"id":30676},"_211原理介绍","2.1.1.原理介绍",[10,30679,30680],{},"LeNet-5",[159,30682,30683],{},[162,30684,30685],{},"原理",[10,30687,30688],{},[1545,30689],{"alt":40,"src":30690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[10,30692,30693],{},"B是batch批次；C是channel通道",[159,30695,30696],{"start":125},[162,30697,30698],{},"网络参数详细",[10,30700,30701],{},[1545,30702],{"alt":40,"src":30703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[10,30705,30706],{},[1545,30707],{"alt":40,"src":30708},"\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",[10,30710,30711],{},"AlexNet",[159,30713,30714],{},[162,30715,30685],{},[10,30717,30718],{},[1545,30719],{"alt":40,"src":30720},"\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",[159,30722,30723],{"start":125},[162,30724,30698],{},[10,30726,30727],{},[1545,30728],{"alt":40,"src":30729},"\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",[10,30731,30732],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[10,30734,30735],{},[1545,30736],{"alt":40,"src":30737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[10,30739,30740],{},"数据处理中的图像增强操作:",[10,30742,30743],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[10,30745,30746],{},"①增加数据量，保证训练数据充足；②防止过拟合",[10,30748,30749],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[10,30751,30752],{},[1545,30753],{"alt":40,"src":30754},"\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",[10,30756,30757],{},"提升网络精确度的方法：LRN正则化",[10,30759,30760],{},[1545,30761],{"alt":40,"src":30762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[10,30764,30765],{},[1545,30766],{"alt":40,"src":30767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[159,30769,30770],{"start":1262},[162,30771,30772],{},"AlexNet的总结",[10,30774,30775],{},[1545,30776],{"alt":40,"src":30777},"\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",[10,30779,30780],{},"比LeNet模型要深一丢丢",[22081,30782,30784],{"id":30783},"_212代码实现","2.1.2.代码实现",[10,30786,30787],{},"（1）LeNet",[159,30789,30790],{},[162,30791,30792],{},"模型搭建",[35,30794,30796],{"className":37,"code":30795,"language":39,"meta":40,"style":40},"# 导入库\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",[42,30797,30798,30803,30809,30814,30827,30832,30844,30848,30868,30873,30878,30889,30894,30913,30917,30922,30971,30983,30988,31017,31052,31079,31084,31096,31101,31121,31140,31159,31163,31168,31178,31195,31206,31221,31232,31243,31258,31273,31284,31291,31295,31309,31314,31337,31342,31347,31352,31356,31361,31366,31376],{"__ignoreMap":40},[45,30799,30800],{"class":47,"line":48},[45,30801,30802],{"class":267},"# 导入库\n",[45,30804,30805,30807],{"class":47,"line":125},[45,30806,30473],{"class":93},[45,30808,30476],{"class":51},[45,30810,30811],{"class":47,"line":1262},[45,30812,30813],{"class":267},"# 导入神经网络层\n",[45,30815,30816,30819,30822,30824],{"class":47,"line":1277},[45,30817,30818],{"class":93},"from",[45,30820,30821],{"class":51}," torch ",[45,30823,30473],{"class":93},[45,30825,30826],{"class":51}," nn\n",[45,30828,30829],{"class":47,"line":1283},[45,30830,30831],{"class":267},"# 导入展示神经网络参数的包\n",[45,30833,30834,30836,30839,30841],{"class":47,"line":1297},[45,30835,30818],{"class":93},[45,30837,30838],{"class":51}," torchsummary ",[45,30840,30473],{"class":93},[45,30842,30843],{"class":51}," summary\n",[45,30845,30846],{"class":47,"line":1303},[45,30847,2483],{"emptyLinePlaceholder":133},[45,30849,30850,30852,30855,30857,30860,30862,30865],{"class":47,"line":1394},[45,30851,14777],{"class":93},[45,30853,30854],{"class":2046}," LeNet",[45,30856,209],{"class":51},[45,30858,30859],{"class":2046},"nn",[45,30861,765],{"class":51},[45,30863,30864],{"class":2046},"Module",[45,30866,30867],{"class":51},"):\n",[45,30869,30870],{"class":47,"line":1400},[45,30871,30872],{"class":267},"    # 模型初始化:\n",[45,30874,30875],{"class":47,"line":1412},[45,30876,30877],{"class":267},"    # 定义一些网络层和激活函数\n",[45,30879,30880,30883,30886],{"class":47,"line":1695},[45,30881,30882],{"class":93},"    def",[45,30884,30885],{"class":257}," __init__",[45,30887,30888],{"class":51},"(self):\n",[45,30890,30891],{"class":47,"line":1700},[45,30892,30893],{"class":267},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[45,30895,30896,30899,30902,30905,30908,30911],{"class":47,"line":1706},[45,30897,30898],{"class":257},"        super",[45,30900,30901],{"class":51},"(LeNet,",[45,30903,30904],{"class":257},"self",[45,30906,30907],{"class":51},").",[45,30909,30910],{"class":257},"__init__",[45,30912,2059],{"class":51},[45,30914,30915],{"class":47,"line":1711},[45,30916,2483],{"emptyLinePlaceholder":133},[45,30918,30919],{"class":47,"line":1725},[45,30920,30921],{"class":267},"        # 定义网络层\n",[45,30923,30924,30927,30930,30932,30935,30938,30940,30942,30944,30947,30949,30951,30953,30956,30958,30960,30962,30965,30967,30969],{"class":47,"line":1730},[45,30925,30926],{"class":257},"        self",[45,30928,30929],{"class":51},".c1",[45,30931,254],{"class":93},[45,30933,30934],{"class":51},"nn.Conv2d(",[45,30936,30937],{"class":5299},"in_channels",[45,30939,254],{"class":93},[45,30941,426],{"class":257},[45,30943,586],{"class":51},[45,30945,30946],{"class":5299},"out_channels",[45,30948,254],{"class":93},[45,30950,552],{"class":257},[45,30952,586],{"class":51},[45,30954,30955],{"class":5299},"kernel_size",[45,30957,254],{"class":93},[45,30959,527],{"class":257},[45,30961,586],{"class":51},[45,30963,30964],{"class":5299},"padding",[45,30966,254],{"class":93},[45,30968,286],{"class":257},[45,30970,215],{"class":51},[45,30972,30973,30975,30978,30980],{"class":47,"line":1736},[45,30974,30926],{"class":257},[45,30976,30977],{"class":51},".sig",[45,30979,254],{"class":93},[45,30981,30982],{"class":51},"nn.Sigmoid()\n",[45,30984,30985],{"class":47,"line":1757},[45,30986,30987],{"class":267},"        # 定义池化\n",[45,30989,30990,30992,30995,30997,31000,31002,31004,31006,31008,31011,31013,31015],{"class":47,"line":1762},[45,30991,30926],{"class":257},[45,30993,30994],{"class":51},".s2",[45,30996,254],{"class":93},[45,30998,30999],{"class":51},"nn.AvgPool2d(",[45,31001,30955],{"class":5299},[45,31003,254],{"class":93},[45,31005,286],{"class":257},[45,31007,586],{"class":51},[45,31009,31010],{"class":5299},"stride",[45,31012,254],{"class":93},[45,31014,286],{"class":257},[45,31016,215],{"class":51},[45,31018,31019,31021,31024,31026,31028,31030,31032,31034,31036,31038,31040,31042,31044,31046,31048,31050],{"class":47,"line":1776},[45,31020,30926],{"class":257},[45,31022,31023],{"class":51},".c3",[45,31025,254],{"class":93},[45,31027,30934],{"class":51},[45,31029,30937],{"class":5299},[45,31031,254],{"class":93},[45,31033,552],{"class":257},[45,31035,586],{"class":51},[45,31037,30946],{"class":5299},[45,31039,254],{"class":93},[45,31041,808],{"class":257},[45,31043,586],{"class":51},[45,31045,30955],{"class":5299},[45,31047,254],{"class":93},[45,31049,527],{"class":257},[45,31051,215],{"class":51},[45,31053,31054,31056,31059,31061,31063,31065,31067,31069,31071,31073,31075,31077],{"class":47,"line":1781},[45,31055,30926],{"class":257},[45,31057,31058],{"class":51},".s4",[45,31060,254],{"class":93},[45,31062,30999],{"class":51},[45,31064,30955],{"class":5299},[45,31066,254],{"class":93},[45,31068,286],{"class":257},[45,31070,586],{"class":51},[45,31072,31010],{"class":5299},[45,31074,254],{"class":93},[45,31076,286],{"class":257},[45,31078,215],{"class":51},[45,31080,31081],{"class":47,"line":1810},[45,31082,31083],{"class":267},"        # 定义平展层\n",[45,31085,31086,31088,31091,31093],{"class":47,"line":1815},[45,31087,30926],{"class":257},[45,31089,31090],{"class":51},".flatten",[45,31092,254],{"class":93},[45,31094,31095],{"class":51},"nn.Flatten()\n",[45,31097,31098],{"class":47,"line":1832},[45,31099,31100],{"class":267},"        # 定义全连接层\n",[45,31102,31103,31105,31108,31110,31113,31115,31117,31119],{"class":47,"line":1837},[45,31104,30926],{"class":257},[45,31106,31107],{"class":51},".f5",[45,31109,254],{"class":93},[45,31111,31112],{"class":51},"nn.Linear(",[45,31114,4070],{"class":257},[45,31116,586],{"class":51},[45,31118,1024],{"class":257},[45,31120,215],{"class":51},[45,31122,31123,31125,31128,31130,31132,31134,31136,31138],{"class":47,"line":1842},[45,31124,30926],{"class":257},[45,31126,31127],{"class":51},".f6",[45,31129,254],{"class":93},[45,31131,31112],{"class":51},[45,31133,1024],{"class":257},[45,31135,586],{"class":51},[45,31137,918],{"class":257},[45,31139,215],{"class":51},[45,31141,31142,31144,31147,31149,31151,31153,31155,31157],{"class":47,"line":1847},[45,31143,30926],{"class":257},[45,31145,31146],{"class":51},".f7",[45,31148,254],{"class":93},[45,31150,31112],{"class":51},[45,31152,918],{"class":257},[45,31154,586],{"class":51},[45,31156,654],{"class":257},[45,31158,215],{"class":51},[45,31160,31161],{"class":47,"line":1861},[45,31162,2483],{"emptyLinePlaceholder":133},[45,31164,31165],{"class":47,"line":1866},[45,31166,31167],{"class":267},"    # 写工具->写前向传播\n",[45,31169,31170,31172,31175],{"class":47,"line":2660},[45,31171,30882],{"class":93},[45,31173,31174],{"class":2046}," forward",[45,31176,31177],{"class":51},"(self,x):\n",[45,31179,31180,31183,31185,31187,31190,31192],{"class":47,"line":2674},[45,31181,31182],{"class":51},"        x",[45,31184,254],{"class":93},[45,31186,30904],{"class":257},[45,31188,31189],{"class":51},".sig(",[45,31191,30904],{"class":257},[45,31193,31194],{"class":51},".c1(x))\n",[45,31196,31197,31199,31201,31203],{"class":47,"line":2682},[45,31198,31182],{"class":51},[45,31200,254],{"class":93},[45,31202,30904],{"class":257},[45,31204,31205],{"class":51},".s2(x)\n",[45,31207,31208,31210,31212,31214,31216,31218],{"class":47,"line":2687},[45,31209,31182],{"class":51},[45,31211,254],{"class":93},[45,31213,30904],{"class":257},[45,31215,31189],{"class":51},[45,31217,30904],{"class":257},[45,31219,31220],{"class":51},".c3(x))\n",[45,31222,31223,31225,31227,31229],{"class":47,"line":2693},[45,31224,31182],{"class":51},[45,31226,254],{"class":93},[45,31228,30904],{"class":257},[45,31230,31231],{"class":51},".s4(x)\n",[45,31233,31234,31236,31238,31240],{"class":47,"line":2699},[45,31235,31182],{"class":51},[45,31237,254],{"class":93},[45,31239,30904],{"class":257},[45,31241,31242],{"class":51},".flatten(x)\n",[45,31244,31245,31247,31249,31251,31253,31255],{"class":47,"line":2704},[45,31246,31182],{"class":51},[45,31248,254],{"class":93},[45,31250,30904],{"class":257},[45,31252,31189],{"class":51},[45,31254,30904],{"class":257},[45,31256,31257],{"class":51},".f5(x))\n",[45,31259,31260,31262,31264,31266,31268,31270],{"class":47,"line":8031},[45,31261,31182],{"class":51},[45,31263,254],{"class":93},[45,31265,30904],{"class":257},[45,31267,31189],{"class":51},[45,31269,30904],{"class":257},[45,31271,31272],{"class":51},".f6(x))\n",[45,31274,31275,31277,31279,31281],{"class":47,"line":8055},[45,31276,31182],{"class":51},[45,31278,254],{"class":93},[45,31280,30904],{"class":257},[45,31282,31283],{"class":51},".f7(x)\n",[45,31285,31286,31288],{"class":47,"line":8060},[45,31287,14835],{"class":93},[45,31289,31290],{"class":51}," x\n",[45,31292,31293],{"class":47,"line":8066},[45,31294,2483],{"emptyLinePlaceholder":133},[45,31296,31297,31299,31302,31304,31307],{"class":47,"line":8093},[45,31298,1614],{"class":93},[45,31300,31301],{"class":257}," __name__",[45,31303,3032],{"class":93},[45,31305,31306],{"class":313},"\"__main__\"",[45,31308,3822],{"class":51},[45,31310,31311],{"class":47,"line":8098},[45,31312,31313],{"class":267},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[45,31315,31316,31319,31321,31323,31326,31328,31331,31333,31335],{"class":47,"line":8104},[45,31317,31318],{"class":51},"    device",[45,31320,254],{"class":93},[45,31322,30532],{"class":51},[45,31324,31325],{"class":313},"\"cuda\"",[45,31327,1787],{"class":93},[45,31329,31330],{"class":51}," torch.cuda.is_available() ",[45,31332,1784],{"class":93},[45,31334,30557],{"class":313},[45,31336,215],{"class":51},[45,31338,31339],{"class":47,"line":8116},[45,31340,31341],{"class":267},"    # 如果就是想指定用cpu用下方代码:\n",[45,31343,31344],{"class":47,"line":8128},[45,31345,31346],{"class":267},"    # device=\"cpu\"\n",[45,31348,31349],{"class":47,"line":8140},[45,31350,31351],{"class":267},"    # print(device)\n",[45,31353,31354],{"class":47,"line":9799},[45,31355,2483],{"emptyLinePlaceholder":133},[45,31357,31358],{"class":47,"line":9824},[45,31359,31360],{"class":267},"    # 实例化模型\n",[45,31362,31363],{"class":47,"line":9847},[45,31364,31365],{"class":267},"    # 将模型放到设备中去运行\n",[45,31367,31368,31371,31373],{"class":47,"line":9871},[45,31369,31370],{"class":51},"    model",[45,31372,254],{"class":93},[45,31374,31375],{"class":51},"LeNet().to(device)\n",[45,31377,31378,31381,31384,31386,31388,31390,31392,31394],{"class":47,"line":9876},[45,31379,31380],{"class":257},"    print",[45,31382,31383],{"class":51},"(summary(model,(",[45,31385,426],{"class":257},[45,31387,586],{"class":51},[45,31389,1108],{"class":257},[45,31391,586],{"class":51},[45,31393,1108],{"class":257},[45,31395,31396],{"class":51},")))\n",[10,31398,31399],{},[1545,31400],{"alt":40,"src":31401},"\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",[10,31403,31404],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[159,31406,31407],{"start":125},[162,31408,31409],{},"训练",[10,31411,31412],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[10,31414,31415],{},"在训练之前可以将数据展示看一下",[35,31417,31419],{"className":37,"code":31418,"language":39,"meta":40,"style":40},"# 建立画图的函数，用于展示数据\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",[42,31420,31421,31426,31431,31443,31455,31468,31473,31485,31490,31502,31507,31519,31523,31527,31548,31560,31565,31586,31597,31601,31606,31624,31635,31640,31651,31656,31667,31671,31676,31691,31704,31709,31714,31727,31740,31753,31758,31762,31767,31787,31804,31824,31837,31850,31860,31875],{"__ignoreMap":40},[45,31422,31423],{"class":47,"line":48},[45,31424,31425],{"class":267},"# 建立画图的函数，用于展示数据\n",[45,31427,31428],{"class":47,"line":125},[45,31429,31430],{"class":267},"# torchvision中包含很多内置的数据集\n",[45,31432,31433,31435,31438,31440],{"class":47,"line":1262},[45,31434,30818],{"class":93},[45,31436,31437],{"class":51}," sklearn.externals.array_api_compat.torch ",[45,31439,30473],{"class":93},[45,31441,31442],{"class":51}," squeeze\n",[45,31444,31445,31447,31450,31452],{"class":47,"line":1277},[45,31446,30818],{"class":93},[45,31448,31449],{"class":51}," torchvision.datasets ",[45,31451,30473],{"class":93},[45,31453,31454],{"class":51}," FashionMNIST\n",[45,31456,31457,31459,31462,31465],{"class":47,"line":1283},[45,31458,30473],{"class":93},[45,31460,31461],{"class":51}," numpy ",[45,31463,31464],{"class":93},"as",[45,31466,31467],{"class":51}," np\n",[45,31469,31470],{"class":47,"line":1297},[45,31471,31472],{"class":267},"# 引入处理数据集的包\n",[45,31474,31475,31477,31480,31482],{"class":47,"line":1303},[45,31476,30818],{"class":93},[45,31478,31479],{"class":51}," torchvision ",[45,31481,30473],{"class":93},[45,31483,31484],{"class":51}," transforms\n",[45,31486,31487],{"class":47,"line":1394},[45,31488,31489],{"class":267},"# 从torch库中引入数据处理的包\n",[45,31491,31492,31494,31497,31499],{"class":47,"line":1400},[45,31493,30473],{"class":93},[45,31495,31496],{"class":51}," torch.utils.data ",[45,31498,31464],{"class":93},[45,31500,31501],{"class":51}," Data\n",[45,31503,31504],{"class":47,"line":1412},[45,31505,31506],{"class":267},"# 导入画图的库\n",[45,31508,31509,31511,31514,31516],{"class":47,"line":1695},[45,31510,30473],{"class":93},[45,31512,31513],{"class":51}," matplotlib.pyplot ",[45,31515,31464],{"class":93},[45,31517,31518],{"class":51}," plt\n",[45,31520,31521],{"class":47,"line":1700},[45,31522,2483],{"emptyLinePlaceholder":133},[45,31524,31525],{"class":47,"line":1706},[45,31526,2483],{"emptyLinePlaceholder":133},[45,31528,31529,31532,31534,31537,31540,31542,31545],{"class":47,"line":1711},[45,31530,31531],{"class":51},"train_data",[45,31533,254],{"class":93},[45,31535,31536],{"class":51},"FashionMNIST(",[45,31538,31539],{"class":5299},"root",[45,31541,254],{"class":93},[45,31543,31544],{"class":313},"'.\u002Fdata'",[45,31546,31547],{"class":51},",\n",[45,31549,31550,31553,31555,31558],{"class":47,"line":1725},[45,31551,31552],{"class":5299},"                        train",[45,31554,254],{"class":93},[45,31556,31557],{"class":257},"True",[45,31559,31547],{"class":51},[45,31561,31562],{"class":47,"line":1730},[45,31563,31564],{"class":267},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[45,31566,31567,31570,31572,31575,31578,31580,31583],{"class":47,"line":1736},[45,31568,31569],{"class":5299},"                        transform",[45,31571,254],{"class":93},[45,31573,31574],{"class":51},"transforms.Compose([transforms.Resize(",[45,31576,31577],{"class":5299},"size",[45,31579,254],{"class":93},[45,31581,31582],{"class":257},"224",[45,31584,31585],{"class":51},"),transforms.ToTensor()]),\n",[45,31587,31588,31591,31593,31595],{"class":47,"line":1757},[45,31589,31590],{"class":5299},"                        download",[45,31592,254],{"class":93},[45,31594,31557],{"class":257},[45,31596,215],{"class":51},[45,31598,31599],{"class":47,"line":1762},[45,31600,2483],{"emptyLinePlaceholder":133},[45,31602,31603],{"class":47,"line":1776},[45,31604,31605],{"class":267},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[45,31607,31608,31611,31613,31616,31619,31621],{"class":47,"line":1781},[45,31609,31610],{"class":51},"train_loader",[45,31612,254],{"class":93},[45,31614,31615],{"class":51},"Data.DataLoader(",[45,31617,31618],{"class":5299},"dataset",[45,31620,254],{"class":93},[45,31622,31623],{"class":51},"train_data,\n",[45,31625,31626,31629,31631,31633],{"class":47,"line":1810},[45,31627,31628],{"class":5299},"                             batch_size",[45,31630,254],{"class":93},[45,31632,412],{"class":257},[45,31634,31547],{"class":51},[45,31636,31637],{"class":47,"line":1815},[45,31638,31639],{"class":267},"                             # 数据是否打乱\n",[45,31641,31642,31645,31647,31649],{"class":47,"line":1832},[45,31643,31644],{"class":5299},"                             shuffle",[45,31646,254],{"class":93},[45,31648,31557],{"class":257},[45,31650,31547],{"class":51},[45,31652,31653],{"class":47,"line":1837},[45,31654,31655],{"class":267},"                             # 规定加载数据的进程\n",[45,31657,31658,31661,31663,31665],{"class":47,"line":1842},[45,31659,31660],{"class":5299},"                             num_workers",[45,31662,254],{"class":93},[45,31664,400],{"class":257},[45,31666,215],{"class":51},[45,31668,31669],{"class":47,"line":1847},[45,31670,2483],{"emptyLinePlaceholder":133},[45,31672,31673],{"class":47,"line":1861},[45,31674,31675],{"class":267},"# 获得一个batch的数据\n",[45,31677,31678,31680,31683,31685,31688],{"class":47,"line":1866},[45,31679,3108],{"class":93},[45,31681,31682],{"class":51}," step,(b_x,b_y) ",[45,31684,26126],{"class":93},[45,31686,31687],{"class":257}," enumerate",[45,31689,31690],{"class":51},"(train_loader):\n",[45,31692,31693,31695,31698,31700,31702],{"class":47,"line":2660},[45,31694,3184],{"class":93},[45,31696,31697],{"class":51}," step ",[45,31699,1167],{"class":93},[45,31701,4176],{"class":257},[45,31703,3822],{"class":51},[45,31705,31706],{"class":47,"line":2674},[45,31707,31708],{"class":93},"        break\n",[45,31710,31711],{"class":47,"line":2682},[45,31712,31713],{"class":267},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[45,31715,31716,31719,31721,31724],{"class":47,"line":2687},[45,31717,31718],{"class":51},"batch_x",[45,31720,254],{"class":93},[45,31722,31723],{"class":51},"b_x.squeeze().numpy()  ",[45,31725,31726],{"class":267},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[45,31728,31729,31732,31734,31737],{"class":47,"line":2693},[45,31730,31731],{"class":51},"batch_y",[45,31733,254],{"class":93},[45,31735,31736],{"class":51},"b_y.numpy()   ",[45,31738,31739],{"class":267},"#将张量转换成功numpy数组\n",[45,31741,31742,31745,31747,31750],{"class":47,"line":2699},[45,31743,31744],{"class":51},"class_label",[45,31746,254],{"class":93},[45,31748,31749],{"class":51},"train_data.classes  ",[45,31751,31752],{"class":267},"#训练集标签\n",[45,31754,31755],{"class":47,"line":2704},[45,31756,31757],{"class":267},"# print(class_label)\n",[45,31759,31760],{"class":47,"line":8031},[45,31761,2483],{"emptyLinePlaceholder":133},[45,31763,31764],{"class":47,"line":8055},[45,31765,31766],{"class":267},"# 可视化一个batch的图像\n",[45,31768,31769,31772,31775,31777,31779,31781,31783,31785],{"class":47,"line":8060},[45,31770,31771],{"class":51},"plt.figure(",[45,31773,31774],{"class":5299},"figsize",[45,31776,254],{"class":93},[45,31778,209],{"class":51},[45,31780,706],{"class":257},[45,31782,586],{"class":51},[45,31784,527],{"class":257},[45,31786,30578],{"class":51},[45,31788,31789,31791,31794,31796,31799,31801],{"class":47,"line":8066},[45,31790,3108],{"class":93},[45,31792,31793],{"class":51}," ii ",[45,31795,26126],{"class":93},[45,31797,31798],{"class":51}," np.arange(",[45,31800,7441],{"class":257},[45,31802,31803],{"class":51},"(batch_y)):\n",[45,31805,31806,31809,31811,31813,31815,31818,31820,31822],{"class":47,"line":8093},[45,31807,31808],{"class":51},"    plt.subplot(",[45,31810,501],{"class":257},[45,31812,586],{"class":51},[45,31814,808],{"class":257},[45,31816,31817],{"class":51},",ii ",[45,31819,689],{"class":93},[45,31821,25201],{"class":257},[45,31823,215],{"class":51},[45,31825,31826,31829,31832,31834],{"class":47,"line":8098},[45,31827,31828],{"class":51},"    plt.imshow(batch_x[ii,:,:],",[45,31830,31831],{"class":5299},"cmap",[45,31833,254],{"class":93},[45,31835,31836],{"class":51},"plt.cm.gray)\n",[45,31838,31839,31842,31844,31846,31848],{"class":47,"line":8104},[45,31840,31841],{"class":51},"    plt.title(class_label[batch_y[ii]],",[45,31843,31577],{"class":5299},[45,31845,254],{"class":93},[45,31847,654],{"class":257},[45,31849,215],{"class":51},[45,31851,31852,31855,31858],{"class":47,"line":8116},[45,31853,31854],{"class":51},"    plt.axis(",[45,31856,31857],{"class":313},"\"off\"",[45,31859,215],{"class":51},[45,31861,31862,31865,31868,31870,31873],{"class":47,"line":8128},[45,31863,31864],{"class":51},"    plt.subplots_adjust(",[45,31866,31867],{"class":5299},"wspace",[45,31869,254],{"class":93},[45,31871,31872],{"class":257},"0.05",[45,31874,215],{"class":51},[45,31876,31877],{"class":47,"line":8140},[45,31878,31879],{"class":51},"plt.show()\n",[10,31881,31882],{},"用matplotlib进行展示的过程可以后续再补",[10,31884,31885],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[10,31887,31888],{},"训练次数就是按照批次过整个训练集数据的次数",[10,31890,31891],{},"模型训练：",[35,31893,31895],{"className":37,"code":31894,"language":39,"meta":40,"style":40},"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",[42,31896,31897,31904,31911,31915,31927,31933,31944,31954,31964,31974,31984,31989,32001,32011,32015,32019,32024,32035,32048,32059,32076,32087,32126,32142,32154,32165,32170,32181,32197,32208,32219,32230,32237,32241,32246,32251,32255,32260,32270,32291,32295,32299,32304,32309,32314,32334,32338,32343,32353,32357,32362,32371,32376,32381,32386,32396,32400,32404,32409,32414,32424,32429,32439,32444,32453,32458,32467,32472,32481,32485,32490,32500,32504,32508,32513,32528,32556,32571,32575,32580,32585,32594,32599,32608,32613,32622,32627,32636,32641,32650,32655,32664,32669,32682,32687,32697,32702,32712,32718,32724,32730,32736,32747,32753,32773,32779,32790,32796,32802,32808,32814,32820,32826,32832,32852,32858,32874,32880,32894,32900,32915,32921,32930,32936,32945,32951,32957,32966,32972,32983,32989,33008,33014,33025,33031,33051,33067,33073,33087,33093,33099,33110,33116,33122,33132,33138,33149,33155,33165,33170,33176,33225,33272,33277,33283,33302,33308,33328,33334,33340,33350,33355,33361,33377,33422,33428,33434,33440,33451,33457,33463,33469,33487,33501,33510,33519,33528,33537,33543,33549,33557,33562,33568,33579,33585,33605,33611,33617,33623,33640,33646,33652,33658,33664,33670,33697,33721,33727,33733,33739,33750,33761,33767,33784,33807,33830,33836,33841,33850,33860,33866,33871,33877,33890,33896,33907,33918,33937],{"__ignoreMap":40},[45,31898,31899,31901],{"class":47,"line":48},[45,31900,30473],{"class":93},[45,31902,31903],{"class":51}," copy\n",[45,31905,31906,31908],{"class":47,"line":125},[45,31907,30473],{"class":93},[45,31909,31910],{"class":51}," time\n",[45,31912,31913],{"class":47,"line":1262},[45,31914,2483],{"emptyLinePlaceholder":133},[45,31916,31917,31919,31922,31924],{"class":47,"line":1277},[45,31918,30473],{"class":93},[45,31920,31921],{"class":51}," pandas ",[45,31923,31464],{"class":93},[45,31925,31926],{"class":51}," pd\n",[45,31928,31929,31931],{"class":47,"line":1283},[45,31930,30473],{"class":93},[45,31932,30476],{"class":51},[45,31934,31935,31937,31939,31941],{"class":47,"line":1297},[45,31936,30818],{"class":93},[45,31938,31496],{"class":51},[45,31940,30473],{"class":93},[45,31942,31943],{"class":51}," Dataset\n",[45,31945,31946,31948,31950,31952],{"class":47,"line":1303},[45,31947,30818],{"class":93},[45,31949,31449],{"class":51},[45,31951,30473],{"class":93},[45,31953,31454],{"class":51},[45,31955,31956,31958,31960,31962],{"class":47,"line":1394},[45,31957,30818],{"class":93},[45,31959,31479],{"class":51},[45,31961,30473],{"class":93},[45,31963,31484],{"class":51},[45,31965,31966,31968,31970,31972],{"class":47,"line":1400},[45,31967,30473],{"class":93},[45,31969,31496],{"class":51},[45,31971,31464],{"class":93},[45,31973,31501],{"class":51},[45,31975,31976,31978,31980,31982],{"class":47,"line":1412},[45,31977,30473],{"class":93},[45,31979,31513],{"class":51},[45,31981,31464],{"class":93},[45,31983,31518],{"class":51},[45,31985,31986],{"class":47,"line":1695},[45,31987,31988],{"class":267},"# 导入模型\n",[45,31990,31991,31993,31996,31998],{"class":47,"line":1700},[45,31992,30818],{"class":93},[45,31994,31995],{"class":51}," model ",[45,31997,30473],{"class":93},[45,31999,32000],{"class":51}," LeNet\n",[45,32002,32003,32005,32007,32009],{"class":47,"line":1706},[45,32004,30818],{"class":93},[45,32006,30821],{"class":51},[45,32008,30473],{"class":93},[45,32010,30826],{"class":51},[45,32012,32013],{"class":47,"line":1711},[45,32014,2483],{"emptyLinePlaceholder":133},[45,32016,32017],{"class":47,"line":1725},[45,32018,2483],{"emptyLinePlaceholder":133},[45,32020,32021],{"class":47,"line":1730},[45,32022,32023],{"class":267},"# 处理训练集与验证集函数--->划分数据集\n",[45,32025,32026,32029,32032],{"class":47,"line":1736},[45,32027,32028],{"class":93},"def",[45,32030,32031],{"class":2046}," train_val_data_process",[45,32033,32034],{"class":51},"():\n",[45,32036,32037,32040,32042,32044,32046],{"class":47,"line":1757},[45,32038,32039],{"class":51},"    train_data",[45,32041,254],{"class":93},[45,32043,31536],{"class":51},[45,32045,31544],{"class":313},[45,32047,31547],{"class":51},[45,32049,32050,32053,32055,32057],{"class":47,"line":1762},[45,32051,32052],{"class":5299},"                            train",[45,32054,254],{"class":93},[45,32056,31557],{"class":257},[45,32058,31547],{"class":51},[45,32060,32061,32064,32066,32068,32070,32072,32074],{"class":47,"line":1776},[45,32062,32063],{"class":5299},"                            transform",[45,32065,254],{"class":93},[45,32067,31574],{"class":51},[45,32069,31577],{"class":5299},[45,32071,254],{"class":93},[45,32073,1108],{"class":257},[45,32075,31585],{"class":51},[45,32077,32078,32081,32083,32085],{"class":47,"line":1781},[45,32079,32080],{"class":5299},"                            download",[45,32082,254],{"class":93},[45,32084,31557],{"class":257},[45,32086,215],{"class":51},[45,32088,32089,32092,32094,32097,32100,32102,32105,32107,32109,32112,32114,32116,32119,32121,32123],{"class":47,"line":1810},[45,32090,32091],{"class":51},"    train_data,val_data",[45,32093,254],{"class":93},[45,32095,32096],{"class":51},"Data.random_split(train_data,[",[45,32098,32099],{"class":257},"round",[45,32101,209],{"class":51},[45,32103,32104],{"class":257},"0.8",[45,32106,663],{"class":93},[45,32108,7441],{"class":257},[45,32110,32111],{"class":51},"(train_data)),",[45,32113,32099],{"class":257},[45,32115,209],{"class":51},[45,32117,32118],{"class":257},"0.2",[45,32120,663],{"class":93},[45,32122,7441],{"class":257},[45,32124,32125],{"class":51},"(train_data))])\n",[45,32127,32128,32131,32133,32136,32138,32140],{"class":47,"line":1815},[45,32129,32130],{"class":51},"    train_dataloader ",[45,32132,254],{"class":93},[45,32134,32135],{"class":51}," Data.DataLoader(",[45,32137,31618],{"class":5299},[45,32139,254],{"class":93},[45,32141,31623],{"class":51},[45,32143,32144,32147,32149,32152],{"class":47,"line":1832},[45,32145,32146],{"class":5299},"                                       batch_size",[45,32148,254],{"class":93},[45,32150,32151],{"class":257},"128",[45,32153,31547],{"class":51},[45,32155,32156,32159,32161,32163],{"class":47,"line":1837},[45,32157,32158],{"class":5299},"                                       shuffle",[45,32160,254],{"class":93},[45,32162,31557],{"class":257},[45,32164,31547],{"class":51},[45,32166,32167],{"class":47,"line":1842},[45,32168,32169],{"class":267},"                                       # 规定8个进程\n",[45,32171,32172,32175,32177,32179],{"class":47,"line":1847},[45,32173,32174],{"class":5299},"                                       num_workers",[45,32176,254],{"class":93},[45,32178,603],{"class":257},[45,32180,215],{"class":51},[45,32182,32183,32186,32188,32190,32192,32194],{"class":47,"line":1861},[45,32184,32185],{"class":51},"    val_dataloader",[45,32187,254],{"class":93},[45,32189,31615],{"class":51},[45,32191,31618],{"class":5299},[45,32193,254],{"class":93},[45,32195,32196],{"class":51},"val_data,\n",[45,32198,32199,32202,32204,32206],{"class":47,"line":1866},[45,32200,32201],{"class":5299},"                                   batch_size",[45,32203,254],{"class":93},[45,32205,32151],{"class":257},[45,32207,31547],{"class":51},[45,32209,32210,32213,32215,32217],{"class":47,"line":2660},[45,32211,32212],{"class":5299},"                                   shuffle",[45,32214,254],{"class":93},[45,32216,31557],{"class":257},[45,32218,31547],{"class":51},[45,32220,32221,32224,32226,32228],{"class":47,"line":2674},[45,32222,32223],{"class":5299},"                                   num_workers",[45,32225,254],{"class":93},[45,32227,603],{"class":257},[45,32229,215],{"class":51},[45,32231,32232,32234],{"class":47,"line":2682},[45,32233,4173],{"class":93},[45,32235,32236],{"class":51}," train_dataloader,val_dataloader\n",[45,32238,32239],{"class":47,"line":2687},[45,32240,2483],{"emptyLinePlaceholder":133},[45,32242,32243],{"class":47,"line":2693},[45,32244,32245],{"class":267},"# 验证是否出错\n",[45,32247,32248],{"class":47,"line":2699},[45,32249,32250],{"class":267},"# train_val_data_process()\n",[45,32252,32253],{"class":47,"line":2704},[45,32254,2483],{"emptyLinePlaceholder":133},[45,32256,32257],{"class":47,"line":8031},[45,32258,32259],{"class":267},"# 定义模型训练函数\n",[45,32261,32262,32264,32267],{"class":47,"line":8055},[45,32263,32028],{"class":93},[45,32265,32266],{"class":2046}," train_model_process",[45,32268,32269],{"class":51},"(model,train_dataloader,val_dataloader,num_epochs):\n",[45,32271,32272,32274,32276,32278,32280,32282,32284,32286,32289],{"class":47,"line":8060},[45,32273,31318],{"class":51},[45,32275,254],{"class":93},[45,32277,30532],{"class":51},[45,32279,31325],{"class":313},[45,32281,1787],{"class":93},[45,32283,31330],{"class":51},[45,32285,1784],{"class":93},[45,32287,32288],{"class":313}," 'cpu'",[45,32290,215],{"class":51},[45,32292,32293],{"class":47,"line":8066},[45,32294,2483],{"emptyLinePlaceholder":133},[45,32296,32297],{"class":47,"line":8093},[45,32298,2483],{"emptyLinePlaceholder":133},[45,32300,32301],{"class":47,"line":8098},[45,32302,32303],{"class":267},"    # 定义优化器\n",[45,32305,32306],{"class":47,"line":8104},[45,32307,32308],{"class":267},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[45,32310,32311],{"class":47,"line":8116},[45,32312,32313],{"class":267},"    # lr为学习率\n",[45,32315,32316,32319,32321,32324,32327,32329,32332],{"class":47,"line":8128},[45,32317,32318],{"class":51},"    optimizer",[45,32320,254],{"class":93},[45,32322,32323],{"class":51},"torch.optim.Adam(model.parameters(),",[45,32325,32326],{"class":5299},"lr",[45,32328,254],{"class":93},[45,32330,32331],{"class":257},"0.001",[45,32333,215],{"class":51},[45,32335,32336],{"class":47,"line":8140},[45,32337,2483],{"emptyLinePlaceholder":133},[45,32339,32340],{"class":47,"line":9799},[45,32341,32342],{"class":267},"    # 定义损失函数使用交叉熵损失函数\n",[45,32344,32345,32348,32350],{"class":47,"line":9824},[45,32346,32347],{"class":51},"    criterion",[45,32349,254],{"class":93},[45,32351,32352],{"class":51},"nn.CrossEntropyLoss()\n",[45,32354,32355],{"class":47,"line":9847},[45,32356,2483],{"emptyLinePlaceholder":133},[45,32358,32359],{"class":47,"line":9871},[45,32360,32361],{"class":267},"    # 将模型放到GPU中进行训练\n",[45,32363,32364,32366,32368],{"class":47,"line":9876},[45,32365,31370],{"class":51},[45,32367,254],{"class":93},[45,32369,32370],{"class":51},"model.to(device)\n",[45,32372,32373],{"class":47,"line":9881},[45,32374,32375],{"class":267},"    # 复制当前模型的参数\n",[45,32377,32378],{"class":47,"line":9886},[45,32379,32380],{"class":267},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[45,32382,32383],{"class":47,"line":9895},[45,32384,32385],{"class":267},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[45,32387,32388,32391,32393],{"class":47,"line":9900},[45,32389,32390],{"class":51},"    best_model_wts",[45,32392,254],{"class":93},[45,32394,32395],{"class":51},"copy.deepcopy(model.state_dict())\n",[45,32397,32398],{"class":47,"line":9906},[45,32399,2483],{"emptyLinePlaceholder":133},[45,32401,32402],{"class":47,"line":9927},[45,32403,2483],{"emptyLinePlaceholder":133},[45,32405,32406],{"class":47,"line":9933},[45,32407,32408],{"class":267},"    # 初始化参数\n",[45,32410,32411],{"class":47,"line":9947},[45,32412,32413],{"class":267},"    # 最高准确度\n",[45,32415,32416,32419,32421],{"class":47,"line":9953},[45,32417,32418],{"class":51},"    best_acc",[45,32420,254],{"class":93},[45,32422,32423],{"class":257},"0.0\n",[45,32425,32426],{"class":47,"line":9980},[45,32427,32428],{"class":267},"    # 训练集损失列表\n",[45,32430,32431,32434,32436],{"class":47,"line":9989},[45,32432,32433],{"class":51},"    train_loss_all",[45,32435,254],{"class":93},[45,32437,32438],{"class":51},"[]\n",[45,32440,32441],{"class":47,"line":9995},[45,32442,32443],{"class":267},"    # 验证集函数列表\n",[45,32445,32446,32449,32451],{"class":47,"line":10003},[45,32447,32448],{"class":51},"    val_loss_all",[45,32450,254],{"class":93},[45,32452,32438],{"class":51},[45,32454,32455],{"class":47,"line":10008},[45,32456,32457],{"class":267},"    # 训练集准确度列表\n",[45,32459,32460,32463,32465],{"class":47,"line":16687},[45,32461,32462],{"class":51},"    train_acc_all",[45,32464,254],{"class":93},[45,32466,32438],{"class":51},[45,32468,32469],{"class":47,"line":16693},[45,32470,32471],{"class":267},"    # 验证集准确度列表\n",[45,32473,32474,32477,32479],{"class":47,"line":16716},[45,32475,32476],{"class":51},"    val_acc_all",[45,32478,254],{"class":93},[45,32480,32438],{"class":51},[45,32482,32483],{"class":47,"line":16722},[45,32484,2483],{"emptyLinePlaceholder":133},[45,32486,32487],{"class":47,"line":16745},[45,32488,32489],{"class":267},"    # 保存当前时间--->方便看每轮训练的时间\n",[45,32491,32492,32495,32497],{"class":47,"line":16759},[45,32493,32494],{"class":51},"    since",[45,32496,254],{"class":93},[45,32498,32499],{"class":51},"time.time()\n",[45,32501,32502],{"class":47,"line":16779},[45,32503,2483],{"emptyLinePlaceholder":133},[45,32505,32506],{"class":47,"line":16785},[45,32507,2483],{"emptyLinePlaceholder":133},[45,32509,32510],{"class":47,"line":16796},[45,32511,32512],{"class":267},"    # 准备工作完成--->开始训练模型\n",[45,32514,32515,32517,32520,32522,32525],{"class":47,"line":16819},[45,32516,3284],{"class":93},[45,32518,32519],{"class":51}," epoch ",[45,32521,26126],{"class":93},[45,32523,32524],{"class":257}," range",[45,32526,32527],{"class":51},"(num_epochs):\n",[45,32529,32530,32533,32535,32538,32541,32543,32545,32547,32550,32552,32554],{"class":47,"line":16841},[45,32531,32532],{"class":257},"        print",[45,32534,209],{"class":51},[45,32536,32537],{"class":313},"\"Epoch ",[45,32539,32540],{"class":257},"{}",[45,32542,791],{"class":313},[45,32544,32540],{"class":257},[45,32546,459],{"class":313},[45,32548,32549],{"class":51},".format(epoch,num_epochs",[45,32551,94],{"class":93},[45,32553,426],{"class":257},[45,32555,30578],{"class":51},[45,32557,32558,32560,32562,32565,32567,32569],{"class":47,"line":16846},[45,32559,32532],{"class":257},[45,32561,209],{"class":51},[45,32563,32564],{"class":313},"\"-\"",[45,32566,663],{"class":93},[45,32568,654],{"class":257},[45,32570,215],{"class":51},[45,32572,32573],{"class":47,"line":16852},[45,32574,2483],{"emptyLinePlaceholder":133},[45,32576,32577],{"class":47,"line":16866},[45,32578,32579],{"class":267},"        # 初始化参数\n",[45,32581,32582],{"class":47,"line":16879},[45,32583,32584],{"class":267},"        # 训练集损失函数\n",[45,32586,32587,32590,32592],{"class":47,"line":16884},[45,32588,32589],{"class":51},"        train_loss",[45,32591,254],{"class":93},[45,32593,32423],{"class":257},[45,32595,32596],{"class":47,"line":16898},[45,32597,32598],{"class":267},"        # 训练集准确度\n",[45,32600,32601,32604,32606],{"class":47,"line":16903},[45,32602,32603],{"class":51},"        train_corrects",[45,32605,254],{"class":93},[45,32607,3168],{"class":257},[45,32609,32610],{"class":47,"line":16909},[45,32611,32612],{"class":267},"        # 验证集损失函数\n",[45,32614,32615,32618,32620],{"class":47,"line":16914},[45,32616,32617],{"class":51},"        val_loss",[45,32619,254],{"class":93},[45,32621,32423],{"class":257},[45,32623,32624],{"class":47,"line":16928},[45,32625,32626],{"class":267},"        # 验证集准确度\n",[45,32628,32629,32632,32634],{"class":47,"line":16933},[45,32630,32631],{"class":51},"        val_corrects",[45,32633,254],{"class":93},[45,32635,3168],{"class":257},[45,32637,32638],{"class":47,"line":16938},[45,32639,32640],{"class":267},"        # 训练集样本数量\n",[45,32642,32643,32646,32648],{"class":47,"line":16952},[45,32644,32645],{"class":51},"        train_num",[45,32647,254],{"class":93},[45,32649,3168],{"class":257},[45,32651,32652],{"class":47,"line":16964},[45,32653,32654],{"class":267},"        # 验证集样本数量\n",[45,32656,32657,32660,32662],{"class":47,"line":16969},[45,32658,32659],{"class":51},"        val_num",[45,32661,254],{"class":93},[45,32663,3168],{"class":257},[45,32665,32666],{"class":47,"line":16982},[45,32667,32668],{"class":267},"        # 将数据放到设备,并开始训练\n",[45,32670,32671,32673,32675,32677,32679],{"class":47,"line":16987},[45,32672,3486],{"class":93},[45,32674,31682],{"class":51},[45,32676,26126],{"class":93},[45,32678,31687],{"class":257},[45,32680,32681],{"class":51},"(train_dataloader):\n",[45,32683,32684],{"class":47,"line":16992},[45,32685,32686],{"class":267},"            # 将特征放入到训练设备\n",[45,32688,32689,32692,32694],{"class":47,"line":16997},[45,32690,32691],{"class":51},"            b_x",[45,32693,254],{"class":93},[45,32695,32696],{"class":51},"b_x.to(device)\n",[45,32698,32699],{"class":47,"line":17010},[45,32700,32701],{"class":267},"            # 将标签放入到训练设备当中\n",[45,32703,32704,32707,32709],{"class":47,"line":17015},[45,32705,32706],{"class":51},"            b_y",[45,32708,254],{"class":93},[45,32710,32711],{"class":51},"b_y.to(device)\n",[45,32713,32715],{"class":47,"line":32714},98,[45,32716,32717],{"class":267},"            # 设置模型为训练模式\n",[45,32719,32721],{"class":47,"line":32720},99,[45,32722,32723],{"class":51},"            model.train()\n",[45,32725,32727],{"class":47,"line":32726},100,[45,32728,32729],{"class":267},"            # 将数据放到模型当中,开始前向传播\n",[45,32731,32733],{"class":47,"line":32732},101,[45,32734,32735],{"class":267},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[45,32737,32739,32742,32744],{"class":47,"line":32738},102,[45,32740,32741],{"class":51},"            output",[45,32743,254],{"class":93},[45,32745,32746],{"class":51},"model(b_x)\n",[45,32748,32750],{"class":47,"line":32749},103,[45,32751,32752],{"class":267},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[45,32754,32756,32759,32761,32764,32767,32769,32771],{"class":47,"line":32755},104,[45,32757,32758],{"class":51},"            pre_lab",[45,32760,254],{"class":93},[45,32762,32763],{"class":51},"torch.argmax(output,",[45,32765,32766],{"class":5299},"dim",[45,32768,254],{"class":93},[45,32770,426],{"class":257},[45,32772,215],{"class":51},[45,32774,32776],{"class":47,"line":32775},105,[45,32777,32778],{"class":267},"            # 计算每一个batch的损失函数\n",[45,32780,32782,32785,32787],{"class":47,"line":32781},106,[45,32783,32784],{"class":51},"            loss",[45,32786,254],{"class":93},[45,32788,32789],{"class":51},"criterion(output,b_y)\n",[45,32791,32793],{"class":47,"line":32792},107,[45,32794,32795],{"class":267},"            # 将梯度初始化为0\n",[45,32797,32799],{"class":47,"line":32798},108,[45,32800,32801],{"class":51},"            optimizer.zero_grad()\n",[45,32803,32805],{"class":47,"line":32804},109,[45,32806,32807],{"class":267},"            # 梯度置为0后再进行反向传播\n",[45,32809,32811],{"class":47,"line":32810},110,[45,32812,32813],{"class":51},"            loss.backward()\n",[45,32815,32817],{"class":47,"line":32816},111,[45,32818,32819],{"class":267},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[45,32821,32823],{"class":47,"line":32822},112,[45,32824,32825],{"class":51},"            optimizer.step()\n",[45,32827,32829],{"class":47,"line":32828},113,[45,32830,32831],{"class":267},"            # loss.item()指的是batch的平均损失\n",[45,32833,32835,32838,32840,32843,32845,32848,32850],{"class":47,"line":32834},114,[45,32836,32837],{"class":51},"            train_loss",[45,32839,9560],{"class":93},[45,32841,32842],{"class":51},"loss.item()",[45,32844,663],{"class":93},[45,32846,32847],{"class":51},"b_x.size(",[45,32849,400],{"class":257},[45,32851,215],{"class":51},[45,32853,32855],{"class":47,"line":32854},115,[45,32856,32857],{"class":267},"            # 计算每个批次中正确预测的数量\n",[45,32859,32861,32864,32866,32869,32871],{"class":47,"line":32860},116,[45,32862,32863],{"class":51},"            train_corrects",[45,32865,9560],{"class":93},[45,32867,32868],{"class":51},"torch.sum(pre_lab",[45,32870,3032],{"class":93},[45,32872,32873],{"class":51},"b_y.data)\n",[45,32875,32877],{"class":47,"line":32876},117,[45,32878,32879],{"class":267},"            # 计算目前为止一共处理了多少样本\n",[45,32881,32883,32886,32888,32890,32892],{"class":47,"line":32882},118,[45,32884,32885],{"class":51},"            train_num",[45,32887,9560],{"class":93},[45,32889,32847],{"class":51},[45,32891,400],{"class":257},[45,32893,215],{"class":51},[45,32895,32897],{"class":47,"line":32896},119,[45,32898,32899],{"class":267},"        # 验证数据\n",[45,32901,32903,32905,32908,32910,32912],{"class":47,"line":32902},120,[45,32904,3486],{"class":93},[45,32906,32907],{"class":51}," step ,(b_x,b_y) ",[45,32909,26126],{"class":93},[45,32911,31687],{"class":257},[45,32913,32914],{"class":51},"(val_dataloader):\n",[45,32916,32918],{"class":47,"line":32917},121,[45,32919,32920],{"class":267},"            # 将特征放到验证设备当中\n",[45,32922,32924,32926,32928],{"class":47,"line":32923},122,[45,32925,32691],{"class":51},[45,32927,254],{"class":93},[45,32929,32696],{"class":51},[45,32931,32933],{"class":47,"line":32932},123,[45,32934,32935],{"class":267},"            # 将标签放到放到训练设备当中\n",[45,32937,32939,32941,32943],{"class":47,"line":32938},124,[45,32940,32706],{"class":51},[45,32942,254],{"class":93},[45,32944,32711],{"class":51},[45,32946,32948],{"class":47,"line":32947},125,[45,32949,32950],{"class":267},"            # 开启验证模式，设置模型为评估模式\n",[45,32952,32954],{"class":47,"line":32953},126,[45,32955,32956],{"class":51},"            model.eval()\n",[45,32958,32960,32963],{"class":47,"line":32959},127,[45,32961,32962],{"class":93},"            with",[45,32964,32965],{"class":51}," torch.no_grad():\n",[45,32967,32969],{"class":47,"line":32968},128,[45,32970,32971],{"class":267},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[45,32973,32975,32978,32980],{"class":47,"line":32974},129,[45,32976,32977],{"class":51},"                output ",[45,32979,254],{"class":93},[45,32981,32982],{"class":51}," model(b_x)\n",[45,32984,32986],{"class":47,"line":32985},130,[45,32987,32988],{"class":267},"                # 查找每一行中最大值对应的下标\n",[45,32990,32992,32995,32997,33000,33002,33004,33006],{"class":47,"line":32991},131,[45,32993,32994],{"class":51},"                pre_lab ",[45,32996,254],{"class":93},[45,32998,32999],{"class":51}," torch.argmax(output, ",[45,33001,32766],{"class":5299},[45,33003,254],{"class":93},[45,33005,426],{"class":257},[45,33007,215],{"class":51},[45,33009,33011],{"class":47,"line":33010},132,[45,33012,33013],{"class":267},"                # 计算验证集上的当前 batch 损失\n",[45,33015,33017,33020,33022],{"class":47,"line":33016},133,[45,33018,33019],{"class":51},"                val_batch_loss ",[45,33021,254],{"class":93},[45,33023,33024],{"class":51}," criterion(output, b_y)\n",[45,33026,33028],{"class":47,"line":33027},134,[45,33029,33030],{"class":267},"                # 对损失函数进行累加（按样本数加权）\n",[45,33032,33034,33037,33039,33042,33044,33047,33049],{"class":47,"line":33033},135,[45,33035,33036],{"class":51},"                val_loss ",[45,33038,9560],{"class":93},[45,33040,33041],{"class":51}," val_batch_loss.item() ",[45,33043,663],{"class":93},[45,33045,33046],{"class":51}," b_x.size(",[45,33048,400],{"class":257},[45,33050,215],{"class":51},[45,33052,33054,33057,33059,33062,33064],{"class":47,"line":33053},136,[45,33055,33056],{"class":51},"                val_corrects ",[45,33058,9560],{"class":93},[45,33060,33061],{"class":51}," torch.sum(pre_lab ",[45,33063,3032],{"class":93},[45,33065,33066],{"class":51}," b_y.data)\n",[45,33068,33070],{"class":47,"line":33069},137,[45,33071,33072],{"class":267},"                # 当前用于验证的样本数量\n",[45,33074,33076,33079,33081,33083,33085],{"class":47,"line":33075},138,[45,33077,33078],{"class":51},"            val_num ",[45,33080,9560],{"class":93},[45,33082,33046],{"class":51},[45,33084,400],{"class":257},[45,33086,215],{"class":51},[45,33088,33090],{"class":47,"line":33089},139,[45,33091,33092],{"class":267},"        # 计算并保存每一次迭代的loss值和准确率\n",[45,33094,33096],{"class":47,"line":33095},140,[45,33097,33098],{"class":267},"        # 计算并保存训练集的loss值\n",[45,33100,33102,33105,33107],{"class":47,"line":33101},141,[45,33103,33104],{"class":51},"        train_loss_all.append(train_loss",[45,33106,791],{"class":93},[45,33108,33109],{"class":51},"train_num)\n",[45,33111,33113],{"class":47,"line":33112},142,[45,33114,33115],{"class":267},"        # 取双精度\n",[45,33117,33119],{"class":47,"line":33118},143,[45,33120,33121],{"class":267},"        # 计算并保存训练集的准确率\n",[45,33123,33125,33128,33130],{"class":47,"line":33124},144,[45,33126,33127],{"class":51},"        train_acc_all.append(train_corrects.double().item()",[45,33129,791],{"class":93},[45,33131,33109],{"class":51},[45,33133,33135],{"class":47,"line":33134},145,[45,33136,33137],{"class":267},"        # 计算并保存验证集的loss值\n",[45,33139,33141,33144,33146],{"class":47,"line":33140},146,[45,33142,33143],{"class":51},"        val_loss_all.append(val_loss",[45,33145,791],{"class":93},[45,33147,33148],{"class":51},"val_num)\n",[45,33150,33152],{"class":47,"line":33151},147,[45,33153,33154],{"class":267},"        # 计算并保存验证集的准确率\n",[45,33156,33158,33161,33163],{"class":47,"line":33157},148,[45,33159,33160],{"class":51},"        val_acc_all.append(val_corrects.double().item()",[45,33162,791],{"class":93},[45,33164,33148],{"class":51},[45,33166,33168],{"class":47,"line":33167},149,[45,33169,2483],{"emptyLinePlaceholder":133},[45,33171,33173],{"class":47,"line":33172},150,[45,33174,33175],{"class":267},"        # 打印训练一轮的loss值和准确率\n",[45,33177,33179,33181,33183,33185,33187,33190,33192,33195,33197,33200,33202,33204,33206,33208,33211,33213,33215,33218,33220,33222],{"class":47,"line":33178},151,[45,33180,32532],{"class":257},[45,33182,209],{"class":51},[45,33184,3675],{"class":313},[45,33186,32540],{"class":257},[45,33188,33189],{"class":313},"train loss:",[45,33191,1103],{"class":257},[45,33193,33194],{"class":93},":.4f",[45,33196,1153],{"class":257},[45,33198,33199],{"class":313}," train acc:",[45,33201,1103],{"class":257},[45,33203,33194],{"class":93},[45,33205,1153],{"class":257},[45,33207,3675],{"class":313},[45,33209,33210],{"class":51},".format(epoch,train_loss_all[",[45,33212,94],{"class":93},[45,33214,426],{"class":257},[45,33216,33217],{"class":51},"],train_acc_all[",[45,33219,94],{"class":93},[45,33221,426],{"class":257},[45,33223,33224],{"class":51},"]))\n",[45,33226,33228,33230,33232,33234,33236,33239,33241,33243,33245,33248,33250,33252,33254,33256,33259,33261,33263,33266,33268,33270],{"class":47,"line":33227},152,[45,33229,32532],{"class":257},[45,33231,209],{"class":51},[45,33233,3675],{"class":313},[45,33235,32540],{"class":257},[45,33237,33238],{"class":313},"val loss:",[45,33240,1103],{"class":257},[45,33242,33194],{"class":93},[45,33244,1153],{"class":257},[45,33246,33247],{"class":313}," val acc:",[45,33249,1103],{"class":257},[45,33251,33194],{"class":93},[45,33253,1153],{"class":257},[45,33255,3675],{"class":313},[45,33257,33258],{"class":51},".format(epoch,val_loss_all[",[45,33260,94],{"class":93},[45,33262,426],{"class":257},[45,33264,33265],{"class":51},"],val_acc_all[",[45,33267,94],{"class":93},[45,33269,426],{"class":257},[45,33271,33224],{"class":51},[45,33273,33275],{"class":47,"line":33274},153,[45,33276,2483],{"emptyLinePlaceholder":133},[45,33278,33280],{"class":47,"line":33279},154,[45,33281,33282],{"class":267},"        # 判断准确度--->保存最优模型\n",[45,33284,33286,33288,33291,33293,33295,33297,33299],{"class":47,"line":33285},155,[45,33287,2580],{"class":93},[45,33289,33290],{"class":51}," val_acc_all[",[45,33292,94],{"class":93},[45,33294,426],{"class":257},[45,33296,1147],{"class":51},[45,33298,1167],{"class":93},[45,33300,33301],{"class":51},"best_acc:\n",[45,33303,33305],{"class":47,"line":33304},156,[45,33306,33307],{"class":267},"            # 保存当前模型准确度\n",[45,33309,33311,33314,33316,33318,33321,33323,33325],{"class":47,"line":33310},157,[45,33312,33313],{"class":51},"            best_acc:",[45,33315,248],{"class":257},[45,33317,254],{"class":93},[45,33319,33320],{"class":51},"val_acc_all[",[45,33322,94],{"class":93},[45,33324,426],{"class":257},[45,33326,33327],{"class":51},"]\n",[45,33329,33331],{"class":47,"line":33330},158,[45,33332,33333],{"class":267},"            # 保存当前的准确度\n",[45,33335,33337],{"class":47,"line":33336},159,[45,33338,33339],{"class":267},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[45,33341,33343,33346,33348],{"class":47,"line":33342},160,[45,33344,33345],{"class":51},"            best_model_wts",[45,33347,254],{"class":93},[45,33349,32395],{"class":51},[45,33351,33353],{"class":47,"line":33352},161,[45,33354,2483],{"emptyLinePlaceholder":133},[45,33356,33358],{"class":47,"line":33357},162,[45,33359,33360],{"class":267},"        # 计算耗时\n",[45,33362,33364,33367,33369,33372,33374],{"class":47,"line":33363},163,[45,33365,33366],{"class":51},"        time_use",[45,33368,254],{"class":93},[45,33370,33371],{"class":51},"time.time()",[45,33373,94],{"class":93},[45,33375,33376],{"class":51},"since\n",[45,33378,33380,33382,33384,33387,33389,33392,33394,33396,33398,33400,33402,33405,33408,33411,33413,33416,33418,33420],{"class":47,"line":33379},164,[45,33381,32532],{"class":257},[45,33383,209],{"class":51},[45,33385,33386],{"class":313},"'训练和验证耗费的时间",[45,33388,1103],{"class":257},[45,33390,33391],{"class":93},":.0f",[45,33393,1153],{"class":257},[45,33395,751],{"class":313},[45,33397,1103],{"class":257},[45,33399,33391],{"class":93},[45,33401,1153],{"class":257},[45,33403,33404],{"class":313},"s'",[45,33406,33407],{"class":51},".format(time_use",[45,33409,33410],{"class":93},"\u002F\u002F",[45,33412,1114],{"class":257},[45,33414,33415],{"class":51},",time_use",[45,33417,536],{"class":93},[45,33419,1114],{"class":257},[45,33421,30578],{"class":51},[45,33423,33425],{"class":47,"line":33424},165,[45,33426,33427],{"class":267},"    # 选择最优参数\n",[45,33429,33431],{"class":47,"line":33430},166,[45,33432,33433],{"class":267},"    # 加载最高准确率下的模型参数\n",[45,33435,33437],{"class":47,"line":33436},167,[45,33438,33439],{"class":267},"    # model.load_state_dict(best_model_wts)\n",[45,33441,33443,33446,33449],{"class":47,"line":33442},168,[45,33444,33445],{"class":51},"    torch.save(model.state_dict(best_model_wts), ",[45,33447,33448],{"class":313},"'.\u002Fbest_model.pth'",[45,33450,215],{"class":51},[45,33452,33454],{"class":47,"line":33453},169,[45,33455,33456],{"class":267},"    # 或者写成\n",[45,33458,33460],{"class":47,"line":33459},170,[45,33461,33462],{"class":267},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[45,33464,33466],{"class":47,"line":33465},171,[45,33467,33468],{"class":267},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[45,33470,33472,33475,33477,33480,33483,33485],{"class":47,"line":33471},172,[45,33473,33474],{"class":51},"    train_process",[45,33476,254],{"class":93},[45,33478,33479],{"class":51},"pd.DataFrame(",[45,33481,33482],{"class":5299},"data",[45,33484,254],{"class":93},[45,33486,1629],{"class":51},[45,33488,33490,33493,33495,33498],{"class":47,"line":33489},173,[45,33491,33492],{"class":313},"        \"epoch\"",[45,33494,1066],{"class":51},[45,33496,33497],{"class":257},"range",[45,33499,33500],{"class":51},"(num_epochs),\n",[45,33502,33504,33507],{"class":47,"line":33503},174,[45,33505,33506],{"class":313},"        \"train_loss_all\"",[45,33508,33509],{"class":51},":train_loss_all,\n",[45,33511,33513,33516],{"class":47,"line":33512},175,[45,33514,33515],{"class":313},"        \"val_loss_all\"",[45,33517,33518],{"class":51},":val_loss_all,\n",[45,33520,33522,33525],{"class":47,"line":33521},176,[45,33523,33524],{"class":313},"        \"train_acc_all\"",[45,33526,33527],{"class":51},":train_acc_all,\n",[45,33529,33531,33534],{"class":47,"line":33530},177,[45,33532,33533],{"class":313},"        \"val_acc_all\"",[45,33535,33536],{"class":51},":val_acc_all\n",[45,33538,33540],{"class":47,"line":33539},178,[45,33541,33542],{"class":51},"    })\n",[45,33544,33546],{"class":47,"line":33545},179,[45,33547,33548],{"class":267},"    # 返回训练保存的过程\n",[45,33550,33552,33554],{"class":47,"line":33551},180,[45,33553,4173],{"class":93},[45,33555,33556],{"class":51}," train_process\n",[45,33558,33560],{"class":47,"line":33559},181,[45,33561,2483],{"emptyLinePlaceholder":133},[45,33563,33565],{"class":47,"line":33564},182,[45,33566,33567],{"class":267},"# 将loss值和精度按照图片的形式展示出来\n",[45,33569,33571,33573,33576],{"class":47,"line":33570},183,[45,33572,32028],{"class":93},[45,33574,33575],{"class":2046}," matplot_acc_loss",[45,33577,33578],{"class":51},"(train_process):\n",[45,33580,33582],{"class":47,"line":33581},184,[45,33583,33584],{"class":267},"    # 设置图的大小\n",[45,33586,33588,33591,33593,33595,33597,33599,33601,33603],{"class":47,"line":33587},185,[45,33589,33590],{"class":51},"    plt.figure(",[45,33592,31774],{"class":5299},[45,33594,254],{"class":93},[45,33596,209],{"class":51},[45,33598,706],{"class":257},[45,33600,586],{"class":51},[45,33602,501],{"class":257},[45,33604,30578],{"class":51},[45,33606,33608],{"class":47,"line":33607},186,[45,33609,33610],{"class":267},"    # 设置图中有几张图\n",[45,33612,33614],{"class":47,"line":33613},187,[45,33615,33616],{"class":267},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[45,33618,33620],{"class":47,"line":33619},188,[45,33621,33622],{"class":267},"    # ①loss图\n",[45,33624,33626,33628,33630,33632,33634,33636,33638],{"class":47,"line":33625},189,[45,33627,31808],{"class":51},[45,33629,426],{"class":257},[45,33631,586],{"class":51},[45,33633,286],{"class":257},[45,33635,586],{"class":51},[45,33637,426],{"class":257},[45,33639,215],{"class":51},[45,33641,33643],{"class":47,"line":33642},190,[45,33644,33645],{"class":267},"    # 补充:\n",[45,33647,33649],{"class":47,"line":33648},191,[45,33650,33651],{"class":267},"    # plt.subplot(nrows, ncols, index)\n",[45,33653,33655],{"class":47,"line":33654},192,[45,33656,33657],{"class":267},"    # nrows：行数\n",[45,33659,33661],{"class":47,"line":33660},193,[45,33662,33663],{"class":267},"    # ncols：列数\n",[45,33665,33667],{"class":47,"line":33666},194,[45,33668,33669],{"class":267},"    # index：目前选中第几个子图（从1开始）\n",[45,33671,33673,33676,33679,33682,33685,33687,33690,33692,33695],{"class":47,"line":33672},195,[45,33674,33675],{"class":51},"    plt.plot(train_process[",[45,33677,33678],{"class":313},"\"epoch\"",[45,33680,33681],{"class":51},"],train_process.train_loss_all,",[45,33683,33684],{"class":313},"'ro-'",[45,33686,586],{"class":51},[45,33688,33689],{"class":5299},"label",[45,33691,254],{"class":93},[45,33693,33694],{"class":313},"'train loss'",[45,33696,215],{"class":51},[45,33698,33700,33702,33704,33707,33710,33712,33714,33716,33719],{"class":47,"line":33699},196,[45,33701,33675],{"class":51},[45,33703,33678],{"class":313},[45,33705,33706],{"class":51},"],train_process.val_loss_all,",[45,33708,33709],{"class":313},"'bs--'",[45,33711,586],{"class":51},[45,33713,33689],{"class":5299},[45,33715,254],{"class":93},[45,33717,33718],{"class":313},"'val loss'",[45,33720,215],{"class":51},[45,33722,33724],{"class":47,"line":33723},197,[45,33725,33726],{"class":267},"    # 添加一个图例\n",[45,33728,33730],{"class":47,"line":33729},198,[45,33731,33732],{"class":51},"    plt.legend()\n",[45,33734,33736],{"class":47,"line":33735},199,[45,33737,33738],{"class":267},"    # 给轴添加标签\n",[45,33740,33742,33745,33748],{"class":47,"line":33741},200,[45,33743,33744],{"class":51},"    plt.xlabel(",[45,33746,33747],{"class":313},"'epoch'",[45,33749,215],{"class":51},[45,33751,33753,33756,33759],{"class":47,"line":33752},201,[45,33754,33755],{"class":51},"    plt.ylabel(",[45,33757,33758],{"class":313},"'loss'",[45,33760,215],{"class":51},[45,33762,33764],{"class":47,"line":33763},202,[45,33765,33766],{"class":267},"    # ②准确度图\n",[45,33768,33770,33772,33774,33776,33778,33780,33782],{"class":47,"line":33769},203,[45,33771,31808],{"class":51},[45,33773,426],{"class":257},[45,33775,586],{"class":51},[45,33777,286],{"class":257},[45,33779,586],{"class":51},[45,33781,286],{"class":257},[45,33783,215],{"class":51},[45,33785,33787,33789,33791,33794,33796,33798,33800,33802,33805],{"class":47,"line":33786},204,[45,33788,33675],{"class":51},[45,33790,33678],{"class":313},[45,33792,33793],{"class":51},"],train_process.train_acc_all,",[45,33795,33684],{"class":313},[45,33797,586],{"class":51},[45,33799,33689],{"class":5299},[45,33801,254],{"class":93},[45,33803,33804],{"class":313},"'train acc'",[45,33806,215],{"class":51},[45,33808,33810,33812,33814,33817,33819,33821,33823,33825,33828],{"class":47,"line":33809},205,[45,33811,33675],{"class":51},[45,33813,33678],{"class":313},[45,33815,33816],{"class":51},"],train_process.val_acc_all,",[45,33818,33709],{"class":313},[45,33820,586],{"class":51},[45,33822,33689],{"class":5299},[45,33824,254],{"class":93},[45,33826,33827],{"class":313},"'val acc'",[45,33829,215],{"class":51},[45,33831,33833],{"class":47,"line":33832},206,[45,33834,33835],{"class":267},"    # 添加图例\n",[45,33837,33839],{"class":47,"line":33838},207,[45,33840,33732],{"class":51},[45,33842,33844,33846,33848],{"class":47,"line":33843},208,[45,33845,33744],{"class":51},[45,33847,33678],{"class":313},[45,33849,215],{"class":51},[45,33851,33853,33855,33858],{"class":47,"line":33852},209,[45,33854,33755],{"class":51},[45,33856,33857],{"class":313},"\"acc\"",[45,33859,215],{"class":51},[45,33861,33863],{"class":47,"line":33862},210,[45,33864,33865],{"class":51},"    plt.show()\n",[45,33867,33869],{"class":47,"line":33868},211,[45,33870,2483],{"emptyLinePlaceholder":133},[45,33872,33874],{"class":47,"line":33873},212,[45,33875,33876],{"class":267},"# 正式开始训练:\n",[45,33878,33880,33882,33884,33886,33888],{"class":47,"line":33879},213,[45,33881,1614],{"class":93},[45,33883,31301],{"class":257},[45,33885,3032],{"class":93},[45,33887,31306],{"class":313},[45,33889,3822],{"class":51},[45,33891,33893],{"class":47,"line":33892},214,[45,33894,33895],{"class":267},"    # 将模型实例化\n",[45,33897,33899,33902,33904],{"class":47,"line":33898},215,[45,33900,33901],{"class":51},"    LeNet",[45,33903,254],{"class":93},[45,33905,33906],{"class":51},"LeNet()\n",[45,33908,33910,33913,33915],{"class":47,"line":33909},216,[45,33911,33912],{"class":51},"    train_dataloader,val_dataloader",[45,33914,254],{"class":93},[45,33916,33917],{"class":51},"train_val_data_process()\n",[45,33919,33921,33923,33925,33928,33931,33933,33935],{"class":47,"line":33920},217,[45,33922,33474],{"class":51},[45,33924,254],{"class":93},[45,33926,33927],{"class":51},"train_model_process(LeNet,train_dataloader,val_dataloader,",[45,33929,33930],{"class":5299},"num_epochs",[45,33932,254],{"class":93},[45,33934,907],{"class":257},[45,33936,215],{"class":51},[45,33938,33940],{"class":47,"line":33939},218,[45,33941,33942],{"class":51},"    matplot_acc_loss(train_process)\n",[10,33944,33945],{},"画图的补充点学习：",[10,33947,33948],{},[1545,33949],{"alt":40,"src":33950},"\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",[159,33952,33953],{"start":1262},[162,33954,33955],{},"测试",[35,33957,33959],{"className":37,"code":33958,"language":39,"meta":40,"style":40},"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",[42,33960,33961,33967,33977,33989,33999,34004,34014,34024,34028,34033,34042,34059,34071,34088,34099,34115,34120,34131,34142,34153,34160,34164,34169,34179,34184,34201,34209,34213,34218,34227,34236,34240,34245,34250,34255,34262,34267,34279,34289,34299,34304,34308,34313,34322,34327,34343,34348,34353,34358,34372,34377,34391,34395,34400,34415,34420,34432,34436,34441,34453,34458,34466,34471,34476,34486,34491,34500,34505,34510,34514,34519,34524,34540,34548,34553,34558,34617,34623,34628,34639,34647,34655,34659,34664,34668,34673,34681,34686,34702,34707,34717,34727],{"__ignoreMap":40},[45,33962,33963,33965],{"class":47,"line":48},[45,33964,30473],{"class":93},[45,33966,30476],{"class":51},[45,33968,33969,33971,33973,33975],{"class":47,"line":125},[45,33970,30473],{"class":93},[45,33972,31496],{"class":51},[45,33974,31464],{"class":93},[45,33976,31501],{"class":51},[45,33978,33979,33981,33984,33986],{"class":47,"line":1262},[45,33980,30818],{"class":93},[45,33982,33983],{"class":51}," jupyter_client.consoleapp ",[45,33985,30473],{"class":93},[45,33987,33988],{"class":51}," classes\n",[45,33990,33991,33993,33995,33997],{"class":47,"line":1277},[45,33992,30818],{"class":93},[45,33994,31479],{"class":51},[45,33996,30473],{"class":93},[45,33998,31484],{"class":51},[45,34000,34001],{"class":47,"line":1283},[45,34002,34003],{"class":267},"# 导入数据集\n",[45,34005,34006,34008,34010,34012],{"class":47,"line":1297},[45,34007,30818],{"class":93},[45,34009,31449],{"class":51},[45,34011,30473],{"class":93},[45,34013,31454],{"class":51},[45,34015,34016,34018,34020,34022],{"class":47,"line":1303},[45,34017,30818],{"class":93},[45,34019,31995],{"class":51},[45,34021,30473],{"class":93},[45,34023,32000],{"class":51},[45,34025,34026],{"class":47,"line":1394},[45,34027,2483],{"emptyLinePlaceholder":133},[45,34029,34030],{"class":47,"line":1400},[45,34031,34032],{"class":267},"# 测试数据处理\n",[45,34034,34035,34037,34040],{"class":47,"line":1412},[45,34036,32028],{"class":93},[45,34038,34039],{"class":2046}," test_data_process",[45,34041,32034],{"class":51},[45,34043,34044,34047,34049,34051,34053,34055,34057],{"class":47,"line":1695},[45,34045,34046],{"class":51},"    test_data",[45,34048,254],{"class":93},[45,34050,31536],{"class":51},[45,34052,31539],{"class":5299},[45,34054,254],{"class":93},[45,34056,31544],{"class":313},[45,34058,31547],{"class":51},[45,34060,34061,34064,34066,34069],{"class":47,"line":1700},[45,34062,34063],{"class":5299},"                           train",[45,34065,254],{"class":93},[45,34067,34068],{"class":257},"False",[45,34070,31547],{"class":51},[45,34072,34073,34076,34078,34080,34082,34084,34086],{"class":47,"line":1706},[45,34074,34075],{"class":5299},"                           transform",[45,34077,254],{"class":93},[45,34079,31574],{"class":51},[45,34081,31577],{"class":5299},[45,34083,254],{"class":93},[45,34085,1108],{"class":257},[45,34087,31585],{"class":51},[45,34089,34090,34093,34095,34097],{"class":47,"line":1711},[45,34091,34092],{"class":5299},"                           download",[45,34094,254],{"class":93},[45,34096,31557],{"class":257},[45,34098,215],{"class":51},[45,34100,34101,34104,34106,34108,34110,34112],{"class":47,"line":1725},[45,34102,34103],{"class":51},"    test_dataloader",[45,34105,254],{"class":93},[45,34107,31615],{"class":51},[45,34109,31618],{"class":5299},[45,34111,254],{"class":93},[45,34113,34114],{"class":51},"test_data,\n",[45,34116,34117],{"class":47,"line":1730},[45,34118,34119],{"class":267},"                                    # 这里是一张一张进行测试\n",[45,34121,34122,34125,34127,34129],{"class":47,"line":1736},[45,34123,34124],{"class":5299},"                                    batch_size",[45,34126,254],{"class":93},[45,34128,426],{"class":257},[45,34130,31547],{"class":51},[45,34132,34133,34136,34138,34140],{"class":47,"line":1757},[45,34134,34135],{"class":5299},"                                    shuffle",[45,34137,254],{"class":93},[45,34139,31557],{"class":257},[45,34141,31547],{"class":51},[45,34143,34144,34147,34149,34151],{"class":47,"line":1762},[45,34145,34146],{"class":5299},"                                    num_workers",[45,34148,254],{"class":93},[45,34150,400],{"class":257},[45,34152,215],{"class":51},[45,34154,34155,34157],{"class":47,"line":1776},[45,34156,4173],{"class":93},[45,34158,34159],{"class":51}," test_dataloader\n",[45,34161,34162],{"class":47,"line":1781},[45,34163,2483],{"emptyLinePlaceholder":133},[45,34165,34166],{"class":47,"line":1810},[45,34167,34168],{"class":267},"# 定义模型测试函数\n",[45,34170,34171,34173,34176],{"class":47,"line":1815},[45,34172,32028],{"class":93},[45,34174,34175],{"class":2046}," test_model_process",[45,34177,34178],{"class":51},"(model,test_dataloader):\n",[45,34180,34181],{"class":47,"line":1832},[45,34182,34183],{"class":267},"    # 将模型放到设备当中，先进行判断\n",[45,34185,34186,34188,34190,34192,34194,34196,34198],{"class":47,"line":1837},[45,34187,31318],{"class":51},[45,34189,254],{"class":93},[45,34191,31325],{"class":313},[45,34193,1787],{"class":93},[45,34195,31330],{"class":51},[45,34197,1784],{"class":93},[45,34199,34200],{"class":313}," \"cpu\"\n",[45,34202,34203,34205,34207],{"class":47,"line":1842},[45,34204,31370],{"class":51},[45,34206,254],{"class":93},[45,34208,32370],{"class":51},[45,34210,34211],{"class":47,"line":1847},[45,34212,2483],{"emptyLinePlaceholder":133},[45,34214,34215],{"class":47,"line":1861},[45,34216,34217],{"class":267},"    # 设置初始化参数\n",[45,34219,34220,34223,34225],{"class":47,"line":1866},[45,34221,34222],{"class":51},"    test_corrects",[45,34224,254],{"class":93},[45,34226,32423],{"class":257},[45,34228,34229,34232,34234],{"class":47,"line":2660},[45,34230,34231],{"class":51},"    test_num",[45,34233,254],{"class":93},[45,34235,3168],{"class":257},[45,34237,34238],{"class":47,"line":2674},[45,34239,2483],{"emptyLinePlaceholder":133},[45,34241,34242],{"class":47,"line":2682},[45,34243,34244],{"class":267},"    # 进行模型测试\n",[45,34246,34247],{"class":47,"line":2687},[45,34248,34249],{"class":267},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[45,34251,34252],{"class":47,"line":2693},[45,34253,34254],{"class":267},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[45,34256,34257,34260],{"class":47,"line":2699},[45,34258,34259],{"class":93},"    with",[45,34261,32965],{"class":51},[45,34263,34264],{"class":47,"line":2704},[45,34265,34266],{"class":267},"        # 从数据中进行\n",[45,34268,34269,34271,34274,34276],{"class":47,"line":8031},[45,34270,3486],{"class":93},[45,34272,34273],{"class":51}," test_data_x,test_data_y ",[45,34275,26126],{"class":93},[45,34277,34278],{"class":51}," test_dataloader:\n",[45,34280,34281,34284,34286],{"class":47,"line":8055},[45,34282,34283],{"class":51},"            test_data_x",[45,34285,254],{"class":93},[45,34287,34288],{"class":51},"test_data_x.to(device)\n",[45,34290,34291,34294,34296],{"class":47,"line":8060},[45,34292,34293],{"class":51},"            test_data_y",[45,34295,254],{"class":93},[45,34297,34298],{"class":51},"test_data_y.to(device)\n",[45,34300,34301],{"class":47,"line":8066},[45,34302,34303],{"class":267},"            # 设置为验证模式\n",[45,34305,34306],{"class":47,"line":8093},[45,34307,32956],{"class":51},[45,34309,34310],{"class":47,"line":8098},[45,34311,34312],{"class":267},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[45,34314,34315,34317,34319],{"class":47,"line":8104},[45,34316,32741],{"class":51},[45,34318,254],{"class":93},[45,34320,34321],{"class":51},"model(test_data_x)\n",[45,34323,34324],{"class":47,"line":8116},[45,34325,34326],{"class":267},"            # 查找每一行中最大值对应的下标\n",[45,34328,34329,34331,34333,34335,34337,34339,34341],{"class":47,"line":8128},[45,34330,32758],{"class":51},[45,34332,254],{"class":93},[45,34334,32763],{"class":51},[45,34336,32766],{"class":5299},[45,34338,254],{"class":93},[45,34340,426],{"class":257},[45,34342,215],{"class":51},[45,34344,34345],{"class":47,"line":8140},[45,34346,34347],{"class":267},"            # 计算正确率\n",[45,34349,34350],{"class":47,"line":9799},[45,34351,34352],{"class":267},"            # .data表示是一个不带梯度信息的tensor\n",[45,34354,34355],{"class":47,"line":9824},[45,34356,34357],{"class":267},"            # 如果预测正确，则准确度test_corrects加1\n",[45,34359,34360,34363,34365,34367,34369],{"class":47,"line":9847},[45,34361,34362],{"class":51},"            test_corrects",[45,34364,9560],{"class":93},[45,34366,32868],{"class":51},[45,34368,3032],{"class":93},[45,34370,34371],{"class":51},"test_data_y.data)\n",[45,34373,34374],{"class":47,"line":9871},[45,34375,34376],{"class":267},"            # 将所有的测试样本进行累计\n",[45,34378,34379,34382,34384,34387,34389],{"class":47,"line":9876},[45,34380,34381],{"class":51},"            test_num",[45,34383,9560],{"class":93},[45,34385,34386],{"class":51},"test_data_x.size(",[45,34388,400],{"class":257},[45,34390,215],{"class":51},[45,34392,34393],{"class":47,"line":9881},[45,34394,2483],{"emptyLinePlaceholder":133},[45,34396,34397],{"class":47,"line":9886},[45,34398,34399],{"class":267},"        # 计算准确度\n",[45,34401,34402,34405,34407,34410,34412],{"class":47,"line":9895},[45,34403,34404],{"class":51},"        test_acc",[45,34406,254],{"class":93},[45,34408,34409],{"class":51},"test_corrects.double().item()",[45,34411,791],{"class":93},[45,34413,34414],{"class":51},"test_num\n",[45,34416,34417],{"class":47,"line":9900},[45,34418,34419],{"class":267},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[45,34421,34422,34424,34426,34429],{"class":47,"line":9906},[45,34423,32532],{"class":257},[45,34425,209],{"class":51},[45,34427,34428],{"class":313},"\"测试的准确率：\"",[45,34430,34431],{"class":51},",test_acc)\n",[45,34433,34434],{"class":47,"line":9927},[45,34435,2483],{"emptyLinePlaceholder":133},[45,34437,34438],{"class":47,"line":9933},[45,34439,34440],{"class":267},"# 实现模型的测试功能\n",[45,34442,34443,34445,34447,34449,34451],{"class":47,"line":9947},[45,34444,1614],{"class":93},[45,34446,31301],{"class":257},[45,34448,3032],{"class":93},[45,34450,31306],{"class":313},[45,34452,3822],{"class":51},[45,34454,34455],{"class":47,"line":9953},[45,34456,34457],{"class":267},"    # 加载模型\n",[45,34459,34460,34462,34464],{"class":47,"line":9980},[45,34461,31370],{"class":51},[45,34463,254],{"class":93},[45,34465,33906],{"class":51},[45,34467,34468],{"class":47,"line":9989},[45,34469,34470],{"class":267},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[45,34472,34473],{"class":47,"line":9995},[45,34474,34475],{"class":267},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[45,34477,34478,34481,34484],{"class":47,"line":10003},[45,34479,34480],{"class":51},"    model.load_state_dict(torch.load(",[45,34482,34483],{"class":313},"'best_model.pth'",[45,34485,30578],{"class":51},[45,34487,34488],{"class":47,"line":10008},[45,34489,34490],{"class":267},"    # 数据加载\n",[45,34492,34493,34495,34497],{"class":47,"line":16687},[45,34494,34103],{"class":51},[45,34496,254],{"class":93},[45,34498,34499],{"class":51},"test_data_process()\n",[45,34501,34502],{"class":47,"line":16693},[45,34503,34504],{"class":267},"    # 加载模型测试的函数\n",[45,34506,34507],{"class":47,"line":16716},[45,34508,34509],{"class":51},"    test_model_process(model,test_dataloader)\n",[45,34511,34512],{"class":47,"line":16722},[45,34513,2483],{"emptyLinePlaceholder":133},[45,34515,34516],{"class":47,"line":16745},[45,34517,34518],{"class":267},"    # 验证集推理实现：\n",[45,34520,34521],{"class":47,"line":16759},[45,34522,34523],{"class":267},"    # 加载数据加载的更详细一些\n",[45,34525,34526,34528,34530,34532,34534,34536,34538],{"class":47,"line":16779},[45,34527,31318],{"class":51},[45,34529,254],{"class":93},[45,34531,31325],{"class":313},[45,34533,1787],{"class":93},[45,34535,31330],{"class":51},[45,34537,1784],{"class":93},[45,34539,34200],{"class":313},[45,34541,34542,34544,34546],{"class":47,"line":16785},[45,34543,31370],{"class":51},[45,34545,254],{"class":93},[45,34547,32370],{"class":51},[45,34549,34550],{"class":47,"line":16796},[45,34551,34552],{"class":267},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[45,34554,34555],{"class":47,"line":16819},[45,34556,34557],{"class":267},"    # 顺序不可改变\n",[45,34559,34560,34563,34565,34567,34570,34572,34575,34577,34580,34582,34585,34587,34590,34592,34595,34597,34600,34602,34605,34607,34610,34612,34615],{"class":47,"line":16841},[45,34561,34562],{"class":51},"    classes",[45,34564,254],{"class":93},[45,34566,1097],{"class":51},[45,34568,34569],{"class":313},"'T-shirt\u002Ftop'",[45,34571,586],{"class":51},[45,34573,34574],{"class":313},"'Trouser'",[45,34576,586],{"class":51},[45,34578,34579],{"class":313},"'Pullover'",[45,34581,586],{"class":51},[45,34583,34584],{"class":313},"'Dress'",[45,34586,586],{"class":51},[45,34588,34589],{"class":313},"'Coat'",[45,34591,586],{"class":51},[45,34593,34594],{"class":313},"'Sandal'",[45,34596,586],{"class":51},[45,34598,34599],{"class":313},"'Shirt'",[45,34601,586],{"class":51},[45,34603,34604],{"class":313},"'Sneaker'",[45,34606,586],{"class":51},[45,34608,34609],{"class":313},"'Bag'",[45,34611,586],{"class":51},[45,34613,34614],{"class":313},"'Ankle boot'",[45,34616,33327],{"class":51},[45,34618,34619,34621],{"class":47,"line":16846},[45,34620,34259],{"class":93},[45,34622,32965],{"class":51},[45,34624,34625],{"class":47,"line":16852},[45,34626,34627],{"class":267},"        # 将数据和标签都放到设备当中\n",[45,34629,34630,34632,34635,34637],{"class":47,"line":16866},[45,34631,3486],{"class":93},[45,34633,34634],{"class":51}," b_x,b_y ",[45,34636,26126],{"class":93},[45,34638,34278],{"class":51},[45,34640,34641,34643,34645],{"class":47,"line":16879},[45,34642,32691],{"class":51},[45,34644,254],{"class":93},[45,34646,32696],{"class":51},[45,34648,34649,34651,34653],{"class":47,"line":16884},[45,34650,32706],{"class":51},[45,34652,254],{"class":93},[45,34654,32711],{"class":51},[45,34656,34657],{"class":47,"line":16898},[45,34658,2483],{"emptyLinePlaceholder":133},[45,34660,34661],{"class":47,"line":16903},[45,34662,34663],{"class":267},"            # 设置模型为验证模式\n",[45,34665,34666],{"class":47,"line":16909},[45,34667,32956],{"class":51},[45,34669,34670],{"class":47,"line":16914},[45,34671,34672],{"class":267},"            # 模型推理结果\n",[45,34674,34675,34677,34679],{"class":47,"line":16928},[45,34676,32741],{"class":51},[45,34678,254],{"class":93},[45,34680,32746],{"class":51},[45,34682,34683],{"class":47,"line":16933},[45,34684,34685],{"class":267},"            # 获取最大下标，最大下标就是类别号\n",[45,34687,34688,34690,34692,34694,34696,34698,34700],{"class":47,"line":16938},[45,34689,32758],{"class":51},[45,34691,254],{"class":93},[45,34693,32763],{"class":51},[45,34695,32766],{"class":5299},[45,34697,254],{"class":93},[45,34699,426],{"class":257},[45,34701,215],{"class":51},[45,34703,34704],{"class":47,"line":16952},[45,34705,34706],{"class":267},"            # 取出张量中的数值\n",[45,34708,34709,34712,34714],{"class":47,"line":16964},[45,34710,34711],{"class":51},"            result",[45,34713,254],{"class":93},[45,34715,34716],{"class":51},"pre_lab.item()\n",[45,34718,34719,34722,34724],{"class":47,"line":16969},[45,34720,34721],{"class":51},"            label",[45,34723,254],{"class":93},[45,34725,34726],{"class":51},"b_y.item()\n",[45,34728,34729,34732,34734,34737,34740,34743,34745,34748],{"class":47,"line":16982},[45,34730,34731],{"class":257},"            print",[45,34733,209],{"class":51},[45,34735,34736],{"class":313},"\"预测值：\"",[45,34738,34739],{"class":51},",classes[result],",[45,34741,34742],{"class":313},"\"------\"",[45,34744,586],{"class":51},[45,34746,34747],{"class":313},"\"真实值：\"",[45,34749,34750],{"class":51},",classes[label])\n",[10,34752,34753],{},"（2）AlexNet",[159,34755,34756],{},[162,34757,34758],{},"神经网络构建",[35,34760,34762],{"className":37,"code":34761,"language":39,"meta":40,"style":40},"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",[42,34763,34764,34770,34780,34790,34802,34806,34823,34831,34846,34858,34900,34927,34970,34996,35040,35083,35126,35153,35157,35167,35172,35200,35219,35238,35242,35247,35255,35270,35280,35294,35304,35319,35334,35349,35360,35364,35369,35379,35394,35399,35413,35428,35440,35445,35456,35461,35467,35472,35484,35504,35509,35518],{"__ignoreMap":40},[45,34765,34766,34768],{"class":47,"line":48},[45,34767,30473],{"class":93},[45,34769,30476],{"class":51},[45,34771,34772,34774,34776,34778],{"class":47,"line":125},[45,34773,30818],{"class":93},[45,34775,30821],{"class":51},[45,34777,30473],{"class":93},[45,34779,30826],{"class":51},[45,34781,34782,34784,34786,34788],{"class":47,"line":1262},[45,34783,30818],{"class":93},[45,34785,30838],{"class":51},[45,34787,30473],{"class":93},[45,34789,30843],{"class":51},[45,34791,34792,34794,34797,34799],{"class":47,"line":1277},[45,34793,30473],{"class":93},[45,34795,34796],{"class":51}," torch.nn.functional ",[45,34798,31464],{"class":93},[45,34800,34801],{"class":51}," F\n",[45,34803,34804],{"class":47,"line":1283},[45,34805,2483],{"emptyLinePlaceholder":133},[45,34807,34808,34810,34813,34815,34817,34819,34821],{"class":47,"line":1297},[45,34809,14777],{"class":93},[45,34811,34812],{"class":2046}," AlexNet",[45,34814,209],{"class":51},[45,34816,30859],{"class":2046},[45,34818,765],{"class":51},[45,34820,30864],{"class":2046},[45,34822,30867],{"class":51},[45,34824,34825,34827,34829],{"class":47,"line":1303},[45,34826,30882],{"class":93},[45,34828,30885],{"class":257},[45,34830,30888],{"class":51},[45,34832,34833,34835,34838,34840,34842,34844],{"class":47,"line":1394},[45,34834,30898],{"class":257},[45,34836,34837],{"class":51},"(AlexNet,",[45,34839,30904],{"class":257},[45,34841,30907],{"class":51},[45,34843,30910],{"class":257},[45,34845,2059],{"class":51},[45,34847,34848,34850,34853,34855],{"class":47,"line":1400},[45,34849,30926],{"class":257},[45,34851,34852],{"class":51},".ReLu",[45,34854,254],{"class":93},[45,34856,34857],{"class":51},"nn.ReLU()\n",[45,34859,34860,34862,34864,34866,34868,34870,34872,34874,34876,34878,34880,34882,34884,34886,34888,34890,34892,34894,34896,34898],{"class":47,"line":1412},[45,34861,30926],{"class":257},[45,34863,30929],{"class":51},[45,34865,254],{"class":93},[45,34867,30934],{"class":51},[45,34869,30937],{"class":5299},[45,34871,254],{"class":93},[45,34873,426],{"class":257},[45,34875,586],{"class":51},[45,34877,30946],{"class":5299},[45,34879,254],{"class":93},[45,34881,418],{"class":257},[45,34883,586],{"class":51},[45,34885,30955],{"class":5299},[45,34887,254],{"class":93},[45,34889,680],{"class":257},[45,34891,586],{"class":51},[45,34893,31010],{"class":5299},[45,34895,254],{"class":93},[45,34897,501],{"class":257},[45,34899,215],{"class":51},[45,34901,34902,34904,34906,34908,34911,34913,34915,34917,34919,34921,34923,34925],{"class":47,"line":1695},[45,34903,30926],{"class":257},[45,34905,30994],{"class":51},[45,34907,254],{"class":93},[45,34909,34910],{"class":51},"nn.MaxPool2d(",[45,34912,30955],{"class":5299},[45,34914,254],{"class":93},[45,34916,280],{"class":257},[45,34918,586],{"class":51},[45,34920,31010],{"class":5299},[45,34922,254],{"class":93},[45,34924,286],{"class":257},[45,34926,215],{"class":51},[45,34928,34929,34931,34933,34935,34937,34939,34941,34943,34945,34947,34949,34952,34954,34956,34958,34960,34962,34964,34966,34968],{"class":47,"line":1700},[45,34930,30926],{"class":257},[45,34932,31023],{"class":51},[45,34934,254],{"class":93},[45,34936,30934],{"class":51},[45,34938,30937],{"class":5299},[45,34940,254],{"class":93},[45,34942,418],{"class":257},[45,34944,586],{"class":51},[45,34946,30946],{"class":5299},[45,34948,254],{"class":93},[45,34950,34951],{"class":257},"256",[45,34953,586],{"class":51},[45,34955,30955],{"class":5299},[45,34957,254],{"class":93},[45,34959,527],{"class":257},[45,34961,586],{"class":51},[45,34963,30964],{"class":5299},[45,34965,254],{"class":93},[45,34967,286],{"class":257},[45,34969,215],{"class":51},[45,34971,34972,34974,34976,34978,34980,34982,34984,34986,34988,34990,34992,34994],{"class":47,"line":1706},[45,34973,30926],{"class":257},[45,34975,31058],{"class":51},[45,34977,254],{"class":93},[45,34979,34910],{"class":51},[45,34981,30955],{"class":5299},[45,34983,254],{"class":93},[45,34985,280],{"class":257},[45,34987,586],{"class":51},[45,34989,31010],{"class":5299},[45,34991,254],{"class":93},[45,34993,286],{"class":257},[45,34995,215],{"class":51},[45,34997,34998,35000,35003,35005,35007,35009,35011,35013,35015,35017,35019,35022,35024,35026,35028,35030,35032,35034,35036,35038],{"class":47,"line":1711},[45,34999,30926],{"class":257},[45,35001,35002],{"class":51},".c5",[45,35004,254],{"class":93},[45,35006,30934],{"class":51},[45,35008,30937],{"class":5299},[45,35010,254],{"class":93},[45,35012,34951],{"class":257},[45,35014,586],{"class":51},[45,35016,30946],{"class":5299},[45,35018,254],{"class":93},[45,35020,35021],{"class":257},"384",[45,35023,586],{"class":51},[45,35025,30955],{"class":5299},[45,35027,254],{"class":93},[45,35029,280],{"class":257},[45,35031,586],{"class":51},[45,35033,30964],{"class":5299},[45,35035,254],{"class":93},[45,35037,426],{"class":257},[45,35039,215],{"class":51},[45,35041,35042,35044,35047,35049,35051,35053,35055,35057,35059,35061,35063,35065,35067,35069,35071,35073,35075,35077,35079,35081],{"class":47,"line":1725},[45,35043,30926],{"class":257},[45,35045,35046],{"class":51},".c6",[45,35048,254],{"class":93},[45,35050,30934],{"class":51},[45,35052,30937],{"class":5299},[45,35054,254],{"class":93},[45,35056,35021],{"class":257},[45,35058,586],{"class":51},[45,35060,30946],{"class":5299},[45,35062,254],{"class":93},[45,35064,35021],{"class":257},[45,35066,586],{"class":51},[45,35068,30955],{"class":5299},[45,35070,254],{"class":93},[45,35072,280],{"class":257},[45,35074,586],{"class":51},[45,35076,30964],{"class":5299},[45,35078,254],{"class":93},[45,35080,426],{"class":257},[45,35082,215],{"class":51},[45,35084,35085,35087,35090,35092,35094,35096,35098,35100,35102,35104,35106,35108,35110,35112,35114,35116,35118,35120,35122,35124],{"class":47,"line":1730},[45,35086,30926],{"class":257},[45,35088,35089],{"class":51},".c7",[45,35091,254],{"class":93},[45,35093,30934],{"class":51},[45,35095,30937],{"class":5299},[45,35097,254],{"class":93},[45,35099,35021],{"class":257},[45,35101,586],{"class":51},[45,35103,30946],{"class":5299},[45,35105,254],{"class":93},[45,35107,34951],{"class":257},[45,35109,586],{"class":51},[45,35111,30955],{"class":5299},[45,35113,254],{"class":93},[45,35115,280],{"class":257},[45,35117,586],{"class":51},[45,35119,30964],{"class":5299},[45,35121,254],{"class":93},[45,35123,426],{"class":257},[45,35125,215],{"class":51},[45,35127,35128,35130,35133,35135,35137,35139,35141,35143,35145,35147,35149,35151],{"class":47,"line":1736},[45,35129,30926],{"class":257},[45,35131,35132],{"class":51},".s8",[45,35134,254],{"class":93},[45,35136,34910],{"class":51},[45,35138,30955],{"class":5299},[45,35140,254],{"class":93},[45,35142,280],{"class":257},[45,35144,586],{"class":51},[45,35146,31010],{"class":5299},[45,35148,254],{"class":93},[45,35150,286],{"class":257},[45,35152,215],{"class":51},[45,35154,35155],{"class":47,"line":1757},[45,35156,31083],{"class":267},[45,35158,35159,35161,35163,35165],{"class":47,"line":1762},[45,35160,30926],{"class":257},[45,35162,31090],{"class":51},[45,35164,254],{"class":93},[45,35166,31095],{"class":51},[45,35168,35169],{"class":47,"line":1776},[45,35170,35171],{"class":267},"       # 定义全连接层\n",[45,35173,35174,35176,35179,35181,35183,35185,35187,35189,35191,35193,35195,35198],{"class":47,"line":1781},[45,35175,30926],{"class":257},[45,35177,35178],{"class":51},".f1",[45,35180,254],{"class":93},[45,35182,31112],{"class":51},[45,35184,552],{"class":257},[45,35186,663],{"class":93},[45,35188,552],{"class":257},[45,35190,663],{"class":93},[45,35192,34951],{"class":257},[45,35194,586],{"class":51},[45,35196,35197],{"class":257},"4096",[45,35199,215],{"class":51},[45,35201,35202,35204,35207,35209,35211,35213,35215,35217],{"class":47,"line":1810},[45,35203,30926],{"class":257},[45,35205,35206],{"class":51},".f2",[45,35208,254],{"class":93},[45,35210,31112],{"class":51},[45,35212,35197],{"class":257},[45,35214,586],{"class":51},[45,35216,35197],{"class":257},[45,35218,215],{"class":51},[45,35220,35221,35223,35226,35228,35230,35232,35234,35236],{"class":47,"line":1815},[45,35222,30926],{"class":257},[45,35224,35225],{"class":51},".f3",[45,35227,254],{"class":93},[45,35229,31112],{"class":51},[45,35231,35197],{"class":257},[45,35233,586],{"class":51},[45,35235,654],{"class":257},[45,35237,215],{"class":51},[45,35239,35240],{"class":47,"line":1832},[45,35241,2483],{"emptyLinePlaceholder":133},[45,35243,35244],{"class":47,"line":1837},[45,35245,35246],{"class":267},"    # 定义前向传播\n",[45,35248,35249,35251,35253],{"class":47,"line":1842},[45,35250,30882],{"class":93},[45,35252,31174],{"class":2046},[45,35254,31177],{"class":51},[45,35256,35257,35259,35261,35263,35266,35268],{"class":47,"line":1847},[45,35258,31182],{"class":51},[45,35260,254],{"class":93},[45,35262,30904],{"class":257},[45,35264,35265],{"class":51},".ReLu(",[45,35267,30904],{"class":257},[45,35269,31194],{"class":51},[45,35271,35272,35274,35276,35278],{"class":47,"line":1861},[45,35273,31182],{"class":51},[45,35275,254],{"class":93},[45,35277,30904],{"class":257},[45,35279,31205],{"class":51},[45,35281,35282,35284,35286,35288,35290,35292],{"class":47,"line":1866},[45,35283,31182],{"class":51},[45,35285,254],{"class":93},[45,35287,30904],{"class":257},[45,35289,35265],{"class":51},[45,35291,30904],{"class":257},[45,35293,31220],{"class":51},[45,35295,35296,35298,35300,35302],{"class":47,"line":2660},[45,35297,31182],{"class":51},[45,35299,254],{"class":93},[45,35301,30904],{"class":257},[45,35303,31231],{"class":51},[45,35305,35306,35308,35310,35312,35314,35316],{"class":47,"line":2674},[45,35307,31182],{"class":51},[45,35309,254],{"class":93},[45,35311,30904],{"class":257},[45,35313,35265],{"class":51},[45,35315,30904],{"class":257},[45,35317,35318],{"class":51},".c5(x))\n",[45,35320,35321,35323,35325,35327,35329,35331],{"class":47,"line":2682},[45,35322,31182],{"class":51},[45,35324,254],{"class":93},[45,35326,30904],{"class":257},[45,35328,35265],{"class":51},[45,35330,30904],{"class":257},[45,35332,35333],{"class":51},".c6(x))\n",[45,35335,35336,35338,35340,35342,35344,35346],{"class":47,"line":2687},[45,35337,31182],{"class":51},[45,35339,254],{"class":93},[45,35341,30904],{"class":257},[45,35343,35265],{"class":51},[45,35345,30904],{"class":257},[45,35347,35348],{"class":51},".c7(x))\n",[45,35350,35351,35353,35355,35357],{"class":47,"line":2693},[45,35352,31182],{"class":51},[45,35354,254],{"class":93},[45,35356,30904],{"class":257},[45,35358,35359],{"class":51},".s8(x)\n",[45,35361,35362],{"class":47,"line":2699},[45,35363,2483],{"emptyLinePlaceholder":133},[45,35365,35366],{"class":47,"line":2704},[45,35367,35368],{"class":267},"        # 展平加线性全连接层\n",[45,35370,35371,35373,35375,35377],{"class":47,"line":8031},[45,35372,31182],{"class":51},[45,35374,254],{"class":93},[45,35376,30904],{"class":257},[45,35378,31242],{"class":51},[45,35380,35381,35383,35385,35387,35389,35391],{"class":47,"line":8055},[45,35382,31182],{"class":51},[45,35384,254],{"class":93},[45,35386,30904],{"class":257},[45,35388,35265],{"class":51},[45,35390,30904],{"class":257},[45,35392,35393],{"class":51},".f1(x))\n",[45,35395,35396],{"class":47,"line":8060},[45,35397,35398],{"class":267},"        # 还需要dropout对神经元随机进行失活\n",[45,35400,35401,35403,35405,35408,35411],{"class":47,"line":8066},[45,35402,31182],{"class":51},[45,35404,254],{"class":93},[45,35406,35407],{"class":51},"F.dropout(x,",[45,35409,35410],{"class":257},"0.5",[45,35412,215],{"class":51},[45,35414,35415,35417,35419,35421,35423,35425],{"class":47,"line":8093},[45,35416,31182],{"class":51},[45,35418,254],{"class":93},[45,35420,30904],{"class":257},[45,35422,35265],{"class":51},[45,35424,30904],{"class":257},[45,35426,35427],{"class":51},".f2(x))\n",[45,35429,35430,35432,35434,35436,35438],{"class":47,"line":8098},[45,35431,31182],{"class":51},[45,35433,254],{"class":93},[45,35435,35407],{"class":51},[45,35437,35410],{"class":257},[45,35439,215],{"class":51},[45,35441,35442],{"class":47,"line":8104},[45,35443,35444],{"class":267},"        # 直接输出\n",[45,35446,35447,35449,35451,35453],{"class":47,"line":8116},[45,35448,31182],{"class":51},[45,35450,254],{"class":93},[45,35452,30904],{"class":257},[45,35454,35455],{"class":51},".f3(x)\n",[45,35457,35458],{"class":47,"line":8128},[45,35459,35460],{"class":267},"        # 前向传播输出\n",[45,35462,35463,35465],{"class":47,"line":8140},[45,35464,14835],{"class":93},[45,35466,31290],{"class":51},[45,35468,35469],{"class":47,"line":9799},[45,35470,35471],{"class":267},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[45,35473,35474,35476,35478,35480,35482],{"class":47,"line":9824},[45,35475,1614],{"class":93},[45,35477,31301],{"class":257},[45,35479,3032],{"class":93},[45,35481,31306],{"class":313},[45,35483,3822],{"class":51},[45,35485,35486,35488,35490,35492,35494,35496,35498,35500,35502],{"class":47,"line":9847},[45,35487,31318],{"class":51},[45,35489,254],{"class":93},[45,35491,30532],{"class":51},[45,35493,31325],{"class":313},[45,35495,1787],{"class":93},[45,35497,31330],{"class":51},[45,35499,1784],{"class":93},[45,35501,30557],{"class":313},[45,35503,215],{"class":51},[45,35505,35506],{"class":47,"line":9871},[45,35507,35508],{"class":267},"    # 模型实例化，然后将实例化的模型放到设备中\n",[45,35510,35511,35513,35515],{"class":47,"line":9876},[45,35512,31370],{"class":51},[45,35514,254],{"class":93},[45,35516,35517],{"class":51},"AlexNet().to(device)\n",[45,35519,35520,35522,35524,35526,35528,35531,35533,35535],{"class":47,"line":9881},[45,35521,31380],{"class":257},[45,35523,31383],{"class":51},[45,35525,426],{"class":257},[45,35527,586],{"class":51},[45,35529,35530],{"class":257},"227",[45,35532,586],{"class":51},[45,35534,35530],{"class":257},[45,35536,31396],{"class":51},[159,35538,35539],{"start":125},[162,35540,31409],{},[35,35542,35544],{"className":37,"code":35543,"language":39,"meta":40,"style":40},"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",[42,35545,35546,35552,35558,35568,35574,35584,35594,35604,35614,35624,35628,35639,35649,35653,35657,35661,35669,35681,35691,35707,35717,35749,35763,35773,35783,35787,35797,35811,35821,35831,35841,35847,35851,35855,35859,35863,35867,35875,35895,35899,35903,35907,35911,35915,35931,35935,35939,35947,35951,35955,35963,35967,35971,35975,35983,35987,35991,35995,35999,36007,36011,36019,36023,36031,36035,36043,36047,36055,36059,36063,36071,36075,36079,36083,36095,36119,36133,36137,36141,36145,36153,36157,36165,36169,36177,36181,36189,36193,36201,36205,36213,36217,36229,36233,36241,36245,36253,36257,36261,36265,36269,36277,36281,36297,36301,36309,36313,36317,36321,36325,36329,36333,36337,36353,36357,36369,36373,36385,36389,36401,36405,36413,36417,36425,36429,36433,36438,36444,36448,36457,36461,36478,36482,36491,36495,36513,36526,36531,36544,36548,36552,36560,36564,36568,36576,36580,36588,36592,36600,36604,36608,36650,36692,36696,36700,36716,36720,36736,36740,36744,36752,36756,36760,36772,36810,36815,36820,36829,36833,36847,36857,36863,36869,36875,36881,36885,36889,36895,36899,36903,36911,36915,36933,36937,36941,36945,36961,36965,36969,36973,36977,36981,37001,37021,37025,37029,37033,37041,37049,37053,37069,37089,37109,37113,37117,37125,37133,37137,37141,37145,37157,37161,37171,37179,37196],{"__ignoreMap":40},[45,35547,35548,35550],{"class":47,"line":48},[45,35549,30473],{"class":93},[45,35551,31903],{"class":51},[45,35553,35554,35556],{"class":47,"line":125},[45,35555,30473],{"class":93},[45,35557,31910],{"class":51},[45,35559,35560,35562,35564,35566],{"class":47,"line":1262},[45,35561,30473],{"class":93},[45,35563,31921],{"class":51},[45,35565,31464],{"class":93},[45,35567,31926],{"class":51},[45,35569,35570,35572],{"class":47,"line":1277},[45,35571,30473],{"class":93},[45,35573,30476],{"class":51},[45,35575,35576,35578,35580,35582],{"class":47,"line":1283},[45,35577,30818],{"class":93},[45,35579,31496],{"class":51},[45,35581,30473],{"class":93},[45,35583,31943],{"class":51},[45,35585,35586,35588,35590,35592],{"class":47,"line":1297},[45,35587,30818],{"class":93},[45,35589,31449],{"class":51},[45,35591,30473],{"class":93},[45,35593,31454],{"class":51},[45,35595,35596,35598,35600,35602],{"class":47,"line":1303},[45,35597,30818],{"class":93},[45,35599,31479],{"class":51},[45,35601,30473],{"class":93},[45,35603,31484],{"class":51},[45,35605,35606,35608,35610,35612],{"class":47,"line":1394},[45,35607,30473],{"class":93},[45,35609,31496],{"class":51},[45,35611,31464],{"class":93},[45,35613,31501],{"class":51},[45,35615,35616,35618,35620,35622],{"class":47,"line":1400},[45,35617,30473],{"class":93},[45,35619,31513],{"class":51},[45,35621,31464],{"class":93},[45,35623,31518],{"class":51},[45,35625,35626],{"class":47,"line":1412},[45,35627,31988],{"class":267},[45,35629,35630,35632,35634,35636],{"class":47,"line":1695},[45,35631,30818],{"class":93},[45,35633,31995],{"class":51},[45,35635,30473],{"class":93},[45,35637,35638],{"class":51}," AlexNet\n",[45,35640,35641,35643,35645,35647],{"class":47,"line":1700},[45,35642,30818],{"class":93},[45,35644,30821],{"class":51},[45,35646,30473],{"class":93},[45,35648,30826],{"class":51},[45,35650,35651],{"class":47,"line":1706},[45,35652,2483],{"emptyLinePlaceholder":133},[45,35654,35655],{"class":47,"line":1711},[45,35656,2483],{"emptyLinePlaceholder":133},[45,35658,35659],{"class":47,"line":1725},[45,35660,32023],{"class":267},[45,35662,35663,35665,35667],{"class":47,"line":1730},[45,35664,32028],{"class":93},[45,35666,32031],{"class":2046},[45,35668,32034],{"class":51},[45,35670,35671,35673,35675,35677,35679],{"class":47,"line":1736},[45,35672,32039],{"class":51},[45,35674,254],{"class":93},[45,35676,31536],{"class":51},[45,35678,31544],{"class":313},[45,35680,31547],{"class":51},[45,35682,35683,35685,35687,35689],{"class":47,"line":1757},[45,35684,32052],{"class":5299},[45,35686,254],{"class":93},[45,35688,31557],{"class":257},[45,35690,31547],{"class":51},[45,35692,35693,35695,35697,35699,35701,35703,35705],{"class":47,"line":1762},[45,35694,32063],{"class":5299},[45,35696,254],{"class":93},[45,35698,31574],{"class":51},[45,35700,31577],{"class":5299},[45,35702,254],{"class":93},[45,35704,35530],{"class":257},[45,35706,31585],{"class":51},[45,35708,35709,35711,35713,35715],{"class":47,"line":1776},[45,35710,32080],{"class":5299},[45,35712,254],{"class":93},[45,35714,31557],{"class":257},[45,35716,215],{"class":51},[45,35718,35719,35721,35723,35725,35727,35729,35731,35733,35735,35737,35739,35741,35743,35745,35747],{"class":47,"line":1781},[45,35720,32091],{"class":51},[45,35722,254],{"class":93},[45,35724,32096],{"class":51},[45,35726,32099],{"class":257},[45,35728,209],{"class":51},[45,35730,32104],{"class":257},[45,35732,663],{"class":93},[45,35734,7441],{"class":257},[45,35736,32111],{"class":51},[45,35738,32099],{"class":257},[45,35740,209],{"class":51},[45,35742,32118],{"class":257},[45,35744,663],{"class":93},[45,35746,7441],{"class":257},[45,35748,32125],{"class":51},[45,35750,35751,35753,35755,35757,35759,35761],{"class":47,"line":1810},[45,35752,32130],{"class":51},[45,35754,254],{"class":93},[45,35756,32135],{"class":51},[45,35758,31618],{"class":5299},[45,35760,254],{"class":93},[45,35762,31623],{"class":51},[45,35764,35765,35767,35769,35771],{"class":47,"line":1815},[45,35766,32146],{"class":5299},[45,35768,254],{"class":93},[45,35770,32151],{"class":257},[45,35772,31547],{"class":51},[45,35774,35775,35777,35779,35781],{"class":47,"line":1832},[45,35776,32158],{"class":5299},[45,35778,254],{"class":93},[45,35780,31557],{"class":257},[45,35782,31547],{"class":51},[45,35784,35785],{"class":47,"line":1837},[45,35786,32169],{"class":267},[45,35788,35789,35791,35793,35795],{"class":47,"line":1842},[45,35790,32174],{"class":5299},[45,35792,254],{"class":93},[45,35794,603],{"class":257},[45,35796,215],{"class":51},[45,35798,35799,35801,35803,35805,35807,35809],{"class":47,"line":1847},[45,35800,32185],{"class":51},[45,35802,254],{"class":93},[45,35804,31615],{"class":51},[45,35806,31618],{"class":5299},[45,35808,254],{"class":93},[45,35810,32196],{"class":51},[45,35812,35813,35815,35817,35819],{"class":47,"line":1861},[45,35814,32201],{"class":5299},[45,35816,254],{"class":93},[45,35818,32151],{"class":257},[45,35820,31547],{"class":51},[45,35822,35823,35825,35827,35829],{"class":47,"line":1866},[45,35824,32212],{"class":5299},[45,35826,254],{"class":93},[45,35828,31557],{"class":257},[45,35830,31547],{"class":51},[45,35832,35833,35835,35837,35839],{"class":47,"line":2660},[45,35834,32223],{"class":5299},[45,35836,254],{"class":93},[45,35838,603],{"class":257},[45,35840,215],{"class":51},[45,35842,35843,35845],{"class":47,"line":2674},[45,35844,4173],{"class":93},[45,35846,32236],{"class":51},[45,35848,35849],{"class":47,"line":2682},[45,35850,2483],{"emptyLinePlaceholder":133},[45,35852,35853],{"class":47,"line":2687},[45,35854,32245],{"class":267},[45,35856,35857],{"class":47,"line":2693},[45,35858,32250],{"class":267},[45,35860,35861],{"class":47,"line":2699},[45,35862,2483],{"emptyLinePlaceholder":133},[45,35864,35865],{"class":47,"line":2704},[45,35866,32259],{"class":267},[45,35868,35869,35871,35873],{"class":47,"line":8031},[45,35870,32028],{"class":93},[45,35872,32266],{"class":2046},[45,35874,32269],{"class":51},[45,35876,35877,35879,35881,35883,35885,35887,35889,35891,35893],{"class":47,"line":8055},[45,35878,31318],{"class":51},[45,35880,254],{"class":93},[45,35882,30532],{"class":51},[45,35884,31325],{"class":313},[45,35886,1787],{"class":93},[45,35888,31330],{"class":51},[45,35890,1784],{"class":93},[45,35892,32288],{"class":313},[45,35894,215],{"class":51},[45,35896,35897],{"class":47,"line":8060},[45,35898,2483],{"emptyLinePlaceholder":133},[45,35900,35901],{"class":47,"line":8066},[45,35902,2483],{"emptyLinePlaceholder":133},[45,35904,35905],{"class":47,"line":8093},[45,35906,32303],{"class":267},[45,35908,35909],{"class":47,"line":8098},[45,35910,32308],{"class":267},[45,35912,35913],{"class":47,"line":8104},[45,35914,32313],{"class":267},[45,35916,35917,35919,35921,35923,35925,35927,35929],{"class":47,"line":8116},[45,35918,32318],{"class":51},[45,35920,254],{"class":93},[45,35922,32323],{"class":51},[45,35924,32326],{"class":5299},[45,35926,254],{"class":93},[45,35928,32331],{"class":257},[45,35930,215],{"class":51},[45,35932,35933],{"class":47,"line":8128},[45,35934,2483],{"emptyLinePlaceholder":133},[45,35936,35937],{"class":47,"line":8140},[45,35938,32342],{"class":267},[45,35940,35941,35943,35945],{"class":47,"line":9799},[45,35942,32347],{"class":51},[45,35944,254],{"class":93},[45,35946,32352],{"class":51},[45,35948,35949],{"class":47,"line":9824},[45,35950,2483],{"emptyLinePlaceholder":133},[45,35952,35953],{"class":47,"line":9847},[45,35954,32361],{"class":267},[45,35956,35957,35959,35961],{"class":47,"line":9871},[45,35958,31370],{"class":51},[45,35960,254],{"class":93},[45,35962,32370],{"class":51},[45,35964,35965],{"class":47,"line":9876},[45,35966,32375],{"class":267},[45,35968,35969],{"class":47,"line":9881},[45,35970,32380],{"class":267},[45,35972,35973],{"class":47,"line":9886},[45,35974,32385],{"class":267},[45,35976,35977,35979,35981],{"class":47,"line":9895},[45,35978,32390],{"class":51},[45,35980,254],{"class":93},[45,35982,32395],{"class":51},[45,35984,35985],{"class":47,"line":9900},[45,35986,2483],{"emptyLinePlaceholder":133},[45,35988,35989],{"class":47,"line":9906},[45,35990,2483],{"emptyLinePlaceholder":133},[45,35992,35993],{"class":47,"line":9927},[45,35994,32408],{"class":267},[45,35996,35997],{"class":47,"line":9933},[45,35998,32413],{"class":267},[45,36000,36001,36003,36005],{"class":47,"line":9947},[45,36002,32418],{"class":51},[45,36004,254],{"class":93},[45,36006,32423],{"class":257},[45,36008,36009],{"class":47,"line":9953},[45,36010,32428],{"class":267},[45,36012,36013,36015,36017],{"class":47,"line":9980},[45,36014,32433],{"class":51},[45,36016,254],{"class":93},[45,36018,32438],{"class":51},[45,36020,36021],{"class":47,"line":9989},[45,36022,32443],{"class":267},[45,36024,36025,36027,36029],{"class":47,"line":9995},[45,36026,32448],{"class":51},[45,36028,254],{"class":93},[45,36030,32438],{"class":51},[45,36032,36033],{"class":47,"line":10003},[45,36034,32457],{"class":267},[45,36036,36037,36039,36041],{"class":47,"line":10008},[45,36038,32462],{"class":51},[45,36040,254],{"class":93},[45,36042,32438],{"class":51},[45,36044,36045],{"class":47,"line":16687},[45,36046,32471],{"class":267},[45,36048,36049,36051,36053],{"class":47,"line":16693},[45,36050,32476],{"class":51},[45,36052,254],{"class":93},[45,36054,32438],{"class":51},[45,36056,36057],{"class":47,"line":16716},[45,36058,2483],{"emptyLinePlaceholder":133},[45,36060,36061],{"class":47,"line":16722},[45,36062,32489],{"class":267},[45,36064,36065,36067,36069],{"class":47,"line":16745},[45,36066,32494],{"class":51},[45,36068,254],{"class":93},[45,36070,32499],{"class":51},[45,36072,36073],{"class":47,"line":16759},[45,36074,2483],{"emptyLinePlaceholder":133},[45,36076,36077],{"class":47,"line":16779},[45,36078,2483],{"emptyLinePlaceholder":133},[45,36080,36081],{"class":47,"line":16785},[45,36082,32512],{"class":267},[45,36084,36085,36087,36089,36091,36093],{"class":47,"line":16796},[45,36086,3284],{"class":93},[45,36088,32519],{"class":51},[45,36090,26126],{"class":93},[45,36092,32524],{"class":257},[45,36094,32527],{"class":51},[45,36096,36097,36099,36101,36103,36105,36107,36109,36111,36113,36115,36117],{"class":47,"line":16819},[45,36098,32532],{"class":257},[45,36100,209],{"class":51},[45,36102,32537],{"class":313},[45,36104,32540],{"class":257},[45,36106,791],{"class":313},[45,36108,32540],{"class":257},[45,36110,459],{"class":313},[45,36112,32549],{"class":51},[45,36114,94],{"class":93},[45,36116,426],{"class":257},[45,36118,30578],{"class":51},[45,36120,36121,36123,36125,36127,36129,36131],{"class":47,"line":16841},[45,36122,32532],{"class":257},[45,36124,209],{"class":51},[45,36126,32564],{"class":313},[45,36128,663],{"class":93},[45,36130,654],{"class":257},[45,36132,215],{"class":51},[45,36134,36135],{"class":47,"line":16846},[45,36136,2483],{"emptyLinePlaceholder":133},[45,36138,36139],{"class":47,"line":16852},[45,36140,32579],{"class":267},[45,36142,36143],{"class":47,"line":16866},[45,36144,32584],{"class":267},[45,36146,36147,36149,36151],{"class":47,"line":16879},[45,36148,32589],{"class":51},[45,36150,254],{"class":93},[45,36152,32423],{"class":257},[45,36154,36155],{"class":47,"line":16884},[45,36156,32598],{"class":267},[45,36158,36159,36161,36163],{"class":47,"line":16898},[45,36160,32603],{"class":51},[45,36162,254],{"class":93},[45,36164,3168],{"class":257},[45,36166,36167],{"class":47,"line":16903},[45,36168,32612],{"class":267},[45,36170,36171,36173,36175],{"class":47,"line":16909},[45,36172,32617],{"class":51},[45,36174,254],{"class":93},[45,36176,32423],{"class":257},[45,36178,36179],{"class":47,"line":16914},[45,36180,32626],{"class":267},[45,36182,36183,36185,36187],{"class":47,"line":16928},[45,36184,32631],{"class":51},[45,36186,254],{"class":93},[45,36188,3168],{"class":257},[45,36190,36191],{"class":47,"line":16933},[45,36192,32640],{"class":267},[45,36194,36195,36197,36199],{"class":47,"line":16938},[45,36196,32645],{"class":51},[45,36198,254],{"class":93},[45,36200,3168],{"class":257},[45,36202,36203],{"class":47,"line":16952},[45,36204,32654],{"class":267},[45,36206,36207,36209,36211],{"class":47,"line":16964},[45,36208,32659],{"class":51},[45,36210,254],{"class":93},[45,36212,3168],{"class":257},[45,36214,36215],{"class":47,"line":16969},[45,36216,32668],{"class":267},[45,36218,36219,36221,36223,36225,36227],{"class":47,"line":16982},[45,36220,3486],{"class":93},[45,36222,31682],{"class":51},[45,36224,26126],{"class":93},[45,36226,31687],{"class":257},[45,36228,32681],{"class":51},[45,36230,36231],{"class":47,"line":16987},[45,36232,32686],{"class":267},[45,36234,36235,36237,36239],{"class":47,"line":16992},[45,36236,32691],{"class":51},[45,36238,254],{"class":93},[45,36240,32696],{"class":51},[45,36242,36243],{"class":47,"line":16997},[45,36244,32701],{"class":267},[45,36246,36247,36249,36251],{"class":47,"line":17010},[45,36248,32706],{"class":51},[45,36250,254],{"class":93},[45,36252,32711],{"class":51},[45,36254,36255],{"class":47,"line":17015},[45,36256,32717],{"class":267},[45,36258,36259],{"class":47,"line":32714},[45,36260,32723],{"class":51},[45,36262,36263],{"class":47,"line":32720},[45,36264,32729],{"class":267},[45,36266,36267],{"class":47,"line":32726},[45,36268,32735],{"class":267},[45,36270,36271,36273,36275],{"class":47,"line":32732},[45,36272,32741],{"class":51},[45,36274,254],{"class":93},[45,36276,32746],{"class":51},[45,36278,36279],{"class":47,"line":32738},[45,36280,32752],{"class":267},[45,36282,36283,36285,36287,36289,36291,36293,36295],{"class":47,"line":32749},[45,36284,32758],{"class":51},[45,36286,254],{"class":93},[45,36288,32763],{"class":51},[45,36290,32766],{"class":5299},[45,36292,254],{"class":93},[45,36294,426],{"class":257},[45,36296,215],{"class":51},[45,36298,36299],{"class":47,"line":32755},[45,36300,32778],{"class":267},[45,36302,36303,36305,36307],{"class":47,"line":32775},[45,36304,32784],{"class":51},[45,36306,254],{"class":93},[45,36308,32789],{"class":51},[45,36310,36311],{"class":47,"line":32781},[45,36312,32795],{"class":267},[45,36314,36315],{"class":47,"line":32792},[45,36316,32801],{"class":51},[45,36318,36319],{"class":47,"line":32798},[45,36320,32807],{"class":267},[45,36322,36323],{"class":47,"line":32804},[45,36324,32813],{"class":51},[45,36326,36327],{"class":47,"line":32810},[45,36328,32819],{"class":267},[45,36330,36331],{"class":47,"line":32816},[45,36332,32825],{"class":51},[45,36334,36335],{"class":47,"line":32822},[45,36336,32831],{"class":267},[45,36338,36339,36341,36343,36345,36347,36349,36351],{"class":47,"line":32828},[45,36340,32837],{"class":51},[45,36342,9560],{"class":93},[45,36344,32842],{"class":51},[45,36346,663],{"class":93},[45,36348,32847],{"class":51},[45,36350,400],{"class":257},[45,36352,215],{"class":51},[45,36354,36355],{"class":47,"line":32834},[45,36356,32857],{"class":267},[45,36358,36359,36361,36363,36365,36367],{"class":47,"line":32854},[45,36360,32863],{"class":51},[45,36362,9560],{"class":93},[45,36364,32868],{"class":51},[45,36366,3032],{"class":93},[45,36368,32873],{"class":51},[45,36370,36371],{"class":47,"line":32860},[45,36372,32879],{"class":267},[45,36374,36375,36377,36379,36381,36383],{"class":47,"line":32876},[45,36376,32885],{"class":51},[45,36378,9560],{"class":93},[45,36380,32847],{"class":51},[45,36382,400],{"class":257},[45,36384,215],{"class":51},[45,36386,36387],{"class":47,"line":32882},[45,36388,32899],{"class":267},[45,36390,36391,36393,36395,36397,36399],{"class":47,"line":32896},[45,36392,3486],{"class":93},[45,36394,32907],{"class":51},[45,36396,26126],{"class":93},[45,36398,31687],{"class":257},[45,36400,32914],{"class":51},[45,36402,36403],{"class":47,"line":32902},[45,36404,32920],{"class":267},[45,36406,36407,36409,36411],{"class":47,"line":32917},[45,36408,32691],{"class":51},[45,36410,254],{"class":93},[45,36412,32696],{"class":51},[45,36414,36415],{"class":47,"line":32923},[45,36416,32935],{"class":267},[45,36418,36419,36421,36423],{"class":47,"line":32932},[45,36420,32706],{"class":51},[45,36422,254],{"class":93},[45,36424,32711],{"class":51},[45,36426,36427],{"class":47,"line":32938},[45,36428,32950],{"class":267},[45,36430,36431],{"class":47,"line":32947},[45,36432,32956],{"class":51},[45,36434,36435],{"class":47,"line":32953},[45,36436,36437],{"class":267},"            # 验证时不计算梯度以节省内存\u002F计算\n",[45,36439,36440,36442],{"class":47,"line":32959},[45,36441,32962],{"class":93},[45,36443,32965],{"class":51},[45,36445,36446],{"class":47,"line":32968},[45,36447,32971],{"class":267},[45,36449,36450,36453,36455],{"class":47,"line":32974},[45,36451,36452],{"class":51},"                output",[45,36454,254],{"class":93},[45,36456,32746],{"class":51},[45,36458,36459],{"class":47,"line":32985},[45,36460,32988],{"class":267},[45,36462,36463,36466,36468,36470,36472,36474,36476],{"class":47,"line":32991},[45,36464,36465],{"class":51},"                pre_lab",[45,36467,254],{"class":93},[45,36469,32763],{"class":51},[45,36471,32766],{"class":5299},[45,36473,254],{"class":93},[45,36475,426],{"class":257},[45,36477,215],{"class":51},[45,36479,36480],{"class":47,"line":33010},[45,36481,33013],{"class":267},[45,36483,36484,36487,36489],{"class":47,"line":33016},[45,36485,36486],{"class":51},"                val_batch_loss",[45,36488,254],{"class":93},[45,36490,32789],{"class":51},[45,36492,36493],{"class":47,"line":33027},[45,36494,33030],{"class":267},[45,36496,36497,36500,36502,36505,36507,36509,36511],{"class":47,"line":33033},[45,36498,36499],{"class":51},"                val_loss",[45,36501,9560],{"class":93},[45,36503,36504],{"class":51},"val_batch_loss.item()",[45,36506,663],{"class":93},[45,36508,32847],{"class":51},[45,36510,400],{"class":257},[45,36512,215],{"class":51},[45,36514,36515,36518,36520,36522,36524],{"class":47,"line":33053},[45,36516,36517],{"class":51},"                val_corrects",[45,36519,9560],{"class":93},[45,36521,32868],{"class":51},[45,36523,3032],{"class":93},[45,36525,32873],{"class":51},[45,36527,36528],{"class":47,"line":33069},[45,36529,36530],{"class":267},"            # 当前用于验证的样本数量\n",[45,36532,36533,36536,36538,36540,36542],{"class":47,"line":33075},[45,36534,36535],{"class":51},"            val_num",[45,36537,9560],{"class":93},[45,36539,32847],{"class":51},[45,36541,400],{"class":257},[45,36543,215],{"class":51},[45,36545,36546],{"class":47,"line":33089},[45,36547,33092],{"class":267},[45,36549,36550],{"class":47,"line":33095},[45,36551,33098],{"class":267},[45,36553,36554,36556,36558],{"class":47,"line":33101},[45,36555,33104],{"class":51},[45,36557,791],{"class":93},[45,36559,33109],{"class":51},[45,36561,36562],{"class":47,"line":33112},[45,36563,33115],{"class":267},[45,36565,36566],{"class":47,"line":33118},[45,36567,33121],{"class":267},[45,36569,36570,36572,36574],{"class":47,"line":33124},[45,36571,33127],{"class":51},[45,36573,791],{"class":93},[45,36575,33109],{"class":51},[45,36577,36578],{"class":47,"line":33134},[45,36579,33137],{"class":267},[45,36581,36582,36584,36586],{"class":47,"line":33140},[45,36583,33143],{"class":51},[45,36585,791],{"class":93},[45,36587,33148],{"class":51},[45,36589,36590],{"class":47,"line":33151},[45,36591,33154],{"class":267},[45,36593,36594,36596,36598],{"class":47,"line":33157},[45,36595,33160],{"class":51},[45,36597,791],{"class":93},[45,36599,33148],{"class":51},[45,36601,36602],{"class":47,"line":33167},[45,36603,2483],{"emptyLinePlaceholder":133},[45,36605,36606],{"class":47,"line":33172},[45,36607,33175],{"class":267},[45,36609,36610,36612,36614,36616,36618,36620,36622,36624,36626,36628,36630,36632,36634,36636,36638,36640,36642,36644,36646,36648],{"class":47,"line":33178},[45,36611,32532],{"class":257},[45,36613,209],{"class":51},[45,36615,3675],{"class":313},[45,36617,32540],{"class":257},[45,36619,33189],{"class":313},[45,36621,1103],{"class":257},[45,36623,33194],{"class":93},[45,36625,1153],{"class":257},[45,36627,33199],{"class":313},[45,36629,1103],{"class":257},[45,36631,33194],{"class":93},[45,36633,1153],{"class":257},[45,36635,3675],{"class":313},[45,36637,33210],{"class":51},[45,36639,94],{"class":93},[45,36641,426],{"class":257},[45,36643,33217],{"class":51},[45,36645,94],{"class":93},[45,36647,426],{"class":257},[45,36649,33224],{"class":51},[45,36651,36652,36654,36656,36658,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690],{"class":47,"line":33227},[45,36653,32532],{"class":257},[45,36655,209],{"class":51},[45,36657,3675],{"class":313},[45,36659,32540],{"class":257},[45,36661,33238],{"class":313},[45,36663,1103],{"class":257},[45,36665,33194],{"class":93},[45,36667,1153],{"class":257},[45,36669,33247],{"class":313},[45,36671,1103],{"class":257},[45,36673,33194],{"class":93},[45,36675,1153],{"class":257},[45,36677,3675],{"class":313},[45,36679,33258],{"class":51},[45,36681,94],{"class":93},[45,36683,426],{"class":257},[45,36685,33265],{"class":51},[45,36687,94],{"class":93},[45,36689,426],{"class":257},[45,36691,33224],{"class":51},[45,36693,36694],{"class":47,"line":33274},[45,36695,2483],{"emptyLinePlaceholder":133},[45,36697,36698],{"class":47,"line":33279},[45,36699,33282],{"class":267},[45,36701,36702,36704,36706,36708,36710,36712,36714],{"class":47,"line":33285},[45,36703,2580],{"class":93},[45,36705,33290],{"class":51},[45,36707,94],{"class":93},[45,36709,426],{"class":257},[45,36711,1147],{"class":51},[45,36713,1167],{"class":93},[45,36715,33301],{"class":51},[45,36717,36718],{"class":47,"line":33304},[45,36719,33307],{"class":267},[45,36721,36722,36724,36726,36728,36730,36732,36734],{"class":47,"line":33310},[45,36723,33313],{"class":51},[45,36725,248],{"class":257},[45,36727,254],{"class":93},[45,36729,33320],{"class":51},[45,36731,94],{"class":93},[45,36733,426],{"class":257},[45,36735,33327],{"class":51},[45,36737,36738],{"class":47,"line":33330},[45,36739,33333],{"class":267},[45,36741,36742],{"class":47,"line":33336},[45,36743,33339],{"class":267},[45,36745,36746,36748,36750],{"class":47,"line":33342},[45,36747,33345],{"class":51},[45,36749,254],{"class":93},[45,36751,32395],{"class":51},[45,36753,36754],{"class":47,"line":33352},[45,36755,2483],{"emptyLinePlaceholder":133},[45,36757,36758],{"class":47,"line":33357},[45,36759,33360],{"class":267},[45,36761,36762,36764,36766,36768,36770],{"class":47,"line":33363},[45,36763,33366],{"class":51},[45,36765,254],{"class":93},[45,36767,33371],{"class":51},[45,36769,94],{"class":93},[45,36771,33376],{"class":51},[45,36773,36774,36776,36778,36780,36782,36784,36786,36788,36790,36792,36794,36796,36798,36800,36802,36804,36806,36808],{"class":47,"line":33379},[45,36775,32532],{"class":257},[45,36777,209],{"class":51},[45,36779,33386],{"class":313},[45,36781,1103],{"class":257},[45,36783,33391],{"class":93},[45,36785,1153],{"class":257},[45,36787,751],{"class":313},[45,36789,1103],{"class":257},[45,36791,33391],{"class":93},[45,36793,1153],{"class":257},[45,36795,33404],{"class":313},[45,36797,33407],{"class":51},[45,36799,33410],{"class":93},[45,36801,1114],{"class":257},[45,36803,33415],{"class":51},[45,36805,536],{"class":93},[45,36807,1114],{"class":257},[45,36809,30578],{"class":51},[45,36811,36812],{"class":47,"line":33424},[45,36813,36814],{"class":267},"    # 选择最优参数并保存\n",[45,36816,36817],{"class":47,"line":33430},[45,36818,36819],{"class":267},"    # 保存最佳模型权重字典\n",[45,36821,36822,36825,36827],{"class":47,"line":33436},[45,36823,36824],{"class":51},"    torch.save(best_model_wts,",[45,36826,33448],{"class":313},[45,36828,215],{"class":51},[45,36830,36831],{"class":47,"line":33442},[45,36832,33468],{"class":267},[45,36834,36835,36837,36839,36841,36843,36845],{"class":47,"line":33453},[45,36836,33474],{"class":51},[45,36838,254],{"class":93},[45,36840,33479],{"class":51},[45,36842,33482],{"class":5299},[45,36844,254],{"class":93},[45,36846,1629],{"class":51},[45,36848,36849,36851,36853,36855],{"class":47,"line":33459},[45,36850,33492],{"class":313},[45,36852,1066],{"class":51},[45,36854,33497],{"class":257},[45,36856,33500],{"class":51},[45,36858,36859,36861],{"class":47,"line":33465},[45,36860,33506],{"class":313},[45,36862,33509],{"class":51},[45,36864,36865,36867],{"class":47,"line":33471},[45,36866,33515],{"class":313},[45,36868,33518],{"class":51},[45,36870,36871,36873],{"class":47,"line":33489},[45,36872,33524],{"class":313},[45,36874,33527],{"class":51},[45,36876,36877,36879],{"class":47,"line":33503},[45,36878,33533],{"class":313},[45,36880,33536],{"class":51},[45,36882,36883],{"class":47,"line":33512},[45,36884,33542],{"class":51},[45,36886,36887],{"class":47,"line":33521},[45,36888,33548],{"class":267},[45,36890,36891,36893],{"class":47,"line":33530},[45,36892,4173],{"class":93},[45,36894,33556],{"class":51},[45,36896,36897],{"class":47,"line":33539},[45,36898,2483],{"emptyLinePlaceholder":133},[45,36900,36901],{"class":47,"line":33545},[45,36902,33567],{"class":267},[45,36904,36905,36907,36909],{"class":47,"line":33551},[45,36906,32028],{"class":93},[45,36908,33575],{"class":2046},[45,36910,33578],{"class":51},[45,36912,36913],{"class":47,"line":33559},[45,36914,33584],{"class":267},[45,36916,36917,36919,36921,36923,36925,36927,36929,36931],{"class":47,"line":33564},[45,36918,33590],{"class":51},[45,36920,31774],{"class":5299},[45,36922,254],{"class":93},[45,36924,209],{"class":51},[45,36926,706],{"class":257},[45,36928,586],{"class":51},[45,36930,501],{"class":257},[45,36932,30578],{"class":51},[45,36934,36935],{"class":47,"line":33570},[45,36936,33610],{"class":267},[45,36938,36939],{"class":47,"line":33581},[45,36940,33616],{"class":267},[45,36942,36943],{"class":47,"line":33587},[45,36944,33622],{"class":267},[45,36946,36947,36949,36951,36953,36955,36957,36959],{"class":47,"line":33607},[45,36948,31808],{"class":51},[45,36950,426],{"class":257},[45,36952,586],{"class":51},[45,36954,286],{"class":257},[45,36956,586],{"class":51},[45,36958,426],{"class":257},[45,36960,215],{"class":51},[45,36962,36963],{"class":47,"line":33613},[45,36964,33645],{"class":267},[45,36966,36967],{"class":47,"line":33619},[45,36968,33651],{"class":267},[45,36970,36971],{"class":47,"line":33625},[45,36972,33657],{"class":267},[45,36974,36975],{"class":47,"line":33642},[45,36976,33663],{"class":267},[45,36978,36979],{"class":47,"line":33648},[45,36980,33669],{"class":267},[45,36982,36983,36985,36987,36989,36991,36993,36995,36997,36999],{"class":47,"line":33654},[45,36984,33675],{"class":51},[45,36986,33678],{"class":313},[45,36988,33681],{"class":51},[45,36990,33684],{"class":313},[45,36992,586],{"class":51},[45,36994,33689],{"class":5299},[45,36996,254],{"class":93},[45,36998,33694],{"class":313},[45,37000,215],{"class":51},[45,37002,37003,37005,37007,37009,37011,37013,37015,37017,37019],{"class":47,"line":33660},[45,37004,33675],{"class":51},[45,37006,33678],{"class":313},[45,37008,33706],{"class":51},[45,37010,33709],{"class":313},[45,37012,586],{"class":51},[45,37014,33689],{"class":5299},[45,37016,254],{"class":93},[45,37018,33718],{"class":313},[45,37020,215],{"class":51},[45,37022,37023],{"class":47,"line":33666},[45,37024,33726],{"class":267},[45,37026,37027],{"class":47,"line":33672},[45,37028,33732],{"class":51},[45,37030,37031],{"class":47,"line":33699},[45,37032,33738],{"class":267},[45,37034,37035,37037,37039],{"class":47,"line":33723},[45,37036,33744],{"class":51},[45,37038,33747],{"class":313},[45,37040,215],{"class":51},[45,37042,37043,37045,37047],{"class":47,"line":33729},[45,37044,33755],{"class":51},[45,37046,33758],{"class":313},[45,37048,215],{"class":51},[45,37050,37051],{"class":47,"line":33735},[45,37052,33766],{"class":267},[45,37054,37055,37057,37059,37061,37063,37065,37067],{"class":47,"line":33741},[45,37056,31808],{"class":51},[45,37058,426],{"class":257},[45,37060,586],{"class":51},[45,37062,286],{"class":257},[45,37064,586],{"class":51},[45,37066,286],{"class":257},[45,37068,215],{"class":51},[45,37070,37071,37073,37075,37077,37079,37081,37083,37085,37087],{"class":47,"line":33752},[45,37072,33675],{"class":51},[45,37074,33678],{"class":313},[45,37076,33793],{"class":51},[45,37078,33684],{"class":313},[45,37080,586],{"class":51},[45,37082,33689],{"class":5299},[45,37084,254],{"class":93},[45,37086,33804],{"class":313},[45,37088,215],{"class":51},[45,37090,37091,37093,37095,37097,37099,37101,37103,37105,37107],{"class":47,"line":33763},[45,37092,33675],{"class":51},[45,37094,33678],{"class":313},[45,37096,33816],{"class":51},[45,37098,33709],{"class":313},[45,37100,586],{"class":51},[45,37102,33689],{"class":5299},[45,37104,254],{"class":93},[45,37106,33827],{"class":313},[45,37108,215],{"class":51},[45,37110,37111],{"class":47,"line":33769},[45,37112,33835],{"class":267},[45,37114,37115],{"class":47,"line":33786},[45,37116,33732],{"class":51},[45,37118,37119,37121,37123],{"class":47,"line":33809},[45,37120,33744],{"class":51},[45,37122,33678],{"class":313},[45,37124,215],{"class":51},[45,37126,37127,37129,37131],{"class":47,"line":33832},[45,37128,33755],{"class":51},[45,37130,33857],{"class":313},[45,37132,215],{"class":51},[45,37134,37135],{"class":47,"line":33838},[45,37136,33865],{"class":51},[45,37138,37139],{"class":47,"line":33843},[45,37140,2483],{"emptyLinePlaceholder":133},[45,37142,37143],{"class":47,"line":33852},[45,37144,33876],{"class":267},[45,37146,37147,37149,37151,37153,37155],{"class":47,"line":33862},[45,37148,1614],{"class":93},[45,37150,31301],{"class":257},[45,37152,3032],{"class":93},[45,37154,31306],{"class":313},[45,37156,3822],{"class":51},[45,37158,37159],{"class":47,"line":33868},[45,37160,33895],{"class":267},[45,37162,37163,37166,37168],{"class":47,"line":33873},[45,37164,37165],{"class":51},"    AlexNet",[45,37167,254],{"class":93},[45,37169,37170],{"class":51},"AlexNet()\n",[45,37172,37173,37175,37177],{"class":47,"line":33879},[45,37174,33912],{"class":51},[45,37176,254],{"class":93},[45,37178,33917],{"class":51},[45,37180,37181,37183,37185,37188,37190,37192,37194],{"class":47,"line":33892},[45,37182,33474],{"class":51},[45,37184,254],{"class":93},[45,37186,37187],{"class":51},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[45,37189,33930],{"class":5299},[45,37191,254],{"class":93},[45,37193,907],{"class":257},[45,37195,215],{"class":51},[45,37197,37198],{"class":47,"line":33898},[45,37199,33942],{"class":51},[159,37201,37202],{"start":1262},[162,37203,33955],{},[35,37205,37207],{"className":37,"code":37206,"language":39,"meta":40,"style":40},"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",[42,37208,37209,37215,37225,37235,37245,37249,37259,37269,37280,37284,37288,37292,37300,37316,37326,37342,37352,37366,37370,37380,37390,37400,37406,37410,37414,37422,37426,37442,37450,37454,37458,37466,37474,37478,37482,37486,37490,37496,37500,37510,37518,37526,37530,37534,37538,37546,37550,37566,37570,37574,37578,37590,37594,37606,37610,37614,37626,37630,37640,37644,37648,37660,37664,37672,37676,37680,37688,37692,37700,37704,37708,37712,37716,37720,37736,37744,37748,37752,37800,37806,37810,37820,37828,37836,37840,37844,37848,37852,37860,37864,37880,37884,37892,37900],{"__ignoreMap":40},[45,37210,37211,37213],{"class":47,"line":48},[45,37212,30473],{"class":93},[45,37214,30476],{"class":51},[45,37216,37217,37219,37221,37223],{"class":47,"line":125},[45,37218,30473],{"class":93},[45,37220,31496],{"class":51},[45,37222,31464],{"class":93},[45,37224,31501],{"class":51},[45,37226,37227,37229,37231,37233],{"class":47,"line":1262},[45,37228,30818],{"class":93},[45,37230,33983],{"class":51},[45,37232,30473],{"class":93},[45,37234,33988],{"class":51},[45,37236,37237,37239,37241,37243],{"class":47,"line":1277},[45,37238,30818],{"class":93},[45,37240,31479],{"class":51},[45,37242,30473],{"class":93},[45,37244,31484],{"class":51},[45,37246,37247],{"class":47,"line":1283},[45,37248,34003],{"class":267},[45,37250,37251,37253,37255,37257],{"class":47,"line":1297},[45,37252,30818],{"class":93},[45,37254,31449],{"class":51},[45,37256,30473],{"class":93},[45,37258,31454],{"class":51},[45,37260,37261,37263,37265,37267],{"class":47,"line":1303},[45,37262,30818],{"class":93},[45,37264,31995],{"class":51},[45,37266,30473],{"class":93},[45,37268,35638],{"class":51},[45,37270,37271,37273,37276,37278],{"class":47,"line":1394},[45,37272,30818],{"class":93},[45,37274,37275],{"class":51}," 练习.AlexNet.model ",[45,37277,30473],{"class":93},[45,37279,35638],{"class":51},[45,37281,37282],{"class":47,"line":1400},[45,37283,2483],{"emptyLinePlaceholder":133},[45,37285,37286],{"class":47,"line":1412},[45,37287,2483],{"emptyLinePlaceholder":133},[45,37289,37290],{"class":47,"line":1695},[45,37291,34032],{"class":267},[45,37293,37294,37296,37298],{"class":47,"line":1700},[45,37295,32028],{"class":93},[45,37297,34039],{"class":2046},[45,37299,32034],{"class":51},[45,37301,37302,37304,37306,37308,37310,37312,37314],{"class":47,"line":1706},[45,37303,34046],{"class":51},[45,37305,254],{"class":93},[45,37307,31536],{"class":51},[45,37309,31539],{"class":5299},[45,37311,254],{"class":93},[45,37313,31544],{"class":313},[45,37315,31547],{"class":51},[45,37317,37318,37320,37322,37324],{"class":47,"line":1711},[45,37319,34063],{"class":5299},[45,37321,254],{"class":93},[45,37323,34068],{"class":257},[45,37325,31547],{"class":51},[45,37327,37328,37330,37332,37334,37336,37338,37340],{"class":47,"line":1725},[45,37329,34075],{"class":5299},[45,37331,254],{"class":93},[45,37333,31574],{"class":51},[45,37335,31577],{"class":5299},[45,37337,254],{"class":93},[45,37339,35530],{"class":257},[45,37341,31585],{"class":51},[45,37343,37344,37346,37348,37350],{"class":47,"line":1730},[45,37345,34092],{"class":5299},[45,37347,254],{"class":93},[45,37349,31557],{"class":257},[45,37351,215],{"class":51},[45,37353,37354,37356,37358,37360,37362,37364],{"class":47,"line":1736},[45,37355,34103],{"class":51},[45,37357,254],{"class":93},[45,37359,31615],{"class":51},[45,37361,31618],{"class":5299},[45,37363,254],{"class":93},[45,37365,34114],{"class":51},[45,37367,37368],{"class":47,"line":1757},[45,37369,34119],{"class":267},[45,37371,37372,37374,37376,37378],{"class":47,"line":1762},[45,37373,34124],{"class":5299},[45,37375,254],{"class":93},[45,37377,426],{"class":257},[45,37379,31547],{"class":51},[45,37381,37382,37384,37386,37388],{"class":47,"line":1776},[45,37383,34135],{"class":5299},[45,37385,254],{"class":93},[45,37387,31557],{"class":257},[45,37389,31547],{"class":51},[45,37391,37392,37394,37396,37398],{"class":47,"line":1781},[45,37393,34146],{"class":5299},[45,37395,254],{"class":93},[45,37397,400],{"class":257},[45,37399,215],{"class":51},[45,37401,37402,37404],{"class":47,"line":1810},[45,37403,4173],{"class":93},[45,37405,34159],{"class":51},[45,37407,37408],{"class":47,"line":1815},[45,37409,2483],{"emptyLinePlaceholder":133},[45,37411,37412],{"class":47,"line":1832},[45,37413,34168],{"class":267},[45,37415,37416,37418,37420],{"class":47,"line":1837},[45,37417,32028],{"class":93},[45,37419,34175],{"class":2046},[45,37421,34178],{"class":51},[45,37423,37424],{"class":47,"line":1842},[45,37425,34183],{"class":267},[45,37427,37428,37430,37432,37434,37436,37438,37440],{"class":47,"line":1847},[45,37429,31318],{"class":51},[45,37431,254],{"class":93},[45,37433,31325],{"class":313},[45,37435,1787],{"class":93},[45,37437,31330],{"class":51},[45,37439,1784],{"class":93},[45,37441,34200],{"class":313},[45,37443,37444,37446,37448],{"class":47,"line":1861},[45,37445,31370],{"class":51},[45,37447,254],{"class":93},[45,37449,32370],{"class":51},[45,37451,37452],{"class":47,"line":1866},[45,37453,2483],{"emptyLinePlaceholder":133},[45,37455,37456],{"class":47,"line":2660},[45,37457,34217],{"class":267},[45,37459,37460,37462,37464],{"class":47,"line":2674},[45,37461,34222],{"class":51},[45,37463,254],{"class":93},[45,37465,32423],{"class":257},[45,37467,37468,37470,37472],{"class":47,"line":2682},[45,37469,34231],{"class":51},[45,37471,254],{"class":93},[45,37473,3168],{"class":257},[45,37475,37476],{"class":47,"line":2687},[45,37477,2483],{"emptyLinePlaceholder":133},[45,37479,37480],{"class":47,"line":2693},[45,37481,34244],{"class":267},[45,37483,37484],{"class":47,"line":2699},[45,37485,34249],{"class":267},[45,37487,37488],{"class":47,"line":2704},[45,37489,34254],{"class":267},[45,37491,37492,37494],{"class":47,"line":8031},[45,37493,34259],{"class":93},[45,37495,32965],{"class":51},[45,37497,37498],{"class":47,"line":8055},[45,37499,34266],{"class":267},[45,37501,37502,37504,37506,37508],{"class":47,"line":8060},[45,37503,3486],{"class":93},[45,37505,34273],{"class":51},[45,37507,26126],{"class":93},[45,37509,34278],{"class":51},[45,37511,37512,37514,37516],{"class":47,"line":8066},[45,37513,34283],{"class":51},[45,37515,254],{"class":93},[45,37517,34288],{"class":51},[45,37519,37520,37522,37524],{"class":47,"line":8093},[45,37521,34293],{"class":51},[45,37523,254],{"class":93},[45,37525,34298],{"class":51},[45,37527,37528],{"class":47,"line":8098},[45,37529,34303],{"class":267},[45,37531,37532],{"class":47,"line":8104},[45,37533,32956],{"class":51},[45,37535,37536],{"class":47,"line":8116},[45,37537,34312],{"class":267},[45,37539,37540,37542,37544],{"class":47,"line":8128},[45,37541,32741],{"class":51},[45,37543,254],{"class":93},[45,37545,34321],{"class":51},[45,37547,37548],{"class":47,"line":8140},[45,37549,34326],{"class":267},[45,37551,37552,37554,37556,37558,37560,37562,37564],{"class":47,"line":9799},[45,37553,32758],{"class":51},[45,37555,254],{"class":93},[45,37557,32763],{"class":51},[45,37559,32766],{"class":5299},[45,37561,254],{"class":93},[45,37563,426],{"class":257},[45,37565,215],{"class":51},[45,37567,37568],{"class":47,"line":9824},[45,37569,34347],{"class":267},[45,37571,37572],{"class":47,"line":9847},[45,37573,34352],{"class":267},[45,37575,37576],{"class":47,"line":9871},[45,37577,34357],{"class":267},[45,37579,37580,37582,37584,37586,37588],{"class":47,"line":9876},[45,37581,34362],{"class":51},[45,37583,9560],{"class":93},[45,37585,32868],{"class":51},[45,37587,3032],{"class":93},[45,37589,34371],{"class":51},[45,37591,37592],{"class":47,"line":9881},[45,37593,34376],{"class":267},[45,37595,37596,37598,37600,37602,37604],{"class":47,"line":9886},[45,37597,34381],{"class":51},[45,37599,9560],{"class":93},[45,37601,34386],{"class":51},[45,37603,400],{"class":257},[45,37605,215],{"class":51},[45,37607,37608],{"class":47,"line":9895},[45,37609,2483],{"emptyLinePlaceholder":133},[45,37611,37612],{"class":47,"line":9900},[45,37613,34399],{"class":267},[45,37615,37616,37618,37620,37622,37624],{"class":47,"line":9906},[45,37617,34404],{"class":51},[45,37619,254],{"class":93},[45,37621,34409],{"class":51},[45,37623,791],{"class":93},[45,37625,34414],{"class":51},[45,37627,37628],{"class":47,"line":9927},[45,37629,34419],{"class":267},[45,37631,37632,37634,37636,37638],{"class":47,"line":9933},[45,37633,32532],{"class":257},[45,37635,209],{"class":51},[45,37637,34428],{"class":313},[45,37639,34431],{"class":51},[45,37641,37642],{"class":47,"line":9947},[45,37643,2483],{"emptyLinePlaceholder":133},[45,37645,37646],{"class":47,"line":9953},[45,37647,34440],{"class":267},[45,37649,37650,37652,37654,37656,37658],{"class":47,"line":9980},[45,37651,1614],{"class":93},[45,37653,31301],{"class":257},[45,37655,3032],{"class":93},[45,37657,31306],{"class":313},[45,37659,3822],{"class":51},[45,37661,37662],{"class":47,"line":9989},[45,37663,34457],{"class":267},[45,37665,37666,37668,37670],{"class":47,"line":9995},[45,37667,31370],{"class":51},[45,37669,254],{"class":93},[45,37671,37170],{"class":51},[45,37673,37674],{"class":47,"line":10003},[45,37675,34470],{"class":267},[45,37677,37678],{"class":47,"line":10008},[45,37679,34475],{"class":267},[45,37681,37682,37684,37686],{"class":47,"line":16687},[45,37683,34480],{"class":51},[45,37685,34483],{"class":313},[45,37687,30578],{"class":51},[45,37689,37690],{"class":47,"line":16693},[45,37691,34490],{"class":267},[45,37693,37694,37696,37698],{"class":47,"line":16716},[45,37695,34103],{"class":51},[45,37697,254],{"class":93},[45,37699,34499],{"class":51},[45,37701,37702],{"class":47,"line":16722},[45,37703,34504],{"class":267},[45,37705,37706],{"class":47,"line":16745},[45,37707,34509],{"class":51},[45,37709,37710],{"class":47,"line":16759},[45,37711,2483],{"emptyLinePlaceholder":133},[45,37713,37714],{"class":47,"line":16779},[45,37715,34518],{"class":267},[45,37717,37718],{"class":47,"line":16785},[45,37719,34523],{"class":267},[45,37721,37722,37724,37726,37728,37730,37732,37734],{"class":47,"line":16796},[45,37723,31318],{"class":51},[45,37725,254],{"class":93},[45,37727,31325],{"class":313},[45,37729,1787],{"class":93},[45,37731,31330],{"class":51},[45,37733,1784],{"class":93},[45,37735,34200],{"class":313},[45,37737,37738,37740,37742],{"class":47,"line":16819},[45,37739,31370],{"class":51},[45,37741,254],{"class":93},[45,37743,32370],{"class":51},[45,37745,37746],{"class":47,"line":16841},[45,37747,34552],{"class":267},[45,37749,37750],{"class":47,"line":16846},[45,37751,34557],{"class":267},[45,37753,37754,37756,37758,37760,37762,37764,37766,37768,37770,37772,37774,37776,37778,37780,37782,37784,37786,37788,37790,37792,37794,37796,37798],{"class":47,"line":16852},[45,37755,34562],{"class":51},[45,37757,254],{"class":93},[45,37759,1097],{"class":51},[45,37761,34569],{"class":313},[45,37763,586],{"class":51},[45,37765,34574],{"class":313},[45,37767,586],{"class":51},[45,37769,34579],{"class":313},[45,37771,586],{"class":51},[45,37773,34584],{"class":313},[45,37775,586],{"class":51},[45,37777,34589],{"class":313},[45,37779,586],{"class":51},[45,37781,34594],{"class":313},[45,37783,586],{"class":51},[45,37785,34599],{"class":313},[45,37787,586],{"class":51},[45,37789,34604],{"class":313},[45,37791,586],{"class":51},[45,37793,34609],{"class":313},[45,37795,586],{"class":51},[45,37797,34614],{"class":313},[45,37799,33327],{"class":51},[45,37801,37802,37804],{"class":47,"line":16866},[45,37803,34259],{"class":93},[45,37805,32965],{"class":51},[45,37807,37808],{"class":47,"line":16879},[45,37809,34627],{"class":267},[45,37811,37812,37814,37816,37818],{"class":47,"line":16884},[45,37813,3486],{"class":93},[45,37815,34634],{"class":51},[45,37817,26126],{"class":93},[45,37819,34278],{"class":51},[45,37821,37822,37824,37826],{"class":47,"line":16898},[45,37823,32691],{"class":51},[45,37825,254],{"class":93},[45,37827,32696],{"class":51},[45,37829,37830,37832,37834],{"class":47,"line":16903},[45,37831,32706],{"class":51},[45,37833,254],{"class":93},[45,37835,32711],{"class":51},[45,37837,37838],{"class":47,"line":16909},[45,37839,2483],{"emptyLinePlaceholder":133},[45,37841,37842],{"class":47,"line":16914},[45,37843,34663],{"class":267},[45,37845,37846],{"class":47,"line":16928},[45,37847,32956],{"class":51},[45,37849,37850],{"class":47,"line":16933},[45,37851,34672],{"class":267},[45,37853,37854,37856,37858],{"class":47,"line":16938},[45,37855,32741],{"class":51},[45,37857,254],{"class":93},[45,37859,32746],{"class":51},[45,37861,37862],{"class":47,"line":16952},[45,37863,34685],{"class":267},[45,37865,37866,37868,37870,37872,37874,37876,37878],{"class":47,"line":16964},[45,37867,32758],{"class":51},[45,37869,254],{"class":93},[45,37871,32763],{"class":51},[45,37873,32766],{"class":5299},[45,37875,254],{"class":93},[45,37877,426],{"class":257},[45,37879,215],{"class":51},[45,37881,37882],{"class":47,"line":16969},[45,37883,34706],{"class":267},[45,37885,37886,37888,37890],{"class":47,"line":16982},[45,37887,34711],{"class":51},[45,37889,254],{"class":93},[45,37891,34716],{"class":51},[45,37893,37894,37896,37898],{"class":47,"line":16987},[45,37895,34721],{"class":51},[45,37897,254],{"class":93},[45,37899,34726],{"class":51},[45,37901,37902,37904,37906,37908,37910,37912,37914,37916],{"class":47,"line":16992},[45,37903,34731],{"class":257},[45,37905,209],{"class":51},[45,37907,34736],{"class":313},[45,37909,34739],{"class":51},[45,37911,34742],{"class":313},[45,37913,586],{"class":51},[45,37915,34747],{"class":313},[45,37917,34750],{"class":51},[176,37919,37921],{"id":37920},"_22vgg","2.2.VGG",[22081,37923,37925],{"id":37924},"_221原理","2.2.1.原理",[10,37927,37928],{},[1545,37929],{"alt":40,"src":37930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[10,37932,37933],{},[1545,37934],{"alt":40,"src":37935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[10,37937,37938],{},[1545,37939],{"alt":40,"src":37940},"\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",[10,37942,37943],{},"参数详细描述：",[10,37945,37946],{},[1545,37947],{"alt":40,"src":37948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[10,37950,37951],{},[1545,37952],{"alt":40,"src":37953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[10,37955,37956],{},[1545,37957],{"alt":40,"src":37958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[10,37960,37961],{},[1545,37962],{"alt":40,"src":37963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[10,37965,37966],{},[1545,37967],{"alt":40,"src":37968},"\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",[22081,37970,37972],{"id":37971},"_222代码实现","2.2.2.代码实现",[159,37974,37975],{},[162,37976,37977],{},"网络搭建",[35,37979,37981],{"className":37,"code":37980,"language":39,"meta":40,"style":40},"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",[42,37982,37983,37989,38001,38011,38021,38025,38042,38050,38069,38074,38079,38091,38129,38134,38170,38174,38203,38208,38213,38224,38260,38264,38300,38304,38332,38336,38341,38352,38388,38392,38428,38432,38468,38472,38500,38504,38509,38520,38557,38561,38597,38601,38637,38641,38669,38673,38678,38689,38725,38729,38765,38769,38805,38809,38837,38841,38846,38857,38862,38867,38872,38893,38897,38909,38913,38925,38929,38933,38938,38943,38958,38963,38973,38978,38993,38998,39017,39022,39031,39036,39046,39051,39056,39070,39075,39089,39097,39101,39105,39113,39124,39135,39146,39157,39168,39179,39185,39189,39194,39207,39227,39233,39242],{"__ignoreMap":40},[45,37984,37985,37987],{"class":47,"line":48},[45,37986,30473],{"class":93},[45,37988,30476],{"class":51},[45,37990,37991,37993,37996,37998],{"class":47,"line":125},[45,37992,30818],{"class":93},[45,37994,37995],{"class":51}," sympy.core.sympify ",[45,37997,30473],{"class":93},[45,37999,38000],{"class":51}," kernS\n",[45,38002,38003,38005,38007,38009],{"class":47,"line":1262},[45,38004,30818],{"class":93},[45,38006,30821],{"class":51},[45,38008,30473],{"class":93},[45,38010,30826],{"class":51},[45,38012,38013,38015,38017,38019],{"class":47,"line":1277},[45,38014,30818],{"class":93},[45,38016,30838],{"class":51},[45,38018,30473],{"class":93},[45,38020,30843],{"class":51},[45,38022,38023],{"class":47,"line":1283},[45,38024,2483],{"emptyLinePlaceholder":133},[45,38026,38027,38029,38032,38034,38036,38038,38040],{"class":47,"line":1297},[45,38028,14777],{"class":93},[45,38030,38031],{"class":2046}," VGG16",[45,38033,209],{"class":51},[45,38035,30859],{"class":2046},[45,38037,765],{"class":51},[45,38039,30864],{"class":2046},[45,38041,30867],{"class":51},[45,38043,38044,38046,38048],{"class":47,"line":1303},[45,38045,30882],{"class":93},[45,38047,30885],{"class":257},[45,38049,30888],{"class":51},[45,38051,38052,38054,38056,38059,38061,38063,38065,38067],{"class":47,"line":1394},[45,38053,30898],{"class":257},[45,38055,209],{"class":51},[45,38057,38058],{"class":257},"VGG16",[45,38060,12518],{"class":51},[45,38062,30904],{"class":257},[45,38064,30907],{"class":51},[45,38066,30910],{"class":257},[45,38068,2059],{"class":51},[45,38070,38071],{"class":47,"line":1400},[45,38072,38073],{"class":267},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[45,38075,38076],{"class":47,"line":1412},[45,38077,38078],{"class":267},"        # 这里用的是灰度图\n",[45,38080,38081,38083,38086,38088],{"class":47,"line":1695},[45,38082,30926],{"class":257},[45,38084,38085],{"class":51},".block1",[45,38087,254],{"class":93},[45,38089,38090],{"class":51},"nn.Sequential(\n",[45,38092,38093,38096,38098,38100,38102,38104,38106,38108,38110,38112,38114,38116,38118,38120,38122,38124,38126],{"class":47,"line":1700},[45,38094,38095],{"class":51},"            nn.Conv2d(",[45,38097,30937],{"class":5299},[45,38099,254],{"class":93},[45,38101,426],{"class":257},[45,38103,586],{"class":51},[45,38105,30946],{"class":5299},[45,38107,254],{"class":93},[45,38109,412],{"class":257},[45,38111,586],{"class":51},[45,38113,30955],{"class":5299},[45,38115,254],{"class":93},[45,38117,280],{"class":257},[45,38119,586],{"class":51},[45,38121,30964],{"class":5299},[45,38123,254],{"class":93},[45,38125,426],{"class":257},[45,38127,38128],{"class":51},"),\n",[45,38130,38131],{"class":47,"line":1706},[45,38132,38133],{"class":51},"            nn.ReLU(),\n",[45,38135,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168],{"class":47,"line":1711},[45,38137,38095],{"class":51},[45,38139,30937],{"class":5299},[45,38141,254],{"class":93},[45,38143,412],{"class":257},[45,38145,586],{"class":51},[45,38147,30946],{"class":5299},[45,38149,254],{"class":93},[45,38151,412],{"class":257},[45,38153,586],{"class":51},[45,38155,30955],{"class":5299},[45,38157,254],{"class":93},[45,38159,280],{"class":257},[45,38161,586],{"class":51},[45,38163,30964],{"class":5299},[45,38165,254],{"class":93},[45,38167,426],{"class":257},[45,38169,38128],{"class":51},[45,38171,38172],{"class":47,"line":1725},[45,38173,38133],{"class":51},[45,38175,38176,38179,38181,38183,38185,38187,38189,38191,38193,38195,38197,38199,38201],{"class":47,"line":1730},[45,38177,38178],{"class":51},"            nn.MaxPool2d(",[45,38180,30955],{"class":5299},[45,38182,254],{"class":93},[45,38184,286],{"class":257},[45,38186,586],{"class":51},[45,38188,31010],{"class":5299},[45,38190,254],{"class":93},[45,38192,286],{"class":257},[45,38194,586],{"class":51},[45,38196,30964],{"class":5299},[45,38198,254],{"class":93},[45,38200,400],{"class":257},[45,38202,215],{"class":51},[45,38204,38205],{"class":47,"line":1736},[45,38206,38207],{"class":51},"        )\n",[45,38209,38210],{"class":47,"line":1757},[45,38211,38212],{"class":267},"        # 第二层\n",[45,38214,38215,38217,38220,38222],{"class":47,"line":1762},[45,38216,30926],{"class":257},[45,38218,38219],{"class":51},".block2",[45,38221,254],{"class":93},[45,38223,38090],{"class":51},[45,38225,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258],{"class":47,"line":1776},[45,38227,38095],{"class":51},[45,38229,30937],{"class":5299},[45,38231,254],{"class":93},[45,38233,412],{"class":257},[45,38235,586],{"class":51},[45,38237,30946],{"class":5299},[45,38239,254],{"class":93},[45,38241,32151],{"class":257},[45,38243,586],{"class":51},[45,38245,30955],{"class":5299},[45,38247,254],{"class":93},[45,38249,280],{"class":257},[45,38251,586],{"class":51},[45,38253,30964],{"class":5299},[45,38255,254],{"class":93},[45,38257,426],{"class":257},[45,38259,38128],{"class":51},[45,38261,38262],{"class":47,"line":1781},[45,38263,38133],{"class":51},[45,38265,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296,38298],{"class":47,"line":1810},[45,38267,38095],{"class":51},[45,38269,30937],{"class":5299},[45,38271,254],{"class":93},[45,38273,32151],{"class":257},[45,38275,586],{"class":51},[45,38277,30946],{"class":5299},[45,38279,254],{"class":93},[45,38281,32151],{"class":257},[45,38283,586],{"class":51},[45,38285,30955],{"class":5299},[45,38287,254],{"class":93},[45,38289,280],{"class":257},[45,38291,586],{"class":51},[45,38293,30964],{"class":5299},[45,38295,254],{"class":93},[45,38297,426],{"class":257},[45,38299,38128],{"class":51},[45,38301,38302],{"class":47,"line":1815},[45,38303,38133],{"class":51},[45,38305,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330],{"class":47,"line":1832},[45,38307,38178],{"class":51},[45,38309,30955],{"class":5299},[45,38311,254],{"class":93},[45,38313,286],{"class":257},[45,38315,586],{"class":51},[45,38317,31010],{"class":5299},[45,38319,254],{"class":93},[45,38321,286],{"class":257},[45,38323,586],{"class":51},[45,38325,30964],{"class":5299},[45,38327,254],{"class":93},[45,38329,400],{"class":257},[45,38331,215],{"class":51},[45,38333,38334],{"class":47,"line":1837},[45,38335,38207],{"class":51},[45,38337,38338],{"class":47,"line":1842},[45,38339,38340],{"class":267},"        # 第三层\n",[45,38342,38343,38345,38348,38350],{"class":47,"line":1847},[45,38344,30926],{"class":257},[45,38346,38347],{"class":51},".block3",[45,38349,254],{"class":93},[45,38351,38090],{"class":51},[45,38353,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386],{"class":47,"line":1861},[45,38355,38095],{"class":51},[45,38357,30937],{"class":5299},[45,38359,254],{"class":93},[45,38361,32151],{"class":257},[45,38363,586],{"class":51},[45,38365,30946],{"class":5299},[45,38367,254],{"class":93},[45,38369,34951],{"class":257},[45,38371,586],{"class":51},[45,38373,30955],{"class":5299},[45,38375,254],{"class":93},[45,38377,280],{"class":257},[45,38379,586],{"class":51},[45,38381,30964],{"class":5299},[45,38383,254],{"class":93},[45,38385,426],{"class":257},[45,38387,38128],{"class":51},[45,38389,38390],{"class":47,"line":1866},[45,38391,38133],{"class":51},[45,38393,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416,38418,38420,38422,38424,38426],{"class":47,"line":2660},[45,38395,38095],{"class":51},[45,38397,30937],{"class":5299},[45,38399,254],{"class":93},[45,38401,34951],{"class":257},[45,38403,586],{"class":51},[45,38405,30946],{"class":5299},[45,38407,254],{"class":93},[45,38409,34951],{"class":257},[45,38411,586],{"class":51},[45,38413,30955],{"class":5299},[45,38415,254],{"class":93},[45,38417,280],{"class":257},[45,38419,586],{"class":51},[45,38421,30964],{"class":5299},[45,38423,254],{"class":93},[45,38425,426],{"class":257},[45,38427,38128],{"class":51},[45,38429,38430],{"class":47,"line":2674},[45,38431,38133],{"class":51},[45,38433,38434,38436,38438,38440,38442,38444,38446,38448,38450,38452,38454,38456,38458,38460,38462,38464,38466],{"class":47,"line":2682},[45,38435,38095],{"class":51},[45,38437,30937],{"class":5299},[45,38439,254],{"class":93},[45,38441,34951],{"class":257},[45,38443,586],{"class":51},[45,38445,30946],{"class":5299},[45,38447,254],{"class":93},[45,38449,34951],{"class":257},[45,38451,586],{"class":51},[45,38453,30955],{"class":5299},[45,38455,254],{"class":93},[45,38457,280],{"class":257},[45,38459,586],{"class":51},[45,38461,30964],{"class":5299},[45,38463,254],{"class":93},[45,38465,426],{"class":257},[45,38467,38128],{"class":51},[45,38469,38470],{"class":47,"line":2687},[45,38471,38133],{"class":51},[45,38473,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498],{"class":47,"line":2693},[45,38475,38178],{"class":51},[45,38477,30955],{"class":5299},[45,38479,254],{"class":93},[45,38481,286],{"class":257},[45,38483,586],{"class":51},[45,38485,31010],{"class":5299},[45,38487,254],{"class":93},[45,38489,286],{"class":257},[45,38491,586],{"class":51},[45,38493,30964],{"class":5299},[45,38495,254],{"class":93},[45,38497,400],{"class":257},[45,38499,215],{"class":51},[45,38501,38502],{"class":47,"line":2699},[45,38503,38207],{"class":51},[45,38505,38506],{"class":47,"line":2704},[45,38507,38508],{"class":267},"        # 第四层\n",[45,38510,38511,38513,38516,38518],{"class":47,"line":8031},[45,38512,30926],{"class":257},[45,38514,38515],{"class":51},".block4",[45,38517,254],{"class":93},[45,38519,38090],{"class":51},[45,38521,38522,38524,38526,38528,38530,38532,38534,38536,38539,38541,38543,38545,38547,38549,38551,38553,38555],{"class":47,"line":8055},[45,38523,38095],{"class":51},[45,38525,30937],{"class":5299},[45,38527,254],{"class":93},[45,38529,34951],{"class":257},[45,38531,586],{"class":51},[45,38533,30946],{"class":5299},[45,38535,254],{"class":93},[45,38537,38538],{"class":257},"512",[45,38540,586],{"class":51},[45,38542,30955],{"class":5299},[45,38544,254],{"class":93},[45,38546,280],{"class":257},[45,38548,586],{"class":51},[45,38550,30964],{"class":5299},[45,38552,254],{"class":93},[45,38554,426],{"class":257},[45,38556,38128],{"class":51},[45,38558,38559],{"class":47,"line":8060},[45,38560,38133],{"class":51},[45,38562,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595],{"class":47,"line":8066},[45,38564,38095],{"class":51},[45,38566,30937],{"class":5299},[45,38568,254],{"class":93},[45,38570,38538],{"class":257},[45,38572,586],{"class":51},[45,38574,30946],{"class":5299},[45,38576,254],{"class":93},[45,38578,38538],{"class":257},[45,38580,586],{"class":51},[45,38582,30955],{"class":5299},[45,38584,254],{"class":93},[45,38586,280],{"class":257},[45,38588,586],{"class":51},[45,38590,30964],{"class":5299},[45,38592,254],{"class":93},[45,38594,426],{"class":257},[45,38596,38128],{"class":51},[45,38598,38599],{"class":47,"line":8093},[45,38600,38133],{"class":51},[45,38602,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635],{"class":47,"line":8098},[45,38604,38095],{"class":51},[45,38606,30937],{"class":5299},[45,38608,254],{"class":93},[45,38610,38538],{"class":257},[45,38612,586],{"class":51},[45,38614,30946],{"class":5299},[45,38616,254],{"class":93},[45,38618,38538],{"class":257},[45,38620,586],{"class":51},[45,38622,30955],{"class":5299},[45,38624,254],{"class":93},[45,38626,280],{"class":257},[45,38628,586],{"class":51},[45,38630,30964],{"class":5299},[45,38632,254],{"class":93},[45,38634,426],{"class":257},[45,38636,38128],{"class":51},[45,38638,38639],{"class":47,"line":8104},[45,38640,38133],{"class":51},[45,38642,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667],{"class":47,"line":8116},[45,38644,38178],{"class":51},[45,38646,30955],{"class":5299},[45,38648,254],{"class":93},[45,38650,286],{"class":257},[45,38652,586],{"class":51},[45,38654,31010],{"class":5299},[45,38656,254],{"class":93},[45,38658,286],{"class":257},[45,38660,586],{"class":51},[45,38662,30964],{"class":5299},[45,38664,254],{"class":93},[45,38666,400],{"class":257},[45,38668,215],{"class":51},[45,38670,38671],{"class":47,"line":8128},[45,38672,38207],{"class":51},[45,38674,38675],{"class":47,"line":8140},[45,38676,38677],{"class":267},"        # 第五层\n",[45,38679,38680,38682,38685,38687],{"class":47,"line":9799},[45,38681,30926],{"class":257},[45,38683,38684],{"class":51},".block5",[45,38686,254],{"class":93},[45,38688,38090],{"class":51},[45,38690,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723],{"class":47,"line":9824},[45,38692,38095],{"class":51},[45,38694,30937],{"class":5299},[45,38696,254],{"class":93},[45,38698,38538],{"class":257},[45,38700,586],{"class":51},[45,38702,30946],{"class":5299},[45,38704,254],{"class":93},[45,38706,38538],{"class":257},[45,38708,586],{"class":51},[45,38710,30955],{"class":5299},[45,38712,254],{"class":93},[45,38714,280],{"class":257},[45,38716,586],{"class":51},[45,38718,30964],{"class":5299},[45,38720,254],{"class":93},[45,38722,426],{"class":257},[45,38724,38128],{"class":51},[45,38726,38727],{"class":47,"line":9847},[45,38728,38133],{"class":51},[45,38730,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763],{"class":47,"line":9871},[45,38732,38095],{"class":51},[45,38734,30937],{"class":5299},[45,38736,254],{"class":93},[45,38738,38538],{"class":257},[45,38740,586],{"class":51},[45,38742,30946],{"class":5299},[45,38744,254],{"class":93},[45,38746,38538],{"class":257},[45,38748,586],{"class":51},[45,38750,30955],{"class":5299},[45,38752,254],{"class":93},[45,38754,280],{"class":257},[45,38756,586],{"class":51},[45,38758,30964],{"class":5299},[45,38760,254],{"class":93},[45,38762,426],{"class":257},[45,38764,38128],{"class":51},[45,38766,38767],{"class":47,"line":9876},[45,38768,38133],{"class":51},[45,38770,38771,38773,38775,38777,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803],{"class":47,"line":9881},[45,38772,38095],{"class":51},[45,38774,30937],{"class":5299},[45,38776,254],{"class":93},[45,38778,38538],{"class":257},[45,38780,586],{"class":51},[45,38782,30946],{"class":5299},[45,38784,254],{"class":93},[45,38786,38538],{"class":257},[45,38788,586],{"class":51},[45,38790,30955],{"class":5299},[45,38792,254],{"class":93},[45,38794,280],{"class":257},[45,38796,586],{"class":51},[45,38798,30964],{"class":5299},[45,38800,254],{"class":93},[45,38802,426],{"class":257},[45,38804,38128],{"class":51},[45,38806,38807],{"class":47,"line":9886},[45,38808,38133],{"class":51},[45,38810,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835],{"class":47,"line":9895},[45,38812,38178],{"class":51},[45,38814,30955],{"class":5299},[45,38816,254],{"class":93},[45,38818,286],{"class":257},[45,38820,586],{"class":51},[45,38822,31010],{"class":5299},[45,38824,254],{"class":93},[45,38826,286],{"class":257},[45,38828,586],{"class":51},[45,38830,30964],{"class":5299},[45,38832,254],{"class":93},[45,38834,400],{"class":257},[45,38836,215],{"class":51},[45,38838,38839],{"class":47,"line":9900},[45,38840,38207],{"class":51},[45,38842,38843],{"class":47,"line":9906},[45,38844,38845],{"class":267},"        # 全连接层\n",[45,38847,38848,38850,38853,38855],{"class":47,"line":9927},[45,38849,30926],{"class":257},[45,38851,38852],{"class":51},".block6",[45,38854,254],{"class":93},[45,38856,38090],{"class":51},[45,38858,38859],{"class":47,"line":9933},[45,38860,38861],{"class":267},"            # 平展操作\n",[45,38863,38864],{"class":47,"line":9947},[45,38865,38866],{"class":267},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[45,38868,38869],{"class":47,"line":9953},[45,38870,38871],{"class":51},"            nn.Flatten(),\n",[45,38873,38874,38877,38879,38881,38883,38885,38887,38889,38891],{"class":47,"line":9980},[45,38875,38876],{"class":51},"            nn.Linear(",[45,38878,577],{"class":257},[45,38880,663],{"class":93},[45,38882,577],{"class":257},[45,38884,663],{"class":93},[45,38886,38538],{"class":257},[45,38888,586],{"class":51},[45,38890,34951],{"class":257},[45,38892,38128],{"class":51},[45,38894,38895],{"class":47,"line":9989},[45,38896,38133],{"class":51},[45,38898,38899,38901,38903,38905,38907],{"class":47,"line":9995},[45,38900,38876],{"class":51},[45,38902,34951],{"class":257},[45,38904,586],{"class":51},[45,38906,32151],{"class":257},[45,38908,38128],{"class":51},[45,38910,38911],{"class":47,"line":10003},[45,38912,38133],{"class":51},[45,38914,38915,38917,38919,38921,38923],{"class":47,"line":10008},[45,38916,38876],{"class":51},[45,38918,32151],{"class":257},[45,38920,586],{"class":51},[45,38922,654],{"class":257},[45,38924,215],{"class":51},[45,38926,38927],{"class":47,"line":16687},[45,38928,38207],{"class":51},[45,38930,38931],{"class":47,"line":16693},[45,38932,2483],{"emptyLinePlaceholder":133},[45,38934,38935],{"class":47,"line":16716},[45,38936,38937],{"class":267},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[45,38939,38940],{"class":47,"line":16722},[45,38941,38942],{"class":267},"        # 循环遍历模型\n",[45,38944,38945,38947,38950,38952,38955],{"class":47,"line":16745},[45,38946,3486],{"class":93},[45,38948,38949],{"class":51}," m ",[45,38951,26126],{"class":93},[45,38953,38954],{"class":257}," self",[45,38956,38957],{"class":51},".modules():\n",[45,38959,38960],{"class":47,"line":16759},[45,38961,38962],{"class":267},"            # print(m)\n",[45,38964,38965,38967,38970],{"class":47,"line":16779},[45,38966,4725],{"class":93},[45,38968,38969],{"class":257}," isinstance",[45,38971,38972],{"class":51},"(m,nn.Conv2d):\n",[45,38974,38975],{"class":47,"line":16785},[45,38976,38977],{"class":267},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[45,38979,38980,38983,38986,38988,38991],{"class":47,"line":16796},[45,38981,38982],{"class":51},"                nn.init.kaiming_normal_(m.weight,",[45,38984,38985],{"class":5299},"nonlinearity",[45,38987,254],{"class":93},[45,38989,38990],{"class":313},"'relu'",[45,38992,215],{"class":51},[45,38994,38995],{"class":47,"line":16819},[45,38996,38997],{"class":267},"                # 判断b参数是否存在\n",[45,38999,39000,39003,39006,39009,39012,39015],{"class":47,"line":16841},[45,39001,39002],{"class":93},"                if",[45,39004,39005],{"class":51}," m.bias ",[45,39007,39008],{"class":93},"is",[45,39010,39011],{"class":93}," not",[45,39013,39014],{"class":257}," None",[45,39016,3822],{"class":51},[45,39018,39019],{"class":47,"line":16846},[45,39020,39021],{"class":267},"                    # 如果参数不存在的化初始化b=0\n",[45,39023,39024,39027,39029],{"class":47,"line":16852},[45,39025,39026],{"class":51},"                    nn.init.constant_(m.bias,",[45,39028,400],{"class":257},[45,39030,215],{"class":51},[45,39032,39033],{"class":47,"line":16866},[45,39034,39035],{"class":267},"            # 全连接层初始化\n",[45,39037,39038,39041,39043],{"class":47,"line":16879},[45,39039,39040],{"class":93},"            elif",[45,39042,38969],{"class":257},[45,39044,39045],{"class":51},"(m,nn.Linear):\n",[45,39047,39048],{"class":47,"line":16884},[45,39049,39050],{"class":267},"                # 这个初始化方法是利用的是正太分布的方式\n",[45,39052,39053],{"class":47,"line":16898},[45,39054,39055],{"class":267},"                # 均值为0，方差为0.01\n",[45,39057,39058,39061,39063,39065,39068],{"class":47,"line":16903},[45,39059,39060],{"class":51},"                nn.init.normal_(m.weight,",[45,39062,400],{"class":257},[45,39064,586],{"class":51},[45,39066,39067],{"class":257},"0.01",[45,39069,215],{"class":51},[45,39071,39072],{"class":47,"line":16909},[45,39073,39074],{"class":267},"                # 初始化b参数\n",[45,39076,39077,39079,39081,39083,39085,39087],{"class":47,"line":16914},[45,39078,39002],{"class":93},[45,39080,39005],{"class":51},[45,39082,39008],{"class":93},[45,39084,39011],{"class":93},[45,39086,39014],{"class":257},[45,39088,3822],{"class":51},[45,39090,39091,39093,39095],{"class":47,"line":16928},[45,39092,39026],{"class":51},[45,39094,400],{"class":257},[45,39096,215],{"class":51},[45,39098,39099],{"class":47,"line":16933},[45,39100,2483],{"emptyLinePlaceholder":133},[45,39102,39103],{"class":47,"line":16938},[45,39104,35246],{"class":267},[45,39106,39107,39109,39111],{"class":47,"line":16952},[45,39108,30882],{"class":93},[45,39110,31174],{"class":2046},[45,39112,31177],{"class":51},[45,39114,39115,39117,39119,39121],{"class":47,"line":16964},[45,39116,31182],{"class":51},[45,39118,254],{"class":93},[45,39120,30904],{"class":257},[45,39122,39123],{"class":51},".block1(x)\n",[45,39125,39126,39128,39130,39132],{"class":47,"line":16969},[45,39127,31182],{"class":51},[45,39129,254],{"class":93},[45,39131,30904],{"class":257},[45,39133,39134],{"class":51},".block2(x)\n",[45,39136,39137,39139,39141,39143],{"class":47,"line":16982},[45,39138,31182],{"class":51},[45,39140,254],{"class":93},[45,39142,30904],{"class":257},[45,39144,39145],{"class":51},".block3(x)\n",[45,39147,39148,39150,39152,39154],{"class":47,"line":16987},[45,39149,31182],{"class":51},[45,39151,254],{"class":93},[45,39153,30904],{"class":257},[45,39155,39156],{"class":51},".block4(x)\n",[45,39158,39159,39161,39163,39165],{"class":47,"line":16992},[45,39160,31182],{"class":51},[45,39162,254],{"class":93},[45,39164,30904],{"class":257},[45,39166,39167],{"class":51},".block5(x)\n",[45,39169,39170,39172,39174,39176],{"class":47,"line":16997},[45,39171,31182],{"class":51},[45,39173,254],{"class":93},[45,39175,30904],{"class":257},[45,39177,39178],{"class":51},".block6(x)\n",[45,39180,39181,39183],{"class":47,"line":17010},[45,39182,14835],{"class":93},[45,39184,31290],{"class":51},[45,39186,39187],{"class":47,"line":17015},[45,39188,2483],{"emptyLinePlaceholder":133},[45,39190,39191],{"class":47,"line":32714},[45,39192,39193],{"class":267},"# 验证模型\n",[45,39195,39196,39198,39200,39202,39205],{"class":47,"line":32720},[45,39197,1614],{"class":93},[45,39199,31301],{"class":257},[45,39201,3032],{"class":93},[45,39203,39204],{"class":313},"'__main__'",[45,39206,3822],{"class":51},[45,39208,39209,39211,39213,39215,39217,39219,39221,39223,39225],{"class":47,"line":32726},[45,39210,31318],{"class":51},[45,39212,254],{"class":93},[45,39214,30532],{"class":51},[45,39216,31325],{"class":313},[45,39218,1787],{"class":93},[45,39220,31330],{"class":51},[45,39222,1784],{"class":93},[45,39224,30557],{"class":313},[45,39226,215],{"class":51},[45,39228,39229,39231],{"class":47,"line":32732},[45,39230,31380],{"class":257},[45,39232,30566],{"class":51},[45,39234,39235,39237,39239],{"class":47,"line":32738},[45,39236,31370],{"class":51},[45,39238,254],{"class":93},[45,39240,39241],{"class":51},"VGG16().to(device)\n",[45,39243,39244,39246,39248,39250,39252,39254,39256,39258],{"class":47,"line":32749},[45,39245,31380],{"class":257},[45,39247,31383],{"class":51},[45,39249,426],{"class":257},[45,39251,586],{"class":51},[45,39253,31582],{"class":257},[45,39255,586],{"class":51},[45,39257,31582],{"class":257},[45,39259,31396],{"class":51},[159,39261,39262],{"start":125},[162,39263,39264],{},"训练代码",[10,39266,39267],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[10,39269,39270],{},"解决方式:",[10,39272,39273],{},"①权重初始化",[35,39275,39277],{"className":37,"code":39276,"language":39,"meta":40,"style":40},"# 权重初始化,保证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",[42,39278,39279,39284,39289,39301,39306,39314,39319,39332,39337,39351,39356,39365,39370,39379,39384,39389,39402,39407,39421],{"__ignoreMap":40},[45,39280,39281],{"class":47,"line":48},[45,39282,39283],{"class":267},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[45,39285,39286],{"class":47,"line":125},[45,39287,39288],{"class":267},"# 循环遍历模型\n",[45,39290,39291,39293,39295,39297,39299],{"class":47,"line":1262},[45,39292,3108],{"class":93},[45,39294,38949],{"class":51},[45,39296,26126],{"class":93},[45,39298,38954],{"class":257},[45,39300,38957],{"class":51},[45,39302,39303],{"class":47,"line":1277},[45,39304,39305],{"class":267},"    # print(m)\n",[45,39307,39308,39310,39312],{"class":47,"line":1283},[45,39309,3184],{"class":93},[45,39311,38969],{"class":257},[45,39313,38972],{"class":51},[45,39315,39316],{"class":47,"line":1297},[45,39317,39318],{"class":267},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[45,39320,39321,39324,39326,39328,39330],{"class":47,"line":1303},[45,39322,39323],{"class":51},"        nn.init.kaiming_normal_(m.weight,",[45,39325,38985],{"class":5299},[45,39327,254],{"class":93},[45,39329,38990],{"class":313},[45,39331,215],{"class":51},[45,39333,39334],{"class":47,"line":1394},[45,39335,39336],{"class":267},"        # 判断b参数是否存在\n",[45,39338,39339,39341,39343,39345,39347,39349],{"class":47,"line":1400},[45,39340,2580],{"class":93},[45,39342,39005],{"class":51},[45,39344,39008],{"class":93},[45,39346,39011],{"class":93},[45,39348,39014],{"class":257},[45,39350,3822],{"class":51},[45,39352,39353],{"class":47,"line":1412},[45,39354,39355],{"class":267},"            # 如果参数不存在的化初始化b=0\n",[45,39357,39358,39361,39363],{"class":47,"line":1695},[45,39359,39360],{"class":51},"            nn.init.constant_(m.bias,",[45,39362,400],{"class":257},[45,39364,215],{"class":51},[45,39366,39367],{"class":47,"line":1700},[45,39368,39369],{"class":267},"    # 全连接层初始化\n",[45,39371,39372,39375,39377],{"class":47,"line":1706},[45,39373,39374],{"class":93},"    elif",[45,39376,38969],{"class":257},[45,39378,39045],{"class":51},[45,39380,39381],{"class":47,"line":1711},[45,39382,39383],{"class":267},"        # 这个初始化方法是利用的是正太分布的方式\n",[45,39385,39386],{"class":47,"line":1725},[45,39387,39388],{"class":267},"        # 均值为0，方差为0.01\n",[45,39390,39391,39394,39396,39398,39400],{"class":47,"line":1730},[45,39392,39393],{"class":51},"        nn.init.normal_(m.weight,",[45,39395,400],{"class":257},[45,39397,586],{"class":51},[45,39399,39067],{"class":257},[45,39401,215],{"class":51},[45,39403,39404],{"class":47,"line":1736},[45,39405,39406],{"class":267},"        # 初始化b参数\n",[45,39408,39409,39411,39413,39415,39417,39419],{"class":47,"line":1757},[45,39410,2580],{"class":93},[45,39412,39005],{"class":51},[45,39414,39008],{"class":93},[45,39416,39011],{"class":93},[45,39418,39014],{"class":257},[45,39420,3822],{"class":51},[45,39422,39423,39425,39427],{"class":47,"line":1762},[45,39424,39360],{"class":51},[45,39426,400],{"class":257},[45,39428,215],{"class":51},[10,39430,39431],{},"②尽可能地增加批次",[10,39433,39434],{},"训练完整代码：",[35,39436,39437],{"className":37,"code":37980,"language":39,"meta":40,"style":40},[42,39438,39439,39445,39455,39465,39475,39479,39495,39503,39521,39525,39529,39539,39575,39579,39615,39619,39647,39651,39655,39665,39701,39705,39741,39745,39773,39777,39781,39791,39827,39831,39867,39871,39907,39911,39939,39943,39947,39957,39993,39997,40033,40037,40073,40077,40105,40109,40113,40123,40159,40163,40199,40203,40239,40243,40271,40275,40279,40289,40293,40297,40301,40321,40325,40337,40341,40353,40357,40361,40365,40369,40381,40385,40393,40397,40409,40413,40427,40431,40439,40443,40451,40455,40459,40471,40475,40489,40497,40501,40505,40513,40523,40533,40543,40553,40563,40573,40579,40583,40587,40599,40619,40625,40633],{"__ignoreMap":40},[45,39440,39441,39443],{"class":47,"line":48},[45,39442,30473],{"class":93},[45,39444,30476],{"class":51},[45,39446,39447,39449,39451,39453],{"class":47,"line":125},[45,39448,30818],{"class":93},[45,39450,37995],{"class":51},[45,39452,30473],{"class":93},[45,39454,38000],{"class":51},[45,39456,39457,39459,39461,39463],{"class":47,"line":1262},[45,39458,30818],{"class":93},[45,39460,30821],{"class":51},[45,39462,30473],{"class":93},[45,39464,30826],{"class":51},[45,39466,39467,39469,39471,39473],{"class":47,"line":1277},[45,39468,30818],{"class":93},[45,39470,30838],{"class":51},[45,39472,30473],{"class":93},[45,39474,30843],{"class":51},[45,39476,39477],{"class":47,"line":1283},[45,39478,2483],{"emptyLinePlaceholder":133},[45,39480,39481,39483,39485,39487,39489,39491,39493],{"class":47,"line":1297},[45,39482,14777],{"class":93},[45,39484,38031],{"class":2046},[45,39486,209],{"class":51},[45,39488,30859],{"class":2046},[45,39490,765],{"class":51},[45,39492,30864],{"class":2046},[45,39494,30867],{"class":51},[45,39496,39497,39499,39501],{"class":47,"line":1303},[45,39498,30882],{"class":93},[45,39500,30885],{"class":257},[45,39502,30888],{"class":51},[45,39504,39505,39507,39509,39511,39513,39515,39517,39519],{"class":47,"line":1394},[45,39506,30898],{"class":257},[45,39508,209],{"class":51},[45,39510,38058],{"class":257},[45,39512,12518],{"class":51},[45,39514,30904],{"class":257},[45,39516,30907],{"class":51},[45,39518,30910],{"class":257},[45,39520,2059],{"class":51},[45,39522,39523],{"class":47,"line":1400},[45,39524,38073],{"class":267},[45,39526,39527],{"class":47,"line":1412},[45,39528,38078],{"class":267},[45,39530,39531,39533,39535,39537],{"class":47,"line":1695},[45,39532,30926],{"class":257},[45,39534,38085],{"class":51},[45,39536,254],{"class":93},[45,39538,38090],{"class":51},[45,39540,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561,39563,39565,39567,39569,39571,39573],{"class":47,"line":1700},[45,39542,38095],{"class":51},[45,39544,30937],{"class":5299},[45,39546,254],{"class":93},[45,39548,426],{"class":257},[45,39550,586],{"class":51},[45,39552,30946],{"class":5299},[45,39554,254],{"class":93},[45,39556,412],{"class":257},[45,39558,586],{"class":51},[45,39560,30955],{"class":5299},[45,39562,254],{"class":93},[45,39564,280],{"class":257},[45,39566,586],{"class":51},[45,39568,30964],{"class":5299},[45,39570,254],{"class":93},[45,39572,426],{"class":257},[45,39574,38128],{"class":51},[45,39576,39577],{"class":47,"line":1706},[45,39578,38133],{"class":51},[45,39580,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613],{"class":47,"line":1711},[45,39582,38095],{"class":51},[45,39584,30937],{"class":5299},[45,39586,254],{"class":93},[45,39588,412],{"class":257},[45,39590,586],{"class":51},[45,39592,30946],{"class":5299},[45,39594,254],{"class":93},[45,39596,412],{"class":257},[45,39598,586],{"class":51},[45,39600,30955],{"class":5299},[45,39602,254],{"class":93},[45,39604,280],{"class":257},[45,39606,586],{"class":51},[45,39608,30964],{"class":5299},[45,39610,254],{"class":93},[45,39612,426],{"class":257},[45,39614,38128],{"class":51},[45,39616,39617],{"class":47,"line":1725},[45,39618,38133],{"class":51},[45,39620,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645],{"class":47,"line":1730},[45,39622,38178],{"class":51},[45,39624,30955],{"class":5299},[45,39626,254],{"class":93},[45,39628,286],{"class":257},[45,39630,586],{"class":51},[45,39632,31010],{"class":5299},[45,39634,254],{"class":93},[45,39636,286],{"class":257},[45,39638,586],{"class":51},[45,39640,30964],{"class":5299},[45,39642,254],{"class":93},[45,39644,400],{"class":257},[45,39646,215],{"class":51},[45,39648,39649],{"class":47,"line":1736},[45,39650,38207],{"class":51},[45,39652,39653],{"class":47,"line":1757},[45,39654,38212],{"class":267},[45,39656,39657,39659,39661,39663],{"class":47,"line":1762},[45,39658,30926],{"class":257},[45,39660,38219],{"class":51},[45,39662,254],{"class":93},[45,39664,38090],{"class":51},[45,39666,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699],{"class":47,"line":1776},[45,39668,38095],{"class":51},[45,39670,30937],{"class":5299},[45,39672,254],{"class":93},[45,39674,412],{"class":257},[45,39676,586],{"class":51},[45,39678,30946],{"class":5299},[45,39680,254],{"class":93},[45,39682,32151],{"class":257},[45,39684,586],{"class":51},[45,39686,30955],{"class":5299},[45,39688,254],{"class":93},[45,39690,280],{"class":257},[45,39692,586],{"class":51},[45,39694,30964],{"class":5299},[45,39696,254],{"class":93},[45,39698,426],{"class":257},[45,39700,38128],{"class":51},[45,39702,39703],{"class":47,"line":1781},[45,39704,38133],{"class":51},[45,39706,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739],{"class":47,"line":1810},[45,39708,38095],{"class":51},[45,39710,30937],{"class":5299},[45,39712,254],{"class":93},[45,39714,32151],{"class":257},[45,39716,586],{"class":51},[45,39718,30946],{"class":5299},[45,39720,254],{"class":93},[45,39722,32151],{"class":257},[45,39724,586],{"class":51},[45,39726,30955],{"class":5299},[45,39728,254],{"class":93},[45,39730,280],{"class":257},[45,39732,586],{"class":51},[45,39734,30964],{"class":5299},[45,39736,254],{"class":93},[45,39738,426],{"class":257},[45,39740,38128],{"class":51},[45,39742,39743],{"class":47,"line":1815},[45,39744,38133],{"class":51},[45,39746,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771],{"class":47,"line":1832},[45,39748,38178],{"class":51},[45,39750,30955],{"class":5299},[45,39752,254],{"class":93},[45,39754,286],{"class":257},[45,39756,586],{"class":51},[45,39758,31010],{"class":5299},[45,39760,254],{"class":93},[45,39762,286],{"class":257},[45,39764,586],{"class":51},[45,39766,30964],{"class":5299},[45,39768,254],{"class":93},[45,39770,400],{"class":257},[45,39772,215],{"class":51},[45,39774,39775],{"class":47,"line":1837},[45,39776,38207],{"class":51},[45,39778,39779],{"class":47,"line":1842},[45,39780,38340],{"class":267},[45,39782,39783,39785,39787,39789],{"class":47,"line":1847},[45,39784,30926],{"class":257},[45,39786,38347],{"class":51},[45,39788,254],{"class":93},[45,39790,38090],{"class":51},[45,39792,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825],{"class":47,"line":1861},[45,39794,38095],{"class":51},[45,39796,30937],{"class":5299},[45,39798,254],{"class":93},[45,39800,32151],{"class":257},[45,39802,586],{"class":51},[45,39804,30946],{"class":5299},[45,39806,254],{"class":93},[45,39808,34951],{"class":257},[45,39810,586],{"class":51},[45,39812,30955],{"class":5299},[45,39814,254],{"class":93},[45,39816,280],{"class":257},[45,39818,586],{"class":51},[45,39820,30964],{"class":5299},[45,39822,254],{"class":93},[45,39824,426],{"class":257},[45,39826,38128],{"class":51},[45,39828,39829],{"class":47,"line":1866},[45,39830,38133],{"class":51},[45,39832,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865],{"class":47,"line":2660},[45,39834,38095],{"class":51},[45,39836,30937],{"class":5299},[45,39838,254],{"class":93},[45,39840,34951],{"class":257},[45,39842,586],{"class":51},[45,39844,30946],{"class":5299},[45,39846,254],{"class":93},[45,39848,34951],{"class":257},[45,39850,586],{"class":51},[45,39852,30955],{"class":5299},[45,39854,254],{"class":93},[45,39856,280],{"class":257},[45,39858,586],{"class":51},[45,39860,30964],{"class":5299},[45,39862,254],{"class":93},[45,39864,426],{"class":257},[45,39866,38128],{"class":51},[45,39868,39869],{"class":47,"line":2674},[45,39870,38133],{"class":51},[45,39872,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905],{"class":47,"line":2682},[45,39874,38095],{"class":51},[45,39876,30937],{"class":5299},[45,39878,254],{"class":93},[45,39880,34951],{"class":257},[45,39882,586],{"class":51},[45,39884,30946],{"class":5299},[45,39886,254],{"class":93},[45,39888,34951],{"class":257},[45,39890,586],{"class":51},[45,39892,30955],{"class":5299},[45,39894,254],{"class":93},[45,39896,280],{"class":257},[45,39898,586],{"class":51},[45,39900,30964],{"class":5299},[45,39902,254],{"class":93},[45,39904,426],{"class":257},[45,39906,38128],{"class":51},[45,39908,39909],{"class":47,"line":2687},[45,39910,38133],{"class":51},[45,39912,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937],{"class":47,"line":2693},[45,39914,38178],{"class":51},[45,39916,30955],{"class":5299},[45,39918,254],{"class":93},[45,39920,286],{"class":257},[45,39922,586],{"class":51},[45,39924,31010],{"class":5299},[45,39926,254],{"class":93},[45,39928,286],{"class":257},[45,39930,586],{"class":51},[45,39932,30964],{"class":5299},[45,39934,254],{"class":93},[45,39936,400],{"class":257},[45,39938,215],{"class":51},[45,39940,39941],{"class":47,"line":2699},[45,39942,38207],{"class":51},[45,39944,39945],{"class":47,"line":2704},[45,39946,38508],{"class":267},[45,39948,39949,39951,39953,39955],{"class":47,"line":8031},[45,39950,30926],{"class":257},[45,39952,38515],{"class":51},[45,39954,254],{"class":93},[45,39956,38090],{"class":51},[45,39958,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991],{"class":47,"line":8055},[45,39960,38095],{"class":51},[45,39962,30937],{"class":5299},[45,39964,254],{"class":93},[45,39966,34951],{"class":257},[45,39968,586],{"class":51},[45,39970,30946],{"class":5299},[45,39972,254],{"class":93},[45,39974,38538],{"class":257},[45,39976,586],{"class":51},[45,39978,30955],{"class":5299},[45,39980,254],{"class":93},[45,39982,280],{"class":257},[45,39984,586],{"class":51},[45,39986,30964],{"class":5299},[45,39988,254],{"class":93},[45,39990,426],{"class":257},[45,39992,38128],{"class":51},[45,39994,39995],{"class":47,"line":8060},[45,39996,38133],{"class":51},[45,39998,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031],{"class":47,"line":8066},[45,40000,38095],{"class":51},[45,40002,30937],{"class":5299},[45,40004,254],{"class":93},[45,40006,38538],{"class":257},[45,40008,586],{"class":51},[45,40010,30946],{"class":5299},[45,40012,254],{"class":93},[45,40014,38538],{"class":257},[45,40016,586],{"class":51},[45,40018,30955],{"class":5299},[45,40020,254],{"class":93},[45,40022,280],{"class":257},[45,40024,586],{"class":51},[45,40026,30964],{"class":5299},[45,40028,254],{"class":93},[45,40030,426],{"class":257},[45,40032,38128],{"class":51},[45,40034,40035],{"class":47,"line":8093},[45,40036,38133],{"class":51},[45,40038,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071],{"class":47,"line":8098},[45,40040,38095],{"class":51},[45,40042,30937],{"class":5299},[45,40044,254],{"class":93},[45,40046,38538],{"class":257},[45,40048,586],{"class":51},[45,40050,30946],{"class":5299},[45,40052,254],{"class":93},[45,40054,38538],{"class":257},[45,40056,586],{"class":51},[45,40058,30955],{"class":5299},[45,40060,254],{"class":93},[45,40062,280],{"class":257},[45,40064,586],{"class":51},[45,40066,30964],{"class":5299},[45,40068,254],{"class":93},[45,40070,426],{"class":257},[45,40072,38128],{"class":51},[45,40074,40075],{"class":47,"line":8104},[45,40076,38133],{"class":51},[45,40078,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103],{"class":47,"line":8116},[45,40080,38178],{"class":51},[45,40082,30955],{"class":5299},[45,40084,254],{"class":93},[45,40086,286],{"class":257},[45,40088,586],{"class":51},[45,40090,31010],{"class":5299},[45,40092,254],{"class":93},[45,40094,286],{"class":257},[45,40096,586],{"class":51},[45,40098,30964],{"class":5299},[45,40100,254],{"class":93},[45,40102,400],{"class":257},[45,40104,215],{"class":51},[45,40106,40107],{"class":47,"line":8128},[45,40108,38207],{"class":51},[45,40110,40111],{"class":47,"line":8140},[45,40112,38677],{"class":267},[45,40114,40115,40117,40119,40121],{"class":47,"line":9799},[45,40116,30926],{"class":257},[45,40118,38684],{"class":51},[45,40120,254],{"class":93},[45,40122,38090],{"class":51},[45,40124,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157],{"class":47,"line":9824},[45,40126,38095],{"class":51},[45,40128,30937],{"class":5299},[45,40130,254],{"class":93},[45,40132,38538],{"class":257},[45,40134,586],{"class":51},[45,40136,30946],{"class":5299},[45,40138,254],{"class":93},[45,40140,38538],{"class":257},[45,40142,586],{"class":51},[45,40144,30955],{"class":5299},[45,40146,254],{"class":93},[45,40148,280],{"class":257},[45,40150,586],{"class":51},[45,40152,30964],{"class":5299},[45,40154,254],{"class":93},[45,40156,426],{"class":257},[45,40158,38128],{"class":51},[45,40160,40161],{"class":47,"line":9847},[45,40162,38133],{"class":51},[45,40164,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197],{"class":47,"line":9871},[45,40166,38095],{"class":51},[45,40168,30937],{"class":5299},[45,40170,254],{"class":93},[45,40172,38538],{"class":257},[45,40174,586],{"class":51},[45,40176,30946],{"class":5299},[45,40178,254],{"class":93},[45,40180,38538],{"class":257},[45,40182,586],{"class":51},[45,40184,30955],{"class":5299},[45,40186,254],{"class":93},[45,40188,280],{"class":257},[45,40190,586],{"class":51},[45,40192,30964],{"class":5299},[45,40194,254],{"class":93},[45,40196,426],{"class":257},[45,40198,38128],{"class":51},[45,40200,40201],{"class":47,"line":9876},[45,40202,38133],{"class":51},[45,40204,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237],{"class":47,"line":9881},[45,40206,38095],{"class":51},[45,40208,30937],{"class":5299},[45,40210,254],{"class":93},[45,40212,38538],{"class":257},[45,40214,586],{"class":51},[45,40216,30946],{"class":5299},[45,40218,254],{"class":93},[45,40220,38538],{"class":257},[45,40222,586],{"class":51},[45,40224,30955],{"class":5299},[45,40226,254],{"class":93},[45,40228,280],{"class":257},[45,40230,586],{"class":51},[45,40232,30964],{"class":5299},[45,40234,254],{"class":93},[45,40236,426],{"class":257},[45,40238,38128],{"class":51},[45,40240,40241],{"class":47,"line":9886},[45,40242,38133],{"class":51},[45,40244,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269],{"class":47,"line":9895},[45,40246,38178],{"class":51},[45,40248,30955],{"class":5299},[45,40250,254],{"class":93},[45,40252,286],{"class":257},[45,40254,586],{"class":51},[45,40256,31010],{"class":5299},[45,40258,254],{"class":93},[45,40260,286],{"class":257},[45,40262,586],{"class":51},[45,40264,30964],{"class":5299},[45,40266,254],{"class":93},[45,40268,400],{"class":257},[45,40270,215],{"class":51},[45,40272,40273],{"class":47,"line":9900},[45,40274,38207],{"class":51},[45,40276,40277],{"class":47,"line":9906},[45,40278,38845],{"class":267},[45,40280,40281,40283,40285,40287],{"class":47,"line":9927},[45,40282,30926],{"class":257},[45,40284,38852],{"class":51},[45,40286,254],{"class":93},[45,40288,38090],{"class":51},[45,40290,40291],{"class":47,"line":9933},[45,40292,38861],{"class":267},[45,40294,40295],{"class":47,"line":9947},[45,40296,38866],{"class":267},[45,40298,40299],{"class":47,"line":9953},[45,40300,38871],{"class":51},[45,40302,40303,40305,40307,40309,40311,40313,40315,40317,40319],{"class":47,"line":9980},[45,40304,38876],{"class":51},[45,40306,577],{"class":257},[45,40308,663],{"class":93},[45,40310,577],{"class":257},[45,40312,663],{"class":93},[45,40314,38538],{"class":257},[45,40316,586],{"class":51},[45,40318,34951],{"class":257},[45,40320,38128],{"class":51},[45,40322,40323],{"class":47,"line":9989},[45,40324,38133],{"class":51},[45,40326,40327,40329,40331,40333,40335],{"class":47,"line":9995},[45,40328,38876],{"class":51},[45,40330,34951],{"class":257},[45,40332,586],{"class":51},[45,40334,32151],{"class":257},[45,40336,38128],{"class":51},[45,40338,40339],{"class":47,"line":10003},[45,40340,38133],{"class":51},[45,40342,40343,40345,40347,40349,40351],{"class":47,"line":10008},[45,40344,38876],{"class":51},[45,40346,32151],{"class":257},[45,40348,586],{"class":51},[45,40350,654],{"class":257},[45,40352,215],{"class":51},[45,40354,40355],{"class":47,"line":16687},[45,40356,38207],{"class":51},[45,40358,40359],{"class":47,"line":16693},[45,40360,2483],{"emptyLinePlaceholder":133},[45,40362,40363],{"class":47,"line":16716},[45,40364,38937],{"class":267},[45,40366,40367],{"class":47,"line":16722},[45,40368,38942],{"class":267},[45,40370,40371,40373,40375,40377,40379],{"class":47,"line":16745},[45,40372,3486],{"class":93},[45,40374,38949],{"class":51},[45,40376,26126],{"class":93},[45,40378,38954],{"class":257},[45,40380,38957],{"class":51},[45,40382,40383],{"class":47,"line":16759},[45,40384,38962],{"class":267},[45,40386,40387,40389,40391],{"class":47,"line":16779},[45,40388,4725],{"class":93},[45,40390,38969],{"class":257},[45,40392,38972],{"class":51},[45,40394,40395],{"class":47,"line":16785},[45,40396,38977],{"class":267},[45,40398,40399,40401,40403,40405,40407],{"class":47,"line":16796},[45,40400,38982],{"class":51},[45,40402,38985],{"class":5299},[45,40404,254],{"class":93},[45,40406,38990],{"class":313},[45,40408,215],{"class":51},[45,40410,40411],{"class":47,"line":16819},[45,40412,38997],{"class":267},[45,40414,40415,40417,40419,40421,40423,40425],{"class":47,"line":16841},[45,40416,39002],{"class":93},[45,40418,39005],{"class":51},[45,40420,39008],{"class":93},[45,40422,39011],{"class":93},[45,40424,39014],{"class":257},[45,40426,3822],{"class":51},[45,40428,40429],{"class":47,"line":16846},[45,40430,39021],{"class":267},[45,40432,40433,40435,40437],{"class":47,"line":16852},[45,40434,39026],{"class":51},[45,40436,400],{"class":257},[45,40438,215],{"class":51},[45,40440,40441],{"class":47,"line":16866},[45,40442,39035],{"class":267},[45,40444,40445,40447,40449],{"class":47,"line":16879},[45,40446,39040],{"class":93},[45,40448,38969],{"class":257},[45,40450,39045],{"class":51},[45,40452,40453],{"class":47,"line":16884},[45,40454,39050],{"class":267},[45,40456,40457],{"class":47,"line":16898},[45,40458,39055],{"class":267},[45,40460,40461,40463,40465,40467,40469],{"class":47,"line":16903},[45,40462,39060],{"class":51},[45,40464,400],{"class":257},[45,40466,586],{"class":51},[45,40468,39067],{"class":257},[45,40470,215],{"class":51},[45,40472,40473],{"class":47,"line":16909},[45,40474,39074],{"class":267},[45,40476,40477,40479,40481,40483,40485,40487],{"class":47,"line":16914},[45,40478,39002],{"class":93},[45,40480,39005],{"class":51},[45,40482,39008],{"class":93},[45,40484,39011],{"class":93},[45,40486,39014],{"class":257},[45,40488,3822],{"class":51},[45,40490,40491,40493,40495],{"class":47,"line":16928},[45,40492,39026],{"class":51},[45,40494,400],{"class":257},[45,40496,215],{"class":51},[45,40498,40499],{"class":47,"line":16933},[45,40500,2483],{"emptyLinePlaceholder":133},[45,40502,40503],{"class":47,"line":16938},[45,40504,35246],{"class":267},[45,40506,40507,40509,40511],{"class":47,"line":16952},[45,40508,30882],{"class":93},[45,40510,31174],{"class":2046},[45,40512,31177],{"class":51},[45,40514,40515,40517,40519,40521],{"class":47,"line":16964},[45,40516,31182],{"class":51},[45,40518,254],{"class":93},[45,40520,30904],{"class":257},[45,40522,39123],{"class":51},[45,40524,40525,40527,40529,40531],{"class":47,"line":16969},[45,40526,31182],{"class":51},[45,40528,254],{"class":93},[45,40530,30904],{"class":257},[45,40532,39134],{"class":51},[45,40534,40535,40537,40539,40541],{"class":47,"line":16982},[45,40536,31182],{"class":51},[45,40538,254],{"class":93},[45,40540,30904],{"class":257},[45,40542,39145],{"class":51},[45,40544,40545,40547,40549,40551],{"class":47,"line":16987},[45,40546,31182],{"class":51},[45,40548,254],{"class":93},[45,40550,30904],{"class":257},[45,40552,39156],{"class":51},[45,40554,40555,40557,40559,40561],{"class":47,"line":16992},[45,40556,31182],{"class":51},[45,40558,254],{"class":93},[45,40560,30904],{"class":257},[45,40562,39167],{"class":51},[45,40564,40565,40567,40569,40571],{"class":47,"line":16997},[45,40566,31182],{"class":51},[45,40568,254],{"class":93},[45,40570,30904],{"class":257},[45,40572,39178],{"class":51},[45,40574,40575,40577],{"class":47,"line":17010},[45,40576,14835],{"class":93},[45,40578,31290],{"class":51},[45,40580,40581],{"class":47,"line":17015},[45,40582,2483],{"emptyLinePlaceholder":133},[45,40584,40585],{"class":47,"line":32714},[45,40586,39193],{"class":267},[45,40588,40589,40591,40593,40595,40597],{"class":47,"line":32720},[45,40590,1614],{"class":93},[45,40592,31301],{"class":257},[45,40594,3032],{"class":93},[45,40596,39204],{"class":313},[45,40598,3822],{"class":51},[45,40600,40601,40603,40605,40607,40609,40611,40613,40615,40617],{"class":47,"line":32726},[45,40602,31318],{"class":51},[45,40604,254],{"class":93},[45,40606,30532],{"class":51},[45,40608,31325],{"class":313},[45,40610,1787],{"class":93},[45,40612,31330],{"class":51},[45,40614,1784],{"class":93},[45,40616,30557],{"class":313},[45,40618,215],{"class":51},[45,40620,40621,40623],{"class":47,"line":32732},[45,40622,31380],{"class":257},[45,40624,30566],{"class":51},[45,40626,40627,40629,40631],{"class":47,"line":32738},[45,40628,31370],{"class":51},[45,40630,254],{"class":93},[45,40632,39241],{"class":51},[45,40634,40635,40637,40639,40641,40643,40645,40647,40649],{"class":47,"line":32749},[45,40636,31380],{"class":257},[45,40638,31383],{"class":51},[45,40640,426],{"class":257},[45,40642,586],{"class":51},[45,40644,31582],{"class":257},[45,40646,586],{"class":51},[45,40648,31582],{"class":257},[45,40650,31396],{"class":51},[159,40652,40653],{"start":1262},[162,40654,40655],{},"测试代码",[35,40657,40659],{"className":37,"code":40658,"language":39,"meta":40,"style":40},"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",[42,40660,40661,40667,40677,40687,40691,40701,40712,40716,40720,40724,40732,40748,40758,40774,40784,40798,40802,40812,40822,40832,40838,40842,40846,40854,40858,40874,40882,40886,40890,40898,40906,40910,40914,40918,40922,40928,40932,40942,40950,40958,40962,40966,40970,40978,40982,40998,41002,41006,41010,41022,41026,41038,41042,41046,41058,41062,41072,41076,41080,41092,41096,41105,41109,41113,41121,41125,41133,41137,41141,41145,41149,41153,41169,41177,41181,41185,41233,41239,41243,41253,41261,41269,41273,41277,41281,41285,41293,41297,41313,41317,41325,41333],{"__ignoreMap":40},[45,40662,40663,40665],{"class":47,"line":48},[45,40664,30473],{"class":93},[45,40666,30476],{"class":51},[45,40668,40669,40671,40673,40675],{"class":47,"line":125},[45,40670,30473],{"class":93},[45,40672,31496],{"class":51},[45,40674,31464],{"class":93},[45,40676,31501],{"class":51},[45,40678,40679,40681,40683,40685],{"class":47,"line":1262},[45,40680,30818],{"class":93},[45,40682,31479],{"class":51},[45,40684,30473],{"class":93},[45,40686,31484],{"class":51},[45,40688,40689],{"class":47,"line":1277},[45,40690,34003],{"class":267},[45,40692,40693,40695,40697,40699],{"class":47,"line":1283},[45,40694,30818],{"class":93},[45,40696,31449],{"class":51},[45,40698,30473],{"class":93},[45,40700,31454],{"class":51},[45,40702,40703,40705,40707,40709],{"class":47,"line":1297},[45,40704,30818],{"class":93},[45,40706,31995],{"class":51},[45,40708,30473],{"class":93},[45,40710,40711],{"class":257}," VGG16\n",[45,40713,40714],{"class":47,"line":1303},[45,40715,2483],{"emptyLinePlaceholder":133},[45,40717,40718],{"class":47,"line":1394},[45,40719,2483],{"emptyLinePlaceholder":133},[45,40721,40722],{"class":47,"line":1400},[45,40723,34032],{"class":267},[45,40725,40726,40728,40730],{"class":47,"line":1412},[45,40727,32028],{"class":93},[45,40729,34039],{"class":2046},[45,40731,32034],{"class":51},[45,40733,40734,40736,40738,40740,40742,40744,40746],{"class":47,"line":1695},[45,40735,34046],{"class":51},[45,40737,254],{"class":93},[45,40739,31536],{"class":51},[45,40741,31539],{"class":5299},[45,40743,254],{"class":93},[45,40745,31544],{"class":313},[45,40747,31547],{"class":51},[45,40749,40750,40752,40754,40756],{"class":47,"line":1700},[45,40751,34063],{"class":5299},[45,40753,254],{"class":93},[45,40755,34068],{"class":257},[45,40757,31547],{"class":51},[45,40759,40760,40762,40764,40766,40768,40770,40772],{"class":47,"line":1706},[45,40761,34075],{"class":5299},[45,40763,254],{"class":93},[45,40765,31574],{"class":51},[45,40767,31577],{"class":5299},[45,40769,254],{"class":93},[45,40771,31582],{"class":257},[45,40773,31585],{"class":51},[45,40775,40776,40778,40780,40782],{"class":47,"line":1711},[45,40777,34092],{"class":5299},[45,40779,254],{"class":93},[45,40781,31557],{"class":257},[45,40783,215],{"class":51},[45,40785,40786,40788,40790,40792,40794,40796],{"class":47,"line":1725},[45,40787,34103],{"class":51},[45,40789,254],{"class":93},[45,40791,31615],{"class":51},[45,40793,31618],{"class":5299},[45,40795,254],{"class":93},[45,40797,34114],{"class":51},[45,40799,40800],{"class":47,"line":1730},[45,40801,34119],{"class":267},[45,40803,40804,40806,40808,40810],{"class":47,"line":1736},[45,40805,34124],{"class":5299},[45,40807,254],{"class":93},[45,40809,426],{"class":257},[45,40811,31547],{"class":51},[45,40813,40814,40816,40818,40820],{"class":47,"line":1757},[45,40815,34135],{"class":5299},[45,40817,254],{"class":93},[45,40819,31557],{"class":257},[45,40821,31547],{"class":51},[45,40823,40824,40826,40828,40830],{"class":47,"line":1762},[45,40825,34146],{"class":5299},[45,40827,254],{"class":93},[45,40829,400],{"class":257},[45,40831,215],{"class":51},[45,40833,40834,40836],{"class":47,"line":1776},[45,40835,4173],{"class":93},[45,40837,34159],{"class":51},[45,40839,40840],{"class":47,"line":1781},[45,40841,2483],{"emptyLinePlaceholder":133},[45,40843,40844],{"class":47,"line":1810},[45,40845,34168],{"class":267},[45,40847,40848,40850,40852],{"class":47,"line":1815},[45,40849,32028],{"class":93},[45,40851,34175],{"class":2046},[45,40853,34178],{"class":51},[45,40855,40856],{"class":47,"line":1832},[45,40857,34183],{"class":267},[45,40859,40860,40862,40864,40866,40868,40870,40872],{"class":47,"line":1837},[45,40861,31318],{"class":51},[45,40863,254],{"class":93},[45,40865,31325],{"class":313},[45,40867,1787],{"class":93},[45,40869,31330],{"class":51},[45,40871,1784],{"class":93},[45,40873,34200],{"class":313},[45,40875,40876,40878,40880],{"class":47,"line":1842},[45,40877,31370],{"class":51},[45,40879,254],{"class":93},[45,40881,32370],{"class":51},[45,40883,40884],{"class":47,"line":1847},[45,40885,2483],{"emptyLinePlaceholder":133},[45,40887,40888],{"class":47,"line":1861},[45,40889,34217],{"class":267},[45,40891,40892,40894,40896],{"class":47,"line":1866},[45,40893,34222],{"class":51},[45,40895,254],{"class":93},[45,40897,32423],{"class":257},[45,40899,40900,40902,40904],{"class":47,"line":2660},[45,40901,34231],{"class":51},[45,40903,254],{"class":93},[45,40905,3168],{"class":257},[45,40907,40908],{"class":47,"line":2674},[45,40909,2483],{"emptyLinePlaceholder":133},[45,40911,40912],{"class":47,"line":2682},[45,40913,34244],{"class":267},[45,40915,40916],{"class":47,"line":2687},[45,40917,34249],{"class":267},[45,40919,40920],{"class":47,"line":2693},[45,40921,34254],{"class":267},[45,40923,40924,40926],{"class":47,"line":2699},[45,40925,34259],{"class":93},[45,40927,32965],{"class":51},[45,40929,40930],{"class":47,"line":2704},[45,40931,34266],{"class":267},[45,40933,40934,40936,40938,40940],{"class":47,"line":8031},[45,40935,3486],{"class":93},[45,40937,34273],{"class":51},[45,40939,26126],{"class":93},[45,40941,34278],{"class":51},[45,40943,40944,40946,40948],{"class":47,"line":8055},[45,40945,34283],{"class":51},[45,40947,254],{"class":93},[45,40949,34288],{"class":51},[45,40951,40952,40954,40956],{"class":47,"line":8060},[45,40953,34293],{"class":51},[45,40955,254],{"class":93},[45,40957,34298],{"class":51},[45,40959,40960],{"class":47,"line":8066},[45,40961,34303],{"class":267},[45,40963,40964],{"class":47,"line":8093},[45,40965,32956],{"class":51},[45,40967,40968],{"class":47,"line":8098},[45,40969,34312],{"class":267},[45,40971,40972,40974,40976],{"class":47,"line":8104},[45,40973,32741],{"class":51},[45,40975,254],{"class":93},[45,40977,34321],{"class":51},[45,40979,40980],{"class":47,"line":8116},[45,40981,34326],{"class":267},[45,40983,40984,40986,40988,40990,40992,40994,40996],{"class":47,"line":8128},[45,40985,32758],{"class":51},[45,40987,254],{"class":93},[45,40989,32763],{"class":51},[45,40991,32766],{"class":5299},[45,40993,254],{"class":93},[45,40995,426],{"class":257},[45,40997,215],{"class":51},[45,40999,41000],{"class":47,"line":8140},[45,41001,34347],{"class":267},[45,41003,41004],{"class":47,"line":9799},[45,41005,34352],{"class":267},[45,41007,41008],{"class":47,"line":9824},[45,41009,34357],{"class":267},[45,41011,41012,41014,41016,41018,41020],{"class":47,"line":9847},[45,41013,34362],{"class":51},[45,41015,9560],{"class":93},[45,41017,32868],{"class":51},[45,41019,3032],{"class":93},[45,41021,34371],{"class":51},[45,41023,41024],{"class":47,"line":9871},[45,41025,34376],{"class":267},[45,41027,41028,41030,41032,41034,41036],{"class":47,"line":9876},[45,41029,34381],{"class":51},[45,41031,9560],{"class":93},[45,41033,34386],{"class":51},[45,41035,400],{"class":257},[45,41037,215],{"class":51},[45,41039,41040],{"class":47,"line":9881},[45,41041,2483],{"emptyLinePlaceholder":133},[45,41043,41044],{"class":47,"line":9886},[45,41045,34399],{"class":267},[45,41047,41048,41050,41052,41054,41056],{"class":47,"line":9895},[45,41049,34404],{"class":51},[45,41051,254],{"class":93},[45,41053,34409],{"class":51},[45,41055,791],{"class":93},[45,41057,34414],{"class":51},[45,41059,41060],{"class":47,"line":9900},[45,41061,34419],{"class":267},[45,41063,41064,41066,41068,41070],{"class":47,"line":9906},[45,41065,32532],{"class":257},[45,41067,209],{"class":51},[45,41069,34428],{"class":313},[45,41071,34431],{"class":51},[45,41073,41074],{"class":47,"line":9927},[45,41075,2483],{"emptyLinePlaceholder":133},[45,41077,41078],{"class":47,"line":9933},[45,41079,34440],{"class":267},[45,41081,41082,41084,41086,41088,41090],{"class":47,"line":9947},[45,41083,1614],{"class":93},[45,41085,31301],{"class":257},[45,41087,3032],{"class":93},[45,41089,31306],{"class":313},[45,41091,3822],{"class":51},[45,41093,41094],{"class":47,"line":9953},[45,41095,34457],{"class":267},[45,41097,41098,41100,41102],{"class":47,"line":9980},[45,41099,31370],{"class":51},[45,41101,254],{"class":93},[45,41103,41104],{"class":51},"VGG16()\n",[45,41106,41107],{"class":47,"line":9989},[45,41108,34470],{"class":267},[45,41110,41111],{"class":47,"line":9995},[45,41112,34475],{"class":267},[45,41114,41115,41117,41119],{"class":47,"line":10003},[45,41116,34480],{"class":51},[45,41118,34483],{"class":313},[45,41120,30578],{"class":51},[45,41122,41123],{"class":47,"line":10008},[45,41124,34490],{"class":267},[45,41126,41127,41129,41131],{"class":47,"line":16687},[45,41128,34103],{"class":51},[45,41130,254],{"class":93},[45,41132,34499],{"class":51},[45,41134,41135],{"class":47,"line":16693},[45,41136,34504],{"class":267},[45,41138,41139],{"class":47,"line":16716},[45,41140,34509],{"class":51},[45,41142,41143],{"class":47,"line":16722},[45,41144,2483],{"emptyLinePlaceholder":133},[45,41146,41147],{"class":47,"line":16745},[45,41148,34518],{"class":267},[45,41150,41151],{"class":47,"line":16759},[45,41152,34523],{"class":267},[45,41154,41155,41157,41159,41161,41163,41165,41167],{"class":47,"line":16779},[45,41156,31318],{"class":51},[45,41158,254],{"class":93},[45,41160,31325],{"class":313},[45,41162,1787],{"class":93},[45,41164,31330],{"class":51},[45,41166,1784],{"class":93},[45,41168,34200],{"class":313},[45,41170,41171,41173,41175],{"class":47,"line":16785},[45,41172,31370],{"class":51},[45,41174,254],{"class":93},[45,41176,32370],{"class":51},[45,41178,41179],{"class":47,"line":16796},[45,41180,34552],{"class":267},[45,41182,41183],{"class":47,"line":16819},[45,41184,34557],{"class":267},[45,41186,41187,41189,41191,41193,41195,41197,41199,41201,41203,41205,41207,41209,41211,41213,41215,41217,41219,41221,41223,41225,41227,41229,41231],{"class":47,"line":16841},[45,41188,34562],{"class":51},[45,41190,254],{"class":93},[45,41192,1097],{"class":51},[45,41194,34569],{"class":313},[45,41196,586],{"class":51},[45,41198,34574],{"class":313},[45,41200,586],{"class":51},[45,41202,34579],{"class":313},[45,41204,586],{"class":51},[45,41206,34584],{"class":313},[45,41208,586],{"class":51},[45,41210,34589],{"class":313},[45,41212,586],{"class":51},[45,41214,34594],{"class":313},[45,41216,586],{"class":51},[45,41218,34599],{"class":313},[45,41220,586],{"class":51},[45,41222,34604],{"class":313},[45,41224,586],{"class":51},[45,41226,34609],{"class":313},[45,41228,586],{"class":51},[45,41230,34614],{"class":313},[45,41232,33327],{"class":51},[45,41234,41235,41237],{"class":47,"line":16846},[45,41236,34259],{"class":93},[45,41238,32965],{"class":51},[45,41240,41241],{"class":47,"line":16852},[45,41242,34627],{"class":267},[45,41244,41245,41247,41249,41251],{"class":47,"line":16866},[45,41246,3486],{"class":93},[45,41248,34634],{"class":51},[45,41250,26126],{"class":93},[45,41252,34278],{"class":51},[45,41254,41255,41257,41259],{"class":47,"line":16879},[45,41256,32691],{"class":51},[45,41258,254],{"class":93},[45,41260,32696],{"class":51},[45,41262,41263,41265,41267],{"class":47,"line":16884},[45,41264,32706],{"class":51},[45,41266,254],{"class":93},[45,41268,32711],{"class":51},[45,41270,41271],{"class":47,"line":16898},[45,41272,2483],{"emptyLinePlaceholder":133},[45,41274,41275],{"class":47,"line":16903},[45,41276,34663],{"class":267},[45,41278,41279],{"class":47,"line":16909},[45,41280,32956],{"class":51},[45,41282,41283],{"class":47,"line":16914},[45,41284,34672],{"class":267},[45,41286,41287,41289,41291],{"class":47,"line":16928},[45,41288,32741],{"class":51},[45,41290,254],{"class":93},[45,41292,32746],{"class":51},[45,41294,41295],{"class":47,"line":16933},[45,41296,34685],{"class":267},[45,41298,41299,41301,41303,41305,41307,41309,41311],{"class":47,"line":16938},[45,41300,32758],{"class":51},[45,41302,254],{"class":93},[45,41304,32763],{"class":51},[45,41306,32766],{"class":5299},[45,41308,254],{"class":93},[45,41310,426],{"class":257},[45,41312,215],{"class":51},[45,41314,41315],{"class":47,"line":16952},[45,41316,34706],{"class":267},[45,41318,41319,41321,41323],{"class":47,"line":16964},[45,41320,34711],{"class":51},[45,41322,254],{"class":93},[45,41324,34716],{"class":51},[45,41326,41327,41329,41331],{"class":47,"line":16969},[45,41328,34721],{"class":51},[45,41330,254],{"class":93},[45,41332,34726],{"class":51},[45,41334,41335,41337,41339,41341,41343,41345,41347,41349],{"class":47,"line":16982},[45,41336,34731],{"class":257},[45,41338,209],{"class":51},[45,41340,34736],{"class":313},[45,41342,34739],{"class":51},[45,41344,34742],{"class":313},[45,41346,586],{"class":51},[45,41348,34747],{"class":313},[45,41350,34750],{"class":51},[176,41352,41354],{"id":41353},"_23googlenet","2.3.GoogLeNet",[22081,41356,41358],{"id":41357},"_231原理","2.3.1.原理",[159,41360,41361],{},[162,41362,41363],{},"网络结构",[10,41365,41366],{},[1545,41367],{"alt":40,"src":41368},"\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",[10,41370,41371],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[10,41373,41374],{},[1545,41375],{"alt":40,"src":41376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[10,41378,41379],{},[1545,41380],{"alt":40,"src":41381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[10,41383,41384],{},[1545,41385],{"alt":40,"src":41386},"\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",[159,41388,41389],{"start":125},[162,41390,41391],{},"1x1卷积的优点",[10,41393,41394],{},[1545,41395],{"alt":40,"src":41396},"\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",[159,41398,41399],{"start":1262},[162,41400,41401],{},"全局平均池化层优点",[10,41403,41404],{},[1545,41405],{"alt":40,"src":41406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[10,41408,41409],{},[1545,41410],{"alt":40,"src":41411},"\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",[159,41413,41414],{"start":1277},[162,41415,41416],{},"参数详细描述",[10,41418,41419],{},[1545,41420],{"alt":40,"src":41421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[10,41423,41424],{},[1545,41425],{"alt":40,"src":41426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[10,41428,41429],{},[1545,41430],{"alt":40,"src":41431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[10,41433,41434],{},[1545,41435],{"alt":40,"src":41436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[10,41438,41439],{},[1545,41440],{"alt":40,"src":41441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[10,41443,41444],{},[1545,41445],{"alt":40,"src":41446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[10,41448,41449],{},[1545,41450],{"alt":40,"src":41451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[10,41453,41454],{},[1545,41455],{"alt":40,"src":41456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[10,41458,41459],{},[1545,41460],{"alt":40,"src":41461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[10,41463,41464],{},[1545,41465],{"alt":40,"src":41466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[10,41468,41469],{},[1545,41470],{"alt":40,"src":41471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[10,41473,41474],{},[1545,41475],{"alt":40,"src":41476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[10,41478,41479],{},[1545,41480],{"alt":40,"src":41481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[10,41483,41484],{},[1545,41485],{"alt":40,"src":41486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[10,41488,41489],{},[1545,41490],{"alt":40,"src":41491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[10,41493,41494],{},[1545,41495],{"alt":40,"src":41496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[10,41498,41499],{},[1545,41500],{"alt":40,"src":41501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[10,41503,41504],{},[1545,41505],{"alt":40,"src":41506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[10,41508,41509],{},[1545,41510],{"alt":40,"src":41511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[10,41513,41514],{},[1545,41515],{"alt":40,"src":41516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[10,41518,41519],{},[1545,41520],{"alt":40,"src":41521},"\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",[22081,41523,41525],{"id":41524},"_232代码实现","2.3.2.代码实现",[159,41527,41528],{},[162,41529,30792],{},[10,41531,41532],{},"根据原理一步一步搭建即可",[35,41534,41536],{"className":37,"code":41535,"language":39,"meta":40,"style":40},"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",[42,41537,41538,41544,41554,41564,41568,41585,41594,41609,41619,41624,41657,41662,41699,41746,41751,41787,41834,41839,41844,41879,41911,41915,41923,41939,41963,41988,42009,42014,42029,42033,42037,42042,42059,42064,42073,42088,42099,42143,42147,42175,42179,42190,42218,42222,42259,42263,42291,42295,42306,42342,42374,42402,42406,42417,42451,42483,42515,42548,42582,42610,42614,42625,42658,42690,42704,42708,42721,42725,42730,42742,42750,42772,42777,42782,42787,42792,42797,42802,42816,42824,42833,42846,42861,42870,42874,42882,42893,42904,42915,42926,42937,42943,42947,42952,42964,42984,42993],{"__ignoreMap":40},[45,41539,41540,41542],{"class":47,"line":48},[45,41541,30473],{"class":93},[45,41543,30476],{"class":51},[45,41545,41546,41548,41550,41552],{"class":47,"line":125},[45,41547,30818],{"class":93},[45,41549,30821],{"class":51},[45,41551,30473],{"class":93},[45,41553,30826],{"class":51},[45,41555,41556,41558,41560,41562],{"class":47,"line":1262},[45,41557,30818],{"class":93},[45,41559,30838],{"class":51},[45,41561,30473],{"class":93},[45,41563,30843],{"class":51},[45,41565,41566],{"class":47,"line":1277},[45,41567,2483],{"emptyLinePlaceholder":133},[45,41569,41570,41572,41575,41577,41579,41581,41583],{"class":47,"line":1283},[45,41571,14777],{"class":93},[45,41573,41574],{"class":2046}," Inception",[45,41576,209],{"class":51},[45,41578,30859],{"class":2046},[45,41580,765],{"class":51},[45,41582,30864],{"class":2046},[45,41584,30867],{"class":51},[45,41586,41587,41589,41591],{"class":47,"line":1297},[45,41588,30882],{"class":93},[45,41590,30885],{"class":257},[45,41592,41593],{"class":51},"(self,in_channels,c1,c2,c3,c4):\n",[45,41595,41596,41598,41601,41603,41605,41607],{"class":47,"line":1303},[45,41597,30898],{"class":257},[45,41599,41600],{"class":51},"(Inception,",[45,41602,30904],{"class":257},[45,41604,30907],{"class":51},[45,41606,30910],{"class":257},[45,41608,2059],{"class":51},[45,41610,41611,41613,41615,41617],{"class":47,"line":1394},[45,41612,30926],{"class":257},[45,41614,34852],{"class":51},[45,41616,254],{"class":93},[45,41618,34857],{"class":51},[45,41620,41621],{"class":47,"line":1400},[45,41622,41623],{"class":267},"        # 路线1：定义1*1卷积\n",[45,41625,41626,41628,41631,41633,41635,41637,41639,41642,41644,41646,41649,41651,41653,41655],{"class":47,"line":1412},[45,41627,30926],{"class":257},[45,41629,41630],{"class":51},".p1_1",[45,41632,254],{"class":93},[45,41634,30934],{"class":51},[45,41636,30937],{"class":5299},[45,41638,254],{"class":93},[45,41640,41641],{"class":51},"in_channels,",[45,41643,30946],{"class":5299},[45,41645,254],{"class":93},[45,41647,41648],{"class":51},"c1,",[45,41650,30955],{"class":5299},[45,41652,254],{"class":93},[45,41654,426],{"class":257},[45,41656,215],{"class":51},[45,41658,41659],{"class":47,"line":1695},[45,41660,41661],{"class":267},"        # 路线2：定义1*1卷积和3*3\n",[45,41663,41664,41666,41669,41671,41673,41675,41677,41679,41681,41683,41686,41688,41691,41693,41695,41697],{"class":47,"line":1700},[45,41665,30926],{"class":257},[45,41667,41668],{"class":51},".p2_1",[45,41670,254],{"class":93},[45,41672,30934],{"class":51},[45,41674,30937],{"class":5299},[45,41676,254],{"class":93},[45,41678,41641],{"class":51},[45,41680,30946],{"class":5299},[45,41682,254],{"class":93},[45,41684,41685],{"class":51},"c2[",[45,41687,400],{"class":257},[45,41689,41690],{"class":51},"],",[45,41692,30955],{"class":5299},[45,41694,254],{"class":93},[45,41696,426],{"class":257},[45,41698,215],{"class":51},[45,41700,41701,41703,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744],{"class":47,"line":1706},[45,41702,30926],{"class":257},[45,41704,41705],{"class":51},".p2_2",[45,41707,254],{"class":93},[45,41709,30934],{"class":51},[45,41711,30937],{"class":5299},[45,41713,254],{"class":93},[45,41715,41685],{"class":51},[45,41717,400],{"class":257},[45,41719,41690],{"class":51},[45,41721,30946],{"class":5299},[45,41723,254],{"class":93},[45,41725,41685],{"class":51},[45,41727,426],{"class":257},[45,41729,41690],{"class":51},[45,41731,30955],{"class":5299},[45,41733,254],{"class":93},[45,41735,280],{"class":257},[45,41737,586],{"class":51},[45,41739,30964],{"class":5299},[45,41741,254],{"class":93},[45,41743,426],{"class":257},[45,41745,215],{"class":51},[45,41747,41748],{"class":47,"line":1711},[45,41749,41750],{"class":267},"        # 路线3：定义1*1卷积和5*5\n",[45,41752,41753,41755,41758,41760,41762,41764,41766,41768,41770,41772,41775,41777,41779,41781,41783,41785],{"class":47,"line":1725},[45,41754,30926],{"class":257},[45,41756,41757],{"class":51},".p3_1",[45,41759,254],{"class":93},[45,41761,30934],{"class":51},[45,41763,30937],{"class":5299},[45,41765,254],{"class":93},[45,41767,41641],{"class":51},[45,41769,30946],{"class":5299},[45,41771,254],{"class":93},[45,41773,41774],{"class":51},"c3[",[45,41776,400],{"class":257},[45,41778,41690],{"class":51},[45,41780,30955],{"class":5299},[45,41782,254],{"class":93},[45,41784,426],{"class":257},[45,41786,215],{"class":51},[45,41788,41789,41791,41794,41796,41798,41800,41802,41804,41806,41808,41810,41812,41814,41816,41818,41820,41822,41824,41826,41828,41830,41832],{"class":47,"line":1730},[45,41790,30926],{"class":257},[45,41792,41793],{"class":51},".p3_2",[45,41795,254],{"class":93},[45,41797,30934],{"class":51},[45,41799,30937],{"class":5299},[45,41801,254],{"class":93},[45,41803,41774],{"class":51},[45,41805,400],{"class":257},[45,41807,41690],{"class":51},[45,41809,30946],{"class":5299},[45,41811,254],{"class":93},[45,41813,41774],{"class":51},[45,41815,426],{"class":257},[45,41817,41690],{"class":51},[45,41819,30955],{"class":5299},[45,41821,254],{"class":93},[45,41823,527],{"class":257},[45,41825,586],{"class":51},[45,41827,30964],{"class":5299},[45,41829,254],{"class":93},[45,41831,286],{"class":257},[45,41833,215],{"class":51},[45,41835,41836],{"class":47,"line":1736},[45,41837,41838],{"class":267},"        # 路线4：定义3*3最大池化和1*1卷积\n",[45,41840,41841],{"class":47,"line":1757},[45,41842,41843],{"class":267},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[45,41845,41846,41848,41851,41853,41855,41857,41859,41861,41863,41865,41867,41869,41871,41873,41875,41877],{"class":47,"line":1762},[45,41847,30926],{"class":257},[45,41849,41850],{"class":51},".p4_1",[45,41852,254],{"class":93},[45,41854,34910],{"class":51},[45,41856,30955],{"class":5299},[45,41858,254],{"class":93},[45,41860,280],{"class":257},[45,41862,586],{"class":51},[45,41864,31010],{"class":5299},[45,41866,254],{"class":93},[45,41868,426],{"class":257},[45,41870,586],{"class":51},[45,41872,30964],{"class":5299},[45,41874,254],{"class":93},[45,41876,426],{"class":257},[45,41878,215],{"class":51},[45,41880,41881,41883,41886,41888,41890,41892,41894,41896,41898,41900,41903,41905,41907,41909],{"class":47,"line":1776},[45,41882,30926],{"class":257},[45,41884,41885],{"class":51},".p4_2",[45,41887,254],{"class":93},[45,41889,30934],{"class":51},[45,41891,30937],{"class":5299},[45,41893,254],{"class":93},[45,41895,41641],{"class":51},[45,41897,30946],{"class":5299},[45,41899,254],{"class":93},[45,41901,41902],{"class":51},"c4,",[45,41904,30955],{"class":5299},[45,41906,254],{"class":93},[45,41908,426],{"class":257},[45,41910,215],{"class":51},[45,41912,41913],{"class":47,"line":1781},[45,41914,2483],{"emptyLinePlaceholder":133},[45,41916,41917,41919,41921],{"class":47,"line":1810},[45,41918,30882],{"class":93},[45,41920,31174],{"class":2046},[45,41922,31177],{"class":51},[45,41924,41925,41928,41930,41932,41934,41936],{"class":47,"line":1815},[45,41926,41927],{"class":51},"        p1",[45,41929,254],{"class":93},[45,41931,30904],{"class":257},[45,41933,35265],{"class":51},[45,41935,30904],{"class":257},[45,41937,41938],{"class":51},".p1_1(x))\n",[45,41940,41941,41943,41945,41947,41949,41951,41954,41956,41958,41960],{"class":47,"line":1832},[45,41942,7168],{"class":51},[45,41944,254],{"class":93},[45,41946,30904],{"class":257},[45,41948,35265],{"class":51},[45,41950,30904],{"class":257},[45,41952,41953],{"class":51},".p2_2(",[45,41955,30904],{"class":257},[45,41957,35265],{"class":51},[45,41959,30904],{"class":257},[45,41961,41962],{"class":51},".p2_1(x))))\n",[45,41964,41965,41968,41970,41972,41974,41976,41979,41981,41983,41985],{"class":47,"line":1837},[45,41966,41967],{"class":51},"        p3",[45,41969,254],{"class":93},[45,41971,30904],{"class":257},[45,41973,35265],{"class":51},[45,41975,30904],{"class":257},[45,41977,41978],{"class":51},".p3_2(",[45,41980,30904],{"class":257},[45,41982,35265],{"class":51},[45,41984,30904],{"class":257},[45,41986,41987],{"class":51},".p3_1(x))))\n",[45,41989,41990,41993,41995,41997,41999,42001,42004,42006],{"class":47,"line":1842},[45,41991,41992],{"class":51},"        p4",[45,41994,254],{"class":93},[45,41996,30904],{"class":257},[45,41998,35265],{"class":51},[45,42000,30904],{"class":257},[45,42002,42003],{"class":51},".p4_2(",[45,42005,30904],{"class":257},[45,42007,42008],{"class":51},".p4_1(x)))\n",[45,42010,42011],{"class":47,"line":1847},[45,42012,42013],{"class":267},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[45,42015,42016,42018,42021,42023,42025,42027],{"class":47,"line":1861},[45,42017,14835],{"class":93},[45,42019,42020],{"class":51}," torch.cat((p1,p2,p3,p4),",[45,42022,32766],{"class":5299},[45,42024,254],{"class":93},[45,42026,426],{"class":257},[45,42028,215],{"class":51},[45,42030,42031],{"class":47,"line":1866},[45,42032,2483],{"emptyLinePlaceholder":133},[45,42034,42035],{"class":47,"line":2660},[45,42036,2483],{"emptyLinePlaceholder":133},[45,42038,42039],{"class":47,"line":2674},[45,42040,42041],{"class":267},"# 搭建GoogLeNet网络\n",[45,42043,42044,42046,42049,42051,42053,42055,42057],{"class":47,"line":2682},[45,42045,14777],{"class":93},[45,42047,42048],{"class":2046}," GoogLeNet",[45,42050,209],{"class":51},[45,42052,30859],{"class":2046},[45,42054,765],{"class":51},[45,42056,30864],{"class":2046},[45,42058,30867],{"class":51},[45,42060,42061],{"class":47,"line":2687},[45,42062,42063],{"class":267},"    # 必须把Inception导入到里边\n",[45,42065,42066,42068,42070],{"class":47,"line":2693},[45,42067,30882],{"class":93},[45,42069,30885],{"class":257},[45,42071,42072],{"class":51},"(self,Inception):\n",[45,42074,42075,42077,42080,42082,42084,42086],{"class":47,"line":2699},[45,42076,30898],{"class":257},[45,42078,42079],{"class":51},"(GoogLeNet,",[45,42081,30904],{"class":257},[45,42083,30907],{"class":51},[45,42085,30910],{"class":257},[45,42087,2059],{"class":51},[45,42089,42090,42092,42095,42097],{"class":47,"line":2704},[45,42091,30926],{"class":257},[45,42093,42094],{"class":51},".b1",[45,42096,254],{"class":93},[45,42098,38090],{"class":51},[45,42100,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129,42131,42133,42135,42137,42139,42141],{"class":47,"line":8031},[45,42102,38095],{"class":51},[45,42104,30937],{"class":5299},[45,42106,254],{"class":93},[45,42108,426],{"class":257},[45,42110,586],{"class":51},[45,42112,30946],{"class":5299},[45,42114,254],{"class":93},[45,42116,412],{"class":257},[45,42118,586],{"class":51},[45,42120,30955],{"class":5299},[45,42122,254],{"class":93},[45,42124,577],{"class":257},[45,42126,586],{"class":51},[45,42128,31010],{"class":5299},[45,42130,254],{"class":93},[45,42132,286],{"class":257},[45,42134,586],{"class":51},[45,42136,30964],{"class":5299},[45,42138,254],{"class":93},[45,42140,280],{"class":257},[45,42142,38128],{"class":51},[45,42144,42145],{"class":47,"line":8055},[45,42146,38133],{"class":51},[45,42148,42149,42151,42153,42155,42157,42159,42161,42163,42165,42167,42169,42171,42173],{"class":47,"line":8060},[45,42150,38178],{"class":51},[45,42152,30955],{"class":5299},[45,42154,254],{"class":93},[45,42156,280],{"class":257},[45,42158,586],{"class":51},[45,42160,31010],{"class":5299},[45,42162,254],{"class":93},[45,42164,286],{"class":257},[45,42166,586],{"class":51},[45,42168,30964],{"class":5299},[45,42170,254],{"class":93},[45,42172,426],{"class":257},[45,42174,215],{"class":51},[45,42176,42177],{"class":47,"line":8066},[45,42178,38207],{"class":51},[45,42180,42181,42183,42186,42188],{"class":47,"line":8093},[45,42182,30926],{"class":257},[45,42184,42185],{"class":51},".b2",[45,42187,254],{"class":93},[45,42189,38090],{"class":51},[45,42191,42192,42194,42196,42198,42200,42202,42204,42206,42208,42210,42212,42214,42216],{"class":47,"line":8098},[45,42193,38095],{"class":51},[45,42195,30937],{"class":5299},[45,42197,254],{"class":93},[45,42199,412],{"class":257},[45,42201,586],{"class":51},[45,42203,30946],{"class":5299},[45,42205,254],{"class":93},[45,42207,412],{"class":257},[45,42209,586],{"class":51},[45,42211,30955],{"class":5299},[45,42213,254],{"class":93},[45,42215,426],{"class":257},[45,42217,38128],{"class":51},[45,42219,42220],{"class":47,"line":8104},[45,42221,38133],{"class":51},[45,42223,42224,42226,42228,42230,42232,42234,42236,42238,42241,42243,42245,42247,42249,42251,42253,42255,42257],{"class":47,"line":8116},[45,42225,38095],{"class":51},[45,42227,30937],{"class":5299},[45,42229,254],{"class":93},[45,42231,412],{"class":257},[45,42233,586],{"class":51},[45,42235,30946],{"class":5299},[45,42237,254],{"class":93},[45,42239,42240],{"class":257},"192",[45,42242,586],{"class":51},[45,42244,30955],{"class":5299},[45,42246,254],{"class":93},[45,42248,280],{"class":257},[45,42250,586],{"class":51},[45,42252,30964],{"class":5299},[45,42254,254],{"class":93},[45,42256,426],{"class":257},[45,42258,38128],{"class":51},[45,42260,42261],{"class":47,"line":8128},[45,42262,38133],{"class":51},[45,42264,42265,42267,42269,42271,42273,42275,42277,42279,42281,42283,42285,42287,42289],{"class":47,"line":8140},[45,42266,38178],{"class":51},[45,42268,30955],{"class":5299},[45,42270,254],{"class":93},[45,42272,280],{"class":257},[45,42274,586],{"class":51},[45,42276,31010],{"class":5299},[45,42278,254],{"class":93},[45,42280,286],{"class":257},[45,42282,586],{"class":51},[45,42284,30964],{"class":5299},[45,42286,254],{"class":93},[45,42288,426],{"class":257},[45,42290,215],{"class":51},[45,42292,42293],{"class":47,"line":9799},[45,42294,38207],{"class":51},[45,42296,42297,42299,42302,42304],{"class":47,"line":9824},[45,42298,30926],{"class":257},[45,42300,42301],{"class":51},".b3",[45,42303,254],{"class":93},[45,42305,38090],{"class":51},[45,42307,42308,42311,42313,42315,42317,42320,42322,42324,42326,42329,42331,42333,42335,42338,42340],{"class":47,"line":9847},[45,42309,42310],{"class":51},"            Inception(",[45,42312,42240],{"class":257},[45,42314,586],{"class":51},[45,42316,412],{"class":257},[45,42318,42319],{"class":51},",(",[45,42321,418],{"class":257},[45,42323,586],{"class":51},[45,42325,32151],{"class":257},[45,42327,42328],{"class":51},"),(",[45,42330,808],{"class":257},[45,42332,586],{"class":51},[45,42334,406],{"class":257},[45,42336,42337],{"class":51},"),",[45,42339,406],{"class":257},[45,42341,38128],{"class":51},[45,42343,42344,42346,42348,42350,42352,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372],{"class":47,"line":9871},[45,42345,42310],{"class":51},[45,42347,34951],{"class":257},[45,42349,586],{"class":51},[45,42351,32151],{"class":257},[45,42353,42319],{"class":51},[45,42355,32151],{"class":257},[45,42357,586],{"class":51},[45,42359,42240],{"class":257},[45,42361,42328],{"class":51},[45,42363,406],{"class":257},[45,42365,586],{"class":51},[45,42367,418],{"class":257},[45,42369,42337],{"class":51},[45,42371,412],{"class":257},[45,42373,38128],{"class":51},[45,42375,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398,42400],{"class":47,"line":9876},[45,42377,38178],{"class":51},[45,42379,30955],{"class":5299},[45,42381,254],{"class":93},[45,42383,280],{"class":257},[45,42385,586],{"class":51},[45,42387,31010],{"class":5299},[45,42389,254],{"class":93},[45,42391,286],{"class":257},[45,42393,586],{"class":51},[45,42395,30964],{"class":5299},[45,42397,254],{"class":93},[45,42399,426],{"class":257},[45,42401,215],{"class":51},[45,42403,42404],{"class":47,"line":9881},[45,42405,38207],{"class":51},[45,42407,42408,42410,42413,42415],{"class":47,"line":9886},[45,42409,30926],{"class":257},[45,42411,42412],{"class":51},".b4",[45,42414,254],{"class":93},[45,42416,38090],{"class":51},[45,42418,42419,42421,42424,42426,42428,42430,42432,42434,42437,42439,42441,42443,42445,42447,42449],{"class":47,"line":9895},[45,42420,42310],{"class":51},[45,42422,42423],{"class":257},"480",[45,42425,586],{"class":51},[45,42427,42240],{"class":257},[45,42429,42319],{"class":51},[45,42431,418],{"class":257},[45,42433,586],{"class":51},[45,42435,42436],{"class":257},"208",[45,42438,42328],{"class":51},[45,42440,808],{"class":257},[45,42442,586],{"class":51},[45,42444,814],{"class":257},[45,42446,42337],{"class":51},[45,42448,412],{"class":257},[45,42450,38128],{"class":51},[45,42452,42453,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473,42475,42477,42479,42481],{"class":47,"line":9900},[45,42454,42310],{"class":51},[45,42456,38538],{"class":257},[45,42458,586],{"class":51},[45,42460,21131],{"class":257},[45,42462,42319],{"class":51},[45,42464,825],{"class":257},[45,42466,586],{"class":51},[45,42468,31582],{"class":257},[45,42470,42328],{"class":51},[45,42472,1007],{"class":257},[45,42474,586],{"class":51},[45,42476,412],{"class":257},[45,42478,42337],{"class":51},[45,42480,412],{"class":257},[45,42482,38128],{"class":51},[45,42484,42485,42487,42489,42491,42493,42495,42497,42499,42501,42503,42505,42507,42509,42511,42513],{"class":47,"line":9906},[45,42486,42310],{"class":51},[45,42488,38538],{"class":257},[45,42490,586],{"class":51},[45,42492,32151],{"class":257},[45,42494,42319],{"class":51},[45,42496,32151],{"class":257},[45,42498,586],{"class":51},[45,42500,34951],{"class":257},[45,42502,42328],{"class":51},[45,42504,1007],{"class":257},[45,42506,586],{"class":51},[45,42508,412],{"class":257},[45,42510,42337],{"class":51},[45,42512,412],{"class":257},[45,42514,38128],{"class":51},[45,42516,42517,42519,42521,42523,42525,42527,42529,42531,42534,42536,42538,42540,42542,42544,42546],{"class":47,"line":9927},[45,42518,42310],{"class":51},[45,42520,38538],{"class":257},[45,42522,586],{"class":51},[45,42524,825],{"class":257},[45,42526,42319],{"class":51},[45,42528,32151],{"class":257},[45,42530,586],{"class":51},[45,42532,42533],{"class":257},"288",[45,42535,42328],{"class":51},[45,42537,406],{"class":257},[45,42539,586],{"class":51},[45,42541,412],{"class":257},[45,42543,42337],{"class":51},[45,42545,412],{"class":257},[45,42547,38128],{"class":51},[45,42549,42550,42552,42555,42557,42559,42561,42563,42565,42568,42570,42572,42574,42576,42578,42580],{"class":47,"line":9933},[45,42551,42310],{"class":51},[45,42553,42554],{"class":257},"528",[45,42556,586],{"class":51},[45,42558,34951],{"class":257},[45,42560,42319],{"class":51},[45,42562,21131],{"class":257},[45,42564,586],{"class":51},[45,42566,42567],{"class":257},"320",[45,42569,42328],{"class":51},[45,42571,406],{"class":257},[45,42573,586],{"class":51},[45,42575,32151],{"class":257},[45,42577,42337],{"class":51},[45,42579,32151],{"class":257},[45,42581,38128],{"class":51},[45,42583,42584,42586,42588,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608],{"class":47,"line":9947},[45,42585,38178],{"class":51},[45,42587,30955],{"class":5299},[45,42589,254],{"class":93},[45,42591,280],{"class":257},[45,42593,586],{"class":51},[45,42595,31010],{"class":5299},[45,42597,254],{"class":93},[45,42599,286],{"class":257},[45,42601,586],{"class":51},[45,42603,30964],{"class":5299},[45,42605,254],{"class":93},[45,42607,426],{"class":257},[45,42609,215],{"class":51},[45,42611,42612],{"class":47,"line":9953},[45,42613,38207],{"class":51},[45,42615,42616,42618,42621,42623],{"class":47,"line":9980},[45,42617,30926],{"class":257},[45,42619,42620],{"class":51},".b5",[45,42622,254],{"class":93},[45,42624,38090],{"class":51},[45,42626,42627,42629,42632,42634,42636,42638,42640,42642,42644,42646,42648,42650,42652,42654,42656],{"class":47,"line":9989},[45,42628,42310],{"class":51},[45,42630,42631],{"class":257},"832",[45,42633,586],{"class":51},[45,42635,34951],{"class":257},[45,42637,42319],{"class":51},[45,42639,21131],{"class":257},[45,42641,586],{"class":51},[45,42643,42567],{"class":257},[45,42645,42328],{"class":51},[45,42647,406],{"class":257},[45,42649,586],{"class":51},[45,42651,32151],{"class":257},[45,42653,42337],{"class":51},[45,42655,32151],{"class":257},[45,42657,38128],{"class":51},[45,42659,42660,42662,42664,42666,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688],{"class":47,"line":9995},[45,42661,42310],{"class":51},[45,42663,42631],{"class":257},[45,42665,586],{"class":51},[45,42667,35021],{"class":257},[45,42669,42319],{"class":51},[45,42671,42240],{"class":257},[45,42673,586],{"class":51},[45,42675,35021],{"class":257},[45,42677,42328],{"class":51},[45,42679,814],{"class":257},[45,42681,586],{"class":51},[45,42683,32151],{"class":257},[45,42685,42337],{"class":51},[45,42687,32151],{"class":257},[45,42689,38128],{"class":51},[45,42691,42692,42695,42697,42699,42701],{"class":47,"line":10003},[45,42693,42694],{"class":51},"            nn.AdaptiveAvgPool2d((",[45,42696,426],{"class":257},[45,42698,586],{"class":51},[45,42700,426],{"class":257},[45,42702,42703],{"class":51},")),\n",[45,42705,42706],{"class":47,"line":10008},[45,42707,38871],{"class":51},[45,42709,42710,42712,42715,42717,42719],{"class":47,"line":16687},[45,42711,38876],{"class":51},[45,42713,42714],{"class":257},"1024",[45,42716,586],{"class":51},[45,42718,654],{"class":257},[45,42720,215],{"class":51},[45,42722,42723],{"class":47,"line":16693},[45,42724,38207],{"class":51},[45,42726,42727],{"class":47,"line":16716},[45,42728,42729],{"class":267},"        # 对模型参数初始化\n",[45,42731,42732,42734,42736,42738,42740],{"class":47,"line":16722},[45,42733,3486],{"class":93},[45,42735,38949],{"class":51},[45,42737,26126],{"class":93},[45,42739,38954],{"class":257},[45,42741,38957],{"class":51},[45,42743,42744,42746,42748],{"class":47,"line":16745},[45,42745,4725],{"class":93},[45,42747,38969],{"class":257},[45,42749,38972],{"class":51},[45,42751,42752,42754,42757,42759,42762,42764,42766,42768,42770],{"class":47,"line":16759},[45,42753,38982],{"class":51},[45,42755,42756],{"class":5299},"mode",[45,42758,254],{"class":93},[45,42760,42761],{"class":313},"'fan_out'",[45,42763,586],{"class":51},[45,42765,38985],{"class":5299},[45,42767,254],{"class":93},[45,42769,38990],{"class":313},[45,42771,215],{"class":51},[45,42773,42774],{"class":47,"line":16779},[45,42775,42776],{"class":267},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[45,42778,42779],{"class":47,"line":16785},[45,42780,42781],{"class":267},"                # ② mode = 'fan_out'决定使用的fan值：\n",[45,42783,42784],{"class":47,"line":16796},[45,42785,42786],{"class":267},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[45,42788,42789],{"class":47,"line":16819},[45,42790,42791],{"class":267},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[45,42793,42794],{"class":47,"line":16841},[45,42795,42796],{"class":267},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[45,42798,42799],{"class":47,"line":16846},[45,42800,42801],{"class":267},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[45,42803,42804,42806,42808,42810,42812,42814],{"class":47,"line":16852},[45,42805,39002],{"class":93},[45,42807,39005],{"class":51},[45,42809,39008],{"class":93},[45,42811,39011],{"class":93},[45,42813,39014],{"class":257},[45,42815,3822],{"class":51},[45,42817,42818,42820,42822],{"class":47,"line":16866},[45,42819,39026],{"class":51},[45,42821,400],{"class":257},[45,42823,215],{"class":51},[45,42825,42826,42829,42831],{"class":47,"line":16879},[45,42827,42828],{"class":93},"                elif",[45,42830,38969],{"class":257},[45,42832,39045],{"class":51},[45,42834,42835,42838,42840,42842,42844],{"class":47,"line":16884},[45,42836,42837],{"class":51},"                    nn.init.normal_(m.weight,",[45,42839,400],{"class":257},[45,42841,586],{"class":51},[45,42843,39067],{"class":257},[45,42845,215],{"class":51},[45,42847,42848,42851,42853,42855,42857,42859],{"class":47,"line":16898},[45,42849,42850],{"class":93},"                    if",[45,42852,39005],{"class":51},[45,42854,39008],{"class":93},[45,42856,39011],{"class":93},[45,42858,39014],{"class":257},[45,42860,3822],{"class":51},[45,42862,42863,42866,42868],{"class":47,"line":16903},[45,42864,42865],{"class":51},"                        nn.init.constant_(m.bias,",[45,42867,400],{"class":257},[45,42869,215],{"class":51},[45,42871,42872],{"class":47,"line":16909},[45,42873,35246],{"class":267},[45,42875,42876,42878,42880],{"class":47,"line":16914},[45,42877,30882],{"class":93},[45,42879,31174],{"class":2046},[45,42881,31177],{"class":51},[45,42883,42884,42886,42888,42890],{"class":47,"line":16928},[45,42885,31182],{"class":51},[45,42887,254],{"class":93},[45,42889,30904],{"class":257},[45,42891,42892],{"class":51},".b1(x)\n",[45,42894,42895,42897,42899,42901],{"class":47,"line":16933},[45,42896,31182],{"class":51},[45,42898,254],{"class":93},[45,42900,30904],{"class":257},[45,42902,42903],{"class":51},".b2(x)\n",[45,42905,42906,42908,42910,42912],{"class":47,"line":16938},[45,42907,31182],{"class":51},[45,42909,254],{"class":93},[45,42911,30904],{"class":257},[45,42913,42914],{"class":51},".b3(x)\n",[45,42916,42917,42919,42921,42923],{"class":47,"line":16952},[45,42918,31182],{"class":51},[45,42920,254],{"class":93},[45,42922,30904],{"class":257},[45,42924,42925],{"class":51},".b4(x)\n",[45,42927,42928,42930,42932,42934],{"class":47,"line":16964},[45,42929,31182],{"class":51},[45,42931,254],{"class":93},[45,42933,30904],{"class":257},[45,42935,42936],{"class":51},".b5(x)\n",[45,42938,42939,42941],{"class":47,"line":16969},[45,42940,14835],{"class":93},[45,42942,31290],{"class":51},[45,42944,42945],{"class":47,"line":16982},[45,42946,2483],{"emptyLinePlaceholder":133},[45,42948,42949],{"class":47,"line":16987},[45,42950,42951],{"class":267},"# 模型展示\n",[45,42953,42954,42956,42958,42960,42962],{"class":47,"line":16992},[45,42955,1614],{"class":93},[45,42957,31301],{"class":257},[45,42959,3032],{"class":93},[45,42961,31306],{"class":313},[45,42963,3822],{"class":51},[45,42965,42966,42968,42970,42972,42974,42976,42978,42980,42982],{"class":47,"line":16997},[45,42967,31318],{"class":51},[45,42969,254],{"class":93},[45,42971,30532],{"class":51},[45,42973,31325],{"class":313},[45,42975,1787],{"class":93},[45,42977,31330],{"class":51},[45,42979,1784],{"class":93},[45,42981,30557],{"class":313},[45,42983,215],{"class":51},[45,42985,42986,42988,42990],{"class":47,"line":17010},[45,42987,31370],{"class":51},[45,42989,254],{"class":93},[45,42991,42992],{"class":51},"GoogLeNet(Inception).to(device)\n",[45,42994,42995,42997,42999,43001,43003,43005,43007,43009],{"class":47,"line":17015},[45,42996,31380],{"class":257},[45,42998,31383],{"class":51},[45,43000,426],{"class":257},[45,43002,586],{"class":51},[45,43004,31582],{"class":257},[45,43006,586],{"class":51},[45,43008,31582],{"class":257},[45,43010,31396],{"class":51},[159,43012,43013],{"start":125},[162,43014,39264],{},[35,43016,43018],{"className":37,"code":43017,"language":39,"meta":40,"style":40},"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",[42,43019,43020,43026,43032,43042,43048,43058,43068,43078,43088,43098,43102,43113,43123,43127,43131,43135,43143,43155,43165,43181,43191,43223,43237,43247,43257,43261,43271,43285,43295,43305,43315,43321,43325,43329,43333,43337,43341,43349,43369,43373,43377,43381,43385,43389,43405,43409,43413,43421,43425,43429,43437,43441,43445,43449,43457,43461,43465,43469,43473,43481,43485,43493,43497,43505,43509,43517,43521,43529,43533,43537,43545,43549,43553,43557,43569,43593,43607,43611,43615,43619,43627,43631,43639,43643,43651,43655,43663,43667,43675,43679,43687,43691,43703,43707,43715,43719,43727,43731,43735,43739,43743,43751,43755,43771,43775,43783,43787,43791,43795,43799,43803,43807,43811,43827,43831,43843,43847,43859,43863,43875,43879,43887,43891,43899,43903,43907,43911,43917,43921,43929,43933,43949,43953,43961,43965,43981,43993,43997,44009,44013,44017,44025,44029,44033,44041,44045,44053,44057,44065,44069,44073,44115,44157,44161,44165,44181,44185,44201,44205,44209,44217,44221,44225,44237,44275,44279,44283,44291,44295,44309,44319,44325,44331,44337,44343,44347,44351,44357,44361,44365,44373,44377,44395,44399,44403,44407,44423,44427,44431,44435,44439,44443,44463,44483,44487,44491,44495,44503,44511,44515,44531,44551,44571,44575,44579,44587,44595,44599,44603,44607,44619,44623,44633,44641,44658],{"__ignoreMap":40},[45,43021,43022,43024],{"class":47,"line":48},[45,43023,30473],{"class":93},[45,43025,31903],{"class":51},[45,43027,43028,43030],{"class":47,"line":125},[45,43029,30473],{"class":93},[45,43031,31910],{"class":51},[45,43033,43034,43036,43038,43040],{"class":47,"line":1262},[45,43035,30473],{"class":93},[45,43037,31921],{"class":51},[45,43039,31464],{"class":93},[45,43041,31926],{"class":51},[45,43043,43044,43046],{"class":47,"line":1277},[45,43045,30473],{"class":93},[45,43047,30476],{"class":51},[45,43049,43050,43052,43054,43056],{"class":47,"line":1283},[45,43051,30818],{"class":93},[45,43053,31496],{"class":51},[45,43055,30473],{"class":93},[45,43057,31943],{"class":51},[45,43059,43060,43062,43064,43066],{"class":47,"line":1297},[45,43061,30818],{"class":93},[45,43063,31449],{"class":51},[45,43065,30473],{"class":93},[45,43067,31454],{"class":51},[45,43069,43070,43072,43074,43076],{"class":47,"line":1303},[45,43071,30818],{"class":93},[45,43073,31479],{"class":51},[45,43075,30473],{"class":93},[45,43077,31484],{"class":51},[45,43079,43080,43082,43084,43086],{"class":47,"line":1394},[45,43081,30473],{"class":93},[45,43083,31496],{"class":51},[45,43085,31464],{"class":93},[45,43087,31501],{"class":51},[45,43089,43090,43092,43094,43096],{"class":47,"line":1400},[45,43091,30473],{"class":93},[45,43093,31513],{"class":51},[45,43095,31464],{"class":93},[45,43097,31518],{"class":51},[45,43099,43100],{"class":47,"line":1412},[45,43101,31988],{"class":267},[45,43103,43104,43106,43108,43110],{"class":47,"line":1695},[45,43105,30818],{"class":93},[45,43107,31995],{"class":51},[45,43109,30473],{"class":93},[45,43111,43112],{"class":51}," GoogLeNet, Inception\n",[45,43114,43115,43117,43119,43121],{"class":47,"line":1700},[45,43116,30818],{"class":93},[45,43118,30821],{"class":51},[45,43120,30473],{"class":93},[45,43122,30826],{"class":51},[45,43124,43125],{"class":47,"line":1706},[45,43126,2483],{"emptyLinePlaceholder":133},[45,43128,43129],{"class":47,"line":1711},[45,43130,2483],{"emptyLinePlaceholder":133},[45,43132,43133],{"class":47,"line":1725},[45,43134,32023],{"class":267},[45,43136,43137,43139,43141],{"class":47,"line":1730},[45,43138,32028],{"class":93},[45,43140,32031],{"class":2046},[45,43142,32034],{"class":51},[45,43144,43145,43147,43149,43151,43153],{"class":47,"line":1736},[45,43146,32039],{"class":51},[45,43148,254],{"class":93},[45,43150,31536],{"class":51},[45,43152,31544],{"class":313},[45,43154,31547],{"class":51},[45,43156,43157,43159,43161,43163],{"class":47,"line":1757},[45,43158,32052],{"class":5299},[45,43160,254],{"class":93},[45,43162,31557],{"class":257},[45,43164,31547],{"class":51},[45,43166,43167,43169,43171,43173,43175,43177,43179],{"class":47,"line":1762},[45,43168,32063],{"class":5299},[45,43170,254],{"class":93},[45,43172,31574],{"class":51},[45,43174,31577],{"class":5299},[45,43176,254],{"class":93},[45,43178,35530],{"class":257},[45,43180,31585],{"class":51},[45,43182,43183,43185,43187,43189],{"class":47,"line":1776},[45,43184,32080],{"class":5299},[45,43186,254],{"class":93},[45,43188,31557],{"class":257},[45,43190,215],{"class":51},[45,43192,43193,43195,43197,43199,43201,43203,43205,43207,43209,43211,43213,43215,43217,43219,43221],{"class":47,"line":1781},[45,43194,32091],{"class":51},[45,43196,254],{"class":93},[45,43198,32096],{"class":51},[45,43200,32099],{"class":257},[45,43202,209],{"class":51},[45,43204,32104],{"class":257},[45,43206,663],{"class":93},[45,43208,7441],{"class":257},[45,43210,32111],{"class":51},[45,43212,32099],{"class":257},[45,43214,209],{"class":51},[45,43216,32118],{"class":257},[45,43218,663],{"class":93},[45,43220,7441],{"class":257},[45,43222,32125],{"class":51},[45,43224,43225,43227,43229,43231,43233,43235],{"class":47,"line":1810},[45,43226,32130],{"class":51},[45,43228,254],{"class":93},[45,43230,32135],{"class":51},[45,43232,31618],{"class":5299},[45,43234,254],{"class":93},[45,43236,31623],{"class":51},[45,43238,43239,43241,43243,43245],{"class":47,"line":1815},[45,43240,32146],{"class":5299},[45,43242,254],{"class":93},[45,43244,406],{"class":257},[45,43246,31547],{"class":51},[45,43248,43249,43251,43253,43255],{"class":47,"line":1832},[45,43250,32158],{"class":5299},[45,43252,254],{"class":93},[45,43254,31557],{"class":257},[45,43256,31547],{"class":51},[45,43258,43259],{"class":47,"line":1837},[45,43260,32169],{"class":267},[45,43262,43263,43265,43267,43269],{"class":47,"line":1842},[45,43264,32174],{"class":5299},[45,43266,254],{"class":93},[45,43268,603],{"class":257},[45,43270,215],{"class":51},[45,43272,43273,43275,43277,43279,43281,43283],{"class":47,"line":1847},[45,43274,32185],{"class":51},[45,43276,254],{"class":93},[45,43278,31615],{"class":51},[45,43280,31618],{"class":5299},[45,43282,254],{"class":93},[45,43284,32196],{"class":51},[45,43286,43287,43289,43291,43293],{"class":47,"line":1861},[45,43288,32201],{"class":5299},[45,43290,254],{"class":93},[45,43292,406],{"class":257},[45,43294,31547],{"class":51},[45,43296,43297,43299,43301,43303],{"class":47,"line":1866},[45,43298,32212],{"class":5299},[45,43300,254],{"class":93},[45,43302,31557],{"class":257},[45,43304,31547],{"class":51},[45,43306,43307,43309,43311,43313],{"class":47,"line":2660},[45,43308,32223],{"class":5299},[45,43310,254],{"class":93},[45,43312,603],{"class":257},[45,43314,215],{"class":51},[45,43316,43317,43319],{"class":47,"line":2674},[45,43318,4173],{"class":93},[45,43320,32236],{"class":51},[45,43322,43323],{"class":47,"line":2682},[45,43324,2483],{"emptyLinePlaceholder":133},[45,43326,43327],{"class":47,"line":2687},[45,43328,32245],{"class":267},[45,43330,43331],{"class":47,"line":2693},[45,43332,32250],{"class":267},[45,43334,43335],{"class":47,"line":2699},[45,43336,2483],{"emptyLinePlaceholder":133},[45,43338,43339],{"class":47,"line":2704},[45,43340,32259],{"class":267},[45,43342,43343,43345,43347],{"class":47,"line":8031},[45,43344,32028],{"class":93},[45,43346,32266],{"class":2046},[45,43348,32269],{"class":51},[45,43350,43351,43353,43355,43357,43359,43361,43363,43365,43367],{"class":47,"line":8055},[45,43352,31318],{"class":51},[45,43354,254],{"class":93},[45,43356,30532],{"class":51},[45,43358,31325],{"class":313},[45,43360,1787],{"class":93},[45,43362,31330],{"class":51},[45,43364,1784],{"class":93},[45,43366,32288],{"class":313},[45,43368,215],{"class":51},[45,43370,43371],{"class":47,"line":8060},[45,43372,2483],{"emptyLinePlaceholder":133},[45,43374,43375],{"class":47,"line":8066},[45,43376,2483],{"emptyLinePlaceholder":133},[45,43378,43379],{"class":47,"line":8093},[45,43380,32303],{"class":267},[45,43382,43383],{"class":47,"line":8098},[45,43384,32308],{"class":267},[45,43386,43387],{"class":47,"line":8104},[45,43388,32313],{"class":267},[45,43390,43391,43393,43395,43397,43399,43401,43403],{"class":47,"line":8116},[45,43392,32318],{"class":51},[45,43394,254],{"class":93},[45,43396,32323],{"class":51},[45,43398,32326],{"class":5299},[45,43400,254],{"class":93},[45,43402,32331],{"class":257},[45,43404,215],{"class":51},[45,43406,43407],{"class":47,"line":8128},[45,43408,2483],{"emptyLinePlaceholder":133},[45,43410,43411],{"class":47,"line":8140},[45,43412,32342],{"class":267},[45,43414,43415,43417,43419],{"class":47,"line":9799},[45,43416,32347],{"class":51},[45,43418,254],{"class":93},[45,43420,32352],{"class":51},[45,43422,43423],{"class":47,"line":9824},[45,43424,2483],{"emptyLinePlaceholder":133},[45,43426,43427],{"class":47,"line":9847},[45,43428,32361],{"class":267},[45,43430,43431,43433,43435],{"class":47,"line":9871},[45,43432,31370],{"class":51},[45,43434,254],{"class":93},[45,43436,32370],{"class":51},[45,43438,43439],{"class":47,"line":9876},[45,43440,32375],{"class":267},[45,43442,43443],{"class":47,"line":9881},[45,43444,32380],{"class":267},[45,43446,43447],{"class":47,"line":9886},[45,43448,32385],{"class":267},[45,43450,43451,43453,43455],{"class":47,"line":9895},[45,43452,32390],{"class":51},[45,43454,254],{"class":93},[45,43456,32395],{"class":51},[45,43458,43459],{"class":47,"line":9900},[45,43460,2483],{"emptyLinePlaceholder":133},[45,43462,43463],{"class":47,"line":9906},[45,43464,2483],{"emptyLinePlaceholder":133},[45,43466,43467],{"class":47,"line":9927},[45,43468,32408],{"class":267},[45,43470,43471],{"class":47,"line":9933},[45,43472,32413],{"class":267},[45,43474,43475,43477,43479],{"class":47,"line":9947},[45,43476,32418],{"class":51},[45,43478,254],{"class":93},[45,43480,32423],{"class":257},[45,43482,43483],{"class":47,"line":9953},[45,43484,32428],{"class":267},[45,43486,43487,43489,43491],{"class":47,"line":9980},[45,43488,32433],{"class":51},[45,43490,254],{"class":93},[45,43492,32438],{"class":51},[45,43494,43495],{"class":47,"line":9989},[45,43496,32443],{"class":267},[45,43498,43499,43501,43503],{"class":47,"line":9995},[45,43500,32448],{"class":51},[45,43502,254],{"class":93},[45,43504,32438],{"class":51},[45,43506,43507],{"class":47,"line":10003},[45,43508,32457],{"class":267},[45,43510,43511,43513,43515],{"class":47,"line":10008},[45,43512,32462],{"class":51},[45,43514,254],{"class":93},[45,43516,32438],{"class":51},[45,43518,43519],{"class":47,"line":16687},[45,43520,32471],{"class":267},[45,43522,43523,43525,43527],{"class":47,"line":16693},[45,43524,32476],{"class":51},[45,43526,254],{"class":93},[45,43528,32438],{"class":51},[45,43530,43531],{"class":47,"line":16716},[45,43532,2483],{"emptyLinePlaceholder":133},[45,43534,43535],{"class":47,"line":16722},[45,43536,32489],{"class":267},[45,43538,43539,43541,43543],{"class":47,"line":16745},[45,43540,32494],{"class":51},[45,43542,254],{"class":93},[45,43544,32499],{"class":51},[45,43546,43547],{"class":47,"line":16759},[45,43548,2483],{"emptyLinePlaceholder":133},[45,43550,43551],{"class":47,"line":16779},[45,43552,2483],{"emptyLinePlaceholder":133},[45,43554,43555],{"class":47,"line":16785},[45,43556,32512],{"class":267},[45,43558,43559,43561,43563,43565,43567],{"class":47,"line":16796},[45,43560,3284],{"class":93},[45,43562,32519],{"class":51},[45,43564,26126],{"class":93},[45,43566,32524],{"class":257},[45,43568,32527],{"class":51},[45,43570,43571,43573,43575,43577,43579,43581,43583,43585,43587,43589,43591],{"class":47,"line":16819},[45,43572,32532],{"class":257},[45,43574,209],{"class":51},[45,43576,32537],{"class":313},[45,43578,32540],{"class":257},[45,43580,791],{"class":313},[45,43582,32540],{"class":257},[45,43584,459],{"class":313},[45,43586,32549],{"class":51},[45,43588,94],{"class":93},[45,43590,426],{"class":257},[45,43592,30578],{"class":51},[45,43594,43595,43597,43599,43601,43603,43605],{"class":47,"line":16841},[45,43596,32532],{"class":257},[45,43598,209],{"class":51},[45,43600,32564],{"class":313},[45,43602,663],{"class":93},[45,43604,654],{"class":257},[45,43606,215],{"class":51},[45,43608,43609],{"class":47,"line":16846},[45,43610,2483],{"emptyLinePlaceholder":133},[45,43612,43613],{"class":47,"line":16852},[45,43614,32579],{"class":267},[45,43616,43617],{"class":47,"line":16866},[45,43618,32584],{"class":267},[45,43620,43621,43623,43625],{"class":47,"line":16879},[45,43622,32589],{"class":51},[45,43624,254],{"class":93},[45,43626,32423],{"class":257},[45,43628,43629],{"class":47,"line":16884},[45,43630,32598],{"class":267},[45,43632,43633,43635,43637],{"class":47,"line":16898},[45,43634,32603],{"class":51},[45,43636,254],{"class":93},[45,43638,3168],{"class":257},[45,43640,43641],{"class":47,"line":16903},[45,43642,32612],{"class":267},[45,43644,43645,43647,43649],{"class":47,"line":16909},[45,43646,32617],{"class":51},[45,43648,254],{"class":93},[45,43650,32423],{"class":257},[45,43652,43653],{"class":47,"line":16914},[45,43654,32626],{"class":267},[45,43656,43657,43659,43661],{"class":47,"line":16928},[45,43658,32631],{"class":51},[45,43660,254],{"class":93},[45,43662,3168],{"class":257},[45,43664,43665],{"class":47,"line":16933},[45,43666,32640],{"class":267},[45,43668,43669,43671,43673],{"class":47,"line":16938},[45,43670,32645],{"class":51},[45,43672,254],{"class":93},[45,43674,3168],{"class":257},[45,43676,43677],{"class":47,"line":16952},[45,43678,32654],{"class":267},[45,43680,43681,43683,43685],{"class":47,"line":16964},[45,43682,32659],{"class":51},[45,43684,254],{"class":93},[45,43686,3168],{"class":257},[45,43688,43689],{"class":47,"line":16969},[45,43690,32668],{"class":267},[45,43692,43693,43695,43697,43699,43701],{"class":47,"line":16982},[45,43694,3486],{"class":93},[45,43696,31682],{"class":51},[45,43698,26126],{"class":93},[45,43700,31687],{"class":257},[45,43702,32681],{"class":51},[45,43704,43705],{"class":47,"line":16987},[45,43706,32686],{"class":267},[45,43708,43709,43711,43713],{"class":47,"line":16992},[45,43710,32691],{"class":51},[45,43712,254],{"class":93},[45,43714,32696],{"class":51},[45,43716,43717],{"class":47,"line":16997},[45,43718,32701],{"class":267},[45,43720,43721,43723,43725],{"class":47,"line":17010},[45,43722,32706],{"class":51},[45,43724,254],{"class":93},[45,43726,32711],{"class":51},[45,43728,43729],{"class":47,"line":17015},[45,43730,32717],{"class":267},[45,43732,43733],{"class":47,"line":32714},[45,43734,32723],{"class":51},[45,43736,43737],{"class":47,"line":32720},[45,43738,32729],{"class":267},[45,43740,43741],{"class":47,"line":32726},[45,43742,32735],{"class":267},[45,43744,43745,43747,43749],{"class":47,"line":32732},[45,43746,32741],{"class":51},[45,43748,254],{"class":93},[45,43750,32746],{"class":51},[45,43752,43753],{"class":47,"line":32738},[45,43754,32752],{"class":267},[45,43756,43757,43759,43761,43763,43765,43767,43769],{"class":47,"line":32749},[45,43758,32758],{"class":51},[45,43760,254],{"class":93},[45,43762,32763],{"class":51},[45,43764,32766],{"class":5299},[45,43766,254],{"class":93},[45,43768,426],{"class":257},[45,43770,215],{"class":51},[45,43772,43773],{"class":47,"line":32755},[45,43774,32778],{"class":267},[45,43776,43777,43779,43781],{"class":47,"line":32775},[45,43778,32784],{"class":51},[45,43780,254],{"class":93},[45,43782,32789],{"class":51},[45,43784,43785],{"class":47,"line":32781},[45,43786,32795],{"class":267},[45,43788,43789],{"class":47,"line":32792},[45,43790,32801],{"class":51},[45,43792,43793],{"class":47,"line":32798},[45,43794,32807],{"class":267},[45,43796,43797],{"class":47,"line":32804},[45,43798,32813],{"class":51},[45,43800,43801],{"class":47,"line":32810},[45,43802,32819],{"class":267},[45,43804,43805],{"class":47,"line":32816},[45,43806,32825],{"class":51},[45,43808,43809],{"class":47,"line":32822},[45,43810,32831],{"class":267},[45,43812,43813,43815,43817,43819,43821,43823,43825],{"class":47,"line":32828},[45,43814,32837],{"class":51},[45,43816,9560],{"class":93},[45,43818,32842],{"class":51},[45,43820,663],{"class":93},[45,43822,32847],{"class":51},[45,43824,400],{"class":257},[45,43826,215],{"class":51},[45,43828,43829],{"class":47,"line":32834},[45,43830,32857],{"class":267},[45,43832,43833,43835,43837,43839,43841],{"class":47,"line":32854},[45,43834,32863],{"class":51},[45,43836,9560],{"class":93},[45,43838,32868],{"class":51},[45,43840,3032],{"class":93},[45,43842,32873],{"class":51},[45,43844,43845],{"class":47,"line":32860},[45,43846,32879],{"class":267},[45,43848,43849,43851,43853,43855,43857],{"class":47,"line":32876},[45,43850,32885],{"class":51},[45,43852,9560],{"class":93},[45,43854,32847],{"class":51},[45,43856,400],{"class":257},[45,43858,215],{"class":51},[45,43860,43861],{"class":47,"line":32882},[45,43862,32899],{"class":267},[45,43864,43865,43867,43869,43871,43873],{"class":47,"line":32896},[45,43866,3486],{"class":93},[45,43868,32907],{"class":51},[45,43870,26126],{"class":93},[45,43872,31687],{"class":257},[45,43874,32914],{"class":51},[45,43876,43877],{"class":47,"line":32902},[45,43878,32920],{"class":267},[45,43880,43881,43883,43885],{"class":47,"line":32917},[45,43882,32691],{"class":51},[45,43884,254],{"class":93},[45,43886,32696],{"class":51},[45,43888,43889],{"class":47,"line":32923},[45,43890,32935],{"class":267},[45,43892,43893,43895,43897],{"class":47,"line":32932},[45,43894,32706],{"class":51},[45,43896,254],{"class":93},[45,43898,32711],{"class":51},[45,43900,43901],{"class":47,"line":32938},[45,43902,32950],{"class":267},[45,43904,43905],{"class":47,"line":32947},[45,43906,32956],{"class":51},[45,43908,43909],{"class":47,"line":32953},[45,43910,36437],{"class":267},[45,43912,43913,43915],{"class":47,"line":32959},[45,43914,32962],{"class":93},[45,43916,32965],{"class":51},[45,43918,43919],{"class":47,"line":32968},[45,43920,32971],{"class":267},[45,43922,43923,43925,43927],{"class":47,"line":32974},[45,43924,36452],{"class":51},[45,43926,254],{"class":93},[45,43928,32746],{"class":51},[45,43930,43931],{"class":47,"line":32985},[45,43932,32988],{"class":267},[45,43934,43935,43937,43939,43941,43943,43945,43947],{"class":47,"line":32991},[45,43936,36465],{"class":51},[45,43938,254],{"class":93},[45,43940,32763],{"class":51},[45,43942,32766],{"class":5299},[45,43944,254],{"class":93},[45,43946,426],{"class":257},[45,43948,215],{"class":51},[45,43950,43951],{"class":47,"line":33010},[45,43952,33013],{"class":267},[45,43954,43955,43957,43959],{"class":47,"line":33016},[45,43956,36486],{"class":51},[45,43958,254],{"class":93},[45,43960,32789],{"class":51},[45,43962,43963],{"class":47,"line":33027},[45,43964,33030],{"class":267},[45,43966,43967,43969,43971,43973,43975,43977,43979],{"class":47,"line":33033},[45,43968,36499],{"class":51},[45,43970,9560],{"class":93},[45,43972,36504],{"class":51},[45,43974,663],{"class":93},[45,43976,32847],{"class":51},[45,43978,400],{"class":257},[45,43980,215],{"class":51},[45,43982,43983,43985,43987,43989,43991],{"class":47,"line":33053},[45,43984,36517],{"class":51},[45,43986,9560],{"class":93},[45,43988,32868],{"class":51},[45,43990,3032],{"class":93},[45,43992,32873],{"class":51},[45,43994,43995],{"class":47,"line":33069},[45,43996,36530],{"class":267},[45,43998,43999,44001,44003,44005,44007],{"class":47,"line":33075},[45,44000,36535],{"class":51},[45,44002,9560],{"class":93},[45,44004,32847],{"class":51},[45,44006,400],{"class":257},[45,44008,215],{"class":51},[45,44010,44011],{"class":47,"line":33089},[45,44012,33092],{"class":267},[45,44014,44015],{"class":47,"line":33095},[45,44016,33098],{"class":267},[45,44018,44019,44021,44023],{"class":47,"line":33101},[45,44020,33104],{"class":51},[45,44022,791],{"class":93},[45,44024,33109],{"class":51},[45,44026,44027],{"class":47,"line":33112},[45,44028,33115],{"class":267},[45,44030,44031],{"class":47,"line":33118},[45,44032,33121],{"class":267},[45,44034,44035,44037,44039],{"class":47,"line":33124},[45,44036,33127],{"class":51},[45,44038,791],{"class":93},[45,44040,33109],{"class":51},[45,44042,44043],{"class":47,"line":33134},[45,44044,33137],{"class":267},[45,44046,44047,44049,44051],{"class":47,"line":33140},[45,44048,33143],{"class":51},[45,44050,791],{"class":93},[45,44052,33148],{"class":51},[45,44054,44055],{"class":47,"line":33151},[45,44056,33154],{"class":267},[45,44058,44059,44061,44063],{"class":47,"line":33157},[45,44060,33160],{"class":51},[45,44062,791],{"class":93},[45,44064,33148],{"class":51},[45,44066,44067],{"class":47,"line":33167},[45,44068,2483],{"emptyLinePlaceholder":133},[45,44070,44071],{"class":47,"line":33172},[45,44072,33175],{"class":267},[45,44074,44075,44077,44079,44081,44083,44085,44087,44089,44091,44093,44095,44097,44099,44101,44103,44105,44107,44109,44111,44113],{"class":47,"line":33178},[45,44076,32532],{"class":257},[45,44078,209],{"class":51},[45,44080,3675],{"class":313},[45,44082,32540],{"class":257},[45,44084,33189],{"class":313},[45,44086,1103],{"class":257},[45,44088,33194],{"class":93},[45,44090,1153],{"class":257},[45,44092,33199],{"class":313},[45,44094,1103],{"class":257},[45,44096,33194],{"class":93},[45,44098,1153],{"class":257},[45,44100,3675],{"class":313},[45,44102,33210],{"class":51},[45,44104,94],{"class":93},[45,44106,426],{"class":257},[45,44108,33217],{"class":51},[45,44110,94],{"class":93},[45,44112,426],{"class":257},[45,44114,33224],{"class":51},[45,44116,44117,44119,44121,44123,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155],{"class":47,"line":33227},[45,44118,32532],{"class":257},[45,44120,209],{"class":51},[45,44122,3675],{"class":313},[45,44124,32540],{"class":257},[45,44126,33238],{"class":313},[45,44128,1103],{"class":257},[45,44130,33194],{"class":93},[45,44132,1153],{"class":257},[45,44134,33247],{"class":313},[45,44136,1103],{"class":257},[45,44138,33194],{"class":93},[45,44140,1153],{"class":257},[45,44142,3675],{"class":313},[45,44144,33258],{"class":51},[45,44146,94],{"class":93},[45,44148,426],{"class":257},[45,44150,33265],{"class":51},[45,44152,94],{"class":93},[45,44154,426],{"class":257},[45,44156,33224],{"class":51},[45,44158,44159],{"class":47,"line":33274},[45,44160,2483],{"emptyLinePlaceholder":133},[45,44162,44163],{"class":47,"line":33279},[45,44164,33282],{"class":267},[45,44166,44167,44169,44171,44173,44175,44177,44179],{"class":47,"line":33285},[45,44168,2580],{"class":93},[45,44170,33290],{"class":51},[45,44172,94],{"class":93},[45,44174,426],{"class":257},[45,44176,1147],{"class":51},[45,44178,1167],{"class":93},[45,44180,33301],{"class":51},[45,44182,44183],{"class":47,"line":33304},[45,44184,33307],{"class":267},[45,44186,44187,44189,44191,44193,44195,44197,44199],{"class":47,"line":33310},[45,44188,33313],{"class":51},[45,44190,248],{"class":257},[45,44192,254],{"class":93},[45,44194,33320],{"class":51},[45,44196,94],{"class":93},[45,44198,426],{"class":257},[45,44200,33327],{"class":51},[45,44202,44203],{"class":47,"line":33330},[45,44204,33333],{"class":267},[45,44206,44207],{"class":47,"line":33336},[45,44208,33339],{"class":267},[45,44210,44211,44213,44215],{"class":47,"line":33342},[45,44212,33345],{"class":51},[45,44214,254],{"class":93},[45,44216,32395],{"class":51},[45,44218,44219],{"class":47,"line":33352},[45,44220,2483],{"emptyLinePlaceholder":133},[45,44222,44223],{"class":47,"line":33357},[45,44224,33360],{"class":267},[45,44226,44227,44229,44231,44233,44235],{"class":47,"line":33363},[45,44228,33366],{"class":51},[45,44230,254],{"class":93},[45,44232,33371],{"class":51},[45,44234,94],{"class":93},[45,44236,33376],{"class":51},[45,44238,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265,44267,44269,44271,44273],{"class":47,"line":33379},[45,44240,32532],{"class":257},[45,44242,209],{"class":51},[45,44244,33386],{"class":313},[45,44246,1103],{"class":257},[45,44248,33391],{"class":93},[45,44250,1153],{"class":257},[45,44252,751],{"class":313},[45,44254,1103],{"class":257},[45,44256,33391],{"class":93},[45,44258,1153],{"class":257},[45,44260,33404],{"class":313},[45,44262,33407],{"class":51},[45,44264,33410],{"class":93},[45,44266,1114],{"class":257},[45,44268,33415],{"class":51},[45,44270,536],{"class":93},[45,44272,1114],{"class":257},[45,44274,30578],{"class":51},[45,44276,44277],{"class":47,"line":33424},[45,44278,36814],{"class":267},[45,44280,44281],{"class":47,"line":33430},[45,44282,36819],{"class":267},[45,44284,44285,44287,44289],{"class":47,"line":33436},[45,44286,36824],{"class":51},[45,44288,33448],{"class":313},[45,44290,215],{"class":51},[45,44292,44293],{"class":47,"line":33442},[45,44294,33468],{"class":267},[45,44296,44297,44299,44301,44303,44305,44307],{"class":47,"line":33453},[45,44298,33474],{"class":51},[45,44300,254],{"class":93},[45,44302,33479],{"class":51},[45,44304,33482],{"class":5299},[45,44306,254],{"class":93},[45,44308,1629],{"class":51},[45,44310,44311,44313,44315,44317],{"class":47,"line":33459},[45,44312,33492],{"class":313},[45,44314,1066],{"class":51},[45,44316,33497],{"class":257},[45,44318,33500],{"class":51},[45,44320,44321,44323],{"class":47,"line":33465},[45,44322,33506],{"class":313},[45,44324,33509],{"class":51},[45,44326,44327,44329],{"class":47,"line":33471},[45,44328,33515],{"class":313},[45,44330,33518],{"class":51},[45,44332,44333,44335],{"class":47,"line":33489},[45,44334,33524],{"class":313},[45,44336,33527],{"class":51},[45,44338,44339,44341],{"class":47,"line":33503},[45,44340,33533],{"class":313},[45,44342,33536],{"class":51},[45,44344,44345],{"class":47,"line":33512},[45,44346,33542],{"class":51},[45,44348,44349],{"class":47,"line":33521},[45,44350,33548],{"class":267},[45,44352,44353,44355],{"class":47,"line":33530},[45,44354,4173],{"class":93},[45,44356,33556],{"class":51},[45,44358,44359],{"class":47,"line":33539},[45,44360,2483],{"emptyLinePlaceholder":133},[45,44362,44363],{"class":47,"line":33545},[45,44364,33567],{"class":267},[45,44366,44367,44369,44371],{"class":47,"line":33551},[45,44368,32028],{"class":93},[45,44370,33575],{"class":2046},[45,44372,33578],{"class":51},[45,44374,44375],{"class":47,"line":33559},[45,44376,33584],{"class":267},[45,44378,44379,44381,44383,44385,44387,44389,44391,44393],{"class":47,"line":33564},[45,44380,33590],{"class":51},[45,44382,31774],{"class":5299},[45,44384,254],{"class":93},[45,44386,209],{"class":51},[45,44388,706],{"class":257},[45,44390,586],{"class":51},[45,44392,501],{"class":257},[45,44394,30578],{"class":51},[45,44396,44397],{"class":47,"line":33570},[45,44398,33610],{"class":267},[45,44400,44401],{"class":47,"line":33581},[45,44402,33616],{"class":267},[45,44404,44405],{"class":47,"line":33587},[45,44406,33622],{"class":267},[45,44408,44409,44411,44413,44415,44417,44419,44421],{"class":47,"line":33607},[45,44410,31808],{"class":51},[45,44412,426],{"class":257},[45,44414,586],{"class":51},[45,44416,286],{"class":257},[45,44418,586],{"class":51},[45,44420,426],{"class":257},[45,44422,215],{"class":51},[45,44424,44425],{"class":47,"line":33613},[45,44426,33645],{"class":267},[45,44428,44429],{"class":47,"line":33619},[45,44430,33651],{"class":267},[45,44432,44433],{"class":47,"line":33625},[45,44434,33657],{"class":267},[45,44436,44437],{"class":47,"line":33642},[45,44438,33663],{"class":267},[45,44440,44441],{"class":47,"line":33648},[45,44442,33669],{"class":267},[45,44444,44445,44447,44449,44451,44453,44455,44457,44459,44461],{"class":47,"line":33654},[45,44446,33675],{"class":51},[45,44448,33678],{"class":313},[45,44450,33681],{"class":51},[45,44452,33684],{"class":313},[45,44454,586],{"class":51},[45,44456,33689],{"class":5299},[45,44458,254],{"class":93},[45,44460,33694],{"class":313},[45,44462,215],{"class":51},[45,44464,44465,44467,44469,44471,44473,44475,44477,44479,44481],{"class":47,"line":33660},[45,44466,33675],{"class":51},[45,44468,33678],{"class":313},[45,44470,33706],{"class":51},[45,44472,33709],{"class":313},[45,44474,586],{"class":51},[45,44476,33689],{"class":5299},[45,44478,254],{"class":93},[45,44480,33718],{"class":313},[45,44482,215],{"class":51},[45,44484,44485],{"class":47,"line":33666},[45,44486,33726],{"class":267},[45,44488,44489],{"class":47,"line":33672},[45,44490,33732],{"class":51},[45,44492,44493],{"class":47,"line":33699},[45,44494,33738],{"class":267},[45,44496,44497,44499,44501],{"class":47,"line":33723},[45,44498,33744],{"class":51},[45,44500,33747],{"class":313},[45,44502,215],{"class":51},[45,44504,44505,44507,44509],{"class":47,"line":33729},[45,44506,33755],{"class":51},[45,44508,33758],{"class":313},[45,44510,215],{"class":51},[45,44512,44513],{"class":47,"line":33735},[45,44514,33766],{"class":267},[45,44516,44517,44519,44521,44523,44525,44527,44529],{"class":47,"line":33741},[45,44518,31808],{"class":51},[45,44520,426],{"class":257},[45,44522,586],{"class":51},[45,44524,286],{"class":257},[45,44526,586],{"class":51},[45,44528,286],{"class":257},[45,44530,215],{"class":51},[45,44532,44533,44535,44537,44539,44541,44543,44545,44547,44549],{"class":47,"line":33752},[45,44534,33675],{"class":51},[45,44536,33678],{"class":313},[45,44538,33793],{"class":51},[45,44540,33684],{"class":313},[45,44542,586],{"class":51},[45,44544,33689],{"class":5299},[45,44546,254],{"class":93},[45,44548,33804],{"class":313},[45,44550,215],{"class":51},[45,44552,44553,44555,44557,44559,44561,44563,44565,44567,44569],{"class":47,"line":33763},[45,44554,33675],{"class":51},[45,44556,33678],{"class":313},[45,44558,33816],{"class":51},[45,44560,33709],{"class":313},[45,44562,586],{"class":51},[45,44564,33689],{"class":5299},[45,44566,254],{"class":93},[45,44568,33827],{"class":313},[45,44570,215],{"class":51},[45,44572,44573],{"class":47,"line":33769},[45,44574,33835],{"class":267},[45,44576,44577],{"class":47,"line":33786},[45,44578,33732],{"class":51},[45,44580,44581,44583,44585],{"class":47,"line":33809},[45,44582,33744],{"class":51},[45,44584,33678],{"class":313},[45,44586,215],{"class":51},[45,44588,44589,44591,44593],{"class":47,"line":33832},[45,44590,33755],{"class":51},[45,44592,33857],{"class":313},[45,44594,215],{"class":51},[45,44596,44597],{"class":47,"line":33838},[45,44598,33865],{"class":51},[45,44600,44601],{"class":47,"line":33843},[45,44602,2483],{"emptyLinePlaceholder":133},[45,44604,44605],{"class":47,"line":33852},[45,44606,33876],{"class":267},[45,44608,44609,44611,44613,44615,44617],{"class":47,"line":33862},[45,44610,1614],{"class":93},[45,44612,31301],{"class":257},[45,44614,3032],{"class":93},[45,44616,31306],{"class":313},[45,44618,3822],{"class":51},[45,44620,44621],{"class":47,"line":33868},[45,44622,33895],{"class":267},[45,44624,44625,44628,44630],{"class":47,"line":33873},[45,44626,44627],{"class":51},"    GoogLeNet",[45,44629,254],{"class":93},[45,44631,44632],{"class":51},"GoogLeNet(Inception)\n",[45,44634,44635,44637,44639],{"class":47,"line":33879},[45,44636,33912],{"class":51},[45,44638,254],{"class":93},[45,44640,33917],{"class":51},[45,44642,44643,44645,44647,44650,44652,44654,44656],{"class":47,"line":33892},[45,44644,33474],{"class":51},[45,44646,254],{"class":93},[45,44648,44649],{"class":51},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[45,44651,33930],{"class":5299},[45,44653,254],{"class":93},[45,44655,1158],{"class":257},[45,44657,215],{"class":51},[45,44659,44660],{"class":47,"line":33898},[45,44661,33942],{"class":51},[159,44663,44664],{"start":1262},[162,44665,40655],{},[35,44667,44669],{"className":37,"code":44668,"language":39,"meta":40,"style":40},"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",[42,44670,44671,44677,44687,44697,44701,44711,44722,44726,44730,44734,44742,44758,44768,44784,44794,44808,44812,44822,44832,44842,44848,44852,44856,44864,44868,44884,44892,44896,44900,44908,44916,44920,44924,44928,44932,44938,44942,44952,44960,44968,44972,44976,44980,44988,44992,45008,45012,45016,45020,45032,45036,45048,45052,45056,45068,45072,45082,45086,45090,45102,45106,45114,45118,45122,45130,45134,45142,45146,45150,45154,45158,45162,45178,45186,45190,45194,45242,45248,45252,45262,45270,45278,45282,45286,45290,45294,45302,45306,45322,45326,45334,45342],{"__ignoreMap":40},[45,44672,44673,44675],{"class":47,"line":48},[45,44674,30473],{"class":93},[45,44676,30476],{"class":51},[45,44678,44679,44681,44683,44685],{"class":47,"line":125},[45,44680,30473],{"class":93},[45,44682,31496],{"class":51},[45,44684,31464],{"class":93},[45,44686,31501],{"class":51},[45,44688,44689,44691,44693,44695],{"class":47,"line":1262},[45,44690,30818],{"class":93},[45,44692,31479],{"class":51},[45,44694,30473],{"class":93},[45,44696,31484],{"class":51},[45,44698,44699],{"class":47,"line":1277},[45,44700,34003],{"class":267},[45,44702,44703,44705,44707,44709],{"class":47,"line":1283},[45,44704,30818],{"class":93},[45,44706,31449],{"class":51},[45,44708,30473],{"class":93},[45,44710,31454],{"class":51},[45,44712,44713,44715,44717,44719],{"class":47,"line":1297},[45,44714,30818],{"class":93},[45,44716,31995],{"class":51},[45,44718,30473],{"class":93},[45,44720,44721],{"class":51}," GoogLeNet,Inception\n",[45,44723,44724],{"class":47,"line":1303},[45,44725,2483],{"emptyLinePlaceholder":133},[45,44727,44728],{"class":47,"line":1394},[45,44729,2483],{"emptyLinePlaceholder":133},[45,44731,44732],{"class":47,"line":1400},[45,44733,34032],{"class":267},[45,44735,44736,44738,44740],{"class":47,"line":1412},[45,44737,32028],{"class":93},[45,44739,34039],{"class":2046},[45,44741,32034],{"class":51},[45,44743,44744,44746,44748,44750,44752,44754,44756],{"class":47,"line":1695},[45,44745,34046],{"class":51},[45,44747,254],{"class":93},[45,44749,31536],{"class":51},[45,44751,31539],{"class":5299},[45,44753,254],{"class":93},[45,44755,31544],{"class":313},[45,44757,31547],{"class":51},[45,44759,44760,44762,44764,44766],{"class":47,"line":1700},[45,44761,34063],{"class":5299},[45,44763,254],{"class":93},[45,44765,34068],{"class":257},[45,44767,31547],{"class":51},[45,44769,44770,44772,44774,44776,44778,44780,44782],{"class":47,"line":1706},[45,44771,34075],{"class":5299},[45,44773,254],{"class":93},[45,44775,31574],{"class":51},[45,44777,31577],{"class":5299},[45,44779,254],{"class":93},[45,44781,35530],{"class":257},[45,44783,31585],{"class":51},[45,44785,44786,44788,44790,44792],{"class":47,"line":1711},[45,44787,34092],{"class":5299},[45,44789,254],{"class":93},[45,44791,31557],{"class":257},[45,44793,215],{"class":51},[45,44795,44796,44798,44800,44802,44804,44806],{"class":47,"line":1725},[45,44797,34103],{"class":51},[45,44799,254],{"class":93},[45,44801,31615],{"class":51},[45,44803,31618],{"class":5299},[45,44805,254],{"class":93},[45,44807,34114],{"class":51},[45,44809,44810],{"class":47,"line":1730},[45,44811,34119],{"class":267},[45,44813,44814,44816,44818,44820],{"class":47,"line":1736},[45,44815,34124],{"class":5299},[45,44817,254],{"class":93},[45,44819,426],{"class":257},[45,44821,31547],{"class":51},[45,44823,44824,44826,44828,44830],{"class":47,"line":1757},[45,44825,34135],{"class":5299},[45,44827,254],{"class":93},[45,44829,31557],{"class":257},[45,44831,31547],{"class":51},[45,44833,44834,44836,44838,44840],{"class":47,"line":1762},[45,44835,34146],{"class":5299},[45,44837,254],{"class":93},[45,44839,400],{"class":257},[45,44841,215],{"class":51},[45,44843,44844,44846],{"class":47,"line":1776},[45,44845,4173],{"class":93},[45,44847,34159],{"class":51},[45,44849,44850],{"class":47,"line":1781},[45,44851,2483],{"emptyLinePlaceholder":133},[45,44853,44854],{"class":47,"line":1810},[45,44855,34168],{"class":267},[45,44857,44858,44860,44862],{"class":47,"line":1815},[45,44859,32028],{"class":93},[45,44861,34175],{"class":2046},[45,44863,34178],{"class":51},[45,44865,44866],{"class":47,"line":1832},[45,44867,34183],{"class":267},[45,44869,44870,44872,44874,44876,44878,44880,44882],{"class":47,"line":1837},[45,44871,31318],{"class":51},[45,44873,254],{"class":93},[45,44875,31325],{"class":313},[45,44877,1787],{"class":93},[45,44879,31330],{"class":51},[45,44881,1784],{"class":93},[45,44883,34200],{"class":313},[45,44885,44886,44888,44890],{"class":47,"line":1842},[45,44887,31370],{"class":51},[45,44889,254],{"class":93},[45,44891,32370],{"class":51},[45,44893,44894],{"class":47,"line":1847},[45,44895,2483],{"emptyLinePlaceholder":133},[45,44897,44898],{"class":47,"line":1861},[45,44899,34217],{"class":267},[45,44901,44902,44904,44906],{"class":47,"line":1866},[45,44903,34222],{"class":51},[45,44905,254],{"class":93},[45,44907,32423],{"class":257},[45,44909,44910,44912,44914],{"class":47,"line":2660},[45,44911,34231],{"class":51},[45,44913,254],{"class":93},[45,44915,3168],{"class":257},[45,44917,44918],{"class":47,"line":2674},[45,44919,2483],{"emptyLinePlaceholder":133},[45,44921,44922],{"class":47,"line":2682},[45,44923,34244],{"class":267},[45,44925,44926],{"class":47,"line":2687},[45,44927,34249],{"class":267},[45,44929,44930],{"class":47,"line":2693},[45,44931,34254],{"class":267},[45,44933,44934,44936],{"class":47,"line":2699},[45,44935,34259],{"class":93},[45,44937,32965],{"class":51},[45,44939,44940],{"class":47,"line":2704},[45,44941,34266],{"class":267},[45,44943,44944,44946,44948,44950],{"class":47,"line":8031},[45,44945,3486],{"class":93},[45,44947,34273],{"class":51},[45,44949,26126],{"class":93},[45,44951,34278],{"class":51},[45,44953,44954,44956,44958],{"class":47,"line":8055},[45,44955,34283],{"class":51},[45,44957,254],{"class":93},[45,44959,34288],{"class":51},[45,44961,44962,44964,44966],{"class":47,"line":8060},[45,44963,34293],{"class":51},[45,44965,254],{"class":93},[45,44967,34298],{"class":51},[45,44969,44970],{"class":47,"line":8066},[45,44971,34303],{"class":267},[45,44973,44974],{"class":47,"line":8093},[45,44975,32956],{"class":51},[45,44977,44978],{"class":47,"line":8098},[45,44979,34312],{"class":267},[45,44981,44982,44984,44986],{"class":47,"line":8104},[45,44983,32741],{"class":51},[45,44985,254],{"class":93},[45,44987,34321],{"class":51},[45,44989,44990],{"class":47,"line":8116},[45,44991,34326],{"class":267},[45,44993,44994,44996,44998,45000,45002,45004,45006],{"class":47,"line":8128},[45,44995,32758],{"class":51},[45,44997,254],{"class":93},[45,44999,32763],{"class":51},[45,45001,32766],{"class":5299},[45,45003,254],{"class":93},[45,45005,426],{"class":257},[45,45007,215],{"class":51},[45,45009,45010],{"class":47,"line":8140},[45,45011,34347],{"class":267},[45,45013,45014],{"class":47,"line":9799},[45,45015,34352],{"class":267},[45,45017,45018],{"class":47,"line":9824},[45,45019,34357],{"class":267},[45,45021,45022,45024,45026,45028,45030],{"class":47,"line":9847},[45,45023,34362],{"class":51},[45,45025,9560],{"class":93},[45,45027,32868],{"class":51},[45,45029,3032],{"class":93},[45,45031,34371],{"class":51},[45,45033,45034],{"class":47,"line":9871},[45,45035,34376],{"class":267},[45,45037,45038,45040,45042,45044,45046],{"class":47,"line":9876},[45,45039,34381],{"class":51},[45,45041,9560],{"class":93},[45,45043,34386],{"class":51},[45,45045,400],{"class":257},[45,45047,215],{"class":51},[45,45049,45050],{"class":47,"line":9881},[45,45051,2483],{"emptyLinePlaceholder":133},[45,45053,45054],{"class":47,"line":9886},[45,45055,34399],{"class":267},[45,45057,45058,45060,45062,45064,45066],{"class":47,"line":9895},[45,45059,34404],{"class":51},[45,45061,254],{"class":93},[45,45063,34409],{"class":51},[45,45065,791],{"class":93},[45,45067,34414],{"class":51},[45,45069,45070],{"class":47,"line":9900},[45,45071,34419],{"class":267},[45,45073,45074,45076,45078,45080],{"class":47,"line":9906},[45,45075,32532],{"class":257},[45,45077,209],{"class":51},[45,45079,34428],{"class":313},[45,45081,34431],{"class":51},[45,45083,45084],{"class":47,"line":9927},[45,45085,2483],{"emptyLinePlaceholder":133},[45,45087,45088],{"class":47,"line":9933},[45,45089,34440],{"class":267},[45,45091,45092,45094,45096,45098,45100],{"class":47,"line":9947},[45,45093,1614],{"class":93},[45,45095,31301],{"class":257},[45,45097,3032],{"class":93},[45,45099,31306],{"class":313},[45,45101,3822],{"class":51},[45,45103,45104],{"class":47,"line":9953},[45,45105,34457],{"class":267},[45,45107,45108,45110,45112],{"class":47,"line":9980},[45,45109,31370],{"class":51},[45,45111,254],{"class":93},[45,45113,44632],{"class":51},[45,45115,45116],{"class":47,"line":9989},[45,45117,34470],{"class":267},[45,45119,45120],{"class":47,"line":9995},[45,45121,34475],{"class":267},[45,45123,45124,45126,45128],{"class":47,"line":10003},[45,45125,34480],{"class":51},[45,45127,34483],{"class":313},[45,45129,30578],{"class":51},[45,45131,45132],{"class":47,"line":10008},[45,45133,34490],{"class":267},[45,45135,45136,45138,45140],{"class":47,"line":16687},[45,45137,34103],{"class":51},[45,45139,254],{"class":93},[45,45141,34499],{"class":51},[45,45143,45144],{"class":47,"line":16693},[45,45145,34504],{"class":267},[45,45147,45148],{"class":47,"line":16716},[45,45149,34509],{"class":51},[45,45151,45152],{"class":47,"line":16722},[45,45153,2483],{"emptyLinePlaceholder":133},[45,45155,45156],{"class":47,"line":16745},[45,45157,34518],{"class":267},[45,45159,45160],{"class":47,"line":16759},[45,45161,34523],{"class":267},[45,45163,45164,45166,45168,45170,45172,45174,45176],{"class":47,"line":16779},[45,45165,31318],{"class":51},[45,45167,254],{"class":93},[45,45169,31325],{"class":313},[45,45171,1787],{"class":93},[45,45173,31330],{"class":51},[45,45175,1784],{"class":93},[45,45177,34200],{"class":313},[45,45179,45180,45182,45184],{"class":47,"line":16785},[45,45181,31370],{"class":51},[45,45183,254],{"class":93},[45,45185,32370],{"class":51},[45,45187,45188],{"class":47,"line":16796},[45,45189,34552],{"class":267},[45,45191,45192],{"class":47,"line":16819},[45,45193,34557],{"class":267},[45,45195,45196,45198,45200,45202,45204,45206,45208,45210,45212,45214,45216,45218,45220,45222,45224,45226,45228,45230,45232,45234,45236,45238,45240],{"class":47,"line":16841},[45,45197,34562],{"class":51},[45,45199,254],{"class":93},[45,45201,1097],{"class":51},[45,45203,34569],{"class":313},[45,45205,586],{"class":51},[45,45207,34574],{"class":313},[45,45209,586],{"class":51},[45,45211,34579],{"class":313},[45,45213,586],{"class":51},[45,45215,34584],{"class":313},[45,45217,586],{"class":51},[45,45219,34589],{"class":313},[45,45221,586],{"class":51},[45,45223,34594],{"class":313},[45,45225,586],{"class":51},[45,45227,34599],{"class":313},[45,45229,586],{"class":51},[45,45231,34604],{"class":313},[45,45233,586],{"class":51},[45,45235,34609],{"class":313},[45,45237,586],{"class":51},[45,45239,34614],{"class":313},[45,45241,33327],{"class":51},[45,45243,45244,45246],{"class":47,"line":16846},[45,45245,34259],{"class":93},[45,45247,32965],{"class":51},[45,45249,45250],{"class":47,"line":16852},[45,45251,34627],{"class":267},[45,45253,45254,45256,45258,45260],{"class":47,"line":16866},[45,45255,3486],{"class":93},[45,45257,34634],{"class":51},[45,45259,26126],{"class":93},[45,45261,34278],{"class":51},[45,45263,45264,45266,45268],{"class":47,"line":16879},[45,45265,32691],{"class":51},[45,45267,254],{"class":93},[45,45269,32696],{"class":51},[45,45271,45272,45274,45276],{"class":47,"line":16884},[45,45273,32706],{"class":51},[45,45275,254],{"class":93},[45,45277,32711],{"class":51},[45,45279,45280],{"class":47,"line":16898},[45,45281,2483],{"emptyLinePlaceholder":133},[45,45283,45284],{"class":47,"line":16903},[45,45285,34663],{"class":267},[45,45287,45288],{"class":47,"line":16909},[45,45289,32956],{"class":51},[45,45291,45292],{"class":47,"line":16914},[45,45293,34672],{"class":267},[45,45295,45296,45298,45300],{"class":47,"line":16928},[45,45297,32741],{"class":51},[45,45299,254],{"class":93},[45,45301,32746],{"class":51},[45,45303,45304],{"class":47,"line":16933},[45,45305,34685],{"class":267},[45,45307,45308,45310,45312,45314,45316,45318,45320],{"class":47,"line":16938},[45,45309,32758],{"class":51},[45,45311,254],{"class":93},[45,45313,32763],{"class":51},[45,45315,32766],{"class":5299},[45,45317,254],{"class":93},[45,45319,426],{"class":257},[45,45321,215],{"class":51},[45,45323,45324],{"class":47,"line":16952},[45,45325,34706],{"class":267},[45,45327,45328,45330,45332],{"class":47,"line":16964},[45,45329,34711],{"class":51},[45,45331,254],{"class":93},[45,45333,34716],{"class":51},[45,45335,45336,45338,45340],{"class":47,"line":16969},[45,45337,34721],{"class":51},[45,45339,254],{"class":93},[45,45341,34726],{"class":51},[45,45343,45344,45346,45348,45350,45352,45354,45356,45358],{"class":47,"line":16982},[45,45345,34731],{"class":257},[45,45347,209],{"class":51},[45,45349,34736],{"class":313},[45,45351,34739],{"class":51},[45,45353,34742],{"class":313},[45,45355,586],{"class":51},[45,45357,34747],{"class":313},[45,45359,34750],{"class":51},[176,45361,45363],{"id":45362},"_24训练自己的数据集","2.4.训练自己的数据集",[10,45365,45366],{},"猫狗分类任务",[10,45368,45369],{},"划分数据集和验证集",[35,45371,45373],{"className":37,"code":45372,"language":39,"meta":40,"style":40},"# 创建脚本，用于划分数据集和验证集\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",[42,45374,45375,45380,45387,45392,45403,45410,45414,45424,45438,45447,45451,45456,45466,45486,45490,45495,45505,45516,45529,45533,45538,45547,45557,45568,45572,45577,45587,45591,45596,45601,45606,45611,45616,45620,45630,45657,45670,45682,45709,45714,45719,45733,45738,45750,45765,45780,45788,45792,45797,45803,45815,45828,45833,45838,45843,45893,45899,45903],{"__ignoreMap":40},[45,45376,45377],{"class":47,"line":48},[45,45378,45379],{"class":267},"# 创建脚本，用于划分数据集和验证集\n",[45,45381,45382,45384],{"class":47,"line":125},[45,45383,30473],{"class":93},[45,45385,45386],{"class":51}," os\n",[45,45388,45389],{"class":47,"line":1262},[45,45390,45391],{"class":267},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[45,45393,45394,45396,45399,45401],{"class":47,"line":1277},[45,45395,30818],{"class":93},[45,45397,45398],{"class":51}," shutil ",[45,45400,30473],{"class":93},[45,45402,31903],{"class":51},[45,45404,45405,45407],{"class":47,"line":1283},[45,45406,30473],{"class":93},[45,45408,45409],{"class":51}," random\n",[45,45411,45412],{"class":47,"line":1297},[45,45413,2483],{"emptyLinePlaceholder":133},[45,45415,45416,45418,45421],{"class":47,"line":1303},[45,45417,32028],{"class":93},[45,45419,45420],{"class":2046}," mkfile",[45,45422,45423],{"class":51},"(file):\n",[45,45425,45426,45428,45430,45433,45436],{"class":47,"line":1394},[45,45427,3184],{"class":93},[45,45429,39011],{"class":93},[45,45431,45432],{"class":51}," os.path.exists(",[45,45434,45435],{"class":5299},"file",[45,45437,30867],{"class":51},[45,45439,45440,45443,45445],{"class":47,"line":1400},[45,45441,45442],{"class":51},"        os.makedirs(",[45,45444,45435],{"class":5299},[45,45446,215],{"class":51},[45,45448,45449],{"class":47,"line":1412},[45,45450,2483],{"emptyLinePlaceholder":133},[45,45452,45453],{"class":47,"line":1695},[45,45454,45455],{"class":267},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[45,45457,45458,45461,45463],{"class":47,"line":1700},[45,45459,45460],{"class":51},"file_path",[45,45462,254],{"class":93},[45,45464,45465],{"class":313},"'data_cat_dog'\n",[45,45467,45468,45471,45473,45476,45478,45481,45483],{"class":47,"line":1706},[45,45469,45470],{"class":51},"flower_class",[45,45472,254],{"class":93},[45,45474,45475],{"class":51},"[cla ",[45,45477,3108],{"class":93},[45,45479,45480],{"class":51}," cla ",[45,45482,26126],{"class":93},[45,45484,45485],{"class":51}," os.listdir(file_path)]\n",[45,45487,45488],{"class":47,"line":1711},[45,45489,2483],{"emptyLinePlaceholder":133},[45,45491,45492],{"class":47,"line":1725},[45,45493,45494],{"class":267},"# 创建训练集train文件夹\n",[45,45496,45497,45500,45503],{"class":47,"line":1730},[45,45498,45499],{"class":51},"mkfile(",[45,45501,45502],{"class":313},"'data\u002Ftrain'",[45,45504,215],{"class":51},[45,45506,45507,45509,45511,45513],{"class":47,"line":1736},[45,45508,3108],{"class":93},[45,45510,45480],{"class":51},[45,45512,26126],{"class":93},[45,45514,45515],{"class":51}," flower_class:\n",[45,45517,45518,45521,45524,45526],{"class":47,"line":1757},[45,45519,45520],{"class":51},"    mkfile(",[45,45522,45523],{"class":313},"'data\u002Ftrain\u002F'",[45,45525,689],{"class":93},[45,45527,45528],{"class":51},"cla)\n",[45,45530,45531],{"class":47,"line":1762},[45,45532,2483],{"emptyLinePlaceholder":133},[45,45534,45535],{"class":47,"line":1776},[45,45536,45537],{"class":267},"# 创建验证集val文件夹\n",[45,45539,45540,45542,45545],{"class":47,"line":1781},[45,45541,45499],{"class":51},[45,45543,45544],{"class":313},"'data\u002Ftest'",[45,45546,215],{"class":51},[45,45548,45549,45551,45553,45555],{"class":47,"line":1810},[45,45550,3108],{"class":93},[45,45552,45480],{"class":51},[45,45554,26126],{"class":93},[45,45556,45515],{"class":51},[45,45558,45559,45561,45564,45566],{"class":47,"line":1815},[45,45560,45520],{"class":51},[45,45562,45563],{"class":313},"'data\u002Ftest\u002F'",[45,45565,689],{"class":93},[45,45567,45528],{"class":51},[45,45569,45570],{"class":47,"line":1832},[45,45571,2483],{"emptyLinePlaceholder":133},[45,45573,45574],{"class":47,"line":1837},[45,45575,45576],{"class":267},"# 划分比例，训练集：测试集=9：1\n",[45,45578,45579,45582,45584],{"class":47,"line":1842},[45,45580,45581],{"class":51},"split_rate",[45,45583,254],{"class":93},[45,45585,45586],{"class":257},"0.1\n",[45,45588,45589],{"class":47,"line":1847},[45,45590,2483],{"emptyLinePlaceholder":133},[45,45592,45593],{"class":47,"line":1861},[45,45594,45595],{"class":267},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[45,45597,45598],{"class":47,"line":1866},[45,45599,45600],{"class":267},"# cla_path：当前类别的原始图片路径\n",[45,45602,45603],{"class":47,"line":2660},[45,45604,45605],{"class":267},"# images：当前类别下所有图片的文件名列表\n",[45,45607,45608],{"class":47,"line":2674},[45,45609,45610],{"class":267},"# num：该类别图片总数\n",[45,45612,45613],{"class":47,"line":2682},[45,45614,45615],{"class":267},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[45,45617,45618],{"class":47,"line":2687},[45,45619,2483],{"emptyLinePlaceholder":133},[45,45621,45622,45624,45626,45628],{"class":47,"line":2693},[45,45623,3108],{"class":93},[45,45625,45480],{"class":51},[45,45627,26126],{"class":93},[45,45629,45515],{"class":51},[45,45631,45632,45635,45637,45640,45642,45645,45648,45650,45652,45654],{"class":47,"line":2699},[45,45633,45634],{"class":51},"    cla_path ",[45,45636,254],{"class":93},[45,45638,45639],{"class":51}," file_path ",[45,45641,689],{"class":93},[45,45643,45644],{"class":313}," '\u002F'",[45,45646,45647],{"class":93}," +",[45,45649,45480],{"class":51},[45,45651,689],{"class":93},[45,45653,45644],{"class":313},[45,45655,45656],{"class":267},"  # 某一类别的子目录\n",[45,45658,45659,45662,45664,45667],{"class":47,"line":2704},[45,45660,45661],{"class":51},"    images ",[45,45663,254],{"class":93},[45,45665,45666],{"class":51}," os.listdir(cla_path)  ",[45,45668,45669],{"class":267},"# iamges 列表存储了该目录下所有图像的名称\n",[45,45671,45672,45675,45677,45679],{"class":47,"line":8031},[45,45673,45674],{"class":51},"    num ",[45,45676,254],{"class":93},[45,45678,7414],{"class":257},[45,45680,45681],{"class":51},"(images)\n",[45,45683,45684,45687,45689,45692,45694,45696,45698,45701,45703,45706],{"class":47,"line":8055},[45,45685,45686],{"class":51},"    eval_index ",[45,45688,254],{"class":93},[45,45690,45691],{"class":51}," random.sample(images, ",[45,45693,701],{"class":5299},[45,45695,254],{"class":93},[45,45697,212],{"class":257},[45,45699,45700],{"class":51},"(num ",[45,45702,663],{"class":93},[45,45704,45705],{"class":51}," split_rate))  ",[45,45707,45708],{"class":267},"# 从images列表中随机抽取 k 个图像名称\n",[45,45710,45711],{"class":47,"line":8060},[45,45712,45713],{"class":267},"    # 遍历该类别下的所有图片\n",[45,45715,45716],{"class":47,"line":8066},[45,45717,45718],{"class":267},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[45,45720,45721,45723,45726,45728,45730],{"class":47,"line":8093},[45,45722,3284],{"class":93},[45,45724,45725],{"class":51}," index, image ",[45,45727,26126],{"class":93},[45,45729,31687],{"class":257},[45,45731,45732],{"class":51},"(images):\n",[45,45734,45735],{"class":47,"line":8098},[45,45736,45737],{"class":267},"        # eval_index 中保存验证集val的图像名称\n",[45,45739,45740,45742,45745,45747],{"class":47,"line":8104},[45,45741,2580],{"class":93},[45,45743,45744],{"class":51}," image ",[45,45746,26126],{"class":93},[45,45748,45749],{"class":51}," eval_index:\n",[45,45751,45752,45755,45757,45760,45762],{"class":47,"line":8116},[45,45753,45754],{"class":51},"            image_path ",[45,45756,254],{"class":93},[45,45758,45759],{"class":51}," cla_path ",[45,45761,689],{"class":93},[45,45763,45764],{"class":51}," image\n",[45,45766,45767,45770,45772,45775,45777],{"class":47,"line":8128},[45,45768,45769],{"class":51},"            new_path ",[45,45771,254],{"class":93},[45,45773,45774],{"class":313}," 'data\u002Ftest\u002F'",[45,45776,45647],{"class":93},[45,45778,45779],{"class":51}," cla\n",[45,45781,45782,45785],{"class":47,"line":8140},[45,45783,45784],{"class":51},"            copy(image_path, new_path)  ",[45,45786,45787],{"class":267},"# 将选中的图像复制到新路径\n",[45,45789,45790],{"class":47,"line":9799},[45,45791,2483],{"emptyLinePlaceholder":133},[45,45793,45794],{"class":47,"line":9824},[45,45795,45796],{"class":267},"        # 其余的图像保存在训练集train中\n",[45,45798,45799,45801],{"class":47,"line":9847},[45,45800,2617],{"class":93},[45,45802,3822],{"class":51},[45,45804,45805,45807,45809,45811,45813],{"class":47,"line":9871},[45,45806,45754],{"class":51},[45,45808,254],{"class":93},[45,45810,45759],{"class":51},[45,45812,689],{"class":93},[45,45814,45764],{"class":51},[45,45816,45817,45819,45821,45824,45826],{"class":47,"line":9876},[45,45818,45769],{"class":51},[45,45820,254],{"class":93},[45,45822,45823],{"class":313}," 'data\u002Ftrain\u002F'",[45,45825,45647],{"class":93},[45,45827,45779],{"class":51},[45,45829,45830],{"class":47,"line":9881},[45,45831,45832],{"class":51},"            copy(image_path, new_path)\n",[45,45834,45835],{"class":47,"line":9886},[45,45836,45837],{"class":267},"            # 打印进度条信息\n",[45,45839,45840],{"class":47,"line":9895},[45,45841,45842],{"class":267},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[45,45844,45845,45847,45849,45851,45854,45856,45858,45861,45863,45865,45867,45870,45873,45875,45877,45880,45883,45885,45887,45890],{"class":47,"line":9900},[45,45846,32532],{"class":257},[45,45848,209],{"class":51},[45,45850,459],{"class":313},[45,45852,45853],{"class":257},"\\r",[45,45855,1097],{"class":313},[45,45857,32540],{"class":257},[45,45859,45860],{"class":313},"] processing [",[45,45862,32540],{"class":257},[45,45864,791],{"class":313},[45,45866,32540],{"class":257},[45,45868,45869],{"class":313},"]\"",[45,45871,45872],{"class":51},".format(cla, index ",[45,45874,689],{"class":93},[45,45876,25201],{"class":257},[45,45878,45879],{"class":51},", num), ",[45,45881,45882],{"class":5299},"end",[45,45884,254],{"class":93},[45,45886,7735],{"class":313},[45,45888,45889],{"class":51},")  ",[45,45891,45892],{"class":267},"# processing bar\n",[45,45894,45895,45897],{"class":47,"line":9906},[45,45896,31380],{"class":257},[45,45898,2059],{"class":51},[45,45900,45901],{"class":47,"line":9927},[45,45902,2483],{"emptyLinePlaceholder":133},[45,45904,45905,45907,45909,45912],{"class":47,"line":9933},[45,45906,30496],{"class":257},[45,45908,209],{"class":51},[45,45910,45911],{"class":313},"\"processing done!\"",[45,45913,215],{"class":51},[10,45915,45916],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22081,45918,45920],{"id":45919},"_242模型代码","2.4.2.模型代码",[10,45922,45923],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[35,45925,45927],{"className":37,"code":45926,"language":39,"meta":40,"style":40},"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",[42,45928,45929,45935,45945,45955,45959,45975,45983,45997,46007,46011,46041,46045,46079,46125,46129,46163,46209,46213,46217,46251,46281,46285,46293,46307,46329,46351,46369,46373,46387,46391,46395,46411,46415,46423,46437,46447,46491,46495,46523,46527,46537,46565,46569,46605,46609,46637,46641,46651,46683,46715,46743,46747,46757,46789,46821,46853,46885,46917,46945,46949,46959,46991,47023,47035,47039,47051,47055,47059,47071,47079,47099,47103,47107,47111,47115,47119,47123,47137,47145,47153,47165,47179,47187,47191,47199,47209,47219,47229,47239,47249,47255,47259,47263,47275,47295,47303],{"__ignoreMap":40},[45,45930,45931,45933],{"class":47,"line":48},[45,45932,30473],{"class":93},[45,45934,30476],{"class":51},[45,45936,45937,45939,45941,45943],{"class":47,"line":125},[45,45938,30818],{"class":93},[45,45940,30821],{"class":51},[45,45942,30473],{"class":93},[45,45944,30826],{"class":51},[45,45946,45947,45949,45951,45953],{"class":47,"line":1262},[45,45948,30818],{"class":93},[45,45950,30838],{"class":51},[45,45952,30473],{"class":93},[45,45954,30843],{"class":51},[45,45956,45957],{"class":47,"line":1277},[45,45958,2483],{"emptyLinePlaceholder":133},[45,45960,45961,45963,45965,45967,45969,45971,45973],{"class":47,"line":1283},[45,45962,14777],{"class":93},[45,45964,41574],{"class":2046},[45,45966,209],{"class":51},[45,45968,30859],{"class":2046},[45,45970,765],{"class":51},[45,45972,30864],{"class":2046},[45,45974,30867],{"class":51},[45,45976,45977,45979,45981],{"class":47,"line":1297},[45,45978,30882],{"class":93},[45,45980,30885],{"class":257},[45,45982,41593],{"class":51},[45,45984,45985,45987,45989,45991,45993,45995],{"class":47,"line":1303},[45,45986,30898],{"class":257},[45,45988,41600],{"class":51},[45,45990,30904],{"class":257},[45,45992,30907],{"class":51},[45,45994,30910],{"class":257},[45,45996,2059],{"class":51},[45,45998,45999,46001,46003,46005],{"class":47,"line":1394},[45,46000,30926],{"class":257},[45,46002,34852],{"class":51},[45,46004,254],{"class":93},[45,46006,34857],{"class":51},[45,46008,46009],{"class":47,"line":1400},[45,46010,41623],{"class":267},[45,46012,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039],{"class":47,"line":1412},[45,46014,30926],{"class":257},[45,46016,41630],{"class":51},[45,46018,254],{"class":93},[45,46020,30934],{"class":51},[45,46022,30937],{"class":5299},[45,46024,254],{"class":93},[45,46026,41641],{"class":51},[45,46028,30946],{"class":5299},[45,46030,254],{"class":93},[45,46032,41648],{"class":51},[45,46034,30955],{"class":5299},[45,46036,254],{"class":93},[45,46038,426],{"class":257},[45,46040,215],{"class":51},[45,46042,46043],{"class":47,"line":1695},[45,46044,41661],{"class":267},[45,46046,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073,46075,46077],{"class":47,"line":1700},[45,46048,30926],{"class":257},[45,46050,41668],{"class":51},[45,46052,254],{"class":93},[45,46054,30934],{"class":51},[45,46056,30937],{"class":5299},[45,46058,254],{"class":93},[45,46060,41641],{"class":51},[45,46062,30946],{"class":5299},[45,46064,254],{"class":93},[45,46066,41685],{"class":51},[45,46068,400],{"class":257},[45,46070,41690],{"class":51},[45,46072,30955],{"class":5299},[45,46074,254],{"class":93},[45,46076,426],{"class":257},[45,46078,215],{"class":51},[45,46080,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123],{"class":47,"line":1706},[45,46082,30926],{"class":257},[45,46084,41705],{"class":51},[45,46086,254],{"class":93},[45,46088,30934],{"class":51},[45,46090,30937],{"class":5299},[45,46092,254],{"class":93},[45,46094,41685],{"class":51},[45,46096,400],{"class":257},[45,46098,41690],{"class":51},[45,46100,30946],{"class":5299},[45,46102,254],{"class":93},[45,46104,41685],{"class":51},[45,46106,426],{"class":257},[45,46108,41690],{"class":51},[45,46110,30955],{"class":5299},[45,46112,254],{"class":93},[45,46114,280],{"class":257},[45,46116,586],{"class":51},[45,46118,30964],{"class":5299},[45,46120,254],{"class":93},[45,46122,426],{"class":257},[45,46124,215],{"class":51},[45,46126,46127],{"class":47,"line":1711},[45,46128,41750],{"class":267},[45,46130,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161],{"class":47,"line":1725},[45,46132,30926],{"class":257},[45,46134,41757],{"class":51},[45,46136,254],{"class":93},[45,46138,30934],{"class":51},[45,46140,30937],{"class":5299},[45,46142,254],{"class":93},[45,46144,41641],{"class":51},[45,46146,30946],{"class":5299},[45,46148,254],{"class":93},[45,46150,41774],{"class":51},[45,46152,400],{"class":257},[45,46154,41690],{"class":51},[45,46156,30955],{"class":5299},[45,46158,254],{"class":93},[45,46160,426],{"class":257},[45,46162,215],{"class":51},[45,46164,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207],{"class":47,"line":1730},[45,46166,30926],{"class":257},[45,46168,41793],{"class":51},[45,46170,254],{"class":93},[45,46172,30934],{"class":51},[45,46174,30937],{"class":5299},[45,46176,254],{"class":93},[45,46178,41774],{"class":51},[45,46180,400],{"class":257},[45,46182,41690],{"class":51},[45,46184,30946],{"class":5299},[45,46186,254],{"class":93},[45,46188,41774],{"class":51},[45,46190,426],{"class":257},[45,46192,41690],{"class":51},[45,46194,30955],{"class":5299},[45,46196,254],{"class":93},[45,46198,527],{"class":257},[45,46200,586],{"class":51},[45,46202,30964],{"class":5299},[45,46204,254],{"class":93},[45,46206,286],{"class":257},[45,46208,215],{"class":51},[45,46210,46211],{"class":47,"line":1736},[45,46212,41838],{"class":267},[45,46214,46215],{"class":47,"line":1757},[45,46216,41843],{"class":267},[45,46218,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249],{"class":47,"line":1762},[45,46220,30926],{"class":257},[45,46222,41850],{"class":51},[45,46224,254],{"class":93},[45,46226,34910],{"class":51},[45,46228,30955],{"class":5299},[45,46230,254],{"class":93},[45,46232,280],{"class":257},[45,46234,586],{"class":51},[45,46236,31010],{"class":5299},[45,46238,254],{"class":93},[45,46240,426],{"class":257},[45,46242,586],{"class":51},[45,46244,30964],{"class":5299},[45,46246,254],{"class":93},[45,46248,426],{"class":257},[45,46250,215],{"class":51},[45,46252,46253,46255,46257,46259,46261,46263,46265,46267,46269,46271,46273,46275,46277,46279],{"class":47,"line":1776},[45,46254,30926],{"class":257},[45,46256,41885],{"class":51},[45,46258,254],{"class":93},[45,46260,30934],{"class":51},[45,46262,30937],{"class":5299},[45,46264,254],{"class":93},[45,46266,41641],{"class":51},[45,46268,30946],{"class":5299},[45,46270,254],{"class":93},[45,46272,41902],{"class":51},[45,46274,30955],{"class":5299},[45,46276,254],{"class":93},[45,46278,426],{"class":257},[45,46280,215],{"class":51},[45,46282,46283],{"class":47,"line":1781},[45,46284,2483],{"emptyLinePlaceholder":133},[45,46286,46287,46289,46291],{"class":47,"line":1810},[45,46288,30882],{"class":93},[45,46290,31174],{"class":2046},[45,46292,31177],{"class":51},[45,46294,46295,46297,46299,46301,46303,46305],{"class":47,"line":1815},[45,46296,41927],{"class":51},[45,46298,254],{"class":93},[45,46300,30904],{"class":257},[45,46302,35265],{"class":51},[45,46304,30904],{"class":257},[45,46306,41938],{"class":51},[45,46308,46309,46311,46313,46315,46317,46319,46321,46323,46325,46327],{"class":47,"line":1832},[45,46310,7168],{"class":51},[45,46312,254],{"class":93},[45,46314,30904],{"class":257},[45,46316,35265],{"class":51},[45,46318,30904],{"class":257},[45,46320,41953],{"class":51},[45,46322,30904],{"class":257},[45,46324,35265],{"class":51},[45,46326,30904],{"class":257},[45,46328,41962],{"class":51},[45,46330,46331,46333,46335,46337,46339,46341,46343,46345,46347,46349],{"class":47,"line":1837},[45,46332,41967],{"class":51},[45,46334,254],{"class":93},[45,46336,30904],{"class":257},[45,46338,35265],{"class":51},[45,46340,30904],{"class":257},[45,46342,41978],{"class":51},[45,46344,30904],{"class":257},[45,46346,35265],{"class":51},[45,46348,30904],{"class":257},[45,46350,41987],{"class":51},[45,46352,46353,46355,46357,46359,46361,46363,46365,46367],{"class":47,"line":1842},[45,46354,41992],{"class":51},[45,46356,254],{"class":93},[45,46358,30904],{"class":257},[45,46360,35265],{"class":51},[45,46362,30904],{"class":257},[45,46364,42003],{"class":51},[45,46366,30904],{"class":257},[45,46368,42008],{"class":51},[45,46370,46371],{"class":47,"line":1847},[45,46372,42013],{"class":267},[45,46374,46375,46377,46379,46381,46383,46385],{"class":47,"line":1861},[45,46376,14835],{"class":93},[45,46378,42020],{"class":51},[45,46380,32766],{"class":5299},[45,46382,254],{"class":93},[45,46384,426],{"class":257},[45,46386,215],{"class":51},[45,46388,46389],{"class":47,"line":1866},[45,46390,2483],{"emptyLinePlaceholder":133},[45,46392,46393],{"class":47,"line":2660},[45,46394,42041],{"class":267},[45,46396,46397,46399,46401,46403,46405,46407,46409],{"class":47,"line":2674},[45,46398,14777],{"class":93},[45,46400,42048],{"class":2046},[45,46402,209],{"class":51},[45,46404,30859],{"class":2046},[45,46406,765],{"class":51},[45,46408,30864],{"class":2046},[45,46410,30867],{"class":51},[45,46412,46413],{"class":47,"line":2682},[45,46414,42063],{"class":267},[45,46416,46417,46419,46421],{"class":47,"line":2687},[45,46418,30882],{"class":93},[45,46420,30885],{"class":257},[45,46422,42072],{"class":51},[45,46424,46425,46427,46429,46431,46433,46435],{"class":47,"line":2693},[45,46426,30898],{"class":257},[45,46428,42079],{"class":51},[45,46430,30904],{"class":257},[45,46432,30907],{"class":51},[45,46434,30910],{"class":257},[45,46436,2059],{"class":51},[45,46438,46439,46441,46443,46445],{"class":47,"line":2699},[45,46440,30926],{"class":257},[45,46442,42094],{"class":51},[45,46444,254],{"class":93},[45,46446,38090],{"class":51},[45,46448,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489],{"class":47,"line":2704},[45,46450,38095],{"class":51},[45,46452,30937],{"class":5299},[45,46454,254],{"class":93},[45,46456,280],{"class":257},[45,46458,586],{"class":51},[45,46460,30946],{"class":5299},[45,46462,254],{"class":93},[45,46464,412],{"class":257},[45,46466,586],{"class":51},[45,46468,30955],{"class":5299},[45,46470,254],{"class":93},[45,46472,577],{"class":257},[45,46474,586],{"class":51},[45,46476,31010],{"class":5299},[45,46478,254],{"class":93},[45,46480,286],{"class":257},[45,46482,586],{"class":51},[45,46484,30964],{"class":5299},[45,46486,254],{"class":93},[45,46488,280],{"class":257},[45,46490,38128],{"class":51},[45,46492,46493],{"class":47,"line":8031},[45,46494,38133],{"class":51},[45,46496,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521],{"class":47,"line":8055},[45,46498,38178],{"class":51},[45,46500,30955],{"class":5299},[45,46502,254],{"class":93},[45,46504,280],{"class":257},[45,46506,586],{"class":51},[45,46508,31010],{"class":5299},[45,46510,254],{"class":93},[45,46512,286],{"class":257},[45,46514,586],{"class":51},[45,46516,30964],{"class":5299},[45,46518,254],{"class":93},[45,46520,426],{"class":257},[45,46522,215],{"class":51},[45,46524,46525],{"class":47,"line":8060},[45,46526,38207],{"class":51},[45,46528,46529,46531,46533,46535],{"class":47,"line":8066},[45,46530,30926],{"class":257},[45,46532,42185],{"class":51},[45,46534,254],{"class":93},[45,46536,38090],{"class":51},[45,46538,46539,46541,46543,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563],{"class":47,"line":8093},[45,46540,38095],{"class":51},[45,46542,30937],{"class":5299},[45,46544,254],{"class":93},[45,46546,412],{"class":257},[45,46548,586],{"class":51},[45,46550,30946],{"class":5299},[45,46552,254],{"class":93},[45,46554,412],{"class":257},[45,46556,586],{"class":51},[45,46558,30955],{"class":5299},[45,46560,254],{"class":93},[45,46562,426],{"class":257},[45,46564,38128],{"class":51},[45,46566,46567],{"class":47,"line":8098},[45,46568,38133],{"class":51},[45,46570,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603],{"class":47,"line":8104},[45,46572,38095],{"class":51},[45,46574,30937],{"class":5299},[45,46576,254],{"class":93},[45,46578,412],{"class":257},[45,46580,586],{"class":51},[45,46582,30946],{"class":5299},[45,46584,254],{"class":93},[45,46586,42240],{"class":257},[45,46588,586],{"class":51},[45,46590,30955],{"class":5299},[45,46592,254],{"class":93},[45,46594,280],{"class":257},[45,46596,586],{"class":51},[45,46598,30964],{"class":5299},[45,46600,254],{"class":93},[45,46602,426],{"class":257},[45,46604,38128],{"class":51},[45,46606,46607],{"class":47,"line":8116},[45,46608,38133],{"class":51},[45,46610,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635],{"class":47,"line":8128},[45,46612,38178],{"class":51},[45,46614,30955],{"class":5299},[45,46616,254],{"class":93},[45,46618,280],{"class":257},[45,46620,586],{"class":51},[45,46622,31010],{"class":5299},[45,46624,254],{"class":93},[45,46626,286],{"class":257},[45,46628,586],{"class":51},[45,46630,30964],{"class":5299},[45,46632,254],{"class":93},[45,46634,426],{"class":257},[45,46636,215],{"class":51},[45,46638,46639],{"class":47,"line":8140},[45,46640,38207],{"class":51},[45,46642,46643,46645,46647,46649],{"class":47,"line":9799},[45,46644,30926],{"class":257},[45,46646,42301],{"class":51},[45,46648,254],{"class":93},[45,46650,38090],{"class":51},[45,46652,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681],{"class":47,"line":9824},[45,46654,42310],{"class":51},[45,46656,42240],{"class":257},[45,46658,586],{"class":51},[45,46660,412],{"class":257},[45,46662,42319],{"class":51},[45,46664,418],{"class":257},[45,46666,586],{"class":51},[45,46668,32151],{"class":257},[45,46670,42328],{"class":51},[45,46672,808],{"class":257},[45,46674,586],{"class":51},[45,46676,406],{"class":257},[45,46678,42337],{"class":51},[45,46680,406],{"class":257},[45,46682,38128],{"class":51},[45,46684,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713],{"class":47,"line":9847},[45,46686,42310],{"class":51},[45,46688,34951],{"class":257},[45,46690,586],{"class":51},[45,46692,32151],{"class":257},[45,46694,42319],{"class":51},[45,46696,32151],{"class":257},[45,46698,586],{"class":51},[45,46700,42240],{"class":257},[45,46702,42328],{"class":51},[45,46704,406],{"class":257},[45,46706,586],{"class":51},[45,46708,418],{"class":257},[45,46710,42337],{"class":51},[45,46712,412],{"class":257},[45,46714,38128],{"class":51},[45,46716,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741],{"class":47,"line":9871},[45,46718,38178],{"class":51},[45,46720,30955],{"class":5299},[45,46722,254],{"class":93},[45,46724,280],{"class":257},[45,46726,586],{"class":51},[45,46728,31010],{"class":5299},[45,46730,254],{"class":93},[45,46732,286],{"class":257},[45,46734,586],{"class":51},[45,46736,30964],{"class":5299},[45,46738,254],{"class":93},[45,46740,426],{"class":257},[45,46742,215],{"class":51},[45,46744,46745],{"class":47,"line":9876},[45,46746,38207],{"class":51},[45,46748,46749,46751,46753,46755],{"class":47,"line":9881},[45,46750,30926],{"class":257},[45,46752,42412],{"class":51},[45,46754,254],{"class":93},[45,46756,38090],{"class":51},[45,46758,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787],{"class":47,"line":9886},[45,46760,42310],{"class":51},[45,46762,42423],{"class":257},[45,46764,586],{"class":51},[45,46766,42240],{"class":257},[45,46768,42319],{"class":51},[45,46770,418],{"class":257},[45,46772,586],{"class":51},[45,46774,42436],{"class":257},[45,46776,42328],{"class":51},[45,46778,808],{"class":257},[45,46780,586],{"class":51},[45,46782,814],{"class":257},[45,46784,42337],{"class":51},[45,46786,412],{"class":257},[45,46788,38128],{"class":51},[45,46790,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819],{"class":47,"line":9895},[45,46792,42310],{"class":51},[45,46794,38538],{"class":257},[45,46796,586],{"class":51},[45,46798,21131],{"class":257},[45,46800,42319],{"class":51},[45,46802,825],{"class":257},[45,46804,586],{"class":51},[45,46806,31582],{"class":257},[45,46808,42328],{"class":51},[45,46810,1007],{"class":257},[45,46812,586],{"class":51},[45,46814,412],{"class":257},[45,46816,42337],{"class":51},[45,46818,412],{"class":257},[45,46820,38128],{"class":51},[45,46822,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851],{"class":47,"line":9900},[45,46824,42310],{"class":51},[45,46826,38538],{"class":257},[45,46828,586],{"class":51},[45,46830,32151],{"class":257},[45,46832,42319],{"class":51},[45,46834,32151],{"class":257},[45,46836,586],{"class":51},[45,46838,34951],{"class":257},[45,46840,42328],{"class":51},[45,46842,1007],{"class":257},[45,46844,586],{"class":51},[45,46846,412],{"class":257},[45,46848,42337],{"class":51},[45,46850,412],{"class":257},[45,46852,38128],{"class":51},[45,46854,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883],{"class":47,"line":9906},[45,46856,42310],{"class":51},[45,46858,38538],{"class":257},[45,46860,586],{"class":51},[45,46862,825],{"class":257},[45,46864,42319],{"class":51},[45,46866,32151],{"class":257},[45,46868,586],{"class":51},[45,46870,42533],{"class":257},[45,46872,42328],{"class":51},[45,46874,406],{"class":257},[45,46876,586],{"class":51},[45,46878,412],{"class":257},[45,46880,42337],{"class":51},[45,46882,412],{"class":257},[45,46884,38128],{"class":51},[45,46886,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915],{"class":47,"line":9927},[45,46888,42310],{"class":51},[45,46890,42554],{"class":257},[45,46892,586],{"class":51},[45,46894,34951],{"class":257},[45,46896,42319],{"class":51},[45,46898,21131],{"class":257},[45,46900,586],{"class":51},[45,46902,42567],{"class":257},[45,46904,42328],{"class":51},[45,46906,406],{"class":257},[45,46908,586],{"class":51},[45,46910,32151],{"class":257},[45,46912,42337],{"class":51},[45,46914,32151],{"class":257},[45,46916,38128],{"class":51},[45,46918,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943],{"class":47,"line":9933},[45,46920,38178],{"class":51},[45,46922,30955],{"class":5299},[45,46924,254],{"class":93},[45,46926,280],{"class":257},[45,46928,586],{"class":51},[45,46930,31010],{"class":5299},[45,46932,254],{"class":93},[45,46934,286],{"class":257},[45,46936,586],{"class":51},[45,46938,30964],{"class":5299},[45,46940,254],{"class":93},[45,46942,426],{"class":257},[45,46944,215],{"class":51},[45,46946,46947],{"class":47,"line":9947},[45,46948,38207],{"class":51},[45,46950,46951,46953,46955,46957],{"class":47,"line":9953},[45,46952,30926],{"class":257},[45,46954,42620],{"class":51},[45,46956,254],{"class":93},[45,46958,38090],{"class":51},[45,46960,46961,46963,46965,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989],{"class":47,"line":9980},[45,46962,42310],{"class":51},[45,46964,42631],{"class":257},[45,46966,586],{"class":51},[45,46968,34951],{"class":257},[45,46970,42319],{"class":51},[45,46972,21131],{"class":257},[45,46974,586],{"class":51},[45,46976,42567],{"class":257},[45,46978,42328],{"class":51},[45,46980,406],{"class":257},[45,46982,586],{"class":51},[45,46984,32151],{"class":257},[45,46986,42337],{"class":51},[45,46988,32151],{"class":257},[45,46990,38128],{"class":51},[45,46992,46993,46995,46997,46999,47001,47003,47005,47007,47009,47011,47013,47015,47017,47019,47021],{"class":47,"line":9989},[45,46994,42310],{"class":51},[45,46996,42631],{"class":257},[45,46998,586],{"class":51},[45,47000,35021],{"class":257},[45,47002,42319],{"class":51},[45,47004,42240],{"class":257},[45,47006,586],{"class":51},[45,47008,35021],{"class":257},[45,47010,42328],{"class":51},[45,47012,814],{"class":257},[45,47014,586],{"class":51},[45,47016,32151],{"class":257},[45,47018,42337],{"class":51},[45,47020,32151],{"class":257},[45,47022,38128],{"class":51},[45,47024,47025,47027,47029,47031,47033],{"class":47,"line":9995},[45,47026,42694],{"class":51},[45,47028,426],{"class":257},[45,47030,586],{"class":51},[45,47032,426],{"class":257},[45,47034,42703],{"class":51},[45,47036,47037],{"class":47,"line":10003},[45,47038,38871],{"class":51},[45,47040,47041,47043,47045,47047,47049],{"class":47,"line":10008},[45,47042,38876],{"class":51},[45,47044,42714],{"class":257},[45,47046,586],{"class":51},[45,47048,286],{"class":257},[45,47050,215],{"class":51},[45,47052,47053],{"class":47,"line":16687},[45,47054,38207],{"class":51},[45,47056,47057],{"class":47,"line":16693},[45,47058,42729],{"class":267},[45,47060,47061,47063,47065,47067,47069],{"class":47,"line":16716},[45,47062,3486],{"class":93},[45,47064,38949],{"class":51},[45,47066,26126],{"class":93},[45,47068,38954],{"class":257},[45,47070,38957],{"class":51},[45,47072,47073,47075,47077],{"class":47,"line":16722},[45,47074,4725],{"class":93},[45,47076,38969],{"class":257},[45,47078,38972],{"class":51},[45,47080,47081,47083,47085,47087,47089,47091,47093,47095,47097],{"class":47,"line":16745},[45,47082,38982],{"class":51},[45,47084,42756],{"class":5299},[45,47086,254],{"class":93},[45,47088,42761],{"class":313},[45,47090,586],{"class":51},[45,47092,38985],{"class":5299},[45,47094,254],{"class":93},[45,47096,38990],{"class":313},[45,47098,215],{"class":51},[45,47100,47101],{"class":47,"line":16759},[45,47102,42776],{"class":267},[45,47104,47105],{"class":47,"line":16779},[45,47106,42781],{"class":267},[45,47108,47109],{"class":47,"line":16785},[45,47110,42786],{"class":267},[45,47112,47113],{"class":47,"line":16796},[45,47114,42791],{"class":267},[45,47116,47117],{"class":47,"line":16819},[45,47118,42796],{"class":267},[45,47120,47121],{"class":47,"line":16841},[45,47122,42801],{"class":267},[45,47124,47125,47127,47129,47131,47133,47135],{"class":47,"line":16846},[45,47126,39002],{"class":93},[45,47128,39005],{"class":51},[45,47130,39008],{"class":93},[45,47132,39011],{"class":93},[45,47134,39014],{"class":257},[45,47136,3822],{"class":51},[45,47138,47139,47141,47143],{"class":47,"line":16852},[45,47140,39026],{"class":51},[45,47142,400],{"class":257},[45,47144,215],{"class":51},[45,47146,47147,47149,47151],{"class":47,"line":16866},[45,47148,42828],{"class":93},[45,47150,38969],{"class":257},[45,47152,39045],{"class":51},[45,47154,47155,47157,47159,47161,47163],{"class":47,"line":16879},[45,47156,42837],{"class":51},[45,47158,400],{"class":257},[45,47160,586],{"class":51},[45,47162,39067],{"class":257},[45,47164,215],{"class":51},[45,47166,47167,47169,47171,47173,47175,47177],{"class":47,"line":16884},[45,47168,42850],{"class":93},[45,47170,39005],{"class":51},[45,47172,39008],{"class":93},[45,47174,39011],{"class":93},[45,47176,39014],{"class":257},[45,47178,3822],{"class":51},[45,47180,47181,47183,47185],{"class":47,"line":16898},[45,47182,42865],{"class":51},[45,47184,400],{"class":257},[45,47186,215],{"class":51},[45,47188,47189],{"class":47,"line":16903},[45,47190,35246],{"class":267},[45,47192,47193,47195,47197],{"class":47,"line":16909},[45,47194,30882],{"class":93},[45,47196,31174],{"class":2046},[45,47198,31177],{"class":51},[45,47200,47201,47203,47205,47207],{"class":47,"line":16914},[45,47202,31182],{"class":51},[45,47204,254],{"class":93},[45,47206,30904],{"class":257},[45,47208,42892],{"class":51},[45,47210,47211,47213,47215,47217],{"class":47,"line":16928},[45,47212,31182],{"class":51},[45,47214,254],{"class":93},[45,47216,30904],{"class":257},[45,47218,42903],{"class":51},[45,47220,47221,47223,47225,47227],{"class":47,"line":16933},[45,47222,31182],{"class":51},[45,47224,254],{"class":93},[45,47226,30904],{"class":257},[45,47228,42914],{"class":51},[45,47230,47231,47233,47235,47237],{"class":47,"line":16938},[45,47232,31182],{"class":51},[45,47234,254],{"class":93},[45,47236,30904],{"class":257},[45,47238,42925],{"class":51},[45,47240,47241,47243,47245,47247],{"class":47,"line":16952},[45,47242,31182],{"class":51},[45,47244,254],{"class":93},[45,47246,30904],{"class":257},[45,47248,42936],{"class":51},[45,47250,47251,47253],{"class":47,"line":16964},[45,47252,14835],{"class":93},[45,47254,31290],{"class":51},[45,47256,47257],{"class":47,"line":16969},[45,47258,2483],{"emptyLinePlaceholder":133},[45,47260,47261],{"class":47,"line":16982},[45,47262,42951],{"class":267},[45,47264,47265,47267,47269,47271,47273],{"class":47,"line":16987},[45,47266,1614],{"class":93},[45,47268,31301],{"class":257},[45,47270,3032],{"class":93},[45,47272,31306],{"class":313},[45,47274,3822],{"class":51},[45,47276,47277,47279,47281,47283,47285,47287,47289,47291,47293],{"class":47,"line":16992},[45,47278,31318],{"class":51},[45,47280,254],{"class":93},[45,47282,30532],{"class":51},[45,47284,31325],{"class":313},[45,47286,1787],{"class":93},[45,47288,31330],{"class":51},[45,47290,1784],{"class":93},[45,47292,30557],{"class":313},[45,47294,215],{"class":51},[45,47296,47297,47299,47301],{"class":47,"line":16997},[45,47298,31370],{"class":51},[45,47300,254],{"class":93},[45,47302,42992],{"class":51},[45,47304,47305,47307,47309,47311,47313,47315,47317,47319],{"class":47,"line":17010},[45,47306,31380],{"class":257},[45,47308,31383],{"class":51},[45,47310,426],{"class":257},[45,47312,586],{"class":51},[45,47314,31582],{"class":257},[45,47316,586],{"class":51},[45,47318,31582],{"class":257},[45,47320,31396],{"class":51},[22081,47322,47324],{"id":47323},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[10,47326,47327],{},"计算图片的均值与方差，用于训练中归一化处理操作",[35,47329,47331],{"className":37,"code":47330,"language":39,"meta":40,"style":40},"# 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",[42,47332,47333,47338,47351,47356,47362,47367,47377,47381,47386,47396,47400,47405,47415,47432,47436,47441,47453,47465,47496,47505,47515,47525,47529,47534,47549,47553,47558,47563,47568,47578,47583,47608,47612,47617,47632,47636,47649,47653,47658,47663,47668,47673,47678,47688,47698,47721,47729,47737,47745,47749,47761,47765,47770,47774,47778,47785,47805,47829,47836,47850,47855,47860,47864,47878,47882,47894],{"__ignoreMap":40},[45,47334,47335],{"class":47,"line":48},[45,47336,47337],{"class":267},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[45,47339,47340,47342,47345,47348],{"class":47,"line":125},[45,47341,30818],{"class":93},[45,47343,47344],{"class":257}," PIL",[45,47346,47347],{"class":93}," import",[45,47349,47350],{"class":51}," Image\n",[45,47352,47353],{"class":47,"line":1262},[45,47354,47355],{"class":267},"# os 用来处理文件夹和文件路径\n",[45,47357,47358,47360],{"class":47,"line":1277},[45,47359,30473],{"class":93},[45,47361,45386],{"class":51},[45,47363,47364],{"class":47,"line":1283},[45,47365,47366],{"class":267},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[45,47368,47369,47371,47373,47375],{"class":47,"line":1297},[45,47370,30473],{"class":93},[45,47372,31461],{"class":51},[45,47374,31464],{"class":93},[45,47376,31467],{"class":51},[45,47378,47379],{"class":47,"line":1303},[45,47380,2483],{"emptyLinePlaceholder":133},[45,47382,47383],{"class":47,"line":1394},[45,47384,47385],{"class":267},"# 文件夹路径，包含所有图片文件\n",[45,47387,47388,47391,47393],{"class":47,"line":1400},[45,47389,47390],{"class":51},"folder_path ",[45,47392,254],{"class":93},[45,47394,47395],{"class":313}," 'data_cat_dog'\n",[45,47397,47398],{"class":47,"line":1412},[45,47399,2483],{"emptyLinePlaceholder":133},[45,47401,47402],{"class":47,"line":1695},[45,47403,47404],{"class":267},"# 初始化累积变量\n",[45,47406,47407,47410,47412],{"class":47,"line":1700},[45,47408,47409],{"class":51},"total_pixels ",[45,47411,254],{"class":93},[45,47413,47414],{"class":257}," 0\n",[45,47416,47417,47420,47422,47425,47427,47429],{"class":47,"line":1706},[45,47418,47419],{"class":51},"sum_normalized_pixel_values ",[45,47421,254],{"class":93},[45,47423,47424],{"class":51}," np.zeros(",[45,47426,280],{"class":257},[45,47428,45889],{"class":51},[45,47430,47431],{"class":267},"# 如果是RGB图像，需要三个通道的均值和方差\n",[45,47433,47434],{"class":47,"line":1711},[45,47435,2483],{"emptyLinePlaceholder":133},[45,47437,47438],{"class":47,"line":1725},[45,47439,47440],{"class":267},"# 遍历文件夹中的图片文件\n",[45,47442,47443,47445,47448,47450],{"class":47,"line":1730},[45,47444,3108],{"class":93},[45,47446,47447],{"class":51}," root, dirs, files ",[45,47449,26126],{"class":93},[45,47451,47452],{"class":51}," os.walk(folder_path):\n",[45,47454,47455,47457,47460,47462],{"class":47,"line":1736},[45,47456,3284],{"class":93},[45,47458,47459],{"class":51}," filename ",[45,47461,26126],{"class":93},[45,47463,47464],{"class":51}," files:\n",[45,47466,47467,47469,47472,47475,47477,47480,47482,47485,47487,47490,47493],{"class":47,"line":1757},[45,47468,2580],{"class":93},[45,47470,47471],{"class":51}," filename.endswith((",[45,47473,47474],{"class":313},"'.jpg'",[45,47476,12518],{"class":51},[45,47478,47479],{"class":313},"'.jpeg'",[45,47481,12518],{"class":51},[45,47483,47484],{"class":313},"'.png'",[45,47486,12518],{"class":51},[45,47488,47489],{"class":313},"'.bmp'",[45,47491,47492],{"class":51},")):  ",[45,47494,47495],{"class":267},"# 可根据实际情况添加其他格式\n",[45,47497,47498,47500,47502],{"class":47,"line":1762},[45,47499,45754],{"class":51},[45,47501,254],{"class":93},[45,47503,47504],{"class":51}," os.path.join(root, filename)\n",[45,47506,47507,47510,47512],{"class":47,"line":1776},[45,47508,47509],{"class":51},"            image ",[45,47511,254],{"class":93},[45,47513,47514],{"class":51}," Image.open(image_path)\n",[45,47516,47517,47520,47522],{"class":47,"line":1781},[45,47518,47519],{"class":51},"            image_array ",[45,47521,254],{"class":93},[45,47523,47524],{"class":51}," np.array(image)\n",[45,47526,47527],{"class":47,"line":1810},[45,47528,2483],{"emptyLinePlaceholder":133},[45,47530,47531],{"class":47,"line":1815},[45,47532,47533],{"class":267},"            # 归一化像素值到0-1之间\n",[45,47535,47536,47539,47541,47544,47546],{"class":47,"line":1832},[45,47537,47538],{"class":51},"            normalized_image_array ",[45,47540,254],{"class":93},[45,47542,47543],{"class":51}," image_array ",[45,47545,791],{"class":93},[45,47547,47548],{"class":257}," 255.0\n",[45,47550,47551],{"class":47,"line":1837},[45,47552,2483],{"emptyLinePlaceholder":133},[45,47554,47555],{"class":47,"line":1842},[45,47556,47557],{"class":267},"            # print(image_path)\n",[45,47559,47560],{"class":47,"line":1847},[45,47561,47562],{"class":267},"            # print(normalized_image_array.shape)\n",[45,47564,47565],{"class":47,"line":1861},[45,47566,47567],{"class":267},"            # 累积归一化后的像素值和像素数量\n",[45,47569,47570,47573,47575],{"class":47,"line":1866},[45,47571,47572],{"class":51},"            total_pixels ",[45,47574,9560],{"class":93},[45,47576,47577],{"class":51}," normalized_image_array.size\n",[45,47579,47580],{"class":47,"line":2660},[45,47581,47582],{"class":267},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[45,47584,47585,47588,47590,47593,47596,47598,47600,47602,47604,47606],{"class":47,"line":2674},[45,47586,47587],{"class":51},"            sum_normalized_pixel_values ",[45,47589,9560],{"class":93},[45,47591,47592],{"class":51}," np.sum(normalized_image_array, ",[45,47594,47595],{"class":5299},"axis",[45,47597,254],{"class":93},[45,47599,209],{"class":51},[45,47601,400],{"class":257},[45,47603,12518],{"class":51},[45,47605,426],{"class":257},[45,47607,30578],{"class":51},[45,47609,47610],{"class":47,"line":2682},[45,47611,2483],{"emptyLinePlaceholder":133},[45,47613,47614],{"class":47,"line":2687},[45,47615,47616],{"class":267},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[45,47618,47619,47622,47624,47627,47629],{"class":47,"line":2693},[45,47620,47621],{"class":51},"mean ",[45,47623,254],{"class":93},[45,47625,47626],{"class":51}," sum_normalized_pixel_values ",[45,47628,791],{"class":93},[45,47630,47631],{"class":51}," total_pixels\n",[45,47633,47634],{"class":47,"line":2699},[45,47635,2483],{"emptyLinePlaceholder":133},[45,47637,47638,47641,47643,47645,47647],{"class":47,"line":2704},[45,47639,47640],{"class":51},"sum_squared_diff ",[45,47642,254],{"class":93},[45,47644,47424],{"class":51},[45,47646,280],{"class":257},[45,47648,215],{"class":51},[45,47650,47651],{"class":47,"line":8031},[45,47652,2483],{"emptyLinePlaceholder":133},[45,47654,47655],{"class":47,"line":8055},[45,47656,47657],{"class":267},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[45,47659,47660],{"class":47,"line":8060},[45,47661,47662],{"class":267},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[45,47664,47665],{"class":47,"line":8066},[45,47666,47667],{"class":267},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[45,47669,47670],{"class":47,"line":8093},[45,47671,47672],{"class":267},"# Image.open(image_path)：打开图片\n",[45,47674,47675],{"class":47,"line":8098},[45,47676,47677],{"class":267},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[45,47679,47680,47682,47684,47686],{"class":47,"line":8104},[45,47681,3108],{"class":93},[45,47683,47447],{"class":51},[45,47685,26126],{"class":93},[45,47687,47452],{"class":51},[45,47689,47690,47692,47694,47696],{"class":47,"line":8116},[45,47691,3284],{"class":93},[45,47693,47459],{"class":51},[45,47695,26126],{"class":93},[45,47697,47464],{"class":51},[45,47699,47700,47702,47704,47706,47708,47710,47712,47714,47716,47718],{"class":47,"line":8128},[45,47701,2580],{"class":93},[45,47703,47471],{"class":51},[45,47705,47474],{"class":313},[45,47707,12518],{"class":51},[45,47709,47479],{"class":313},[45,47711,12518],{"class":51},[45,47713,47484],{"class":313},[45,47715,12518],{"class":51},[45,47717,47489],{"class":313},[45,47719,47720],{"class":51},")):\n",[45,47722,47723,47725,47727],{"class":47,"line":8140},[45,47724,45754],{"class":51},[45,47726,254],{"class":93},[45,47728,47504],{"class":51},[45,47730,47731,47733,47735],{"class":47,"line":9799},[45,47732,47509],{"class":51},[45,47734,254],{"class":93},[45,47736,47514],{"class":51},[45,47738,47739,47741,47743],{"class":47,"line":9824},[45,47740,47519],{"class":51},[45,47742,254],{"class":93},[45,47744,47524],{"class":51},[45,47746,47747],{"class":47,"line":9847},[45,47748,47533],{"class":267},[45,47750,47751,47753,47755,47757,47759],{"class":47,"line":9871},[45,47752,47538],{"class":51},[45,47754,254],{"class":93},[45,47756,47543],{"class":51},[45,47758,791],{"class":93},[45,47760,47548],{"class":257},[45,47762,47763],{"class":47,"line":9876},[45,47764,47562],{"class":267},[45,47766,47767],{"class":47,"line":9881},[45,47768,47769],{"class":267},"            # print(mean.shape)\n",[45,47771,47772],{"class":47,"line":9886},[45,47773,47557],{"class":267},[45,47775,47776],{"class":47,"line":9895},[45,47777,2483],{"emptyLinePlaceholder":133},[45,47779,47780,47783],{"class":47,"line":9900},[45,47781,47782],{"class":93},"            try",[45,47784,3822],{"class":51},[45,47786,47787,47790,47792,47795,47797,47800,47802],{"class":47,"line":9906},[45,47788,47789],{"class":51},"                diff ",[45,47791,254],{"class":93},[45,47793,47794],{"class":51}," (normalized_image_array ",[45,47796,94],{"class":93},[45,47798,47799],{"class":51}," mean) ",[45,47801,10744],{"class":93},[45,47803,47804],{"class":257}," 2\n",[45,47806,47807,47810,47812,47815,47817,47819,47821,47823,47825,47827],{"class":47,"line":9927},[45,47808,47809],{"class":51},"                sum_squared_diff ",[45,47811,9560],{"class":93},[45,47813,47814],{"class":51}," np.sum(diff, ",[45,47816,47595],{"class":5299},[45,47818,254],{"class":93},[45,47820,209],{"class":51},[45,47822,400],{"class":257},[45,47824,12518],{"class":51},[45,47826,426],{"class":257},[45,47828,30578],{"class":51},[45,47830,47831,47834],{"class":47,"line":9933},[45,47832,47833],{"class":93},"            except",[45,47835,3822],{"class":51},[45,47837,47838,47841,47843,47845,47848],{"class":47,"line":9947},[45,47839,47840],{"class":257},"                print",[45,47842,209],{"class":51},[45,47844,261],{"class":93},[45,47846,47847],{"class":313},"\"捕获到自定义异常\"",[45,47849,215],{"class":51},[45,47851,47852],{"class":47,"line":9953},[45,47853,47854],{"class":267},"            # diff = (normalized_image_array - mean) ** 2\n",[45,47856,47857],{"class":47,"line":9980},[45,47858,47859],{"class":267},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[45,47861,47862],{"class":47,"line":9989},[45,47863,2483],{"emptyLinePlaceholder":133},[45,47865,47866,47869,47871,47874,47876],{"class":47,"line":9995},[45,47867,47868],{"class":51},"variance ",[45,47870,254],{"class":93},[45,47872,47873],{"class":51}," sum_squared_diff ",[45,47875,791],{"class":93},[45,47877,47631],{"class":51},[45,47879,47880],{"class":47,"line":10003},[45,47881,2483],{"emptyLinePlaceholder":133},[45,47883,47884,47886,47888,47891],{"class":47,"line":10008},[45,47885,30496],{"class":257},[45,47887,209],{"class":51},[45,47889,47890],{"class":313},"\"Mean:\"",[45,47892,47893],{"class":51},", mean)\n",[45,47895,47896,47898,47900,47903],{"class":47,"line":16687},[45,47897,30496],{"class":257},[45,47899,209],{"class":51},[45,47901,47902],{"class":313},"\"Variance:\"",[45,47904,47905],{"class":51},", variance)\n",[35,47907,47909],{"className":37,"code":47908,"language":39,"meta":40,"style":40},"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",[42,47910,47911,47917,47923,47933,47939,47949,47963,47973,47983,47993,47997,48007,48017,48021,48025,48033,48038,48043,48062,48066,48071,48076,48081,48086,48127,48132,48142,48147,48160,48165,48170,48175,48180,48185,48189,48194,48199,48221,48225,48257,48271,48281,48291,48295,48305,48319,48329,48339,48349,48355,48359,48363,48367,48371,48375,48383,48403,48407,48411,48415,48419,48435,48439,48443,48451,48455,48459,48467,48471,48475,48479,48487,48491,48495,48499,48507,48511,48519,48523,48531,48535,48543,48547,48555,48559,48563,48571,48575,48579,48591,48615,48629,48633,48637,48641,48649,48653,48661,48665,48673,48677,48685,48689,48697,48701,48709,48713,48725,48729,48737,48741,48749,48753,48757,48761,48765,48773,48777,48793,48797,48805,48809,48813,48817,48821,48825,48829,48833,48849,48853,48865,48869,48881,48885,48897,48901,48909,48913,48921,48925,48929,48933,48939,48943,48951,48955,48971,48975,48983,48987,49003,49015,49019,49031,49035,49039,49047,49051,49055,49063,49067,49075,49079,49087,49091,49095,49137,49179,49183,49187,49203,49207,49223,49227,49231,49239,49243,49247,49259,49297,49301,49305,49313,49317,49331,49341,49347,49353,49359,49365,49369,49373,49379,49383,49387,49395,49399,49417,49421,49425,49429,49445,49449,49453,49457,49461,49465,49485,49505,49509,49513,49517,49525,49533,49537,49553,49573,49593,49597,49602,49611,49620,49625,49630,49635,49648,49653,49662,49671,49688],{"__ignoreMap":40},[45,47912,47913,47915],{"class":47,"line":48},[45,47914,30473],{"class":93},[45,47916,31903],{"class":51},[45,47918,47919,47921],{"class":47,"line":125},[45,47920,30473],{"class":93},[45,47922,31910],{"class":51},[45,47924,47925,47927,47929,47931],{"class":47,"line":1262},[45,47926,30473],{"class":93},[45,47928,31921],{"class":51},[45,47930,31464],{"class":93},[45,47932,31926],{"class":51},[45,47934,47935,47937],{"class":47,"line":1277},[45,47936,30473],{"class":93},[45,47938,30476],{"class":51},[45,47940,47941,47943,47945,47947],{"class":47,"line":1283},[45,47942,30818],{"class":93},[45,47944,31496],{"class":51},[45,47946,30473],{"class":93},[45,47948,31943],{"class":51},[45,47950,47951,47953,47955,47957,47960],{"class":47,"line":1297},[45,47952,30818],{"class":93},[45,47954,31449],{"class":51},[45,47956,30473],{"class":93},[45,47958,47959],{"class":51}," ImageFolder ",[45,47961,47962],{"class":267},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[45,47964,47965,47967,47969,47971],{"class":47,"line":1303},[45,47966,30818],{"class":93},[45,47968,31479],{"class":51},[45,47970,30473],{"class":93},[45,47972,31484],{"class":51},[45,47974,47975,47977,47979,47981],{"class":47,"line":1394},[45,47976,30473],{"class":93},[45,47978,31496],{"class":51},[45,47980,31464],{"class":93},[45,47982,31501],{"class":51},[45,47984,47985,47987,47989,47991],{"class":47,"line":1400},[45,47986,30473],{"class":93},[45,47988,31513],{"class":51},[45,47990,31464],{"class":93},[45,47992,31518],{"class":51},[45,47994,47995],{"class":47,"line":1412},[45,47996,31988],{"class":267},[45,47998,47999,48001,48003,48005],{"class":47,"line":1695},[45,48000,30818],{"class":93},[45,48002,31995],{"class":51},[45,48004,30473],{"class":93},[45,48006,43112],{"class":51},[45,48008,48009,48011,48013,48015],{"class":47,"line":1700},[45,48010,30818],{"class":93},[45,48012,30821],{"class":51},[45,48014,30473],{"class":93},[45,48016,30826],{"class":51},[45,48018,48019],{"class":47,"line":1706},[45,48020,2483],{"emptyLinePlaceholder":133},[45,48022,48023],{"class":47,"line":1711},[45,48024,32023],{"class":267},[45,48026,48027,48029,48031],{"class":47,"line":1725},[45,48028,32028],{"class":93},[45,48030,32031],{"class":2046},[45,48032,32034],{"class":51},[45,48034,48035],{"class":47,"line":1730},[45,48036,48037],{"class":267},"    # 导入自己的数据集，并进行数据处理\n",[45,48039,48040],{"class":47,"line":1736},[45,48041,48042],{"class":267},"    # 定义数据集的路径\n",[45,48044,48045,48048,48050,48052,48054,48056,48060],{"class":47,"line":1757},[45,48046,48047],{"class":257},"    ROOT_PATH",[45,48049,254],{"class":93},[45,48051,877],{"class":93},[45,48053,459],{"class":313},[45,48055,765],{"class":257},[45,48057,48059],{"class":48058},"sA_wV","\u002Fdata\u002Ftrain",[45,48061,25216],{"class":313},[45,48063,48064],{"class":47,"line":1762},[45,48065,2483],{"emptyLinePlaceholder":133},[45,48067,48068],{"class":47,"line":1776},[45,48069,48070],{"class":267},"    # 定义归一化方法\n",[45,48072,48073],{"class":47,"line":1781},[45,48074,48075],{"class":267},"    # 这里需要先计算一下数据集的均值和方差\n",[45,48077,48078],{"class":47,"line":1810},[45,48079,48080],{"class":267},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[45,48082,48083],{"class":47,"line":1815},[45,48084,48085],{"class":267},"    # 第一个参数是均值，第二个参数是方差\n",[45,48087,48088,48091,48093,48096,48099,48101,48104,48106,48109,48112,48115,48117,48120,48122,48125],{"class":47,"line":1832},[45,48089,48090],{"class":51},"    normalize",[45,48092,254],{"class":93},[45,48094,48095],{"class":51},"transforms.Normalize([",[45,48097,48098],{"class":257},"0.162",[45,48100,586],{"class":51},[45,48102,48103],{"class":257},"0.151",[45,48105,586],{"class":51},[45,48107,48108],{"class":257},"0.138",[45,48110,48111],{"class":51},"],[",[45,48113,48114],{"class":257},"0.058",[45,48116,586],{"class":51},[45,48118,48119],{"class":257},"0.052",[45,48121,586],{"class":51},[45,48123,48124],{"class":257},"0.048",[45,48126,4740],{"class":51},[45,48128,48129],{"class":47,"line":1837},[45,48130,48131],{"class":267},"    # 定义数据集处理方法变量\n",[45,48133,48134,48137,48139],{"class":47,"line":1842},[45,48135,48136],{"class":51},"    train_transform",[45,48138,254],{"class":93},[45,48140,48141],{"class":51},"transforms.Compose([\n",[45,48143,48144],{"class":47,"line":1847},[45,48145,48146],{"class":267},"        # 调整图像大小为224*224\n",[45,48148,48149,48152,48154,48156,48158],{"class":47,"line":1861},[45,48150,48151],{"class":51},"        transforms.Resize((",[45,48153,31582],{"class":257},[45,48155,586],{"class":51},[45,48157,31582],{"class":257},[45,48159,42703],{"class":51},[45,48161,48162],{"class":47,"line":1866},[45,48163,48164],{"class":267},"        # 将图像转换为张量\n",[45,48166,48167],{"class":47,"line":2660},[45,48168,48169],{"class":51},"        transforms.ToTensor(),\n",[45,48171,48172],{"class":47,"line":2674},[45,48173,48174],{"class":51},"        normalize])\n",[45,48176,48177],{"class":47,"line":2682},[45,48178,48179],{"class":267},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[45,48181,48182],{"class":47,"line":2687},[45,48183,48184],{"class":267},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[45,48186,48187],{"class":47,"line":2693},[45,48188,2483],{"emptyLinePlaceholder":133},[45,48190,48191],{"class":47,"line":2699},[45,48192,48193],{"class":267},"    # 加载数据集\n",[45,48195,48196],{"class":47,"line":2704},[45,48197,48198],{"class":267},"    # 传入数据集路径与处理方法\n",[45,48200,48201,48203,48205,48208,48211,48213,48216,48218],{"class":47,"line":8031},[45,48202,32039],{"class":51},[45,48204,254],{"class":93},[45,48206,48207],{"class":51},"ImageFolder(",[45,48209,48210],{"class":257},"ROOT_PATH",[45,48212,586],{"class":51},[45,48214,48215],{"class":5299},"transform",[45,48217,254],{"class":93},[45,48219,48220],{"class":51},"train_transform)\n",[45,48222,48223],{"class":47,"line":8055},[45,48224,2483],{"emptyLinePlaceholder":133},[45,48226,48227,48229,48231,48233,48235,48237,48239,48241,48243,48245,48247,48249,48251,48253,48255],{"class":47,"line":8060},[45,48228,32091],{"class":51},[45,48230,254],{"class":93},[45,48232,32096],{"class":51},[45,48234,32099],{"class":257},[45,48236,209],{"class":51},[45,48238,32104],{"class":257},[45,48240,663],{"class":93},[45,48242,7441],{"class":257},[45,48244,32111],{"class":51},[45,48246,32099],{"class":257},[45,48248,209],{"class":51},[45,48250,32118],{"class":257},[45,48252,663],{"class":93},[45,48254,7441],{"class":257},[45,48256,32125],{"class":51},[45,48258,48259,48261,48263,48265,48267,48269],{"class":47,"line":8066},[45,48260,32130],{"class":51},[45,48262,254],{"class":93},[45,48264,32135],{"class":51},[45,48266,31618],{"class":5299},[45,48268,254],{"class":93},[45,48270,31623],{"class":51},[45,48272,48273,48275,48277,48279],{"class":47,"line":8093},[45,48274,32146],{"class":5299},[45,48276,254],{"class":93},[45,48278,406],{"class":257},[45,48280,31547],{"class":51},[45,48282,48283,48285,48287,48289],{"class":47,"line":8098},[45,48284,32158],{"class":5299},[45,48286,254],{"class":93},[45,48288,31557],{"class":257},[45,48290,31547],{"class":51},[45,48292,48293],{"class":47,"line":8104},[45,48294,32169],{"class":267},[45,48296,48297,48299,48301,48303],{"class":47,"line":8116},[45,48298,32174],{"class":5299},[45,48300,254],{"class":93},[45,48302,603],{"class":257},[45,48304,215],{"class":51},[45,48306,48307,48309,48311,48313,48315,48317],{"class":47,"line":8128},[45,48308,32185],{"class":51},[45,48310,254],{"class":93},[45,48312,31615],{"class":51},[45,48314,31618],{"class":5299},[45,48316,254],{"class":93},[45,48318,32196],{"class":51},[45,48320,48321,48323,48325,48327],{"class":47,"line":8140},[45,48322,32201],{"class":5299},[45,48324,254],{"class":93},[45,48326,406],{"class":257},[45,48328,31547],{"class":51},[45,48330,48331,48333,48335,48337],{"class":47,"line":9799},[45,48332,32212],{"class":5299},[45,48334,254],{"class":93},[45,48336,31557],{"class":257},[45,48338,31547],{"class":51},[45,48340,48341,48343,48345,48347],{"class":47,"line":9824},[45,48342,32223],{"class":5299},[45,48344,254],{"class":93},[45,48346,603],{"class":257},[45,48348,215],{"class":51},[45,48350,48351,48353],{"class":47,"line":9847},[45,48352,4173],{"class":93},[45,48354,32236],{"class":51},[45,48356,48357],{"class":47,"line":9871},[45,48358,2483],{"emptyLinePlaceholder":133},[45,48360,48361],{"class":47,"line":9876},[45,48362,32245],{"class":267},[45,48364,48365],{"class":47,"line":9881},[45,48366,32250],{"class":267},[45,48368,48369],{"class":47,"line":9886},[45,48370,2483],{"emptyLinePlaceholder":133},[45,48372,48373],{"class":47,"line":9895},[45,48374,32259],{"class":267},[45,48376,48377,48379,48381],{"class":47,"line":9900},[45,48378,32028],{"class":93},[45,48380,32266],{"class":2046},[45,48382,32269],{"class":51},[45,48384,48385,48387,48389,48391,48393,48395,48397,48399,48401],{"class":47,"line":9906},[45,48386,31318],{"class":51},[45,48388,254],{"class":93},[45,48390,30532],{"class":51},[45,48392,31325],{"class":313},[45,48394,1787],{"class":93},[45,48396,31330],{"class":51},[45,48398,1784],{"class":93},[45,48400,32288],{"class":313},[45,48402,215],{"class":51},[45,48404,48405],{"class":47,"line":9927},[45,48406,2483],{"emptyLinePlaceholder":133},[45,48408,48409],{"class":47,"line":9933},[45,48410,32303],{"class":267},[45,48412,48413],{"class":47,"line":9947},[45,48414,32308],{"class":267},[45,48416,48417],{"class":47,"line":9953},[45,48418,32313],{"class":267},[45,48420,48421,48423,48425,48427,48429,48431,48433],{"class":47,"line":9980},[45,48422,32318],{"class":51},[45,48424,254],{"class":93},[45,48426,32323],{"class":51},[45,48428,32326],{"class":5299},[45,48430,254],{"class":93},[45,48432,32331],{"class":257},[45,48434,215],{"class":51},[45,48436,48437],{"class":47,"line":9989},[45,48438,2483],{"emptyLinePlaceholder":133},[45,48440,48441],{"class":47,"line":9995},[45,48442,32342],{"class":267},[45,48444,48445,48447,48449],{"class":47,"line":10003},[45,48446,32347],{"class":51},[45,48448,254],{"class":93},[45,48450,32352],{"class":51},[45,48452,48453],{"class":47,"line":10008},[45,48454,2483],{"emptyLinePlaceholder":133},[45,48456,48457],{"class":47,"line":16687},[45,48458,32361],{"class":267},[45,48460,48461,48463,48465],{"class":47,"line":16693},[45,48462,31370],{"class":51},[45,48464,254],{"class":93},[45,48466,32370],{"class":51},[45,48468,48469],{"class":47,"line":16716},[45,48470,32375],{"class":267},[45,48472,48473],{"class":47,"line":16722},[45,48474,32380],{"class":267},[45,48476,48477],{"class":47,"line":16745},[45,48478,32385],{"class":267},[45,48480,48481,48483,48485],{"class":47,"line":16759},[45,48482,32390],{"class":51},[45,48484,254],{"class":93},[45,48486,32395],{"class":51},[45,48488,48489],{"class":47,"line":16779},[45,48490,2483],{"emptyLinePlaceholder":133},[45,48492,48493],{"class":47,"line":16785},[45,48494,32408],{"class":267},[45,48496,48497],{"class":47,"line":16796},[45,48498,32413],{"class":267},[45,48500,48501,48503,48505],{"class":47,"line":16819},[45,48502,32418],{"class":51},[45,48504,254],{"class":93},[45,48506,32423],{"class":257},[45,48508,48509],{"class":47,"line":16841},[45,48510,32428],{"class":267},[45,48512,48513,48515,48517],{"class":47,"line":16846},[45,48514,32433],{"class":51},[45,48516,254],{"class":93},[45,48518,32438],{"class":51},[45,48520,48521],{"class":47,"line":16852},[45,48522,32443],{"class":267},[45,48524,48525,48527,48529],{"class":47,"line":16866},[45,48526,32448],{"class":51},[45,48528,254],{"class":93},[45,48530,32438],{"class":51},[45,48532,48533],{"class":47,"line":16879},[45,48534,32457],{"class":267},[45,48536,48537,48539,48541],{"class":47,"line":16884},[45,48538,32462],{"class":51},[45,48540,254],{"class":93},[45,48542,32438],{"class":51},[45,48544,48545],{"class":47,"line":16898},[45,48546,32471],{"class":267},[45,48548,48549,48551,48553],{"class":47,"line":16903},[45,48550,32476],{"class":51},[45,48552,254],{"class":93},[45,48554,32438],{"class":51},[45,48556,48557],{"class":47,"line":16909},[45,48558,2483],{"emptyLinePlaceholder":133},[45,48560,48561],{"class":47,"line":16914},[45,48562,32489],{"class":267},[45,48564,48565,48567,48569],{"class":47,"line":16928},[45,48566,32494],{"class":51},[45,48568,254],{"class":93},[45,48570,32499],{"class":51},[45,48572,48573],{"class":47,"line":16933},[45,48574,2483],{"emptyLinePlaceholder":133},[45,48576,48577],{"class":47,"line":16938},[45,48578,32512],{"class":267},[45,48580,48581,48583,48585,48587,48589],{"class":47,"line":16952},[45,48582,3284],{"class":93},[45,48584,32519],{"class":51},[45,48586,26126],{"class":93},[45,48588,32524],{"class":257},[45,48590,32527],{"class":51},[45,48592,48593,48595,48597,48599,48601,48603,48605,48607,48609,48611,48613],{"class":47,"line":16964},[45,48594,32532],{"class":257},[45,48596,209],{"class":51},[45,48598,32537],{"class":313},[45,48600,32540],{"class":257},[45,48602,791],{"class":313},[45,48604,32540],{"class":257},[45,48606,459],{"class":313},[45,48608,32549],{"class":51},[45,48610,94],{"class":93},[45,48612,426],{"class":257},[45,48614,30578],{"class":51},[45,48616,48617,48619,48621,48623,48625,48627],{"class":47,"line":16969},[45,48618,32532],{"class":257},[45,48620,209],{"class":51},[45,48622,32564],{"class":313},[45,48624,663],{"class":93},[45,48626,654],{"class":257},[45,48628,215],{"class":51},[45,48630,48631],{"class":47,"line":16982},[45,48632,2483],{"emptyLinePlaceholder":133},[45,48634,48635],{"class":47,"line":16987},[45,48636,32579],{"class":267},[45,48638,48639],{"class":47,"line":16992},[45,48640,32584],{"class":267},[45,48642,48643,48645,48647],{"class":47,"line":16997},[45,48644,32589],{"class":51},[45,48646,254],{"class":93},[45,48648,32423],{"class":257},[45,48650,48651],{"class":47,"line":17010},[45,48652,32598],{"class":267},[45,48654,48655,48657,48659],{"class":47,"line":17015},[45,48656,32603],{"class":51},[45,48658,254],{"class":93},[45,48660,3168],{"class":257},[45,48662,48663],{"class":47,"line":32714},[45,48664,32612],{"class":267},[45,48666,48667,48669,48671],{"class":47,"line":32720},[45,48668,32617],{"class":51},[45,48670,254],{"class":93},[45,48672,32423],{"class":257},[45,48674,48675],{"class":47,"line":32726},[45,48676,32626],{"class":267},[45,48678,48679,48681,48683],{"class":47,"line":32732},[45,48680,32631],{"class":51},[45,48682,254],{"class":93},[45,48684,3168],{"class":257},[45,48686,48687],{"class":47,"line":32738},[45,48688,32640],{"class":267},[45,48690,48691,48693,48695],{"class":47,"line":32749},[45,48692,32645],{"class":51},[45,48694,254],{"class":93},[45,48696,3168],{"class":257},[45,48698,48699],{"class":47,"line":32755},[45,48700,32654],{"class":267},[45,48702,48703,48705,48707],{"class":47,"line":32775},[45,48704,32659],{"class":51},[45,48706,254],{"class":93},[45,48708,3168],{"class":257},[45,48710,48711],{"class":47,"line":32781},[45,48712,32668],{"class":267},[45,48714,48715,48717,48719,48721,48723],{"class":47,"line":32792},[45,48716,3486],{"class":93},[45,48718,31682],{"class":51},[45,48720,26126],{"class":93},[45,48722,31687],{"class":257},[45,48724,32681],{"class":51},[45,48726,48727],{"class":47,"line":32798},[45,48728,32686],{"class":267},[45,48730,48731,48733,48735],{"class":47,"line":32804},[45,48732,32691],{"class":51},[45,48734,254],{"class":93},[45,48736,32696],{"class":51},[45,48738,48739],{"class":47,"line":32810},[45,48740,32701],{"class":267},[45,48742,48743,48745,48747],{"class":47,"line":32816},[45,48744,32706],{"class":51},[45,48746,254],{"class":93},[45,48748,32711],{"class":51},[45,48750,48751],{"class":47,"line":32822},[45,48752,32717],{"class":267},[45,48754,48755],{"class":47,"line":32828},[45,48756,32723],{"class":51},[45,48758,48759],{"class":47,"line":32834},[45,48760,32729],{"class":267},[45,48762,48763],{"class":47,"line":32854},[45,48764,32735],{"class":267},[45,48766,48767,48769,48771],{"class":47,"line":32860},[45,48768,32741],{"class":51},[45,48770,254],{"class":93},[45,48772,32746],{"class":51},[45,48774,48775],{"class":47,"line":32876},[45,48776,32752],{"class":267},[45,48778,48779,48781,48783,48785,48787,48789,48791],{"class":47,"line":32882},[45,48780,32758],{"class":51},[45,48782,254],{"class":93},[45,48784,32763],{"class":51},[45,48786,32766],{"class":5299},[45,48788,254],{"class":93},[45,48790,426],{"class":257},[45,48792,215],{"class":51},[45,48794,48795],{"class":47,"line":32896},[45,48796,32778],{"class":267},[45,48798,48799,48801,48803],{"class":47,"line":32902},[45,48800,32784],{"class":51},[45,48802,254],{"class":93},[45,48804,32789],{"class":51},[45,48806,48807],{"class":47,"line":32917},[45,48808,32795],{"class":267},[45,48810,48811],{"class":47,"line":32923},[45,48812,32801],{"class":51},[45,48814,48815],{"class":47,"line":32932},[45,48816,32807],{"class":267},[45,48818,48819],{"class":47,"line":32938},[45,48820,32813],{"class":51},[45,48822,48823],{"class":47,"line":32947},[45,48824,32819],{"class":267},[45,48826,48827],{"class":47,"line":32953},[45,48828,32825],{"class":51},[45,48830,48831],{"class":47,"line":32959},[45,48832,32831],{"class":267},[45,48834,48835,48837,48839,48841,48843,48845,48847],{"class":47,"line":32968},[45,48836,32837],{"class":51},[45,48838,9560],{"class":93},[45,48840,32842],{"class":51},[45,48842,663],{"class":93},[45,48844,32847],{"class":51},[45,48846,400],{"class":257},[45,48848,215],{"class":51},[45,48850,48851],{"class":47,"line":32974},[45,48852,32857],{"class":267},[45,48854,48855,48857,48859,48861,48863],{"class":47,"line":32985},[45,48856,32863],{"class":51},[45,48858,9560],{"class":93},[45,48860,32868],{"class":51},[45,48862,3032],{"class":93},[45,48864,32873],{"class":51},[45,48866,48867],{"class":47,"line":32991},[45,48868,32879],{"class":267},[45,48870,48871,48873,48875,48877,48879],{"class":47,"line":33010},[45,48872,32885],{"class":51},[45,48874,9560],{"class":93},[45,48876,32847],{"class":51},[45,48878,400],{"class":257},[45,48880,215],{"class":51},[45,48882,48883],{"class":47,"line":33016},[45,48884,32899],{"class":267},[45,48886,48887,48889,48891,48893,48895],{"class":47,"line":33027},[45,48888,3486],{"class":93},[45,48890,32907],{"class":51},[45,48892,26126],{"class":93},[45,48894,31687],{"class":257},[45,48896,32914],{"class":51},[45,48898,48899],{"class":47,"line":33033},[45,48900,32920],{"class":267},[45,48902,48903,48905,48907],{"class":47,"line":33053},[45,48904,32691],{"class":51},[45,48906,254],{"class":93},[45,48908,32696],{"class":51},[45,48910,48911],{"class":47,"line":33069},[45,48912,32935],{"class":267},[45,48914,48915,48917,48919],{"class":47,"line":33075},[45,48916,32706],{"class":51},[45,48918,254],{"class":93},[45,48920,32711],{"class":51},[45,48922,48923],{"class":47,"line":33089},[45,48924,32950],{"class":267},[45,48926,48927],{"class":47,"line":33095},[45,48928,32956],{"class":51},[45,48930,48931],{"class":47,"line":33101},[45,48932,36437],{"class":267},[45,48934,48935,48937],{"class":47,"line":33112},[45,48936,32962],{"class":93},[45,48938,32965],{"class":51},[45,48940,48941],{"class":47,"line":33118},[45,48942,32971],{"class":267},[45,48944,48945,48947,48949],{"class":47,"line":33124},[45,48946,36452],{"class":51},[45,48948,254],{"class":93},[45,48950,32746],{"class":51},[45,48952,48953],{"class":47,"line":33134},[45,48954,32988],{"class":267},[45,48956,48957,48959,48961,48963,48965,48967,48969],{"class":47,"line":33140},[45,48958,36465],{"class":51},[45,48960,254],{"class":93},[45,48962,32763],{"class":51},[45,48964,32766],{"class":5299},[45,48966,254],{"class":93},[45,48968,426],{"class":257},[45,48970,215],{"class":51},[45,48972,48973],{"class":47,"line":33151},[45,48974,33013],{"class":267},[45,48976,48977,48979,48981],{"class":47,"line":33157},[45,48978,36486],{"class":51},[45,48980,254],{"class":93},[45,48982,32789],{"class":51},[45,48984,48985],{"class":47,"line":33167},[45,48986,33030],{"class":267},[45,48988,48989,48991,48993,48995,48997,48999,49001],{"class":47,"line":33172},[45,48990,36499],{"class":51},[45,48992,9560],{"class":93},[45,48994,36504],{"class":51},[45,48996,663],{"class":93},[45,48998,32847],{"class":51},[45,49000,400],{"class":257},[45,49002,215],{"class":51},[45,49004,49005,49007,49009,49011,49013],{"class":47,"line":33178},[45,49006,36517],{"class":51},[45,49008,9560],{"class":93},[45,49010,32868],{"class":51},[45,49012,3032],{"class":93},[45,49014,32873],{"class":51},[45,49016,49017],{"class":47,"line":33227},[45,49018,36530],{"class":267},[45,49020,49021,49023,49025,49027,49029],{"class":47,"line":33274},[45,49022,36535],{"class":51},[45,49024,9560],{"class":93},[45,49026,32847],{"class":51},[45,49028,400],{"class":257},[45,49030,215],{"class":51},[45,49032,49033],{"class":47,"line":33279},[45,49034,33092],{"class":267},[45,49036,49037],{"class":47,"line":33285},[45,49038,33098],{"class":267},[45,49040,49041,49043,49045],{"class":47,"line":33304},[45,49042,33104],{"class":51},[45,49044,791],{"class":93},[45,49046,33109],{"class":51},[45,49048,49049],{"class":47,"line":33310},[45,49050,33115],{"class":267},[45,49052,49053],{"class":47,"line":33330},[45,49054,33121],{"class":267},[45,49056,49057,49059,49061],{"class":47,"line":33336},[45,49058,33127],{"class":51},[45,49060,791],{"class":93},[45,49062,33109],{"class":51},[45,49064,49065],{"class":47,"line":33342},[45,49066,33137],{"class":267},[45,49068,49069,49071,49073],{"class":47,"line":33352},[45,49070,33143],{"class":51},[45,49072,791],{"class":93},[45,49074,33148],{"class":51},[45,49076,49077],{"class":47,"line":33357},[45,49078,33154],{"class":267},[45,49080,49081,49083,49085],{"class":47,"line":33363},[45,49082,33160],{"class":51},[45,49084,791],{"class":93},[45,49086,33148],{"class":51},[45,49088,49089],{"class":47,"line":33379},[45,49090,2483],{"emptyLinePlaceholder":133},[45,49092,49093],{"class":47,"line":33424},[45,49094,33175],{"class":267},[45,49096,49097,49099,49101,49103,49105,49107,49109,49111,49113,49115,49117,49119,49121,49123,49125,49127,49129,49131,49133,49135],{"class":47,"line":33430},[45,49098,32532],{"class":257},[45,49100,209],{"class":51},[45,49102,3675],{"class":313},[45,49104,32540],{"class":257},[45,49106,33189],{"class":313},[45,49108,1103],{"class":257},[45,49110,33194],{"class":93},[45,49112,1153],{"class":257},[45,49114,33199],{"class":313},[45,49116,1103],{"class":257},[45,49118,33194],{"class":93},[45,49120,1153],{"class":257},[45,49122,3675],{"class":313},[45,49124,33210],{"class":51},[45,49126,94],{"class":93},[45,49128,426],{"class":257},[45,49130,33217],{"class":51},[45,49132,94],{"class":93},[45,49134,426],{"class":257},[45,49136,33224],{"class":51},[45,49138,49139,49141,49143,49145,49147,49149,49151,49153,49155,49157,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177],{"class":47,"line":33436},[45,49140,32532],{"class":257},[45,49142,209],{"class":51},[45,49144,3675],{"class":313},[45,49146,32540],{"class":257},[45,49148,33238],{"class":313},[45,49150,1103],{"class":257},[45,49152,33194],{"class":93},[45,49154,1153],{"class":257},[45,49156,33247],{"class":313},[45,49158,1103],{"class":257},[45,49160,33194],{"class":93},[45,49162,1153],{"class":257},[45,49164,3675],{"class":313},[45,49166,33258],{"class":51},[45,49168,94],{"class":93},[45,49170,426],{"class":257},[45,49172,33265],{"class":51},[45,49174,94],{"class":93},[45,49176,426],{"class":257},[45,49178,33224],{"class":51},[45,49180,49181],{"class":47,"line":33442},[45,49182,2483],{"emptyLinePlaceholder":133},[45,49184,49185],{"class":47,"line":33453},[45,49186,33282],{"class":267},[45,49188,49189,49191,49193,49195,49197,49199,49201],{"class":47,"line":33459},[45,49190,2580],{"class":93},[45,49192,33290],{"class":51},[45,49194,94],{"class":93},[45,49196,426],{"class":257},[45,49198,1147],{"class":51},[45,49200,1167],{"class":93},[45,49202,33301],{"class":51},[45,49204,49205],{"class":47,"line":33465},[45,49206,33307],{"class":267},[45,49208,49209,49211,49213,49215,49217,49219,49221],{"class":47,"line":33471},[45,49210,33313],{"class":51},[45,49212,248],{"class":257},[45,49214,254],{"class":93},[45,49216,33320],{"class":51},[45,49218,94],{"class":93},[45,49220,426],{"class":257},[45,49222,33327],{"class":51},[45,49224,49225],{"class":47,"line":33489},[45,49226,33333],{"class":267},[45,49228,49229],{"class":47,"line":33503},[45,49230,33339],{"class":267},[45,49232,49233,49235,49237],{"class":47,"line":33512},[45,49234,33345],{"class":51},[45,49236,254],{"class":93},[45,49238,32395],{"class":51},[45,49240,49241],{"class":47,"line":33521},[45,49242,2483],{"emptyLinePlaceholder":133},[45,49244,49245],{"class":47,"line":33530},[45,49246,33360],{"class":267},[45,49248,49249,49251,49253,49255,49257],{"class":47,"line":33539},[45,49250,33366],{"class":51},[45,49252,254],{"class":93},[45,49254,33371],{"class":51},[45,49256,94],{"class":93},[45,49258,33376],{"class":51},[45,49260,49261,49263,49265,49267,49269,49271,49273,49275,49277,49279,49281,49283,49285,49287,49289,49291,49293,49295],{"class":47,"line":33545},[45,49262,32532],{"class":257},[45,49264,209],{"class":51},[45,49266,33386],{"class":313},[45,49268,1103],{"class":257},[45,49270,33391],{"class":93},[45,49272,1153],{"class":257},[45,49274,751],{"class":313},[45,49276,1103],{"class":257},[45,49278,33391],{"class":93},[45,49280,1153],{"class":257},[45,49282,33404],{"class":313},[45,49284,33407],{"class":51},[45,49286,33410],{"class":93},[45,49288,1114],{"class":257},[45,49290,33415],{"class":51},[45,49292,536],{"class":93},[45,49294,1114],{"class":257},[45,49296,30578],{"class":51},[45,49298,49299],{"class":47,"line":33551},[45,49300,36814],{"class":267},[45,49302,49303],{"class":47,"line":33559},[45,49304,36819],{"class":267},[45,49306,49307,49309,49311],{"class":47,"line":33564},[45,49308,36824],{"class":51},[45,49310,33448],{"class":313},[45,49312,215],{"class":51},[45,49314,49315],{"class":47,"line":33570},[45,49316,33468],{"class":267},[45,49318,49319,49321,49323,49325,49327,49329],{"class":47,"line":33581},[45,49320,33474],{"class":51},[45,49322,254],{"class":93},[45,49324,33479],{"class":51},[45,49326,33482],{"class":5299},[45,49328,254],{"class":93},[45,49330,1629],{"class":51},[45,49332,49333,49335,49337,49339],{"class":47,"line":33587},[45,49334,33492],{"class":313},[45,49336,1066],{"class":51},[45,49338,33497],{"class":257},[45,49340,33500],{"class":51},[45,49342,49343,49345],{"class":47,"line":33607},[45,49344,33506],{"class":313},[45,49346,33509],{"class":51},[45,49348,49349,49351],{"class":47,"line":33613},[45,49350,33515],{"class":313},[45,49352,33518],{"class":51},[45,49354,49355,49357],{"class":47,"line":33619},[45,49356,33524],{"class":313},[45,49358,33527],{"class":51},[45,49360,49361,49363],{"class":47,"line":33625},[45,49362,33533],{"class":313},[45,49364,33536],{"class":51},[45,49366,49367],{"class":47,"line":33642},[45,49368,33542],{"class":51},[45,49370,49371],{"class":47,"line":33648},[45,49372,33548],{"class":267},[45,49374,49375,49377],{"class":47,"line":33654},[45,49376,4173],{"class":93},[45,49378,33556],{"class":51},[45,49380,49381],{"class":47,"line":33660},[45,49382,2483],{"emptyLinePlaceholder":133},[45,49384,49385],{"class":47,"line":33666},[45,49386,33567],{"class":267},[45,49388,49389,49391,49393],{"class":47,"line":33672},[45,49390,32028],{"class":93},[45,49392,33575],{"class":2046},[45,49394,33578],{"class":51},[45,49396,49397],{"class":47,"line":33699},[45,49398,33584],{"class":267},[45,49400,49401,49403,49405,49407,49409,49411,49413,49415],{"class":47,"line":33723},[45,49402,33590],{"class":51},[45,49404,31774],{"class":5299},[45,49406,254],{"class":93},[45,49408,209],{"class":51},[45,49410,706],{"class":257},[45,49412,586],{"class":51},[45,49414,501],{"class":257},[45,49416,30578],{"class":51},[45,49418,49419],{"class":47,"line":33729},[45,49420,33610],{"class":267},[45,49422,49423],{"class":47,"line":33735},[45,49424,33616],{"class":267},[45,49426,49427],{"class":47,"line":33741},[45,49428,33622],{"class":267},[45,49430,49431,49433,49435,49437,49439,49441,49443],{"class":47,"line":33752},[45,49432,31808],{"class":51},[45,49434,426],{"class":257},[45,49436,586],{"class":51},[45,49438,286],{"class":257},[45,49440,586],{"class":51},[45,49442,426],{"class":257},[45,49444,215],{"class":51},[45,49446,49447],{"class":47,"line":33763},[45,49448,33645],{"class":267},[45,49450,49451],{"class":47,"line":33769},[45,49452,33651],{"class":267},[45,49454,49455],{"class":47,"line":33786},[45,49456,33657],{"class":267},[45,49458,49459],{"class":47,"line":33809},[45,49460,33663],{"class":267},[45,49462,49463],{"class":47,"line":33832},[45,49464,33669],{"class":267},[45,49466,49467,49469,49471,49473,49475,49477,49479,49481,49483],{"class":47,"line":33838},[45,49468,33675],{"class":51},[45,49470,33678],{"class":313},[45,49472,33681],{"class":51},[45,49474,33684],{"class":313},[45,49476,586],{"class":51},[45,49478,33689],{"class":5299},[45,49480,254],{"class":93},[45,49482,33694],{"class":313},[45,49484,215],{"class":51},[45,49486,49487,49489,49491,49493,49495,49497,49499,49501,49503],{"class":47,"line":33843},[45,49488,33675],{"class":51},[45,49490,33678],{"class":313},[45,49492,33706],{"class":51},[45,49494,33709],{"class":313},[45,49496,586],{"class":51},[45,49498,33689],{"class":5299},[45,49500,254],{"class":93},[45,49502,33718],{"class":313},[45,49504,215],{"class":51},[45,49506,49507],{"class":47,"line":33852},[45,49508,33726],{"class":267},[45,49510,49511],{"class":47,"line":33862},[45,49512,33732],{"class":51},[45,49514,49515],{"class":47,"line":33868},[45,49516,33738],{"class":267},[45,49518,49519,49521,49523],{"class":47,"line":33873},[45,49520,33744],{"class":51},[45,49522,33747],{"class":313},[45,49524,215],{"class":51},[45,49526,49527,49529,49531],{"class":47,"line":33879},[45,49528,33755],{"class":51},[45,49530,33758],{"class":313},[45,49532,215],{"class":51},[45,49534,49535],{"class":47,"line":33892},[45,49536,33766],{"class":267},[45,49538,49539,49541,49543,49545,49547,49549,49551],{"class":47,"line":33898},[45,49540,31808],{"class":51},[45,49542,426],{"class":257},[45,49544,586],{"class":51},[45,49546,286],{"class":257},[45,49548,586],{"class":51},[45,49550,286],{"class":257},[45,49552,215],{"class":51},[45,49554,49555,49557,49559,49561,49563,49565,49567,49569,49571],{"class":47,"line":33909},[45,49556,33675],{"class":51},[45,49558,33678],{"class":313},[45,49560,33793],{"class":51},[45,49562,33684],{"class":313},[45,49564,586],{"class":51},[45,49566,33689],{"class":5299},[45,49568,254],{"class":93},[45,49570,33804],{"class":313},[45,49572,215],{"class":51},[45,49574,49575,49577,49579,49581,49583,49585,49587,49589,49591],{"class":47,"line":33920},[45,49576,33675],{"class":51},[45,49578,33678],{"class":313},[45,49580,33816],{"class":51},[45,49582,33709],{"class":313},[45,49584,586],{"class":51},[45,49586,33689],{"class":5299},[45,49588,254],{"class":93},[45,49590,33827],{"class":313},[45,49592,215],{"class":51},[45,49594,49595],{"class":47,"line":33939},[45,49596,33835],{"class":267},[45,49598,49600],{"class":47,"line":49599},219,[45,49601,33732],{"class":51},[45,49603,49605,49607,49609],{"class":47,"line":49604},220,[45,49606,33744],{"class":51},[45,49608,33678],{"class":313},[45,49610,215],{"class":51},[45,49612,49614,49616,49618],{"class":47,"line":49613},221,[45,49615,33755],{"class":51},[45,49617,33857],{"class":313},[45,49619,215],{"class":51},[45,49621,49623],{"class":47,"line":49622},222,[45,49624,33865],{"class":51},[45,49626,49628],{"class":47,"line":49627},223,[45,49629,2483],{"emptyLinePlaceholder":133},[45,49631,49633],{"class":47,"line":49632},224,[45,49634,33876],{"class":267},[45,49636,49638,49640,49642,49644,49646],{"class":47,"line":49637},225,[45,49639,1614],{"class":93},[45,49641,31301],{"class":257},[45,49643,3032],{"class":93},[45,49645,31306],{"class":313},[45,49647,3822],{"class":51},[45,49649,49651],{"class":47,"line":49650},226,[45,49652,33895],{"class":267},[45,49654,49656,49658,49660],{"class":47,"line":49655},227,[45,49657,44627],{"class":51},[45,49659,254],{"class":93},[45,49661,44632],{"class":51},[45,49663,49665,49667,49669],{"class":47,"line":49664},228,[45,49666,33912],{"class":51},[45,49668,254],{"class":93},[45,49670,33917],{"class":51},[45,49672,49674,49676,49678,49680,49682,49684,49686],{"class":47,"line":49673},229,[45,49675,33474],{"class":51},[45,49677,254],{"class":93},[45,49679,44649],{"class":51},[45,49681,33930],{"class":5299},[45,49683,254],{"class":93},[45,49685,1114],{"class":257},[45,49687,215],{"class":51},[45,49689,49691],{"class":47,"line":49690},230,[45,49692,33942],{"class":51},[22081,49694,49696],{"id":49695},"_242测试代码","2.4.2.测试代码",[10,49698,49699],{},"使用测试集进行测试与推理",[35,49701,49703],{"className":37,"code":49702,"language":39,"meta":40,"style":40},"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",[42,49704,49705,49711,49721,49731,49742,49752,49756,49760,49768,49773,49777,49794,49798,49802,49806,49810,49814,49846,49850,49858,49862,49874,49878,49882,49886,49890,49894,49898,49902,49906,49924,49938,49942,49952,49962,49972,49978,49982,49986,49994,49998,50014,50022,50026,50030,50038,50046,50050,50054,50058,50062,50068,50072,50082,50090,50098,50102,50106,50110,50118,50122,50138,50142,50146,50150,50162,50166,50178,50182,50186,50198,50202,50212,50216,50220,50232,50236,50244,50248,50252,50260,50264,50272,50276,50280,50284,50288,50292,50308,50316,50320,50324,50342,50348,50352,50362,50370,50378,50382,50386,50390,50394,50402,50406,50422,50426,50434,50442],{"__ignoreMap":40},[45,49706,49707,49709],{"class":47,"line":48},[45,49708,30473],{"class":93},[45,49710,30476],{"class":51},[45,49712,49713,49715,49717,49719],{"class":47,"line":125},[45,49714,30473],{"class":93},[45,49716,31496],{"class":51},[45,49718,31464],{"class":93},[45,49720,31501],{"class":51},[45,49722,49723,49725,49727,49729],{"class":47,"line":1262},[45,49724,30818],{"class":93},[45,49726,31479],{"class":51},[45,49728,30473],{"class":93},[45,49730,31484],{"class":51},[45,49732,49733,49735,49737,49739],{"class":47,"line":1277},[45,49734,30818],{"class":93},[45,49736,31449],{"class":51},[45,49738,30473],{"class":93},[45,49740,49741],{"class":51}," ImageFolder\n",[45,49743,49744,49746,49748,49750],{"class":47,"line":1283},[45,49745,30818],{"class":93},[45,49747,31995],{"class":51},[45,49749,30473],{"class":93},[45,49751,44721],{"class":51},[45,49753,49754],{"class":47,"line":1297},[45,49755,2483],{"emptyLinePlaceholder":133},[45,49757,49758],{"class":47,"line":1303},[45,49759,34032],{"class":267},[45,49761,49762,49764,49766],{"class":47,"line":1394},[45,49763,32028],{"class":93},[45,49765,34039],{"class":2046},[45,49767,32034],{"class":51},[45,49769,49770],{"class":47,"line":1400},[45,49771,49772],{"class":267},"   # 导入自己的数据集，并进行数据处理\n",[45,49774,49775],{"class":47,"line":1412},[45,49776,48042],{"class":267},[45,49778,49779,49781,49783,49785,49787,49789,49792],{"class":47,"line":1695},[45,49780,48047],{"class":257},[45,49782,254],{"class":93},[45,49784,877],{"class":93},[45,49786,459],{"class":313},[45,49788,765],{"class":257},[45,49790,49791],{"class":48058},"\u002Fdata\u002Ftest",[45,49793,25216],{"class":313},[45,49795,49796],{"class":47,"line":1700},[45,49797,2483],{"emptyLinePlaceholder":133},[45,49799,49800],{"class":47,"line":1706},[45,49801,48070],{"class":267},[45,49803,49804],{"class":47,"line":1711},[45,49805,48075],{"class":267},[45,49807,49808],{"class":47,"line":1725},[45,49809,48080],{"class":267},[45,49811,49812],{"class":47,"line":1730},[45,49813,48085],{"class":267},[45,49815,49816,49818,49820,49822,49824,49826,49828,49830,49832,49834,49836,49838,49840,49842,49844],{"class":47,"line":1736},[45,49817,48090],{"class":51},[45,49819,254],{"class":93},[45,49821,48095],{"class":51},[45,49823,48098],{"class":257},[45,49825,586],{"class":51},[45,49827,48103],{"class":257},[45,49829,586],{"class":51},[45,49831,48108],{"class":257},[45,49833,48111],{"class":51},[45,49835,48114],{"class":257},[45,49837,586],{"class":51},[45,49839,48119],{"class":257},[45,49841,586],{"class":51},[45,49843,48124],{"class":257},[45,49845,4740],{"class":51},[45,49847,49848],{"class":47,"line":1757},[45,49849,48131],{"class":267},[45,49851,49852,49854,49856],{"class":47,"line":1762},[45,49853,48136],{"class":51},[45,49855,254],{"class":93},[45,49857,48141],{"class":51},[45,49859,49860],{"class":47,"line":1776},[45,49861,48146],{"class":267},[45,49863,49864,49866,49868,49870,49872],{"class":47,"line":1781},[45,49865,48151],{"class":51},[45,49867,31582],{"class":257},[45,49869,586],{"class":51},[45,49871,31582],{"class":257},[45,49873,42703],{"class":51},[45,49875,49876],{"class":47,"line":1810},[45,49877,48164],{"class":267},[45,49879,49880],{"class":47,"line":1815},[45,49881,48169],{"class":51},[45,49883,49884],{"class":47,"line":1832},[45,49885,48174],{"class":51},[45,49887,49888],{"class":47,"line":1837},[45,49889,48179],{"class":267},[45,49891,49892],{"class":47,"line":1842},[45,49893,48184],{"class":267},[45,49895,49896],{"class":47,"line":1847},[45,49897,2483],{"emptyLinePlaceholder":133},[45,49899,49900],{"class":47,"line":1861},[45,49901,48193],{"class":267},[45,49903,49904],{"class":47,"line":1866},[45,49905,48198],{"class":267},[45,49907,49908,49910,49912,49914,49916,49918,49920,49922],{"class":47,"line":2660},[45,49909,34046],{"class":51},[45,49911,254],{"class":93},[45,49913,48207],{"class":51},[45,49915,48210],{"class":257},[45,49917,586],{"class":51},[45,49919,48215],{"class":5299},[45,49921,254],{"class":93},[45,49923,48220],{"class":51},[45,49925,49926,49928,49930,49932,49934,49936],{"class":47,"line":2674},[45,49927,34103],{"class":51},[45,49929,254],{"class":93},[45,49931,31615],{"class":51},[45,49933,31618],{"class":5299},[45,49935,254],{"class":93},[45,49937,34114],{"class":51},[45,49939,49940],{"class":47,"line":2682},[45,49941,34119],{"class":267},[45,49943,49944,49946,49948,49950],{"class":47,"line":2687},[45,49945,34124],{"class":5299},[45,49947,254],{"class":93},[45,49949,426],{"class":257},[45,49951,31547],{"class":51},[45,49953,49954,49956,49958,49960],{"class":47,"line":2693},[45,49955,34135],{"class":5299},[45,49957,254],{"class":93},[45,49959,31557],{"class":257},[45,49961,31547],{"class":51},[45,49963,49964,49966,49968,49970],{"class":47,"line":2699},[45,49965,34146],{"class":5299},[45,49967,254],{"class":93},[45,49969,400],{"class":257},[45,49971,215],{"class":51},[45,49973,49974,49976],{"class":47,"line":2704},[45,49975,4173],{"class":93},[45,49977,34159],{"class":51},[45,49979,49980],{"class":47,"line":8031},[45,49981,2483],{"emptyLinePlaceholder":133},[45,49983,49984],{"class":47,"line":8055},[45,49985,34168],{"class":267},[45,49987,49988,49990,49992],{"class":47,"line":8060},[45,49989,32028],{"class":93},[45,49991,34175],{"class":2046},[45,49993,34178],{"class":51},[45,49995,49996],{"class":47,"line":8066},[45,49997,34183],{"class":267},[45,49999,50000,50002,50004,50006,50008,50010,50012],{"class":47,"line":8093},[45,50001,31318],{"class":51},[45,50003,254],{"class":93},[45,50005,31325],{"class":313},[45,50007,1787],{"class":93},[45,50009,31330],{"class":51},[45,50011,1784],{"class":93},[45,50013,34200],{"class":313},[45,50015,50016,50018,50020],{"class":47,"line":8098},[45,50017,31370],{"class":51},[45,50019,254],{"class":93},[45,50021,32370],{"class":51},[45,50023,50024],{"class":47,"line":8104},[45,50025,2483],{"emptyLinePlaceholder":133},[45,50027,50028],{"class":47,"line":8116},[45,50029,34217],{"class":267},[45,50031,50032,50034,50036],{"class":47,"line":8128},[45,50033,34222],{"class":51},[45,50035,254],{"class":93},[45,50037,32423],{"class":257},[45,50039,50040,50042,50044],{"class":47,"line":8140},[45,50041,34231],{"class":51},[45,50043,254],{"class":93},[45,50045,3168],{"class":257},[45,50047,50048],{"class":47,"line":9799},[45,50049,2483],{"emptyLinePlaceholder":133},[45,50051,50052],{"class":47,"line":9824},[45,50053,34244],{"class":267},[45,50055,50056],{"class":47,"line":9847},[45,50057,34249],{"class":267},[45,50059,50060],{"class":47,"line":9871},[45,50061,34254],{"class":267},[45,50063,50064,50066],{"class":47,"line":9876},[45,50065,34259],{"class":93},[45,50067,32965],{"class":51},[45,50069,50070],{"class":47,"line":9881},[45,50071,34266],{"class":267},[45,50073,50074,50076,50078,50080],{"class":47,"line":9886},[45,50075,3486],{"class":93},[45,50077,34273],{"class":51},[45,50079,26126],{"class":93},[45,50081,34278],{"class":51},[45,50083,50084,50086,50088],{"class":47,"line":9895},[45,50085,34283],{"class":51},[45,50087,254],{"class":93},[45,50089,34288],{"class":51},[45,50091,50092,50094,50096],{"class":47,"line":9900},[45,50093,34293],{"class":51},[45,50095,254],{"class":93},[45,50097,34298],{"class":51},[45,50099,50100],{"class":47,"line":9906},[45,50101,34303],{"class":267},[45,50103,50104],{"class":47,"line":9927},[45,50105,32956],{"class":51},[45,50107,50108],{"class":47,"line":9933},[45,50109,34312],{"class":267},[45,50111,50112,50114,50116],{"class":47,"line":9947},[45,50113,32741],{"class":51},[45,50115,254],{"class":93},[45,50117,34321],{"class":51},[45,50119,50120],{"class":47,"line":9953},[45,50121,34326],{"class":267},[45,50123,50124,50126,50128,50130,50132,50134,50136],{"class":47,"line":9980},[45,50125,32758],{"class":51},[45,50127,254],{"class":93},[45,50129,32763],{"class":51},[45,50131,32766],{"class":5299},[45,50133,254],{"class":93},[45,50135,426],{"class":257},[45,50137,215],{"class":51},[45,50139,50140],{"class":47,"line":9989},[45,50141,34347],{"class":267},[45,50143,50144],{"class":47,"line":9995},[45,50145,34352],{"class":267},[45,50147,50148],{"class":47,"line":10003},[45,50149,34357],{"class":267},[45,50151,50152,50154,50156,50158,50160],{"class":47,"line":10008},[45,50153,34362],{"class":51},[45,50155,9560],{"class":93},[45,50157,32868],{"class":51},[45,50159,3032],{"class":93},[45,50161,34371],{"class":51},[45,50163,50164],{"class":47,"line":16687},[45,50165,34376],{"class":267},[45,50167,50168,50170,50172,50174,50176],{"class":47,"line":16693},[45,50169,34381],{"class":51},[45,50171,9560],{"class":93},[45,50173,34386],{"class":51},[45,50175,400],{"class":257},[45,50177,215],{"class":51},[45,50179,50180],{"class":47,"line":16716},[45,50181,2483],{"emptyLinePlaceholder":133},[45,50183,50184],{"class":47,"line":16722},[45,50185,34399],{"class":267},[45,50187,50188,50190,50192,50194,50196],{"class":47,"line":16745},[45,50189,34404],{"class":51},[45,50191,254],{"class":93},[45,50193,34409],{"class":51},[45,50195,791],{"class":93},[45,50197,34414],{"class":51},[45,50199,50200],{"class":47,"line":16759},[45,50201,34419],{"class":267},[45,50203,50204,50206,50208,50210],{"class":47,"line":16779},[45,50205,32532],{"class":257},[45,50207,209],{"class":51},[45,50209,34428],{"class":313},[45,50211,34431],{"class":51},[45,50213,50214],{"class":47,"line":16785},[45,50215,2483],{"emptyLinePlaceholder":133},[45,50217,50218],{"class":47,"line":16796},[45,50219,34440],{"class":267},[45,50221,50222,50224,50226,50228,50230],{"class":47,"line":16819},[45,50223,1614],{"class":93},[45,50225,31301],{"class":257},[45,50227,3032],{"class":93},[45,50229,31306],{"class":313},[45,50231,3822],{"class":51},[45,50233,50234],{"class":47,"line":16841},[45,50235,34457],{"class":267},[45,50237,50238,50240,50242],{"class":47,"line":16846},[45,50239,31370],{"class":51},[45,50241,254],{"class":93},[45,50243,44632],{"class":51},[45,50245,50246],{"class":47,"line":16852},[45,50247,34470],{"class":267},[45,50249,50250],{"class":47,"line":16866},[45,50251,34475],{"class":267},[45,50253,50254,50256,50258],{"class":47,"line":16879},[45,50255,34480],{"class":51},[45,50257,34483],{"class":313},[45,50259,30578],{"class":51},[45,50261,50262],{"class":47,"line":16884},[45,50263,34490],{"class":267},[45,50265,50266,50268,50270],{"class":47,"line":16898},[45,50267,34103],{"class":51},[45,50269,254],{"class":93},[45,50271,34499],{"class":51},[45,50273,50274],{"class":47,"line":16903},[45,50275,34504],{"class":267},[45,50277,50278],{"class":47,"line":16909},[45,50279,34509],{"class":51},[45,50281,50282],{"class":47,"line":16914},[45,50283,2483],{"emptyLinePlaceholder":133},[45,50285,50286],{"class":47,"line":16928},[45,50287,34518],{"class":267},[45,50289,50290],{"class":47,"line":16933},[45,50291,34523],{"class":267},[45,50293,50294,50296,50298,50300,50302,50304,50306],{"class":47,"line":16938},[45,50295,31318],{"class":51},[45,50297,254],{"class":93},[45,50299,31325],{"class":313},[45,50301,1787],{"class":93},[45,50303,31330],{"class":51},[45,50305,1784],{"class":93},[45,50307,34200],{"class":313},[45,50309,50310,50312,50314],{"class":47,"line":16952},[45,50311,31370],{"class":51},[45,50313,254],{"class":93},[45,50315,32370],{"class":51},[45,50317,50318],{"class":47,"line":16964},[45,50319,34552],{"class":267},[45,50321,50322],{"class":47,"line":16969},[45,50323,34557],{"class":267},[45,50325,50326,50328,50330,50332,50335,50337,50340],{"class":47,"line":16982},[45,50327,34562],{"class":51},[45,50329,254],{"class":93},[45,50331,1097],{"class":51},[45,50333,50334],{"class":313},"'猫'",[45,50336,586],{"class":51},[45,50338,50339],{"class":313},"'狗'",[45,50341,33327],{"class":51},[45,50343,50344,50346],{"class":47,"line":16987},[45,50345,34259],{"class":93},[45,50347,32965],{"class":51},[45,50349,50350],{"class":47,"line":16992},[45,50351,34627],{"class":267},[45,50353,50354,50356,50358,50360],{"class":47,"line":16997},[45,50355,3486],{"class":93},[45,50357,34634],{"class":51},[45,50359,26126],{"class":93},[45,50361,34278],{"class":51},[45,50363,50364,50366,50368],{"class":47,"line":17010},[45,50365,32691],{"class":51},[45,50367,254],{"class":93},[45,50369,32696],{"class":51},[45,50371,50372,50374,50376],{"class":47,"line":17015},[45,50373,32706],{"class":51},[45,50375,254],{"class":93},[45,50377,32711],{"class":51},[45,50379,50380],{"class":47,"line":32714},[45,50381,2483],{"emptyLinePlaceholder":133},[45,50383,50384],{"class":47,"line":32720},[45,50385,34663],{"class":267},[45,50387,50388],{"class":47,"line":32726},[45,50389,32956],{"class":51},[45,50391,50392],{"class":47,"line":32732},[45,50393,34672],{"class":267},[45,50395,50396,50398,50400],{"class":47,"line":32738},[45,50397,32741],{"class":51},[45,50399,254],{"class":93},[45,50401,32746],{"class":51},[45,50403,50404],{"class":47,"line":32749},[45,50405,34685],{"class":267},[45,50407,50408,50410,50412,50414,50416,50418,50420],{"class":47,"line":32755},[45,50409,32758],{"class":51},[45,50411,254],{"class":93},[45,50413,32763],{"class":51},[45,50415,32766],{"class":5299},[45,50417,254],{"class":93},[45,50419,426],{"class":257},[45,50421,215],{"class":51},[45,50423,50424],{"class":47,"line":32775},[45,50425,34706],{"class":267},[45,50427,50428,50430,50432],{"class":47,"line":32781},[45,50429,34711],{"class":51},[45,50431,254],{"class":93},[45,50433,34716],{"class":51},[45,50435,50436,50438,50440],{"class":47,"line":32792},[45,50437,34721],{"class":51},[45,50439,254],{"class":93},[45,50441,34726],{"class":51},[45,50443,50444,50446,50448,50450,50452,50454,50456,50458],{"class":47,"line":32798},[45,50445,34731],{"class":257},[45,50447,209],{"class":51},[45,50449,34736],{"class":313},[45,50451,34739],{"class":51},[45,50453,34742],{"class":313},[45,50455,586],{"class":51},[45,50457,34747],{"class":313},[45,50459,34750],{"class":51},[121,50461,50462],{},"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":40,"searchDepth":125,"depth":125,"links":50464},[50465,50466,50467,50468],{"id":30672,"depth":1262,"text":30673},{"id":37920,"depth":1262,"text":37921},{"id":41353,"depth":1262,"text":41354},{"id":45362,"depth":1262,"text":45363},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30664,"description":130},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50475,"title":50476,"body":50477,"description":130,"extension":131,"meta":50484,"navigation":133,"path":50485,"seo":50486,"stem":50487,"__hash__":50488},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50478,"toc":50482},[50479],[20,50480,50476],{"id":50481},"_3yolo模型学习",{"title":40,"searchDepth":125,"depth":125,"links":50483},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50476,"description":130},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50490,"title":50491,"body":50492,"description":50499,"extension":131,"meta":50500,"navigation":133,"path":50502,"seo":50503,"stem":50504,"__hash__":50505},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50493,"toc":50497},[50494],[10,50495,50496],{},"yolo模型还未补充",{"title":40,"searchDepth":125,"depth":125,"links":50498},[],"深度学习学习",{"category":50501},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50491,"description":50499},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50507,"title":50508,"body":50509,"description":130,"extension":131,"meta":50534,"navigation":133,"path":50535,"seo":50536,"stem":50537,"__hash__":50538},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50510,"toc":50532},[50511,50514,50517,50522,50529],[20,50512,50508],{"id":50513},"_1工具",[10,50515,50516],{},"提示错误插件：有问题会提前报错",[10,50518,50519],{},[1545,50520],{"alt":40,"src":50521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[10,50523,50524],{},[13,50525,50528],{"href":50526,"rel":50527},"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",[17],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[10,50530,50531],{},"alt键加上下箭头可以实现语句的移动",{"title":40,"searchDepth":125,"depth":125,"links":50533},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50508,"description":130},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50540,"title":50541,"body":50542,"description":130,"extension":131,"meta":53406,"navigation":133,"path":53407,"seo":53408,"stem":53409,"__hash__":53410},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50543,"toc":53357},[50544,50547,50551,50555,50560,50563,50568,50572,50579,50584,50591,50596,50603,50608,50612,50617,50620,50624,50629,50633,50638,50641,50644,50647,50650,50653,50656,50659,50662,50667,50672,50677,50681,50684,50687,50691,50696,50699,50707,50712,50729,50737,50742,50747,50752,50757,50762,50765,50770,50775,50779,50788,50793,50798,50802,50807,50810,50814,50819,50827,50832,50837,50840,50845,50850,50855,50858,50861,50864,50869,50874,50877,50882,50885,50890,50893,50896,50899,50904,50907,50910,50925,50930,50935,50940,50943,50946,50949,50963,50966,50971,50976,50979,50982,50985,50988,50991,50994,50997,51001,51005,51010,51014,51017,51022,51027,51030,51035,51038,51042,51047,51050,51053,51056,51059,51062,51065,51068,51071,51074,51078,51083,51088,51093,51096,51099,51103,51108,51111,51115,51118,51121,51126,51129,51132,51136,51140,51143,51148,51153,51156,51185,51190,51195,51200,51205,51209,51214,51218,51223,51226,51230,51234,51239,51243,51248,51253,51257,51262,51265,51267,51270,51275,51279,51284,51288,51292,51297,51302,51307,51312,51316,51321,51326,51331,51334,51337,51342,51345,51350,51355,51360,51365,51369,52176,52180,52523,52528,52531,52534,52537,52540,52543,52546,52549,52552,52554,52557,52559,52562,52566,52571,52574,52577,52580,52584,52589,52594,52614,52617,52621,52626,52631,52648,52652,52681,52685,52707,52709,52748,52756,52762,52766,52769,52772,52777,52782,52785,52788,52791,52796,52801,52804,52807,52810,52813,52816,52819,52822,52825,52828,52831,52834,52836,52839,52842,52845,52848,52851,52854,52857,52860,52864,52869,52872,52877,52880,52883,52886,52889,52892,52895,52898,52900,52903,52906,52909,52912,52915,52918,52922,52925,52934,52937,52942,52945,52950,52953,52956,52959,52962,52965,52968,52971,52975,52979,52982,52985,52990,52995,53000,53004,53009,53014,53017,53020,53023,53026,53029,53034,53037,53042,53044,53049,53052,53056,53061,53064,53067,53072,53076,53079,53084,53087,53090,53119,53124,53127,53130,53133,53136,53139,53143,53146,53232,53236,53239,53244,53249,53256,53259,53262,53265,53268,53271,53276,53281,53284,53287,53290,53293,53296,53299,53302,53305,53308,53310,53313,53317,53322,53327,53332,53335,53340,53345,53348,53351,53354],[20,50545,50541],{"id":50546},"_2基础语法",[30,50548,50550],{"id":50549},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[176,50552,50554],{"id":50553},"_211-js组成","2.1.1 js组成",[159,50556,50557],{},[162,50558,50559],{},"js是编程语言，html和css不是编程语言，是标记语言",[10,50561,50562],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[159,50564,50565],{"start":125},[162,50566,50567],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[176,50569,50571],{"id":50570},"_212-js书写位置","2.1.2 js书写位置",[159,50573,50574],{},[162,50575,50576],{},[358,50577,50578],{},"内部 JavaScript",[10,50580,50581],{},[1545,50582],{"alt":40,"src":50583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[159,50585,50586],{"start":125},[162,50587,50588],{},[358,50589,50590],{},"外部 JavaScript",[10,50592,50593],{},[1545,50594],{"alt":40,"src":50595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[159,50597,50598],{"start":1262},[162,50599,50600],{},[358,50601,50602],{},"内联 JavaScript",[10,50604,50605],{},[1545,50606],{"alt":40,"src":50607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[176,50609,50611],{"id":50610},"_213-javascript注释","2.1.3 JavaScript注释",[10,50613,50614],{},[1545,50615],{"alt":40,"src":50616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[10,50618,50619],{},"alt+shift+a一定要记住！",[176,50621,50623],{"id":50622},"_214-javascript结束符","2.1.4 JavaScript结束符",[10,50625,50626],{},[1545,50627],{"alt":40,"src":50628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[176,50630,50632],{"id":50631},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[159,50634,50635],{},[162,50636,50637],{},"输出语法：",[10,50639,50640],{},"①document.write('要出的内容')",[10,50642,50643],{},"向body内输出内容；",[10,50645,50646],{},"如果输出的内容写的是标签，也会被解析cheng",[10,50648,50649],{},"②alert('要出的内容')",[10,50651,50652],{},"页面弹出警告对话框",[10,50654,50655],{},"③console.log('控制台打印')",[10,50657,50658],{},"控制台输出语法，程序员调试使用",[10,50660,50661],{},"输入log就行，自动生成：",[10,50663,50664],{},[1545,50665],{"alt":40,"src":50666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[159,50668,50669],{"start":125},[162,50670,50671],{},"输入语法：",[10,50673,50674],{},[1545,50675],{"alt":40,"src":50676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[176,50678,50680],{"id":50679},"_2116-字面量","21.1.6 字面量",[10,50682,50683],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[10,50685,50686],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[30,50688,50690],{"id":50689},"_22-变量","2.2 变量",[159,50692,50693],{},[162,50694,50695],{},"变量声明",[10,50697,50698],{},"let 变量名",[1214,50700,50701,50704],{},[162,50702,50703],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[162,50705,50706],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[159,50708,50709],{"start":125},[162,50710,50711],{},"变量赋值",[35,50713,50717],{"className":50714,"code":50715,"language":50716,"meta":40,"style":40},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[42,50718,50719,50724],{"__ignoreMap":40},[45,50720,50721],{"class":47,"line":48},[45,50722,50723],{"class":51},"let age\n",[45,50725,50726],{"class":47,"line":125},[45,50727,50728],{"class":51},"age=18\n",[159,50730,50731,50734],{"start":1262},[162,50732,50733],{},"连这些（变量的初始化）：let age=18",[162,50735,50736],{},"更新变量",[10,50738,50739],{},[1545,50740],{"alt":40,"src":50741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[159,50743,50744],{"start":1283},[162,50745,50746],{},"声明多个变量",[10,50748,50749],{},[1545,50750],{"alt":40,"src":50751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[159,50753,50754],{"start":1297},[162,50755,50756],{},"变量命名规则与规范",[10,50758,50759],{},[1545,50760],{"alt":40,"src":50761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[10,50763,50764],{},"遵守小驼峰！",[159,50766,50767],{"start":1303},[162,50768,50769],{},"变量拓展-let和var的区别",[10,50771,50772],{},[1545,50773],{"alt":40,"src":50774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[30,50776,50778],{"id":50777},"_23-数组","2.3 数组",[35,50780,50782],{"className":50714,"code":50781,"language":50716,"meta":40,"style":40},"let arr = []\n",[42,50783,50784],{"__ignoreMap":40},[45,50785,50786],{"class":47,"line":48},[45,50787,50781],{"class":51},[10,50789,50790],{},[1545,50791],{"alt":40,"src":50792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[10,50794,50795],{},[1545,50796],{"alt":40,"src":50797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[30,50799,50801],{"id":50800},"_24-常量","2.4 常量",[10,50803,50804],{},[1545,50805],{"alt":40,"src":50806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[10,50808,50809],{},"const — 类似于 let ，但是变量的值无法被修改",[30,50811,50813],{"id":50812},"_25-数据类型","2.5 数据类型",[10,50815,50816],{},[1545,50817],{"alt":40,"src":50818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[159,50820,50821,50824],{},[162,50822,50823],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[162,50825,50826],{},"算数运算符：",[10,50828,50829],{},[1545,50830],{"alt":40,"src":50831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[159,50833,50834],{"start":1262},[162,50835,50836],{},"数字类型（Number）",[10,50838,50839],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[10,50841,50842],{},[1545,50843],{"alt":40,"src":50844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[159,50846,50847],{"start":1277},[162,50848,50849],{},"字符串类型（string）",[10,50851,50852],{},[1545,50853],{"alt":40,"src":50854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[10,50856,50857],{},"反引号也是可以使用的",[10,50859,50860],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[10,50862,50863],{},"例如：document.write(\"我今年\"+age+\"岁\")",[159,50865,50866],{"start":1283},[162,50867,50868],{},"模板字符串",[10,50870,50871],{},[1545,50872],{"alt":40,"src":50873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[10,50875,50876],{},"类似于python的字符串格式化",[159,50878,50879],{"start":1297},[162,50880,50881],{},"布尔类型",[10,50883,50884],{},"true 和 false",[159,50886,50887],{"start":1303},[162,50888,50889],{},"未定义类型（underfined）",[10,50891,50892],{},"表示没有赋值",[10,50894,50895],{},"未定义类型是比较特殊的类型，只有一个值undefined",[10,50897,50898],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[159,50900,50901],{"start":1394},[162,50902,50903],{},"null（空类型）",[10,50905,50906],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[10,50908,50909],{},"赋值了，但是内容为空",[35,50911,50913],{"className":50714,"code":50912,"language":50716,"meta":40,"style":40},"typeof null\n输出的是'object'，是一个对象数据类型\n",[42,50914,50915,50920],{"__ignoreMap":40},[45,50916,50917],{"class":47,"line":48},[45,50918,50919],{"class":51},"typeof null\n",[45,50921,50922],{"class":47,"line":125},[45,50923,50924],{"class":51},"输出的是'object'，是一个对象数据类型\n",[159,50926,50927],{"start":1400},[162,50928,50929],{},"控制台检测数据类型",[10,50931,50932],{},[1545,50933],{"alt":40,"src":50934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[159,50936,50937],{"start":1412},[162,50938,50939],{},"类型转换",[10,50941,50942],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[10,50944,50945],{},"转换方式：隐式转换和显示转换",[10,50947,50948],{},"①隐式转换",[1214,50950,50951,50954,50957,50960],{},[162,50952,50953],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[162,50955,50956],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[162,50958,50959],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[162,50961,50962],{},"任何数据和字符串相加结果都是字符串",[10,50964,50965],{},"②显示转换",[10,50967,50968],{},[1545,50969],{"alt":40,"src":50970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[10,50972,50973],{},[1545,50974],{"alt":40,"src":50975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[10,50977,50978],{},"在输入的时候要用好隐式转换，简单写起来",[10,50980,50981],{},"let num = +prompt(’请输入数字：‘)",[10,50983,50984],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[10,50986,50987],{},"console.log(parseInt('12.333px'))",[10,50989,50990],{},"输出为：12",[10,50992,50993],{},"console.log(parseInt('a'a'a12.333px'))",[10,50995,50996],{},"输出：NaN",[30,50998,51000],{"id":50999},"_26-运算符","2.6 运算符",[176,51002,51004],{"id":51003},"_261-赋值运算符","2.6.1 赋值运算符",[10,51006,51007],{},[1545,51008],{"alt":40,"src":51009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[176,51011,51013],{"id":51012},"_262-一元运算符","2.6.2 一元运算符",[10,51015,51016],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[10,51018,51019],{},[1545,51020],{"alt":40,"src":51021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[10,51023,51024],{},[1545,51025],{"alt":40,"src":51026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[10,51028,51029],{},"两者的区别：",[10,51031,51032],{},[1545,51033],{"alt":40,"src":51034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[10,51036,51037],{},"前置先自加；后置后加，代码执行完之后再加",[176,51039,51041],{"id":51040},"_263-比较运算符","2.6.3 比较运算符",[10,51043,51044],{},[1545,51045],{"alt":40,"src":51046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[10,51048,51049],{},"比较运算符也有隐式转换",[10,51051,51052],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[10,51054,51055],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[10,51057,51058],{},"要使用三等，开发的时候",[10,51060,51061],{},"NaN不等于任何人，包括它自己",[10,51063,51064],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[10,51066,51067],{},"7\u002F10=0.7",[10,51069,51070],{},"最后：0.5+0.2=0.7",[10,51072,51073],{},"字符串比较，比较的是字符对应的ASCII码",[176,51075,51077],{"id":51076},"_264-逻辑运算符","2.6.4 逻辑运算符",[10,51079,51080],{},[1545,51081],{"alt":40,"src":51082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[10,51084,51085],{},[1545,51086],{"alt":40,"src":51087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[10,51089,51090],{},[1545,51091],{"alt":40,"src":51092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[10,51094,51095],{},"上述题目选D",[10,51097,51098],{},"与真2假1；或真1假2",[176,51100,51102],{"id":51101},"_265-运算符优先级","2.6.5 运算符优先级",[10,51104,51105],{},[1545,51106],{"alt":40,"src":51107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[10,51109,51110],{},"先算逻辑与，后算逻辑或",[30,51112,51114],{"id":51113},"_27-语句","2.7 语句",[10,51116,51117],{},"表达式：是可以被求值的代码，会有结果给我们",[10,51119,51120],{},"语句：语句是可以被执行的代码，例如prompt()",[10,51122,51123],{},[1545,51124],{"alt":40,"src":51125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[10,51127,51128],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[10,51130,51131],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[176,51133,51135],{"id":51134},"_271-分支语句","2.7.1 分支语句",[22081,51137,51139],{"id":51138},"_2711-if分支语句","2.7.1.1 if分支语句",[10,51141,51142],{},"if语句单行简单的话，可以不写{}，写在一行就行",[159,51144,51145],{},[162,51146,51147],{},"单分支语句",[10,51149,51150],{},[1545,51151],{"alt":40,"src":51152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[10,51154,51155],{},"除了0，所有数字都为真",[35,51157,51159],{"className":50714,"code":51158,"language":50716,"meta":40,"style":40},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[42,51160,51161,51166,51171,51176,51180],{"__ignoreMap":40},[45,51162,51163],{"class":47,"line":48},[45,51164,51165],{"class":51},"if（0) {\n",[45,51167,51168],{"class":47,"line":125},[45,51169,51170],{"class":51},"    let a=1\n",[45,51172,51173],{"class":47,"line":1262},[45,51174,51175],{"class":51},"    alert(typeof a)\n",[45,51177,51178],{"class":47,"line":1277},[45,51179,1648],{"class":51},[45,51181,51182],{"class":47,"line":1283},[45,51183,51184],{"class":51},"不输出，括号为假\n",[159,51186,51187],{"start":125},[162,51188,51189],{},"双分支语句",[10,51191,51192],{},[1545,51193],{"alt":40,"src":51194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[159,51196,51197],{"start":1262},[162,51198,51199],{},"多分支语句",[10,51201,51202],{},[1545,51203],{"alt":40,"src":51204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22081,51206,51208],{"id":51207},"_2712-三元运算符","2.7.1.2 三元运算符",[10,51210,51211],{},[1545,51212],{"alt":40,"src":51213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22081,51215,51217],{"id":51216},"_2713-switch语句","2.7.1.3 switch语句",[10,51219,51220],{},[1545,51221],{"alt":40,"src":51222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[10,51224,51225],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[176,51227,51229],{"id":51228},"_272-循环语句","2.7.2 循环语句",[22081,51231,51233],{"id":51232},"_2721-断点演示","2.7.2.1 断点演示",[10,51235,51236],{},[1545,51237],{"alt":40,"src":51238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22081,51240,51242],{"id":51241},"_2722-while循环","2.7.2.2 while循环",[10,51244,51245],{},[1545,51246],{"alt":40,"src":51247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[10,51249,51250],{},[1545,51251],{"alt":40,"src":51252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22081,51254,51256],{"id":51255},"_2723-for循环","2.7.2.3 for循环",[10,51258,51259],{},[1545,51260],{"alt":40,"src":51261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[10,51263,51264],{},"for(;;) {",[10,51266,1153],{},[10,51268,51269],{},"表示无限循环",[10,51271,51272],{},[1545,51273],{"alt":40,"src":51274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22081,51276,51278],{"id":51277},"_2724-循环的退出","2.7.2.4 循环的退出",[10,51280,51281],{},[1545,51282],{"alt":40,"src":51283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[30,51285,51287],{"id":51286},"_28-数组","2.8 数组",[176,51289,51291],{"id":51290},"_281-基础认识","2.8.1 基础认识",[10,51293,51294],{},[1545,51295],{"alt":40,"src":51296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[10,51298,51299],{},[1545,51300],{"alt":40,"src":51301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[10,51303,51304],{},[1545,51305],{"alt":40,"src":51306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[10,51308,51309],{},[1545,51310],{"alt":40,"src":51311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[176,51313,51315],{"id":51314},"_282-操作数组","2.8.2 操作数组",[10,51317,51318],{},[1545,51319],{"alt":40,"src":51320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[159,51322,51323],{},[162,51324,51325],{},"添加元素",[10,51327,51328],{},[1545,51329],{"alt":40,"src":51330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[10,51332,51333],{},"console.log(arr.push('green'))",[10,51335,51336],{},"输出结果：为新数组的长度",[10,51338,51339],{},[1545,51340],{"alt":40,"src":51341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[10,51343,51344],{},"push用的非常多，一定要记住",[159,51346,51347],{},[162,51348,51349],{},"删除元素",[10,51351,51352],{},[1545,51353],{"alt":40,"src":51354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[10,51356,51357],{},[1545,51358],{"alt":40,"src":51359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[10,51361,51362],{},[1545,51363],{"alt":40,"src":51364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[176,51366,51368],{"id":51367},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[35,51370,51372],{"className":50714,"code":51371,"language":50716,"meta":40,"style":40},"\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",[42,51373,51374,51389,51405,51409,51418,51436,51460,51482,51496,51504,51511,51523,51534,51538,51542,51549,51561,51576,51589,51608,51625,51640,51652,51664,51676,51680,51684,51695,51705,51717,51729,51741,51752,51756,51760,51772,51776,51790,51794,51798,51809,51823,51835,51849,51853,51862,51871,51875,51884,51888,51897,51902,51907,51920,51948,51953,51958,51983,51988,51992,51997,52002,52017,52021,52026,52056,52068,52084,52100,52114,52119,52126,52130,52135,52148,52156,52164,52168],{"__ignoreMap":40},[45,51375,51376,51379,51383,51386],{"class":47,"line":48},[45,51377,51378],{"class":51},"\u003C!",[45,51380,51382],{"class":51381},"s9eBZ","DOCTYPE",[45,51384,51385],{"class":2046}," html",[45,51387,51388],{"class":51},">\n",[45,51390,51391,51393,51395,51398,51400,51403],{"class":47,"line":125},[45,51392,1117],{"class":51},[45,51394,50716],{"class":51381},[45,51396,51397],{"class":2046}," lang",[45,51399,254],{"class":51},[45,51401,51402],{"class":313},"\"en\"",[45,51404,51388],{"class":51},[45,51406,51407],{"class":47,"line":1262},[45,51408,2483],{"emptyLinePlaceholder":133},[45,51410,51411,51413,51416],{"class":47,"line":1277},[45,51412,1117],{"class":51},[45,51414,51415],{"class":51381},"head",[45,51417,51388],{"class":51},[45,51419,51420,51423,51426,51429,51431,51434],{"class":47,"line":1283},[45,51421,51422],{"class":51},"    \u003C",[45,51424,51425],{"class":51381},"meta",[45,51427,51428],{"class":2046}," charset",[45,51430,254],{"class":51},[45,51432,51433],{"class":313},"\"UTF-8\"",[45,51435,51388],{"class":51},[45,51437,51438,51440,51442,51445,51447,51450,51453,51455,51458],{"class":47,"line":1297},[45,51439,51422],{"class":51},[45,51441,51425],{"class":51381},[45,51443,51444],{"class":2046}," http-equiv",[45,51446,254],{"class":51},[45,51448,51449],{"class":313},"\"X-UA-Compatible\"",[45,51451,51452],{"class":2046}," content",[45,51454,254],{"class":51},[45,51456,51457],{"class":313},"\"IE=edge\"",[45,51459,51388],{"class":51},[45,51461,51462,51464,51466,51468,51470,51473,51475,51477,51480],{"class":47,"line":1303},[45,51463,51422],{"class":51},[45,51465,51425],{"class":51381},[45,51467,15003],{"class":2046},[45,51469,254],{"class":51},[45,51471,51472],{"class":313},"\"viewport\"",[45,51474,51452],{"class":2046},[45,51476,254],{"class":51},[45,51478,51479],{"class":313},"\"width=device-width, initial-scale=1.0\"",[45,51481,51388],{"class":51},[45,51483,51484,51486,51489,51492,51494],{"class":47,"line":1394},[45,51485,51422],{"class":51},[45,51487,51488],{"class":51381},"title",[45,51490,51491],{"class":51},">Document\u003C\u002F",[45,51493,51488],{"class":51381},[45,51495,51388],{"class":51},[45,51497,51498,51500,51502],{"class":47,"line":1400},[45,51499,51422],{"class":51},[45,51501,121],{"class":51381},[45,51503,51388],{"class":51},[45,51505,51506,51509],{"class":47,"line":1412},[45,51507,51508],{"class":51381},"        *",[45,51510,15655],{"class":51},[45,51512,51513,51516,51519,51521],{"class":47,"line":1695},[45,51514,51515],{"class":257},"            margin",[45,51517,51518],{"class":51},": ",[45,51520,400],{"class":257},[45,51522,1373],{"class":51},[45,51524,51525,51528,51530,51532],{"class":47,"line":1700},[45,51526,51527],{"class":257},"            padding",[45,51529,51518],{"class":51},[45,51531,400],{"class":257},[45,51533,1373],{"class":51},[45,51535,51536],{"class":47,"line":1706},[45,51537,2612],{"class":51},[45,51539,51540],{"class":47,"line":1711},[45,51541,2483],{"emptyLinePlaceholder":133},[45,51543,51544,51547],{"class":47,"line":1725},[45,51545,51546],{"class":2046},"        .box",[45,51548,15655],{"class":51},[45,51550,51551,51554,51556,51559],{"class":47,"line":1730},[45,51552,51553],{"class":257},"            display",[45,51555,51518],{"class":51},[45,51557,51558],{"class":257},"flex",[45,51560,1373],{"class":51},[45,51562,51563,51566,51568,51571,51574],{"class":47,"line":1736},[45,51564,51565],{"class":257},"            width",[45,51567,51518],{"class":51},[45,51569,51570],{"class":257},"700",[45,51572,51573],{"class":93},"px",[45,51575,1373],{"class":51},[45,51577,51578,51581,51583,51585,51587],{"class":47,"line":1757},[45,51579,51580],{"class":257},"            height",[45,51582,51518],{"class":51},[45,51584,4056],{"class":257},[45,51586,51573],{"class":93},[45,51588,1373],{"class":51},[45,51590,51591,51594,51596,51598,51600,51603,51606],{"class":47,"line":1762},[45,51592,51593],{"class":257},"            border-left",[45,51595,51518],{"class":51},[45,51597,426],{"class":257},[45,51599,51573],{"class":93},[45,51601,51602],{"class":257}," solid",[45,51604,51605],{"class":257}," pink",[45,51607,1373],{"class":51},[45,51609,51610,51613,51615,51617,51619,51621,51623],{"class":47,"line":1776},[45,51611,51612],{"class":257},"            border-bottom",[45,51614,51518],{"class":51},[45,51616,426],{"class":257},[45,51618,51573],{"class":93},[45,51620,51602],{"class":257},[45,51622,51605],{"class":257},[45,51624,1373],{"class":51},[45,51626,51627,51629,51631,51633,51635,51638],{"class":47,"line":1781},[45,51628,51515],{"class":257},[45,51630,51518],{"class":51},[45,51632,863],{"class":257},[45,51634,51573],{"class":93},[45,51636,51637],{"class":257}," auto",[45,51639,1373],{"class":51},[45,51641,51642,51645,51647,51650],{"class":47,"line":1810},[45,51643,51644],{"class":257},"            justify-content",[45,51646,51518],{"class":51},[45,51648,51649],{"class":257},"space-around",[45,51651,1373],{"class":51},[45,51653,51654,51657,51659,51662],{"class":47,"line":1815},[45,51655,51656],{"class":257},"            align-items",[45,51658,51518],{"class":51},[45,51660,51661],{"class":257},"flex-end",[45,51663,1373],{"class":51},[45,51665,51666,51669,51671,51674],{"class":47,"line":1832},[45,51667,51668],{"class":257},"            text-align",[45,51670,51518],{"class":51},[45,51672,51673],{"class":257},"center",[45,51675,1373],{"class":51},[45,51677,51678],{"class":47,"line":1837},[45,51679,2612],{"class":51},[45,51681,51682],{"class":47,"line":1842},[45,51683,2483],{"emptyLinePlaceholder":133},[45,51685,51686,51688,51690,51693],{"class":47,"line":1847},[45,51687,51546],{"class":2046},[45,51689,1167],{"class":93},[45,51691,51692],{"class":51381},"div",[45,51694,15655],{"class":51},[45,51696,51697,51699,51701,51703],{"class":47,"line":1861},[45,51698,51553],{"class":257},[45,51700,51518],{"class":51},[45,51702,51558],{"class":257},[45,51704,1373],{"class":51},[45,51706,51707,51709,51711,51713,51715],{"class":47,"line":1866},[45,51708,51565],{"class":257},[45,51710,51518],{"class":51},[45,51712,863],{"class":257},[45,51714,51573],{"class":93},[45,51716,1373],{"class":51},[45,51718,51719,51722,51724,51727],{"class":47,"line":2660},[45,51720,51721],{"class":257},"            background-color",[45,51723,51518],{"class":51},[45,51725,51726],{"class":257},"pink",[45,51728,1373],{"class":51},[45,51730,51731,51734,51736,51739],{"class":47,"line":2674},[45,51732,51733],{"class":257},"            flex-direction",[45,51735,51518],{"class":51},[45,51737,51738],{"class":257},"column",[45,51740,1373],{"class":51},[45,51742,51743,51745,51747,51750],{"class":47,"line":2682},[45,51744,51644],{"class":257},[45,51746,51518],{"class":51},[45,51748,51749],{"class":257},"space-between",[45,51751,1373],{"class":51},[45,51753,51754],{"class":47,"line":2687},[45,51755,2612],{"class":51},[45,51757,51758],{"class":47,"line":2693},[45,51759,2483],{"emptyLinePlaceholder":133},[45,51761,51762,51764,51767,51770],{"class":47,"line":2699},[45,51763,51546],{"class":2046},[45,51765,51766],{"class":51381}," div",[45,51768,51769],{"class":51381}," span",[45,51771,15655],{"class":51},[45,51773,51774],{"class":47,"line":2704},[45,51775,2483],{"emptyLinePlaceholder":133},[45,51777,51778,51781,51783,51786,51788],{"class":47,"line":8031},[45,51779,51780],{"class":257},"            margin-top",[45,51782,51518],{"class":51},[45,51784,51785],{"class":257},"-20",[45,51787,51573],{"class":93},[45,51789,1373],{"class":51},[45,51791,51792],{"class":47,"line":8055},[45,51793,2612],{"class":51},[45,51795,51796],{"class":47,"line":8060},[45,51797,2483],{"emptyLinePlaceholder":133},[45,51799,51800,51802,51804,51807],{"class":47,"line":8066},[45,51801,51546],{"class":2046},[45,51803,51766],{"class":51381},[45,51805,51806],{"class":51381}," h4",[45,51808,15655],{"class":51},[45,51810,51811,51814,51816,51819,51821],{"class":47,"line":8093},[45,51812,51813],{"class":257},"            margin-bottom",[45,51815,51518],{"class":51},[45,51817,51818],{"class":257},"-35",[45,51820,51573],{"class":93},[45,51822,1373],{"class":51},[45,51824,51825,51827,51829,51831,51833],{"class":47,"line":8098},[45,51826,51565],{"class":257},[45,51828,51518],{"class":51},[45,51830,564],{"class":257},[45,51832,51573],{"class":93},[45,51834,1373],{"class":51},[45,51836,51837,51840,51842,51845,51847],{"class":47,"line":8104},[45,51838,51839],{"class":257},"            margin-left",[45,51841,51518],{"class":51},[45,51843,51844],{"class":257},"-10",[45,51846,51573],{"class":93},[45,51848,1373],{"class":51},[45,51850,51851],{"class":47,"line":8116},[45,51852,2612],{"class":51},[45,51854,51855,51858,51860],{"class":47,"line":8128},[45,51856,51857],{"class":51},"    \u003C\u002F",[45,51859,121],{"class":51381},[45,51861,51388],{"class":51},[45,51863,51864,51867,51869],{"class":47,"line":8140},[45,51865,51866],{"class":51},"\u003C\u002F",[45,51868,51415],{"class":51381},[45,51870,51388],{"class":51},[45,51872,51873],{"class":47,"line":9799},[45,51874,2483],{"emptyLinePlaceholder":133},[45,51876,51877,51879,51882],{"class":47,"line":9824},[45,51878,1117],{"class":51},[45,51880,51881],{"class":51381},"body",[45,51883,51388],{"class":51},[45,51885,51886],{"class":47,"line":9847},[45,51887,2483],{"emptyLinePlaceholder":133},[45,51889,51890,51892,51895],{"class":47,"line":9871},[45,51891,51422],{"class":51},[45,51893,51894],{"class":51381},"script",[45,51896,51388],{"class":51},[45,51898,51899],{"class":47,"line":9876},[45,51900,51901],{"class":267},"        \u002F\u002F 1. 四次弹框效果\n",[45,51903,51904],{"class":47,"line":9881},[45,51905,51906],{"class":267},"        \u002F\u002F 声明一个新的数组\n",[45,51908,51909,51912,51915,51917],{"class":47,"line":9886},[45,51910,51911],{"class":93},"        let",[45,51913,51914],{"class":51}," arr ",[45,51916,254],{"class":93},[45,51918,51919],{"class":51}," []\n",[45,51921,51922,51924,51926,51929,51931,51933,51935,51937,51939,51942,51944,51946],{"class":47,"line":9895},[45,51923,3486],{"class":93},[45,51925,1741],{"class":51},[45,51927,51928],{"class":93},"let",[45,51930,9521],{"class":51},[45,51932,254],{"class":93},[45,51934,25201],{"class":257},[45,51936,9528],{"class":51},[45,51938,1671],{"class":93},[45,51940,51941],{"class":257}," 4",[45,51943,3297],{"class":51},[45,51945,2375],{"class":93},[45,51947,12525],{"class":51},[45,51949,51950],{"class":47,"line":9900},[45,51951,51952],{"class":267},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[45,51954,51955],{"class":47,"line":9906},[45,51956,51957],{"class":267},"            \u002F\u002F arr.push(num)\n",[45,51959,51960,51963,51966,51968,51971,51973,51976,51978,51981],{"class":47,"line":9927},[45,51961,51962],{"class":51},"            arr.",[45,51964,51965],{"class":2046},"push",[45,51967,209],{"class":51},[45,51969,51970],{"class":2046},"prompt",[45,51972,209],{"class":51},[45,51974,51975],{"class":313},"`请输入第${",[45,51977,649],{"class":51},[45,51979,51980],{"class":313},"}季度的数据:`",[45,51982,30578],{"class":51},[45,51984,51985],{"class":47,"line":9933},[45,51986,51987],{"class":267},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[45,51989,51990],{"class":47,"line":9947},[45,51991,2612],{"class":51},[45,51993,51994],{"class":47,"line":9953},[45,51995,51996],{"class":267},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[45,51998,51999],{"class":47,"line":9980},[45,52000,52001],{"class":267},"        \u002F\u002F 盒子开头\n",[45,52003,52004,52007,52010,52012,52015],{"class":47,"line":9989},[45,52005,52006],{"class":51},"        document.",[45,52008,52009],{"class":2046},"write",[45,52011,209],{"class":51},[45,52013,52014],{"class":313},"` \u003Cdiv class=\"box\">`",[45,52016,215],{"class":51},[45,52018,52019],{"class":47,"line":9995},[45,52020,2483],{"emptyLinePlaceholder":133},[45,52022,52023],{"class":47,"line":10003},[45,52024,52025],{"class":267},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[45,52027,52028,52030,52032,52034,52036,52038,52040,52042,52044,52047,52050,52052,52054],{"class":47,"line":10008},[45,52029,3486],{"class":93},[45,52031,1741],{"class":51},[45,52033,51928],{"class":93},[45,52035,9521],{"class":51},[45,52037,254],{"class":93},[45,52039,4176],{"class":257},[45,52041,9528],{"class":51},[45,52043,1117],{"class":93},[45,52045,52046],{"class":51}," arr.",[45,52048,52049],{"class":257},"length",[45,52051,3297],{"class":51},[45,52053,2375],{"class":93},[45,52055,12525],{"class":51},[45,52057,52058,52061,52063,52065],{"class":47,"line":16687},[45,52059,52060],{"class":51},"            document.",[45,52062,52009],{"class":2046},[45,52064,209],{"class":51},[45,52066,52067],{"class":313},"`\n",[45,52069,52070,52073,52075,52077,52079,52081],{"class":47,"line":16693},[45,52071,52072],{"class":313},"              \u003Cdiv style=\"height: ${",[45,52074,3963],{"class":51},[45,52076,1097],{"class":313},[45,52078,649],{"class":51},[45,52080,1147],{"class":313},[45,52082,52083],{"class":313},"}px;\">\n",[45,52085,52086,52089,52091,52093,52095,52097],{"class":47,"line":16716},[45,52087,52088],{"class":313},"                \u003Cspan>${",[45,52090,3963],{"class":51},[45,52092,1097],{"class":313},[45,52094,649],{"class":51},[45,52096,1147],{"class":313},[45,52098,52099],{"class":313},"}\u003C\u002Fspan>\n",[45,52101,52102,52105,52107,52109,52111],{"class":47,"line":16722},[45,52103,52104],{"class":313},"                \u003Ch4>第${",[45,52106,649],{"class":51},[45,52108,45647],{"class":93},[45,52110,25201],{"class":257},[45,52112,52113],{"class":313},"}季度\u003C\u002Fh4>\n",[45,52115,52116],{"class":47,"line":16745},[45,52117,52118],{"class":313},"              \u003C\u002Fdiv>          \n",[45,52120,52121,52124],{"class":47,"line":16759},[45,52122,52123],{"class":313},"            `",[45,52125,215],{"class":51},[45,52127,52128],{"class":47,"line":16779},[45,52129,2612],{"class":51},[45,52131,52132],{"class":47,"line":16785},[45,52133,52134],{"class":267},"        \u002F\u002F 盒子结尾\n",[45,52136,52137,52139,52141,52143,52146],{"class":47,"line":16796},[45,52138,52006],{"class":51},[45,52140,52009],{"class":2046},[45,52142,209],{"class":51},[45,52144,52145],{"class":313},"` \u003C\u002Fdiv>`",[45,52147,215],{"class":51},[45,52149,52150,52152,52154],{"class":47,"line":16819},[45,52151,51857],{"class":51},[45,52153,51894],{"class":51381},[45,52155,51388],{"class":51},[45,52157,52158,52160,52162],{"class":47,"line":16841},[45,52159,51866],{"class":51},[45,52161,51881],{"class":51381},[45,52163,51388],{"class":51},[45,52165,52166],{"class":47,"line":16846},[45,52167,2483],{"emptyLinePlaceholder":133},[45,52169,52170,52172,52174],{"class":47,"line":16852},[45,52171,51866],{"class":51},[45,52173,50716],{"class":51381},[45,52175,51388],{"class":51},[176,52177,52179],{"id":52178},"_284-冒泡排序","2.8.4 冒泡排序",[35,52181,52183],{"className":50714,"code":52182,"language":50716,"meta":40,"style":40},"\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",[42,52184,52185,52195,52209,52213,52221,52236,52256,52268,52276,52280,52288,52296,52328,52361,52398,52403,52422,52427,52440,52455,52471,52475,52480,52484,52494,52503,52511,52515],{"__ignoreMap":40},[45,52186,52187,52189,52191,52193],{"class":47,"line":48},[45,52188,51378],{"class":51},[45,52190,51382],{"class":51381},[45,52192,51385],{"class":2046},[45,52194,51388],{"class":51},[45,52196,52197,52199,52201,52203,52205,52207],{"class":47,"line":125},[45,52198,1117],{"class":51},[45,52200,50716],{"class":51381},[45,52202,51397],{"class":2046},[45,52204,254],{"class":51},[45,52206,51402],{"class":313},[45,52208,51388],{"class":51},[45,52210,52211],{"class":47,"line":1262},[45,52212,2483],{"emptyLinePlaceholder":133},[45,52214,52215,52217,52219],{"class":47,"line":1277},[45,52216,1117],{"class":51},[45,52218,51415],{"class":51381},[45,52220,51388],{"class":51},[45,52222,52223,52226,52228,52230,52232,52234],{"class":47,"line":1283},[45,52224,52225],{"class":51},"  \u003C",[45,52227,51425],{"class":51381},[45,52229,51428],{"class":2046},[45,52231,254],{"class":51},[45,52233,51433],{"class":313},[45,52235,51388],{"class":51},[45,52237,52238,52240,52242,52244,52246,52248,52250,52252,52254],{"class":47,"line":1297},[45,52239,52225],{"class":51},[45,52241,51425],{"class":51381},[45,52243,15003],{"class":2046},[45,52245,254],{"class":51},[45,52247,51472],{"class":313},[45,52249,51452],{"class":2046},[45,52251,254],{"class":51},[45,52253,51479],{"class":313},[45,52255,51388],{"class":51},[45,52257,52258,52260,52262,52264,52266],{"class":47,"line":1303},[45,52259,52225],{"class":51},[45,52261,51488],{"class":51381},[45,52263,51491],{"class":51},[45,52265,51488],{"class":51381},[45,52267,51388],{"class":51},[45,52269,52270,52272,52274],{"class":47,"line":1394},[45,52271,51866],{"class":51},[45,52273,51415],{"class":51381},[45,52275,51388],{"class":51},[45,52277,52278],{"class":47,"line":1400},[45,52279,2483],{"emptyLinePlaceholder":133},[45,52281,52282,52284,52286],{"class":47,"line":1412},[45,52283,1117],{"class":51},[45,52285,51881],{"class":51381},[45,52287,51388],{"class":51},[45,52289,52290,52292,52294],{"class":47,"line":1695},[45,52291,52225],{"class":51},[45,52293,51894],{"class":51381},[45,52295,51388],{"class":51},[45,52297,52298,52301,52303,52305,52308,52310,52312,52314,52316,52318,52320,52322,52324,52326],{"class":47,"line":1700},[45,52299,52300],{"class":93},"    let",[45,52302,51914],{"class":51},[45,52304,254],{"class":93},[45,52306,52307],{"class":51}," [",[45,52309,527],{"class":257},[45,52311,12518],{"class":51},[45,52313,501],{"class":257},[45,52315,12518],{"class":51},[45,52317,280],{"class":257},[45,52319,12518],{"class":51},[45,52321,286],{"class":257},[45,52323,12518],{"class":51},[45,52325,426],{"class":257},[45,52327,33327],{"class":51},[45,52329,52330,52332,52334,52336,52338,52340,52342,52344,52346,52348,52350,52353,52355,52357,52359],{"class":47,"line":1706},[45,52331,3284],{"class":93},[45,52333,1741],{"class":51},[45,52335,51928],{"class":93},[45,52337,9521],{"class":51},[45,52339,254],{"class":93},[45,52341,4176],{"class":257},[45,52343,9528],{"class":51},[45,52345,1117],{"class":93},[45,52347,52046],{"class":51},[45,52349,52049],{"class":257},[45,52351,52352],{"class":93}," -",[45,52354,25201],{"class":257},[45,52356,3297],{"class":51},[45,52358,2375],{"class":93},[45,52360,12525],{"class":51},[45,52362,52363,52366,52368,52370,52372,52374,52376,52378,52380,52382,52384,52386,52388,52390,52392,52394,52396],{"class":47,"line":1711},[45,52364,52365],{"class":93},"      for",[45,52367,1741],{"class":51},[45,52369,51928],{"class":93},[45,52371,9583],{"class":51},[45,52373,254],{"class":93},[45,52375,4176],{"class":257},[45,52377,9590],{"class":51},[45,52379,1117],{"class":93},[45,52381,52046],{"class":51},[45,52383,52049],{"class":257},[45,52385,52352],{"class":93},[45,52387,9521],{"class":51},[45,52389,94],{"class":93},[45,52391,25201],{"class":257},[45,52393,9597],{"class":51},[45,52395,2375],{"class":93},[45,52397,12525],{"class":51},[45,52399,52400],{"class":47,"line":1725},[45,52401,52402],{"class":267},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[45,52404,52405,52407,52410,52412,52415,52417,52419],{"class":47,"line":1730},[45,52406,2580],{"class":93},[45,52408,52409],{"class":51}," (arr[j] ",[45,52411,1167],{"class":93},[45,52413,52414],{"class":51}," arr[j ",[45,52416,689],{"class":93},[45,52418,25201],{"class":257},[45,52420,52421],{"class":51},"]) {\n",[45,52423,52424],{"class":47,"line":1736},[45,52425,52426],{"class":267},"          \u002F\u002F 交换两个变量\n",[45,52428,52429,52432,52435,52437],{"class":47,"line":1757},[45,52430,52431],{"class":93},"          let",[45,52433,52434],{"class":51}," tmp ",[45,52436,254],{"class":93},[45,52438,52439],{"class":51}," arr[j]\n",[45,52441,52442,52445,52447,52449,52451,52453],{"class":47,"line":1762},[45,52443,52444],{"class":51},"          arr[j] ",[45,52446,254],{"class":93},[45,52448,52414],{"class":51},[45,52450,689],{"class":93},[45,52452,25201],{"class":257},[45,52454,33327],{"class":51},[45,52456,52457,52460,52462,52464,52466,52468],{"class":47,"line":1776},[45,52458,52459],{"class":51},"          arr[j ",[45,52461,689],{"class":93},[45,52463,25201],{"class":257},[45,52465,4526],{"class":51},[45,52467,254],{"class":93},[45,52469,52470],{"class":51}," tmp\n",[45,52472,52473],{"class":47,"line":1781},[45,52474,2612],{"class":51},[45,52476,52477],{"class":47,"line":1810},[45,52478,52479],{"class":51},"      }\n",[45,52481,52482],{"class":47,"line":1815},[45,52483,2270],{"class":51},[45,52485,52486,52489,52491],{"class":47,"line":1832},[45,52487,52488],{"class":51},"    document.",[45,52490,52009],{"class":2046},[45,52492,52493],{"class":51},"(arr)\n",[45,52495,52496,52499,52501],{"class":47,"line":1837},[45,52497,52498],{"class":51},"  \u003C\u002F",[45,52500,51894],{"class":51381},[45,52502,51388],{"class":51},[45,52504,52505,52507,52509],{"class":47,"line":1842},[45,52506,51866],{"class":51},[45,52508,51881],{"class":51381},[45,52510,51388],{"class":51},[45,52512,52513],{"class":47,"line":1847},[45,52514,2483],{"emptyLinePlaceholder":133},[45,52516,52517,52519,52521],{"class":47,"line":1861},[45,52518,51866],{"class":51},[45,52520,50716],{"class":51381},[45,52522,51388],{"class":51},[10,52524,52525],{},[1545,52526],{"alt":40,"src":52527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[10,52529,52530],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[10,52532,52533],{},"let arr = [4, 2, 5, 1, 3]",[10,52535,52536],{},"\u002F\u002F 1.升序排列写法",[10,52538,52539],{},"arr.sort(function (a, b) {",[10,52541,52542],{},"return a - b",[10,52544,52545],{},"})",[10,52547,52548],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[10,52550,52551],{},"\u002F\u002F 降序排列写法",[10,52553,52539],{},[10,52555,52556],{},"return b - a",[10,52558,52545],{},[10,52560,52561],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[30,52563,52565],{"id":52564},"_29-函数","2.9 函数",[10,52567,52568],{},[1545,52569],{"alt":40,"src":52570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[10,52572,52573],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[10,52575,52576],{},"函数的声明用function",[10,52578,52579],{},"函数里边可以嵌套函数",[176,52581,52583],{"id":52582},"_291-函数传参","2.9.1 函数传参",[10,52585,52586],{},[1545,52587],{"alt":40,"src":52588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[10,52590,52591],{},[1545,52592],{"alt":40,"src":52593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1214,52595,52596,52599,52602,52605,52608,52611],{},[162,52597,52598],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[162,52600,52601],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[162,52603,52604],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[162,52606,52607],{},"开发中尽量保持形参和实参个数一致",[162,52609,52610],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[162,52612,52613],{},"形参只在函数中有用，所以不需要进行声明这个变量",[10,52615,52616],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[176,52618,52620],{"id":52619},"_292-函数的返回值","2.9.2 函数的返回值",[10,52622,52623],{},[1545,52624],{"alt":40,"src":52625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[10,52627,52628],{},[1545,52629],{"alt":40,"src":52630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1214,52632,52633,52636,52639,52642,52645],{},[162,52634,52635],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[162,52637,52638],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[162,52640,52641],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[162,52643,52644],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[162,52646,52647],{},"断点调试:进入函数内部看执行过程F11",[176,52649,52651],{"id":52650},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[35,52653,52655],{"className":50714,"code":52654,"language":50716,"meta":40,"style":40},"    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",[42,52656,52657,52662,52667,52671,52676],{"__ignoreMap":40},[45,52658,52659],{"class":47,"line":48},[45,52660,52661],{"class":51},"    function fn(a, b) {\n",[45,52663,52664],{"class":47,"line":125},[45,52665,52666],{"class":51},"      console.log(a + b);\n",[45,52668,52669],{"class":47,"line":1262},[45,52670,2270],{"class":51},[45,52672,52673],{"class":47,"line":1277},[45,52674,52675],{"class":51},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[45,52677,52678],{"class":47,"line":1283},[45,52679,52680],{"class":51},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[176,52682,52684],{"id":52683},"_294-作用域","2.9.4 作用域",[1214,52686,52687,52693,52698,52701,52704],{},[162,52688,52689,52690],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[358,52691,52692],{},"作用域",[162,52694,52695],{},[358,52696,52697],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[162,52699,52700],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[162,52702,52703],{},"函数内部可以直接所使用全局变量",[162,52705,52706],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[10,52708,14716],{},[35,52710,52712],{"className":50714,"code":52711,"language":50716,"meta":40,"style":40},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[42,52713,52714,52719,52724,52728,52733,52738,52743],{"__ignoreMap":40},[45,52715,52716],{"class":47,"line":48},[45,52717,52718],{"class":51},"    function fun() {\n",[45,52720,52721],{"class":47,"line":125},[45,52722,52723],{"class":51},"      num = 10\n",[45,52725,52726],{"class":47,"line":1262},[45,52727,2270],{"class":51},[45,52729,52730],{"class":47,"line":1277},[45,52731,52732],{"class":51},"    fun()\n",[45,52734,52735],{"class":47,"line":1283},[45,52736,52737],{"class":51},"    console.log(num)\n",[45,52739,52740],{"class":47,"line":1297},[45,52741,52742],{"class":51},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[45,52744,52745],{"class":47,"line":1303},[45,52746,52747],{"class":51},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1214,52749,52750,52753],{},[162,52751,52752],{},"函数内部的形参可以看做是局部变量",[162,52754,52755],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[10,52757,52758,52759],{},"变量访问原则： ",[358,52760,52761],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[176,52763,52765],{"id":52764},"_295-匿名函数","2.9.5 匿名函数",[10,52767,52768],{},"函数可以分为具名函数和匿名函数",[10,52770,52771],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[159,52773,52774],{},[162,52775,52776],{},"函数表达式",[10,52778,52779],{},[1545,52780],{"alt":40,"src":52781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[10,52783,52784],{},"里边也可以写参数",[10,52786,52787],{},"具名函数调用位置可以随意调整；",[10,52789,52790],{},"匿名函数函数表达式形式只能在声明后才可以使用",[159,52792,52793],{"start":125},[162,52794,52795],{},"立即执行函数",[10,52797,52798],{},[1545,52799],{"alt":40,"src":52800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[10,52802,52803],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[10,52805,52806],{},"写法：两个小括号，然后在第一个小括号中写function",[10,52808,52809],{},"(function () {})();",[10,52811,52812],{},"不要落下最后的;",[10,52814,52815],{},"立即执行函数必须要加;",[10,52817,52818],{},"分号写前写后都没问题",[10,52820,52821],{},"写前：",[10,52823,52824],{},"(function() {})()",[10,52826,52827],{},";(function () {})();",[10,52829,52830],{},"写后:",[10,52832,52833],{},"(function() {})();",[10,52835,52809],{},[10,52837,52838],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[10,52840,52841],{},"还有一种写法：",[10,52843,52844],{},"(function(){}());",[10,52846,52847],{},"或者:",[10,52849,52850],{},"!function(){}();",[10,52852,52853],{},"立即执行函数有时候也是可以加名字的：",[10,52855,52856],{},"(function flexible(window,document) {}(window,document));",[10,52858,52859],{},"省一些调用方法",[176,52861,52863],{"id":52862},"_296-逻辑中断","2.9.6 逻辑中断!!!",[10,52865,52866],{},[1545,52867],{"alt":40,"src":52868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[10,52870,52871],{},"这样就不用非得给x,y初始化了",[10,52873,52874],{},[1545,52875],{"alt":40,"src":52876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[10,52878,52879],{},"代码执行时先看左边",[10,52881,52882],{},"例如：console.log(false && 3+5)",[10,52884,52885],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[10,52887,52888],{},"&&都是真时，就返回最后一个真值",[10,52890,52891],{},"console.log(11 && 22)",[10,52893,52894],{},"输出22",[10,52896,52897],{},"逻辑与：遇真则真",[10,52899,14716],{},[10,52901,52902],{},"let age=1",[10,52904,52905],{},"console.log(11 || age++)",[10,52907,52908],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[10,52910,52911],{},"console.log(11 || 22)",[10,52913,52914],{},"||逻辑或遇到真就直接输出，输出结果为11",[10,52916,52917],{},"||如果都是假的话，就取最后一个假的值了",[176,52919,52921],{"id":52920},"_297-转换为boolean型","2.9.7 转换为Boolean型",[10,52923,52924],{},"显示转换：",[10,52926,52927,52930,52931],{},[358,52928,52929],{},"记忆","： ",[358,52932,52933],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[10,52935,52936],{},"空字符串为假，其他字符串全为真",[10,52938,52939],{},[1545,52940],{"alt":40,"src":52941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[10,52943,52944],{},"隐式转换：",[10,52946,52947],{},[1545,52948],{"alt":40,"src":52949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[10,52951,52952],{},"隐式转换:",[10,52954,52955],{},"null+3=3",[10,52957,52958],{},"undefined+3=NaN",[10,52960,52961],{},"null==undefined 输出true,他两个都当0看",[10,52963,52964],{},"null===undefined 输出false",[10,52966,52967],{},"undefined做任何操作都是NaN",[10,52969,52970],{},"NaN不等于NaN，NaN表示计算错误",[30,52972,52974],{"id":52973},"_210-对象","2.10 对象",[176,52976,52978],{"id":52977},"_2101-对象的介绍","2.10.1 对象的介绍",[10,52980,52981],{},"对象也是一种数据类型，里边的数据是无序的",[10,52983,52984],{},"对象由属性和方法组成",[10,52986,52987],{},[1545,52988],{"alt":40,"src":52989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[10,52991,52992],{},[1545,52993],{"alt":40,"src":52994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[10,52996,52997],{},[1545,52998],{"alt":40,"src":52999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[176,53001,53003],{"id":53002},"_2102-对象属性","2.10.2 对象属性",[10,53005,53006],{},[1545,53007],{"alt":40,"src":53008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[159,53010,53011],{},[162,53012,53013],{},"查询对象",[10,53015,53016],{},"对象名.属性 goods.uname",[10,53018,53019],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[10,53021,53022],{},"不带字符串的属性名也可以使用 对象名['属性名']",[10,53024,53025],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[10,53027,53028],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[159,53030,53031],{"start":125},[162,53032,53033],{},"重新赋值",[10,53035,53036],{},"对象名.属性=新值",[159,53038,53039],{"start":1262},[162,53040,53041],{},"增加新数据",[10,53043,53036],{},[159,53045,53046],{"start":1277},[162,53047,53048],{},"删除对象中的属性",[10,53050,53051],{},"delete 对象名.属性",[176,53053,53055],{"id":53054},"_2103-对象方法","2.10.3 对象方法",[10,53057,53058],{},[1545,53059],{"alt":40,"src":53060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[10,53062,53063],{},"后边跟的是匿名函数",[10,53065,53066],{},"对象外面的叫函数；对象内部的叫方法",[10,53068,53069],{},[1545,53070],{"alt":40,"src":53071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[176,53073,53075],{"id":53074},"_2104-遍历对象","2.10.4 遍历对象",[10,53077,53078],{},"理解为加括号的python字典遍历",[10,53080,53081],{},[1545,53082],{"alt":40,"src":53083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[10,53085,53086],{},"k是字符串类型",[10,53088,53089],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[35,53091,53093],{"className":50714,"code":53092,"language":50716,"meta":40,"style":40},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[42,53094,53095,53100,53105,53110,53115],{"__ignoreMap":40},[45,53096,53097],{"class":47,"line":48},[45,53098,53099],{"class":51},"   let arr = [1, 2, 3]\n",[45,53101,53102],{"class":47,"line":125},[45,53103,53104],{"class":51},"    for (let k in arr) {\n",[45,53106,53107],{"class":47,"line":1262},[45,53108,53109],{"class":51},"      console.log(k)\n",[45,53111,53112],{"class":47,"line":1277},[45,53113,53114],{"class":51},"      console.log(arr[k])\n",[45,53116,53117],{"class":47,"line":1283},[45,53118,2270],{"class":51},[10,53120,53121],{},[1545,53122],{"alt":40,"src":53123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[10,53125,53126],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[10,53128,53129],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[10,53131,53132],{},"for in 得到的k是属性名",[51894,53134,53135],{},"\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",[10,53137,53138],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[176,53140,53142],{"id":53141},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[10,53144,53145],{},"数组中放对象信息",[35,53147,53151],{"className":53148,"code":53149,"language":53150,"meta":40,"style":40},"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",[42,53152,53153,53161,53166,53171,53176,53181,53186,53191,53196,53201,53206,53211,53216,53220,53224],{"__ignoreMap":40},[45,53154,53155,53157,53159],{"class":47,"line":48},[45,53156,1117],{"class":51},[45,53158,51894],{"class":51381},[45,53160,51388],{"class":51},[45,53162,53163],{"class":47,"line":125},[45,53164,53165],{"class":51},"    let students = [\n",[45,53167,53168],{"class":47,"line":1262},[45,53169,53170],{"class":51},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[45,53172,53173],{"class":47,"line":1277},[45,53174,53175],{"class":51},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[45,53177,53178],{"class":47,"line":1283},[45,53179,53180],{"class":51},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[45,53182,53183],{"class":47,"line":1297},[45,53184,53185],{"class":51},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[45,53187,53188],{"class":47,"line":1303},[45,53189,53190],{"class":51},"    ]\n",[45,53192,53193],{"class":47,"line":1394},[45,53194,53195],{"class":51},"    for (let i = 0; i \u003C students.length; i++) {\n",[45,53197,53198],{"class":47,"line":1400},[45,53199,53200],{"class":51},"      for (let k in students[i]) {\n",[45,53202,53203],{"class":47,"line":1412},[45,53204,53205],{"class":51},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[45,53207,53208],{"class":47,"line":1695},[45,53209,53210],{"class":51},"        \u002F\u002F输出每个人的名字：\n",[45,53212,53213],{"class":47,"line":1700},[45,53214,53215],{"class":51},"        \u002F\u002Fconsole.log(students[i].name)\n",[45,53217,53218],{"class":47,"line":1706},[45,53219,52479],{"class":51},[45,53221,53222],{"class":47,"line":1711},[45,53223,2270],{"class":51},[45,53225,53226,53228,53230],{"class":47,"line":1725},[45,53227,52498],{"class":51},[45,53229,51894],{"class":51381},[45,53231,51388],{"class":51},[176,53233,53235],{"id":53234},"_2106-内置对象","2.10.6 内置对象",[10,53237,53238],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[159,53240,53241],{},[162,53242,53243],{},"数学对象Math",[10,53245,53246],{},[1545,53247],{"alt":40,"src":53248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[10,53250,53251],{},[13,53252,53255],{"href":53253,"rel":53254},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[17],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[10,53257,53258],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[10,53260,53261],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[10,53263,53264],{},"数组不可以使用Math中的max,min来求最大值与最小值",[10,53266,53267],{},"null是一个空对象，可以认为：null类似于let obj={}",[10,53269,53270],{},"null属于对象数据类型",[159,53272,53273],{"start":125},[162,53274,53275],{},"生成任意范围随机数",[10,53277,53278],{},[1545,53279],{"alt":40,"src":53280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[10,53282,53283],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[10,53285,53286],{},"乘以几就取不到几",[10,53288,53289],{},"取数组中的随机元素：",[10,53291,53292],{},"let arr = ['red', 'green', 'blue']",[10,53294,53295],{},"let random = Math.floor(Math.random() * arr.length)",[10,53297,53298],{},"console.log(arr[random])",[10,53300,53301],{},"这个函数得到的是全闭区间",[10,53303,53304],{},"function getRandom(N, M) {",[10,53306,53307],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[10,53309,1153],{},[10,53311,53312],{},"console.log(getRandom(4, 8))",[176,53314,53316],{"id":53315},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[10,53318,53319],{},[1545,53320],{"alt":40,"src":53321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[10,53323,53324],{},[1545,53325],{"alt":40,"src":53326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[10,53328,53329],{},[1545,53330],{"alt":40,"src":53331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[10,53333,53334],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[10,53336,53337],{},[1545,53338],{"alt":40,"src":53339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[10,53341,53342],{},[1545,53343],{"alt":40,"src":53344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[10,53346,53347],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[10,53349,53350],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[10,53352,53353],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[121,53355,53356],{},"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":40,"searchDepth":125,"depth":125,"links":53358},[53359,53367,53368,53369,53370,53371,53378,53382,53388,53397],{"id":50549,"depth":125,"text":50550,"children":53360},[53361,53362,53363,53364,53365,53366],{"id":50553,"depth":1262,"text":50554},{"id":50570,"depth":1262,"text":50571},{"id":50610,"depth":1262,"text":50611},{"id":50622,"depth":1262,"text":50623},{"id":50631,"depth":1262,"text":50632},{"id":50679,"depth":1262,"text":50680},{"id":50689,"depth":125,"text":50690},{"id":50777,"depth":125,"text":50778},{"id":50800,"depth":125,"text":50801},{"id":50812,"depth":125,"text":50813},{"id":50999,"depth":125,"text":51000,"children":53372},[53373,53374,53375,53376,53377],{"id":51003,"depth":1262,"text":51004},{"id":51012,"depth":1262,"text":51013},{"id":51040,"depth":1262,"text":51041},{"id":51076,"depth":1262,"text":51077},{"id":51101,"depth":1262,"text":51102},{"id":51113,"depth":125,"text":51114,"children":53379},[53380,53381],{"id":51134,"depth":1262,"text":51135},{"id":51228,"depth":1262,"text":51229},{"id":51286,"depth":125,"text":51287,"children":53383},[53384,53385,53386,53387],{"id":51290,"depth":1262,"text":51291},{"id":51314,"depth":1262,"text":51315},{"id":51367,"depth":1262,"text":51368},{"id":52178,"depth":1262,"text":52179},{"id":52564,"depth":125,"text":52565,"children":53389},[53390,53391,53392,53393,53394,53395,53396],{"id":52582,"depth":1262,"text":52583},{"id":52619,"depth":1262,"text":52620},{"id":52650,"depth":1262,"text":52651},{"id":52683,"depth":1262,"text":52684},{"id":52764,"depth":1262,"text":52765},{"id":52862,"depth":1262,"text":52863},{"id":52920,"depth":1262,"text":52921},{"id":52973,"depth":125,"text":52974,"children":53398},[53399,53400,53401,53402,53403,53404,53405],{"id":52977,"depth":1262,"text":52978},{"id":53002,"depth":1262,"text":53003},{"id":53054,"depth":1262,"text":53055},{"id":53074,"depth":1262,"text":53075},{"id":53141,"depth":1262,"text":53142},{"id":53234,"depth":1262,"text":53235},{"id":53315,"depth":1262,"text":53316},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50541,"description":130},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53412,"title":53413,"body":53414,"description":130,"extension":131,"meta":76754,"navigation":133,"path":76755,"seo":76756,"stem":76757,"__hash__":76758},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53415,"toc":76694},[53416,53419,53422,53425,53430,53433,53436,53439,53443,53447,53453,53458,53466,53473,53476,53480,53485,53490,53495,53498,53501,53512,53515,53519,53522,53525,53530,53535,53540,53543,53546,53638,53641,53646,53649,53654,53657,53660,53665,53668,53673,53677,53680,53694,53698,53703,53706,53709,53713,53718,53721,53725,53729,53734,53738,53743,53746,53749,53752,53755,53758,53761,53766,53771,53799,53802,53805,53808,53813,53816,53819,53822,53825,53829,53858,53862,53867,53872,53875,53878,53881,53886,54001,54006,54011,54172,54177,54180,54184,54189,54194,54197,54200,54203,54206,54209,54212,54215,54218,54221,54224,54227,54230,54233,54236,54238,54241,54244,54247,54252,54256,54653,54656,54662,54666,54671,55953,55958,55961,55964,55967,55972,57168,57172,57178,57183,57186,57191,57196,57200,57204,57209,57212,57217,57220,57223,57227,58135,58138,58142,58363,58366,58369,58372,58598,58601,58825,58828,58832,58837,58840,58843,59071,59074,59107,59110,59114,59119,59123,59126,59129,59132,59135,59138,59141,59144,59149,60429,60433,60436,61529,61533,61536,61539,61542,61545,61549,61552,61555,61557,61565,63046,63050,63053,63056,63059,63268,63271,63275,63279,63284,63289,63292,63295,63300,63304,63309,63312,63421,63425,63430,63435,63438,63441,63445,63450,63455,63460,63463,63466,63477,63480,63485,63490,63493,63496,63569,63573,63578,63581,63583,63594,63598,63603,64929,64932,64935,64938,64940,64943,64946,64949,64952,64955,64958,64961,64964,64967,64970,64973,64976,64978,64980,64983,64987,66081,66084,66087,66103,66117,66120,66125,66131,66136,66140,66144,66149,66153,66158,66600,66605,66608,66612,66617,66620,66623,66627,66632,66636,66641,66646,66650,66655,66660,66663,66668,66673,66677,66682,66687,66791,66794,66798,66803,67169,67172,67175,67178,67181,67184,67187,67190,67193,68489,68493,68498,68503,68506,68509,68512,68515,68517,68522,68527,68530,68534,68539,68544,68549,68552,68555,68558,68561,68564,68569,68572,68576,68581,68586,68590,68595,68598,68603,68606,68609,68612,68615,68618,68623,68626,68629,68632,68635,68639,68644,68647,68651,68656,68659,68662,68666,68695,68698,68702,68706,68711,68715,68720,68723,68726,68729,68732,68735,68738,68741,68744,68747,68750,68753,68756,68759,68762,68766,68771,68776,68779,68783,68787,68792,68795,68799,68802,68805,68810,68815,68820,68825,68830,68833,68836,68841,68846,68850,68855,68858,68863,68866,68869,68872,68875,68880,68883,68892,68896,68901,68904,68907,68911,68914,68919,68923,68926,68932,68938,68942,68968,68971,70532,70535,71031,71034,71039,71044,71049,71053,71058,71063,71068,71072,71077,71080,71083,71086,71089,71093,71096,71101,71104,71109,71113,71118,71121,71126,71131,71136,71139,71142,71147,71152,71155,71158,71162,71165,71170,71173,71178,71181,71186,71191,71196,71199,71204,71269,71272,71283,71287,71292,71464,71468,71473,71476,71479,71482,71486,71497,71501,71504,71509,71514,71517,71520,71523,71526,71529,71531,71534,71537,71540,71545,71548,71553,71556,71560,71563,71566,71580,71584,71587,71642,71647,71650,71653,71658,71661,71665,71670,71800,71804,71809,71814,71895,71900,71904,71907,71912,71917,71923,71926,71929,71932,71936,71941,71944,71955,71959,71976,75023,75027,75030,75033,75036,75057,75061,75064,75072,75075,75080,75083,75086,75091,75096,75100,75121,75125,75130,75133,75136,75139,75142,75146,75151,75154,75158,75163,75166,75171,75174,75179,75182,75187,76390,76394,76399,76402,76407,76691],[20,53417,53413],{"id":53418},"_3web-apis",[10,53420,53421],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[10,53423,53424],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[10,53426,53427],{},[1545,53428],{"alt":40,"src":53429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[10,53431,53432],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[10,53434,53435],{},"建议数组和对象使用 const 来声明",[10,53437,53438],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[30,53440,53442],{"id":53441},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[176,53444,53446],{"id":53445},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[10,53448,53449,53452],{},[42,53450,53451],{},"document"," = HTML 文件解析后的对象化表示；",[10,53454,53455,53457],{},[42,53456,53451],{}," ≠ HTML 文件本身",[10,53459,53460,53465],{},[358,53461,53462],{},[42,53463,53464],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[10,53467,53468,53472],{},[358,53469,53470],{},[42,53471,53451],{}," ：容器里的内容，代表当前加载的网页（DOM）",[10,53474,53475],{},"document实际上为window.document的简写",[176,53477,53479],{"id":53478},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[10,53481,53482],{},[1545,53483],{"alt":40,"src":53484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[10,53486,53487],{},[1545,53488],{"alt":40,"src":53489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[10,53491,53492],{},[1545,53493],{"alt":40,"src":53494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[10,53496,53497],{},"console.dir()",[10,53499,53500],{},"dir用来打印对象",[1214,53502,53503,53506,53509],{},[162,53504,53505],{},"任何一个标签，都是一个对象",[162,53507,53508],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[162,53510,53511],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[10,53513,53514],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[176,53516,53518],{"id":53517},"_312-获取dom对象","3.1.2 获取DoM对象",[10,53520,53521],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[10,53523,53524],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[10,53526,53527],{},[358,53528,53529],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[159,53531,53532],{},[162,53533,53534],{},"利用CSS选择器来获取标签元素",[10,53536,53537],{},[1545,53538],{"alt":40,"src":53539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[10,53541,53542],{},"里边的选择器必须必须加引号！！！",[10,53544,53545],{},"只选择第一个元素",[35,53547,53549],{"className":53148,"code":53548,"language":53150,"meta":40,"style":40},"\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",[42,53550,53551,53559,53580,53599,53607,53612,53617,53622,53630],{"__ignoreMap":40},[45,53552,53553,53555,53557],{"class":47,"line":48},[45,53554,1117],{"class":51},[45,53556,51881],{"class":51381},[45,53558,51388],{"class":51},[45,53560,53561,53563,53565,53568,53570,53573,53576,53578],{"class":47,"line":125},[45,53562,52225],{"class":51},[45,53564,51692],{"class":51381},[45,53566,53567],{"class":2046}," class",[45,53569,254],{"class":51},[45,53571,53572],{"class":313},"\"box\"",[45,53574,53575],{"class":51},">123\u003C\u002F",[45,53577,51692],{"class":51381},[45,53579,51388],{"class":51},[45,53581,53582,53584,53586,53588,53590,53592,53595,53597],{"class":47,"line":1262},[45,53583,52225],{"class":51},[45,53585,51692],{"class":51381},[45,53587,53567],{"class":2046},[45,53589,254],{"class":51},[45,53591,53572],{"class":313},[45,53593,53594],{"class":51},">456\u003C\u002F",[45,53596,51692],{"class":51381},[45,53598,51388],{"class":51},[45,53600,53601,53603,53605],{"class":47,"line":1277},[45,53602,52225],{"class":51},[45,53604,51894],{"class":51381},[45,53606,51388],{"class":51},[45,53608,53609],{"class":47,"line":1283},[45,53610,53611],{"class":51},"    \u002F\u002F 1.获取匹配的第一个元素\n",[45,53613,53614],{"class":47,"line":1297},[45,53615,53616],{"class":51},"    const box = document.querySelector('div')\n",[45,53618,53619],{"class":47,"line":1303},[45,53620,53621],{"class":51},"    console.dir(box)\n",[45,53623,53624,53626,53628],{"class":47,"line":1394},[45,53625,52498],{"class":51},[45,53627,51894],{"class":51381},[45,53629,51388],{"class":51},[45,53631,53632,53634,53636],{"class":47,"line":1400},[45,53633,51866],{"class":51},[45,53635,51881],{"class":51381},[45,53637,51388],{"class":51},[10,53639,53640],{},"只选123，不选456",[10,53642,53643],{},[1545,53644],{"alt":40,"src":53645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[10,53647,53648],{},"返回的是一个数组的集合，不能对其进行直接修改",[10,53650,53651],{},[1545,53652],{"alt":40,"src":53653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[10,53655,53656],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[10,53658,53659],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[159,53661,53662],{"start":125},[162,53663,53664],{},"其他方法来获取标签元素",[10,53666,53667],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[10,53669,53670],{},[1545,53671],{"alt":40,"src":53672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[176,53674,53676],{"id":53675},"_313-操作元素的内容","3.1.3 操作元素的内容",[10,53678,53679],{},"设置修改DOM元素内容有两种方式：",[1214,53681,53682,53685,53688,53691],{},[162,53683,53684],{},"元素.innerText=''",[162,53686,53687],{},"元素.innerHTML=''",[162,53689,53690],{},"不写字符串输出数字也是可以的",[162,53692,53693],{},"元素.innerHtml=1",[22081,53695,53697],{"id":53696},"_3131-innertext","3.1.3.1 innerText",[10,53699,53700],{},[1545,53701],{"alt":40,"src":53702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[10,53704,53705],{},"思路：实现了修改盒子中的内容！",[10,53707,53708],{},"它只显示纯文本，不解析标签",[22081,53710,53712],{"id":53711},"_3132-innerhtml","3.1.3.2 innerHTML",[10,53714,53715],{},[1545,53716],{"alt":40,"src":53717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[10,53719,53720],{},"相比于innerText，他的强大之处在于可以解析标签",[176,53722,53724],{"id":53723},"_314-操作元素属性","3.1.4 操作元素属性",[22081,53726,53728],{"id":53727},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[10,53730,53731],{},[1545,53732],{"alt":40,"src":53733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22081,53735,53737],{"id":53736},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[10,53739,53740],{},[1545,53741],{"alt":40,"src":53742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[10,53744,53745],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[10,53747,53748],{},"div.style.backgroundColor = 'hotpink'",[10,53750,53751],{},"如果按照css的写法，-表示减，就会出错",[10,53753,53754],{},"body元素不需要再获取，直接用就行！！！！！！",[10,53756,53757],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[10,53759,53760],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[10,53762,53763],{},[1545,53764],{"alt":40,"src":53765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[10,53767,53768],{},[1545,53769],{"alt":40,"src":53770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[159,53772,53773,53776,53779,53782,53785,53788],{},[162,53774,53775],{},"className这个方式就是修改很多样式的时候来使用的！",[162,53777,53778],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[162,53780,53781],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[162,53783,53784],{},"className为属性名，如果还用class的话就导致与关键字冲突",[162,53786,53787],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[162,53789,53790,53791,53796],{},"解析标签的时候就变为了",[51692,53792],{"className":53793},[53794,53795],"nav","box",[53797,53798],"br",{},[10,53800,53801],{},"例子：",[51692,53803],{"className":53804},[53794],[51894,53806,53807],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[10,53809,53810],{},[1545,53811],{"alt":40,"src":53812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[10,53814,53815],{},"追加和删除类名用classList",[10,53817,53818],{},"常用于类似于开关的操作",[10,53820,53821],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[10,53823,53824],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22081,53826,53828],{"id":53827},"_3143-牢记点","3.1.4.3 牢记点",[159,53830,53831,53834,53837,53840,53843,53846,53849,53852,53855],{},[162,53832,53833],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[162,53835,53836],{},"使用style属性操作css时不要忘记引号",[162,53838,53839],{},"使用className或者classList时也不要忘记引号",[162,53841,53842],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[162,53844,53845],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[162,53847,53848],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[162,53850,53851],{},"若： let arr=['1','2',3] arr[0]=1",[162,53853,53854],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[162,53856,53857],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[176,53859,53861],{"id":53860},"_315-操作表单元素","3.1.5 操作表单元素",[159,53863,53864],{},[162,53865,53866],{},"天生的属性",[10,53868,53869],{},[1545,53870],{"alt":40,"src":53871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[10,53873,53874],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[10,53876,53877],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[10,53879,53880],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[10,53882,53883],{},[1545,53884],{"alt":40,"src":53885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[35,53887,53889],{"className":50714,"code":53888,"language":50716,"meta":40,"style":40},"在复选框中如果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",[42,53890,53891,53896,53928,53933,53938,53943,53948,53952,53957,53962,53979,53991,53996],{"__ignoreMap":40},[45,53892,53893],{"class":47,"line":48},[45,53894,53895],{"class":51},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[45,53897,53898,53900,53903,53906,53908,53911,53913,53915,53917,53919,53921,53923,53926],{"class":47,"line":125},[45,53899,1117],{"class":51},[45,53901,53902],{"class":51381},"input",[45,53904,53905],{"class":2046}," type",[45,53907,254],{"class":51},[45,53909,53910],{"class":313},"\"checkbox\"",[45,53912,15003],{"class":2046},[45,53914,254],{"class":51},[45,53916,7735],{"class":313},[45,53918,15042],{"class":2046},[45,53920,254],{"class":51},[45,53922,7735],{"class":313},[45,53924,53925],{"class":2046}," checked",[45,53927,51388],{"class":51},[45,53929,53930],{"class":47,"line":1262},[45,53931,53932],{"class":51},"不选的话：\n",[45,53934,53935],{"class":47,"line":1277},[45,53936,53937],{"class":51},"const input = document.querySelector('input')\n",[45,53939,53940],{"class":47,"line":1283},[45,53941,53942],{"class":51},"input.checked=false\n",[45,53944,53945],{"class":47,"line":1297},[45,53946,53947],{"class":51},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[45,53949,53950],{"class":47,"line":1303},[45,53951,2483],{"emptyLinePlaceholder":133},[45,53953,53954],{"class":47,"line":1394},[45,53955,53956],{"class":51},"禁用按钮：\n",[45,53958,53959],{"class":47,"line":1400},[45,53960,53961],{"class":51},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[45,53963,53964,53966,53969,53972,53975,53977],{"class":47,"line":1412},[45,53965,1117],{"class":51},[45,53967,53968],{"class":51381},"button",[45,53970,53971],{"class":2046}," disabled",[45,53973,53974],{"class":51},">点击\u003C\u002F",[45,53976,53968],{"class":51381},[45,53978,51388],{"class":51},[45,53980,53981,53983,53985,53987,53989],{"class":47,"line":1695},[45,53982,1117],{"class":51},[45,53984,53968],{"class":51381},[45,53986,53974],{"class":51},[45,53988,53968],{"class":51381},[45,53990,51388],{"class":51},[45,53992,53993],{"class":47,"line":1700},[45,53994,53995],{"class":51},"const bt = document.querySelector('button')\n",[45,53997,53998],{"class":47,"line":1706},[45,53999,54000],{"class":51},"bt.disabled = false\n",[159,54002,54003],{"start":125},[162,54004,54005],{},"自定义属性",[10,54007,54008],{},[1545,54009],{"alt":40,"src":54010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[35,54012,54014],{"className":53148,"code":54013,"language":53150,"meta":40,"style":40},"\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",[42,54015,54016,54024,54052,54071,54090,54109,54128,54136,54141,54146,54151,54156,54164],{"__ignoreMap":40},[45,54017,54018,54020,54022],{"class":47,"line":48},[45,54019,1117],{"class":51},[45,54021,51881],{"class":51381},[45,54023,51388],{"class":51},[45,54025,54026,54028,54030,54033,54035,54037,54040,54042,54045,54048,54050],{"class":47,"line":125},[45,54027,52225],{"class":51},[45,54029,51692],{"class":51381},[45,54031,54032],{"class":2046}," data-id",[45,54034,254],{"class":51},[45,54036,3761],{"class":313},[45,54038,54039],{"class":2046}," data-spm",[45,54041,254],{"class":51},[45,54043,54044],{"class":313},"\"我不知道\"",[45,54046,54047],{"class":51},">1\u003C\u002F",[45,54049,51692],{"class":51381},[45,54051,51388],{"class":51},[45,54053,54054,54056,54058,54060,54062,54064,54067,54069],{"class":47,"line":1262},[45,54055,52225],{"class":51},[45,54057,51692],{"class":51381},[45,54059,54032],{"class":2046},[45,54061,254],{"class":51},[45,54063,3784],{"class":313},[45,54065,54066],{"class":51},">2\u003C\u002F",[45,54068,51692],{"class":51381},[45,54070,51388],{"class":51},[45,54072,54073,54075,54077,54079,54081,54083,54086,54088],{"class":47,"line":1277},[45,54074,52225],{"class":51},[45,54076,51692],{"class":51381},[45,54078,54032],{"class":2046},[45,54080,254],{"class":51},[45,54082,3797],{"class":313},[45,54084,54085],{"class":51},">3\u003C\u002F",[45,54087,51692],{"class":51381},[45,54089,51388],{"class":51},[45,54091,54092,54094,54096,54098,54100,54102,54105,54107],{"class":47,"line":1283},[45,54093,52225],{"class":51},[45,54095,51692],{"class":51381},[45,54097,54032],{"class":2046},[45,54099,254],{"class":51},[45,54101,3810],{"class":313},[45,54103,54104],{"class":51},">4\u003C\u002F",[45,54106,51692],{"class":51381},[45,54108,51388],{"class":51},[45,54110,54111,54113,54115,54117,54119,54121,54124,54126],{"class":47,"line":1297},[45,54112,52225],{"class":51},[45,54114,51692],{"class":51381},[45,54116,54032],{"class":2046},[45,54118,254],{"class":51},[45,54120,3831],{"class":313},[45,54122,54123],{"class":51},">5\u003C\u002F",[45,54125,51692],{"class":51381},[45,54127,51388],{"class":51},[45,54129,54130,54132,54134],{"class":47,"line":1303},[45,54131,52225],{"class":51},[45,54133,51894],{"class":51381},[45,54135,51388],{"class":51},[45,54137,54138],{"class":47,"line":1394},[45,54139,54140],{"class":51},"    const one = document.querySelector('div')\n",[45,54142,54143],{"class":47,"line":1400},[45,54144,54145],{"class":51},"    console.log(one.dataset)\n",[45,54147,54148],{"class":47,"line":1412},[45,54149,54150],{"class":51},"    console.log(one.dataset.id)\n",[45,54152,54153],{"class":47,"line":1695},[45,54154,54155],{"class":51},"    console.log(one.dataset.spm)\n",[45,54157,54158,54160,54162],{"class":47,"line":1700},[45,54159,52498],{"class":51},[45,54161,51894],{"class":51381},[45,54163,51388],{"class":51},[45,54165,54166,54168,54170],{"class":47,"line":1706},[45,54167,51866],{"class":51},[45,54169,51881],{"class":51381},[45,54171,51388],{"class":51},[10,54173,54174],{},[1545,54175],{"alt":40,"src":54176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[10,54178,54179],{},"document.querySelector选择的是第一个对象（元素）",[176,54181,54183],{"id":54182},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[10,54185,54186],{},[1545,54187],{"alt":40,"src":54188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[10,54190,54191],{},[1545,54192],{"alt":40,"src":54193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[10,54195,54196],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51894,54198,54199],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[10,54201,54202],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51894,54204,54205],{},"\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",[10,54207,54208],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[10,54210,54211],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[10,54213,54214],{},"单位为毫秒！！！",[10,54216,54217],{},"可以搭配匿名函数来用！！！",[10,54219,54220],{},"setInterval(function () {",[10,54222,54223],{},"alert('两秒执行一次')",[10,54225,54226],{},"}, 2000)",[10,54228,54229],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[10,54231,54232],{},"function fn() {",[10,54234,54235],{},"document.write(1)",[10,54237,1153],{},[10,54239,54240],{},"setInterval(fn, 1000)",[10,54242,54243],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[10,54245,54246],{},"setInterval('fn()', 1000)",[10,54248,54249],{},[1545,54250],{"alt":40,"src":54251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22081,54253,54255],{"id":54254},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[35,54257,54259],{"className":50714,"code":54258,"language":50716,"meta":40,"style":40},"\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",[42,54260,54261,54271,54285,54289,54297,54311,54331,54343,54351,54355,54363,54400,54405,54410,54415,54423,54431,54453,54461,54466,54488,54493,54498,54509,54514,54534,54542,54557,54572,54583,54588,54598,54608,54612,54621,54625,54633,54641,54645],{"__ignoreMap":40},[45,54262,54263,54265,54267,54269],{"class":47,"line":48},[45,54264,51378],{"class":51},[45,54266,51382],{"class":51381},[45,54268,51385],{"class":2046},[45,54270,51388],{"class":51},[45,54272,54273,54275,54277,54279,54281,54283],{"class":47,"line":125},[45,54274,1117],{"class":51},[45,54276,50716],{"class":51381},[45,54278,51397],{"class":2046},[45,54280,254],{"class":51},[45,54282,51402],{"class":313},[45,54284,51388],{"class":51},[45,54286,54287],{"class":47,"line":1262},[45,54288,2483],{"emptyLinePlaceholder":133},[45,54290,54291,54293,54295],{"class":47,"line":1277},[45,54292,1117],{"class":51},[45,54294,51415],{"class":51381},[45,54296,51388],{"class":51},[45,54298,54299,54301,54303,54305,54307,54309],{"class":47,"line":1283},[45,54300,52225],{"class":51},[45,54302,51425],{"class":51381},[45,54304,51428],{"class":2046},[45,54306,254],{"class":51},[45,54308,51433],{"class":313},[45,54310,51388],{"class":51},[45,54312,54313,54315,54317,54319,54321,54323,54325,54327,54329],{"class":47,"line":1297},[45,54314,52225],{"class":51},[45,54316,51425],{"class":51381},[45,54318,15003],{"class":2046},[45,54320,254],{"class":51},[45,54322,51472],{"class":313},[45,54324,51452],{"class":2046},[45,54326,254],{"class":51},[45,54328,51479],{"class":313},[45,54330,51388],{"class":51},[45,54332,54333,54335,54337,54339,54341],{"class":47,"line":1303},[45,54334,52225],{"class":51},[45,54336,51488],{"class":51381},[45,54338,51491],{"class":51},[45,54340,51488],{"class":51381},[45,54342,51388],{"class":51},[45,54344,54345,54347,54349],{"class":47,"line":1394},[45,54346,51866],{"class":51},[45,54348,51415],{"class":51381},[45,54350,51388],{"class":51},[45,54352,54353],{"class":47,"line":1400},[45,54354,2483],{"emptyLinePlaceholder":133},[45,54356,54357,54359,54361],{"class":47,"line":1412},[45,54358,1117],{"class":51},[45,54360,51881],{"class":51381},[45,54362,51388],{"class":51},[45,54364,54365,54367,54370,54372,54374,54376,54378,54380,54382,54385,54387,54390,54393,54395,54398],{"class":47,"line":1695},[45,54366,52225],{"class":51},[45,54368,54369],{"class":51381},"textarea",[45,54371,15003],{"class":2046},[45,54373,254],{"class":51},[45,54375,7735],{"class":313},[45,54377,15042],{"class":2046},[45,54379,254],{"class":51},[45,54381,7735],{"class":313},[45,54383,54384],{"class":2046}," cols",[45,54386,254],{"class":51},[45,54388,54389],{"class":313},"\"30\"",[45,54391,54392],{"class":2046}," rows",[45,54394,254],{"class":51},[45,54396,54397],{"class":313},"\"10\"",[45,54399,51388],{"class":51},[45,54401,54402],{"class":47,"line":1700},[45,54403,54404],{"class":51},"        用户注册协议\n",[45,54406,54407],{"class":47,"line":1706},[45,54408,54409],{"class":51},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[45,54411,54412],{"class":47,"line":1711},[45,54413,54414],{"class":51},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[45,54416,54417,54419,54421],{"class":47,"line":1725},[45,54418,51857],{"class":51},[45,54420,54369],{"class":51381},[45,54422,51388],{"class":51},[45,54424,54425,54427,54429],{"class":47,"line":1730},[45,54426,52225],{"class":51},[45,54428,53797],{"class":51381},[45,54430,51388],{"class":51},[45,54432,54433,54435,54437,54439,54441,54444,54446,54449,54451],{"class":47,"line":1736},[45,54434,52225],{"class":51},[45,54436,53968],{"class":51381},[45,54438,53567],{"class":2046},[45,54440,254],{"class":51},[45,54442,54443],{"class":313},"\"btn\"",[45,54445,53971],{"class":2046},[45,54447,54448],{"class":51},">我已经阅读用户协议(5)\u003C\u002F",[45,54450,53968],{"class":51381},[45,54452,51388],{"class":51},[45,54454,54455,54457,54459],{"class":47,"line":1757},[45,54456,52225],{"class":51},[45,54458,51894],{"class":51381},[45,54460,51388],{"class":51},[45,54462,54463],{"class":47,"line":1762},[45,54464,54465],{"class":267},"    \u002F\u002F 1. 获取元素\n",[45,54467,54468,54470,54473,54475,54478,54481,54483,54486],{"class":47,"line":1776},[45,54469,11304],{"class":93},[45,54471,54472],{"class":257}," btn",[45,54474,13647],{"class":93},[45,54476,54477],{"class":51}," document.",[45,54479,54480],{"class":2046},"querySelector",[45,54482,209],{"class":51},[45,54484,54485],{"class":313},"'.btn'",[45,54487,215],{"class":51},[45,54489,54490],{"class":47,"line":1781},[45,54491,54492],{"class":267},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[45,54494,54495],{"class":47,"line":1810},[45,54496,54497],{"class":267},"    \u002F\u002F 2. 倒计时\n",[45,54499,54500,54502,54504,54506],{"class":47,"line":1815},[45,54501,52300],{"class":93},[45,54503,9521],{"class":51},[45,54505,254],{"class":93},[45,54507,54508],{"class":257}," 5\n",[45,54510,54511],{"class":47,"line":1832},[45,54512,54513],{"class":267},"    \u002F\u002F 2.1 开启定时器\n",[45,54515,54516,54518,54521,54523,54526,54528,54531],{"class":47,"line":1837},[45,54517,52300],{"class":93},[45,54519,54520],{"class":51}," n ",[45,54522,254],{"class":93},[45,54524,54525],{"class":2046}," setInterval",[45,54527,209],{"class":51},[45,54529,54530],{"class":93},"function",[45,54532,54533],{"class":51}," () {\n",[45,54535,54536,54539],{"class":47,"line":1842},[45,54537,54538],{"class":51},"      i",[45,54540,54541],{"class":93},"--\n",[45,54543,54544,54547,54549,54552,54554],{"class":47,"line":1847},[45,54545,54546],{"class":51},"      btn.innerHTML ",[45,54548,254],{"class":93},[45,54550,54551],{"class":313}," `我已经阅读用户协议(${",[45,54553,649],{"class":51},[45,54555,54556],{"class":313},"})`\n",[45,54558,54559,54562,54565,54568,54570],{"class":47,"line":1861},[45,54560,54561],{"class":93},"      if",[45,54563,54564],{"class":51}," (i ",[45,54566,54567],{"class":93},"===",[45,54569,4176],{"class":257},[45,54571,12525],{"class":51},[45,54573,54574,54577,54580],{"class":47,"line":1866},[45,54575,54576],{"class":2046},"        clearInterval",[45,54578,54579],{"class":51},"(n)  ",[45,54581,54582],{"class":267},"\u002F\u002F 关闭定时器\n",[45,54584,54585],{"class":47,"line":2660},[45,54586,54587],{"class":267},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[45,54589,54590,54593,54595],{"class":47,"line":2674},[45,54591,54592],{"class":51},"        btn.disabled ",[45,54594,254],{"class":93},[45,54596,54597],{"class":257}," false\n",[45,54599,54600,54603,54605],{"class":47,"line":2682},[45,54601,54602],{"class":51},"        btn.innerHTML ",[45,54604,254],{"class":93},[45,54606,54607],{"class":313}," '同意'\n",[45,54609,54610],{"class":47,"line":2687},[45,54611,52479],{"class":51},[45,54613,54614,54617,54619],{"class":47,"line":2693},[45,54615,54616],{"class":51},"    }, ",[45,54618,6493],{"class":257},[45,54620,215],{"class":51},[45,54622,54623],{"class":47,"line":2699},[45,54624,2483],{"emptyLinePlaceholder":133},[45,54626,54627,54629,54631],{"class":47,"line":2704},[45,54628,52498],{"class":51},[45,54630,51894],{"class":51381},[45,54632,51388],{"class":51},[45,54634,54635,54637,54639],{"class":47,"line":8031},[45,54636,51866],{"class":51},[45,54638,51881],{"class":51381},[45,54640,51388],{"class":51},[45,54642,54643],{"class":47,"line":8055},[45,54644,2483],{"emptyLinePlaceholder":133},[45,54646,54647,54649,54651],{"class":47,"line":8060},[45,54648,51866],{"class":51},[45,54650,50716],{"class":51381},[45,54652,51388],{"class":51},[10,54654,54655],{},"不要一直想着用死循环,避免死循环",[10,54657,54658,54661],{},[42,54659,54660],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22081,54663,54665],{"id":54664},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[159,54667,54668],{},[162,54669,54670],{},"法1",[35,54672,54674],{"className":50714,"code":54673,"language":50716,"meta":40,"style":40},"\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",[42,54675,54676,54686,54700,54704,54712,54726,54746,54758,54766,54772,54783,54794,54798,54802,54809,54821,54825,54829,54836,54848,54862,54875,54889,54893,54897,54904,54915,54926,54937,54949,54961,54973,54977,54981,54989,54999,55012,55024,55037,55041,55045,55052,55062,55074,55086,55097,55108,55118,55130,55142,55146,55150,55159,55171,55183,55211,55224,55228,55232,55239,55250,55254,55262,55270,55274,55282,55296,55311,55335,55343,55358,55371,55379,55400,55412,55424,55436,55448,55460,55472,55484,55493,55501,55509,55517,55529,55552,55571,55590,55609,55628,55647,55666,55686,55690,55710,55729,55749,55770,55781,55798,55808,55818,55828,55833,55838,55843,55848,55873,55886,55890,55913,55917,55925,55933,55941,55945],{"__ignoreMap":40},[45,54677,54678,54680,54682,54684],{"class":47,"line":48},[45,54679,51378],{"class":51},[45,54681,51382],{"class":51381},[45,54683,51385],{"class":2046},[45,54685,51388],{"class":51},[45,54687,54688,54690,54692,54694,54696,54698],{"class":47,"line":125},[45,54689,1117],{"class":51},[45,54691,50716],{"class":51381},[45,54693,51397],{"class":2046},[45,54695,254],{"class":51},[45,54697,51402],{"class":313},[45,54699,51388],{"class":51},[45,54701,54702],{"class":47,"line":1262},[45,54703,2483],{"emptyLinePlaceholder":133},[45,54705,54706,54708,54710],{"class":47,"line":1277},[45,54707,1117],{"class":51},[45,54709,51415],{"class":51381},[45,54711,51388],{"class":51},[45,54713,54714,54716,54718,54720,54722,54724],{"class":47,"line":1283},[45,54715,52225],{"class":51},[45,54717,51425],{"class":51381},[45,54719,51428],{"class":2046},[45,54721,254],{"class":51},[45,54723,51433],{"class":313},[45,54725,51388],{"class":51},[45,54727,54728,54730,54732,54734,54736,54738,54740,54742,54744],{"class":47,"line":1297},[45,54729,52225],{"class":51},[45,54731,51425],{"class":51381},[45,54733,15003],{"class":2046},[45,54735,254],{"class":51},[45,54737,51472],{"class":313},[45,54739,51452],{"class":2046},[45,54741,254],{"class":51},[45,54743,51479],{"class":313},[45,54745,51388],{"class":51},[45,54747,54748,54750,54752,54754,54756],{"class":47,"line":1303},[45,54749,52225],{"class":51},[45,54751,51488],{"class":51381},[45,54753,51491],{"class":51},[45,54755,51488],{"class":51381},[45,54757,51388],{"class":51},[45,54759,54760,54762,54764],{"class":47,"line":1394},[45,54761,52225],{"class":51},[45,54763,121],{"class":51381},[45,54765,51388],{"class":51},[45,54767,54768,54770],{"class":47,"line":1400},[45,54769,6486],{"class":51381},[45,54771,15655],{"class":51},[45,54773,54774,54777,54779,54781],{"class":47,"line":1412},[45,54775,54776],{"class":257},"      padding",[45,54778,51518],{"class":51},[45,54780,400],{"class":257},[45,54782,1373],{"class":51},[45,54784,54785,54788,54790,54792],{"class":47,"line":1695},[45,54786,54787],{"class":257},"      margin",[45,54789,51518],{"class":51},[45,54791,400],{"class":257},[45,54793,1373],{"class":51},[45,54795,54796],{"class":47,"line":1700},[45,54797,2270],{"class":51},[45,54799,54800],{"class":47,"line":1706},[45,54801,2483],{"emptyLinePlaceholder":133},[45,54803,54804,54807],{"class":47,"line":1711},[45,54805,54806],{"class":51381},"    li",[45,54808,15655],{"class":51},[45,54810,54811,54814,54816,54819],{"class":47,"line":1725},[45,54812,54813],{"class":257},"      list-style",[45,54815,51518],{"class":51},[45,54817,54818],{"class":257},"none",[45,54820,1373],{"class":51},[45,54822,54823],{"class":47,"line":1730},[45,54824,2270],{"class":51},[45,54826,54827],{"class":47,"line":1736},[45,54828,2483],{"emptyLinePlaceholder":133},[45,54830,54831,54834],{"class":47,"line":1757},[45,54832,54833],{"class":2046},"    .box",[45,54835,15655],{"class":51},[45,54837,54838,54841,54843,54846],{"class":47,"line":1762},[45,54839,54840],{"class":257},"      position",[45,54842,51518],{"class":51},[45,54844,54845],{"class":257},"relative",[45,54847,1373],{"class":51},[45,54849,54850,54853,54855,54858,54860],{"class":47,"line":1776},[45,54851,54852],{"class":257},"      width",[45,54854,51518],{"class":51},[45,54856,54857],{"class":257},"976",[45,54859,51573],{"class":93},[45,54861,1373],{"class":51},[45,54863,54864,54867,54869,54871,54873],{"class":47,"line":1781},[45,54865,54866],{"class":257},"      height",[45,54868,51518],{"class":51},[45,54870,1622],{"class":257},[45,54872,51573],{"class":93},[45,54874,1373],{"class":51},[45,54876,54877,54879,54881,54883,54885,54887],{"class":47,"line":1810},[45,54878,54787],{"class":257},[45,54880,51518],{"class":51},[45,54882,519],{"class":257},[45,54884,51573],{"class":93},[45,54886,51637],{"class":257},[45,54888,1373],{"class":51},[45,54890,54891],{"class":47,"line":1815},[45,54892,2270],{"class":51},[45,54894,54895],{"class":47,"line":1832},[45,54896,2483],{"emptyLinePlaceholder":133},[45,54898,54899,54902],{"class":47,"line":1837},[45,54900,54901],{"class":2046},"    .slider-footer",[45,54903,15655],{"class":51},[45,54905,54906,54908,54910,54913],{"class":47,"line":1842},[45,54907,54840],{"class":257},[45,54909,51518],{"class":51},[45,54911,54912],{"class":257},"absolute",[45,54914,1373],{"class":51},[45,54916,54917,54920,54922,54924],{"class":47,"line":1847},[45,54918,54919],{"class":257},"      left",[45,54921,51518],{"class":51},[45,54923,400],{"class":257},[45,54925,1373],{"class":51},[45,54927,54928,54931,54933,54935],{"class":47,"line":1861},[45,54929,54930],{"class":257},"      bottom",[45,54932,51518],{"class":51},[45,54934,400],{"class":257},[45,54936,1373],{"class":51},[45,54938,54939,54941,54943,54945,54947],{"class":47,"line":1866},[45,54940,54852],{"class":257},[45,54942,51518],{"class":51},[45,54944,519],{"class":257},[45,54946,536],{"class":93},[45,54948,1373],{"class":51},[45,54950,54951,54953,54955,54957,54959],{"class":47,"line":2660},[45,54952,54866],{"class":257},[45,54954,51518],{"class":51},[45,54956,782],{"class":257},[45,54958,536],{"class":93},[45,54960,1373],{"class":51},[45,54962,54963,54966,54968,54971],{"class":47,"line":2674},[45,54964,54965],{"class":257},"      background-color",[45,54967,51518],{"class":51},[45,54969,54970],{"class":257},"skyblue",[45,54972,1373],{"class":51},[45,54974,54975],{"class":47,"line":2682},[45,54976,2270],{"class":51},[45,54978,54979],{"class":47,"line":2687},[45,54980,2483],{"emptyLinePlaceholder":133},[45,54982,54983,54985,54987],{"class":47,"line":2693},[45,54984,54901],{"class":2046},[45,54986,6908],{"class":51381},[45,54988,15655],{"class":51},[45,54990,54991,54993,54995,54997],{"class":47,"line":2699},[45,54992,54840],{"class":257},[45,54994,51518],{"class":51},[45,54996,54912],{"class":257},[45,54998,1373],{"class":51},[45,55000,55001,55004,55006,55008,55010],{"class":47,"line":2704},[45,55002,55003],{"class":257},"      font-size",[45,55005,51518],{"class":51},[45,55007,1108],{"class":257},[45,55009,51573],{"class":93},[45,55011,1373],{"class":51},[45,55013,55014,55016,55018,55020,55022],{"class":47,"line":8031},[45,55015,54919],{"class":257},[45,55017,51518],{"class":51},[45,55019,907],{"class":257},[45,55021,51573],{"class":93},[45,55023,1373],{"class":51},[45,55025,55026,55029,55031,55033,55035],{"class":47,"line":8055},[45,55027,55028],{"class":257},"      top",[45,55030,51518],{"class":51},[45,55032,527],{"class":257},[45,55034,51573],{"class":93},[45,55036,1373],{"class":51},[45,55038,55039],{"class":47,"line":8060},[45,55040,2270],{"class":51},[45,55042,55043],{"class":47,"line":8066},[45,55044,2483],{"emptyLinePlaceholder":133},[45,55046,55047,55050],{"class":47,"line":8093},[45,55048,55049],{"class":51381},"    ul",[45,55051,15655],{"class":51},[45,55053,55054,55056,55058,55060],{"class":47,"line":8098},[45,55055,54840],{"class":257},[45,55057,51518],{"class":51},[45,55059,54912],{"class":257},[45,55061,1373],{"class":51},[45,55063,55064,55066,55068,55070,55072],{"class":47,"line":8104},[45,55065,55028],{"class":257},[45,55067,51518],{"class":51},[45,55069,988],{"class":257},[45,55071,51573],{"class":93},[45,55073,1373],{"class":51},[45,55075,55076,55078,55080,55082,55084],{"class":47,"line":8116},[45,55077,54919],{"class":257},[45,55079,51518],{"class":51},[45,55081,907],{"class":257},[45,55083,51573],{"class":93},[45,55085,1373],{"class":51},[45,55087,55088,55091,55093,55095],{"class":47,"line":8128},[45,55089,55090],{"class":257},"      display",[45,55092,51518],{"class":51},[45,55094,51558],{"class":257},[45,55096,1373],{"class":51},[45,55098,55099,55102,55104,55106],{"class":47,"line":8140},[45,55100,55101],{"class":257},"      justify-content",[45,55103,51518],{"class":51},[45,55105,51749],{"class":257},[45,55107,1373],{"class":51},[45,55109,55110,55112,55114,55116],{"class":47,"line":9799},[45,55111,54840],{"class":257},[45,55113,51518],{"class":51},[45,55115,54912],{"class":257},[45,55117,1373],{"class":51},[45,55119,55120,55122,55124,55126,55128],{"class":47,"line":9824},[45,55121,54852],{"class":257},[45,55123,51518],{"class":51},[45,55125,4075],{"class":257},[45,55127,51573],{"class":93},[45,55129,1373],{"class":51},[45,55131,55132,55134,55136,55138,55140],{"class":47,"line":9847},[45,55133,54866],{"class":257},[45,55135,51518],{"class":51},[45,55137,907],{"class":257},[45,55139,51573],{"class":93},[45,55141,1373],{"class":51},[45,55143,55144],{"class":47,"line":9871},[45,55145,2270],{"class":51},[45,55147,55148],{"class":47,"line":9876},[45,55149,2483],{"emptyLinePlaceholder":133},[45,55151,55152,55154,55157],{"class":47,"line":9881},[45,55153,55049],{"class":51381},[45,55155,55156],{"class":51381}," li",[45,55158,15655],{"class":51},[45,55160,55161,55163,55165,55167,55169],{"class":47,"line":9886},[45,55162,54852],{"class":257},[45,55164,51518],{"class":51},[45,55166,907],{"class":257},[45,55168,51573],{"class":93},[45,55170,1373],{"class":51},[45,55172,55173,55175,55177,55179,55181],{"class":47,"line":9895},[45,55174,54866],{"class":257},[45,55176,51518],{"class":51},[45,55178,907],{"class":257},[45,55180,51573],{"class":93},[45,55182,1373],{"class":51},[45,55184,55185,55187,55189,55192,55194,55196,55198,55200,55202,55204,55206,55209],{"class":47,"line":9900},[45,55186,54965],{"class":257},[45,55188,51518],{"class":51},[45,55190,55191],{"class":257},"rgba",[45,55193,209],{"class":51},[45,55195,400],{"class":257},[45,55197,12518],{"class":51},[45,55199,400],{"class":257},[45,55201,12518],{"class":51},[45,55203,400],{"class":257},[45,55205,12518],{"class":51},[45,55207,55208],{"class":257},".4",[45,55210,2802],{"class":51},[45,55212,55213,55216,55218,55220,55222],{"class":47,"line":9906},[45,55214,55215],{"class":257},"      border-radius",[45,55217,51518],{"class":51},[45,55219,654],{"class":257},[45,55221,51573],{"class":93},[45,55223,1373],{"class":51},[45,55225,55226],{"class":47,"line":9927},[45,55227,2270],{"class":51},[45,55229,55230],{"class":47,"line":9933},[45,55231,2483],{"emptyLinePlaceholder":133},[45,55233,55234,55237],{"class":47,"line":9947},[45,55235,55236],{"class":2046},"    .activate",[45,55238,15655],{"class":51},[45,55240,55241,55243,55245,55248],{"class":47,"line":9953},[45,55242,54965],{"class":257},[45,55244,51518],{"class":51},[45,55246,55247],{"class":257},"#f7f7f7",[45,55249,1373],{"class":51},[45,55251,55252],{"class":47,"line":9980},[45,55253,2270],{"class":51},[45,55255,55256,55258,55260],{"class":47,"line":9989},[45,55257,52498],{"class":51},[45,55259,121],{"class":51381},[45,55261,51388],{"class":51},[45,55263,55264,55266,55268],{"class":47,"line":9995},[45,55265,51866],{"class":51},[45,55267,51415],{"class":51381},[45,55269,51388],{"class":51},[45,55271,55272],{"class":47,"line":10003},[45,55273,2483],{"emptyLinePlaceholder":133},[45,55275,55276,55278,55280],{"class":47,"line":10008},[45,55277,1117],{"class":51},[45,55279,51881],{"class":51381},[45,55281,51388],{"class":51},[45,55283,55284,55286,55288,55290,55292,55294],{"class":47,"line":16687},[45,55285,52225],{"class":51},[45,55287,51692],{"class":51381},[45,55289,53567],{"class":2046},[45,55291,254],{"class":51},[45,55293,53572],{"class":313},[45,55295,51388],{"class":51},[45,55297,55298,55300,55302,55304,55306,55309],{"class":47,"line":16693},[45,55299,51422],{"class":51},[45,55301,51692],{"class":51381},[45,55303,53567],{"class":2046},[45,55305,254],{"class":51},[45,55307,55308],{"class":313},"\"slider-wrapper\"",[45,55310,51388],{"class":51},[45,55312,55313,55316,55318,55321,55323,55326,55329,55331,55333],{"class":47,"line":16716},[45,55314,55315],{"class":51},"      \u003C",[45,55317,1545],{"class":51381},[45,55319,55320],{"class":2046}," src",[45,55322,254],{"class":51},[45,55324,55325],{"class":313},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[45,55327,55328],{"class":2046}," alt",[45,55330,254],{"class":51},[45,55332,7735],{"class":313},[45,55334,51388],{"class":51},[45,55336,55337,55339,55341],{"class":47,"line":16722},[45,55338,51857],{"class":51},[45,55340,51692],{"class":51381},[45,55342,51388],{"class":51},[45,55344,55345,55347,55349,55351,55353,55356],{"class":47,"line":16745},[45,55346,51422],{"class":51},[45,55348,51692],{"class":51381},[45,55350,53567],{"class":2046},[45,55352,254],{"class":51},[45,55354,55355],{"class":313},"\"slider-footer\"",[45,55357,51388],{"class":51},[45,55359,55360,55362,55364,55367,55369],{"class":47,"line":16759},[45,55361,55315],{"class":51},[45,55363,10],{"class":51381},[45,55365,55366],{"class":51},">对人类来说会不会太超前了?\u003C\u002F",[45,55368,10],{"class":51381},[45,55370,51388],{"class":51},[45,55372,55373,55375,55377],{"class":47,"line":16779},[45,55374,55315],{"class":51},[45,55376,1214],{"class":51381},[45,55378,51388],{"class":51},[45,55380,55381,55384,55386,55388,55390,55393,55396,55398],{"class":47,"line":16785},[45,55382,55383],{"class":51},"        \u003C",[45,55385,162],{"class":51381},[45,55387,53567],{"class":2046},[45,55389,254],{"class":51},[45,55391,55392],{"class":313},"\"activate\"",[45,55394,55395],{"class":51},">\u003C\u002F",[45,55397,162],{"class":51381},[45,55399,51388],{"class":51},[45,55401,55402,55404,55406,55408,55410],{"class":47,"line":16796},[45,55403,55383],{"class":51},[45,55405,162],{"class":51381},[45,55407,55395],{"class":51},[45,55409,162],{"class":51381},[45,55411,51388],{"class":51},[45,55413,55414,55416,55418,55420,55422],{"class":47,"line":16819},[45,55415,55383],{"class":51},[45,55417,162],{"class":51381},[45,55419,55395],{"class":51},[45,55421,162],{"class":51381},[45,55423,51388],{"class":51},[45,55425,55426,55428,55430,55432,55434],{"class":47,"line":16841},[45,55427,55383],{"class":51},[45,55429,162],{"class":51381},[45,55431,55395],{"class":51},[45,55433,162],{"class":51381},[45,55435,51388],{"class":51},[45,55437,55438,55440,55442,55444,55446],{"class":47,"line":16846},[45,55439,55383],{"class":51},[45,55441,162],{"class":51381},[45,55443,55395],{"class":51},[45,55445,162],{"class":51381},[45,55447,51388],{"class":51},[45,55449,55450,55452,55454,55456,55458],{"class":47,"line":16852},[45,55451,55383],{"class":51},[45,55453,162],{"class":51381},[45,55455,55395],{"class":51},[45,55457,162],{"class":51381},[45,55459,51388],{"class":51},[45,55461,55462,55464,55466,55468,55470],{"class":47,"line":16866},[45,55463,55383],{"class":51},[45,55465,162],{"class":51381},[45,55467,55395],{"class":51},[45,55469,162],{"class":51381},[45,55471,51388],{"class":51},[45,55473,55474,55476,55478,55480,55482],{"class":47,"line":16879},[45,55475,55383],{"class":51},[45,55477,162],{"class":51381},[45,55479,55395],{"class":51},[45,55481,162],{"class":51381},[45,55483,51388],{"class":51},[45,55485,55486,55489,55491],{"class":47,"line":16884},[45,55487,55488],{"class":51},"      \u003C\u002F",[45,55490,1214],{"class":51381},[45,55492,51388],{"class":51},[45,55494,55495,55497,55499],{"class":47,"line":16898},[45,55496,51857],{"class":51},[45,55498,51692],{"class":51381},[45,55500,51388],{"class":51},[45,55502,55503,55505,55507],{"class":47,"line":16903},[45,55504,52498],{"class":51},[45,55506,51692],{"class":51381},[45,55508,51388],{"class":51},[45,55510,55511,55513,55515],{"class":47,"line":16909},[45,55512,52225],{"class":51},[45,55514,51894],{"class":51381},[45,55516,51388],{"class":51},[45,55518,55519,55521,55524,55526],{"class":47,"line":16914},[45,55520,11304],{"class":93},[45,55522,55523],{"class":257}," arrImage",[45,55525,13647],{"class":93},[45,55527,55528],{"class":51}," [\n",[45,55530,55531,55534,55537,55540,55543,55546,55549],{"class":47,"line":16928},[45,55532,55533],{"class":51},"      { url: ",[45,55535,55536],{"class":313},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[45,55538,55539],{"class":51},", title: ",[45,55541,55542],{"class":313},"'对人类来说会不会太超前了?'",[45,55544,55545],{"class":51},", color: ",[45,55547,55548],{"class":313},"'rgba(100,67,68)'",[45,55550,55551],{"class":51}," },\n",[45,55553,55554,55556,55559,55561,55564,55566,55569],{"class":47,"line":16933},[45,55555,55533],{"class":51},[45,55557,55558],{"class":313},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[45,55560,55539],{"class":51},[45,55562,55563],{"class":313},"'开启剑与雪的黑暗传说!'",[45,55565,55545],{"class":51},[45,55567,55568],{"class":313},"'rgba(43,35,26)'",[45,55570,55551],{"class":51},[45,55572,55573,55575,55578,55580,55583,55585,55588],{"class":47,"line":16938},[45,55574,55533],{"class":51},[45,55576,55577],{"class":313},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[45,55579,55539],{"class":51},[45,55581,55582],{"class":313},"'真正的jo厨出现了!'",[45,55584,55545],{"class":51},[45,55586,55587],{"class":313},"'rgba(36,31,33)'",[45,55589,55551],{"class":51},[45,55591,55592,55594,55597,55599,55602,55604,55607],{"class":47,"line":16952},[45,55593,55533],{"class":51},[45,55595,55596],{"class":313},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[45,55598,55539],{"class":51},[45,55600,55601],{"class":313},"'李玉刚:让世界通过b站看到东方大国文化'",[45,55603,55545],{"class":51},[45,55605,55606],{"class":313},"'rgba(139,98,66)'",[45,55608,55551],{"class":51},[45,55610,55611,55613,55616,55618,55621,55623,55626],{"class":47,"line":16964},[45,55612,55533],{"class":51},[45,55614,55615],{"class":313},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[45,55617,55539],{"class":51},[45,55619,55620],{"class":313},"'快来分享你的寒假日常吧'",[45,55622,55545],{"class":51},[45,55624,55625],{"class":313},"'rgba(67,90,92)'",[45,55627,55551],{"class":51},[45,55629,55630,55632,55635,55637,55640,55642,55645],{"class":47,"line":16969},[45,55631,55533],{"class":51},[45,55633,55634],{"class":313},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[45,55636,55539],{"class":51},[45,55638,55639],{"class":313},"'哔哩哔哩小年YEAR'",[45,55641,55545],{"class":51},[45,55643,55644],{"class":313},"'rgba(166,131,143)'",[45,55646,55551],{"class":51},[45,55648,55649,55651,55654,55656,55659,55661,55664],{"class":47,"line":16982},[45,55650,55533],{"class":51},[45,55652,55653],{"class":313},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[45,55655,55539],{"class":51},[45,55657,55658],{"class":313},"'一站式解决你的电脑配置问题'",[45,55660,55545],{"class":51},[45,55662,55663],{"class":313},"'rgba(53,29,25)'",[45,55665,55551],{"class":51},[45,55667,55668,55670,55673,55675,55678,55680,55683],{"class":47,"line":16987},[45,55669,55533],{"class":51},[45,55671,55672],{"class":313},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[45,55674,55539],{"class":51},[45,55676,55677],{"class":313},"'谁不想和小猫咪贴贴呢?'",[45,55679,55545],{"class":51},[45,55681,55682],{"class":313},"'rgba(99,72,114)'",[45,55684,55685],{"class":51}," }\n",[45,55687,55688],{"class":47,"line":16992},[45,55689,53190],{"class":51},[45,55691,55692,55694,55697,55699,55701,55703,55705,55708],{"class":47,"line":16997},[45,55693,11304],{"class":93},[45,55695,55696],{"class":257}," img",[45,55698,13647],{"class":93},[45,55700,54477],{"class":51},[45,55702,54480],{"class":2046},[45,55704,209],{"class":51},[45,55706,55707],{"class":313},"'.slider-wrapper img'",[45,55709,215],{"class":51},[45,55711,55712,55714,55716,55718,55720,55722,55724,55727],{"class":47,"line":17010},[45,55713,11304],{"class":93},[45,55715,6908],{"class":257},[45,55717,13647],{"class":93},[45,55719,54477],{"class":51},[45,55721,54480],{"class":2046},[45,55723,209],{"class":51},[45,55725,55726],{"class":313},"'.slider-footer p'",[45,55728,215],{"class":51},[45,55730,55731,55733,55736,55738,55740,55742,55744,55747],{"class":47,"line":17015},[45,55732,11304],{"class":93},[45,55734,55735],{"class":257}," color",[45,55737,13647],{"class":93},[45,55739,54477],{"class":51},[45,55741,54480],{"class":2046},[45,55743,209],{"class":51},[45,55745,55746],{"class":313},"'.slider-footer'",[45,55748,215],{"class":51},[45,55750,55751,55753,55756,55758,55760,55763,55765,55768],{"class":47,"line":32714},[45,55752,11304],{"class":93},[45,55754,55755],{"class":257}," lis",[45,55757,13647],{"class":93},[45,55759,54477],{"class":51},[45,55761,55762],{"class":2046},"querySelectorAll",[45,55764,209],{"class":51},[45,55766,55767],{"class":313},"'.slider-footer ul li'",[45,55769,215],{"class":51},[45,55771,55772,55774,55776,55778],{"class":47,"line":32720},[45,55773,52300],{"class":93},[45,55775,9521],{"class":51},[45,55777,254],{"class":93},[45,55779,55780],{"class":257}," 1\n",[45,55782,55783,55785,55788,55790,55792,55794,55796],{"class":47,"line":32726},[45,55784,52300],{"class":93},[45,55786,55787],{"class":51}," timer ",[45,55789,254],{"class":93},[45,55791,54525],{"class":2046},[45,55793,209],{"class":51},[45,55795,54530],{"class":93},[45,55797,54533],{"class":51},[45,55799,55800,55803,55805],{"class":47,"line":32732},[45,55801,55802],{"class":51},"      img.src ",[45,55804,254],{"class":93},[45,55806,55807],{"class":51}," arrImage[i].url\n",[45,55809,55810,55813,55815],{"class":47,"line":32738},[45,55811,55812],{"class":51},"      p.innerHTML ",[45,55814,254],{"class":93},[45,55816,55817],{"class":51}," arrImage[i].title\n",[45,55819,55820,55823,55825],{"class":47,"line":32749},[45,55821,55822],{"class":51},"      color.style.backgroundColor ",[45,55824,254],{"class":93},[45,55826,55827],{"class":51}," arrImage[i].color\n",[45,55829,55830],{"class":47,"line":32755},[45,55831,55832],{"class":267},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[45,55834,55835],{"class":47,"line":32775},[45,55836,55837],{"class":267},"      \u002F\u002F li.classList.add('activate')\n",[45,55839,55840],{"class":47,"line":32781},[45,55841,55842],{"class":267},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[45,55844,55845],{"class":47,"line":32792},[45,55846,55847],{"class":267},"      \u002F\u002F lis[i].classList.remove('activate')\n",[45,55849,55850,55853,55855,55857,55860,55863,55866,55868,55871],{"class":47,"line":32798},[45,55851,55852],{"class":51},"      document.",[45,55854,54480],{"class":2046},[45,55856,209],{"class":51},[45,55858,55859],{"class":313},"'.activate'",[45,55861,55862],{"class":51},")?.classList.",[45,55864,55865],{"class":2046},"toggle",[45,55867,209],{"class":51},[45,55869,55870],{"class":313},"'activate'",[45,55872,215],{"class":51},[45,55874,55875,55878,55880,55882,55884],{"class":47,"line":32804},[45,55876,55877],{"class":51},"      lis[i].classList.",[45,55879,5417],{"class":2046},[45,55881,209],{"class":51},[45,55883,55870],{"class":313},[45,55885,215],{"class":51},[45,55887,55888],{"class":47,"line":32810},[45,55889,2483],{"emptyLinePlaceholder":133},[45,55891,55892,55895,55897,55899,55901,55903,55905,55907,55910],{"class":47,"line":32816},[45,55893,55894],{"class":51},"      i ",[45,55896,254],{"class":93},[45,55898,54564],{"class":51},[45,55900,689],{"class":93},[45,55902,25201],{"class":257},[45,55904,13797],{"class":51},[45,55906,536],{"class":93},[45,55908,55909],{"class":51}," arrImage.",[45,55911,55912],{"class":257},"length\n",[45,55914,55915],{"class":47,"line":32822},[45,55916,2483],{"emptyLinePlaceholder":133},[45,55918,55919,55921,55923],{"class":47,"line":32828},[45,55920,54616],{"class":51},[45,55922,6493],{"class":257},[45,55924,215],{"class":51},[45,55926,55927,55929,55931],{"class":47,"line":32834},[45,55928,52498],{"class":51},[45,55930,51894],{"class":51381},[45,55932,51388],{"class":51},[45,55934,55935,55937,55939],{"class":47,"line":32854},[45,55936,51866],{"class":51},[45,55938,51881],{"class":51381},[45,55940,51388],{"class":51},[45,55942,55943],{"class":47,"line":32860},[45,55944,2483],{"emptyLinePlaceholder":133},[45,55946,55947,55949,55951],{"class":47,"line":32876},[45,55948,51866],{"class":51},[45,55950,50716],{"class":51381},[45,55952,51388],{"class":51},[10,55954,55955],{},[1545,55956],{"alt":40,"src":55957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[10,55959,55960],{},"?.就是短路保护,确保输出正常进行",[10,55962,55963],{},"不要忘记取余%,有时候可以用",[10,55965,55966],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[159,55968,55969],{"start":125},[162,55970,55971],{},"法2",[35,55973,55975],{"className":50714,"code":55974,"language":50716,"meta":40,"style":40},"\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",[42,55976,55977,55987,56001,56005,56013,56027,56047,56059,56067,56073,56083,56093,56097,56101,56107,56117,56121,56125,56131,56141,56153,56165,56179,56183,56187,56193,56203,56213,56223,56235,56247,56257,56261,56265,56273,56283,56295,56307,56319,56323,56327,56333,56343,56355,56367,56377,56387,56397,56409,56421,56425,56429,56437,56449,56461,56487,56499,56503,56507,56513,56523,56527,56535,56543,56547,56555,56569,56583,56603,56611,56625,56637,56645,56663,56675,56687,56699,56711,56723,56735,56747,56755,56763,56771,56779,56790,56806,56822,56838,56854,56870,56886,56902,56918,56922,56927,56945,56963,56973,56978,56983,56994,57000,57015,57024,57028,57033,57042,57047,57056,57061,57066,57071,57094,57124,57128,57136,57140,57148,57156,57160],{"__ignoreMap":40},[45,55978,55979,55981,55983,55985],{"class":47,"line":48},[45,55980,51378],{"class":51},[45,55982,51382],{"class":51381},[45,55984,51385],{"class":2046},[45,55986,51388],{"class":51},[45,55988,55989,55991,55993,55995,55997,55999],{"class":47,"line":125},[45,55990,1117],{"class":51},[45,55992,50716],{"class":51381},[45,55994,51397],{"class":2046},[45,55996,254],{"class":51},[45,55998,51402],{"class":313},[45,56000,51388],{"class":51},[45,56002,56003],{"class":47,"line":1262},[45,56004,2483],{"emptyLinePlaceholder":133},[45,56006,56007,56009,56011],{"class":47,"line":1277},[45,56008,1117],{"class":51},[45,56010,51415],{"class":51381},[45,56012,51388],{"class":51},[45,56014,56015,56017,56019,56021,56023,56025],{"class":47,"line":1283},[45,56016,52225],{"class":51},[45,56018,51425],{"class":51381},[45,56020,51428],{"class":2046},[45,56022,254],{"class":51},[45,56024,51433],{"class":313},[45,56026,51388],{"class":51},[45,56028,56029,56031,56033,56035,56037,56039,56041,56043,56045],{"class":47,"line":1297},[45,56030,52225],{"class":51},[45,56032,51425],{"class":51381},[45,56034,15003],{"class":2046},[45,56036,254],{"class":51},[45,56038,51472],{"class":313},[45,56040,51452],{"class":2046},[45,56042,254],{"class":51},[45,56044,51479],{"class":313},[45,56046,51388],{"class":51},[45,56048,56049,56051,56053,56055,56057],{"class":47,"line":1303},[45,56050,52225],{"class":51},[45,56052,51488],{"class":51381},[45,56054,51491],{"class":51},[45,56056,51488],{"class":51381},[45,56058,51388],{"class":51},[45,56060,56061,56063,56065],{"class":47,"line":1394},[45,56062,52225],{"class":51},[45,56064,121],{"class":51381},[45,56066,51388],{"class":51},[45,56068,56069,56071],{"class":47,"line":1400},[45,56070,6486],{"class":51381},[45,56072,15655],{"class":51},[45,56074,56075,56077,56079,56081],{"class":47,"line":1412},[45,56076,54776],{"class":257},[45,56078,51518],{"class":51},[45,56080,400],{"class":257},[45,56082,1373],{"class":51},[45,56084,56085,56087,56089,56091],{"class":47,"line":1695},[45,56086,54787],{"class":257},[45,56088,51518],{"class":51},[45,56090,400],{"class":257},[45,56092,1373],{"class":51},[45,56094,56095],{"class":47,"line":1700},[45,56096,2270],{"class":51},[45,56098,56099],{"class":47,"line":1706},[45,56100,2483],{"emptyLinePlaceholder":133},[45,56102,56103,56105],{"class":47,"line":1711},[45,56104,54806],{"class":51381},[45,56106,15655],{"class":51},[45,56108,56109,56111,56113,56115],{"class":47,"line":1725},[45,56110,54813],{"class":257},[45,56112,51518],{"class":51},[45,56114,54818],{"class":257},[45,56116,1373],{"class":51},[45,56118,56119],{"class":47,"line":1730},[45,56120,2270],{"class":51},[45,56122,56123],{"class":47,"line":1736},[45,56124,2483],{"emptyLinePlaceholder":133},[45,56126,56127,56129],{"class":47,"line":1757},[45,56128,54833],{"class":2046},[45,56130,15655],{"class":51},[45,56132,56133,56135,56137,56139],{"class":47,"line":1762},[45,56134,54840],{"class":257},[45,56136,51518],{"class":51},[45,56138,54845],{"class":257},[45,56140,1373],{"class":51},[45,56142,56143,56145,56147,56149,56151],{"class":47,"line":1776},[45,56144,54852],{"class":257},[45,56146,51518],{"class":51},[45,56148,54857],{"class":257},[45,56150,51573],{"class":93},[45,56152,1373],{"class":51},[45,56154,56155,56157,56159,56161,56163],{"class":47,"line":1781},[45,56156,54866],{"class":257},[45,56158,51518],{"class":51},[45,56160,1622],{"class":257},[45,56162,51573],{"class":93},[45,56164,1373],{"class":51},[45,56166,56167,56169,56171,56173,56175,56177],{"class":47,"line":1810},[45,56168,54787],{"class":257},[45,56170,51518],{"class":51},[45,56172,519],{"class":257},[45,56174,51573],{"class":93},[45,56176,51637],{"class":257},[45,56178,1373],{"class":51},[45,56180,56181],{"class":47,"line":1815},[45,56182,2270],{"class":51},[45,56184,56185],{"class":47,"line":1832},[45,56186,2483],{"emptyLinePlaceholder":133},[45,56188,56189,56191],{"class":47,"line":1837},[45,56190,54901],{"class":2046},[45,56192,15655],{"class":51},[45,56194,56195,56197,56199,56201],{"class":47,"line":1842},[45,56196,54840],{"class":257},[45,56198,51518],{"class":51},[45,56200,54912],{"class":257},[45,56202,1373],{"class":51},[45,56204,56205,56207,56209,56211],{"class":47,"line":1847},[45,56206,54919],{"class":257},[45,56208,51518],{"class":51},[45,56210,400],{"class":257},[45,56212,1373],{"class":51},[45,56214,56215,56217,56219,56221],{"class":47,"line":1861},[45,56216,54930],{"class":257},[45,56218,51518],{"class":51},[45,56220,400],{"class":257},[45,56222,1373],{"class":51},[45,56224,56225,56227,56229,56231,56233],{"class":47,"line":1866},[45,56226,54852],{"class":257},[45,56228,51518],{"class":51},[45,56230,519],{"class":257},[45,56232,536],{"class":93},[45,56234,1373],{"class":51},[45,56236,56237,56239,56241,56243,56245],{"class":47,"line":2660},[45,56238,54866],{"class":257},[45,56240,51518],{"class":51},[45,56242,782],{"class":257},[45,56244,536],{"class":93},[45,56246,1373],{"class":51},[45,56248,56249,56251,56253,56255],{"class":47,"line":2674},[45,56250,54965],{"class":257},[45,56252,51518],{"class":51},[45,56254,54970],{"class":257},[45,56256,1373],{"class":51},[45,56258,56259],{"class":47,"line":2682},[45,56260,2270],{"class":51},[45,56262,56263],{"class":47,"line":2687},[45,56264,2483],{"emptyLinePlaceholder":133},[45,56266,56267,56269,56271],{"class":47,"line":2693},[45,56268,54901],{"class":2046},[45,56270,6908],{"class":51381},[45,56272,15655],{"class":51},[45,56274,56275,56277,56279,56281],{"class":47,"line":2699},[45,56276,54840],{"class":257},[45,56278,51518],{"class":51},[45,56280,54912],{"class":257},[45,56282,1373],{"class":51},[45,56284,56285,56287,56289,56291,56293],{"class":47,"line":2704},[45,56286,55003],{"class":257},[45,56288,51518],{"class":51},[45,56290,1108],{"class":257},[45,56292,51573],{"class":93},[45,56294,1373],{"class":51},[45,56296,56297,56299,56301,56303,56305],{"class":47,"line":8031},[45,56298,54919],{"class":257},[45,56300,51518],{"class":51},[45,56302,907],{"class":257},[45,56304,51573],{"class":93},[45,56306,1373],{"class":51},[45,56308,56309,56311,56313,56315,56317],{"class":47,"line":8055},[45,56310,55028],{"class":257},[45,56312,51518],{"class":51},[45,56314,527],{"class":257},[45,56316,51573],{"class":93},[45,56318,1373],{"class":51},[45,56320,56321],{"class":47,"line":8060},[45,56322,2270],{"class":51},[45,56324,56325],{"class":47,"line":8066},[45,56326,2483],{"emptyLinePlaceholder":133},[45,56328,56329,56331],{"class":47,"line":8093},[45,56330,55049],{"class":51381},[45,56332,15655],{"class":51},[45,56334,56335,56337,56339,56341],{"class":47,"line":8098},[45,56336,54840],{"class":257},[45,56338,51518],{"class":51},[45,56340,54912],{"class":257},[45,56342,1373],{"class":51},[45,56344,56345,56347,56349,56351,56353],{"class":47,"line":8104},[45,56346,55028],{"class":257},[45,56348,51518],{"class":51},[45,56350,988],{"class":257},[45,56352,51573],{"class":93},[45,56354,1373],{"class":51},[45,56356,56357,56359,56361,56363,56365],{"class":47,"line":8116},[45,56358,54919],{"class":257},[45,56360,51518],{"class":51},[45,56362,907],{"class":257},[45,56364,51573],{"class":93},[45,56366,1373],{"class":51},[45,56368,56369,56371,56373,56375],{"class":47,"line":8128},[45,56370,55090],{"class":257},[45,56372,51518],{"class":51},[45,56374,51558],{"class":257},[45,56376,1373],{"class":51},[45,56378,56379,56381,56383,56385],{"class":47,"line":8140},[45,56380,55101],{"class":257},[45,56382,51518],{"class":51},[45,56384,51749],{"class":257},[45,56386,1373],{"class":51},[45,56388,56389,56391,56393,56395],{"class":47,"line":9799},[45,56390,54840],{"class":257},[45,56392,51518],{"class":51},[45,56394,54912],{"class":257},[45,56396,1373],{"class":51},[45,56398,56399,56401,56403,56405,56407],{"class":47,"line":9824},[45,56400,54852],{"class":257},[45,56402,51518],{"class":51},[45,56404,4075],{"class":257},[45,56406,51573],{"class":93},[45,56408,1373],{"class":51},[45,56410,56411,56413,56415,56417,56419],{"class":47,"line":9847},[45,56412,54866],{"class":257},[45,56414,51518],{"class":51},[45,56416,907],{"class":257},[45,56418,51573],{"class":93},[45,56420,1373],{"class":51},[45,56422,56423],{"class":47,"line":9871},[45,56424,2270],{"class":51},[45,56426,56427],{"class":47,"line":9876},[45,56428,2483],{"emptyLinePlaceholder":133},[45,56430,56431,56433,56435],{"class":47,"line":9881},[45,56432,55049],{"class":51381},[45,56434,55156],{"class":51381},[45,56436,15655],{"class":51},[45,56438,56439,56441,56443,56445,56447],{"class":47,"line":9886},[45,56440,54852],{"class":257},[45,56442,51518],{"class":51},[45,56444,907],{"class":257},[45,56446,51573],{"class":93},[45,56448,1373],{"class":51},[45,56450,56451,56453,56455,56457,56459],{"class":47,"line":9895},[45,56452,54866],{"class":257},[45,56454,51518],{"class":51},[45,56456,907],{"class":257},[45,56458,51573],{"class":93},[45,56460,1373],{"class":51},[45,56462,56463,56465,56467,56469,56471,56473,56475,56477,56479,56481,56483,56485],{"class":47,"line":9900},[45,56464,54965],{"class":257},[45,56466,51518],{"class":51},[45,56468,55191],{"class":257},[45,56470,209],{"class":51},[45,56472,400],{"class":257},[45,56474,12518],{"class":51},[45,56476,400],{"class":257},[45,56478,12518],{"class":51},[45,56480,400],{"class":257},[45,56482,12518],{"class":51},[45,56484,55208],{"class":257},[45,56486,2802],{"class":51},[45,56488,56489,56491,56493,56495,56497],{"class":47,"line":9906},[45,56490,55215],{"class":257},[45,56492,51518],{"class":51},[45,56494,654],{"class":257},[45,56496,51573],{"class":93},[45,56498,1373],{"class":51},[45,56500,56501],{"class":47,"line":9927},[45,56502,2270],{"class":51},[45,56504,56505],{"class":47,"line":9933},[45,56506,2483],{"emptyLinePlaceholder":133},[45,56508,56509,56511],{"class":47,"line":9947},[45,56510,55236],{"class":2046},[45,56512,15655],{"class":51},[45,56514,56515,56517,56519,56521],{"class":47,"line":9953},[45,56516,54965],{"class":257},[45,56518,51518],{"class":51},[45,56520,55247],{"class":257},[45,56522,1373],{"class":51},[45,56524,56525],{"class":47,"line":9980},[45,56526,2270],{"class":51},[45,56528,56529,56531,56533],{"class":47,"line":9989},[45,56530,52498],{"class":51},[45,56532,121],{"class":51381},[45,56534,51388],{"class":51},[45,56536,56537,56539,56541],{"class":47,"line":9995},[45,56538,51866],{"class":51},[45,56540,51415],{"class":51381},[45,56542,51388],{"class":51},[45,56544,56545],{"class":47,"line":10003},[45,56546,2483],{"emptyLinePlaceholder":133},[45,56548,56549,56551,56553],{"class":47,"line":10008},[45,56550,1117],{"class":51},[45,56552,51881],{"class":51381},[45,56554,51388],{"class":51},[45,56556,56557,56559,56561,56563,56565,56567],{"class":47,"line":16687},[45,56558,52225],{"class":51},[45,56560,51692],{"class":51381},[45,56562,53567],{"class":2046},[45,56564,254],{"class":51},[45,56566,53572],{"class":313},[45,56568,51388],{"class":51},[45,56570,56571,56573,56575,56577,56579,56581],{"class":47,"line":16693},[45,56572,51422],{"class":51},[45,56574,51692],{"class":51381},[45,56576,53567],{"class":2046},[45,56578,254],{"class":51},[45,56580,55308],{"class":313},[45,56582,51388],{"class":51},[45,56584,56585,56587,56589,56591,56593,56595,56597,56599,56601],{"class":47,"line":16716},[45,56586,55315],{"class":51},[45,56588,1545],{"class":51381},[45,56590,55320],{"class":2046},[45,56592,254],{"class":51},[45,56594,55325],{"class":313},[45,56596,55328],{"class":2046},[45,56598,254],{"class":51},[45,56600,7735],{"class":313},[45,56602,51388],{"class":51},[45,56604,56605,56607,56609],{"class":47,"line":16722},[45,56606,51857],{"class":51},[45,56608,51692],{"class":51381},[45,56610,51388],{"class":51},[45,56612,56613,56615,56617,56619,56621,56623],{"class":47,"line":16745},[45,56614,51422],{"class":51},[45,56616,51692],{"class":51381},[45,56618,53567],{"class":2046},[45,56620,254],{"class":51},[45,56622,55355],{"class":313},[45,56624,51388],{"class":51},[45,56626,56627,56629,56631,56633,56635],{"class":47,"line":16759},[45,56628,55315],{"class":51},[45,56630,10],{"class":51381},[45,56632,55366],{"class":51},[45,56634,10],{"class":51381},[45,56636,51388],{"class":51},[45,56638,56639,56641,56643],{"class":47,"line":16779},[45,56640,55315],{"class":51},[45,56642,1214],{"class":51381},[45,56644,51388],{"class":51},[45,56646,56647,56649,56651,56653,56655,56657,56659,56661],{"class":47,"line":16785},[45,56648,55383],{"class":51},[45,56650,162],{"class":51381},[45,56652,53567],{"class":2046},[45,56654,254],{"class":51},[45,56656,55392],{"class":313},[45,56658,55395],{"class":51},[45,56660,162],{"class":51381},[45,56662,51388],{"class":51},[45,56664,56665,56667,56669,56671,56673],{"class":47,"line":16796},[45,56666,55383],{"class":51},[45,56668,162],{"class":51381},[45,56670,55395],{"class":51},[45,56672,162],{"class":51381},[45,56674,51388],{"class":51},[45,56676,56677,56679,56681,56683,56685],{"class":47,"line":16819},[45,56678,55383],{"class":51},[45,56680,162],{"class":51381},[45,56682,55395],{"class":51},[45,56684,162],{"class":51381},[45,56686,51388],{"class":51},[45,56688,56689,56691,56693,56695,56697],{"class":47,"line":16841},[45,56690,55383],{"class":51},[45,56692,162],{"class":51381},[45,56694,55395],{"class":51},[45,56696,162],{"class":51381},[45,56698,51388],{"class":51},[45,56700,56701,56703,56705,56707,56709],{"class":47,"line":16846},[45,56702,55383],{"class":51},[45,56704,162],{"class":51381},[45,56706,55395],{"class":51},[45,56708,162],{"class":51381},[45,56710,51388],{"class":51},[45,56712,56713,56715,56717,56719,56721],{"class":47,"line":16852},[45,56714,55383],{"class":51},[45,56716,162],{"class":51381},[45,56718,55395],{"class":51},[45,56720,162],{"class":51381},[45,56722,51388],{"class":51},[45,56724,56725,56727,56729,56731,56733],{"class":47,"line":16866},[45,56726,55383],{"class":51},[45,56728,162],{"class":51381},[45,56730,55395],{"class":51},[45,56732,162],{"class":51381},[45,56734,51388],{"class":51},[45,56736,56737,56739,56741,56743,56745],{"class":47,"line":16879},[45,56738,55383],{"class":51},[45,56740,162],{"class":51381},[45,56742,55395],{"class":51},[45,56744,162],{"class":51381},[45,56746,51388],{"class":51},[45,56748,56749,56751,56753],{"class":47,"line":16884},[45,56750,55488],{"class":51},[45,56752,1214],{"class":51381},[45,56754,51388],{"class":51},[45,56756,56757,56759,56761],{"class":47,"line":16898},[45,56758,51857],{"class":51},[45,56760,51692],{"class":51381},[45,56762,51388],{"class":51},[45,56764,56765,56767,56769],{"class":47,"line":16903},[45,56766,52498],{"class":51},[45,56768,51692],{"class":51381},[45,56770,51388],{"class":51},[45,56772,56773,56775,56777],{"class":47,"line":16909},[45,56774,52225],{"class":51},[45,56776,51894],{"class":51381},[45,56778,51388],{"class":51},[45,56780,56781,56783,56786,56788],{"class":47,"line":16914},[45,56782,11304],{"class":93},[45,56784,56785],{"class":257}," sliderData",[45,56787,13647],{"class":93},[45,56789,55528],{"class":51},[45,56791,56792,56794,56796,56798,56800,56802,56804],{"class":47,"line":16928},[45,56793,55533],{"class":51},[45,56795,55536],{"class":313},[45,56797,55539],{"class":51},[45,56799,55542],{"class":313},[45,56801,55545],{"class":51},[45,56803,55548],{"class":313},[45,56805,55551],{"class":51},[45,56807,56808,56810,56812,56814,56816,56818,56820],{"class":47,"line":16933},[45,56809,55533],{"class":51},[45,56811,55558],{"class":313},[45,56813,55539],{"class":51},[45,56815,55563],{"class":313},[45,56817,55545],{"class":51},[45,56819,55568],{"class":313},[45,56821,55551],{"class":51},[45,56823,56824,56826,56828,56830,56832,56834,56836],{"class":47,"line":16938},[45,56825,55533],{"class":51},[45,56827,55577],{"class":313},[45,56829,55539],{"class":51},[45,56831,55582],{"class":313},[45,56833,55545],{"class":51},[45,56835,55587],{"class":313},[45,56837,55551],{"class":51},[45,56839,56840,56842,56844,56846,56848,56850,56852],{"class":47,"line":16952},[45,56841,55533],{"class":51},[45,56843,55596],{"class":313},[45,56845,55539],{"class":51},[45,56847,55601],{"class":313},[45,56849,55545],{"class":51},[45,56851,55606],{"class":313},[45,56853,55551],{"class":51},[45,56855,56856,56858,56860,56862,56864,56866,56868],{"class":47,"line":16964},[45,56857,55533],{"class":51},[45,56859,55615],{"class":313},[45,56861,55539],{"class":51},[45,56863,55620],{"class":313},[45,56865,55545],{"class":51},[45,56867,55625],{"class":313},[45,56869,55551],{"class":51},[45,56871,56872,56874,56876,56878,56880,56882,56884],{"class":47,"line":16969},[45,56873,55533],{"class":51},[45,56875,55634],{"class":313},[45,56877,55539],{"class":51},[45,56879,55639],{"class":313},[45,56881,55545],{"class":51},[45,56883,55644],{"class":313},[45,56885,55551],{"class":51},[45,56887,56888,56890,56892,56894,56896,56898,56900],{"class":47,"line":16982},[45,56889,55533],{"class":51},[45,56891,55653],{"class":313},[45,56893,55539],{"class":51},[45,56895,55658],{"class":313},[45,56897,55545],{"class":51},[45,56899,55663],{"class":313},[45,56901,55551],{"class":51},[45,56903,56904,56906,56908,56910,56912,56914,56916],{"class":47,"line":16987},[45,56905,55533],{"class":51},[45,56907,55672],{"class":313},[45,56909,55539],{"class":51},[45,56911,55677],{"class":313},[45,56913,55545],{"class":51},[45,56915,55682],{"class":313},[45,56917,55685],{"class":51},[45,56919,56920],{"class":47,"line":16992},[45,56921,53190],{"class":51},[45,56923,56924],{"class":47,"line":16997},[45,56925,56926],{"class":267},"    \u002F\u002F 1.获取元素\n",[45,56928,56929,56931,56933,56935,56937,56939,56941,56943],{"class":47,"line":17010},[45,56930,11304],{"class":93},[45,56932,55696],{"class":257},[45,56934,13647],{"class":93},[45,56936,54477],{"class":51},[45,56938,54480],{"class":2046},[45,56940,209],{"class":51},[45,56942,55707],{"class":313},[45,56944,215],{"class":51},[45,56946,56947,56949,56951,56953,56955,56957,56959,56961],{"class":47,"line":17015},[45,56948,11304],{"class":93},[45,56950,6908],{"class":257},[45,56952,13647],{"class":93},[45,56954,54477],{"class":51},[45,56956,54480],{"class":2046},[45,56958,209],{"class":51},[45,56960,55726],{"class":313},[45,56962,215],{"class":51},[45,56964,56965,56967,56969,56971],{"class":47,"line":32714},[45,56966,52300],{"class":93},[45,56968,9521],{"class":51},[45,56970,254],{"class":93},[45,56972,47414],{"class":257},[45,56974,56975],{"class":47,"line":32720},[45,56976,56977],{"class":267},"    \u002F\u002F 2.开启定时器\n",[45,56979,56980],{"class":47,"line":32726},[45,56981,56982],{"class":267},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[45,56984,56985,56988,56990,56992],{"class":47,"line":32732},[45,56986,56987],{"class":2046},"    setInterval",[45,56989,209],{"class":51},[45,56991,54530],{"class":93},[45,56993,54533],{"class":51},[45,56995,56996,56998],{"class":47,"line":32738},[45,56997,54538],{"class":51},[45,56999,2785],{"class":93},[45,57001,57002,57004,57006,57008,57011,57013],{"class":47,"line":32749},[45,57003,54561],{"class":93},[45,57005,54564],{"class":51},[45,57007,1793],{"class":93},[45,57009,57010],{"class":51}," sliderData.",[45,57012,52049],{"class":257},[45,57014,12525],{"class":51},[45,57016,57017,57020,57022],{"class":47,"line":32755},[45,57018,57019],{"class":51},"        i ",[45,57021,254],{"class":93},[45,57023,47414],{"class":257},[45,57025,57026],{"class":47,"line":32775},[45,57027,52479],{"class":51},[45,57029,57030],{"class":47,"line":32781},[45,57031,57032],{"class":267},"      \u002F\u002F 更换图片路径\n",[45,57034,57035,57037,57039],{"class":47,"line":32792},[45,57036,55802],{"class":51},[45,57038,254],{"class":93},[45,57040,57041],{"class":51}," sliderData[i].url\n",[45,57043,57044],{"class":47,"line":32798},[45,57045,57046],{"class":267},"      \u002F\u002F 把文字写到p里面\n",[45,57048,57049,57051,57053],{"class":47,"line":32804},[45,57050,55812],{"class":51},[45,57052,254],{"class":93},[45,57054,57055],{"class":51}," sliderData[i].title\n",[45,57057,57058],{"class":47,"line":32810},[45,57059,57060],{"class":267},"      \u002F\u002F 小圆点\n",[45,57062,57063],{"class":47,"line":32816},[45,57064,57065],{"class":267},"      \u002F\u002F 先删除以前的active\n",[45,57067,57068],{"class":47,"line":32822},[45,57069,57070],{"class":267},"      \u002F\u002F 只让当前li添加active\n",[45,57072,57073,57075,57077,57079,57082,57085,57088,57090,57092],{"class":47,"line":32828},[45,57074,55852],{"class":51},[45,57076,54480],{"class":2046},[45,57078,209],{"class":51},[45,57080,57081],{"class":313},"'.slider-footer .activate'",[45,57083,57084],{"class":51},").classList.",[45,57086,57087],{"class":2046},"remove",[45,57089,209],{"class":51},[45,57091,55870],{"class":313},[45,57093,215],{"class":51},[45,57095,57096,57098,57100,57102,57105,57107,57109,57111,57114,57116,57118,57120,57122],{"class":47,"line":32834},[45,57097,55852],{"class":51},[45,57099,54480],{"class":2046},[45,57101,209],{"class":51},[45,57103,57104],{"class":313},"`.slider-footer ul li:nth-child(${",[45,57106,649],{"class":51},[45,57108,45647],{"class":93},[45,57110,25201],{"class":257},[45,57112,57113],{"class":313},"})`",[45,57115,57084],{"class":51},[45,57117,5417],{"class":2046},[45,57119,209],{"class":51},[45,57121,55870],{"class":313},[45,57123,215],{"class":51},[45,57125,57126],{"class":47,"line":32854},[45,57127,2483],{"emptyLinePlaceholder":133},[45,57129,57130,57132,57134],{"class":47,"line":32860},[45,57131,54616],{"class":51},[45,57133,6493],{"class":257},[45,57135,215],{"class":51},[45,57137,57138],{"class":47,"line":32876},[45,57139,2483],{"emptyLinePlaceholder":133},[45,57141,57142,57144,57146],{"class":47,"line":32882},[45,57143,52498],{"class":51},[45,57145,51894],{"class":51381},[45,57147,51388],{"class":51},[45,57149,57150,57152,57154],{"class":47,"line":32896},[45,57151,51866],{"class":51},[45,57153,51881],{"class":51381},[45,57155,51388],{"class":51},[45,57157,57158],{"class":47,"line":32902},[45,57159,2483],{"emptyLinePlaceholder":133},[45,57161,57162,57164,57166],{"class":47,"line":32917},[45,57163,51866],{"class":51},[45,57165,50716],{"class":51381},[45,57167,51388],{"class":51},[176,57169,57171],{"id":57170},"_317-重要知识点","3.1.7 重要知识点",[10,57173,57174,57175],{},"浏览器在渲染文本时， ",[358,57176,57177],{},"没有空格或换行符就没有“断行点”",[10,57179,57180],{},[1545,57181],{"alt":40,"src":57182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[10,57184,57185],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[10,57187,57188],{},[1545,57189],{"alt":40,"src":57190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[10,57192,57193],{},[1545,57194],{"alt":40,"src":57195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[30,57197,57199],{"id":57198},"_32-dom事件基础","3.2 DOM事件基础",[176,57201,57203],{"id":57202},"_321-事件监听","3.2.1 事件监听",[10,57205,57206],{},[1545,57207],{"alt":40,"src":57208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[10,57210,57211],{},"事件监听有响应的发生",[10,57213,57214],{},[1545,57215],{"alt":40,"src":57216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[10,57218,57219],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[10,57221,57222],{},"对于有名函数,要执行的函数名后边不要加()",[176,57224,57226],{"id":57225},"_322-随机点名案例","3.2.2 随机点名案例",[35,57228,57230],{"className":50714,"code":57229,"language":50716,"meta":40,"style":40},"\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",[42,57231,57232,57242,57256,57260,57268,57282,57302,57314,57322,57328,57338,57348,57352,57356,57363,57374,57378,57382,57388,57400,57414,57424,57436,57449,57453,57457,57464,57468,57481,57493,57505,57509,57513,57517,57524,57534,57538,57542,57551,57563,57575,57590,57594,57602,57610,57614,57622,57635,57649,57662,57682,57690,57705,57725,57745,57753,57757,57765,57770,57806,57826,57831,57850,57855,57866,57871,57882,57887,57906,57921,57926,57952,57962,57971,57976,57992,57997,58002,58007,58022,58026,58030,58035,58054,58071,58079,58084,58099,58103,58107,58115,58123,58127],{"__ignoreMap":40},[45,57233,57234,57236,57238,57240],{"class":47,"line":48},[45,57235,51378],{"class":51},[45,57237,51382],{"class":51381},[45,57239,51385],{"class":2046},[45,57241,51388],{"class":51},[45,57243,57244,57246,57248,57250,57252,57254],{"class":47,"line":125},[45,57245,1117],{"class":51},[45,57247,50716],{"class":51381},[45,57249,51397],{"class":2046},[45,57251,254],{"class":51},[45,57253,51402],{"class":313},[45,57255,51388],{"class":51},[45,57257,57258],{"class":47,"line":1262},[45,57259,2483],{"emptyLinePlaceholder":133},[45,57261,57262,57264,57266],{"class":47,"line":1277},[45,57263,1117],{"class":51},[45,57265,51415],{"class":51381},[45,57267,51388],{"class":51},[45,57269,57270,57272,57274,57276,57278,57280],{"class":47,"line":1283},[45,57271,52225],{"class":51},[45,57273,51425],{"class":51381},[45,57275,51428],{"class":2046},[45,57277,254],{"class":51},[45,57279,51433],{"class":313},[45,57281,51388],{"class":51},[45,57283,57284,57286,57288,57290,57292,57294,57296,57298,57300],{"class":47,"line":1297},[45,57285,52225],{"class":51},[45,57287,51425],{"class":51381},[45,57289,15003],{"class":2046},[45,57291,254],{"class":51},[45,57293,51472],{"class":313},[45,57295,51452],{"class":2046},[45,57297,254],{"class":51},[45,57299,51479],{"class":313},[45,57301,51388],{"class":51},[45,57303,57304,57306,57308,57310,57312],{"class":47,"line":1303},[45,57305,52225],{"class":51},[45,57307,51488],{"class":51381},[45,57309,51491],{"class":51},[45,57311,51488],{"class":51381},[45,57313,51388],{"class":51},[45,57315,57316,57318,57320],{"class":47,"line":1394},[45,57317,52225],{"class":51},[45,57319,121],{"class":51381},[45,57321,51388],{"class":51},[45,57323,57324,57326],{"class":47,"line":1400},[45,57325,6486],{"class":51381},[45,57327,15655],{"class":51},[45,57329,57330,57332,57334,57336],{"class":47,"line":1412},[45,57331,54787],{"class":257},[45,57333,51518],{"class":51},[45,57335,400],{"class":257},[45,57337,1373],{"class":51},[45,57339,57340,57342,57344,57346],{"class":47,"line":1695},[45,57341,54776],{"class":257},[45,57343,51518],{"class":51},[45,57345,400],{"class":257},[45,57347,1373],{"class":51},[45,57349,57350],{"class":47,"line":1700},[45,57351,2270],{"class":51},[45,57353,57354],{"class":47,"line":1706},[45,57355,2483],{"emptyLinePlaceholder":133},[45,57357,57358,57361],{"class":47,"line":1711},[45,57359,57360],{"class":51381},"    h2",[45,57362,15655],{"class":51},[45,57364,57365,57368,57370,57372],{"class":47,"line":1725},[45,57366,57367],{"class":257},"      text-align",[45,57369,51518],{"class":51},[45,57371,51673],{"class":257},[45,57373,1373],{"class":51},[45,57375,57376],{"class":47,"line":1730},[45,57377,2270],{"class":51},[45,57379,57380],{"class":47,"line":1736},[45,57381,2483],{"emptyLinePlaceholder":133},[45,57383,57384,57386],{"class":47,"line":1757},[45,57385,54833],{"class":2046},[45,57387,15655],{"class":51},[45,57389,57390,57392,57394,57396,57398],{"class":47,"line":1762},[45,57391,54852],{"class":257},[45,57393,51518],{"class":51},[45,57395,1622],{"class":257},[45,57397,51573],{"class":93},[45,57399,1373],{"class":51},[45,57401,57402,57404,57406,57408,57410,57412],{"class":47,"line":1776},[45,57403,54787],{"class":257},[45,57405,51518],{"class":51},[45,57407,863],{"class":257},[45,57409,51573],{"class":93},[45,57411,51637],{"class":257},[45,57413,1373],{"class":51},[45,57415,57416,57418,57420,57422],{"class":47,"line":1781},[45,57417,55090],{"class":257},[45,57419,51518],{"class":51},[45,57421,51558],{"class":257},[45,57423,1373],{"class":51},[45,57425,57426,57428,57430,57432,57434],{"class":47,"line":1810},[45,57427,55003],{"class":257},[45,57429,51518],{"class":51},[45,57431,1032],{"class":257},[45,57433,51573],{"class":93},[45,57435,1373],{"class":51},[45,57437,57438,57441,57443,57445,57447],{"class":47,"line":1815},[45,57439,57440],{"class":257},"      line-height",[45,57442,51518],{"class":51},[45,57444,609],{"class":257},[45,57446,51573],{"class":93},[45,57448,1373],{"class":51},[45,57450,57451],{"class":47,"line":1832},[45,57452,2270],{"class":51},[45,57454,57455],{"class":47,"line":1837},[45,57456,2483],{"emptyLinePlaceholder":133},[45,57458,57459,57462],{"class":47,"line":1842},[45,57460,57461],{"class":2046},"    .qs",[45,57463,15655],{"class":51},[45,57465,57466],{"class":47,"line":1847},[45,57467,2483],{"emptyLinePlaceholder":133},[45,57469,57470,57472,57474,57477,57479],{"class":47,"line":1861},[45,57471,54852],{"class":257},[45,57473,51518],{"class":51},[45,57475,57476],{"class":257},"450",[45,57478,51573],{"class":93},[45,57480,1373],{"class":51},[45,57482,57483,57485,57487,57489,57491],{"class":47,"line":1866},[45,57484,54866],{"class":257},[45,57486,51518],{"class":51},[45,57488,609],{"class":257},[45,57490,51573],{"class":93},[45,57492,1373],{"class":51},[45,57494,57495,57498,57500,57503],{"class":47,"line":2660},[45,57496,57497],{"class":257},"      color",[45,57499,51518],{"class":51},[45,57501,57502],{"class":257},"red",[45,57504,1373],{"class":51},[45,57506,57507],{"class":47,"line":2674},[45,57508,2483],{"emptyLinePlaceholder":133},[45,57510,57511],{"class":47,"line":2682},[45,57512,2270],{"class":51},[45,57514,57515],{"class":47,"line":2687},[45,57516,2483],{"emptyLinePlaceholder":133},[45,57518,57519,57522],{"class":47,"line":2693},[45,57520,57521],{"class":2046},"    .btns",[45,57523,15655],{"class":51},[45,57525,57526,57528,57530,57532],{"class":47,"line":2699},[45,57527,57367],{"class":257},[45,57529,51518],{"class":51},[45,57531,51673],{"class":257},[45,57533,1373],{"class":51},[45,57535,57536],{"class":47,"line":2704},[45,57537,2270],{"class":51},[45,57539,57540],{"class":47,"line":8031},[45,57541,2483],{"emptyLinePlaceholder":133},[45,57543,57544,57546,57549],{"class":47,"line":8055},[45,57545,57521],{"class":2046},[45,57547,57548],{"class":51381}," button",[45,57550,15655],{"class":51},[45,57552,57553,57555,57557,57559,57561],{"class":47,"line":8060},[45,57554,54852],{"class":257},[45,57556,51518],{"class":51},[45,57558,1024],{"class":257},[45,57560,51573],{"class":93},[45,57562,1373],{"class":51},[45,57564,57565,57567,57569,57571,57573],{"class":47,"line":8066},[45,57566,54866],{"class":257},[45,57568,51518],{"class":51},[45,57570,481],{"class":257},[45,57572,51573],{"class":93},[45,57574,1373],{"class":51},[45,57576,57577,57579,57581,57583,57586,57588],{"class":47,"line":8093},[45,57578,54787],{"class":257},[45,57580,51518],{"class":51},[45,57582,400],{"class":257},[45,57584,57585],{"class":257}," 50",[45,57587,51573],{"class":93},[45,57589,1373],{"class":51},[45,57591,57592],{"class":47,"line":8098},[45,57593,2270],{"class":51},[45,57595,57596,57598,57600],{"class":47,"line":8104},[45,57597,52498],{"class":51},[45,57599,121],{"class":51381},[45,57601,51388],{"class":51},[45,57603,57604,57606,57608],{"class":47,"line":8116},[45,57605,51866],{"class":51},[45,57607,51415],{"class":51381},[45,57609,51388],{"class":51},[45,57611,57612],{"class":47,"line":8128},[45,57613,2483],{"emptyLinePlaceholder":133},[45,57615,57616,57618,57620],{"class":47,"line":8140},[45,57617,1117],{"class":51},[45,57619,51881],{"class":51381},[45,57621,51388],{"class":51},[45,57623,57624,57626,57628,57631,57633],{"class":47,"line":9799},[45,57625,52225],{"class":51},[45,57627,30],{"class":51381},[45,57629,57630],{"class":51},">随机点名\u003C\u002F",[45,57632,30],{"class":51381},[45,57634,51388],{"class":51},[45,57636,57637,57639,57641,57643,57645,57647],{"class":47,"line":9824},[45,57638,52225],{"class":51},[45,57640,51692],{"class":51381},[45,57642,53567],{"class":2046},[45,57644,254],{"class":51},[45,57646,53572],{"class":313},[45,57648,51388],{"class":51},[45,57650,57651,57653,57655,57658,57660],{"class":47,"line":9847},[45,57652,51422],{"class":51},[45,57654,45],{"class":51381},[45,57656,57657],{"class":51},">名字是：\u003C\u002F",[45,57659,45],{"class":51381},[45,57661,51388],{"class":51},[45,57663,57664,57666,57668,57670,57672,57675,57678,57680],{"class":47,"line":9871},[45,57665,51422],{"class":51},[45,57667,51692],{"class":51381},[45,57669,53567],{"class":2046},[45,57671,254],{"class":51},[45,57673,57674],{"class":313},"\"qs\"",[45,57676,57677],{"class":51},">这里显示姓名\u003C\u002F",[45,57679,51692],{"class":51381},[45,57681,51388],{"class":51},[45,57683,57684,57686,57688],{"class":47,"line":9876},[45,57685,52498],{"class":51},[45,57687,51692],{"class":51381},[45,57689,51388],{"class":51},[45,57691,57692,57694,57696,57698,57700,57703],{"class":47,"line":9881},[45,57693,52225],{"class":51},[45,57695,51692],{"class":51381},[45,57697,53567],{"class":2046},[45,57699,254],{"class":51},[45,57701,57702],{"class":313},"\"btns\"",[45,57704,51388],{"class":51},[45,57706,57707,57709,57711,57713,57715,57718,57721,57723],{"class":47,"line":9886},[45,57708,51422],{"class":51},[45,57710,53968],{"class":51381},[45,57712,53567],{"class":2046},[45,57714,254],{"class":51},[45,57716,57717],{"class":313},"\"start\"",[45,57719,57720],{"class":51},">开始\u003C\u002F",[45,57722,53968],{"class":51381},[45,57724,51388],{"class":51},[45,57726,57727,57729,57731,57733,57735,57738,57741,57743],{"class":47,"line":9895},[45,57728,51422],{"class":51},[45,57730,53968],{"class":51381},[45,57732,53567],{"class":2046},[45,57734,254],{"class":51},[45,57736,57737],{"class":313},"\"end\"",[45,57739,57740],{"class":51},">结束\u003C\u002F",[45,57742,53968],{"class":51381},[45,57744,51388],{"class":51},[45,57746,57747,57749,57751],{"class":47,"line":9900},[45,57748,52498],{"class":51},[45,57750,51692],{"class":51381},[45,57752,51388],{"class":51},[45,57754,57755],{"class":47,"line":9906},[45,57756,2483],{"emptyLinePlaceholder":133},[45,57758,57759,57761,57763],{"class":47,"line":9927},[45,57760,52225],{"class":51},[45,57762,51894],{"class":51381},[45,57764,51388],{"class":51},[45,57766,57767],{"class":47,"line":9933},[45,57768,57769],{"class":267},"    \u002F\u002F 数据数组\n",[45,57771,57772,57774,57777,57779,57781,57784,57786,57789,57791,57794,57796,57799,57801,57804],{"class":47,"line":9947},[45,57773,11304],{"class":93},[45,57775,57776],{"class":257}," arr",[45,57778,13647],{"class":93},[45,57780,52307],{"class":51},[45,57782,57783],{"class":313},"'马超'",[45,57785,12518],{"class":51},[45,57787,57788],{"class":313},"'黄忠'",[45,57790,12518],{"class":51},[45,57792,57793],{"class":313},"'赵云'",[45,57795,12518],{"class":51},[45,57797,57798],{"class":313},"'关羽'",[45,57800,12518],{"class":51},[45,57802,57803],{"class":313},"'张飞'",[45,57805,33327],{"class":51},[45,57807,57808,57810,57813,57815,57817,57819,57821,57824],{"class":47,"line":9953},[45,57809,11304],{"class":93},[45,57811,57812],{"class":257}," qs",[45,57814,13647],{"class":93},[45,57816,54477],{"class":51},[45,57818,54480],{"class":2046},[45,57820,209],{"class":51},[45,57822,57823],{"class":313},"'.qs'",[45,57825,215],{"class":51},[45,57827,57828],{"class":47,"line":9980},[45,57829,57830],{"class":267},"    \u002F\u002F 1.业务1.开始按钮模块\n",[45,57832,57833,57835,57837,57839,57841,57843,57845,57848],{"class":47,"line":9989},[45,57834,11304],{"class":93},[45,57836,4267],{"class":257},[45,57838,13647],{"class":93},[45,57840,54477],{"class":51},[45,57842,54480],{"class":2046},[45,57844,209],{"class":51},[45,57846,57847],{"class":313},"'.start'",[45,57849,215],{"class":51},[45,57851,57852],{"class":47,"line":9995},[45,57853,57854],{"class":267},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[45,57856,57857,57859,57862,57864],{"class":47,"line":10003},[45,57858,52300],{"class":93},[45,57860,57861],{"class":51}," timerId ",[45,57863,254],{"class":93},[45,57865,47414],{"class":257},[45,57867,57868],{"class":47,"line":10008},[45,57869,57870],{"class":267},"    \u002F\u002F 随机号要全局变量\n",[45,57872,57873,57875,57878,57880],{"class":47,"line":16687},[45,57874,52300],{"class":93},[45,57876,57877],{"class":51}," random ",[45,57879,254],{"class":93},[45,57881,47414],{"class":257},[45,57883,57884],{"class":47,"line":16693},[45,57885,57886],{"class":267},"    \u002F\u002F 1.1 添加点击事件\n",[45,57888,57889,57892,57895,57897,57900,57902,57904],{"class":47,"line":16716},[45,57890,57891],{"class":51},"    start.",[45,57893,57894],{"class":2046},"addEventListener",[45,57896,209],{"class":51},[45,57898,57899],{"class":313},"'click'",[45,57901,12518],{"class":51},[45,57903,54530],{"class":93},[45,57905,54533],{"class":51},[45,57907,57908,57911,57913,57915,57917,57919],{"class":47,"line":16722},[45,57909,57910],{"class":51},"      timerId ",[45,57912,254],{"class":93},[45,57914,54525],{"class":2046},[45,57916,209],{"class":51},[45,57918,54530],{"class":93},[45,57920,54533],{"class":51},[45,57922,57923],{"class":47,"line":16745},[45,57924,57925],{"class":267},"        \u002F\u002F 随机数\n",[45,57927,57928,57931,57933,57936,57939,57942,57944,57946,57948,57950],{"class":47,"line":16759},[45,57929,57930],{"class":51},"        random ",[45,57932,254],{"class":93},[45,57934,57935],{"class":2046}," parseInt",[45,57937,57938],{"class":51},"(Math.",[45,57940,57941],{"class":2046},"random",[45,57943,13133],{"class":51},[45,57945,663],{"class":93},[45,57947,52046],{"class":51},[45,57949,52049],{"class":257},[45,57951,215],{"class":51},[45,57953,57954,57957,57959],{"class":47,"line":16779},[45,57955,57956],{"class":51},"        qs.innerHTML ",[45,57958,254],{"class":93},[45,57960,57961],{"class":51}," arr[random]\n",[45,57963,57964,57967,57969],{"class":47,"line":16785},[45,57965,57966],{"class":51},"      }, ",[45,57968,481],{"class":257},[45,57970,215],{"class":51},[45,57972,57973],{"class":47,"line":16796},[45,57974,57975],{"class":267},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[45,57977,57978,57980,57983,57985,57988,57990],{"class":47,"line":16819},[45,57979,54561],{"class":93},[45,57981,57982],{"class":51}," (arr.",[45,57984,52049],{"class":257},[45,57986,57987],{"class":93}," ===",[45,57989,25201],{"class":257},[45,57991,12525],{"class":51},[45,57993,57994],{"class":47,"line":16841},[45,57995,57996],{"class":267},"        \u002F\u002F start.disabled = true\n",[45,57998,57999],{"class":47,"line":16846},[45,58000,58001],{"class":267},"        \u002F\u002F end.disabled = true\n",[45,58003,58004],{"class":47,"line":16852},[45,58005,58006],{"class":267},"        \u002F\u002F 可以合起来写\n",[45,58008,58009,58012,58014,58017,58019],{"class":47,"line":16866},[45,58010,58011],{"class":51},"        start.disabled ",[45,58013,254],{"class":93},[45,58015,58016],{"class":51}," end.disabled ",[45,58018,254],{"class":93},[45,58020,58021],{"class":257}," true\n",[45,58023,58024],{"class":47,"line":16879},[45,58025,52479],{"class":51},[45,58027,58028],{"class":47,"line":16884},[45,58029,33542],{"class":51},[45,58031,58032],{"class":47,"line":16898},[45,58033,58034],{"class":267},"    \u002F\u002F 1.2 关闭按钮模块\n",[45,58036,58037,58039,58041,58043,58045,58047,58049,58052],{"class":47,"line":16903},[45,58038,11304],{"class":93},[45,58040,4283],{"class":257},[45,58042,13647],{"class":93},[45,58044,54477],{"class":51},[45,58046,54480],{"class":2046},[45,58048,209],{"class":51},[45,58050,58051],{"class":313},"'.end'",[45,58053,215],{"class":51},[45,58055,58056,58059,58061,58063,58065,58067,58069],{"class":47,"line":16909},[45,58057,58058],{"class":51},"    end.",[45,58060,57894],{"class":2046},[45,58062,209],{"class":51},[45,58064,57899],{"class":313},[45,58066,12518],{"class":51},[45,58068,54530],{"class":93},[45,58070,54533],{"class":51},[45,58072,58073,58076],{"class":47,"line":16914},[45,58074,58075],{"class":2046},"      clearInterval",[45,58077,58078],{"class":51},"(timerId)\n",[45,58080,58081],{"class":47,"line":16928},[45,58082,58083],{"class":267},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[45,58085,58086,58089,58092,58095,58097],{"class":47,"line":16933},[45,58087,58088],{"class":51},"      arr.",[45,58090,58091],{"class":2046},"splice",[45,58093,58094],{"class":51},"(random, ",[45,58096,426],{"class":257},[45,58098,215],{"class":51},[45,58100,58101],{"class":47,"line":16938},[45,58102,33542],{"class":51},[45,58104,58105],{"class":47,"line":16952},[45,58106,2483],{"emptyLinePlaceholder":133},[45,58108,58109,58111,58113],{"class":47,"line":16964},[45,58110,52498],{"class":51},[45,58112,51894],{"class":51381},[45,58114,51388],{"class":51},[45,58116,58117,58119,58121],{"class":47,"line":16969},[45,58118,51866],{"class":51},[45,58120,51881],{"class":51381},[45,58122,51388],{"class":51},[45,58124,58125],{"class":47,"line":16982},[45,58126,2483],{"emptyLinePlaceholder":133},[45,58128,58129,58131,58133],{"class":47,"line":16987},[45,58130,51866],{"class":51},[45,58132,50716],{"class":51381},[45,58134,51388],{"class":51},[10,58136,58137],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[176,58139,58141],{"id":58140},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[35,58143,58145],{"className":50714,"code":58144,"language":50716,"meta":40,"style":40},"\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",[42,58146,58147,58157,58171,58175,58183,58197,58217,58229,58237,58241,58249,58261,58269,58288,58305,58321,58331,58335,58343,58351,58355],{"__ignoreMap":40},[45,58148,58149,58151,58153,58155],{"class":47,"line":48},[45,58150,51378],{"class":51},[45,58152,51382],{"class":51381},[45,58154,51385],{"class":2046},[45,58156,51388],{"class":51},[45,58158,58159,58161,58163,58165,58167,58169],{"class":47,"line":125},[45,58160,1117],{"class":51},[45,58162,50716],{"class":51381},[45,58164,51397],{"class":2046},[45,58166,254],{"class":51},[45,58168,51402],{"class":313},[45,58170,51388],{"class":51},[45,58172,58173],{"class":47,"line":1262},[45,58174,2483],{"emptyLinePlaceholder":133},[45,58176,58177,58179,58181],{"class":47,"line":1277},[45,58178,1117],{"class":51},[45,58180,51415],{"class":51381},[45,58182,51388],{"class":51},[45,58184,58185,58187,58189,58191,58193,58195],{"class":47,"line":1283},[45,58186,52225],{"class":51},[45,58188,51425],{"class":51381},[45,58190,51428],{"class":2046},[45,58192,254],{"class":51},[45,58194,51433],{"class":313},[45,58196,51388],{"class":51},[45,58198,58199,58201,58203,58205,58207,58209,58211,58213,58215],{"class":47,"line":1297},[45,58200,52225],{"class":51},[45,58202,51425],{"class":51381},[45,58204,15003],{"class":2046},[45,58206,254],{"class":51},[45,58208,51472],{"class":313},[45,58210,51452],{"class":2046},[45,58212,254],{"class":51},[45,58214,51479],{"class":313},[45,58216,51388],{"class":51},[45,58218,58219,58221,58223,58225,58227],{"class":47,"line":1303},[45,58220,52225],{"class":51},[45,58222,51488],{"class":51381},[45,58224,51491],{"class":51},[45,58226,51488],{"class":51381},[45,58228,51388],{"class":51},[45,58230,58231,58233,58235],{"class":47,"line":1394},[45,58232,51866],{"class":51},[45,58234,51415],{"class":51381},[45,58236,51388],{"class":51},[45,58238,58239],{"class":47,"line":1400},[45,58240,2483],{"emptyLinePlaceholder":133},[45,58242,58243,58245,58247],{"class":47,"line":1412},[45,58244,1117],{"class":51},[45,58246,51881],{"class":51381},[45,58248,51388],{"class":51},[45,58250,58251,58253,58255,58257,58259],{"class":47,"line":1695},[45,58252,52225],{"class":51},[45,58254,53968],{"class":51381},[45,58256,53974],{"class":51},[45,58258,53968],{"class":51381},[45,58260,51388],{"class":51},[45,58262,58263,58265,58267],{"class":47,"line":1700},[45,58264,52225],{"class":51},[45,58266,51894],{"class":51381},[45,58268,51388],{"class":51},[45,58270,58271,58273,58275,58277,58279,58281,58283,58286],{"class":47,"line":1706},[45,58272,11304],{"class":93},[45,58274,54472],{"class":257},[45,58276,13647],{"class":93},[45,58278,54477],{"class":51},[45,58280,54480],{"class":2046},[45,58282,209],{"class":51},[45,58284,58285],{"class":313},"'button'",[45,58287,215],{"class":51},[45,58289,58290,58293,58295,58297,58299,58301,58303],{"class":47,"line":1711},[45,58291,58292],{"class":51},"    btn.",[45,58294,57894],{"class":2046},[45,58296,209],{"class":51},[45,58298,57899],{"class":313},[45,58300,12518],{"class":51},[45,58302,54530],{"class":93},[45,58304,54533],{"class":51},[45,58306,58307,58310,58312,58314,58317,58319],{"class":47,"line":1725},[45,58308,58309],{"class":93},"      const",[45,58311,2323],{"class":257},[45,58313,13647],{"class":93},[45,58315,58316],{"class":51}," Math.",[45,58318,57941],{"class":2046},[45,58320,2059],{"class":51},[45,58322,58323,58326,58329],{"class":47,"line":1730},[45,58324,58325],{"class":51},"      console.",[45,58327,58328],{"class":2046},"log",[45,58330,222],{"class":51},[45,58332,58333],{"class":47,"line":1736},[45,58334,33542],{"class":51},[45,58336,58337,58339,58341],{"class":47,"line":1757},[45,58338,52498],{"class":51},[45,58340,51894],{"class":51381},[45,58342,51388],{"class":51},[45,58344,58345,58347,58349],{"class":47,"line":1762},[45,58346,51866],{"class":51},[45,58348,51881],{"class":51381},[45,58350,51388],{"class":51},[45,58352,58353],{"class":47,"line":1776},[45,58354,2483],{"emptyLinePlaceholder":133},[45,58356,58357,58359,58361],{"class":47,"line":1781},[45,58358,51866],{"class":51},[45,58360,50716],{"class":51381},[45,58362,51388],{"class":51},[10,58364,58365],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[10,58367,58368],{},"常量不可以重新赋值",[10,58370,58371],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[35,58373,58375],{"className":50714,"code":58374,"language":50716,"meta":40,"style":40},"\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",[42,58376,58377,58387,58401,58405,58413,58427,58447,58459,58467,58471,58479,58491,58499,58510,58528,58544,58558,58566,58570,58578,58586,58590],{"__ignoreMap":40},[45,58378,58379,58381,58383,58385],{"class":47,"line":48},[45,58380,51378],{"class":51},[45,58382,51382],{"class":51381},[45,58384,51385],{"class":2046},[45,58386,51388],{"class":51},[45,58388,58389,58391,58393,58395,58397,58399],{"class":47,"line":125},[45,58390,1117],{"class":51},[45,58392,50716],{"class":51381},[45,58394,51397],{"class":2046},[45,58396,254],{"class":51},[45,58398,51402],{"class":313},[45,58400,51388],{"class":51},[45,58402,58403],{"class":47,"line":1262},[45,58404,2483],{"emptyLinePlaceholder":133},[45,58406,58407,58409,58411],{"class":47,"line":1277},[45,58408,1117],{"class":51},[45,58410,51415],{"class":51381},[45,58412,51388],{"class":51},[45,58414,58415,58417,58419,58421,58423,58425],{"class":47,"line":1283},[45,58416,52225],{"class":51},[45,58418,51425],{"class":51381},[45,58420,51428],{"class":2046},[45,58422,254],{"class":51},[45,58424,51433],{"class":313},[45,58426,51388],{"class":51},[45,58428,58429,58431,58433,58435,58437,58439,58441,58443,58445],{"class":47,"line":1297},[45,58430,52225],{"class":51},[45,58432,51425],{"class":51381},[45,58434,15003],{"class":2046},[45,58436,254],{"class":51},[45,58438,51472],{"class":313},[45,58440,51452],{"class":2046},[45,58442,254],{"class":51},[45,58444,51479],{"class":313},[45,58446,51388],{"class":51},[45,58448,58449,58451,58453,58455,58457],{"class":47,"line":1303},[45,58450,52225],{"class":51},[45,58452,51488],{"class":51381},[45,58454,51491],{"class":51},[45,58456,51488],{"class":51381},[45,58458,51388],{"class":51},[45,58460,58461,58463,58465],{"class":47,"line":1394},[45,58462,51866],{"class":51},[45,58464,51415],{"class":51381},[45,58466,51388],{"class":51},[45,58468,58469],{"class":47,"line":1400},[45,58470,2483],{"emptyLinePlaceholder":133},[45,58472,58473,58475,58477],{"class":47,"line":1412},[45,58474,1117],{"class":51},[45,58476,51881],{"class":51381},[45,58478,51388],{"class":51},[45,58480,58481,58483,58485,58487,58489],{"class":47,"line":1695},[45,58482,52225],{"class":51},[45,58484,53968],{"class":51381},[45,58486,53974],{"class":51},[45,58488,53968],{"class":51381},[45,58490,51388],{"class":51},[45,58492,58493,58495,58497],{"class":47,"line":1700},[45,58494,52225],{"class":51},[45,58496,51894],{"class":51381},[45,58498,51388],{"class":51},[45,58500,58501,58503,58505,58507],{"class":47,"line":1706},[45,58502,11304],{"class":93},[45,58504,2323],{"class":257},[45,58506,13647],{"class":93},[45,58508,58509],{"class":257}," 10\n",[45,58511,58512,58514,58516,58518,58520,58522,58524,58526],{"class":47,"line":1711},[45,58513,11304],{"class":93},[45,58515,54472],{"class":257},[45,58517,13647],{"class":93},[45,58519,54477],{"class":51},[45,58521,54480],{"class":2046},[45,58523,209],{"class":51},[45,58525,58285],{"class":313},[45,58527,215],{"class":51},[45,58529,58530,58532,58534,58536,58538,58540,58542],{"class":47,"line":1725},[45,58531,58292],{"class":51},[45,58533,57894],{"class":2046},[45,58535,209],{"class":51},[45,58537,57899],{"class":313},[45,58539,12518],{"class":51},[45,58541,54530],{"class":93},[45,58543,54533],{"class":51},[45,58545,58546,58548,58550,58552,58554,58556],{"class":47,"line":1730},[45,58547,58309],{"class":93},[45,58549,2323],{"class":257},[45,58551,13647],{"class":93},[45,58553,58316],{"class":51},[45,58555,57941],{"class":2046},[45,58557,2059],{"class":51},[45,58559,58560,58562,58564],{"class":47,"line":1736},[45,58561,58325],{"class":51},[45,58563,58328],{"class":2046},[45,58565,222],{"class":51},[45,58567,58568],{"class":47,"line":1757},[45,58569,33542],{"class":51},[45,58571,58572,58574,58576],{"class":47,"line":1762},[45,58573,52498],{"class":51},[45,58575,51894],{"class":51381},[45,58577,51388],{"class":51},[45,58579,58580,58582,58584],{"class":47,"line":1776},[45,58581,51866],{"class":51},[45,58583,51881],{"class":51381},[45,58585,51388],{"class":51},[45,58587,58588],{"class":47,"line":1781},[45,58589,2483],{"emptyLinePlaceholder":133},[45,58591,58592,58594,58596],{"class":47,"line":1810},[45,58593,51866],{"class":51},[45,58595,50716],{"class":51381},[45,58597,51388],{"class":51},[10,58599,58600],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[35,58602,58604],{"className":50714,"code":58603,"language":50716,"meta":40,"style":40},"\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",[42,58605,58606,58616,58630,58634,58642,58656,58676,58688,58696,58700,58708,58720,58728,58738,58756,58772,58785,58793,58797,58805,58813,58817],{"__ignoreMap":40},[45,58607,58608,58610,58612,58614],{"class":47,"line":48},[45,58609,51378],{"class":51},[45,58611,51382],{"class":51381},[45,58613,51385],{"class":2046},[45,58615,51388],{"class":51},[45,58617,58618,58620,58622,58624,58626,58628],{"class":47,"line":125},[45,58619,1117],{"class":51},[45,58621,50716],{"class":51381},[45,58623,51397],{"class":2046},[45,58625,254],{"class":51},[45,58627,51402],{"class":313},[45,58629,51388],{"class":51},[45,58631,58632],{"class":47,"line":1262},[45,58633,2483],{"emptyLinePlaceholder":133},[45,58635,58636,58638,58640],{"class":47,"line":1277},[45,58637,1117],{"class":51},[45,58639,51415],{"class":51381},[45,58641,51388],{"class":51},[45,58643,58644,58646,58648,58650,58652,58654],{"class":47,"line":1283},[45,58645,52225],{"class":51},[45,58647,51425],{"class":51381},[45,58649,51428],{"class":2046},[45,58651,254],{"class":51},[45,58653,51433],{"class":313},[45,58655,51388],{"class":51},[45,58657,58658,58660,58662,58664,58666,58668,58670,58672,58674],{"class":47,"line":1297},[45,58659,52225],{"class":51},[45,58661,51425],{"class":51381},[45,58663,15003],{"class":2046},[45,58665,254],{"class":51},[45,58667,51472],{"class":313},[45,58669,51452],{"class":2046},[45,58671,254],{"class":51},[45,58673,51479],{"class":313},[45,58675,51388],{"class":51},[45,58677,58678,58680,58682,58684,58686],{"class":47,"line":1303},[45,58679,52225],{"class":51},[45,58681,51488],{"class":51381},[45,58683,51491],{"class":51},[45,58685,51488],{"class":51381},[45,58687,51388],{"class":51},[45,58689,58690,58692,58694],{"class":47,"line":1394},[45,58691,51866],{"class":51},[45,58693,51415],{"class":51381},[45,58695,51388],{"class":51},[45,58697,58698],{"class":47,"line":1400},[45,58699,2483],{"emptyLinePlaceholder":133},[45,58701,58702,58704,58706],{"class":47,"line":1412},[45,58703,1117],{"class":51},[45,58705,51881],{"class":51381},[45,58707,51388],{"class":51},[45,58709,58710,58712,58714,58716,58718],{"class":47,"line":1695},[45,58711,52225],{"class":51},[45,58713,53968],{"class":51381},[45,58715,53974],{"class":51},[45,58717,53968],{"class":51381},[45,58719,51388],{"class":51},[45,58721,58722,58724,58726],{"class":47,"line":1700},[45,58723,52225],{"class":51},[45,58725,51894],{"class":51381},[45,58727,51388],{"class":51},[45,58729,58730,58732,58734,58736],{"class":47,"line":1706},[45,58731,11304],{"class":93},[45,58733,2323],{"class":257},[45,58735,13647],{"class":93},[45,58737,58509],{"class":257},[45,58739,58740,58742,58744,58746,58748,58750,58752,58754],{"class":47,"line":1711},[45,58741,11304],{"class":93},[45,58743,54472],{"class":257},[45,58745,13647],{"class":93},[45,58747,54477],{"class":51},[45,58749,54480],{"class":2046},[45,58751,209],{"class":51},[45,58753,58285],{"class":313},[45,58755,215],{"class":51},[45,58757,58758,58760,58762,58764,58766,58768,58770],{"class":47,"line":1725},[45,58759,58292],{"class":51},[45,58761,57894],{"class":2046},[45,58763,209],{"class":51},[45,58765,57899],{"class":313},[45,58767,12518],{"class":51},[45,58769,54530],{"class":93},[45,58771,54533],{"class":51},[45,58773,58774,58777,58779,58781,58783],{"class":47,"line":1730},[45,58775,58776],{"class":51},"      num ",[45,58778,254],{"class":93},[45,58780,58316],{"class":51},[45,58782,57941],{"class":2046},[45,58784,2059],{"class":51},[45,58786,58787,58789,58791],{"class":47,"line":1736},[45,58788,58325],{"class":51},[45,58790,58328],{"class":2046},[45,58792,222],{"class":51},[45,58794,58795],{"class":47,"line":1757},[45,58796,33542],{"class":51},[45,58798,58799,58801,58803],{"class":47,"line":1762},[45,58800,52498],{"class":51},[45,58802,51894],{"class":51381},[45,58804,51388],{"class":51},[45,58806,58807,58809,58811],{"class":47,"line":1776},[45,58808,51866],{"class":51},[45,58810,51881],{"class":51381},[45,58812,51388],{"class":51},[45,58814,58815],{"class":47,"line":1781},[45,58816,2483],{"emptyLinePlaceholder":133},[45,58818,58819,58821,58823],{"class":47,"line":1810},[45,58820,51866],{"class":51},[45,58822,50716],{"class":51381},[45,58824,51388],{"class":51},[10,58826,58827],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[176,58829,58831],{"id":58830},"_324-事件监听版本","3.2.4 事件监听版本",[10,58833,58834],{},[1545,58835],{"alt":40,"src":58836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[10,58838,58839],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[10,58841,58842],{},"这种方式会覆盖前边的事件监听:",[35,58844,58846],{"className":50714,"code":58845,"language":50716,"meta":40,"style":40},"\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",[42,58847,58848,58858,58872,58876,58884,58898,58918,58930,58938,58942,58950,58962,58970,58988,59002,59013,59017,59029,59039,59043,59051,59059,59063],{"__ignoreMap":40},[45,58849,58850,58852,58854,58856],{"class":47,"line":48},[45,58851,51378],{"class":51},[45,58853,51382],{"class":51381},[45,58855,51385],{"class":2046},[45,58857,51388],{"class":51},[45,58859,58860,58862,58864,58866,58868,58870],{"class":47,"line":125},[45,58861,1117],{"class":51},[45,58863,50716],{"class":51381},[45,58865,51397],{"class":2046},[45,58867,254],{"class":51},[45,58869,51402],{"class":313},[45,58871,51388],{"class":51},[45,58873,58874],{"class":47,"line":1262},[45,58875,2483],{"emptyLinePlaceholder":133},[45,58877,58878,58880,58882],{"class":47,"line":1277},[45,58879,1117],{"class":51},[45,58881,51415],{"class":51381},[45,58883,51388],{"class":51},[45,58885,58886,58888,58890,58892,58894,58896],{"class":47,"line":1283},[45,58887,52225],{"class":51},[45,58889,51425],{"class":51381},[45,58891,51428],{"class":2046},[45,58893,254],{"class":51},[45,58895,51433],{"class":313},[45,58897,51388],{"class":51},[45,58899,58900,58902,58904,58906,58908,58910,58912,58914,58916],{"class":47,"line":1297},[45,58901,52225],{"class":51},[45,58903,51425],{"class":51381},[45,58905,15003],{"class":2046},[45,58907,254],{"class":51},[45,58909,51472],{"class":313},[45,58911,51452],{"class":2046},[45,58913,254],{"class":51},[45,58915,51479],{"class":313},[45,58917,51388],{"class":51},[45,58919,58920,58922,58924,58926,58928],{"class":47,"line":1303},[45,58921,52225],{"class":51},[45,58923,51488],{"class":51381},[45,58925,51491],{"class":51},[45,58927,51488],{"class":51381},[45,58929,51388],{"class":51},[45,58931,58932,58934,58936],{"class":47,"line":1394},[45,58933,51866],{"class":51},[45,58935,51415],{"class":51381},[45,58937,51388],{"class":51},[45,58939,58940],{"class":47,"line":1400},[45,58941,2483],{"emptyLinePlaceholder":133},[45,58943,58944,58946,58948],{"class":47,"line":1412},[45,58945,1117],{"class":51},[45,58947,51881],{"class":51381},[45,58949,51388],{"class":51},[45,58951,58952,58954,58956,58958,58960],{"class":47,"line":1695},[45,58953,52225],{"class":51},[45,58955,53968],{"class":51381},[45,58957,53974],{"class":51},[45,58959,53968],{"class":51381},[45,58961,51388],{"class":51},[45,58963,58964,58966,58968],{"class":47,"line":1700},[45,58965,52225],{"class":51},[45,58967,51894],{"class":51381},[45,58969,51388],{"class":51},[45,58971,58972,58974,58976,58978,58980,58982,58984,58986],{"class":47,"line":1706},[45,58973,11304],{"class":93},[45,58975,54472],{"class":257},[45,58977,13647],{"class":93},[45,58979,54477],{"class":51},[45,58981,54480],{"class":2046},[45,58983,209],{"class":51},[45,58985,58285],{"class":313},[45,58987,215],{"class":51},[45,58989,58990,58992,58995,58997,59000],{"class":47,"line":1711},[45,58991,58292],{"class":51},[45,58993,58994],{"class":2046},"onclick",[45,58996,13647],{"class":93},[45,58998,58999],{"class":93}," function",[45,59001,54533],{"class":51},[45,59003,59004,59007,59009,59011],{"class":47,"line":1725},[45,59005,59006],{"class":2046},"      alert",[45,59008,209],{"class":51},[45,59010,680],{"class":257},[45,59012,215],{"class":51},[45,59014,59015],{"class":47,"line":1730},[45,59016,2270],{"class":51},[45,59018,59019,59021,59023,59025,59027],{"class":47,"line":1736},[45,59020,58292],{"class":51},[45,59022,58994],{"class":2046},[45,59024,13647],{"class":93},[45,59026,58999],{"class":93},[45,59028,54533],{"class":51},[45,59030,59031,59033,59035,59037],{"class":47,"line":1757},[45,59032,59006],{"class":2046},[45,59034,209],{"class":51},[45,59036,957],{"class":257},[45,59038,215],{"class":51},[45,59040,59041],{"class":47,"line":1762},[45,59042,2270],{"class":51},[45,59044,59045,59047,59049],{"class":47,"line":1776},[45,59046,52498],{"class":51},[45,59048,51894],{"class":51381},[45,59050,51388],{"class":51},[45,59052,59053,59055,59057],{"class":47,"line":1781},[45,59054,51866],{"class":51},[45,59056,51881],{"class":51381},[45,59058,51388],{"class":51},[45,59060,59061],{"class":47,"line":1810},[45,59062,2483],{"emptyLinePlaceholder":133},[45,59064,59065,59067,59069],{"class":47,"line":1815},[45,59066,51866],{"class":51},[45,59068,50716],{"class":51381},[45,59070,51388],{"class":51},[10,59072,59073],{},"只要点击就输出结果为22,前边11被覆盖了",[35,59075,59077],{"className":50714,"code":59076,"language":50716,"meta":40,"style":40},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[42,59078,59079,59084,59089,59093,59098,59103],{"__ignoreMap":40},[45,59080,59081],{"class":47,"line":48},[45,59082,59083],{"class":51},"  btn.addEventListener('click', function () {\n",[45,59085,59086],{"class":47,"line":125},[45,59087,59088],{"class":51},"      alert(11)\n",[45,59090,59091],{"class":47,"line":1262},[45,59092,33542],{"class":51},[45,59094,59095],{"class":47,"line":1277},[45,59096,59097],{"class":51},"    btn.addEventListener('click', function () {\n",[45,59099,59100],{"class":47,"line":1283},[45,59101,59102],{"class":51},"      alert(22)\n",[45,59104,59105],{"class":47,"line":1297},[45,59106,33542],{"class":51},[10,59108,59109],{},"点击第一次输出11,第二次点击为22",[176,59111,59113],{"id":59112},"_325-事件类型","3.2.5 事件类型",[10,59115,59116],{},[1545,59117],{"alt":40,"src":59118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22081,59120,59122],{"id":59121},"_3251-鼠标事件","3.2.5.1 鼠标事件",[10,59124,59125],{},"补充知识:",[10,59127,59128],{},"轮播图自动播放模块,可以使用",[10,59130,59131],{},"let timerId = setInterval(function () {",[10,59133,59134],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[10,59136,59137],{},"用js方法模拟进行点击事件,click必须加()",[10,59139,59140],{},"next.click()",[10,59142,59143],{},"}, 1000)",[10,59145,59146],{},[1545,59147],{"alt":40,"src":59148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[35,59150,59152],{"className":53148,"code":59151,"language":53150,"meta":40,"style":40},"\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",[42,59153,59154,59158,59168,59182,59186,59194,59209,59229,59249,59262,59270,59275,59280,59284,59288,59293,59298,59303,59308,59312,59316,59321,59326,59331,59335,59339,59344,59348,59353,59358,59362,59366,59371,59376,59381,59386,59391,59395,59399,59404,59409,59414,59419,59424,59428,59432,59437,59442,59447,59452,59457,59462,59467,59472,59477,59482,59486,59490,59495,59500,59504,59508,59513,59518,59522,59527,59532,59536,59540,59545,59549,59554,59559,59563,59568,59572,59576,59581,59586,59591,59596,59601,59606,59611,59615,59619,59623,59628,59633,59638,59643,59647,59655,59663,59667,59675,59690,59704,59725,59733,59747,59760,59775,59794,59806,59818,59830,59842,59854,59866,59878,59886,59901,59925,59949,59957,59965,59973,59981,59986,59991,59996,60001,60006,60011,60016,60021,60026,60031,60035,60040,60045,60050,60055,60060,60065,60070,60075,60080,60084,60089,60094,60099,60104,60109,60114,60119,60124,60129,60134,60139,60144,60148,60152,60157,60162,60167,60171,60176,60181,60186,60191,60196,60200,60205,60209,60213,60217,60221,60225,60229,60234,60239,60244,60249,60254,60259,60264,60269,60274,60278,60282,60287,60292,60297,60302,60307,60311,60316,60321,60326,60331,60336,60341,60345,60349,60354,60358,60363,60367,60372,60377,60382,60387,60392,60397,60401,60409,60417,60421],{"__ignoreMap":40},[45,59155,59156],{"class":47,"line":48},[45,59157,2483],{"emptyLinePlaceholder":133},[45,59159,59160,59162,59164,59166],{"class":47,"line":125},[45,59161,51378],{"class":51},[45,59163,51382],{"class":93},[45,59165,51385],{"class":257},[45,59167,51388],{"class":51},[45,59169,59170,59172,59174,59176,59178,59180],{"class":47,"line":1262},[45,59171,1117],{"class":51},[45,59173,50716],{"class":51381},[45,59175,51397],{"class":2046},[45,59177,254],{"class":51},[45,59179,51402],{"class":313},[45,59181,51388],{"class":51},[45,59183,59184],{"class":47,"line":1277},[45,59185,2483],{"emptyLinePlaceholder":133},[45,59187,59188,59190,59192],{"class":47,"line":1283},[45,59189,1117],{"class":51},[45,59191,51415],{"class":51381},[45,59193,51388],{"class":51},[45,59195,59196,59198,59200,59202,59204,59206],{"class":47,"line":1297},[45,59197,52225],{"class":51},[45,59199,51425],{"class":51381},[45,59201,51428],{"class":2046},[45,59203,254],{"class":51},[45,59205,51433],{"class":313},[45,59207,59208],{"class":51}," \u002F>\n",[45,59210,59211,59213,59215,59217,59219,59221,59223,59225,59227],{"class":47,"line":1303},[45,59212,52225],{"class":51},[45,59214,51425],{"class":51381},[45,59216,51444],{"class":2046},[45,59218,254],{"class":51},[45,59220,51449],{"class":313},[45,59222,51452],{"class":2046},[45,59224,254],{"class":51},[45,59226,51457],{"class":313},[45,59228,59208],{"class":51},[45,59230,59231,59233,59235,59237,59239,59241,59243,59245,59247],{"class":47,"line":1394},[45,59232,52225],{"class":51},[45,59234,51425],{"class":51381},[45,59236,15003],{"class":2046},[45,59238,254],{"class":51},[45,59240,51472],{"class":313},[45,59242,51452],{"class":2046},[45,59244,254],{"class":51},[45,59246,51479],{"class":313},[45,59248,59208],{"class":51},[45,59250,59251,59253,59255,59258,59260],{"class":47,"line":1400},[45,59252,52225],{"class":51},[45,59254,51488],{"class":51381},[45,59256,59257],{"class":51},">轮播图点击切换\u003C\u002F",[45,59259,51488],{"class":51381},[45,59261,51388],{"class":51},[45,59263,59264,59266,59268],{"class":47,"line":1412},[45,59265,52225],{"class":51},[45,59267,121],{"class":51381},[45,59269,51388],{"class":51},[45,59271,59272],{"class":47,"line":1695},[45,59273,59274],{"class":51},"    * {\n",[45,59276,59277],{"class":47,"line":1700},[45,59278,59279],{"class":51},"      box-sizing: border-box;\n",[45,59281,59282],{"class":47,"line":1706},[45,59283,2270],{"class":51},[45,59285,59286],{"class":47,"line":1711},[45,59287,2483],{"emptyLinePlaceholder":133},[45,59289,59290],{"class":47,"line":1725},[45,59291,59292],{"class":51},"    .slider {\n",[45,59294,59295],{"class":47,"line":1730},[45,59296,59297],{"class":51},"      width: 560px;\n",[45,59299,59300],{"class":47,"line":1736},[45,59301,59302],{"class":51},"      height: 400px;\n",[45,59304,59305],{"class":47,"line":1757},[45,59306,59307],{"class":51},"      overflow: hidden;\n",[45,59309,59310],{"class":47,"line":1762},[45,59311,2270],{"class":51},[45,59313,59314],{"class":47,"line":1776},[45,59315,2483],{"emptyLinePlaceholder":133},[45,59317,59318],{"class":47,"line":1781},[45,59319,59320],{"class":51},"    .slider-wrapper {\n",[45,59322,59323],{"class":47,"line":1810},[45,59324,59325],{"class":51},"      width: 100%;\n",[45,59327,59328],{"class":47,"line":1815},[45,59329,59330],{"class":51},"      height: 320px;\n",[45,59332,59333],{"class":47,"line":1832},[45,59334,2270],{"class":51},[45,59336,59337],{"class":47,"line":1837},[45,59338,2483],{"emptyLinePlaceholder":133},[45,59340,59341],{"class":47,"line":1842},[45,59342,59343],{"class":51},"    .slider-wrapper img {\n",[45,59345,59346],{"class":47,"line":1847},[45,59347,59325],{"class":51},[45,59349,59350],{"class":47,"line":1861},[45,59351,59352],{"class":51},"      height: 100%;\n",[45,59354,59355],{"class":47,"line":1866},[45,59356,59357],{"class":51},"      display: block;\n",[45,59359,59360],{"class":47,"line":2660},[45,59361,2270],{"class":51},[45,59363,59364],{"class":47,"line":2674},[45,59365,2483],{"emptyLinePlaceholder":133},[45,59367,59368],{"class":47,"line":2682},[45,59369,59370],{"class":51},"    .slider-footer {\n",[45,59372,59373],{"class":47,"line":2687},[45,59374,59375],{"class":51},"      height: 80px;\n",[45,59377,59378],{"class":47,"line":2693},[45,59379,59380],{"class":51},"      background-color: rgb(100, 67, 68);\n",[45,59382,59383],{"class":47,"line":2699},[45,59384,59385],{"class":51},"      padding: 12px 12px 0 12px;\n",[45,59387,59388],{"class":47,"line":2704},[45,59389,59390],{"class":51},"      position: relative;\n",[45,59392,59393],{"class":47,"line":8031},[45,59394,2270],{"class":51},[45,59396,59397],{"class":47,"line":8055},[45,59398,2483],{"emptyLinePlaceholder":133},[45,59400,59401],{"class":47,"line":8060},[45,59402,59403],{"class":51},"    .slider-footer .toggle {\n",[45,59405,59406],{"class":47,"line":8066},[45,59407,59408],{"class":51},"      position: absolute;\n",[45,59410,59411],{"class":47,"line":8093},[45,59412,59413],{"class":51},"      right: 0;\n",[45,59415,59416],{"class":47,"line":8098},[45,59417,59418],{"class":51},"      top: 12px;\n",[45,59420,59421],{"class":47,"line":8104},[45,59422,59423],{"class":51},"      display: flex;\n",[45,59425,59426],{"class":47,"line":8116},[45,59427,2270],{"class":51},[45,59429,59430],{"class":47,"line":8128},[45,59431,2483],{"emptyLinePlaceholder":133},[45,59433,59434],{"class":47,"line":8140},[45,59435,59436],{"class":51},"    .slider-footer .toggle button {\n",[45,59438,59439],{"class":47,"line":9799},[45,59440,59441],{"class":51},"      margin-right: 12px;\n",[45,59443,59444],{"class":47,"line":9824},[45,59445,59446],{"class":51},"      width: 28px;\n",[45,59448,59449],{"class":47,"line":9847},[45,59450,59451],{"class":51},"      height: 28px;\n",[45,59453,59454],{"class":47,"line":9871},[45,59455,59456],{"class":51},"      appearance: none;\n",[45,59458,59459],{"class":47,"line":9876},[45,59460,59461],{"class":51},"      border: none;\n",[45,59463,59464],{"class":47,"line":9881},[45,59465,59466],{"class":51},"      background: rgba(255, 255, 255, 0.1);\n",[45,59468,59469],{"class":47,"line":9886},[45,59470,59471],{"class":51},"      color: #fff;\n",[45,59473,59474],{"class":47,"line":9895},[45,59475,59476],{"class":51},"      border-radius: 4px;\n",[45,59478,59479],{"class":47,"line":9900},[45,59480,59481],{"class":51},"      cursor: pointer;\n",[45,59483,59484],{"class":47,"line":9906},[45,59485,2270],{"class":51},[45,59487,59488],{"class":47,"line":9927},[45,59489,2483],{"emptyLinePlaceholder":133},[45,59491,59492],{"class":47,"line":9933},[45,59493,59494],{"class":51},"    .slider-footer .toggle button:hover {\n",[45,59496,59497],{"class":47,"line":9947},[45,59498,59499],{"class":51},"      background: rgba(255, 255, 255, 0.2);\n",[45,59501,59502],{"class":47,"line":9953},[45,59503,2270],{"class":51},[45,59505,59506],{"class":47,"line":9980},[45,59507,2483],{"emptyLinePlaceholder":133},[45,59509,59510],{"class":47,"line":9989},[45,59511,59512],{"class":51},"    .slider-footer p {\n",[45,59514,59515],{"class":47,"line":9995},[45,59516,59517],{"class":51},"      margin: 0;\n",[45,59519,59520],{"class":47,"line":10003},[45,59521,59471],{"class":51},[45,59523,59524],{"class":47,"line":10008},[45,59525,59526],{"class":51},"      font-size: 18px;\n",[45,59528,59529],{"class":47,"line":16687},[45,59530,59531],{"class":51},"      margin-bottom: 10px;\n",[45,59533,59534],{"class":47,"line":16693},[45,59535,2270],{"class":51},[45,59537,59538],{"class":47,"line":16716},[45,59539,2483],{"emptyLinePlaceholder":133},[45,59541,59542],{"class":47,"line":16722},[45,59543,59544],{"class":51},"    .slider-indicator {\n",[45,59546,59547],{"class":47,"line":16745},[45,59548,59517],{"class":51},[45,59550,59551],{"class":47,"line":16759},[45,59552,59553],{"class":51},"      padding: 0;\n",[45,59555,59556],{"class":47,"line":16779},[45,59557,59558],{"class":51},"      list-style: none;\n",[45,59560,59561],{"class":47,"line":16785},[45,59562,59423],{"class":51},[45,59564,59565],{"class":47,"line":16796},[45,59566,59567],{"class":51},"      align-items: center;\n",[45,59569,59570],{"class":47,"line":16819},[45,59571,2270],{"class":51},[45,59573,59574],{"class":47,"line":16841},[45,59575,2483],{"emptyLinePlaceholder":133},[45,59577,59578],{"class":47,"line":16846},[45,59579,59580],{"class":51},"    .slider-indicator li {\n",[45,59582,59583],{"class":47,"line":16852},[45,59584,59585],{"class":51},"      width: 8px;\n",[45,59587,59588],{"class":47,"line":16866},[45,59589,59590],{"class":51},"      height: 8px;\n",[45,59592,59593],{"class":47,"line":16879},[45,59594,59595],{"class":51},"      margin: 4px;\n",[45,59597,59598],{"class":47,"line":16884},[45,59599,59600],{"class":51},"      border-radius: 50%;\n",[45,59602,59603],{"class":47,"line":16898},[45,59604,59605],{"class":51},"      background: #fff;\n",[45,59607,59608],{"class":47,"line":16903},[45,59609,59610],{"class":51},"      opacity: 0.4;\n",[45,59612,59613],{"class":47,"line":16909},[45,59614,59481],{"class":51},[45,59616,59617],{"class":47,"line":16914},[45,59618,2270],{"class":51},[45,59620,59621],{"class":47,"line":16928},[45,59622,2483],{"emptyLinePlaceholder":133},[45,59624,59625],{"class":47,"line":16933},[45,59626,59627],{"class":51},"    .slider-indicator li.active {\n",[45,59629,59630],{"class":47,"line":16938},[45,59631,59632],{"class":51},"      width: 12px;\n",[45,59634,59635],{"class":47,"line":16952},[45,59636,59637],{"class":51},"      height: 12px;\n",[45,59639,59640],{"class":47,"line":16964},[45,59641,59642],{"class":51},"      opacity: 1;\n",[45,59644,59645],{"class":47,"line":16969},[45,59646,2270],{"class":51},[45,59648,59649,59651,59653],{"class":47,"line":16982},[45,59650,52498],{"class":51},[45,59652,121],{"class":51381},[45,59654,51388],{"class":51},[45,59656,59657,59659,59661],{"class":47,"line":16987},[45,59658,51866],{"class":51},[45,59660,51415],{"class":51381},[45,59662,51388],{"class":51},[45,59664,59665],{"class":47,"line":16992},[45,59666,2483],{"emptyLinePlaceholder":133},[45,59668,59669,59671,59673],{"class":47,"line":16997},[45,59670,1117],{"class":51},[45,59672,51881],{"class":51381},[45,59674,51388],{"class":51},[45,59676,59677,59679,59681,59683,59685,59688],{"class":47,"line":17010},[45,59678,52225],{"class":51},[45,59680,51692],{"class":51381},[45,59682,53567],{"class":2046},[45,59684,254],{"class":51},[45,59686,59687],{"class":313},"\"slider\"",[45,59689,51388],{"class":51},[45,59691,59692,59694,59696,59698,59700,59702],{"class":47,"line":17015},[45,59693,51422],{"class":51},[45,59695,51692],{"class":51381},[45,59697,53567],{"class":2046},[45,59699,254],{"class":51},[45,59701,55308],{"class":313},[45,59703,51388],{"class":51},[45,59705,59706,59708,59710,59712,59714,59717,59719,59721,59723],{"class":47,"line":32714},[45,59707,55315],{"class":51},[45,59709,1545],{"class":51381},[45,59711,55320],{"class":2046},[45,59713,254],{"class":51},[45,59715,59716],{"class":313},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[45,59718,55328],{"class":2046},[45,59720,254],{"class":51},[45,59722,7735],{"class":313},[45,59724,59208],{"class":51},[45,59726,59727,59729,59731],{"class":47,"line":32720},[45,59728,51857],{"class":51},[45,59730,51692],{"class":51381},[45,59732,51388],{"class":51},[45,59734,59735,59737,59739,59741,59743,59745],{"class":47,"line":32726},[45,59736,51422],{"class":51},[45,59738,51692],{"class":51381},[45,59740,53567],{"class":2046},[45,59742,254],{"class":51},[45,59744,55355],{"class":313},[45,59746,51388],{"class":51},[45,59748,59749,59751,59753,59756,59758],{"class":47,"line":32732},[45,59750,55315],{"class":51},[45,59752,10],{"class":51381},[45,59754,59755],{"class":51},">对人类来说会不会太超前了？\u003C\u002F",[45,59757,10],{"class":51381},[45,59759,51388],{"class":51},[45,59761,59762,59764,59766,59768,59770,59773],{"class":47,"line":32738},[45,59763,55315],{"class":51},[45,59765,1214],{"class":51381},[45,59767,53567],{"class":2046},[45,59769,254],{"class":51},[45,59771,59772],{"class":313},"\"slider-indicator\"",[45,59774,51388],{"class":51},[45,59776,59777,59779,59781,59783,59785,59788,59790,59792],{"class":47,"line":32749},[45,59778,55383],{"class":51},[45,59780,162],{"class":51381},[45,59782,53567],{"class":2046},[45,59784,254],{"class":51},[45,59786,59787],{"class":313},"\"active\"",[45,59789,55395],{"class":51},[45,59791,162],{"class":51381},[45,59793,51388],{"class":51},[45,59795,59796,59798,59800,59802,59804],{"class":47,"line":32755},[45,59797,55383],{"class":51},[45,59799,162],{"class":51381},[45,59801,55395],{"class":51},[45,59803,162],{"class":51381},[45,59805,51388],{"class":51},[45,59807,59808,59810,59812,59814,59816],{"class":47,"line":32775},[45,59809,55383],{"class":51},[45,59811,162],{"class":51381},[45,59813,55395],{"class":51},[45,59815,162],{"class":51381},[45,59817,51388],{"class":51},[45,59819,59820,59822,59824,59826,59828],{"class":47,"line":32781},[45,59821,55383],{"class":51},[45,59823,162],{"class":51381},[45,59825,55395],{"class":51},[45,59827,162],{"class":51381},[45,59829,51388],{"class":51},[45,59831,59832,59834,59836,59838,59840],{"class":47,"line":32792},[45,59833,55383],{"class":51},[45,59835,162],{"class":51381},[45,59837,55395],{"class":51},[45,59839,162],{"class":51381},[45,59841,51388],{"class":51},[45,59843,59844,59846,59848,59850,59852],{"class":47,"line":32798},[45,59845,55383],{"class":51},[45,59847,162],{"class":51381},[45,59849,55395],{"class":51},[45,59851,162],{"class":51381},[45,59853,51388],{"class":51},[45,59855,59856,59858,59860,59862,59864],{"class":47,"line":32804},[45,59857,55383],{"class":51},[45,59859,162],{"class":51381},[45,59861,55395],{"class":51},[45,59863,162],{"class":51381},[45,59865,51388],{"class":51},[45,59867,59868,59870,59872,59874,59876],{"class":47,"line":32810},[45,59869,55383],{"class":51},[45,59871,162],{"class":51381},[45,59873,55395],{"class":51},[45,59875,162],{"class":51381},[45,59877,51388],{"class":51},[45,59879,59880,59882,59884],{"class":47,"line":32816},[45,59881,55488],{"class":51},[45,59883,1214],{"class":51381},[45,59885,51388],{"class":51},[45,59887,59888,59890,59892,59894,59896,59899],{"class":47,"line":32822},[45,59889,55315],{"class":51},[45,59891,51692],{"class":51381},[45,59893,53567],{"class":2046},[45,59895,254],{"class":51},[45,59897,59898],{"class":313},"\"toggle\"",[45,59900,51388],{"class":51},[45,59902,59903,59905,59907,59909,59911,59914,59916,59919,59921,59923],{"class":47,"line":32828},[45,59904,55383],{"class":51},[45,59906,53968],{"class":51381},[45,59908,53567],{"class":2046},[45,59910,254],{"class":51},[45,59912,59913],{"class":313},"\"prev\"",[45,59915,1167],{"class":51},[45,59917,59918],{"class":257},"&lt;",[45,59920,51866],{"class":51},[45,59922,53968],{"class":51381},[45,59924,51388],{"class":51},[45,59926,59927,59929,59931,59933,59935,59938,59940,59943,59945,59947],{"class":47,"line":32834},[45,59928,55383],{"class":51},[45,59930,53968],{"class":51381},[45,59932,53567],{"class":2046},[45,59934,254],{"class":51},[45,59936,59937],{"class":313},"\"next\"",[45,59939,1167],{"class":51},[45,59941,59942],{"class":257},"&gt;",[45,59944,51866],{"class":51},[45,59946,53968],{"class":51381},[45,59948,51388],{"class":51},[45,59950,59951,59953,59955],{"class":47,"line":32854},[45,59952,55488],{"class":51},[45,59954,51692],{"class":51381},[45,59956,51388],{"class":51},[45,59958,59959,59961,59963],{"class":47,"line":32860},[45,59960,51857],{"class":51},[45,59962,51692],{"class":51381},[45,59964,51388],{"class":51},[45,59966,59967,59969,59971],{"class":47,"line":32876},[45,59968,52498],{"class":51},[45,59970,51692],{"class":51381},[45,59972,51388],{"class":51},[45,59974,59975,59977,59979],{"class":47,"line":32882},[45,59976,52225],{"class":51},[45,59978,51894],{"class":51381},[45,59980,51388],{"class":51},[45,59982,59983],{"class":47,"line":32896},[45,59984,59985],{"class":51},"    \u002F\u002F 1. 初始数据\n",[45,59987,59988],{"class":47,"line":32902},[45,59989,59990],{"class":51},"    const data = [\n",[45,59992,59993],{"class":47,"line":32917},[45,59994,59995],{"class":51},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[45,59997,59998],{"class":47,"line":32923},[45,59999,60000],{"class":51},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[45,60002,60003],{"class":47,"line":32932},[45,60004,60005],{"class":51},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[45,60007,60008],{"class":47,"line":32938},[45,60009,60010],{"class":51},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[45,60012,60013],{"class":47,"line":32947},[45,60014,60015],{"class":51},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[45,60017,60018],{"class":47,"line":32953},[45,60019,60020],{"class":51},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[45,60022,60023],{"class":47,"line":32959},[45,60024,60025],{"class":51},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[45,60027,60028],{"class":47,"line":32968},[45,60029,60030],{"class":51},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[45,60032,60033],{"class":47,"line":32974},[45,60034,53190],{"class":51},[45,60036,60037],{"class":47,"line":32985},[45,60038,60039],{"class":51},"    \u002F\u002F 获取元素\n",[45,60041,60042],{"class":47,"line":32991},[45,60043,60044],{"class":51},"    const img = document.querySelector('.slider-wrapper img')\n",[45,60046,60047],{"class":47,"line":33010},[45,60048,60049],{"class":51},"    const p = document.querySelector('.slider-footer p')\n",[45,60051,60052],{"class":47,"line":33016},[45,60053,60054],{"class":51},"    const footer = document.querySelector('.slider-footer')\n",[45,60056,60057],{"class":47,"line":33027},[45,60058,60059],{"class":51},"    \u002F\u002F 1. 右按钮业务\n",[45,60061,60062],{"class":47,"line":33033},[45,60063,60064],{"class":51},"    \u002F\u002F 1.1 获取右侧按钮 \n",[45,60066,60067],{"class":47,"line":33053},[45,60068,60069],{"class":51},"    const next = document.querySelector('.next')\n",[45,60071,60072],{"class":47,"line":33069},[45,60073,60074],{"class":51},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[45,60076,60077],{"class":47,"line":33075},[45,60078,60079],{"class":51},"    \u002F\u002F 1.2 注册点击事件\n",[45,60081,60082],{"class":47,"line":33089},[45,60083,2483],{"emptyLinePlaceholder":133},[45,60085,60086],{"class":47,"line":33095},[45,60087,60088],{"class":51},"    next.addEventListener('click', function () {\n",[45,60090,60091],{"class":47,"line":33101},[45,60092,60093],{"class":51},"      \u002F\u002F console.log(11)\n",[45,60095,60096],{"class":47,"line":33112},[45,60097,60098],{"class":51},"      i++\n",[45,60100,60101],{"class":47,"line":33118},[45,60102,60103],{"class":51},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[45,60105,60106],{"class":47,"line":33124},[45,60107,60108],{"class":51},"      \u002F\u002F if (i >= 8) {\n",[45,60110,60111],{"class":47,"line":33134},[45,60112,60113],{"class":51},"      \u002F\u002F   i = 0\n",[45,60115,60116],{"class":47,"line":33140},[45,60117,60118],{"class":51},"      \u002F\u002F }\n",[45,60120,60121],{"class":47,"line":33151},[45,60122,60123],{"class":51},"      i = i >= data.length ? 0 : i\n",[45,60125,60126],{"class":47,"line":33157},[45,60127,60128],{"class":51},"      \u002F\u002F 1.3 得到对应的对象\n",[45,60130,60131],{"class":47,"line":33167},[45,60132,60133],{"class":51},"      \u002F\u002F console.log(data[i])\n",[45,60135,60136],{"class":47,"line":33172},[45,60137,60138],{"class":51},"      \u002F\u002F 调用函数\n",[45,60140,60141],{"class":47,"line":33178},[45,60142,60143],{"class":51},"      toggle()\n",[45,60145,60146],{"class":47,"line":33227},[45,60147,33542],{"class":51},[45,60149,60150],{"class":47,"line":33274},[45,60151,2483],{"emptyLinePlaceholder":133},[45,60153,60154],{"class":47,"line":33279},[45,60155,60156],{"class":51},"    \u002F\u002F 2. 左侧按钮业务\n",[45,60158,60159],{"class":47,"line":33285},[45,60160,60161],{"class":51},"    \u002F\u002F 2.1 获取左侧按钮 \n",[45,60163,60164],{"class":47,"line":33304},[45,60165,60166],{"class":51},"    const prev = document.querySelector('.prev')\n",[45,60168,60169],{"class":47,"line":33310},[45,60170,60079],{"class":51},[45,60172,60173],{"class":47,"line":33330},[45,60174,60175],{"class":51},"    prev.addEventListener('click', function () {\n",[45,60177,60178],{"class":47,"line":33336},[45,60179,60180],{"class":51},"      i--\n",[45,60182,60183],{"class":47,"line":33342},[45,60184,60185],{"class":51},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[45,60187,60188],{"class":47,"line":33352},[45,60189,60190],{"class":51},"      \u002F\u002F if (i \u003C 0) {\n",[45,60192,60193],{"class":47,"line":33357},[45,60194,60195],{"class":51},"      \u002F\u002F   i = 7\n",[45,60197,60198],{"class":47,"line":33363},[45,60199,60118],{"class":51},[45,60201,60202],{"class":47,"line":33379},[45,60203,60204],{"class":51},"      i = i \u003C 0 ? data.length - 1 : i\n",[45,60206,60207],{"class":47,"line":33424},[45,60208,60128],{"class":51},[45,60210,60211],{"class":47,"line":33430},[45,60212,60133],{"class":51},[45,60214,60215],{"class":47,"line":33436},[45,60216,60138],{"class":51},[45,60218,60219],{"class":47,"line":33442},[45,60220,60143],{"class":51},[45,60222,60223],{"class":47,"line":33453},[45,60224,33542],{"class":51},[45,60226,60227],{"class":47,"line":33459},[45,60228,2483],{"emptyLinePlaceholder":133},[45,60230,60231],{"class":47,"line":33465},[45,60232,60233],{"class":51},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[45,60235,60236],{"class":47,"line":33471},[45,60237,60238],{"class":51},"    function toggle() {\n",[45,60240,60241],{"class":47,"line":33489},[45,60242,60243],{"class":51},"      \u002F\u002F 1.4 渲染对应的数据\n",[45,60245,60246],{"class":47,"line":33503},[45,60247,60248],{"class":51},"      img.src = data[i].url\n",[45,60250,60251],{"class":47,"line":33512},[45,60252,60253],{"class":51},"      p.innerHTML = data[i].title\n",[45,60255,60256],{"class":47,"line":33521},[45,60257,60258],{"class":51},"      footer.style.backgroundColor = data[i].color\n",[45,60260,60261],{"class":47,"line":33530},[45,60262,60263],{"class":51},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[45,60265,60266],{"class":47,"line":33539},[45,60267,60268],{"class":51},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[45,60270,60271],{"class":47,"line":33545},[45,60272,60273],{"class":51},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[45,60275,60276],{"class":47,"line":33551},[45,60277,2270],{"class":51},[45,60279,60280],{"class":47,"line":33559},[45,60281,2483],{"emptyLinePlaceholder":133},[45,60283,60284],{"class":47,"line":33564},[45,60285,60286],{"class":51},"    \u002F\u002F 3. 自动播放模块\n",[45,60288,60289],{"class":47,"line":33570},[45,60290,60291],{"class":51},"    let timerId = setInterval(function () {\n",[45,60293,60294],{"class":47,"line":33581},[45,60295,60296],{"class":51},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[45,60298,60299],{"class":47,"line":33587},[45,60300,60301],{"class":51},"      next.click()\n",[45,60303,60304],{"class":47,"line":33607},[45,60305,60306],{"class":51},"    }, 1000)\n",[45,60308,60309],{"class":47,"line":33613},[45,60310,2483],{"emptyLinePlaceholder":133},[45,60312,60313],{"class":47,"line":33619},[45,60314,60315],{"class":51},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[45,60317,60318],{"class":47,"line":33625},[45,60319,60320],{"class":51},"    const slider = document.querySelector('.slider')\n",[45,60322,60323],{"class":47,"line":33642},[45,60324,60325],{"class":51},"    \u002F\u002F 注册事件\n",[45,60327,60328],{"class":47,"line":33648},[45,60329,60330],{"class":51},"    slider.addEventListener('mouseenter', function () {\n",[45,60332,60333],{"class":47,"line":33654},[45,60334,60335],{"class":51},"      \u002F\u002F 停止定时器\n",[45,60337,60338],{"class":47,"line":33660},[45,60339,60340],{"class":51},"      clearInterval(timerId)\n",[45,60342,60343],{"class":47,"line":33666},[45,60344,33542],{"class":51},[45,60346,60347],{"class":47,"line":33672},[45,60348,2483],{"emptyLinePlaceholder":133},[45,60350,60351],{"class":47,"line":33699},[45,60352,60353],{"class":51},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[45,60355,60356],{"class":47,"line":33723},[45,60357,60325],{"class":51},[45,60359,60360],{"class":47,"line":33729},[45,60361,60362],{"class":51},"    slider.addEventListener('mouseleave', function () {\n",[45,60364,60365],{"class":47,"line":33735},[45,60366,60335],{"class":51},[45,60368,60369],{"class":47,"line":33741},[45,60370,60371],{"class":51},"      if (timerId) clearInterval(timerId)\n",[45,60373,60374],{"class":47,"line":33752},[45,60375,60376],{"class":51},"      \u002F\u002F 开启定时器\n",[45,60378,60379],{"class":47,"line":33763},[45,60380,60381],{"class":51},"      timerId = setInterval(function () {\n",[45,60383,60384],{"class":47,"line":33769},[45,60385,60386],{"class":51},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[45,60388,60389],{"class":47,"line":33786},[45,60390,60391],{"class":51},"        next.click()\n",[45,60393,60394],{"class":47,"line":33809},[45,60395,60396],{"class":51},"      }, 1000)\n",[45,60398,60399],{"class":47,"line":33832},[45,60400,33542],{"class":51},[45,60402,60403,60405,60407],{"class":47,"line":33838},[45,60404,52498],{"class":51},[45,60406,51894],{"class":51381},[45,60408,51388],{"class":51},[45,60410,60411,60413,60415],{"class":47,"line":33843},[45,60412,51866],{"class":51},[45,60414,51881],{"class":51381},[45,60416,51388],{"class":51},[45,60418,60419],{"class":47,"line":33852},[45,60420,2483],{"emptyLinePlaceholder":133},[45,60422,60423,60425,60427],{"class":47,"line":33862},[45,60424,51866],{"class":51},[45,60426,50716],{"class":51381},[45,60428,51388],{"class":51},[22081,60430,60432],{"id":60431},"_3252-焦点事件","3.2.5.2 焦点事件",[10,60434,60435],{},"小米搜索框案例：",[35,60437,60439],{"className":50714,"code":60438,"language":50716,"meta":40,"style":40},"\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",[42,60440,60441,60451,60465,60469,60477,60491,60511,60531,60543,60551,60557,60567,60577,60589,60593,60597,60604,60608,60619,60623,60627,60634,60645,60658,60672,60676,60680,60689,60701,60713,60727,60740,60753,60771,60782,60786,60790,60799,60816,60820,60824,60831,60841,60851,60862,60875,60887,60903,60914,60926,60930,60934,60942,60953,60970,60982,60994,61005,61009,61013,61024,61035,61039,61047,61051,61059,61063,61071,61086,61109,61124,61155,61182,61209,61236,61263,61290,61317,61326,61334,61342,61347,61367,61387,61392,61397,61415,61420,61430,61435,61449,61454,61459,61476,61485,61497,61501,61509,61517,61521],{"__ignoreMap":40},[45,60442,60443,60445,60447,60449],{"class":47,"line":48},[45,60444,51378],{"class":51},[45,60446,51382],{"class":51381},[45,60448,51385],{"class":2046},[45,60450,51388],{"class":51},[45,60452,60453,60455,60457,60459,60461,60463],{"class":47,"line":125},[45,60454,1117],{"class":51},[45,60456,50716],{"class":51381},[45,60458,51397],{"class":2046},[45,60460,254],{"class":51},[45,60462,51402],{"class":313},[45,60464,51388],{"class":51},[45,60466,60467],{"class":47,"line":1262},[45,60468,2483],{"emptyLinePlaceholder":133},[45,60470,60471,60473,60475],{"class":47,"line":1277},[45,60472,1117],{"class":51},[45,60474,51415],{"class":51381},[45,60476,51388],{"class":51},[45,60478,60479,60481,60483,60485,60487,60489],{"class":47,"line":1283},[45,60480,51422],{"class":51},[45,60482,51425],{"class":51381},[45,60484,51428],{"class":2046},[45,60486,254],{"class":51},[45,60488,51433],{"class":313},[45,60490,51388],{"class":51},[45,60492,60493,60495,60497,60499,60501,60503,60505,60507,60509],{"class":47,"line":1297},[45,60494,51422],{"class":51},[45,60496,51425],{"class":51381},[45,60498,51444],{"class":2046},[45,60500,254],{"class":51},[45,60502,51449],{"class":313},[45,60504,51452],{"class":2046},[45,60506,254],{"class":51},[45,60508,51457],{"class":313},[45,60510,51388],{"class":51},[45,60512,60513,60515,60517,60519,60521,60523,60525,60527,60529],{"class":47,"line":1303},[45,60514,51422],{"class":51},[45,60516,51425],{"class":51381},[45,60518,15003],{"class":2046},[45,60520,254],{"class":51},[45,60522,51472],{"class":313},[45,60524,51452],{"class":2046},[45,60526,254],{"class":51},[45,60528,51479],{"class":313},[45,60530,51388],{"class":51},[45,60532,60533,60535,60537,60539,60541],{"class":47,"line":1394},[45,60534,51422],{"class":51},[45,60536,51488],{"class":51381},[45,60538,51491],{"class":51},[45,60540,51488],{"class":51381},[45,60542,51388],{"class":51},[45,60544,60545,60547,60549],{"class":47,"line":1400},[45,60546,51422],{"class":51},[45,60548,121],{"class":51381},[45,60550,51388],{"class":51},[45,60552,60553,60555],{"class":47,"line":1412},[45,60554,51508],{"class":51381},[45,60556,15655],{"class":51},[45,60558,60559,60561,60563,60565],{"class":47,"line":1695},[45,60560,51515],{"class":257},[45,60562,51518],{"class":51},[45,60564,400],{"class":257},[45,60566,1373],{"class":51},[45,60568,60569,60571,60573,60575],{"class":47,"line":1700},[45,60570,51527],{"class":257},[45,60572,51518],{"class":51},[45,60574,400],{"class":257},[45,60576,1373],{"class":51},[45,60578,60579,60582,60584,60587],{"class":47,"line":1706},[45,60580,60581],{"class":257},"            box-sizing",[45,60583,51518],{"class":51},[45,60585,60586],{"class":257},"border-box",[45,60588,1373],{"class":51},[45,60590,60591],{"class":47,"line":1711},[45,60592,2612],{"class":51},[45,60594,60595],{"class":47,"line":1725},[45,60596,2483],{"emptyLinePlaceholder":133},[45,60598,60599,60602],{"class":47,"line":1730},[45,60600,60601],{"class":51381},"        ul",[45,60603,15655],{"class":51},[45,60605,60606],{"class":47,"line":1736},[45,60607,2483],{"emptyLinePlaceholder":133},[45,60609,60610,60613,60615,60617],{"class":47,"line":1757},[45,60611,60612],{"class":257},"            list-style",[45,60614,51518],{"class":51},[45,60616,54818],{"class":257},[45,60618,1373],{"class":51},[45,60620,60621],{"class":47,"line":1762},[45,60622,2612],{"class":51},[45,60624,60625],{"class":47,"line":1776},[45,60626,2483],{"emptyLinePlaceholder":133},[45,60628,60629,60632],{"class":47,"line":1781},[45,60630,60631],{"class":2046},"        .mi",[45,60633,15655],{"class":51},[45,60635,60636,60639,60641,60643],{"class":47,"line":1810},[45,60637,60638],{"class":257},"            position",[45,60640,51518],{"class":51},[45,60642,54845],{"class":257},[45,60644,1373],{"class":51},[45,60646,60647,60649,60651,60654,60656],{"class":47,"line":1815},[45,60648,51565],{"class":257},[45,60650,51518],{"class":51},[45,60652,60653],{"class":257},"223",[45,60655,51573],{"class":93},[45,60657,1373],{"class":51},[45,60659,60660,60662,60664,60666,60668,60670],{"class":47,"line":1832},[45,60661,51515],{"class":257},[45,60663,51518],{"class":51},[45,60665,519],{"class":257},[45,60667,51573],{"class":93},[45,60669,51637],{"class":257},[45,60671,1373],{"class":51},[45,60673,60674],{"class":47,"line":1837},[45,60675,2612],{"class":51},[45,60677,60678],{"class":47,"line":1842},[45,60679,2483],{"emptyLinePlaceholder":133},[45,60681,60682,60684,60687],{"class":47,"line":1847},[45,60683,60631],{"class":2046},[45,60685,60686],{"class":51381}," input",[45,60688,15655],{"class":51},[45,60690,60691,60693,60695,60697,60699],{"class":47,"line":1861},[45,60692,51565],{"class":257},[45,60694,51518],{"class":51},[45,60696,60653],{"class":257},[45,60698,51573],{"class":93},[45,60700,1373],{"class":51},[45,60702,60703,60705,60707,60709,60711],{"class":47,"line":1866},[45,60704,51580],{"class":257},[45,60706,51518],{"class":51},[45,60708,814],{"class":257},[45,60710,51573],{"class":93},[45,60712,1373],{"class":51},[45,60714,60715,60717,60719,60721,60723,60725],{"class":47,"line":2660},[45,60716,51527],{"class":257},[45,60718,51518],{"class":51},[45,60720,400],{"class":257},[45,60722,2121],{"class":257},[45,60724,51573],{"class":93},[45,60726,1373],{"class":51},[45,60728,60729,60732,60734,60736,60738],{"class":47,"line":2674},[45,60730,60731],{"class":257},"            font-size",[45,60733,51518],{"class":51},[45,60735,756],{"class":257},[45,60737,51573],{"class":93},[45,60739,1373],{"class":51},[45,60741,60742,60745,60747,60749,60751],{"class":47,"line":2682},[45,60743,60744],{"class":257},"            line-height",[45,60746,51518],{"class":51},[45,60748,814],{"class":257},[45,60750,51573],{"class":93},[45,60752,1373],{"class":51},[45,60754,60755,60758,60760,60762,60764,60766,60769],{"class":47,"line":2687},[45,60756,60757],{"class":257},"            border",[45,60759,51518],{"class":51},[45,60761,426],{"class":257},[45,60763,51573],{"class":93},[45,60765,51602],{"class":257},[45,60767,60768],{"class":257}," #e0e0e0",[45,60770,1373],{"class":51},[45,60772,60773,60776,60778,60780],{"class":47,"line":2693},[45,60774,60775],{"class":257},"            outline",[45,60777,51518],{"class":51},[45,60779,54818],{"class":257},[45,60781,1373],{"class":51},[45,60783,60784],{"class":47,"line":2699},[45,60785,2612],{"class":51},[45,60787,60788],{"class":47,"line":2704},[45,60789,2483],{"emptyLinePlaceholder":133},[45,60791,60792,60794,60797],{"class":47,"line":8031},[45,60793,60631],{"class":2046},[45,60795,60796],{"class":2046}," .search",[45,60798,15655],{"class":51},[45,60800,60801,60803,60805,60807,60809,60811,60814],{"class":47,"line":8055},[45,60802,60757],{"class":257},[45,60804,51518],{"class":51},[45,60806,426],{"class":257},[45,60808,51573],{"class":93},[45,60810,51602],{"class":257},[45,60812,60813],{"class":257}," #ff6700",[45,60815,1373],{"class":51},[45,60817,60818],{"class":47,"line":8060},[45,60819,2612],{"class":51},[45,60821,60822],{"class":47,"line":8066},[45,60823,2483],{"emptyLinePlaceholder":133},[45,60825,60826,60829],{"class":47,"line":8093},[45,60827,60828],{"class":2046},"        .result-list",[45,60830,15655],{"class":51},[45,60832,60833,60835,60837,60839],{"class":47,"line":8098},[45,60834,51553],{"class":257},[45,60836,51518],{"class":51},[45,60838,54818],{"class":257},[45,60840,1373],{"class":51},[45,60842,60843,60845,60847,60849],{"class":47,"line":8104},[45,60844,60638],{"class":257},[45,60846,51518],{"class":51},[45,60848,54912],{"class":257},[45,60850,1373],{"class":51},[45,60852,60853,60856,60858,60860],{"class":47,"line":8116},[45,60854,60855],{"class":257},"            left",[45,60857,51518],{"class":51},[45,60859,400],{"class":257},[45,60861,1373],{"class":51},[45,60863,60864,60867,60869,60871,60873],{"class":47,"line":8128},[45,60865,60866],{"class":257},"            top",[45,60868,51518],{"class":51},[45,60870,814],{"class":257},[45,60872,51573],{"class":93},[45,60874,1373],{"class":51},[45,60876,60877,60879,60881,60883,60885],{"class":47,"line":8140},[45,60878,51565],{"class":257},[45,60880,51518],{"class":51},[45,60882,60653],{"class":257},[45,60884,51573],{"class":93},[45,60886,1373],{"class":51},[45,60888,60889,60891,60893,60895,60897,60899,60901],{"class":47,"line":9799},[45,60890,60757],{"class":257},[45,60892,51518],{"class":51},[45,60894,426],{"class":257},[45,60896,51573],{"class":93},[45,60898,51602],{"class":257},[45,60900,60813],{"class":257},[45,60902,1373],{"class":51},[45,60904,60905,60908,60910,60912],{"class":47,"line":9824},[45,60906,60907],{"class":257},"            border-top",[45,60909,51518],{"class":51},[45,60911,400],{"class":257},[45,60913,1373],{"class":51},[45,60915,60916,60919,60921,60924],{"class":47,"line":9847},[45,60917,60918],{"class":257},"            background",[45,60920,51518],{"class":51},[45,60922,60923],{"class":257},"#fff",[45,60925,1373],{"class":51},[45,60927,60928],{"class":47,"line":9871},[45,60929,2612],{"class":51},[45,60931,60932],{"class":47,"line":9876},[45,60933,2483],{"emptyLinePlaceholder":133},[45,60935,60936,60938,60940],{"class":47,"line":9881},[45,60937,60828],{"class":2046},[45,60939,1481],{"class":51381},[45,60941,15655],{"class":51},[45,60943,60944,60946,60948,60951],{"class":47,"line":9886},[45,60945,51553],{"class":257},[45,60947,51518],{"class":51},[45,60949,60950],{"class":257},"block",[45,60952,1373],{"class":51},[45,60954,60955,60957,60959,60961,60963,60966,60968],{"class":47,"line":9895},[45,60956,51527],{"class":257},[45,60958,51518],{"class":51},[45,60960,552],{"class":257},[45,60962,51573],{"class":93},[45,60964,60965],{"class":257}," 15",[45,60967,51573],{"class":93},[45,60969,1373],{"class":51},[45,60971,60972,60974,60976,60978,60980],{"class":47,"line":9900},[45,60973,60731],{"class":257},[45,60975,51518],{"class":51},[45,60977,706],{"class":257},[45,60979,51573],{"class":93},[45,60981,1373],{"class":51},[45,60983,60984,60987,60989,60992],{"class":47,"line":9906},[45,60985,60986],{"class":257},"            color",[45,60988,51518],{"class":51},[45,60990,60991],{"class":257},"#424242",[45,60993,1373],{"class":51},[45,60995,60996,60999,61001,61003],{"class":47,"line":9927},[45,60997,60998],{"class":257},"            text-decoration",[45,61000,51518],{"class":51},[45,61002,54818],{"class":257},[45,61004,1373],{"class":51},[45,61006,61007],{"class":47,"line":9933},[45,61008,2612],{"class":51},[45,61010,61011],{"class":47,"line":9947},[45,61012,2483],{"emptyLinePlaceholder":133},[45,61014,61015,61017,61019,61022],{"class":47,"line":9953},[45,61016,60828],{"class":2046},[45,61018,1481],{"class":51381},[45,61020,61021],{"class":2046},":hover",[45,61023,15655],{"class":51},[45,61025,61026,61028,61030,61033],{"class":47,"line":9980},[45,61027,51721],{"class":257},[45,61029,51518],{"class":51},[45,61031,61032],{"class":257},"#eee",[45,61034,1373],{"class":51},[45,61036,61037],{"class":47,"line":9989},[45,61038,2612],{"class":51},[45,61040,61041,61043,61045],{"class":47,"line":9995},[45,61042,51857],{"class":51},[45,61044,121],{"class":51381},[45,61046,51388],{"class":51},[45,61048,61049],{"class":47,"line":10003},[45,61050,2483],{"emptyLinePlaceholder":133},[45,61052,61053,61055,61057],{"class":47,"line":10008},[45,61054,51866],{"class":51},[45,61056,51415],{"class":51381},[45,61058,51388],{"class":51},[45,61060,61061],{"class":47,"line":16687},[45,61062,2483],{"emptyLinePlaceholder":133},[45,61064,61065,61067,61069],{"class":47,"line":16693},[45,61066,1117],{"class":51},[45,61068,51881],{"class":51381},[45,61070,51388],{"class":51},[45,61072,61073,61075,61077,61079,61081,61084],{"class":47,"line":16716},[45,61074,51422],{"class":51},[45,61076,51692],{"class":51381},[45,61078,53567],{"class":2046},[45,61080,254],{"class":51},[45,61082,61083],{"class":313},"\"mi\"",[45,61085,51388],{"class":51},[45,61087,61088,61090,61092,61094,61096,61099,61102,61104,61107],{"class":47,"line":16722},[45,61089,55383],{"class":51},[45,61091,53902],{"class":51381},[45,61093,53905],{"class":2046},[45,61095,254],{"class":51},[45,61097,61098],{"class":313},"\"search\"",[45,61100,61101],{"class":2046}," placeholder",[45,61103,254],{"class":51},[45,61105,61106],{"class":313},"\"小米笔记本\"",[45,61108,51388],{"class":51},[45,61110,61111,61113,61115,61117,61119,61122],{"class":47,"line":16745},[45,61112,55383],{"class":51},[45,61114,1214],{"class":51381},[45,61116,53567],{"class":2046},[45,61118,254],{"class":51},[45,61120,61121],{"class":313},"\"result-list\"",[45,61123,51388],{"class":51},[45,61125,61126,61129,61131,61134,61136,61139,61141,61144,61147,61149,61151,61153],{"class":47,"line":16759},[45,61127,61128],{"class":51},"            \u003C",[45,61130,162],{"class":51381},[45,61132,61133],{"class":51},">\u003C",[45,61135,13],{"class":51381},[45,61137,61138],{"class":2046}," href",[45,61140,254],{"class":51},[45,61142,61143],{"class":313},"\"#\"",[45,61145,61146],{"class":51},">全部商品\u003C\u002F",[45,61148,13],{"class":51381},[45,61150,55395],{"class":51},[45,61152,162],{"class":51381},[45,61154,51388],{"class":51},[45,61156,61157,61159,61161,61163,61165,61167,61169,61171,61174,61176,61178,61180],{"class":47,"line":16779},[45,61158,61128],{"class":51},[45,61160,162],{"class":51381},[45,61162,61133],{"class":51},[45,61164,13],{"class":51381},[45,61166,61138],{"class":2046},[45,61168,254],{"class":51},[45,61170,61143],{"class":313},[45,61172,61173],{"class":51},">小米11\u003C\u002F",[45,61175,13],{"class":51381},[45,61177,55395],{"class":51},[45,61179,162],{"class":51381},[45,61181,51388],{"class":51},[45,61183,61184,61186,61188,61190,61192,61194,61196,61198,61201,61203,61205,61207],{"class":47,"line":16785},[45,61185,61128],{"class":51},[45,61187,162],{"class":51381},[45,61189,61133],{"class":51},[45,61191,13],{"class":51381},[45,61193,61138],{"class":2046},[45,61195,254],{"class":51},[45,61197,61143],{"class":313},[45,61199,61200],{"class":51},">小米10S\u003C\u002F",[45,61202,13],{"class":51381},[45,61204,55395],{"class":51},[45,61206,162],{"class":51381},[45,61208,51388],{"class":51},[45,61210,61211,61213,61215,61217,61219,61221,61223,61225,61228,61230,61232,61234],{"class":47,"line":16796},[45,61212,61128],{"class":51},[45,61214,162],{"class":51381},[45,61216,61133],{"class":51},[45,61218,13],{"class":51381},[45,61220,61138],{"class":2046},[45,61222,254],{"class":51},[45,61224,61143],{"class":313},[45,61226,61227],{"class":51},">小米笔记本\u003C\u002F",[45,61229,13],{"class":51381},[45,61231,55395],{"class":51},[45,61233,162],{"class":51381},[45,61235,51388],{"class":51},[45,61237,61238,61240,61242,61244,61246,61248,61250,61252,61255,61257,61259,61261],{"class":47,"line":16819},[45,61239,61128],{"class":51},[45,61241,162],{"class":51381},[45,61243,61133],{"class":51},[45,61245,13],{"class":51381},[45,61247,61138],{"class":2046},[45,61249,254],{"class":51},[45,61251,61143],{"class":313},[45,61253,61254],{"class":51},">小米手机\u003C\u002F",[45,61256,13],{"class":51381},[45,61258,55395],{"class":51},[45,61260,162],{"class":51381},[45,61262,51388],{"class":51},[45,61264,61265,61267,61269,61271,61273,61275,61277,61279,61282,61284,61286,61288],{"class":47,"line":16841},[45,61266,61128],{"class":51},[45,61268,162],{"class":51381},[45,61270,61133],{"class":51},[45,61272,13],{"class":51381},[45,61274,61138],{"class":2046},[45,61276,254],{"class":51},[45,61278,61143],{"class":313},[45,61280,61281],{"class":51},">黑鲨4\u003C\u002F",[45,61283,13],{"class":51381},[45,61285,55395],{"class":51},[45,61287,162],{"class":51381},[45,61289,51388],{"class":51},[45,61291,61292,61294,61296,61298,61300,61302,61304,61306,61309,61311,61313,61315],{"class":47,"line":16846},[45,61293,61128],{"class":51},[45,61295,162],{"class":51381},[45,61297,61133],{"class":51},[45,61299,13],{"class":51381},[45,61301,61138],{"class":2046},[45,61303,254],{"class":51},[45,61305,61143],{"class":313},[45,61307,61308],{"class":51},">空调\u003C\u002F",[45,61310,13],{"class":51381},[45,61312,55395],{"class":51},[45,61314,162],{"class":51381},[45,61316,51388],{"class":51},[45,61318,61319,61322,61324],{"class":47,"line":16852},[45,61320,61321],{"class":51},"        \u003C\u002F",[45,61323,1214],{"class":51381},[45,61325,51388],{"class":51},[45,61327,61328,61330,61332],{"class":47,"line":16866},[45,61329,51857],{"class":51},[45,61331,51692],{"class":51381},[45,61333,51388],{"class":51},[45,61335,61336,61338,61340],{"class":47,"line":16879},[45,61337,51422],{"class":51},[45,61339,51894],{"class":51381},[45,61341,51388],{"class":51},[45,61343,61344],{"class":47,"line":16884},[45,61345,61346],{"class":267},"        \u002F\u002F 1. 获取元素\n",[45,61348,61349,61352,61354,61356,61358,61360,61362,61365],{"class":47,"line":16898},[45,61350,61351],{"class":93},"        const",[45,61353,60686],{"class":257},[45,61355,13647],{"class":93},[45,61357,54477],{"class":51},[45,61359,54480],{"class":2046},[45,61361,209],{"class":51},[45,61363,61364],{"class":313},"'[type=search]'",[45,61366,215],{"class":51},[45,61368,61369,61371,61374,61376,61378,61380,61382,61385],{"class":47,"line":16903},[45,61370,61351],{"class":93},[45,61372,61373],{"class":257}," ul",[45,61375,13647],{"class":93},[45,61377,54477],{"class":51},[45,61379,54480],{"class":2046},[45,61381,209],{"class":51},[45,61383,61384],{"class":313},"'.result-list'",[45,61386,215],{"class":51},[45,61388,61389],{"class":47,"line":16909},[45,61390,61391],{"class":267},"        \u002F\u002F console.log(input)\n",[45,61393,61394],{"class":47,"line":16914},[45,61395,61396],{"class":267},"        \u002F\u002F 2. 监听事件 获得焦点\n",[45,61398,61399,61402,61404,61406,61409,61411,61413],{"class":47,"line":16928},[45,61400,61401],{"class":51},"        input.",[45,61403,57894],{"class":2046},[45,61405,209],{"class":51},[45,61407,61408],{"class":313},"'focus'",[45,61410,12518],{"class":51},[45,61412,54530],{"class":93},[45,61414,54533],{"class":51},[45,61416,61417],{"class":47,"line":16933},[45,61418,61419],{"class":267},"            \u002F\u002F ul显示\n",[45,61421,61422,61425,61427],{"class":47,"line":16938},[45,61423,61424],{"class":51},"            ul.style.display ",[45,61426,254],{"class":93},[45,61428,61429],{"class":313}," 'block'\n",[45,61431,61432],{"class":47,"line":16952},[45,61433,61434],{"class":267},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[45,61436,61437,61440,61442,61444,61447],{"class":47,"line":16964},[45,61438,61439],{"class":51},"            input.classList.",[45,61441,5417],{"class":2046},[45,61443,209],{"class":51},[45,61445,61446],{"class":313},"'search'",[45,61448,215],{"class":51},[45,61450,61451],{"class":47,"line":16969},[45,61452,61453],{"class":51},"        })\n",[45,61455,61456],{"class":47,"line":16982},[45,61457,61458],{"class":267},"        \u002F\u002F 3. 监听事件 失去焦点\n",[45,61460,61461,61463,61465,61467,61470,61472,61474],{"class":47,"line":16987},[45,61462,61401],{"class":51},[45,61464,57894],{"class":2046},[45,61466,209],{"class":51},[45,61468,61469],{"class":313},"'blur'",[45,61471,12518],{"class":51},[45,61473,54530],{"class":93},[45,61475,54533],{"class":51},[45,61477,61478,61480,61482],{"class":47,"line":16992},[45,61479,61424],{"class":51},[45,61481,254],{"class":93},[45,61483,61484],{"class":313}," 'none'\n",[45,61486,61487,61489,61491,61493,61495],{"class":47,"line":16997},[45,61488,61439],{"class":51},[45,61490,57087],{"class":2046},[45,61492,209],{"class":51},[45,61494,61446],{"class":313},[45,61496,215],{"class":51},[45,61498,61499],{"class":47,"line":17010},[45,61500,61453],{"class":51},[45,61502,61503,61505,61507],{"class":47,"line":17015},[45,61504,51857],{"class":51},[45,61506,51894],{"class":51381},[45,61508,51388],{"class":51},[45,61510,61511,61513,61515],{"class":47,"line":32714},[45,61512,51866],{"class":51},[45,61514,51881],{"class":51381},[45,61516,51388],{"class":51},[45,61518,61519],{"class":47,"line":32720},[45,61520,2483],{"emptyLinePlaceholder":133},[45,61522,61523,61525,61527],{"class":47,"line":32726},[45,61524,51866],{"class":51},[45,61526,50716],{"class":51381},[45,61528,51388],{"class":51},[22081,61530,61532],{"id":61531},"_3253-键盘事件","3.2.5.3 键盘事件",[10,61534,61535],{},"评论字数统计案例",[10,61537,61538],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[10,61540,61541],{},"牢记focus伪类选择器",[51425,61543],{"charSet":61544},"UTF-8",[51425,61546],{"name":61547,"content":61548},"viewport","width=device-width, initial-scale=1.0",[51488,61550,61551],{},"Document",[121,61553,61554],{},"\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",[53902,61556],{"type":5270},[1214,61558,61559,61562],{},[162,61560,61561],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[162,61563,61564],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[35,61566,61568],{"className":50714,"code":61567,"language":50716,"meta":40,"style":40},"\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",[42,61569,61570,61580,61594,61598,61606,61620,61640,61660,61673,61681,61688,61701,61715,61725,61735,61739,61743,61750,61762,61774,61786,61798,61827,61840,61844,61848,61857,61868,61880,61891,61902,61914,61925,61937,61953,61965,61969,61973,61984,61995,62005,62017,62021,62025,62033,62044,62054,62065,62077,62090,62102,62114,62118,62122,62131,62143,62154,62167,62178,62192,62196,62200,62207,62219,62231,62241,62245,62249,62258,62270,62280,62284,62288,62299,62309,62328,62341,62345,62349,62359,62369,62373,62377,62388,62399,62411,62423,62427,62431,62442,62453,62467,62471,62475,62486,62496,62508,62512,62520,62528,62532,62540,62555,62574,62614,62627,62635,62649,62669,62677,62692,62715,62733,62748,62768,62788,62808,62816,62824,62832,62840,62860,62880,62885,62902,62911,62915,62920,62936,62944,62948,62953,62970,62975,63000,63004,63008,63013,63018,63026,63034,63038],{"__ignoreMap":40},[45,61571,61572,61574,61576,61578],{"class":47,"line":48},[45,61573,51378],{"class":51},[45,61575,51382],{"class":51381},[45,61577,51385],{"class":2046},[45,61579,51388],{"class":51},[45,61581,61582,61584,61586,61588,61590,61592],{"class":47,"line":125},[45,61583,1117],{"class":51},[45,61585,50716],{"class":51381},[45,61587,51397],{"class":2046},[45,61589,254],{"class":51},[45,61591,51402],{"class":313},[45,61593,51388],{"class":51},[45,61595,61596],{"class":47,"line":1262},[45,61597,2483],{"emptyLinePlaceholder":133},[45,61599,61600,61602,61604],{"class":47,"line":1277},[45,61601,1117],{"class":51},[45,61603,51415],{"class":51381},[45,61605,51388],{"class":51},[45,61607,61608,61610,61612,61614,61616,61618],{"class":47,"line":1283},[45,61609,52225],{"class":51},[45,61611,51425],{"class":51381},[45,61613,51428],{"class":2046},[45,61615,254],{"class":51},[45,61617,51433],{"class":313},[45,61619,51388],{"class":51},[45,61621,61622,61624,61626,61628,61630,61632,61634,61636,61638],{"class":47,"line":1297},[45,61623,52225],{"class":51},[45,61625,51425],{"class":51381},[45,61627,51444],{"class":2046},[45,61629,254],{"class":51},[45,61631,51449],{"class":313},[45,61633,51452],{"class":2046},[45,61635,254],{"class":51},[45,61637,51457],{"class":313},[45,61639,51388],{"class":51},[45,61641,61642,61644,61646,61648,61650,61652,61654,61656,61658],{"class":47,"line":1303},[45,61643,52225],{"class":51},[45,61645,51425],{"class":51381},[45,61647,15003],{"class":2046},[45,61649,254],{"class":51},[45,61651,51472],{"class":313},[45,61653,51452],{"class":2046},[45,61655,254],{"class":51},[45,61657,51479],{"class":313},[45,61659,51388],{"class":51},[45,61661,61662,61664,61666,61669,61671],{"class":47,"line":1394},[45,61663,52225],{"class":51},[45,61665,51488],{"class":51381},[45,61667,61668],{"class":51},">评论回车发布\u003C\u002F",[45,61670,51488],{"class":51381},[45,61672,51388],{"class":51},[45,61674,61675,61677,61679],{"class":47,"line":1400},[45,61676,52225],{"class":51},[45,61678,121],{"class":51381},[45,61680,51388],{"class":51},[45,61682,61683,61686],{"class":47,"line":1412},[45,61684,61685],{"class":2046},"    .wrapper",[45,61687,15655],{"class":51},[45,61689,61690,61693,61695,61697,61699],{"class":47,"line":1695},[45,61691,61692],{"class":257},"      min-width",[45,61694,51518],{"class":51},[45,61696,4070],{"class":257},[45,61698,51573],{"class":93},[45,61700,1373],{"class":51},[45,61702,61703,61706,61708,61711,61713],{"class":47,"line":1700},[45,61704,61705],{"class":257},"      max-width",[45,61707,51518],{"class":51},[45,61709,61710],{"class":257},"800",[45,61712,51573],{"class":93},[45,61714,1373],{"class":51},[45,61716,61717,61719,61721,61723],{"class":47,"line":1706},[45,61718,55090],{"class":257},[45,61720,51518],{"class":51},[45,61722,51558],{"class":257},[45,61724,1373],{"class":51},[45,61726,61727,61729,61731,61733],{"class":47,"line":1711},[45,61728,55101],{"class":257},[45,61730,51518],{"class":51},[45,61732,51661],{"class":257},[45,61734,1373],{"class":51},[45,61736,61737],{"class":47,"line":1725},[45,61738,2270],{"class":51},[45,61740,61741],{"class":47,"line":1730},[45,61742,2483],{"emptyLinePlaceholder":133},[45,61744,61745,61748],{"class":47,"line":1736},[45,61746,61747],{"class":2046},"    .avatar",[45,61749,15655],{"class":51},[45,61751,61752,61754,61756,61758,61760],{"class":47,"line":1757},[45,61753,54852],{"class":257},[45,61755,51518],{"class":51},[45,61757,814],{"class":257},[45,61759,51573],{"class":93},[45,61761,1373],{"class":51},[45,61763,61764,61766,61768,61770,61772],{"class":47,"line":1762},[45,61765,54866],{"class":257},[45,61767,51518],{"class":51},[45,61769,814],{"class":257},[45,61771,51573],{"class":93},[45,61773,1373],{"class":51},[45,61775,61776,61778,61780,61782,61784],{"class":47,"line":1776},[45,61777,55215],{"class":257},[45,61779,51518],{"class":51},[45,61781,863],{"class":257},[45,61783,536],{"class":93},[45,61785,1373],{"class":51},[45,61787,61788,61791,61793,61796],{"class":47,"line":1781},[45,61789,61790],{"class":257},"      overflow",[45,61792,51518],{"class":51},[45,61794,61795],{"class":257},"hidden",[45,61797,1373],{"class":51},[45,61799,61800,61803,61805,61808,61810,61813,61815,61818,61820,61822,61825],{"class":47,"line":1810},[45,61801,61802],{"class":257},"      background",[45,61804,51518],{"class":51},[45,61806,61807],{"class":257},"url",[45,61809,209],{"class":51},[45,61811,61812],{"class":5299},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[45,61814,13797],{"class":51},[45,61816,61817],{"class":257},"no-repeat",[45,61819,17227],{"class":257},[45,61821,25061],{"class":51},[45,61823,61824],{"class":257},"cover",[45,61826,1373],{"class":51},[45,61828,61829,61832,61834,61836,61838],{"class":47,"line":1815},[45,61830,61831],{"class":257},"      margin-right",[45,61833,51518],{"class":51},[45,61835,907],{"class":257},[45,61837,51573],{"class":93},[45,61839,1373],{"class":51},[45,61841,61842],{"class":47,"line":1832},[45,61843,2270],{"class":51},[45,61845,61846],{"class":47,"line":1837},[45,61847,2483],{"emptyLinePlaceholder":133},[45,61849,61850,61852,61855],{"class":47,"line":1842},[45,61851,61685],{"class":2046},[45,61853,61854],{"class":51381}," textarea",[45,61856,15655],{"class":51},[45,61858,61859,61862,61864,61866],{"class":47,"line":1847},[45,61860,61861],{"class":257},"      outline",[45,61863,51518],{"class":51},[45,61865,54818],{"class":257},[45,61867,1373],{"class":51},[45,61869,61870,61873,61875,61878],{"class":47,"line":1861},[45,61871,61872],{"class":257},"      border-color",[45,61874,51518],{"class":51},[45,61876,61877],{"class":257},"transparent",[45,61879,1373],{"class":51},[45,61881,61882,61885,61887,61889],{"class":47,"line":1866},[45,61883,61884],{"class":257},"      resize",[45,61886,51518],{"class":51},[45,61888,54818],{"class":257},[45,61890,1373],{"class":51},[45,61892,61893,61895,61897,61900],{"class":47,"line":2660},[45,61894,61802],{"class":257},[45,61896,51518],{"class":51},[45,61898,61899],{"class":257},"#f5f5f5",[45,61901,1373],{"class":51},[45,61903,61904,61906,61908,61910,61912],{"class":47,"line":2674},[45,61905,55215],{"class":257},[45,61907,51518],{"class":51},[45,61909,501],{"class":257},[45,61911,51573],{"class":93},[45,61913,1373],{"class":51},[45,61915,61916,61919,61921,61923],{"class":47,"line":2682},[45,61917,61918],{"class":257},"      flex",[45,61920,51518],{"class":51},[45,61922,426],{"class":257},[45,61924,1373],{"class":51},[45,61926,61927,61929,61931,61933,61935],{"class":47,"line":2687},[45,61928,54776],{"class":257},[45,61930,51518],{"class":51},[45,61932,654],{"class":257},[45,61934,51573],{"class":93},[45,61936,1373],{"class":51},[45,61938,61939,61942,61944,61946,61949,61951],{"class":47,"line":2693},[45,61940,61941],{"class":257},"      transition",[45,61943,51518],{"class":51},[45,61945,28204],{"class":257},[45,61947,61948],{"class":257}," 0.5",[45,61950,902],{"class":93},[45,61952,1373],{"class":51},[45,61954,61955,61957,61959,61961,61963],{"class":47,"line":2699},[45,61956,54866],{"class":257},[45,61958,51518],{"class":51},[45,61960,1158],{"class":257},[45,61962,51573],{"class":93},[45,61964,1373],{"class":51},[45,61966,61967],{"class":47,"line":2704},[45,61968,2270],{"class":51},[45,61970,61971],{"class":47,"line":8031},[45,61972,2483],{"emptyLinePlaceholder":133},[45,61974,61975,61977,61979,61982],{"class":47,"line":8055},[45,61976,61685],{"class":2046},[45,61978,61854],{"class":51381},[45,61980,61981],{"class":2046},":focus",[45,61983,15655],{"class":51},[45,61985,61986,61988,61990,61993],{"class":47,"line":8060},[45,61987,61872],{"class":257},[45,61989,51518],{"class":51},[45,61991,61992],{"class":257},"#e4e4e4",[45,61994,1373],{"class":51},[45,61996,61997,61999,62001,62003],{"class":47,"line":8066},[45,61998,61802],{"class":257},[45,62000,51518],{"class":51},[45,62002,60923],{"class":257},[45,62004,1373],{"class":51},[45,62006,62007,62009,62011,62013,62015],{"class":47,"line":8093},[45,62008,54866],{"class":257},[45,62010,51518],{"class":51},[45,62012,863],{"class":257},[45,62014,51573],{"class":93},[45,62016,1373],{"class":51},[45,62018,62019],{"class":47,"line":8098},[45,62020,2270],{"class":51},[45,62022,62023],{"class":47,"line":8104},[45,62024,2483],{"emptyLinePlaceholder":133},[45,62026,62027,62029,62031],{"class":47,"line":8116},[45,62028,61685],{"class":2046},[45,62030,57548],{"class":51381},[45,62032,15655],{"class":51},[45,62034,62035,62037,62039,62042],{"class":47,"line":8128},[45,62036,61802],{"class":257},[45,62038,51518],{"class":51},[45,62040,62041],{"class":257},"#00aeec",[45,62043,1373],{"class":51},[45,62045,62046,62048,62050,62052],{"class":47,"line":8140},[45,62047,57497],{"class":257},[45,62049,51518],{"class":51},[45,62051,60923],{"class":257},[45,62053,1373],{"class":51},[45,62055,62056,62059,62061,62063],{"class":47,"line":9799},[45,62057,62058],{"class":257},"      border",[45,62060,51518],{"class":51},[45,62062,54818],{"class":257},[45,62064,1373],{"class":51},[45,62066,62067,62069,62071,62073,62075],{"class":47,"line":9824},[45,62068,55215],{"class":257},[45,62070,51518],{"class":51},[45,62072,501],{"class":257},[45,62074,51573],{"class":93},[45,62076,1373],{"class":51},[45,62078,62079,62082,62084,62086,62088],{"class":47,"line":9847},[45,62080,62081],{"class":257},"      margin-left",[45,62083,51518],{"class":51},[45,62085,654],{"class":257},[45,62087,51573],{"class":93},[45,62089,1373],{"class":51},[45,62091,62092,62094,62096,62098,62100],{"class":47,"line":9871},[45,62093,54852],{"class":257},[45,62095,51518],{"class":51},[45,62097,564],{"class":257},[45,62099,51573],{"class":93},[45,62101,1373],{"class":51},[45,62103,62104,62107,62109,62112],{"class":47,"line":9876},[45,62105,62106],{"class":257},"      cursor",[45,62108,51518],{"class":51},[45,62110,62111],{"class":257},"pointer",[45,62113,1373],{"class":51},[45,62115,62116],{"class":47,"line":9881},[45,62117,2270],{"class":51},[45,62119,62120],{"class":47,"line":9886},[45,62121,2483],{"emptyLinePlaceholder":133},[45,62123,62124,62126,62129],{"class":47,"line":9895},[45,62125,61685],{"class":2046},[45,62127,62128],{"class":2046}," .total",[45,62130,15655],{"class":51},[45,62132,62133,62135,62137,62139,62141],{"class":47,"line":9900},[45,62134,61831],{"class":257},[45,62136,51518],{"class":51},[45,62138,819],{"class":257},[45,62140,51573],{"class":93},[45,62142,1373],{"class":51},[45,62144,62145,62147,62149,62152],{"class":47,"line":9906},[45,62146,57497],{"class":257},[45,62148,51518],{"class":51},[45,62150,62151],{"class":257},"#999",[45,62153,1373],{"class":51},[45,62155,62156,62159,62161,62163,62165],{"class":47,"line":9927},[45,62157,62158],{"class":257},"      margin-top",[45,62160,51518],{"class":51},[45,62162,527],{"class":257},[45,62164,51573],{"class":93},[45,62166,1373],{"class":51},[45,62168,62169,62172,62174,62176],{"class":47,"line":9933},[45,62170,62171],{"class":257},"      opacity",[45,62173,51518],{"class":51},[45,62175,400],{"class":257},[45,62177,1373],{"class":51},[45,62179,62180,62182,62184,62186,62188,62190],{"class":47,"line":9947},[45,62181,61941],{"class":257},[45,62183,51518],{"class":51},[45,62185,28204],{"class":257},[45,62187,61948],{"class":257},[45,62189,902],{"class":93},[45,62191,1373],{"class":51},[45,62193,62194],{"class":47,"line":9953},[45,62195,2270],{"class":51},[45,62197,62198],{"class":47,"line":9980},[45,62199,2483],{"emptyLinePlaceholder":133},[45,62201,62202,62205],{"class":47,"line":9989},[45,62203,62204],{"class":2046},"    .list",[45,62206,15655],{"class":51},[45,62208,62209,62211,62213,62215,62217],{"class":47,"line":9995},[45,62210,61692],{"class":257},[45,62212,51518],{"class":51},[45,62214,4070],{"class":257},[45,62216,51573],{"class":93},[45,62218,1373],{"class":51},[45,62220,62221,62223,62225,62227,62229],{"class":47,"line":10003},[45,62222,61705],{"class":257},[45,62224,51518],{"class":51},[45,62226,61710],{"class":257},[45,62228,51573],{"class":93},[45,62230,1373],{"class":51},[45,62232,62233,62235,62237,62239],{"class":47,"line":10008},[45,62234,55090],{"class":257},[45,62236,51518],{"class":51},[45,62238,51558],{"class":257},[45,62240,1373],{"class":51},[45,62242,62243],{"class":47,"line":16687},[45,62244,2270],{"class":51},[45,62246,62247],{"class":47,"line":16693},[45,62248,2483],{"emptyLinePlaceholder":133},[45,62250,62251,62253,62256],{"class":47,"line":16716},[45,62252,62204],{"class":2046},[45,62254,62255],{"class":2046}," .item",[45,62257,15655],{"class":51},[45,62259,62260,62262,62264,62266,62268],{"class":47,"line":16722},[45,62261,54852],{"class":257},[45,62263,51518],{"class":51},[45,62265,519],{"class":257},[45,62267,536],{"class":93},[45,62269,1373],{"class":51},[45,62271,62272,62274,62276,62278],{"class":47,"line":16745},[45,62273,55090],{"class":257},[45,62275,51518],{"class":51},[45,62277,51558],{"class":257},[45,62279,1373],{"class":51},[45,62281,62282],{"class":47,"line":16759},[45,62283,2270],{"class":51},[45,62285,62286],{"class":47,"line":16779},[45,62287,2483],{"emptyLinePlaceholder":133},[45,62289,62290,62292,62294,62297],{"class":47,"line":16785},[45,62291,62204],{"class":2046},[45,62293,62255],{"class":2046},[45,62295,62296],{"class":2046}," .info",[45,62298,15655],{"class":51},[45,62300,62301,62303,62305,62307],{"class":47,"line":16796},[45,62302,61918],{"class":257},[45,62304,51518],{"class":51},[45,62306,426],{"class":257},[45,62308,1373],{"class":51},[45,62310,62311,62314,62316,62318,62320,62323,62326],{"class":47,"line":16819},[45,62312,62313],{"class":257},"      border-bottom",[45,62315,51518],{"class":51},[45,62317,426],{"class":257},[45,62319,51573],{"class":93},[45,62321,62322],{"class":257}," dashed",[45,62324,62325],{"class":257}," #e4e4e4",[45,62327,1373],{"class":51},[45,62329,62330,62333,62335,62337,62339],{"class":47,"line":16841},[45,62331,62332],{"class":257},"      padding-bottom",[45,62334,51518],{"class":51},[45,62336,654],{"class":257},[45,62338,51573],{"class":93},[45,62340,1373],{"class":51},[45,62342,62343],{"class":47,"line":16846},[45,62344,2270],{"class":51},[45,62346,62347],{"class":47,"line":16852},[45,62348,2483],{"emptyLinePlaceholder":133},[45,62350,62351,62353,62355,62357],{"class":47,"line":16866},[45,62352,62204],{"class":2046},[45,62354,62255],{"class":2046},[45,62356,6908],{"class":51381},[45,62358,15655],{"class":51},[45,62360,62361,62363,62365,62367],{"class":47,"line":16879},[45,62362,54787],{"class":257},[45,62364,51518],{"class":51},[45,62366,400],{"class":257},[45,62368,1373],{"class":51},[45,62370,62371],{"class":47,"line":16884},[45,62372,2270],{"class":51},[45,62374,62375],{"class":47,"line":16898},[45,62376,2483],{"emptyLinePlaceholder":133},[45,62378,62379,62381,62383,62386],{"class":47,"line":16903},[45,62380,62204],{"class":2046},[45,62382,62255],{"class":2046},[45,62384,62385],{"class":2046}," .name",[45,62387,15655],{"class":51},[45,62389,62390,62392,62394,62397],{"class":47,"line":16909},[45,62391,57497],{"class":257},[45,62393,51518],{"class":51},[45,62395,62396],{"class":257},"#FB7299",[45,62398,1373],{"class":51},[45,62400,62401,62403,62405,62407,62409],{"class":47,"line":16914},[45,62402,55003],{"class":257},[45,62404,51518],{"class":51},[45,62406,756],{"class":257},[45,62408,51573],{"class":93},[45,62410,1373],{"class":51},[45,62412,62413,62416,62418,62421],{"class":47,"line":16928},[45,62414,62415],{"class":257},"      font-weight",[45,62417,51518],{"class":51},[45,62419,62420],{"class":257},"bold",[45,62422,1373],{"class":51},[45,62424,62425],{"class":47,"line":16933},[45,62426,2270],{"class":51},[45,62428,62429],{"class":47,"line":16938},[45,62430,2483],{"emptyLinePlaceholder":133},[45,62432,62433,62435,62437,62440],{"class":47,"line":16952},[45,62434,62204],{"class":2046},[45,62436,62255],{"class":2046},[45,62438,62439],{"class":2046}," .text",[45,62441,15655],{"class":51},[45,62443,62444,62446,62448,62451],{"class":47,"line":16964},[45,62445,57497],{"class":257},[45,62447,51518],{"class":51},[45,62449,62450],{"class":257},"#333",[45,62452,1373],{"class":51},[45,62454,62455,62457,62459,62461,62463,62465],{"class":47,"line":16969},[45,62456,54776],{"class":257},[45,62458,51518],{"class":51},[45,62460,654],{"class":257},[45,62462,51573],{"class":93},[45,62464,4176],{"class":257},[45,62466,1373],{"class":51},[45,62468,62469],{"class":47,"line":16982},[45,62470,2270],{"class":51},[45,62472,62473],{"class":47,"line":16987},[45,62474,2483],{"emptyLinePlaceholder":133},[45,62476,62477,62479,62481,62484],{"class":47,"line":16992},[45,62478,62204],{"class":2046},[45,62480,62255],{"class":2046},[45,62482,62483],{"class":2046}," .time",[45,62485,15655],{"class":51},[45,62487,62488,62490,62492,62494],{"class":47,"line":16997},[45,62489,57497],{"class":257},[45,62491,51518],{"class":51},[45,62493,62151],{"class":257},[45,62495,1373],{"class":51},[45,62497,62498,62500,62502,62504,62506],{"class":47,"line":17010},[45,62499,55003],{"class":257},[45,62501,51518],{"class":51},[45,62503,706],{"class":257},[45,62505,51573],{"class":93},[45,62507,1373],{"class":51},[45,62509,62510],{"class":47,"line":17015},[45,62511,2270],{"class":51},[45,62513,62514,62516,62518],{"class":47,"line":32714},[45,62515,52498],{"class":51},[45,62517,121],{"class":51381},[45,62519,51388],{"class":51},[45,62521,62522,62524,62526],{"class":47,"line":32720},[45,62523,51866],{"class":51},[45,62525,51415],{"class":51381},[45,62527,51388],{"class":51},[45,62529,62530],{"class":47,"line":32726},[45,62531,2483],{"emptyLinePlaceholder":133},[45,62533,62534,62536,62538],{"class":47,"line":32732},[45,62535,1117],{"class":51},[45,62537,51881],{"class":51381},[45,62539,51388],{"class":51},[45,62541,62542,62544,62546,62548,62550,62553],{"class":47,"line":32738},[45,62543,52225],{"class":51},[45,62545,51692],{"class":51381},[45,62547,53567],{"class":2046},[45,62549,254],{"class":51},[45,62551,62552],{"class":313},"\"wrapper\"",[45,62554,51388],{"class":51},[45,62556,62557,62559,62561,62563,62565,62568,62570,62572],{"class":47,"line":32749},[45,62558,51422],{"class":51},[45,62560,649],{"class":51381},[45,62562,53567],{"class":2046},[45,62564,254],{"class":51},[45,62566,62567],{"class":313},"\"avatar\"",[45,62569,55395],{"class":51},[45,62571,649],{"class":51381},[45,62573,51388],{"class":51},[45,62575,62576,62578,62580,62582,62584,62587,62589,62591,62594,62596,62598,62600,62603,62605,62608,62610,62612],{"class":47,"line":32755},[45,62577,51422],{"class":51},[45,62579,54369],{"class":51381},[45,62581,15042],{"class":2046},[45,62583,254],{"class":51},[45,62585,62586],{"class":313},"\"tx\"",[45,62588,61101],{"class":2046},[45,62590,254],{"class":51},[45,62592,62593],{"class":313},"\"发一条友善的评论\"",[45,62595,54392],{"class":2046},[45,62597,254],{"class":51},[45,62599,3784],{"class":313},[45,62601,62602],{"class":2046}," maxlength",[45,62604,254],{"class":51},[45,62606,62607],{"class":313},"\"200\"",[45,62609,55395],{"class":51},[45,62611,54369],{"class":51381},[45,62613,51388],{"class":51},[45,62615,62616,62618,62620,62623,62625],{"class":47,"line":32775},[45,62617,51422],{"class":51},[45,62619,53968],{"class":51381},[45,62621,62622],{"class":51},">发布\u003C\u002F",[45,62624,53968],{"class":51381},[45,62626,51388],{"class":51},[45,62628,62629,62631,62633],{"class":47,"line":32781},[45,62630,52498],{"class":51},[45,62632,51692],{"class":51381},[45,62634,51388],{"class":51},[45,62636,62637,62639,62641,62643,62645,62647],{"class":47,"line":32792},[45,62638,52225],{"class":51},[45,62640,51692],{"class":51381},[45,62642,53567],{"class":2046},[45,62644,254],{"class":51},[45,62646,62552],{"class":313},[45,62648,51388],{"class":51},[45,62650,62651,62653,62655,62657,62659,62662,62665,62667],{"class":47,"line":32798},[45,62652,51422],{"class":51},[45,62654,45],{"class":51381},[45,62656,53567],{"class":2046},[45,62658,254],{"class":51},[45,62660,62661],{"class":313},"\"total\"",[45,62663,62664],{"class":51},">0\u002F200字\u003C\u002F",[45,62666,45],{"class":51381},[45,62668,51388],{"class":51},[45,62670,62671,62673,62675],{"class":47,"line":32804},[45,62672,52498],{"class":51},[45,62674,51692],{"class":51381},[45,62676,51388],{"class":51},[45,62678,62679,62681,62683,62685,62687,62690],{"class":47,"line":32810},[45,62680,52225],{"class":51},[45,62682,51692],{"class":51381},[45,62684,53567],{"class":2046},[45,62686,254],{"class":51},[45,62688,62689],{"class":313},"\"list\"",[45,62691,51388],{"class":51},[45,62693,62694,62696,62698,62700,62702,62705,62708,62710,62713],{"class":47,"line":32816},[45,62695,51422],{"class":51},[45,62697,51692],{"class":51381},[45,62699,53567],{"class":2046},[45,62701,254],{"class":51},[45,62703,62704],{"class":313},"\"item\"",[45,62706,62707],{"class":2046}," style",[45,62709,254],{"class":51},[45,62711,62712],{"class":313},"\"display: none;\"",[45,62714,51388],{"class":51},[45,62716,62717,62719,62721,62723,62725,62727,62729,62731],{"class":47,"line":32822},[45,62718,55315],{"class":51},[45,62720,649],{"class":51381},[45,62722,53567],{"class":2046},[45,62724,254],{"class":51},[45,62726,62567],{"class":313},[45,62728,55395],{"class":51},[45,62730,649],{"class":51381},[45,62732,51388],{"class":51},[45,62734,62735,62737,62739,62741,62743,62746],{"class":47,"line":32828},[45,62736,55315],{"class":51},[45,62738,51692],{"class":51381},[45,62740,53567],{"class":2046},[45,62742,254],{"class":51},[45,62744,62745],{"class":313},"\"info\"",[45,62747,51388],{"class":51},[45,62749,62750,62752,62754,62756,62758,62761,62764,62766],{"class":47,"line":32834},[45,62751,55383],{"class":51},[45,62753,10],{"class":51381},[45,62755,53567],{"class":2046},[45,62757,254],{"class":51},[45,62759,62760],{"class":313},"\"name\"",[45,62762,62763],{"class":51},">清风徐来\u003C\u002F",[45,62765,10],{"class":51381},[45,62767,51388],{"class":51},[45,62769,62770,62772,62774,62776,62778,62781,62784,62786],{"class":47,"line":32854},[45,62771,55383],{"class":51},[45,62773,10],{"class":51381},[45,62775,53567],{"class":2046},[45,62777,254],{"class":51},[45,62779,62780],{"class":313},"\"text\"",[45,62782,62783],{"class":51},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[45,62785,10],{"class":51381},[45,62787,51388],{"class":51},[45,62789,62790,62792,62794,62796,62798,62801,62804,62806],{"class":47,"line":32860},[45,62791,55383],{"class":51},[45,62793,10],{"class":51381},[45,62795,53567],{"class":2046},[45,62797,254],{"class":51},[45,62799,62800],{"class":313},"\"time\"",[45,62802,62803],{"class":51},">2022-10-10 20:29:21\u003C\u002F",[45,62805,10],{"class":51381},[45,62807,51388],{"class":51},[45,62809,62810,62812,62814],{"class":47,"line":32876},[45,62811,55488],{"class":51},[45,62813,51692],{"class":51381},[45,62815,51388],{"class":51},[45,62817,62818,62820,62822],{"class":47,"line":32882},[45,62819,51857],{"class":51},[45,62821,51692],{"class":51381},[45,62823,51388],{"class":51},[45,62825,62826,62828,62830],{"class":47,"line":32896},[45,62827,52498],{"class":51},[45,62829,51692],{"class":51381},[45,62831,51388],{"class":51},[45,62833,62834,62836,62838],{"class":47,"line":32902},[45,62835,52225],{"class":51},[45,62837,51894],{"class":51381},[45,62839,51388],{"class":51},[45,62841,62842,62844,62847,62849,62851,62853,62855,62858],{"class":47,"line":32917},[45,62843,11304],{"class":93},[45,62845,62846],{"class":257}," tx",[45,62848,13647],{"class":93},[45,62850,54477],{"class":51},[45,62852,54480],{"class":2046},[45,62854,209],{"class":51},[45,62856,62857],{"class":313},"'#tx'",[45,62859,215],{"class":51},[45,62861,62862,62864,62867,62869,62871,62873,62875,62878],{"class":47,"line":32923},[45,62863,11304],{"class":93},[45,62865,62866],{"class":257}," total",[45,62868,13647],{"class":93},[45,62870,54477],{"class":51},[45,62872,54480],{"class":2046},[45,62874,209],{"class":51},[45,62876,62877],{"class":313},"'.total'",[45,62879,215],{"class":51},[45,62881,62882],{"class":47,"line":32932},[45,62883,62884],{"class":267},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[45,62886,62887,62890,62892,62894,62896,62898,62900],{"class":47,"line":32938},[45,62888,62889],{"class":51},"    tx.",[45,62891,57894],{"class":2046},[45,62893,209],{"class":51},[45,62895,61408],{"class":313},[45,62897,12518],{"class":51},[45,62899,54530],{"class":93},[45,62901,54533],{"class":51},[45,62903,62904,62907,62909],{"class":47,"line":32947},[45,62905,62906],{"class":51},"      total.style.opacity ",[45,62908,254],{"class":93},[45,62910,55780],{"class":257},[45,62912,62913],{"class":47,"line":32953},[45,62914,33542],{"class":51},[45,62916,62917],{"class":47,"line":32959},[45,62918,62919],{"class":267},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[45,62921,62922,62924,62926,62928,62930,62932,62934],{"class":47,"line":32968},[45,62923,62889],{"class":51},[45,62925,57894],{"class":2046},[45,62927,209],{"class":51},[45,62929,61469],{"class":313},[45,62931,12518],{"class":51},[45,62933,54530],{"class":93},[45,62935,54533],{"class":51},[45,62937,62938,62940,62942],{"class":47,"line":32974},[45,62939,62906],{"class":51},[45,62941,254],{"class":93},[45,62943,47414],{"class":257},[45,62945,62946],{"class":47,"line":32985},[45,62947,33542],{"class":51},[45,62949,62950],{"class":47,"line":32991},[45,62951,62952],{"class":267},"    \u002F\u002F 3. 检测用户输入\n",[45,62954,62955,62957,62959,62961,62964,62966,62968],{"class":47,"line":33010},[45,62956,62889],{"class":51},[45,62958,57894],{"class":2046},[45,62960,209],{"class":51},[45,62962,62963],{"class":313},"'input'",[45,62965,12518],{"class":51},[45,62967,54530],{"class":93},[45,62969,54533],{"class":51},[45,62971,62972],{"class":47,"line":33016},[45,62973,62974],{"class":267},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[45,62976,62977,62980,62982,62985,62988,62990,62993,62995,62997],{"class":47,"line":33027},[45,62978,62979],{"class":51},"      total.innerHTML ",[45,62981,254],{"class":93},[45,62983,62984],{"class":313}," `${",[45,62986,62987],{"class":51},"tx",[45,62989,765],{"class":313},[45,62991,62992],{"class":51},"value",[45,62994,765],{"class":313},[45,62996,52049],{"class":257},[45,62998,62999],{"class":313},"}\u002F200字`\n",[45,63001,63002],{"class":47,"line":33033},[45,63003,33542],{"class":51},[45,63005,63006],{"class":47,"line":33053},[45,63007,2483],{"emptyLinePlaceholder":133},[45,63009,63010],{"class":47,"line":33069},[45,63011,63012],{"class":267},"    \u002F\u002F const str = 'andy'\n",[45,63014,63015],{"class":47,"line":33075},[45,63016,63017],{"class":267},"    \u002F\u002F console.log(str.length)\n",[45,63019,63020,63022,63024],{"class":47,"line":33089},[45,63021,52498],{"class":51},[45,63023,51894],{"class":51381},[45,63025,51388],{"class":51},[45,63027,63028,63030,63032],{"class":47,"line":33095},[45,63029,51866],{"class":51},[45,63031,51881],{"class":51381},[45,63033,51388],{"class":51},[45,63035,63036],{"class":47,"line":33101},[45,63037,2483],{"emptyLinePlaceholder":133},[45,63039,63040,63042,63044],{"class":47,"line":33112},[45,63041,51866],{"class":51},[45,63043,50716],{"class":51381},[45,63045,51388],{"class":51},[22081,63047,63049],{"id":63048},"_3254-change事件","3.2.5.4 change事件",[10,63051,63052],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[10,63054,63055],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[10,63057,63058],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[35,63060,63062],{"className":50714,"code":63061,"language":50716,"meta":40,"style":40},"\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",[42,63063,63064,63074,63088,63092,63100,63114,63134,63146,63154,63158,63166,63180,63188,63206,63224,63236,63240,63248,63256,63260],{"__ignoreMap":40},[45,63065,63066,63068,63070,63072],{"class":47,"line":48},[45,63067,51378],{"class":51},[45,63069,51382],{"class":51381},[45,63071,51385],{"class":2046},[45,63073,51388],{"class":51},[45,63075,63076,63078,63080,63082,63084,63086],{"class":47,"line":125},[45,63077,1117],{"class":51},[45,63079,50716],{"class":51381},[45,63081,51397],{"class":2046},[45,63083,254],{"class":51},[45,63085,51402],{"class":313},[45,63087,51388],{"class":51},[45,63089,63090],{"class":47,"line":1262},[45,63091,2483],{"emptyLinePlaceholder":133},[45,63093,63094,63096,63098],{"class":47,"line":1277},[45,63095,1117],{"class":51},[45,63097,51415],{"class":51381},[45,63099,51388],{"class":51},[45,63101,63102,63104,63106,63108,63110,63112],{"class":47,"line":1283},[45,63103,52225],{"class":51},[45,63105,51425],{"class":51381},[45,63107,51428],{"class":2046},[45,63109,254],{"class":51},[45,63111,51433],{"class":313},[45,63113,51388],{"class":51},[45,63115,63116,63118,63120,63122,63124,63126,63128,63130,63132],{"class":47,"line":1297},[45,63117,52225],{"class":51},[45,63119,51425],{"class":51381},[45,63121,15003],{"class":2046},[45,63123,254],{"class":51},[45,63125,51472],{"class":313},[45,63127,51452],{"class":2046},[45,63129,254],{"class":51},[45,63131,51479],{"class":313},[45,63133,51388],{"class":51},[45,63135,63136,63138,63140,63142,63144],{"class":47,"line":1303},[45,63137,52225],{"class":51},[45,63139,51488],{"class":51381},[45,63141,51491],{"class":51},[45,63143,51488],{"class":51381},[45,63145,51388],{"class":51},[45,63147,63148,63150,63152],{"class":47,"line":1394},[45,63149,51866],{"class":51},[45,63151,51415],{"class":51381},[45,63153,51388],{"class":51},[45,63155,63156],{"class":47,"line":1400},[45,63157,2483],{"emptyLinePlaceholder":133},[45,63159,63160,63162,63164],{"class":47,"line":1412},[45,63161,1117],{"class":51},[45,63163,51881],{"class":51381},[45,63165,51388],{"class":51},[45,63167,63168,63170,63172,63174,63176,63178],{"class":47,"line":1695},[45,63169,52225],{"class":51},[45,63171,53902],{"class":51381},[45,63173,53905],{"class":2046},[45,63175,254],{"class":51},[45,63177,62780],{"class":313},[45,63179,51388],{"class":51},[45,63181,63182,63184,63186],{"class":47,"line":1700},[45,63183,52225],{"class":51},[45,63185,51894],{"class":51381},[45,63187,51388],{"class":51},[45,63189,63190,63192,63194,63196,63198,63200,63202,63204],{"class":47,"line":1706},[45,63191,11304],{"class":93},[45,63193,60686],{"class":257},[45,63195,13647],{"class":93},[45,63197,54477],{"class":51},[45,63199,54480],{"class":2046},[45,63201,209],{"class":51},[45,63203,62963],{"class":313},[45,63205,215],{"class":51},[45,63207,63208,63211,63213,63215,63218,63220,63222],{"class":47,"line":1711},[45,63209,63210],{"class":51},"    input.",[45,63212,57894],{"class":2046},[45,63214,209],{"class":51},[45,63216,63217],{"class":313},"'change'",[45,63219,12518],{"class":51},[45,63221,54530],{"class":93},[45,63223,54533],{"class":51},[45,63225,63226,63228,63230,63232,63234],{"class":47,"line":1725},[45,63227,58325],{"class":51},[45,63229,58328],{"class":2046},[45,63231,209],{"class":51},[45,63233,800],{"class":257},[45,63235,215],{"class":51},[45,63237,63238],{"class":47,"line":1730},[45,63239,33542],{"class":51},[45,63241,63242,63244,63246],{"class":47,"line":1736},[45,63243,52498],{"class":51},[45,63245,51894],{"class":51381},[45,63247,51388],{"class":51},[45,63249,63250,63252,63254],{"class":47,"line":1757},[45,63251,51866],{"class":51},[45,63253,51881],{"class":51381},[45,63255,51388],{"class":51},[45,63257,63258],{"class":47,"line":1762},[45,63259,2483],{"emptyLinePlaceholder":133},[45,63261,63262,63264,63266],{"class":47,"line":1776},[45,63263,51866],{"class":51},[45,63265,50716],{"class":51381},[45,63267,51388],{"class":51},[10,63269,63270],{},"总结：内容发生改变才回去触发",[176,63272,63274],{"id":63273},"_326-事件对象","3.2.6 事件对象",[22081,63276,63278],{"id":63277},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[10,63280,63281],{},[1545,63282],{"alt":40,"src":63283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[10,63285,63286],{},[1545,63287],{"alt":40,"src":63288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[10,63290,63291],{},"点击一次，就输出了事件对象，它是个对象",[10,63293,63294],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[10,63296,63297],{},[1545,63298],{"alt":40,"src":63299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22081,63301,63303],{"id":63302},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[10,63305,63306],{},[1545,63307],{"alt":40,"src":63308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[10,63310,63311],{},"实现按特殊字符才是实现打印输出效果：",[35,63313,63315],{"className":53148,"code":63314,"language":53150,"meta":40,"style":40},"\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",[42,63316,63317,63325,63330,63344,63352,63357,63362,63367,63372,63377,63382,63387,63392,63397,63401,63405,63413],{"__ignoreMap":40},[45,63318,63319,63321,63323],{"class":47,"line":48},[45,63320,1117],{"class":51},[45,63322,51881],{"class":51381},[45,63324,51388],{"class":51},[45,63326,63327],{"class":47,"line":125},[45,63328,63329],{"class":267},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[45,63331,63332,63334,63336,63338,63340,63342],{"class":47,"line":1262},[45,63333,52225],{"class":51},[45,63335,53902],{"class":51381},[45,63337,53905],{"class":2046},[45,63339,254],{"class":51},[45,63341,62780],{"class":313},[45,63343,51388],{"class":51},[45,63345,63346,63348,63350],{"class":47,"line":1277},[45,63347,52225],{"class":51},[45,63349,51894],{"class":51381},[45,63351,51388],{"class":51},[45,63353,63354],{"class":47,"line":1283},[45,63355,63356],{"class":51},"    \u002F\u002F const btn = document.querySelector('button')\n",[45,63358,63359],{"class":47,"line":1297},[45,63360,63361],{"class":51},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[45,63363,63364],{"class":47,"line":1303},[45,63365,63366],{"class":51},"    \u002F\u002F   console.log(e);\n",[45,63368,63369],{"class":47,"line":1394},[45,63370,63371],{"class":51},"    \u002F\u002F })\n",[45,63373,63374],{"class":47,"line":1400},[45,63375,63376],{"class":51},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[45,63378,63379],{"class":47,"line":1412},[45,63380,63381],{"class":51},"    const input = document.querySelector('input')\n",[45,63383,63384],{"class":47,"line":1695},[45,63385,63386],{"class":51},"    input.addEventListener('keyup', function (e) {\n",[45,63388,63389],{"class":47,"line":1700},[45,63390,63391],{"class":51},"      if (e.key === 'Enter') {\n",[45,63393,63394],{"class":47,"line":1706},[45,63395,63396],{"class":51},"        console.log('我按下了回车键')\n",[45,63398,63399],{"class":47,"line":1711},[45,63400,52479],{"class":51},[45,63402,63403],{"class":47,"line":1725},[45,63404,33542],{"class":51},[45,63406,63407,63409,63411],{"class":47,"line":1730},[45,63408,52498],{"class":51},[45,63410,51894],{"class":51381},[45,63412,51388],{"class":51},[45,63414,63415,63417,63419],{"class":47,"line":1736},[45,63416,51866],{"class":51},[45,63418,51881],{"class":51381},[45,63420,51388],{"class":51},[22081,63422,63424],{"id":63423},"_3263-trim方法","3.2.6.3 trim方法",[10,63426,63427],{},[1545,63428],{"alt":40,"src":63429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[10,63431,63432],{},[1545,63433],{"alt":40,"src":63434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[10,63436,63437],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[10,63439,63440],{},"str.trim()",[176,63442,63444],{"id":63443},"_327-环境对象","3.2.7 环境对象",[10,63446,63447],{},[1545,63448],{"alt":40,"src":63449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[10,63451,63452],{},[1545,63453],{"alt":40,"src":63454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[10,63456,63457],{},[1545,63458],{"alt":40,"src":63459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[10,63461,63462],{},"实际函数调用是window.fn()",[10,63464,63465],{},"普通函数里面this指向的是window",[1214,63467,63468,63471,63474],{},[162,63469,63470],{},"在普通函数下，this指向的是window",[162,63472,63473],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[162,63475,63476],{},"箭头函数没有this",[10,63478,63479],{},"粗略记法就是：谁调用，this就指向谁",[10,63481,63482],{},[1545,63483],{"alt":40,"src":63484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[10,63486,63487],{},[1545,63488],{"alt":40,"src":63489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[10,63491,63492],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[10,63494,63495],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[35,63497,63499],{"className":53148,"code":63498,"language":53150,"meta":40,"style":40},"\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",[42,63500,63501,63509,63521,63529,63534,63539,63544,63549,63553,63561],{"__ignoreMap":40},[45,63502,63503,63505,63507],{"class":47,"line":48},[45,63504,1117],{"class":51},[45,63506,51881],{"class":51381},[45,63508,51388],{"class":51},[45,63510,63511,63513,63515,63517,63519],{"class":47,"line":125},[45,63512,52225],{"class":51},[45,63514,53968],{"class":51381},[45,63516,53974],{"class":51},[45,63518,53968],{"class":51381},[45,63520,51388],{"class":51},[45,63522,63523,63525,63527],{"class":47,"line":1262},[45,63524,52225],{"class":51},[45,63526,51894],{"class":51381},[45,63528,51388],{"class":51},[45,63530,63531],{"class":47,"line":1277},[45,63532,63533],{"class":51},"    const button = document.querySelector('button')\n",[45,63535,63536],{"class":47,"line":1283},[45,63537,63538],{"class":51},"    button.addEventListener('click', function () {\n",[45,63540,63541],{"class":47,"line":1297},[45,63542,63543],{"class":51},"      \u002F\u002F console.log(this);\n",[45,63545,63546],{"class":47,"line":1303},[45,63547,63548],{"class":51},"      this.style.color = 'pink'\n",[45,63550,63551],{"class":47,"line":1394},[45,63552,33542],{"class":51},[45,63554,63555,63557,63559],{"class":47,"line":1400},[45,63556,52498],{"class":51},[45,63558,51894],{"class":51381},[45,63560,51388],{"class":51},[45,63562,63563,63565,63567],{"class":47,"line":1412},[45,63564,51866],{"class":51},[45,63566,51881],{"class":51381},[45,63568,51388],{"class":51},[176,63570,63572],{"id":63571},"_328-回调函数","3.2.8 回调函数",[10,63574,63575],{},[1545,63576],{"alt":40,"src":63577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[10,63579,63580],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[10,63582,11415],{},[1214,63584,63585,63588,63591],{},[162,63586,63587],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[162,63589,63590],{},"回调函数本质还是函数，只不过把它当成参数使用",[162,63592,63593],{},"使用匿名函数做为回调函数比较常见",[176,63595,63597],{"id":63596},"_329-tab栏切换","3.2.9 tab栏切换",[10,63599,63600],{},[1545,63601],{"alt":40,"src":63602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[35,63604,63606],{"className":50714,"code":63605,"language":50716,"meta":40,"style":40},"\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",[42,63607,63608,63618,63632,63636,63644,63658,63678,63698,63711,63719,63725,63735,63745,63749,63753,63760,63773,63786,63798,63814,63818,63822,63829,63841,63853,63865,63875,63885,63889,63893,63902,63914,63925,63937,63941,63945,63953,63963,63973,63983,63987,63991,64001,64015,64027,64031,64035,64047,64058,64075,64085,64089,64093,64108,64119,64129,64133,64137,64144,64159,64163,64167,64175,64185,64189,64193,64202,64212,64216,64224,64232,64236,64244,64259,64274,64287,64295,64329,64356,64383,64410,64437,64445,64453,64468,64505,64540,64575,64610,64645,64653,64661,64669,64674,64679,64699,64704,64733,64738,64743,64761,64766,64771,64776,64798,64803,64819,64823,64828,64833,64854,64859,64888,64892,64897,64901,64909,64917,64921],{"__ignoreMap":40},[45,63609,63610,63612,63614,63616],{"class":47,"line":48},[45,63611,51378],{"class":51},[45,63613,51382],{"class":51381},[45,63615,51385],{"class":2046},[45,63617,51388],{"class":51},[45,63619,63620,63622,63624,63626,63628,63630],{"class":47,"line":125},[45,63621,1117],{"class":51},[45,63623,50716],{"class":51381},[45,63625,51397],{"class":2046},[45,63627,254],{"class":51},[45,63629,51402],{"class":313},[45,63631,51388],{"class":51},[45,63633,63634],{"class":47,"line":1262},[45,63635,2483],{"emptyLinePlaceholder":133},[45,63637,63638,63640,63642],{"class":47,"line":1277},[45,63639,1117],{"class":51},[45,63641,51415],{"class":51381},[45,63643,51388],{"class":51},[45,63645,63646,63648,63650,63652,63654,63656],{"class":47,"line":1283},[45,63647,52225],{"class":51},[45,63649,51425],{"class":51381},[45,63651,51428],{"class":2046},[45,63653,254],{"class":51},[45,63655,51433],{"class":313},[45,63657,59208],{"class":51},[45,63659,63660,63662,63664,63666,63668,63670,63672,63674,63676],{"class":47,"line":1297},[45,63661,52225],{"class":51},[45,63663,51425],{"class":51381},[45,63665,51444],{"class":2046},[45,63667,254],{"class":51},[45,63669,51449],{"class":313},[45,63671,51452],{"class":2046},[45,63673,254],{"class":51},[45,63675,51457],{"class":313},[45,63677,59208],{"class":51},[45,63679,63680,63682,63684,63686,63688,63690,63692,63694,63696],{"class":47,"line":1303},[45,63681,52225],{"class":51},[45,63683,51425],{"class":51381},[45,63685,15003],{"class":2046},[45,63687,254],{"class":51},[45,63689,51472],{"class":313},[45,63691,51452],{"class":2046},[45,63693,254],{"class":51},[45,63695,51479],{"class":313},[45,63697,59208],{"class":51},[45,63699,63700,63702,63704,63707,63709],{"class":47,"line":1394},[45,63701,52225],{"class":51},[45,63703,51488],{"class":51381},[45,63705,63706],{"class":51},">tab栏切换\u003C\u002F",[45,63708,51488],{"class":51381},[45,63710,51388],{"class":51},[45,63712,63713,63715,63717],{"class":47,"line":1400},[45,63714,52225],{"class":51},[45,63716,121],{"class":51381},[45,63718,51388],{"class":51},[45,63720,63721,63723],{"class":47,"line":1412},[45,63722,6486],{"class":51381},[45,63724,15655],{"class":51},[45,63726,63727,63729,63731,63733],{"class":47,"line":1695},[45,63728,54787],{"class":257},[45,63730,51518],{"class":51},[45,63732,400],{"class":257},[45,63734,1373],{"class":51},[45,63736,63737,63739,63741,63743],{"class":47,"line":1700},[45,63738,54776],{"class":257},[45,63740,51518],{"class":51},[45,63742,400],{"class":257},[45,63744,1373],{"class":51},[45,63746,63747],{"class":47,"line":1706},[45,63748,2270],{"class":51},[45,63750,63751],{"class":47,"line":1711},[45,63752,2483],{"emptyLinePlaceholder":133},[45,63754,63755,63758],{"class":47,"line":1725},[45,63756,63757],{"class":2046},"    .tab",[45,63759,15655],{"class":51},[45,63761,63762,63764,63766,63769,63771],{"class":47,"line":1730},[45,63763,54852],{"class":257},[45,63765,51518],{"class":51},[45,63767,63768],{"class":257},"590",[45,63770,51573],{"class":93},[45,63772,1373],{"class":51},[45,63774,63775,63777,63779,63782,63784],{"class":47,"line":1736},[45,63776,54866],{"class":257},[45,63778,51518],{"class":51},[45,63780,63781],{"class":257},"340",[45,63783,51573],{"class":93},[45,63785,1373],{"class":51},[45,63787,63788,63790,63792,63794,63796],{"class":47,"line":1757},[45,63789,54787],{"class":257},[45,63791,51518],{"class":51},[45,63793,907],{"class":257},[45,63795,51573],{"class":93},[45,63797,1373],{"class":51},[45,63799,63800,63802,63804,63806,63808,63810,63812],{"class":47,"line":1762},[45,63801,62058],{"class":257},[45,63803,51518],{"class":51},[45,63805,426],{"class":257},[45,63807,51573],{"class":93},[45,63809,51602],{"class":257},[45,63811,62325],{"class":257},[45,63813,1373],{"class":51},[45,63815,63816],{"class":47,"line":1776},[45,63817,2270],{"class":51},[45,63819,63820],{"class":47,"line":1781},[45,63821,2483],{"emptyLinePlaceholder":133},[45,63823,63824,63827],{"class":47,"line":1810},[45,63825,63826],{"class":2046},"    .tab-nav",[45,63828,15655],{"class":51},[45,63830,63831,63833,63835,63837,63839],{"class":47,"line":1815},[45,63832,54852],{"class":257},[45,63834,51518],{"class":51},[45,63836,519],{"class":257},[45,63838,536],{"class":93},[45,63840,1373],{"class":51},[45,63842,63843,63845,63847,63849,63851],{"class":47,"line":1832},[45,63844,54866],{"class":257},[45,63846,51518],{"class":51},[45,63848,1114],{"class":257},[45,63850,51573],{"class":93},[45,63852,1373],{"class":51},[45,63854,63855,63857,63859,63861,63863],{"class":47,"line":1837},[45,63856,57440],{"class":257},[45,63858,51518],{"class":51},[45,63860,1114],{"class":257},[45,63862,51573],{"class":93},[45,63864,1373],{"class":51},[45,63866,63867,63869,63871,63873],{"class":47,"line":1842},[45,63868,55090],{"class":257},[45,63870,51518],{"class":51},[45,63872,51558],{"class":257},[45,63874,1373],{"class":51},[45,63876,63877,63879,63881,63883],{"class":47,"line":1847},[45,63878,55101],{"class":257},[45,63880,51518],{"class":51},[45,63882,51749],{"class":257},[45,63884,1373],{"class":51},[45,63886,63887],{"class":47,"line":1861},[45,63888,2270],{"class":51},[45,63890,63891],{"class":47,"line":1866},[45,63892,2483],{"emptyLinePlaceholder":133},[45,63894,63895,63897,63900],{"class":47,"line":2660},[45,63896,63826],{"class":2046},[45,63898,63899],{"class":51381}," h3",[45,63901,15655],{"class":51},[45,63903,63904,63906,63908,63910,63912],{"class":47,"line":2674},[45,63905,55003],{"class":257},[45,63907,51518],{"class":51},[45,63909,1007],{"class":257},[45,63911,51573],{"class":93},[45,63913,1373],{"class":51},[45,63915,63916,63918,63920,63923],{"class":47,"line":2682},[45,63917,62415],{"class":257},[45,63919,51518],{"class":51},[45,63921,63922],{"class":257},"normal",[45,63924,1373],{"class":51},[45,63926,63927,63929,63931,63933,63935],{"class":47,"line":2687},[45,63928,62081],{"class":257},[45,63930,51518],{"class":51},[45,63932,907],{"class":257},[45,63934,51573],{"class":93},[45,63936,1373],{"class":51},[45,63938,63939],{"class":47,"line":2693},[45,63940,2270],{"class":51},[45,63942,63943],{"class":47,"line":2699},[45,63944,2483],{"emptyLinePlaceholder":133},[45,63946,63947,63949,63951],{"class":47,"line":2704},[45,63948,63826],{"class":2046},[45,63950,61373],{"class":51381},[45,63952,15655],{"class":51},[45,63954,63955,63957,63959,63961],{"class":47,"line":8031},[45,63956,54813],{"class":257},[45,63958,51518],{"class":51},[45,63960,54818],{"class":257},[45,63962,1373],{"class":51},[45,63964,63965,63967,63969,63971],{"class":47,"line":8055},[45,63966,55090],{"class":257},[45,63968,51518],{"class":51},[45,63970,51558],{"class":257},[45,63972,1373],{"class":51},[45,63974,63975,63977,63979,63981],{"class":47,"line":8060},[45,63976,55101],{"class":257},[45,63978,51518],{"class":51},[45,63980,51661],{"class":257},[45,63982,1373],{"class":51},[45,63984,63985],{"class":47,"line":8066},[45,63986,2270],{"class":51},[45,63988,63989],{"class":47,"line":8093},[45,63990,2483],{"emptyLinePlaceholder":133},[45,63992,63993,63995,63997,63999],{"class":47,"line":8098},[45,63994,63826],{"class":2046},[45,63996,61373],{"class":51381},[45,63998,55156],{"class":51381},[45,64000,15655],{"class":51},[45,64002,64003,64005,64007,64009,64011,64013],{"class":47,"line":8104},[45,64004,54787],{"class":257},[45,64006,51518],{"class":51},[45,64008,400],{"class":257},[45,64010,9033],{"class":257},[45,64012,51573],{"class":93},[45,64014,1373],{"class":51},[45,64016,64017,64019,64021,64023,64025],{"class":47,"line":8116},[45,64018,55003],{"class":257},[45,64020,51518],{"class":51},[45,64022,756],{"class":257},[45,64024,51573],{"class":93},[45,64026,1373],{"class":51},[45,64028,64029],{"class":47,"line":8128},[45,64030,2270],{"class":51},[45,64032,64033],{"class":47,"line":8140},[45,64034,2483],{"emptyLinePlaceholder":133},[45,64036,64037,64039,64041,64043,64045],{"class":47,"line":9799},[45,64038,63826],{"class":2046},[45,64040,61373],{"class":51381},[45,64042,55156],{"class":51381},[45,64044,1481],{"class":51381},[45,64046,15655],{"class":51},[45,64048,64049,64052,64054,64056],{"class":47,"line":9824},[45,64050,64051],{"class":257},"      text-decoration",[45,64053,51518],{"class":51},[45,64055,54818],{"class":257},[45,64057,1373],{"class":51},[45,64059,64060,64062,64064,64066,64068,64070,64073],{"class":47,"line":9847},[45,64061,62313],{"class":257},[45,64063,51518],{"class":51},[45,64065,286],{"class":257},[45,64067,51573],{"class":93},[45,64069,51602],{"class":257},[45,64071,64072],{"class":257}," transparent",[45,64074,1373],{"class":51},[45,64076,64077,64079,64081,64083],{"class":47,"line":9871},[45,64078,57497],{"class":257},[45,64080,51518],{"class":51},[45,64082,62450],{"class":257},[45,64084,1373],{"class":51},[45,64086,64087],{"class":47,"line":9876},[45,64088,2270],{"class":51},[45,64090,64091],{"class":47,"line":9881},[45,64092,2483],{"emptyLinePlaceholder":133},[45,64094,64095,64097,64099,64101,64103,64106],{"class":47,"line":9886},[45,64096,63826],{"class":2046},[45,64098,61373],{"class":51381},[45,64100,55156],{"class":51381},[45,64102,1481],{"class":51381},[45,64104,64105],{"class":2046},".active",[45,64107,15655],{"class":51},[45,64109,64110,64112,64114,64117],{"class":47,"line":9895},[45,64111,61872],{"class":257},[45,64113,51518],{"class":51},[45,64115,64116],{"class":257},"#e1251b",[45,64118,1373],{"class":51},[45,64120,64121,64123,64125,64127],{"class":47,"line":9900},[45,64122,57497],{"class":257},[45,64124,51518],{"class":51},[45,64126,64116],{"class":257},[45,64128,1373],{"class":51},[45,64130,64131],{"class":47,"line":9906},[45,64132,2270],{"class":51},[45,64134,64135],{"class":47,"line":9927},[45,64136,2483],{"emptyLinePlaceholder":133},[45,64138,64139,64142],{"class":47,"line":9933},[45,64140,64141],{"class":2046},"    .tab-content",[45,64143,15655],{"class":51},[45,64145,64146,64148,64150,64152,64155,64157],{"class":47,"line":9947},[45,64147,54776],{"class":257},[45,64149,51518],{"class":51},[45,64151,400],{"class":257},[45,64153,64154],{"class":257}," 16",[45,64156,51573],{"class":93},[45,64158,1373],{"class":51},[45,64160,64161],{"class":47,"line":9953},[45,64162,2270],{"class":51},[45,64164,64165],{"class":47,"line":9980},[45,64166,2483],{"emptyLinePlaceholder":133},[45,64168,64169,64171,64173],{"class":47,"line":9989},[45,64170,64141],{"class":2046},[45,64172,62255],{"class":2046},[45,64174,15655],{"class":51},[45,64176,64177,64179,64181,64183],{"class":47,"line":9995},[45,64178,55090],{"class":257},[45,64180,51518],{"class":51},[45,64182,54818],{"class":257},[45,64184,1373],{"class":51},[45,64186,64187],{"class":47,"line":10003},[45,64188,2270],{"class":51},[45,64190,64191],{"class":47,"line":10008},[45,64192,2483],{"emptyLinePlaceholder":133},[45,64194,64195,64197,64200],{"class":47,"line":16687},[45,64196,64141],{"class":2046},[45,64198,64199],{"class":2046}," .item.active",[45,64201,15655],{"class":51},[45,64203,64204,64206,64208,64210],{"class":47,"line":16693},[45,64205,55090],{"class":257},[45,64207,51518],{"class":51},[45,64209,60950],{"class":257},[45,64211,1373],{"class":51},[45,64213,64214],{"class":47,"line":16716},[45,64215,2270],{"class":51},[45,64217,64218,64220,64222],{"class":47,"line":16722},[45,64219,52498],{"class":51},[45,64221,121],{"class":51381},[45,64223,51388],{"class":51},[45,64225,64226,64228,64230],{"class":47,"line":16745},[45,64227,51866],{"class":51},[45,64229,51415],{"class":51381},[45,64231,51388],{"class":51},[45,64233,64234],{"class":47,"line":16759},[45,64235,2483],{"emptyLinePlaceholder":133},[45,64237,64238,64240,64242],{"class":47,"line":16779},[45,64239,1117],{"class":51},[45,64241,51881],{"class":51381},[45,64243,51388],{"class":51},[45,64245,64246,64248,64250,64252,64254,64257],{"class":47,"line":16785},[45,64247,52225],{"class":51},[45,64249,51692],{"class":51381},[45,64251,53567],{"class":2046},[45,64253,254],{"class":51},[45,64255,64256],{"class":313},"\"tab\"",[45,64258,51388],{"class":51},[45,64260,64261,64263,64265,64267,64269,64272],{"class":47,"line":16796},[45,64262,51422],{"class":51},[45,64264,51692],{"class":51381},[45,64266,53567],{"class":2046},[45,64268,254],{"class":51},[45,64270,64271],{"class":313},"\"tab-nav\"",[45,64273,51388],{"class":51},[45,64275,64276,64278,64280,64283,64285],{"class":47,"line":16819},[45,64277,55315],{"class":51},[45,64279,176],{"class":51381},[45,64281,64282],{"class":51},">每日特价\u003C\u002F",[45,64284,176],{"class":51381},[45,64286,51388],{"class":51},[45,64288,64289,64291,64293],{"class":47,"line":16841},[45,64290,55315],{"class":51},[45,64292,1214],{"class":51381},[45,64294,51388],{"class":51},[45,64296,64297,64299,64301,64303,64305,64307,64309,64311,64313,64315,64318,64321,64323,64325,64327],{"class":47,"line":16846},[45,64298,55383],{"class":51},[45,64300,162],{"class":51381},[45,64302,61133],{"class":51},[45,64304,13],{"class":51381},[45,64306,53567],{"class":2046},[45,64308,254],{"class":51},[45,64310,59787],{"class":313},[45,64312,61138],{"class":2046},[45,64314,254],{"class":51},[45,64316,64317],{"class":313},"\"javascript:;\"",[45,64319,64320],{"class":51},">精选\u003C\u002F",[45,64322,13],{"class":51381},[45,64324,55395],{"class":51},[45,64326,162],{"class":51381},[45,64328,51388],{"class":51},[45,64330,64331,64333,64335,64337,64339,64341,64343,64345,64348,64350,64352,64354],{"class":47,"line":16852},[45,64332,55383],{"class":51},[45,64334,162],{"class":51381},[45,64336,61133],{"class":51},[45,64338,13],{"class":51381},[45,64340,61138],{"class":2046},[45,64342,254],{"class":51},[45,64344,64317],{"class":313},[45,64346,64347],{"class":51},">美食\u003C\u002F",[45,64349,13],{"class":51381},[45,64351,55395],{"class":51},[45,64353,162],{"class":51381},[45,64355,51388],{"class":51},[45,64357,64358,64360,64362,64364,64366,64368,64370,64372,64375,64377,64379,64381],{"class":47,"line":16866},[45,64359,55383],{"class":51},[45,64361,162],{"class":51381},[45,64363,61133],{"class":51},[45,64365,13],{"class":51381},[45,64367,61138],{"class":2046},[45,64369,254],{"class":51},[45,64371,64317],{"class":313},[45,64373,64374],{"class":51},">百货\u003C\u002F",[45,64376,13],{"class":51381},[45,64378,55395],{"class":51},[45,64380,162],{"class":51381},[45,64382,51388],{"class":51},[45,64384,64385,64387,64389,64391,64393,64395,64397,64399,64402,64404,64406,64408],{"class":47,"line":16879},[45,64386,55383],{"class":51},[45,64388,162],{"class":51381},[45,64390,61133],{"class":51},[45,64392,13],{"class":51381},[45,64394,61138],{"class":2046},[45,64396,254],{"class":51},[45,64398,64317],{"class":313},[45,64400,64401],{"class":51},">个护\u003C\u002F",[45,64403,13],{"class":51381},[45,64405,55395],{"class":51},[45,64407,162],{"class":51381},[45,64409,51388],{"class":51},[45,64411,64412,64414,64416,64418,64420,64422,64424,64426,64429,64431,64433,64435],{"class":47,"line":16884},[45,64413,55383],{"class":51},[45,64415,162],{"class":51381},[45,64417,61133],{"class":51},[45,64419,13],{"class":51381},[45,64421,61138],{"class":2046},[45,64423,254],{"class":51},[45,64425,64317],{"class":313},[45,64427,64428],{"class":51},">预告\u003C\u002F",[45,64430,13],{"class":51381},[45,64432,55395],{"class":51},[45,64434,162],{"class":51381},[45,64436,51388],{"class":51},[45,64438,64439,64441,64443],{"class":47,"line":16898},[45,64440,55488],{"class":51},[45,64442,1214],{"class":51381},[45,64444,51388],{"class":51},[45,64446,64447,64449,64451],{"class":47,"line":16903},[45,64448,51857],{"class":51},[45,64450,51692],{"class":51381},[45,64452,51388],{"class":51},[45,64454,64455,64457,64459,64461,64463,64466],{"class":47,"line":16909},[45,64456,51422],{"class":51},[45,64458,51692],{"class":51381},[45,64460,53567],{"class":2046},[45,64462,254],{"class":51},[45,64464,64465],{"class":313},"\"tab-content\"",[45,64467,51388],{"class":51},[45,64469,64470,64472,64474,64476,64478,64481,64483,64485,64487,64489,64492,64494,64496,64498,64501,64503],{"class":47,"line":16914},[45,64471,55315],{"class":51},[45,64473,51692],{"class":51381},[45,64475,53567],{"class":2046},[45,64477,254],{"class":51},[45,64479,64480],{"class":313},"\"item active\"",[45,64482,61133],{"class":51},[45,64484,1545],{"class":51381},[45,64486,55320],{"class":2046},[45,64488,254],{"class":51},[45,64490,64491],{"class":313},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[45,64493,55328],{"class":2046},[45,64495,254],{"class":51},[45,64497,7735],{"class":313},[45,64499,64500],{"class":51}," \u002F>\u003C\u002F",[45,64502,51692],{"class":51381},[45,64504,51388],{"class":51},[45,64506,64507,64509,64511,64513,64515,64517,64519,64521,64523,64525,64528,64530,64532,64534,64536,64538],{"class":47,"line":16928},[45,64508,55315],{"class":51},[45,64510,51692],{"class":51381},[45,64512,53567],{"class":2046},[45,64514,254],{"class":51},[45,64516,62704],{"class":313},[45,64518,61133],{"class":51},[45,64520,1545],{"class":51381},[45,64522,55320],{"class":2046},[45,64524,254],{"class":51},[45,64526,64527],{"class":313},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[45,64529,55328],{"class":2046},[45,64531,254],{"class":51},[45,64533,7735],{"class":313},[45,64535,64500],{"class":51},[45,64537,51692],{"class":51381},[45,64539,51388],{"class":51},[45,64541,64542,64544,64546,64548,64550,64552,64554,64556,64558,64560,64563,64565,64567,64569,64571,64573],{"class":47,"line":16933},[45,64543,55315],{"class":51},[45,64545,51692],{"class":51381},[45,64547,53567],{"class":2046},[45,64549,254],{"class":51},[45,64551,62704],{"class":313},[45,64553,61133],{"class":51},[45,64555,1545],{"class":51381},[45,64557,55320],{"class":2046},[45,64559,254],{"class":51},[45,64561,64562],{"class":313},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[45,64564,55328],{"class":2046},[45,64566,254],{"class":51},[45,64568,7735],{"class":313},[45,64570,64500],{"class":51},[45,64572,51692],{"class":51381},[45,64574,51388],{"class":51},[45,64576,64577,64579,64581,64583,64585,64587,64589,64591,64593,64595,64598,64600,64602,64604,64606,64608],{"class":47,"line":16938},[45,64578,55315],{"class":51},[45,64580,51692],{"class":51381},[45,64582,53567],{"class":2046},[45,64584,254],{"class":51},[45,64586,62704],{"class":313},[45,64588,61133],{"class":51},[45,64590,1545],{"class":51381},[45,64592,55320],{"class":2046},[45,64594,254],{"class":51},[45,64596,64597],{"class":313},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[45,64599,55328],{"class":2046},[45,64601,254],{"class":51},[45,64603,7735],{"class":313},[45,64605,64500],{"class":51},[45,64607,51692],{"class":51381},[45,64609,51388],{"class":51},[45,64611,64612,64614,64616,64618,64620,64622,64624,64626,64628,64630,64633,64635,64637,64639,64641,64643],{"class":47,"line":16952},[45,64613,55315],{"class":51},[45,64615,51692],{"class":51381},[45,64617,53567],{"class":2046},[45,64619,254],{"class":51},[45,64621,62704],{"class":313},[45,64623,61133],{"class":51},[45,64625,1545],{"class":51381},[45,64627,55320],{"class":2046},[45,64629,254],{"class":51},[45,64631,64632],{"class":313},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[45,64634,55328],{"class":2046},[45,64636,254],{"class":51},[45,64638,7735],{"class":313},[45,64640,64500],{"class":51},[45,64642,51692],{"class":51381},[45,64644,51388],{"class":51},[45,64646,64647,64649,64651],{"class":47,"line":16964},[45,64648,51857],{"class":51},[45,64650,51692],{"class":51381},[45,64652,51388],{"class":51},[45,64654,64655,64657,64659],{"class":47,"line":16969},[45,64656,52498],{"class":51},[45,64658,51692],{"class":51381},[45,64660,51388],{"class":51},[45,64662,64663,64665,64667],{"class":47,"line":16982},[45,64664,52225],{"class":51},[45,64666,51894],{"class":51381},[45,64668,51388],{"class":51},[45,64670,64671],{"class":47,"line":16987},[45,64672,64673],{"class":267},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[45,64675,64676],{"class":47,"line":16992},[45,64677,64678],{"class":267},"    \u002F\u002F 1.1 获取 a 元素 \n",[45,64680,64681,64683,64686,64688,64690,64692,64694,64697],{"class":47,"line":16997},[45,64682,11304],{"class":93},[45,64684,64685],{"class":257}," as",[45,64687,13647],{"class":93},[45,64689,54477],{"class":51},[45,64691,55762],{"class":2046},[45,64693,209],{"class":51},[45,64695,64696],{"class":313},"'.tab-nav a'",[45,64698,215],{"class":51},[45,64700,64701],{"class":47,"line":17010},[45,64702,64703],{"class":267},"    \u002F\u002F console.log(as) \n",[45,64705,64706,64708,64710,64712,64714,64716,64718,64720,64722,64725,64727,64729,64731],{"class":47,"line":17015},[45,64707,3284],{"class":93},[45,64709,1741],{"class":51},[45,64711,51928],{"class":93},[45,64713,9521],{"class":51},[45,64715,254],{"class":93},[45,64717,4176],{"class":257},[45,64719,9528],{"class":51},[45,64721,1117],{"class":93},[45,64723,64724],{"class":51}," as.",[45,64726,52049],{"class":257},[45,64728,3297],{"class":51},[45,64730,2375],{"class":93},[45,64732,12525],{"class":51},[45,64734,64735],{"class":47,"line":32714},[45,64736,64737],{"class":267},"      \u002F\u002F console.log(as[i])\n",[45,64739,64740],{"class":47,"line":32720},[45,64741,64742],{"class":267},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[45,64744,64745,64748,64750,64752,64755,64757,64759],{"class":47,"line":32726},[45,64746,64747],{"class":51},"      as[i].",[45,64749,57894],{"class":2046},[45,64751,209],{"class":51},[45,64753,64754],{"class":313},"'mouseenter'",[45,64756,12518],{"class":51},[45,64758,54530],{"class":93},[45,64760,54533],{"class":51},[45,64762,64763],{"class":47,"line":32732},[45,64764,64765],{"class":267},"        \u002F\u002F console.log('鼠标经过')\n",[45,64767,64768],{"class":47,"line":32738},[45,64769,64770],{"class":267},"        \u002F\u002F 排他思想  \n",[45,64772,64773],{"class":47,"line":32749},[45,64774,64775],{"class":267},"        \u002F\u002F 干掉别人 移除类active\n",[45,64777,64778,64780,64782,64784,64787,64789,64791,64793,64796],{"class":47,"line":32755},[45,64779,52006],{"class":51},[45,64781,54480],{"class":2046},[45,64783,209],{"class":51},[45,64785,64786],{"class":313},"'.tab-nav .active'",[45,64788,57084],{"class":51},[45,64790,57087],{"class":2046},[45,64792,209],{"class":51},[45,64794,64795],{"class":313},"'active'",[45,64797,215],{"class":51},[45,64799,64800],{"class":47,"line":32775},[45,64801,64802],{"class":267},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[45,64804,64805,64808,64811,64813,64815,64817],{"class":47,"line":32781},[45,64806,64807],{"class":257},"        this",[45,64809,64810],{"class":51},".classList.",[45,64812,5417],{"class":2046},[45,64814,209],{"class":51},[45,64816,64795],{"class":313},[45,64818,215],{"class":51},[45,64820,64821],{"class":47,"line":32792},[45,64822,2483],{"emptyLinePlaceholder":133},[45,64824,64825],{"class":47,"line":32798},[45,64826,64827],{"class":267},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[45,64829,64830],{"class":47,"line":32804},[45,64831,64832],{"class":267},"        \u002F\u002F 干掉别人\n",[45,64834,64835,64837,64839,64841,64844,64846,64848,64850,64852],{"class":47,"line":32810},[45,64836,52006],{"class":51},[45,64838,54480],{"class":2046},[45,64840,209],{"class":51},[45,64842,64843],{"class":313},"'.tab-content .active'",[45,64845,57084],{"class":51},[45,64847,57087],{"class":2046},[45,64849,209],{"class":51},[45,64851,64795],{"class":313},[45,64853,215],{"class":51},[45,64855,64856],{"class":47,"line":32816},[45,64857,64858],{"class":267},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[45,64860,64861,64863,64865,64867,64870,64872,64874,64876,64878,64880,64882,64884,64886],{"class":47,"line":32822},[45,64862,52006],{"class":51},[45,64864,54480],{"class":2046},[45,64866,209],{"class":51},[45,64868,64869],{"class":313},"`.tab-content .item:nth-child(${",[45,64871,649],{"class":51},[45,64873,45647],{"class":93},[45,64875,25201],{"class":257},[45,64877,57113],{"class":313},[45,64879,57084],{"class":51},[45,64881,5417],{"class":2046},[45,64883,209],{"class":51},[45,64885,64795],{"class":313},[45,64887,215],{"class":51},[45,64889,64890],{"class":47,"line":32828},[45,64891,2483],{"emptyLinePlaceholder":133},[45,64893,64894],{"class":47,"line":32834},[45,64895,64896],{"class":51},"      })\n",[45,64898,64899],{"class":47,"line":32854},[45,64900,2270],{"class":51},[45,64902,64903,64905,64907],{"class":47,"line":32860},[45,64904,52498],{"class":51},[45,64906,51894],{"class":51381},[45,64908,51388],{"class":51},[45,64910,64911,64913,64915],{"class":47,"line":32876},[45,64912,51866],{"class":51},[45,64914,51881],{"class":51381},[45,64916,51388],{"class":51},[45,64918,64919],{"class":47,"line":32882},[45,64920,2483],{"emptyLinePlaceholder":133},[45,64922,64923,64925,64927],{"class":47,"line":32896},[45,64924,51866],{"class":51},[45,64926,50716],{"class":51381},[45,64928,51388],{"class":51},[10,64930,64931],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[10,64933,64934],{},"在监听事件中，this指向的就是他的调用者",[10,64936,64937],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[10,64939,53801],{},[10,64941,64942],{},"(function () {",[10,64944,64945],{},"const list = document.querySelector('.xtx-elevator-list')",[10,64947,64948],{},"list.addEventListener('click', function (e) {",[10,64950,64951],{},"if (e.target.tagName === 'A') {",[10,64953,64954],{},"\u002F\u002F 排他思想",[10,64956,64957],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[10,64959,64960],{},"const old = document.querySelector('.xtx-elevator-list .active')",[10,64962,64963],{},"\u002F\u002F console.log(old);",[10,64965,64966],{},"\u002F\u002F 判断",[10,64968,64969],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[10,64971,64972],{},"if (old) old.classList.remove('active')",[10,64974,64975],{},"e.target.classList.add('active')",[10,64977,1153],{},[10,64979,52545],{},[10,64981,64982],{},"})();",[176,64984,64986],{"id":64985},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[35,64988,64990],{"className":50714,"code":64989,"language":50716,"meta":40,"style":40},"\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",[42,64991,64992,65002,65006,65014,65018,65032,65046,65058,65066,65072,65082,65092,65096,65100,65107,65119,65130,65147,65160,65174,65184,65188,65192,65199,65210,65228,65238,65250,65254,65258,65265,65282,65293,65305,65309,65313,65320,65332,65336,65344,65352,65356,65364,65372,65380,65395,65439,65447,65460,65473,65486,65494,65502,65510,65538,65546,65558,65571,65584,65592,65600,65608,65634,65642,65655,65667,65680,65688,65696,65704,65730,65738,65751,65763,65776,65784,65792,65800,65805,65825,65830,65850,65855,65872,65877,65885,65890,65919,65932,65936,65940,65945,65949,65977,65982,65999,66004,66009,66014,66019,66045,66049,66053,66061,66069,66073],{"__ignoreMap":40},[45,64993,64994,64996,64998,65000],{"class":47,"line":48},[45,64995,51378],{"class":51},[45,64997,51382],{"class":51381},[45,64999,51385],{"class":2046},[45,65001,51388],{"class":51},[45,65003,65004],{"class":47,"line":125},[45,65005,2483],{"emptyLinePlaceholder":133},[45,65007,65008,65010,65012],{"class":47,"line":1262},[45,65009,1117],{"class":51},[45,65011,50716],{"class":51381},[45,65013,51388],{"class":51},[45,65015,65016],{"class":47,"line":1277},[45,65017,2483],{"emptyLinePlaceholder":133},[45,65019,65020,65022,65024,65026,65028,65030],{"class":47,"line":1283},[45,65021,1117],{"class":51},[45,65023,51415],{"class":51381},[45,65025,51397],{"class":2046},[45,65027,254],{"class":51},[45,65029,51402],{"class":313},[45,65031,51388],{"class":51},[45,65033,65034,65036,65038,65040,65042,65044],{"class":47,"line":1297},[45,65035,52225],{"class":51},[45,65037,51425],{"class":51381},[45,65039,51428],{"class":2046},[45,65041,254],{"class":51},[45,65043,51433],{"class":313},[45,65045,51388],{"class":51},[45,65047,65048,65050,65052,65054,65056],{"class":47,"line":1303},[45,65049,52225],{"class":51},[45,65051,51488],{"class":51381},[45,65053,55395],{"class":51},[45,65055,51488],{"class":51381},[45,65057,51388],{"class":51},[45,65059,65060,65062,65064],{"class":47,"line":1394},[45,65061,52225],{"class":51},[45,65063,121],{"class":51381},[45,65065,51388],{"class":51},[45,65067,65068,65070],{"class":47,"line":1400},[45,65069,6486],{"class":51381},[45,65071,15655],{"class":51},[45,65073,65074,65076,65078,65080],{"class":47,"line":1412},[45,65075,54787],{"class":257},[45,65077,51518],{"class":51},[45,65079,400],{"class":257},[45,65081,1373],{"class":51},[45,65083,65084,65086,65088,65090],{"class":47,"line":1695},[45,65085,54776],{"class":257},[45,65087,51518],{"class":51},[45,65089,400],{"class":257},[45,65091,1373],{"class":51},[45,65093,65094],{"class":47,"line":1700},[45,65095,2270],{"class":51},[45,65097,65098],{"class":47,"line":1706},[45,65099,2483],{"emptyLinePlaceholder":133},[45,65101,65102,65105],{"class":47,"line":1711},[45,65103,65104],{"class":51381},"    table",[45,65106,15655],{"class":51},[45,65108,65109,65112,65114,65117],{"class":47,"line":1725},[45,65110,65111],{"class":257},"      border-collapse",[45,65113,51518],{"class":51},[45,65115,65116],{"class":257},"collapse",[45,65118,1373],{"class":51},[45,65120,65121,65124,65126,65128],{"class":47,"line":1730},[45,65122,65123],{"class":257},"      border-spacing",[45,65125,51518],{"class":51},[45,65127,400],{"class":257},[45,65129,1373],{"class":51},[45,65131,65132,65134,65136,65138,65140,65142,65145],{"class":47,"line":1736},[45,65133,62058],{"class":257},[45,65135,51518],{"class":51},[45,65137,426],{"class":257},[45,65139,51573],{"class":93},[45,65141,51602],{"class":257},[45,65143,65144],{"class":257}," #c0c0c0",[45,65146,1373],{"class":51},[45,65148,65149,65151,65153,65156,65158],{"class":47,"line":1757},[45,65150,54852],{"class":257},[45,65152,51518],{"class":51},[45,65154,65155],{"class":257},"500",[45,65157,51573],{"class":93},[45,65159,1373],{"class":51},[45,65161,65162,65164,65166,65168,65170,65172],{"class":47,"line":1762},[45,65163,54787],{"class":257},[45,65165,51518],{"class":51},[45,65167,519],{"class":257},[45,65169,51573],{"class":93},[45,65171,51637],{"class":257},[45,65173,1373],{"class":51},[45,65175,65176,65178,65180,65182],{"class":47,"line":1776},[45,65177,57367],{"class":257},[45,65179,51518],{"class":51},[45,65181,51673],{"class":257},[45,65183,1373],{"class":51},[45,65185,65186],{"class":47,"line":1781},[45,65187,2270],{"class":51},[45,65189,65190],{"class":47,"line":1810},[45,65191,2483],{"emptyLinePlaceholder":133},[45,65193,65194,65197],{"class":47,"line":1815},[45,65195,65196],{"class":51381},"    th",[45,65198,15655],{"class":51},[45,65200,65201,65203,65205,65208],{"class":47,"line":1832},[45,65202,54965],{"class":257},[45,65204,51518],{"class":51},[45,65206,65207],{"class":257},"#09c",[45,65209,1373],{"class":51},[45,65211,65212,65215,65217,65219,65221,65223,65226],{"class":47,"line":1837},[45,65213,65214],{"class":257},"      font",[45,65216,51518],{"class":51},[45,65218,62420],{"class":257},[45,65220,64154],{"class":257},[45,65222,51573],{"class":93},[45,65224,65225],{"class":313}," \"微软雅黑\"",[45,65227,1373],{"class":51},[45,65229,65230,65232,65234,65236],{"class":47,"line":1842},[45,65231,57497],{"class":257},[45,65233,51518],{"class":51},[45,65235,60923],{"class":257},[45,65237,1373],{"class":51},[45,65239,65240,65242,65244,65246,65248],{"class":47,"line":1847},[45,65241,54866],{"class":257},[45,65243,51518],{"class":51},[45,65245,1007],{"class":257},[45,65247,51573],{"class":93},[45,65249,1373],{"class":51},[45,65251,65252],{"class":47,"line":1861},[45,65253,2270],{"class":51},[45,65255,65256],{"class":47,"line":1866},[45,65257,2483],{"emptyLinePlaceholder":133},[45,65259,65260,65263],{"class":47,"line":2660},[45,65261,65262],{"class":51381},"    td",[45,65264,15655],{"class":51},[45,65266,65267,65269,65271,65273,65275,65277,65280],{"class":47,"line":2674},[45,65268,62058],{"class":257},[45,65270,51518],{"class":51},[45,65272,426],{"class":257},[45,65274,51573],{"class":93},[45,65276,51602],{"class":257},[45,65278,65279],{"class":257}," #d0d0d0",[45,65281,1373],{"class":51},[45,65283,65284,65286,65288,65291],{"class":47,"line":2682},[45,65285,57497],{"class":257},[45,65287,51518],{"class":51},[45,65289,65290],{"class":257},"#404060",[45,65292,1373],{"class":51},[45,65294,65295,65297,65299,65301,65303],{"class":47,"line":2687},[45,65296,54776],{"class":257},[45,65298,51518],{"class":51},[45,65300,654],{"class":257},[45,65302,51573],{"class":93},[45,65304,1373],{"class":51},[45,65306,65307],{"class":47,"line":2693},[45,65308,2270],{"class":51},[45,65310,65311],{"class":47,"line":2699},[45,65312,2483],{"emptyLinePlaceholder":133},[45,65314,65315,65318],{"class":47,"line":2704},[45,65316,65317],{"class":2046},"    .allCheck",[45,65319,15655],{"class":51},[45,65321,65322,65324,65326,65328,65330],{"class":47,"line":8031},[45,65323,54852],{"class":257},[45,65325,51518],{"class":51},[45,65327,819],{"class":257},[45,65329,51573],{"class":93},[45,65331,1373],{"class":51},[45,65333,65334],{"class":47,"line":8055},[45,65335,2270],{"class":51},[45,65337,65338,65340,65342],{"class":47,"line":8060},[45,65339,52498],{"class":51},[45,65341,121],{"class":51381},[45,65343,51388],{"class":51},[45,65345,65346,65348,65350],{"class":47,"line":8066},[45,65347,51866],{"class":51},[45,65349,51415],{"class":51381},[45,65351,51388],{"class":51},[45,65353,65354],{"class":47,"line":8093},[45,65355,2483],{"emptyLinePlaceholder":133},[45,65357,65358,65360,65362],{"class":47,"line":8098},[45,65359,1117],{"class":51},[45,65361,51881],{"class":51381},[45,65363,51388],{"class":51},[45,65365,65366,65368,65370],{"class":47,"line":8104},[45,65367,52225],{"class":51},[45,65369,346],{"class":51381},[45,65371,51388],{"class":51},[45,65373,65374,65376,65378],{"class":47,"line":8116},[45,65375,51422],{"class":51},[45,65377,352],{"class":51381},[45,65379,51388],{"class":51},[45,65381,65382,65384,65386,65388,65390,65393],{"class":47,"line":8128},[45,65383,55315],{"class":51},[45,65385,355],{"class":51381},[45,65387,53567],{"class":2046},[45,65389,254],{"class":51},[45,65391,65392],{"class":313},"\"allCheck\"",[45,65394,51388],{"class":51},[45,65396,65397,65399,65401,65403,65405,65407,65409,65411,65413,65415,65417,65420,65423,65425,65427,65429,65432,65435,65437],{"class":47,"line":8140},[45,65398,55383],{"class":51},[45,65400,53902],{"class":51381},[45,65402,53905],{"class":2046},[45,65404,254],{"class":51},[45,65406,53910],{"class":313},[45,65408,15003],{"class":2046},[45,65410,254],{"class":51},[45,65412,7735],{"class":313},[45,65414,15042],{"class":2046},[45,65416,254],{"class":51},[45,65418,65419],{"class":313},"\"checkAll\"",[45,65421,65422],{"class":51},"> \u003C",[45,65424,45],{"class":51381},[45,65426,53567],{"class":2046},[45,65428,254],{"class":51},[45,65430,65431],{"class":313},"\"all\"",[45,65433,65434],{"class":51},">全选\u003C\u002F",[45,65436,45],{"class":51381},[45,65438,51388],{"class":51},[45,65440,65441,65443,65445],{"class":47,"line":9799},[45,65442,55488],{"class":51},[45,65444,355],{"class":51381},[45,65446,51388],{"class":51},[45,65448,65449,65451,65453,65456,65458],{"class":47,"line":9824},[45,65450,55315],{"class":51},[45,65452,355],{"class":51381},[45,65454,65455],{"class":51},">商品\u003C\u002F",[45,65457,355],{"class":51381},[45,65459,51388],{"class":51},[45,65461,65462,65464,65466,65469,65471],{"class":47,"line":9847},[45,65463,55315],{"class":51},[45,65465,355],{"class":51381},[45,65467,65468],{"class":51},">商家\u003C\u002F",[45,65470,355],{"class":51381},[45,65472,51388],{"class":51},[45,65474,65475,65477,65479,65482,65484],{"class":47,"line":9871},[45,65476,55315],{"class":51},[45,65478,355],{"class":51381},[45,65480,65481],{"class":51},">价格\u003C\u002F",[45,65483,355],{"class":51381},[45,65485,51388],{"class":51},[45,65487,65488,65490,65492],{"class":47,"line":9876},[45,65489,51857],{"class":51},[45,65491,352],{"class":51381},[45,65493,51388],{"class":51},[45,65495,65496,65498,65500],{"class":47,"line":9881},[45,65497,51422],{"class":51},[45,65499,352],{"class":51381},[45,65501,51388],{"class":51},[45,65503,65504,65506,65508],{"class":47,"line":9886},[45,65505,55315],{"class":51},[45,65507,398],{"class":51381},[45,65509,51388],{"class":51},[45,65511,65512,65514,65516,65518,65520,65522,65524,65526,65529,65531,65533,65536],{"class":47,"line":9895},[45,65513,55383],{"class":51},[45,65515,53902],{"class":51381},[45,65517,53905],{"class":2046},[45,65519,254],{"class":51},[45,65521,53910],{"class":313},[45,65523,15003],{"class":2046},[45,65525,254],{"class":51},[45,65527,65528],{"class":313},"\"check\"",[45,65530,53567],{"class":2046},[45,65532,254],{"class":51},[45,65534,65535],{"class":313},"\"ck\"",[45,65537,51388],{"class":51},[45,65539,65540,65542,65544],{"class":47,"line":9900},[45,65541,55488],{"class":51},[45,65543,398],{"class":51381},[45,65545,51388],{"class":51},[45,65547,65548,65550,65552,65554,65556],{"class":47,"line":9906},[45,65549,55315],{"class":51},[45,65551,398],{"class":51381},[45,65553,61254],{"class":51},[45,65555,398],{"class":51381},[45,65557,51388],{"class":51},[45,65559,65560,65562,65564,65567,65569],{"class":47,"line":9927},[45,65561,55315],{"class":51},[45,65563,398],{"class":51381},[45,65565,65566],{"class":51},">小米\u003C\u002F",[45,65568,398],{"class":51381},[45,65570,51388],{"class":51},[45,65572,65573,65575,65577,65580,65582],{"class":47,"line":9933},[45,65574,55315],{"class":51},[45,65576,398],{"class":51381},[45,65578,65579],{"class":51},">￥1999\u003C\u002F",[45,65581,398],{"class":51381},[45,65583,51388],{"class":51},[45,65585,65586,65588,65590],{"class":47,"line":9947},[45,65587,51857],{"class":51},[45,65589,352],{"class":51381},[45,65591,51388],{"class":51},[45,65593,65594,65596,65598],{"class":47,"line":9953},[45,65595,51422],{"class":51},[45,65597,352],{"class":51381},[45,65599,51388],{"class":51},[45,65601,65602,65604,65606],{"class":47,"line":9980},[45,65603,55315],{"class":51},[45,65605,398],{"class":51381},[45,65607,51388],{"class":51},[45,65609,65610,65612,65614,65616,65618,65620,65622,65624,65626,65628,65630,65632],{"class":47,"line":9989},[45,65611,55383],{"class":51},[45,65613,53902],{"class":51381},[45,65615,53905],{"class":2046},[45,65617,254],{"class":51},[45,65619,53910],{"class":313},[45,65621,15003],{"class":2046},[45,65623,254],{"class":51},[45,65625,65528],{"class":313},[45,65627,53567],{"class":2046},[45,65629,254],{"class":51},[45,65631,65535],{"class":313},[45,65633,51388],{"class":51},[45,65635,65636,65638,65640],{"class":47,"line":9995},[45,65637,55488],{"class":51},[45,65639,398],{"class":51381},[45,65641,51388],{"class":51},[45,65643,65644,65646,65648,65651,65653],{"class":47,"line":10003},[45,65645,55315],{"class":51},[45,65647,398],{"class":51381},[45,65649,65650],{"class":51},">小米净水器\u003C\u002F",[45,65652,398],{"class":51381},[45,65654,51388],{"class":51},[45,65656,65657,65659,65661,65663,65665],{"class":47,"line":10008},[45,65658,55315],{"class":51},[45,65660,398],{"class":51381},[45,65662,65566],{"class":51},[45,65664,398],{"class":51381},[45,65666,51388],{"class":51},[45,65668,65669,65671,65673,65676,65678],{"class":47,"line":16687},[45,65670,55315],{"class":51},[45,65672,398],{"class":51381},[45,65674,65675],{"class":51},">￥4999\u003C\u002F",[45,65677,398],{"class":51381},[45,65679,51388],{"class":51},[45,65681,65682,65684,65686],{"class":47,"line":16693},[45,65683,51857],{"class":51},[45,65685,352],{"class":51381},[45,65687,51388],{"class":51},[45,65689,65690,65692,65694],{"class":47,"line":16716},[45,65691,51422],{"class":51},[45,65693,352],{"class":51381},[45,65695,51388],{"class":51},[45,65697,65698,65700,65702],{"class":47,"line":16722},[45,65699,55315],{"class":51},[45,65701,398],{"class":51381},[45,65703,51388],{"class":51},[45,65705,65706,65708,65710,65712,65714,65716,65718,65720,65722,65724,65726,65728],{"class":47,"line":16745},[45,65707,55383],{"class":51},[45,65709,53902],{"class":51381},[45,65711,53905],{"class":2046},[45,65713,254],{"class":51},[45,65715,53910],{"class":313},[45,65717,15003],{"class":2046},[45,65719,254],{"class":51},[45,65721,65528],{"class":313},[45,65723,53567],{"class":2046},[45,65725,254],{"class":51},[45,65727,65535],{"class":313},[45,65729,51388],{"class":51},[45,65731,65732,65734,65736],{"class":47,"line":16759},[45,65733,55488],{"class":51},[45,65735,398],{"class":51381},[45,65737,51388],{"class":51},[45,65739,65740,65742,65744,65747,65749],{"class":47,"line":16779},[45,65741,55315],{"class":51},[45,65743,398],{"class":51381},[45,65745,65746],{"class":51},">小米电视\u003C\u002F",[45,65748,398],{"class":51381},[45,65750,51388],{"class":51},[45,65752,65753,65755,65757,65759,65761],{"class":47,"line":16785},[45,65754,55315],{"class":51},[45,65756,398],{"class":51381},[45,65758,65566],{"class":51},[45,65760,398],{"class":51381},[45,65762,51388],{"class":51},[45,65764,65765,65767,65769,65772,65774],{"class":47,"line":16796},[45,65766,55315],{"class":51},[45,65768,398],{"class":51381},[45,65770,65771],{"class":51},">￥5999\u003C\u002F",[45,65773,398],{"class":51381},[45,65775,51388],{"class":51},[45,65777,65778,65780,65782],{"class":47,"line":16819},[45,65779,51857],{"class":51},[45,65781,352],{"class":51381},[45,65783,51388],{"class":51},[45,65785,65786,65788,65790],{"class":47,"line":16841},[45,65787,52498],{"class":51},[45,65789,346],{"class":51381},[45,65791,51388],{"class":51},[45,65793,65794,65796,65798],{"class":47,"line":16846},[45,65795,52225],{"class":51},[45,65797,51894],{"class":51381},[45,65799,51388],{"class":51},[45,65801,65802],{"class":47,"line":16852},[45,65803,65804],{"class":267},"    \u002F\u002F 1. 获取大复选框\n",[45,65806,65807,65809,65812,65814,65816,65818,65820,65823],{"class":47,"line":16866},[45,65808,11304],{"class":93},[45,65810,65811],{"class":257}," checkAll",[45,65813,13647],{"class":93},[45,65815,54477],{"class":51},[45,65817,54480],{"class":2046},[45,65819,209],{"class":51},[45,65821,65822],{"class":313},"'#checkAll'",[45,65824,215],{"class":51},[45,65826,65827],{"class":47,"line":16879},[45,65828,65829],{"class":267},"    \u002F\u002F 2. 获取所有的小复选框\n",[45,65831,65832,65834,65837,65839,65841,65843,65845,65848],{"class":47,"line":16884},[45,65833,11304],{"class":93},[45,65835,65836],{"class":257}," cks",[45,65838,13647],{"class":93},[45,65840,54477],{"class":51},[45,65842,55762],{"class":2046},[45,65844,209],{"class":51},[45,65846,65847],{"class":313},"'.ck'",[45,65849,215],{"class":51},[45,65851,65852],{"class":47,"line":16898},[45,65853,65854],{"class":267},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[45,65856,65857,65860,65862,65864,65866,65868,65870],{"class":47,"line":16903},[45,65858,65859],{"class":51},"    checkAll.",[45,65861,57894],{"class":2046},[45,65863,209],{"class":51},[45,65865,57899],{"class":313},[45,65867,12518],{"class":51},[45,65869,54530],{"class":93},[45,65871,54533],{"class":51},[45,65873,65874],{"class":47,"line":16909},[45,65875,65876],{"class":267},"      \u002F\u002F 得到当前大复选框的选中状态\n",[45,65878,65879,65882],{"class":47,"line":16914},[45,65880,65881],{"class":267},"      \u002F\u002F console.log(checkAll.checked)",[45,65883,65884],{"class":267},"  \u002F\u002F 得到 是 true 或者是 false\n",[45,65886,65887],{"class":47,"line":16928},[45,65888,65889],{"class":267},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[45,65891,65892,65894,65896,65898,65900,65902,65904,65906,65908,65911,65913,65915,65917],{"class":47,"line":16933},[45,65893,52365],{"class":93},[45,65895,1741],{"class":51},[45,65897,51928],{"class":93},[45,65899,9521],{"class":51},[45,65901,254],{"class":93},[45,65903,4176],{"class":257},[45,65905,9528],{"class":51},[45,65907,1117],{"class":93},[45,65909,65910],{"class":51}," cks.",[45,65912,52049],{"class":257},[45,65914,3297],{"class":51},[45,65916,2375],{"class":93},[45,65918,12525],{"class":51},[45,65920,65921,65924,65926,65929],{"class":47,"line":16938},[45,65922,65923],{"class":51},"        cks[i].checked ",[45,65925,254],{"class":93},[45,65927,65928],{"class":257}," this",[45,65930,65931],{"class":51},".checked\n",[45,65933,65934],{"class":47,"line":16952},[45,65935,52479],{"class":51},[45,65937,65938],{"class":47,"line":16964},[45,65939,33542],{"class":51},[45,65941,65942],{"class":47,"line":16969},[45,65943,65944],{"class":267},"    \u002F\u002F 5. 小复选框控制大复选框\n",[45,65946,65947],{"class":47,"line":16982},[45,65948,2483],{"emptyLinePlaceholder":133},[45,65950,65951,65953,65955,65957,65959,65961,65963,65965,65967,65969,65971,65973,65975],{"class":47,"line":16987},[45,65952,3284],{"class":93},[45,65954,1741],{"class":51},[45,65956,51928],{"class":93},[45,65958,9521],{"class":51},[45,65960,254],{"class":93},[45,65962,4176],{"class":257},[45,65964,9528],{"class":51},[45,65966,1117],{"class":93},[45,65968,65910],{"class":51},[45,65970,52049],{"class":257},[45,65972,3297],{"class":51},[45,65974,2375],{"class":93},[45,65976,12525],{"class":51},[45,65978,65979],{"class":47,"line":16992},[45,65980,65981],{"class":267},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[45,65983,65984,65987,65989,65991,65993,65995,65997],{"class":47,"line":16997},[45,65985,65986],{"class":51},"      cks[i].",[45,65988,57894],{"class":2046},[45,65990,209],{"class":51},[45,65992,57899],{"class":313},[45,65994,12518],{"class":51},[45,65996,54530],{"class":93},[45,65998,54533],{"class":51},[45,66000,66001],{"class":47,"line":17010},[45,66002,66003],{"class":267},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[45,66005,66006],{"class":47,"line":17015},[45,66007,66008],{"class":267},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[45,66010,66011],{"class":47,"line":32714},[45,66012,66013],{"class":267},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[45,66015,66016],{"class":47,"line":32720},[45,66017,66018],{"class":267},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[45,66020,66021,66024,66026,66028,66030,66032,66035,66037,66039,66041,66043],{"class":47,"line":32726},[45,66022,66023],{"class":51},"        checkAll.checked ",[45,66025,254],{"class":93},[45,66027,54477],{"class":51},[45,66029,55762],{"class":2046},[45,66031,209],{"class":51},[45,66033,66034],{"class":313},"'.ck:checked'",[45,66036,30907],{"class":51},[45,66038,52049],{"class":257},[45,66040,57987],{"class":93},[45,66042,65910],{"class":51},[45,66044,55912],{"class":257},[45,66046,66047],{"class":47,"line":32732},[45,66048,64896],{"class":51},[45,66050,66051],{"class":47,"line":32738},[45,66052,2270],{"class":51},[45,66054,66055,66057,66059],{"class":47,"line":32749},[45,66056,52498],{"class":51},[45,66058,51894],{"class":51381},[45,66060,51388],{"class":51},[45,66062,66063,66065,66067],{"class":47,"line":32755},[45,66064,51866],{"class":51},[45,66066,51881],{"class":51381},[45,66068,51388],{"class":51},[45,66070,66071],{"class":47,"line":32775},[45,66072,2483],{"emptyLinePlaceholder":133},[45,66074,66075,66077,66079],{"class":47,"line":32781},[45,66076,51866],{"class":51},[45,66078,50716],{"class":51381},[45,66080,51388],{"class":51},[10,66082,66083],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[10,66085,66086],{},"用好之间比较得到的布尔值！！！",[10,66088,66089,66090,66093,66094,1741,66097,791,66099,66102],{},"在 JS 里访问的时候，",[42,66091,66092],{},"checkbox.checked"," 是一个 ",[358,66095,66096],{},"布尔值",[42,66098,1445],{},[42,66100,66101],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[10,66104,66105,66106,66109,66110],{},"HTML 的 ",[42,66107,66108],{},"checked=\"checked\""," 只是 ",[358,66111,66112,66113,66116],{},"初始值；JS 的 ",[42,66114,66115],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[10,66118,66119],{},"：checked是一个伪类选择器",[10,66121,66122],{},[1545,66123],{"alt":40,"src":66124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[10,66126,66127,66130],{},[66128,66129],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[10,66132,66133],{},[1545,66134],{"alt":40,"src":66135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[30,66137,66139],{"id":66138},"_33-dom事件进阶","3.3 DOM事件进阶",[176,66141,66143],{"id":66142},"_331-事件流","3.3.1 事件流",[10,66145,66146],{},[1545,66147],{"alt":40,"src":66148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22081,66150,66152],{"id":66151},"_3311-事件捕获","3.3.1.1 事件捕获",[10,66154,66155],{},[1545,66156],{"alt":40,"src":66157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[35,66159,66161],{"className":50714,"code":66160,"language":50716,"meta":40,"style":40},"\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",[42,66162,66163,66173,66187,66191,66199,66213,66233,66245,66253,66260,66272,66284,66294,66298,66302,66309,66321,66333,66343,66347,66355,66363,66367,66375,66390,66409,66417,66425,66445,66465,66481,66492,66500,66517,66528,66536,66553,66564,66572,66580,66588,66592],{"__ignoreMap":40},[45,66164,66165,66167,66169,66171],{"class":47,"line":48},[45,66166,51378],{"class":51},[45,66168,51382],{"class":51381},[45,66170,51385],{"class":2046},[45,66172,51388],{"class":51},[45,66174,66175,66177,66179,66181,66183,66185],{"class":47,"line":125},[45,66176,1117],{"class":51},[45,66178,50716],{"class":51381},[45,66180,51397],{"class":2046},[45,66182,254],{"class":51},[45,66184,51402],{"class":313},[45,66186,51388],{"class":51},[45,66188,66189],{"class":47,"line":1262},[45,66190,2483],{"emptyLinePlaceholder":133},[45,66192,66193,66195,66197],{"class":47,"line":1277},[45,66194,1117],{"class":51},[45,66196,51415],{"class":51381},[45,66198,51388],{"class":51},[45,66200,66201,66203,66205,66207,66209,66211],{"class":47,"line":1283},[45,66202,52225],{"class":51},[45,66204,51425],{"class":51381},[45,66206,51428],{"class":2046},[45,66208,254],{"class":51},[45,66210,51433],{"class":313},[45,66212,51388],{"class":51},[45,66214,66215,66217,66219,66221,66223,66225,66227,66229,66231],{"class":47,"line":1297},[45,66216,52225],{"class":51},[45,66218,51425],{"class":51381},[45,66220,15003],{"class":2046},[45,66222,254],{"class":51},[45,66224,51472],{"class":313},[45,66226,51452],{"class":2046},[45,66228,254],{"class":51},[45,66230,51479],{"class":313},[45,66232,51388],{"class":51},[45,66234,66235,66237,66239,66241,66243],{"class":47,"line":1303},[45,66236,52225],{"class":51},[45,66238,51488],{"class":51381},[45,66240,51491],{"class":51},[45,66242,51488],{"class":51381},[45,66244,51388],{"class":51},[45,66246,66247,66249,66251],{"class":47,"line":1394},[45,66248,52225],{"class":51},[45,66250,121],{"class":51381},[45,66252,51388],{"class":51},[45,66254,66255,66258],{"class":47,"line":1400},[45,66256,66257],{"class":2046},"    .father",[45,66259,15655],{"class":51},[45,66261,66262,66264,66266,66268,66270],{"class":47,"line":1412},[45,66263,54852],{"class":257},[45,66265,51518],{"class":51},[45,66267,65155],{"class":257},[45,66269,51573],{"class":93},[45,66271,1373],{"class":51},[45,66273,66274,66276,66278,66280,66282],{"class":47,"line":1695},[45,66275,54866],{"class":257},[45,66277,51518],{"class":51},[45,66279,65155],{"class":257},[45,66281,51573],{"class":93},[45,66283,1373],{"class":51},[45,66285,66286,66288,66290,66292],{"class":47,"line":1700},[45,66287,54965],{"class":257},[45,66289,51518],{"class":51},[45,66291,51726],{"class":257},[45,66293,1373],{"class":51},[45,66295,66296],{"class":47,"line":1706},[45,66297,2270],{"class":51},[45,66299,66300],{"class":47,"line":1711},[45,66301,2483],{"emptyLinePlaceholder":133},[45,66303,66304,66307],{"class":47,"line":1725},[45,66305,66306],{"class":2046},"    .son",[45,66308,15655],{"class":51},[45,66310,66311,66313,66315,66317,66319],{"class":47,"line":1730},[45,66312,54852],{"class":257},[45,66314,51518],{"class":51},[45,66316,1805],{"class":257},[45,66318,51573],{"class":93},[45,66320,1373],{"class":51},[45,66322,66323,66325,66327,66329,66331],{"class":47,"line":1736},[45,66324,54866],{"class":257},[45,66326,51518],{"class":51},[45,66328,1805],{"class":257},[45,66330,51573],{"class":93},[45,66332,1373],{"class":51},[45,66334,66335,66337,66339,66341],{"class":47,"line":1757},[45,66336,54965],{"class":257},[45,66338,51518],{"class":51},[45,66340,54970],{"class":257},[45,66342,1373],{"class":51},[45,66344,66345],{"class":47,"line":1762},[45,66346,2270],{"class":51},[45,66348,66349,66351,66353],{"class":47,"line":1776},[45,66350,52498],{"class":51},[45,66352,121],{"class":51381},[45,66354,51388],{"class":51},[45,66356,66357,66359,66361],{"class":47,"line":1781},[45,66358,51866],{"class":51},[45,66360,51415],{"class":51381},[45,66362,51388],{"class":51},[45,66364,66365],{"class":47,"line":1810},[45,66366,2483],{"emptyLinePlaceholder":133},[45,66368,66369,66371,66373],{"class":47,"line":1815},[45,66370,1117],{"class":51},[45,66372,51881],{"class":51381},[45,66374,51388],{"class":51},[45,66376,66377,66379,66381,66383,66385,66388],{"class":47,"line":1832},[45,66378,52225],{"class":51},[45,66380,51692],{"class":51381},[45,66382,53567],{"class":2046},[45,66384,254],{"class":51},[45,66386,66387],{"class":313},"\"father\"",[45,66389,51388],{"class":51},[45,66391,66392,66394,66396,66398,66400,66403,66405,66407],{"class":47,"line":1837},[45,66393,51422],{"class":51},[45,66395,51692],{"class":51381},[45,66397,53567],{"class":2046},[45,66399,254],{"class":51},[45,66401,66402],{"class":313},"\"son\"",[45,66404,55395],{"class":51},[45,66406,51692],{"class":51381},[45,66408,51388],{"class":51},[45,66410,66411,66413,66415],{"class":47,"line":1842},[45,66412,52498],{"class":51},[45,66414,51692],{"class":51381},[45,66416,51388],{"class":51},[45,66418,66419,66421,66423],{"class":47,"line":1847},[45,66420,52225],{"class":51},[45,66422,51894],{"class":51381},[45,66424,51388],{"class":51},[45,66426,66427,66429,66432,66434,66436,66438,66440,66443],{"class":47,"line":1861},[45,66428,11304],{"class":93},[45,66430,66431],{"class":257}," fa",[45,66433,13647],{"class":93},[45,66435,54477],{"class":51},[45,66437,54480],{"class":2046},[45,66439,209],{"class":51},[45,66441,66442],{"class":313},"'.father'",[45,66444,215],{"class":51},[45,66446,66447,66449,66452,66454,66456,66458,66460,66463],{"class":47,"line":1866},[45,66448,11304],{"class":93},[45,66450,66451],{"class":257}," son",[45,66453,13647],{"class":93},[45,66455,54477],{"class":51},[45,66457,54480],{"class":2046},[45,66459,209],{"class":51},[45,66461,66462],{"class":313},"'.son'",[45,66464,215],{"class":51},[45,66466,66467,66469,66471,66473,66475,66477,66479],{"class":47,"line":2660},[45,66468,52488],{"class":51},[45,66470,57894],{"class":2046},[45,66472,209],{"class":51},[45,66474,57899],{"class":313},[45,66476,12518],{"class":51},[45,66478,54530],{"class":93},[45,66480,54533],{"class":51},[45,66482,66483,66485,66487,66490],{"class":47,"line":2674},[45,66484,59006],{"class":2046},[45,66486,209],{"class":51},[45,66488,66489],{"class":313},"'woshiu1'",[45,66491,215],{"class":51},[45,66493,66494,66496,66498],{"class":47,"line":2682},[45,66495,54616],{"class":51},[45,66497,1445],{"class":257},[45,66499,215],{"class":51},[45,66501,66502,66505,66507,66509,66511,66513,66515],{"class":47,"line":2687},[45,66503,66504],{"class":51},"    fa.",[45,66506,57894],{"class":2046},[45,66508,209],{"class":51},[45,66510,57899],{"class":313},[45,66512,12518],{"class":51},[45,66514,54530],{"class":93},[45,66516,54533],{"class":51},[45,66518,66519,66521,66523,66526],{"class":47,"line":2693},[45,66520,59006],{"class":2046},[45,66522,209],{"class":51},[45,66524,66525],{"class":313},"'1'",[45,66527,215],{"class":51},[45,66529,66530,66532,66534],{"class":47,"line":2699},[45,66531,54616],{"class":51},[45,66533,1445],{"class":257},[45,66535,215],{"class":51},[45,66537,66538,66541,66543,66545,66547,66549,66551],{"class":47,"line":2704},[45,66539,66540],{"class":51},"    son.",[45,66542,57894],{"class":2046},[45,66544,209],{"class":51},[45,66546,57899],{"class":313},[45,66548,12518],{"class":51},[45,66550,54530],{"class":93},[45,66552,54533],{"class":51},[45,66554,66555,66557,66559,66562],{"class":47,"line":8031},[45,66556,59006],{"class":2046},[45,66558,209],{"class":51},[45,66560,66561],{"class":313},"'2'",[45,66563,215],{"class":51},[45,66565,66566,66568,66570],{"class":47,"line":8055},[45,66567,54616],{"class":51},[45,66569,1445],{"class":257},[45,66571,215],{"class":51},[45,66573,66574,66576,66578],{"class":47,"line":8060},[45,66575,52498],{"class":51},[45,66577,51894],{"class":51381},[45,66579,51388],{"class":51},[45,66581,66582,66584,66586],{"class":47,"line":8066},[45,66583,51866],{"class":51},[45,66585,51881],{"class":51381},[45,66587,51388],{"class":51},[45,66589,66590],{"class":47,"line":8093},[45,66591,2483],{"emptyLinePlaceholder":133},[45,66593,66594,66596,66598],{"class":47,"line":8098},[45,66595,51866],{"class":51},[45,66597,50716],{"class":51381},[45,66599,51388],{"class":51},[10,66601,66602],{},[1545,66603],{"alt":40,"src":66604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[10,66606,66607],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22081,66609,66611],{"id":66610},"_3312-事件冒泡","3.3.1.2 事件冒泡",[10,66613,66614],{},[1545,66615],{"alt":40,"src":66616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[10,66618,66619],{},"反着来",[10,66621,66622],{},"注意是同名事件，比如都是‘click’",[22081,66624,66626],{"id":66625},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[10,66628,66629],{},[1545,66630],{"alt":40,"src":66631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22081,66633,66635],{"id":66634},"_3314-解绑事件","3.3.1.4 解绑事件",[10,66637,66638],{},[1545,66639],{"alt":40,"src":66640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[10,66642,66643],{},[1545,66644],{"alt":40,"src":66645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22081,66647,66649],{"id":66648},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[159,66651,66652],{},[162,66653,66654],{},"事件类型的区别",[10,66656,66657],{},[1545,66658],{"alt":40,"src":66659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[10,66661,66662],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[159,66664,66665],{"start":125},[162,66666,66667],{},"注册事件的区别",[10,66669,66670],{},[1545,66671],{"alt":40,"src":66672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22081,66674,66676],{"id":66675},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[10,66678,66679],{},[1545,66680],{"alt":40,"src":66681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[10,66683,66684],{},[1545,66685],{"alt":40,"src":66686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[35,66688,66690],{"className":53148,"code":66689,"language":53150,"meta":40,"style":40},"\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",[42,66691,66692,66700,66717,66740,66748,66753,66758,66763,66767,66775,66783],{"__ignoreMap":40},[45,66693,66694,66696,66698],{"class":47,"line":48},[45,66695,1117],{"class":51},[45,66697,51881],{"class":51381},[45,66699,51388],{"class":51},[45,66701,66702,66704,66707,66710,66712,66715],{"class":47,"line":125},[45,66703,52225],{"class":51},[45,66705,66706],{"class":51381},"form",[45,66708,66709],{"class":2046}," action",[45,66711,254],{"class":51},[45,66713,66714],{"class":313},"\"http:\u002F\u002Fwww.itcast.cn\"",[45,66716,51388],{"class":51},[45,66718,66719,66721,66723,66725,66727,66730,66733,66735,66738],{"class":47,"line":1262},[45,66720,51422],{"class":51},[45,66722,53902],{"class":51381},[45,66724,53905],{"class":2046},[45,66726,254],{"class":51},[45,66728,66729],{"class":313},"\"submit\"",[45,66731,66732],{"class":2046}," value",[45,66734,254],{"class":51},[45,66736,66737],{"class":313},"\"免费注册\"",[45,66739,51388],{"class":51},[45,66741,66742,66744,66746],{"class":47,"line":1277},[45,66743,51422],{"class":51},[45,66745,51894],{"class":51381},[45,66747,51388],{"class":51},[45,66749,66750],{"class":47,"line":1283},[45,66751,66752],{"class":51},"      const form = document.querySelector('form')\n",[45,66754,66755],{"class":47,"line":1297},[45,66756,66757],{"class":51},"      form.addEventListener('submit', function (e) {\n",[45,66759,66760],{"class":47,"line":1303},[45,66761,66762],{"class":51},"        e.preventDefault()\n",[45,66764,66765],{"class":47,"line":1394},[45,66766,64896],{"class":51},[45,66768,66769,66771,66773],{"class":47,"line":1400},[45,66770,51857],{"class":51},[45,66772,51894],{"class":51381},[45,66774,51388],{"class":51},[45,66776,66777,66779,66781],{"class":47,"line":1412},[45,66778,52498],{"class":51},[45,66780,66706],{"class":51381},[45,66782,51388],{"class":51},[45,66784,66785,66787,66789],{"class":47,"line":1695},[45,66786,51866],{"class":51},[45,66788,51881],{"class":51381},[45,66790,51388],{"class":51},[10,66792,66793],{},"点击不在跳转！！！",[176,66795,66797],{"id":66796},"_332-事件委托","3.3.2 事件委托",[10,66799,66800],{},[1545,66801],{"alt":40,"src":66802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[35,66804,66806],{"className":50714,"code":66805,"language":50716,"meta":40,"style":40},"\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",[42,66807,66808,66818,66832,66836,66844,66858,66878,66890,66898,66902,66910,66918,66930,66942,66954,66966,66978,66991,66999,67007,67012,67031,67052,67057,67062,67067,67072,67081,67085,67095,67099,67104,67109,67123,67133,67137,67141,67149,67157,67161],{"__ignoreMap":40},[45,66809,66810,66812,66814,66816],{"class":47,"line":48},[45,66811,51378],{"class":51},[45,66813,51382],{"class":51381},[45,66815,51385],{"class":2046},[45,66817,51388],{"class":51},[45,66819,66820,66822,66824,66826,66828,66830],{"class":47,"line":125},[45,66821,1117],{"class":51},[45,66823,50716],{"class":51381},[45,66825,51397],{"class":2046},[45,66827,254],{"class":51},[45,66829,51402],{"class":313},[45,66831,51388],{"class":51},[45,66833,66834],{"class":47,"line":1262},[45,66835,2483],{"emptyLinePlaceholder":133},[45,66837,66838,66840,66842],{"class":47,"line":1277},[45,66839,1117],{"class":51},[45,66841,51415],{"class":51381},[45,66843,51388],{"class":51},[45,66845,66846,66848,66850,66852,66854,66856],{"class":47,"line":1283},[45,66847,52225],{"class":51},[45,66849,51425],{"class":51381},[45,66851,51428],{"class":2046},[45,66853,254],{"class":51},[45,66855,51433],{"class":313},[45,66857,51388],{"class":51},[45,66859,66860,66862,66864,66866,66868,66870,66872,66874,66876],{"class":47,"line":1297},[45,66861,52225],{"class":51},[45,66863,51425],{"class":51381},[45,66865,15003],{"class":2046},[45,66867,254],{"class":51},[45,66869,51472],{"class":313},[45,66871,51452],{"class":2046},[45,66873,254],{"class":51},[45,66875,51479],{"class":313},[45,66877,51388],{"class":51},[45,66879,66880,66882,66884,66886,66888],{"class":47,"line":1303},[45,66881,52225],{"class":51},[45,66883,51488],{"class":51381},[45,66885,51491],{"class":51},[45,66887,51488],{"class":51381},[45,66889,51388],{"class":51},[45,66891,66892,66894,66896],{"class":47,"line":1394},[45,66893,51866],{"class":51},[45,66895,51415],{"class":51381},[45,66897,51388],{"class":51},[45,66899,66900],{"class":47,"line":1400},[45,66901,2483],{"emptyLinePlaceholder":133},[45,66903,66904,66906,66908],{"class":47,"line":1412},[45,66905,1117],{"class":51},[45,66907,51881],{"class":51381},[45,66909,51388],{"class":51},[45,66911,66912,66914,66916],{"class":47,"line":1695},[45,66913,52225],{"class":51},[45,66915,1214],{"class":51381},[45,66917,51388],{"class":51},[45,66919,66920,66922,66924,66926,66928],{"class":47,"line":1700},[45,66921,51422],{"class":51},[45,66923,162],{"class":51381},[45,66925,54047],{"class":51},[45,66927,162],{"class":51381},[45,66929,51388],{"class":51},[45,66931,66932,66934,66936,66938,66940],{"class":47,"line":1706},[45,66933,51422],{"class":51},[45,66935,162],{"class":51381},[45,66937,54066],{"class":51},[45,66939,162],{"class":51381},[45,66941,51388],{"class":51},[45,66943,66944,66946,66948,66950,66952],{"class":47,"line":1711},[45,66945,51422],{"class":51},[45,66947,162],{"class":51381},[45,66949,54085],{"class":51},[45,66951,162],{"class":51381},[45,66953,51388],{"class":51},[45,66955,66956,66958,66960,66962,66964],{"class":47,"line":1725},[45,66957,51422],{"class":51},[45,66959,162],{"class":51381},[45,66961,54104],{"class":51},[45,66963,162],{"class":51381},[45,66965,51388],{"class":51},[45,66967,66968,66970,66972,66974,66976],{"class":47,"line":1730},[45,66969,51422],{"class":51},[45,66971,162],{"class":51381},[45,66973,54123],{"class":51},[45,66975,162],{"class":51381},[45,66977,51388],{"class":51},[45,66979,66980,66982,66984,66987,66989],{"class":47,"line":1736},[45,66981,51422],{"class":51},[45,66983,10],{"class":51381},[45,66985,66986],{"class":51},">我不需要变色\u003C\u002F",[45,66988,10],{"class":51381},[45,66990,51388],{"class":51},[45,66992,66993,66995,66997],{"class":47,"line":1757},[45,66994,52498],{"class":51},[45,66996,1214],{"class":51381},[45,66998,51388],{"class":51},[45,67000,67001,67003,67005],{"class":47,"line":1762},[45,67002,52225],{"class":51},[45,67004,51894],{"class":51381},[45,67006,51388],{"class":51},[45,67008,67009],{"class":47,"line":1776},[45,67010,67011],{"class":267},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[45,67013,67014,67016,67018,67020,67022,67024,67026,67029],{"class":47,"line":1781},[45,67015,11304],{"class":93},[45,67017,61373],{"class":257},[45,67019,13647],{"class":93},[45,67021,54477],{"class":51},[45,67023,54480],{"class":2046},[45,67025,209],{"class":51},[45,67027,67028],{"class":313},"'ul'",[45,67030,215],{"class":51},[45,67032,67033,67036,67038,67040,67042,67044,67046,67048,67050],{"class":47,"line":1810},[45,67034,67035],{"class":51},"    ul.",[45,67037,57894],{"class":2046},[45,67039,209],{"class":51},[45,67041,57899],{"class":313},[45,67043,12518],{"class":51},[45,67045,54530],{"class":93},[45,67047,1741],{"class":51},[45,67049,283],{"class":5299},[45,67051,12525],{"class":51},[45,67053,67054],{"class":47,"line":1815},[45,67055,67056],{"class":267},"      \u002F\u002F alert(1)\n",[45,67058,67059],{"class":47,"line":1832},[45,67060,67061],{"class":267},"      \u002F\u002F e.target就是我们点击的对象\n",[45,67063,67064],{"class":47,"line":1837},[45,67065,67066],{"class":267},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[45,67068,67069],{"class":47,"line":1842},[45,67070,67071],{"class":267},"      \u002F\u002F e.target.style.color = 'red'\n",[45,67073,67074,67076,67078],{"class":47,"line":1847},[45,67075,58325],{"class":51},[45,67077,58328],{"class":2046},[45,67079,67080],{"class":51},"(e)\n",[45,67082,67083],{"class":47,"line":1861},[45,67084,2483],{"emptyLinePlaceholder":133},[45,67086,67087,67089,67092],{"class":47,"line":1866},[45,67088,58325],{"class":51},[45,67090,67091],{"class":2046},"dir",[45,67093,67094],{"class":51},"(e.target)\n",[45,67096,67097],{"class":47,"line":2660},[45,67098,2483],{"emptyLinePlaceholder":133},[45,67100,67101],{"class":47,"line":2674},[45,67102,67103],{"class":267},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[45,67105,67106],{"class":47,"line":2682},[45,67107,67108],{"class":267},"      \u002F\u002F 通过tagName来进行判断\n",[45,67110,67111,67113,67116,67118,67121],{"class":47,"line":2687},[45,67112,54561],{"class":93},[45,67114,67115],{"class":51}," (e.target.tagName ",[45,67117,54567],{"class":93},[45,67119,67120],{"class":313}," 'LI'",[45,67122,12525],{"class":51},[45,67124,67125,67128,67130],{"class":47,"line":2693},[45,67126,67127],{"class":51},"        e.target.style.color ",[45,67129,254],{"class":93},[45,67131,67132],{"class":313}," 'red'\n",[45,67134,67135],{"class":47,"line":2699},[45,67136,52479],{"class":51},[45,67138,67139],{"class":47,"line":2704},[45,67140,33542],{"class":51},[45,67142,67143,67145,67147],{"class":47,"line":8031},[45,67144,52498],{"class":51},[45,67146,51894],{"class":51381},[45,67148,51388],{"class":51},[45,67150,67151,67153,67155],{"class":47,"line":8055},[45,67152,51866],{"class":51},[45,67154,51881],{"class":51381},[45,67156,51388],{"class":51},[45,67158,67159],{"class":47,"line":8060},[45,67160,2483],{"emptyLinePlaceholder":133},[45,67162,67163,67165,67167],{"class":47,"line":8066},[45,67164,51866],{"class":51},[45,67166,50716],{"class":51381},[45,67168,51388],{"class":51},[10,67170,67171],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[10,67173,67174],{},"if(e.target.ragName==='P') {}",[10,67176,67177],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[10,67179,67180],{},"通过事件委托的方式实现tab栏切换改造：",[10,67182,67183],{},"一定要记住自定义属性！！！！！！",[10,67185,67186],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[10,67188,67189],{},"id是自定义的属性名",[10,67191,67192],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[35,67194,67196],{"className":50714,"code":67195,"language":50716,"meta":40,"style":40},"\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",[42,67197,67198,67208,67222,67226,67234,67248,67268,67288,67300,67308,67314,67324,67334,67338,67342,67348,67360,67372,67384,67400,67404,67408,67414,67426,67438,67450,67460,67470,67474,67478,67486,67498,67508,67520,67524,67528,67536,67546,67556,67566,67570,67574,67584,67598,67610,67614,67618,67630,67640,67656,67666,67670,67674,67688,67698,67708,67712,67716,67722,67736,67740,67744,67752,67762,67766,67770,67779,67789,67793,67801,67809,67813,67821,67835,67849,67861,67869,67908,67940,67972,68004,68036,68044,68052,68066,68100,68134,68168,68202,68236,68244,68252,68260,68265,68270,68289,68294,68314,68322,68327,68340,68361,68374,68378,68383,68388,68401,68421,68449,68453,68457,68461,68469,68477,68481],{"__ignoreMap":40},[45,67199,67200,67202,67204,67206],{"class":47,"line":48},[45,67201,51378],{"class":51},[45,67203,51382],{"class":51381},[45,67205,51385],{"class":2046},[45,67207,51388],{"class":51},[45,67209,67210,67212,67214,67216,67218,67220],{"class":47,"line":125},[45,67211,1117],{"class":51},[45,67213,50716],{"class":51381},[45,67215,51397],{"class":2046},[45,67217,254],{"class":51},[45,67219,51402],{"class":313},[45,67221,51388],{"class":51},[45,67223,67224],{"class":47,"line":1262},[45,67225,2483],{"emptyLinePlaceholder":133},[45,67227,67228,67230,67232],{"class":47,"line":1277},[45,67229,1117],{"class":51},[45,67231,51415],{"class":51381},[45,67233,51388],{"class":51},[45,67235,67236,67238,67240,67242,67244,67246],{"class":47,"line":1283},[45,67237,52225],{"class":51},[45,67239,51425],{"class":51381},[45,67241,51428],{"class":2046},[45,67243,254],{"class":51},[45,67245,51433],{"class":313},[45,67247,59208],{"class":51},[45,67249,67250,67252,67254,67256,67258,67260,67262,67264,67266],{"class":47,"line":1297},[45,67251,52225],{"class":51},[45,67253,51425],{"class":51381},[45,67255,51444],{"class":2046},[45,67257,254],{"class":51},[45,67259,51449],{"class":313},[45,67261,51452],{"class":2046},[45,67263,254],{"class":51},[45,67265,51457],{"class":313},[45,67267,59208],{"class":51},[45,67269,67270,67272,67274,67276,67278,67280,67282,67284,67286],{"class":47,"line":1303},[45,67271,52225],{"class":51},[45,67273,51425],{"class":51381},[45,67275,15003],{"class":2046},[45,67277,254],{"class":51},[45,67279,51472],{"class":313},[45,67281,51452],{"class":2046},[45,67283,254],{"class":51},[45,67285,51479],{"class":313},[45,67287,59208],{"class":51},[45,67289,67290,67292,67294,67296,67298],{"class":47,"line":1394},[45,67291,52225],{"class":51},[45,67293,51488],{"class":51381},[45,67295,63706],{"class":51},[45,67297,51488],{"class":51381},[45,67299,51388],{"class":51},[45,67301,67302,67304,67306],{"class":47,"line":1400},[45,67303,52225],{"class":51},[45,67305,121],{"class":51381},[45,67307,51388],{"class":51},[45,67309,67310,67312],{"class":47,"line":1412},[45,67311,6486],{"class":51381},[45,67313,15655],{"class":51},[45,67315,67316,67318,67320,67322],{"class":47,"line":1695},[45,67317,54787],{"class":257},[45,67319,51518],{"class":51},[45,67321,400],{"class":257},[45,67323,1373],{"class":51},[45,67325,67326,67328,67330,67332],{"class":47,"line":1700},[45,67327,54776],{"class":257},[45,67329,51518],{"class":51},[45,67331,400],{"class":257},[45,67333,1373],{"class":51},[45,67335,67336],{"class":47,"line":1706},[45,67337,2270],{"class":51},[45,67339,67340],{"class":47,"line":1711},[45,67341,2483],{"emptyLinePlaceholder":133},[45,67343,67344,67346],{"class":47,"line":1725},[45,67345,63757],{"class":2046},[45,67347,15655],{"class":51},[45,67349,67350,67352,67354,67356,67358],{"class":47,"line":1730},[45,67351,54852],{"class":257},[45,67353,51518],{"class":51},[45,67355,63768],{"class":257},[45,67357,51573],{"class":93},[45,67359,1373],{"class":51},[45,67361,67362,67364,67366,67368,67370],{"class":47,"line":1736},[45,67363,54866],{"class":257},[45,67365,51518],{"class":51},[45,67367,63781],{"class":257},[45,67369,51573],{"class":93},[45,67371,1373],{"class":51},[45,67373,67374,67376,67378,67380,67382],{"class":47,"line":1757},[45,67375,54787],{"class":257},[45,67377,51518],{"class":51},[45,67379,907],{"class":257},[45,67381,51573],{"class":93},[45,67383,1373],{"class":51},[45,67385,67386,67388,67390,67392,67394,67396,67398],{"class":47,"line":1762},[45,67387,62058],{"class":257},[45,67389,51518],{"class":51},[45,67391,426],{"class":257},[45,67393,51573],{"class":93},[45,67395,51602],{"class":257},[45,67397,62325],{"class":257},[45,67399,1373],{"class":51},[45,67401,67402],{"class":47,"line":1776},[45,67403,2270],{"class":51},[45,67405,67406],{"class":47,"line":1781},[45,67407,2483],{"emptyLinePlaceholder":133},[45,67409,67410,67412],{"class":47,"line":1810},[45,67411,63826],{"class":2046},[45,67413,15655],{"class":51},[45,67415,67416,67418,67420,67422,67424],{"class":47,"line":1815},[45,67417,54852],{"class":257},[45,67419,51518],{"class":51},[45,67421,519],{"class":257},[45,67423,536],{"class":93},[45,67425,1373],{"class":51},[45,67427,67428,67430,67432,67434,67436],{"class":47,"line":1832},[45,67429,54866],{"class":257},[45,67431,51518],{"class":51},[45,67433,1114],{"class":257},[45,67435,51573],{"class":93},[45,67437,1373],{"class":51},[45,67439,67440,67442,67444,67446,67448],{"class":47,"line":1837},[45,67441,57440],{"class":257},[45,67443,51518],{"class":51},[45,67445,1114],{"class":257},[45,67447,51573],{"class":93},[45,67449,1373],{"class":51},[45,67451,67452,67454,67456,67458],{"class":47,"line":1842},[45,67453,55090],{"class":257},[45,67455,51518],{"class":51},[45,67457,51558],{"class":257},[45,67459,1373],{"class":51},[45,67461,67462,67464,67466,67468],{"class":47,"line":1847},[45,67463,55101],{"class":257},[45,67465,51518],{"class":51},[45,67467,51749],{"class":257},[45,67469,1373],{"class":51},[45,67471,67472],{"class":47,"line":1861},[45,67473,2270],{"class":51},[45,67475,67476],{"class":47,"line":1866},[45,67477,2483],{"emptyLinePlaceholder":133},[45,67479,67480,67482,67484],{"class":47,"line":2660},[45,67481,63826],{"class":2046},[45,67483,63899],{"class":51381},[45,67485,15655],{"class":51},[45,67487,67488,67490,67492,67494,67496],{"class":47,"line":2674},[45,67489,55003],{"class":257},[45,67491,51518],{"class":51},[45,67493,1007],{"class":257},[45,67495,51573],{"class":93},[45,67497,1373],{"class":51},[45,67499,67500,67502,67504,67506],{"class":47,"line":2682},[45,67501,62415],{"class":257},[45,67503,51518],{"class":51},[45,67505,63922],{"class":257},[45,67507,1373],{"class":51},[45,67509,67510,67512,67514,67516,67518],{"class":47,"line":2687},[45,67511,62081],{"class":257},[45,67513,51518],{"class":51},[45,67515,907],{"class":257},[45,67517,51573],{"class":93},[45,67519,1373],{"class":51},[45,67521,67522],{"class":47,"line":2693},[45,67523,2270],{"class":51},[45,67525,67526],{"class":47,"line":2699},[45,67527,2483],{"emptyLinePlaceholder":133},[45,67529,67530,67532,67534],{"class":47,"line":2704},[45,67531,63826],{"class":2046},[45,67533,61373],{"class":51381},[45,67535,15655],{"class":51},[45,67537,67538,67540,67542,67544],{"class":47,"line":8031},[45,67539,54813],{"class":257},[45,67541,51518],{"class":51},[45,67543,54818],{"class":257},[45,67545,1373],{"class":51},[45,67547,67548,67550,67552,67554],{"class":47,"line":8055},[45,67549,55090],{"class":257},[45,67551,51518],{"class":51},[45,67553,51558],{"class":257},[45,67555,1373],{"class":51},[45,67557,67558,67560,67562,67564],{"class":47,"line":8060},[45,67559,55101],{"class":257},[45,67561,51518],{"class":51},[45,67563,51661],{"class":257},[45,67565,1373],{"class":51},[45,67567,67568],{"class":47,"line":8066},[45,67569,2270],{"class":51},[45,67571,67572],{"class":47,"line":8093},[45,67573,2483],{"emptyLinePlaceholder":133},[45,67575,67576,67578,67580,67582],{"class":47,"line":8098},[45,67577,63826],{"class":2046},[45,67579,61373],{"class":51381},[45,67581,55156],{"class":51381},[45,67583,15655],{"class":51},[45,67585,67586,67588,67590,67592,67594,67596],{"class":47,"line":8104},[45,67587,54787],{"class":257},[45,67589,51518],{"class":51},[45,67591,400],{"class":257},[45,67593,9033],{"class":257},[45,67595,51573],{"class":93},[45,67597,1373],{"class":51},[45,67599,67600,67602,67604,67606,67608],{"class":47,"line":8116},[45,67601,55003],{"class":257},[45,67603,51518],{"class":51},[45,67605,756],{"class":257},[45,67607,51573],{"class":93},[45,67609,1373],{"class":51},[45,67611,67612],{"class":47,"line":8128},[45,67613,2270],{"class":51},[45,67615,67616],{"class":47,"line":8140},[45,67617,2483],{"emptyLinePlaceholder":133},[45,67619,67620,67622,67624,67626,67628],{"class":47,"line":9799},[45,67621,63826],{"class":2046},[45,67623,61373],{"class":51381},[45,67625,55156],{"class":51381},[45,67627,1481],{"class":51381},[45,67629,15655],{"class":51},[45,67631,67632,67634,67636,67638],{"class":47,"line":9824},[45,67633,64051],{"class":257},[45,67635,51518],{"class":51},[45,67637,54818],{"class":257},[45,67639,1373],{"class":51},[45,67641,67642,67644,67646,67648,67650,67652,67654],{"class":47,"line":9847},[45,67643,62313],{"class":257},[45,67645,51518],{"class":51},[45,67647,286],{"class":257},[45,67649,51573],{"class":93},[45,67651,51602],{"class":257},[45,67653,64072],{"class":257},[45,67655,1373],{"class":51},[45,67657,67658,67660,67662,67664],{"class":47,"line":9871},[45,67659,57497],{"class":257},[45,67661,51518],{"class":51},[45,67663,62450],{"class":257},[45,67665,1373],{"class":51},[45,67667,67668],{"class":47,"line":9876},[45,67669,2270],{"class":51},[45,67671,67672],{"class":47,"line":9881},[45,67673,2483],{"emptyLinePlaceholder":133},[45,67675,67676,67678,67680,67682,67684,67686],{"class":47,"line":9886},[45,67677,63826],{"class":2046},[45,67679,61373],{"class":51381},[45,67681,55156],{"class":51381},[45,67683,1481],{"class":51381},[45,67685,64105],{"class":2046},[45,67687,15655],{"class":51},[45,67689,67690,67692,67694,67696],{"class":47,"line":9895},[45,67691,61872],{"class":257},[45,67693,51518],{"class":51},[45,67695,64116],{"class":257},[45,67697,1373],{"class":51},[45,67699,67700,67702,67704,67706],{"class":47,"line":9900},[45,67701,57497],{"class":257},[45,67703,51518],{"class":51},[45,67705,64116],{"class":257},[45,67707,1373],{"class":51},[45,67709,67710],{"class":47,"line":9906},[45,67711,2270],{"class":51},[45,67713,67714],{"class":47,"line":9927},[45,67715,2483],{"emptyLinePlaceholder":133},[45,67717,67718,67720],{"class":47,"line":9933},[45,67719,64141],{"class":2046},[45,67721,15655],{"class":51},[45,67723,67724,67726,67728,67730,67732,67734],{"class":47,"line":9947},[45,67725,54776],{"class":257},[45,67727,51518],{"class":51},[45,67729,400],{"class":257},[45,67731,64154],{"class":257},[45,67733,51573],{"class":93},[45,67735,1373],{"class":51},[45,67737,67738],{"class":47,"line":9953},[45,67739,2270],{"class":51},[45,67741,67742],{"class":47,"line":9980},[45,67743,2483],{"emptyLinePlaceholder":133},[45,67745,67746,67748,67750],{"class":47,"line":9989},[45,67747,64141],{"class":2046},[45,67749,62255],{"class":2046},[45,67751,15655],{"class":51},[45,67753,67754,67756,67758,67760],{"class":47,"line":9995},[45,67755,55090],{"class":257},[45,67757,51518],{"class":51},[45,67759,54818],{"class":257},[45,67761,1373],{"class":51},[45,67763,67764],{"class":47,"line":10003},[45,67765,2270],{"class":51},[45,67767,67768],{"class":47,"line":10008},[45,67769,2483],{"emptyLinePlaceholder":133},[45,67771,67772,67774,67777],{"class":47,"line":16687},[45,67773,64141],{"class":2046},[45,67775,67776],{"class":2046}," .active",[45,67778,15655],{"class":51},[45,67780,67781,67783,67785,67787],{"class":47,"line":16693},[45,67782,55090],{"class":257},[45,67784,51518],{"class":51},[45,67786,60950],{"class":257},[45,67788,1373],{"class":51},[45,67790,67791],{"class":47,"line":16716},[45,67792,2270],{"class":51},[45,67794,67795,67797,67799],{"class":47,"line":16722},[45,67796,52498],{"class":51},[45,67798,121],{"class":51381},[45,67800,51388],{"class":51},[45,67802,67803,67805,67807],{"class":47,"line":16745},[45,67804,51866],{"class":51},[45,67806,51415],{"class":51381},[45,67808,51388],{"class":51},[45,67810,67811],{"class":47,"line":16759},[45,67812,2483],{"emptyLinePlaceholder":133},[45,67814,67815,67817,67819],{"class":47,"line":16779},[45,67816,1117],{"class":51},[45,67818,51881],{"class":51381},[45,67820,51388],{"class":51},[45,67822,67823,67825,67827,67829,67831,67833],{"class":47,"line":16785},[45,67824,52225],{"class":51},[45,67826,51692],{"class":51381},[45,67828,53567],{"class":2046},[45,67830,254],{"class":51},[45,67832,64256],{"class":313},[45,67834,51388],{"class":51},[45,67836,67837,67839,67841,67843,67845,67847],{"class":47,"line":16796},[45,67838,51422],{"class":51},[45,67840,51692],{"class":51381},[45,67842,53567],{"class":2046},[45,67844,254],{"class":51},[45,67846,64271],{"class":313},[45,67848,51388],{"class":51},[45,67850,67851,67853,67855,67857,67859],{"class":47,"line":16819},[45,67852,55315],{"class":51},[45,67854,176],{"class":51381},[45,67856,64282],{"class":51},[45,67858,176],{"class":51381},[45,67860,51388],{"class":51},[45,67862,67863,67865,67867],{"class":47,"line":16841},[45,67864,55315],{"class":51},[45,67866,1214],{"class":51381},[45,67868,51388],{"class":51},[45,67870,67871,67873,67875,67877,67879,67881,67883,67885,67887,67889,67891,67893,67895,67898,67900,67902,67904,67906],{"class":47,"line":16846},[45,67872,55383],{"class":51},[45,67874,162],{"class":51381},[45,67876,61133],{"class":51},[45,67878,13],{"class":51381},[45,67880,53567],{"class":2046},[45,67882,254],{"class":51},[45,67884,59787],{"class":313},[45,67886,61138],{"class":2046},[45,67888,254],{"class":51},[45,67890,64317],{"class":313},[45,67892,54032],{"class":2046},[45,67894,254],{"class":51},[45,67896,67897],{"class":313},"\"0\"",[45,67899,64320],{"class":51},[45,67901,13],{"class":51381},[45,67903,55395],{"class":51},[45,67905,162],{"class":51381},[45,67907,51388],{"class":51},[45,67909,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932,67934,67936,67938],{"class":47,"line":16852},[45,67911,55383],{"class":51},[45,67913,162],{"class":51381},[45,67915,61133],{"class":51},[45,67917,13],{"class":51381},[45,67919,61138],{"class":2046},[45,67921,254],{"class":51},[45,67923,64317],{"class":313},[45,67925,54032],{"class":2046},[45,67927,254],{"class":51},[45,67929,3761],{"class":313},[45,67931,64347],{"class":51},[45,67933,13],{"class":51381},[45,67935,55395],{"class":51},[45,67937,162],{"class":51381},[45,67939,51388],{"class":51},[45,67941,67942,67944,67946,67948,67950,67952,67954,67956,67958,67960,67962,67964,67966,67968,67970],{"class":47,"line":16866},[45,67943,55383],{"class":51},[45,67945,162],{"class":51381},[45,67947,61133],{"class":51},[45,67949,13],{"class":51381},[45,67951,61138],{"class":2046},[45,67953,254],{"class":51},[45,67955,64317],{"class":313},[45,67957,54032],{"class":2046},[45,67959,254],{"class":51},[45,67961,3784],{"class":313},[45,67963,64374],{"class":51},[45,67965,13],{"class":51381},[45,67967,55395],{"class":51},[45,67969,162],{"class":51381},[45,67971,51388],{"class":51},[45,67973,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002],{"class":47,"line":16879},[45,67975,55383],{"class":51},[45,67977,162],{"class":51381},[45,67979,61133],{"class":51},[45,67981,13],{"class":51381},[45,67983,61138],{"class":2046},[45,67985,254],{"class":51},[45,67987,64317],{"class":313},[45,67989,54032],{"class":2046},[45,67991,254],{"class":51},[45,67993,3797],{"class":313},[45,67995,64401],{"class":51},[45,67997,13],{"class":51381},[45,67999,55395],{"class":51},[45,68001,162],{"class":51381},[45,68003,51388],{"class":51},[45,68005,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034],{"class":47,"line":16884},[45,68007,55383],{"class":51},[45,68009,162],{"class":51381},[45,68011,61133],{"class":51},[45,68013,13],{"class":51381},[45,68015,61138],{"class":2046},[45,68017,254],{"class":51},[45,68019,64317],{"class":313},[45,68021,54032],{"class":2046},[45,68023,254],{"class":51},[45,68025,3810],{"class":313},[45,68027,64428],{"class":51},[45,68029,13],{"class":51381},[45,68031,55395],{"class":51},[45,68033,162],{"class":51381},[45,68035,51388],{"class":51},[45,68037,68038,68040,68042],{"class":47,"line":16898},[45,68039,55488],{"class":51},[45,68041,1214],{"class":51381},[45,68043,51388],{"class":51},[45,68045,68046,68048,68050],{"class":47,"line":16903},[45,68047,51857],{"class":51},[45,68049,51692],{"class":51381},[45,68051,51388],{"class":51},[45,68053,68054,68056,68058,68060,68062,68064],{"class":47,"line":16909},[45,68055,51422],{"class":51},[45,68057,51692],{"class":51381},[45,68059,53567],{"class":2046},[45,68061,254],{"class":51},[45,68063,64465],{"class":313},[45,68065,51388],{"class":51},[45,68067,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098],{"class":47,"line":16914},[45,68069,55315],{"class":51},[45,68071,51692],{"class":51381},[45,68073,53567],{"class":2046},[45,68075,254],{"class":51},[45,68077,64480],{"class":313},[45,68079,61133],{"class":51},[45,68081,1545],{"class":51381},[45,68083,55320],{"class":2046},[45,68085,254],{"class":51},[45,68087,64491],{"class":313},[45,68089,55328],{"class":2046},[45,68091,254],{"class":51},[45,68093,7735],{"class":313},[45,68095,64500],{"class":51},[45,68097,51692],{"class":51381},[45,68099,51388],{"class":51},[45,68101,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132],{"class":47,"line":16928},[45,68103,55315],{"class":51},[45,68105,51692],{"class":51381},[45,68107,53567],{"class":2046},[45,68109,254],{"class":51},[45,68111,62704],{"class":313},[45,68113,61133],{"class":51},[45,68115,1545],{"class":51381},[45,68117,55320],{"class":2046},[45,68119,254],{"class":51},[45,68121,64527],{"class":313},[45,68123,55328],{"class":2046},[45,68125,254],{"class":51},[45,68127,7735],{"class":313},[45,68129,64500],{"class":51},[45,68131,51692],{"class":51381},[45,68133,51388],{"class":51},[45,68135,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158,68160,68162,68164,68166],{"class":47,"line":16933},[45,68137,55315],{"class":51},[45,68139,51692],{"class":51381},[45,68141,53567],{"class":2046},[45,68143,254],{"class":51},[45,68145,62704],{"class":313},[45,68147,61133],{"class":51},[45,68149,1545],{"class":51381},[45,68151,55320],{"class":2046},[45,68153,254],{"class":51},[45,68155,64562],{"class":313},[45,68157,55328],{"class":2046},[45,68159,254],{"class":51},[45,68161,7735],{"class":313},[45,68163,64500],{"class":51},[45,68165,51692],{"class":51381},[45,68167,51388],{"class":51},[45,68169,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190,68192,68194,68196,68198,68200],{"class":47,"line":16938},[45,68171,55315],{"class":51},[45,68173,51692],{"class":51381},[45,68175,53567],{"class":2046},[45,68177,254],{"class":51},[45,68179,62704],{"class":313},[45,68181,61133],{"class":51},[45,68183,1545],{"class":51381},[45,68185,55320],{"class":2046},[45,68187,254],{"class":51},[45,68189,64597],{"class":313},[45,68191,55328],{"class":2046},[45,68193,254],{"class":51},[45,68195,7735],{"class":313},[45,68197,64500],{"class":51},[45,68199,51692],{"class":51381},[45,68201,51388],{"class":51},[45,68203,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222,68224,68226,68228,68230,68232,68234],{"class":47,"line":16952},[45,68205,55315],{"class":51},[45,68207,51692],{"class":51381},[45,68209,53567],{"class":2046},[45,68211,254],{"class":51},[45,68213,62704],{"class":313},[45,68215,61133],{"class":51},[45,68217,1545],{"class":51381},[45,68219,55320],{"class":2046},[45,68221,254],{"class":51},[45,68223,64632],{"class":313},[45,68225,55328],{"class":2046},[45,68227,254],{"class":51},[45,68229,7735],{"class":313},[45,68231,64500],{"class":51},[45,68233,51692],{"class":51381},[45,68235,51388],{"class":51},[45,68237,68238,68240,68242],{"class":47,"line":16964},[45,68239,51857],{"class":51},[45,68241,51692],{"class":51381},[45,68243,51388],{"class":51},[45,68245,68246,68248,68250],{"class":47,"line":16969},[45,68247,52498],{"class":51},[45,68249,51692],{"class":51381},[45,68251,51388],{"class":51},[45,68253,68254,68256,68258],{"class":47,"line":16982},[45,68255,52225],{"class":51},[45,68257,51894],{"class":51381},[45,68259,51388],{"class":51},[45,68261,68262],{"class":47,"line":16987},[45,68263,68264],{"class":267},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[45,68266,68267],{"class":47,"line":16992},[45,68268,68269],{"class":267},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[45,68271,68272,68274,68276,68278,68280,68282,68284,68287],{"class":47,"line":16997},[45,68273,11304],{"class":93},[45,68275,61373],{"class":257},[45,68277,13647],{"class":93},[45,68279,54477],{"class":51},[45,68281,54480],{"class":2046},[45,68283,209],{"class":51},[45,68285,68286],{"class":313},"'.tab-nav ul'",[45,68288,215],{"class":51},[45,68290,68291],{"class":47,"line":17010},[45,68292,68293],{"class":267},"    \u002F\u002F 2.添加事件\n",[45,68295,68296,68298,68300,68302,68304,68306,68308,68310,68312],{"class":47,"line":17015},[45,68297,67035],{"class":51},[45,68299,57894],{"class":2046},[45,68301,209],{"class":51},[45,68303,57899],{"class":313},[45,68305,12518],{"class":51},[45,68307,54530],{"class":93},[45,68309,1741],{"class":51},[45,68311,283],{"class":5299},[45,68313,12525],{"class":51},[45,68315,68316,68318,68320],{"class":47,"line":32714},[45,68317,58325],{"class":51},[45,68319,67091],{"class":2046},[45,68321,67094],{"class":51},[45,68323,68324],{"class":47,"line":32720},[45,68325,68326],{"class":267},"      \u002F\u002Fe.targer是我们点击的对象\n",[45,68328,68329,68331,68333,68335,68338],{"class":47,"line":32726},[45,68330,54561],{"class":93},[45,68332,67115],{"class":51},[45,68334,54567],{"class":93},[45,68336,68337],{"class":313}," 'A'",[45,68339,12525],{"class":51},[45,68341,68342,68344,68346,68348,68351,68353,68355,68357,68359],{"class":47,"line":32732},[45,68343,52006],{"class":51},[45,68345,54480],{"class":2046},[45,68347,209],{"class":51},[45,68349,68350],{"class":313},"'.active'",[45,68352,57084],{"class":51},[45,68354,57087],{"class":2046},[45,68356,209],{"class":51},[45,68358,64795],{"class":313},[45,68360,215],{"class":51},[45,68362,68363,68366,68368,68370,68372],{"class":47,"line":32738},[45,68364,68365],{"class":51},"        e.target.classList.",[45,68367,5417],{"class":2046},[45,68369,209],{"class":51},[45,68371,64795],{"class":313},[45,68373,215],{"class":51},[45,68375,68376],{"class":47,"line":32749},[45,68377,2483],{"emptyLinePlaceholder":133},[45,68379,68380],{"class":47,"line":32755},[45,68381,68382],{"class":267},"        \u002F\u002F 下面大盒子模块\n",[45,68384,68385],{"class":47,"line":32775},[45,68386,68387],{"class":267},"        \u002F\u002F console.log(e.target.dataset.id)\n",[45,68389,68390,68392,68394,68396,68398],{"class":47,"line":32781},[45,68391,61351],{"class":93},[45,68393,3115],{"class":257},[45,68395,13647],{"class":93},[45,68397,45647],{"class":93},[45,68399,68400],{"class":51},"e.target.dataset.id\n",[45,68402,68403,68405,68407,68409,68411,68413,68415,68417,68419],{"class":47,"line":32792},[45,68404,52006],{"class":51},[45,68406,54480],{"class":2046},[45,68408,209],{"class":51},[45,68410,64843],{"class":313},[45,68412,57084],{"class":51},[45,68414,57087],{"class":2046},[45,68416,209],{"class":51},[45,68418,64795],{"class":313},[45,68420,215],{"class":51},[45,68422,68423,68425,68427,68429,68431,68433,68435,68437,68439,68441,68443,68445,68447],{"class":47,"line":32798},[45,68424,52006],{"class":51},[45,68426,54480],{"class":2046},[45,68428,209],{"class":51},[45,68430,64869],{"class":313},[45,68432,649],{"class":51},[45,68434,45647],{"class":93},[45,68436,25201],{"class":257},[45,68438,57113],{"class":313},[45,68440,57084],{"class":51},[45,68442,5417],{"class":2046},[45,68444,209],{"class":51},[45,68446,64795],{"class":313},[45,68448,215],{"class":51},[45,68450,68451],{"class":47,"line":32804},[45,68452,2483],{"emptyLinePlaceholder":133},[45,68454,68455],{"class":47,"line":32810},[45,68456,52479],{"class":51},[45,68458,68459],{"class":47,"line":32816},[45,68460,33542],{"class":51},[45,68462,68463,68465,68467],{"class":47,"line":32822},[45,68464,52498],{"class":51},[45,68466,51894],{"class":51381},[45,68468,51388],{"class":51},[45,68470,68471,68473,68475],{"class":47,"line":32828},[45,68472,51866],{"class":51},[45,68474,51881],{"class":51381},[45,68476,51388],{"class":51},[45,68478,68479],{"class":47,"line":32834},[45,68480,2483],{"emptyLinePlaceholder":133},[45,68482,68483,68485,68487],{"class":47,"line":32854},[45,68484,51866],{"class":51},[45,68486,50716],{"class":51381},[45,68488,51388],{"class":51},[176,68490,68492],{"id":68491},"_333-页面加载事件","3.3.3 页面加载事件",[159,68494,68495],{},[162,68496,68497],{},"load",[10,68499,68500],{},[1545,68501],{"alt":40,"src":68502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[10,68504,68505],{},"window代表整个窗口，比document还要大",[10,68507,68508],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[10,68510,68511],{},"img.addEventListener('load', function () {",[10,68513,68514],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[10,68516,52545],{},[159,68518,68519],{"start":125},[162,68520,68521],{},"DOMContentLoaded",[10,68523,68524],{},[1545,68525],{"alt":40,"src":68526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[10,68528,68529],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[176,68531,68533],{"id":68532},"_334-元素滚动事件","3.3.4 元素滚动事件",[10,68535,68536],{},[1545,68537],{"alt":40,"src":68538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[10,68540,68541],{},[1545,68542],{"alt":40,"src":68543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[10,68545,68546],{},[1545,68547],{"alt":40,"src":68548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[10,68550,68551],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[10,68553,68554],{},"获得的是数字型数据，不带单位",[10,68556,68557],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[10,68559,68560],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[10,68562,68563],{},"它是通过document.documentElement来获取",[10,68565,68566],{},[1545,68567],{"alt":40,"src":68568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[10,68570,68571],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[176,68573,68575],{"id":68574},"_335-页面缩放事件","3.3.5 页面缩放事件",[10,68577,68578],{},[1545,68579],{"alt":40,"src":68580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[10,68582,68583],{},[1545,68584],{"alt":40,"src":68585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[176,68587,68589],{"id":68588},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[10,68591,68592],{},[1545,68593],{"alt":40,"src":68594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[10,68596,68597],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[10,68599,68600],{},[1545,68601],{"alt":40,"src":68602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[10,68604,68605],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[10,68607,68608],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[10,68610,68611],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[10,68613,68614],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[10,68616,68617],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[10,68619,68620],{},[1545,68621],{"alt":40,"src":68622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[10,68624,68625],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[10,68627,68628],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[10,68630,68631],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[10,68633,68634],{},"e.pageX-box.getBoundingClientRect()",[176,68636,68638],{"id":68637},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[10,68640,68641],{},[1545,68642],{"alt":40,"src":68643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[10,68645,68646],{},"这个是相对于视口来说的，它是个方法，不是属性值",[176,68648,68650],{"id":68649},"_338-总结","3.3.8 总结",[10,68652,68653],{},[1545,68654],{"alt":40,"src":68655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[10,68657,68658],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[10,68660,68661],{},"修改盒子的宽高只能通过width和height来实现",[176,68663,68665],{"id":68664},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[35,68667,68669],{"className":50714,"code":68668,"language":50716,"meta":40,"style":40},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[42,68670,68671,68676,68681,68686,68691],{"__ignoreMap":40},[45,68672,68673],{"class":47,"line":48},[45,68674,68675],{"class":51},"\u002F* 页面滑动 *\u002F\n",[45,68677,68678],{"class":47,"line":125},[45,68679,68680],{"class":51},"html {\n",[45,68682,68683],{"class":47,"line":1262},[45,68684,68685],{"class":51},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[45,68687,68688],{"class":47,"line":1277},[45,68689,68690],{"class":51},"  scroll-behavior: smooth;\n",[45,68692,68693],{"class":47,"line":1283},[45,68694,1648],{"class":51},[10,68696,68697],{},"默认是auto",[176,68699,68701],{"id":68700},"_3310-日期对象","3.3.10 日期对象",[22081,68703,68705],{"id":68704},"_33101-实例化","3.3.10.1 实例化",[10,68707,68708],{},[1545,68709],{"alt":40,"src":68710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22081,68712,68714],{"id":68713},"_33102-时期对象方法","3.3.10.2 时期对象方法",[10,68716,68717],{},[1545,68718],{"alt":40,"src":68719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[10,68721,68722],{},"月份+1",[10,68724,68725],{},"老外认为第一天为0，星期天",[10,68727,68728],{},"方法使用的时候必须要跟括号",[10,68730,68731],{},"快速获得日期",[10,68733,68734],{},"\u002F\u002F 得到年月日",[10,68736,68737],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[10,68739,68740],{},"\u002F\u002F 得到当地日期",[10,68742,68743],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[10,68745,68746],{},"\u002F\u002F 得到当地时间",[10,68748,68749],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[10,68751,68752],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[10,68754,68755],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51894,68757,68758],{},"\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",[10,68760,68761],{},"学会去封装函数！",[22081,68763,68765],{"id":68764},"_33103-时间戳","3.3.10.3 时间戳",[10,68767,68768],{},[1545,68769],{"alt":40,"src":68770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[10,68772,68773],{},[1545,68774],{"alt":40,"src":68775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[10,68777,68778],{},"三种方法记住一个就可以",[176,68780,68782],{"id":68781},"_3311-节点操作","3.3.11 节点操作",[22081,68784,68786],{"id":68785},"_33111-dom节点","3.3.11.1 DOM节点",[10,68788,68789],{},[1545,68790],{"alt":40,"src":68791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[10,68793,68794],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22081,68796,68798],{"id":68797},"_33112-查找节点","3.3.11.2 查找节点",[10,68800,68801],{},"前边的document.querySelector()是获取的元素",[10,68803,68804],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[10,68806,68807],{},[1545,68808],{"alt":40,"src":68809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[159,68811,68812],{},[162,68813,68814],{},"父节点",[10,68816,68817],{},[1545,68818],{"alt":40,"src":68819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[159,68821,68822],{"start":125},[162,68823,68824],{},"子节点",[10,68826,68827],{},[1545,68828],{"alt":40,"src":68829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[10,68831,68832],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[10,68834,68835],{},"children获得的是伪数组，是亲儿子",[159,68837,68838],{"start":1262},[162,68839,68840],{},"兄弟节点",[10,68842,68843],{},[1545,68844],{"alt":40,"src":68845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22081,68847,68849],{"id":68848},"_33113-增加节点","3.3.11.3 增加节点",[10,68851,68852],{},[1545,68853],{"alt":40,"src":68854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[10,68856,68857],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[10,68859,68860],{},[1545,68861],{"alt":40,"src":68862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[10,68864,68865],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[10,68867,68868],{},"下面是写法的部分展示，就按照下边的格式来写",[10,68870,68871],{},"例：",[51894,68873,68874],{},"\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",[10,68876,68877],{},[1545,68878],{"alt":40,"src":68879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[10,68881,68882],{},"false只克隆标签，里边的内容不会克隆过来",[35,68884,68886],{"className":50714,"code":68885,"language":50716,"meta":40,"style":40},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[42,68887,68888],{"__ignoreMap":40},[45,68889,68890],{"class":47,"line":48},[45,68891,68885],{"class":51},[22081,68893,68895],{"id":68894},"_33114-删除节点","3.3.11.4 删除节点",[10,68897,68898],{},[1545,68899],{"alt":40,"src":68900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[10,68902,68903],{},"父亲删儿子",[10,68905,68906],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[176,68908,68910],{"id":68909},"_3312-m端事件","3.3.12 M端事件",[10,68912,68913],{},"M端就是移动端",[10,68915,68916],{},[1545,68917],{"alt":40,"src":68918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[176,68920,68922],{"id":68921},"_3313-插件","3.3.13 插件",[10,68924,68925],{},"要熟悉官网！！！",[10,68927,68928],{},[13,68929,68930],{"href":68930,"rel":68931},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[17],[10,68933,68934],{},[13,68935,68936],{"href":68936,"rel":68937},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[17],[176,68939,68941],{"id":68940},"_3314-学生信息表","3.3.14 学生信息表",[159,68943,68944,68947,68950,68953,68956,68959,68962,68965],{},[162,68945,68946],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[162,68948,68949],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[162,68951,68952],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[162,68954,68955],{},"用好表单元素自带的属性，value,name等",[162,68957,68958],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[162,68960,68961],{},"不要忘记事件对象",[162,68963,68964],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[162,68966,68967],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[10,68969,68970],{},"结构：",[35,68972,68974],{"className":50714,"code":68973,"language":50716,"meta":40,"style":40},"\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",[42,68975,68976,68986,69000,69004,69012,69026,69046,69067,69080,69104,69112,69116,69124,69137,69158,69186,69214,69219,69241,69261,69280,69288,69316,69338,69358,69378,69398,69418,69438,69446,69466,69474,69478,69491,69499,69507,69515,69528,69541,69554,69567,69580,69593,69606,69614,69622,69630,69635,69640,69645,69650,69655,69660,69665,69670,69675,69680,69685,69690,69695,69703,69711,69719,69723,69743,69762,69782,69802,69822,69842,69846,69851,69871,69876,69886,69891,69896,69916,69938,69943,69953,69957,69961,69966,69971,70000,70014,70029,70033,70037,70041,70046,70057,70070,70075,70080,70085,70090,70095,70099,70104,70109,70118,70123,70128,70140,70145,70152,70156,70161,70171,70176,70186,70191,70219,70240,70250,70270,70288,70305,70322,70339,70356,70360,70370,70375,70380,70385,70396,70400,70404,70408,70413,70418,70439,70451,70456,70461,70466,70480,70485,70492,70496,70500,70508,70512,70520,70524],{"__ignoreMap":40},[45,68977,68978,68980,68982,68984],{"class":47,"line":48},[45,68979,51378],{"class":51},[45,68981,51382],{"class":51381},[45,68983,51385],{"class":2046},[45,68985,51388],{"class":51},[45,68987,68988,68990,68992,68994,68996,68998],{"class":47,"line":125},[45,68989,1117],{"class":51},[45,68991,50716],{"class":51381},[45,68993,51397],{"class":2046},[45,68995,254],{"class":51},[45,68997,51402],{"class":313},[45,68999,51388],{"class":51},[45,69001,69002],{"class":47,"line":1262},[45,69003,2483],{"emptyLinePlaceholder":133},[45,69005,69006,69008,69010],{"class":47,"line":1277},[45,69007,1117],{"class":51},[45,69009,51415],{"class":51381},[45,69011,51388],{"class":51},[45,69013,69014,69016,69018,69020,69022,69024],{"class":47,"line":1283},[45,69015,52225],{"class":51},[45,69017,51425],{"class":51381},[45,69019,51428],{"class":2046},[45,69021,254],{"class":51},[45,69023,51433],{"class":313},[45,69025,59208],{"class":51},[45,69027,69028,69030,69032,69034,69036,69038,69040,69042,69044],{"class":47,"line":1297},[45,69029,52225],{"class":51},[45,69031,51425],{"class":51381},[45,69033,15003],{"class":2046},[45,69035,254],{"class":51},[45,69037,51472],{"class":313},[45,69039,51452],{"class":2046},[45,69041,254],{"class":51},[45,69043,51479],{"class":313},[45,69045,59208],{"class":51},[45,69047,69048,69050,69052,69054,69056,69058,69060,69062,69065],{"class":47,"line":1303},[45,69049,52225],{"class":51},[45,69051,51425],{"class":51381},[45,69053,51444],{"class":2046},[45,69055,254],{"class":51},[45,69057,51449],{"class":313},[45,69059,51452],{"class":2046},[45,69061,254],{"class":51},[45,69063,69064],{"class":313},"\"ie=edge\"",[45,69066,59208],{"class":51},[45,69068,69069,69071,69073,69076,69078],{"class":47,"line":1394},[45,69070,52225],{"class":51},[45,69072,51488],{"class":51381},[45,69074,69075],{"class":51},">学生信息管理\u003C\u002F",[45,69077,51488],{"class":51381},[45,69079,51388],{"class":51},[45,69081,69082,69084,69087,69090,69092,69095,69097,69099,69102],{"class":47,"line":1400},[45,69083,52225],{"class":51},[45,69085,69086],{"class":51381},"link",[45,69088,69089],{"class":2046}," rel",[45,69091,254],{"class":51},[45,69093,69094],{"class":313},"\"stylesheet\"",[45,69096,61138],{"class":2046},[45,69098,254],{"class":51},[45,69100,69101],{"class":313},"\"css\u002Findex.css\"",[45,69103,59208],{"class":51},[45,69105,69106,69108,69110],{"class":47,"line":1412},[45,69107,51866],{"class":51},[45,69109,51415],{"class":51381},[45,69111,51388],{"class":51},[45,69113,69114],{"class":47,"line":1695},[45,69115,2483],{"emptyLinePlaceholder":133},[45,69117,69118,69120,69122],{"class":47,"line":1700},[45,69119,1117],{"class":51},[45,69121,51881],{"class":51381},[45,69123,51388],{"class":51},[45,69125,69126,69128,69130,69133,69135],{"class":47,"line":1706},[45,69127,52225],{"class":51},[45,69129,20],{"class":51381},[45,69131,69132],{"class":51},">新增学员\u003C\u002F",[45,69134,20],{"class":51381},[45,69136,51388],{"class":51},[45,69138,69139,69141,69143,69145,69147,69149,69152,69154,69156],{"class":47,"line":1711},[45,69140,52225],{"class":51},[45,69142,66706],{"class":51381},[45,69144,53567],{"class":2046},[45,69146,254],{"class":51},[45,69148,62745],{"class":313},[45,69150,69151],{"class":2046}," autocomplete",[45,69153,254],{"class":51},[45,69155,31857],{"class":313},[45,69157,51388],{"class":51},[45,69159,69160,69163,69165,69167,69169,69171,69173,69175,69178,69180,69182,69184],{"class":47,"line":1725},[45,69161,69162],{"class":51},"    姓名：\u003C",[45,69164,53902],{"class":51381},[45,69166,53905],{"class":2046},[45,69168,254],{"class":51},[45,69170,62780],{"class":313},[45,69172,53567],{"class":2046},[45,69174,254],{"class":51},[45,69176,69177],{"class":313},"\"uname\"",[45,69179,15003],{"class":2046},[45,69181,254],{"class":51},[45,69183,69177],{"class":313},[45,69185,59208],{"class":51},[45,69187,69188,69191,69193,69195,69197,69199,69201,69203,69206,69208,69210,69212],{"class":47,"line":1730},[45,69189,69190],{"class":51},"    年龄：\u003C",[45,69192,53902],{"class":51381},[45,69194,53905],{"class":2046},[45,69196,254],{"class":51},[45,69198,62780],{"class":313},[45,69200,53567],{"class":2046},[45,69202,254],{"class":51},[45,69204,69205],{"class":313},"\"age\"",[45,69207,15003],{"class":2046},[45,69209,254],{"class":51},[45,69211,69205],{"class":313},[45,69213,59208],{"class":51},[45,69215,69216],{"class":47,"line":1736},[45,69217,69218],{"class":51},"    性别:\n",[45,69220,69221,69223,69226,69228,69230,69233,69235,69237,69239],{"class":47,"line":1757},[45,69222,51422],{"class":51},[45,69224,69225],{"class":51381},"select",[45,69227,15003],{"class":2046},[45,69229,254],{"class":51},[45,69231,69232],{"class":313},"\"gender\"",[45,69234,53567],{"class":2046},[45,69236,254],{"class":51},[45,69238,69232],{"class":313},[45,69240,51388],{"class":51},[45,69242,69243,69245,69248,69250,69252,69254,69257,69259],{"class":47,"line":1762},[45,69244,55315],{"class":51},[45,69246,69247],{"class":51381},"option",[45,69249,66732],{"class":2046},[45,69251,254],{"class":51},[45,69253,10044],{"class":313},[45,69255,69256],{"class":51},">男\u003C\u002F",[45,69258,69247],{"class":51381},[45,69260,51388],{"class":51},[45,69262,69263,69265,69267,69269,69271,69273,69276,69278],{"class":47,"line":1776},[45,69264,55315],{"class":51},[45,69266,69247],{"class":51381},[45,69268,66732],{"class":2046},[45,69270,254],{"class":51},[45,69272,10113],{"class":313},[45,69274,69275],{"class":51},">女\u003C\u002F",[45,69277,69247],{"class":51381},[45,69279,51388],{"class":51},[45,69281,69282,69284,69286],{"class":47,"line":1781},[45,69283,51857],{"class":51},[45,69285,69225],{"class":51381},[45,69287,51388],{"class":51},[45,69289,69290,69293,69295,69297,69299,69301,69303,69305,69308,69310,69312,69314],{"class":47,"line":1810},[45,69291,69292],{"class":51},"    薪资：\u003C",[45,69294,53902],{"class":51381},[45,69296,53905],{"class":2046},[45,69298,254],{"class":51},[45,69300,62780],{"class":313},[45,69302,53567],{"class":2046},[45,69304,254],{"class":51},[45,69306,69307],{"class":313},"\"salary\"",[45,69309,15003],{"class":2046},[45,69311,254],{"class":51},[45,69313,69307],{"class":313},[45,69315,59208],{"class":51},[45,69317,69318,69321,69323,69325,69327,69330,69332,69334,69336],{"class":47,"line":1815},[45,69319,69320],{"class":51},"    就业城市：\u003C",[45,69322,69225],{"class":51381},[45,69324,15003],{"class":2046},[45,69326,254],{"class":51},[45,69328,69329],{"class":313},"\"city\"",[45,69331,53567],{"class":2046},[45,69333,254],{"class":51},[45,69335,69329],{"class":313},[45,69337,51388],{"class":51},[45,69339,69340,69342,69344,69346,69348,69351,69354,69356],{"class":47,"line":1832},[45,69341,55315],{"class":51},[45,69343,69247],{"class":51381},[45,69345,66732],{"class":2046},[45,69347,254],{"class":51},[45,69349,69350],{"class":313},"\"北京\"",[45,69352,69353],{"class":51},">北京\u003C\u002F",[45,69355,69247],{"class":51381},[45,69357,51388],{"class":51},[45,69359,69360,69362,69364,69366,69368,69371,69374,69376],{"class":47,"line":1837},[45,69361,55315],{"class":51},[45,69363,69247],{"class":51381},[45,69365,66732],{"class":2046},[45,69367,254],{"class":51},[45,69369,69370],{"class":313},"\"上海\"",[45,69372,69373],{"class":51},">上海\u003C\u002F",[45,69375,69247],{"class":51381},[45,69377,51388],{"class":51},[45,69379,69380,69382,69384,69386,69388,69391,69394,69396],{"class":47,"line":1842},[45,69381,55315],{"class":51},[45,69383,69247],{"class":51381},[45,69385,66732],{"class":2046},[45,69387,254],{"class":51},[45,69389,69390],{"class":313},"\"广州\"",[45,69392,69393],{"class":51},">广州\u003C\u002F",[45,69395,69247],{"class":51381},[45,69397,51388],{"class":51},[45,69399,69400,69402,69404,69406,69408,69411,69414,69416],{"class":47,"line":1847},[45,69401,55315],{"class":51},[45,69403,69247],{"class":51381},[45,69405,66732],{"class":2046},[45,69407,254],{"class":51},[45,69409,69410],{"class":313},"\"深圳\"",[45,69412,69413],{"class":51},">深圳\u003C\u002F",[45,69415,69247],{"class":51381},[45,69417,51388],{"class":51},[45,69419,69420,69422,69424,69426,69428,69431,69434,69436],{"class":47,"line":1861},[45,69421,55315],{"class":51},[45,69423,69247],{"class":51381},[45,69425,66732],{"class":2046},[45,69427,254],{"class":51},[45,69429,69430],{"class":313},"\"曹县\"",[45,69432,69433],{"class":51},">曹县\u003C\u002F",[45,69435,69247],{"class":51381},[45,69437,51388],{"class":51},[45,69439,69440,69442,69444],{"class":47,"line":1866},[45,69441,51857],{"class":51},[45,69443,69225],{"class":51381},[45,69445,51388],{"class":51},[45,69447,69448,69450,69452,69454,69456,69459,69462,69464],{"class":47,"line":2660},[45,69449,51422],{"class":51},[45,69451,53968],{"class":51381},[45,69453,53567],{"class":2046},[45,69455,254],{"class":51},[45,69457,69458],{"class":313},"\"add\"",[45,69460,69461],{"class":51},">录入\u003C\u002F",[45,69463,53968],{"class":51381},[45,69465,51388],{"class":51},[45,69467,69468,69470,69472],{"class":47,"line":2674},[45,69469,52498],{"class":51},[45,69471,66706],{"class":51381},[45,69473,51388],{"class":51},[45,69475,69476],{"class":47,"line":2682},[45,69477,2483],{"emptyLinePlaceholder":133},[45,69479,69480,69482,69484,69487,69489],{"class":47,"line":2687},[45,69481,52225],{"class":51},[45,69483,20],{"class":51381},[45,69485,69486],{"class":51},">就业榜\u003C\u002F",[45,69488,20],{"class":51381},[45,69490,51388],{"class":51},[45,69492,69493,69495,69497],{"class":47,"line":2693},[45,69494,52225],{"class":51},[45,69496,346],{"class":51381},[45,69498,51388],{"class":51},[45,69500,69501,69503,69505],{"class":47,"line":2699},[45,69502,51422],{"class":51},[45,69504,349],{"class":51381},[45,69506,51388],{"class":51},[45,69508,69509,69511,69513],{"class":47,"line":2704},[45,69510,55315],{"class":51},[45,69512,352],{"class":51381},[45,69514,51388],{"class":51},[45,69516,69517,69519,69521,69524,69526],{"class":47,"line":8031},[45,69518,55383],{"class":51},[45,69520,355],{"class":51381},[45,69522,69523],{"class":51},">序号\u003C\u002F",[45,69525,355],{"class":51381},[45,69527,51388],{"class":51},[45,69529,69530,69532,69534,69537,69539],{"class":47,"line":8055},[45,69531,55383],{"class":51},[45,69533,355],{"class":51381},[45,69535,69536],{"class":51},">姓名\u003C\u002F",[45,69538,355],{"class":51381},[45,69540,51388],{"class":51},[45,69542,69543,69545,69547,69550,69552],{"class":47,"line":8060},[45,69544,55383],{"class":51},[45,69546,355],{"class":51381},[45,69548,69549],{"class":51},">年龄\u003C\u002F",[45,69551,355],{"class":51381},[45,69553,51388],{"class":51},[45,69555,69556,69558,69560,69563,69565],{"class":47,"line":8066},[45,69557,55383],{"class":51},[45,69559,355],{"class":51381},[45,69561,69562],{"class":51},">性别\u003C\u002F",[45,69564,355],{"class":51381},[45,69566,51388],{"class":51},[45,69568,69569,69571,69573,69576,69578],{"class":47,"line":8093},[45,69570,55383],{"class":51},[45,69572,355],{"class":51381},[45,69574,69575],{"class":51},">薪资\u003C\u002F",[45,69577,355],{"class":51381},[45,69579,51388],{"class":51},[45,69581,69582,69584,69586,69589,69591],{"class":47,"line":8098},[45,69583,55383],{"class":51},[45,69585,355],{"class":51381},[45,69587,69588],{"class":51},">就业城市\u003C\u002F",[45,69590,355],{"class":51381},[45,69592,51388],{"class":51},[45,69594,69595,69597,69599,69602,69604],{"class":47,"line":8104},[45,69596,55383],{"class":51},[45,69598,355],{"class":51381},[45,69600,69601],{"class":51},">操作\u003C\u002F",[45,69603,355],{"class":51381},[45,69605,51388],{"class":51},[45,69607,69608,69610,69612],{"class":47,"line":8116},[45,69609,55488],{"class":51},[45,69611,352],{"class":51381},[45,69613,51388],{"class":51},[45,69615,69616,69618,69620],{"class":47,"line":8128},[45,69617,51857],{"class":51},[45,69619,349],{"class":51381},[45,69621,51388],{"class":51},[45,69623,69624,69626,69628],{"class":47,"line":8140},[45,69625,51422],{"class":51},[45,69627,393],{"class":51381},[45,69629,51388],{"class":51},[45,69631,69632],{"class":47,"line":9799},[45,69633,69634],{"class":267},"      \u003C!-- \n",[45,69636,69637],{"class":47,"line":9824},[45,69638,69639],{"class":267},"        \u003Ctr>\n",[45,69641,69642],{"class":47,"line":9847},[45,69643,69644],{"class":267},"          \u003Ctd>1001\u003C\u002Ftd>\n",[45,69646,69647],{"class":47,"line":9871},[45,69648,69649],{"class":267},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[45,69651,69652],{"class":47,"line":9876},[45,69653,69654],{"class":267},"          \u003Ctd>19\u003C\u002Ftd>\n",[45,69656,69657],{"class":47,"line":9881},[45,69658,69659],{"class":267},"          \u003Ctd>男\u003C\u002Ftd>\n",[45,69661,69662],{"class":47,"line":9886},[45,69663,69664],{"class":267},"          \u003Ctd>15000\u003C\u002Ftd>\n",[45,69666,69667],{"class":47,"line":9895},[45,69668,69669],{"class":267},"          \u003Ctd>上海\u003C\u002Ftd>\n",[45,69671,69672],{"class":47,"line":9900},[45,69673,69674],{"class":267},"          \u003Ctd>\n",[45,69676,69677],{"class":47,"line":9906},[45,69678,69679],{"class":267},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[45,69681,69682],{"class":47,"line":9927},[45,69683,69684],{"class":267},"          \u003C\u002Ftd>\n",[45,69686,69687],{"class":47,"line":9933},[45,69688,69689],{"class":267},"        \u003C\u002Ftr> \n",[45,69691,69692],{"class":47,"line":9947},[45,69693,69694],{"class":267},"        -->\n",[45,69696,69697,69699,69701],{"class":47,"line":9953},[45,69698,51857],{"class":51},[45,69700,393],{"class":51381},[45,69702,51388],{"class":51},[45,69704,69705,69707,69709],{"class":47,"line":9980},[45,69706,52498],{"class":51},[45,69708,346],{"class":51381},[45,69710,51388],{"class":51},[45,69712,69713,69715,69717],{"class":47,"line":9989},[45,69714,52225],{"class":51},[45,69716,51894],{"class":51381},[45,69718,51388],{"class":51},[45,69720,69721],{"class":47,"line":9995},[45,69722,60039],{"class":267},[45,69724,69725,69727,69730,69732,69734,69736,69738,69741],{"class":47,"line":10003},[45,69726,11304],{"class":93},[45,69728,69729],{"class":257}," uname",[45,69731,13647],{"class":93},[45,69733,54477],{"class":51},[45,69735,54480],{"class":2046},[45,69737,209],{"class":51},[45,69739,69740],{"class":313},"'.uname'",[45,69742,215],{"class":51},[45,69744,69745,69747,69749,69751,69753,69755,69757,69760],{"class":47,"line":10008},[45,69746,11304],{"class":93},[45,69748,15772],{"class":257},[45,69750,13647],{"class":93},[45,69752,54477],{"class":51},[45,69754,54480],{"class":2046},[45,69756,209],{"class":51},[45,69758,69759],{"class":313},"'.age'",[45,69761,215],{"class":51},[45,69763,69764,69766,69769,69771,69773,69775,69777,69780],{"class":47,"line":16687},[45,69765,11304],{"class":93},[45,69767,69768],{"class":257}," gender",[45,69770,13647],{"class":93},[45,69772,54477],{"class":51},[45,69774,54480],{"class":2046},[45,69776,209],{"class":51},[45,69778,69779],{"class":313},"'.gender'",[45,69781,215],{"class":51},[45,69783,69784,69786,69789,69791,69793,69795,69797,69800],{"class":47,"line":16693},[45,69785,11304],{"class":93},[45,69787,69788],{"class":257}," salary",[45,69790,13647],{"class":93},[45,69792,54477],{"class":51},[45,69794,54480],{"class":2046},[45,69796,209],{"class":51},[45,69798,69799],{"class":313},"'.salary'",[45,69801,215],{"class":51},[45,69803,69804,69806,69809,69811,69813,69815,69817,69820],{"class":47,"line":16716},[45,69805,11304],{"class":93},[45,69807,69808],{"class":257}," city",[45,69810,13647],{"class":93},[45,69812,54477],{"class":51},[45,69814,54480],{"class":2046},[45,69816,209],{"class":51},[45,69818,69819],{"class":313},"'.city'",[45,69821,215],{"class":51},[45,69823,69824,69826,69829,69831,69833,69835,69837,69840],{"class":47,"line":16722},[45,69825,11304],{"class":93},[45,69827,69828],{"class":257}," tbody",[45,69830,13647],{"class":93},[45,69832,54477],{"class":51},[45,69834,54480],{"class":2046},[45,69836,209],{"class":51},[45,69838,69839],{"class":313},"'tbody'",[45,69841,215],{"class":51},[45,69843,69844],{"class":47,"line":16745},[45,69845,2483],{"emptyLinePlaceholder":133},[45,69847,69848],{"class":47,"line":16759},[45,69849,69850],{"class":267},"    \u002F\u002F 获取所有带有name属性的元素\n",[45,69852,69853,69855,69858,69860,69862,69864,69866,69869],{"class":47,"line":16779},[45,69854,11304],{"class":93},[45,69856,69857],{"class":257}," items",[45,69859,13647],{"class":93},[45,69861,54477],{"class":51},[45,69863,55762],{"class":2046},[45,69865,209],{"class":51},[45,69867,69868],{"class":313},"'[name]'",[45,69870,215],{"class":51},[45,69872,69873],{"class":47,"line":16785},[45,69874,69875],{"class":267},"    \u002F\u002F 声明一个空的数组\n",[45,69877,69878,69880,69882,69884],{"class":47,"line":16796},[45,69879,11304],{"class":93},[45,69881,57776],{"class":257},[45,69883,13647],{"class":93},[45,69885,51919],{"class":51},[45,69887,69888],{"class":47,"line":16819},[45,69889,69890],{"class":267},"    \u002F\u002F 1.录入模块\n",[45,69892,69893],{"class":47,"line":16841},[45,69894,69895],{"class":267},"    \u002F\u002F 1.1这是一个表单提交事件\n",[45,69897,69898,69900,69903,69905,69907,69909,69911,69914],{"class":47,"line":16846},[45,69899,11304],{"class":93},[45,69901,69902],{"class":257}," info",[45,69904,13647],{"class":93},[45,69906,54477],{"class":51},[45,69908,54480],{"class":2046},[45,69910,209],{"class":51},[45,69912,69913],{"class":313},"'.info'",[45,69915,215],{"class":51},[45,69917,69918,69921,69923,69925,69928,69930,69932,69934,69936],{"class":47,"line":16852},[45,69919,69920],{"class":51},"    info.",[45,69922,57894],{"class":2046},[45,69924,209],{"class":51},[45,69926,69927],{"class":313},"'submit'",[45,69929,12518],{"class":51},[45,69931,54530],{"class":93},[45,69933,1741],{"class":51},[45,69935,283],{"class":5299},[45,69937,12525],{"class":51},[45,69939,69940],{"class":47,"line":16866},[45,69941,69942],{"class":267},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[45,69944,69945,69948,69951],{"class":47,"line":16879},[45,69946,69947],{"class":51},"      e.",[45,69949,69950],{"class":2046},"preventDefault",[45,69952,2059],{"class":51},[45,69954,69955],{"class":47,"line":16884},[45,69956,60093],{"class":267},[45,69958,69959],{"class":47,"line":16898},[45,69960,2483],{"emptyLinePlaceholder":133},[45,69962,69963],{"class":47,"line":16903},[45,69964,69965],{"class":267},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[45,69967,69968],{"class":47,"line":16909},[45,69969,69970],{"class":267},"      \u002F\u002F 先遍历循环\n",[45,69972,69973,69975,69977,69979,69981,69983,69985,69987,69989,69992,69994,69996,69998],{"class":47,"line":16914},[45,69974,52365],{"class":93},[45,69976,1741],{"class":51},[45,69978,51928],{"class":93},[45,69980,9521],{"class":51},[45,69982,254],{"class":93},[45,69984,4176],{"class":257},[45,69986,9528],{"class":51},[45,69988,1117],{"class":93},[45,69990,69991],{"class":51}," items.",[45,69993,52049],{"class":257},[45,69995,3297],{"class":51},[45,69997,2375],{"class":93},[45,69999,12525],{"class":51},[45,70001,70002,70004,70007,70009,70012],{"class":47,"line":16928},[45,70003,2580],{"class":93},[45,70005,70006],{"class":51}," (items[i].value ",[45,70008,54567],{"class":93},[45,70010,70011],{"class":313}," ''",[45,70013,12525],{"class":51},[45,70015,70016,70019,70022,70024,70027],{"class":47,"line":16933},[45,70017,70018],{"class":93},"          return",[45,70020,70021],{"class":2046}," alert",[45,70023,209],{"class":51},[45,70025,70026],{"class":313},"'输入内容不能为空'",[45,70028,215],{"class":51},[45,70030,70031],{"class":47,"line":16938},[45,70032,2612],{"class":51},[45,70034,70035],{"class":47,"line":16952},[45,70036,52479],{"class":51},[45,70038,70039],{"class":47,"line":16964},[45,70040,2483],{"emptyLinePlaceholder":133},[45,70042,70043],{"class":47,"line":16969},[45,70044,70045],{"class":267},"      \u002F\u002F 创建新的对象\n",[45,70047,70048,70050,70053,70055],{"class":47,"line":16982},[45,70049,58309],{"class":93},[45,70051,70052],{"class":257}," obj",[45,70054,13647],{"class":93},[45,70056,15655],{"class":51},[45,70058,70059,70062,70064,70066,70068],{"class":47,"line":16987},[45,70060,70061],{"class":51},"        stuID: arr.",[45,70063,52049],{"class":257},[45,70065,45647],{"class":93},[45,70067,25201],{"class":257},[45,70069,31547],{"class":51},[45,70071,70072],{"class":47,"line":16992},[45,70073,70074],{"class":51},"        uname: uname.value,\n",[45,70076,70077],{"class":47,"line":16997},[45,70078,70079],{"class":51},"        age: age.value,\n",[45,70081,70082],{"class":47,"line":17010},[45,70083,70084],{"class":51},"        gender: gender.value,\n",[45,70086,70087],{"class":47,"line":17015},[45,70088,70089],{"class":51},"        salary: salary.value,\n",[45,70091,70092],{"class":47,"line":32714},[45,70093,70094],{"class":51},"        city: city.value\n",[45,70096,70097],{"class":47,"line":32720},[45,70098,52479],{"class":51},[45,70100,70101],{"class":47,"line":32726},[45,70102,70103],{"class":267},"      \u002F\u002F console.log(obj);\n",[45,70105,70106],{"class":47,"line":32732},[45,70107,70108],{"class":267},"      \u002F\u002F 追加到数组里面\n",[45,70110,70111,70113,70115],{"class":47,"line":32738},[45,70112,58088],{"class":51},[45,70114,51965],{"class":2046},[45,70116,70117],{"class":51},"(obj)\n",[45,70119,70120],{"class":47,"line":32749},[45,70121,70122],{"class":267},"      \u002F\u002F console.log(arr);\n",[45,70124,70125],{"class":47,"line":32755},[45,70126,70127],{"class":267},"      \u002F\u002F 清空表单  reset重置表单\n",[45,70129,70130,70133,70135,70138],{"class":47,"line":32775},[45,70131,70132],{"class":257},"      this",[45,70134,765],{"class":51},[45,70136,70137],{"class":2046},"reset",[45,70139,2059],{"class":51},[45,70141,70142],{"class":47,"line":32781},[45,70143,70144],{"class":267},"      \u002F\u002F 调用渲染函数\n",[45,70146,70147,70150],{"class":47,"line":32792},[45,70148,70149],{"class":2046},"      render",[45,70151,2059],{"class":51},[45,70153,70154],{"class":47,"line":32798},[45,70155,33542],{"class":51},[45,70157,70158],{"class":47,"line":32804},[45,70159,70160],{"class":267},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[45,70162,70163,70166,70169],{"class":47,"line":32810},[45,70164,70165],{"class":93},"    function",[45,70167,70168],{"class":2046}," render",[45,70170,10936],{"class":51},[45,70172,70173],{"class":47,"line":32816},[45,70174,70175],{"class":267},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[45,70177,70178,70181,70183],{"class":47,"line":32822},[45,70179,70180],{"class":51},"      tbody.innerHTML ",[45,70182,254],{"class":93},[45,70184,70185],{"class":313}," ''\n",[45,70187,70188],{"class":47,"line":32828},[45,70189,70190],{"class":267},"      \u002F\u002F 遍历数组\n",[45,70192,70193,70195,70197,70199,70201,70203,70205,70207,70209,70211,70213,70215,70217],{"class":47,"line":32834},[45,70194,52365],{"class":93},[45,70196,1741],{"class":51},[45,70198,51928],{"class":93},[45,70200,9521],{"class":51},[45,70202,254],{"class":93},[45,70204,4176],{"class":257},[45,70206,9528],{"class":51},[45,70208,1117],{"class":93},[45,70210,52046],{"class":51},[45,70212,52049],{"class":257},[45,70214,3297],{"class":51},[45,70216,2375],{"class":93},[45,70218,12525],{"class":51},[45,70220,70221,70223,70226,70228,70230,70233,70235,70238],{"class":47,"line":32854},[45,70222,61351],{"class":93},[45,70224,70225],{"class":257}," tr",[45,70227,13647],{"class":93},[45,70229,54477],{"class":51},[45,70231,70232],{"class":2046},"createElement",[45,70234,209],{"class":51},[45,70236,70237],{"class":313},"'tr'",[45,70239,215],{"class":51},[45,70241,70242,70245,70247],{"class":47,"line":32860},[45,70243,70244],{"class":51},"        tr.innerHTML ",[45,70246,254],{"class":93},[45,70248,70249],{"class":313}," `\n",[45,70251,70252,70255,70257,70259,70261,70264,70267],{"class":47,"line":32876},[45,70253,70254],{"class":313},"        \u003Ctd>${",[45,70256,3963],{"class":51},[45,70258,1097],{"class":313},[45,70260,649],{"class":51},[45,70262,70263],{"class":313},"].",[45,70265,70266],{"class":51},"stuID",[45,70268,70269],{"class":313},"}\u003C\u002Ftd>\n",[45,70271,70272,70275,70277,70279,70281,70283,70286],{"class":47,"line":32882},[45,70273,70274],{"class":313},"          \u003Ctd>${",[45,70276,3963],{"class":51},[45,70278,1097],{"class":313},[45,70280,649],{"class":51},[45,70282,70263],{"class":313},[45,70284,70285],{"class":51},"uname",[45,70287,70269],{"class":313},[45,70289,70290,70292,70294,70296,70298,70300,70303],{"class":47,"line":32896},[45,70291,70274],{"class":313},[45,70293,3963],{"class":51},[45,70295,1097],{"class":313},[45,70297,649],{"class":51},[45,70299,70263],{"class":313},[45,70301,70302],{"class":51},"age",[45,70304,70269],{"class":313},[45,70306,70307,70309,70311,70313,70315,70317,70320],{"class":47,"line":32902},[45,70308,70274],{"class":313},[45,70310,3963],{"class":51},[45,70312,1097],{"class":313},[45,70314,649],{"class":51},[45,70316,70263],{"class":313},[45,70318,70319],{"class":51},"gender",[45,70321,70269],{"class":313},[45,70323,70324,70326,70328,70330,70332,70334,70337],{"class":47,"line":32917},[45,70325,70274],{"class":313},[45,70327,3963],{"class":51},[45,70329,1097],{"class":313},[45,70331,649],{"class":51},[45,70333,70263],{"class":313},[45,70335,70336],{"class":51},"salary",[45,70338,70269],{"class":313},[45,70340,70341,70343,70345,70347,70349,70351,70354],{"class":47,"line":32923},[45,70342,70274],{"class":313},[45,70344,3963],{"class":51},[45,70346,1097],{"class":313},[45,70348,649],{"class":51},[45,70350,70263],{"class":313},[45,70352,70353],{"class":51},"city",[45,70355,70269],{"class":313},[45,70357,70358],{"class":47,"line":32932},[45,70359,69674],{"class":313},[45,70361,70362,70365,70367],{"class":47,"line":32938},[45,70363,70364],{"class":313},"            \u003Ca href=\"javascript:\" data-id=${",[45,70366,649],{"class":51},[45,70368,70369],{"class":313},"}>删除\u003C\u002Fa>\n",[45,70371,70372],{"class":47,"line":32947},[45,70373,70374],{"class":313},"          \u003C\u002Ftd> \n",[45,70376,70377],{"class":47,"line":32953},[45,70378,70379],{"class":313},"          `\n",[45,70381,70382],{"class":47,"line":32959},[45,70383,70384],{"class":267},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[45,70386,70387,70390,70393],{"class":47,"line":32968},[45,70388,70389],{"class":51},"        tbody.",[45,70391,70392],{"class":2046},"appendChild",[45,70394,70395],{"class":51},"(tr)\n",[45,70397,70398],{"class":47,"line":32974},[45,70399,52479],{"class":51},[45,70401,70402],{"class":47,"line":32985},[45,70403,2270],{"class":51},[45,70405,70406],{"class":47,"line":32991},[45,70407,2483],{"emptyLinePlaceholder":133},[45,70409,70410],{"class":47,"line":33010},[45,70411,70412],{"class":267},"    \u002F\u002F 3.删除委托\n",[45,70414,70415],{"class":47,"line":33016},[45,70416,70417],{"class":267},"    \u002F\u002F 3.1 事件委托 tbody\n",[45,70419,70420,70423,70425,70427,70429,70431,70433,70435,70437],{"class":47,"line":33027},[45,70421,70422],{"class":51},"    tbody.",[45,70424,57894],{"class":2046},[45,70426,209],{"class":51},[45,70428,57899],{"class":313},[45,70430,12518],{"class":51},[45,70432,54530],{"class":93},[45,70434,1741],{"class":51},[45,70436,283],{"class":5299},[45,70438,12525],{"class":51},[45,70440,70441,70443,70445,70447,70449],{"class":47,"line":33033},[45,70442,54561],{"class":93},[45,70444,67115],{"class":51},[45,70446,54567],{"class":93},[45,70448,68337],{"class":313},[45,70450,12525],{"class":51},[45,70452,70453],{"class":47,"line":33053},[45,70454,70455],{"class":267},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[45,70457,70458],{"class":47,"line":33069},[45,70459,70460],{"class":267},"        \u002F\u002F console.log(e.target.dataset.id);\n",[45,70462,70463],{"class":47,"line":33075},[45,70464,70465],{"class":267},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[45,70467,70468,70471,70473,70476,70478],{"class":47,"line":33089},[45,70469,70470],{"class":51},"        arr.",[45,70472,58091],{"class":2046},[45,70474,70475],{"class":51},"(e.target.dataset.id, ",[45,70477,426],{"class":257},[45,70479,215],{"class":51},[45,70481,70482],{"class":47,"line":33095},[45,70483,70484],{"class":267},"        \u002F\u002F 重新渲染一次\n",[45,70486,70487,70490],{"class":47,"line":33101},[45,70488,70489],{"class":2046},"        render",[45,70491,2059],{"class":51},[45,70493,70494],{"class":47,"line":33112},[45,70495,52479],{"class":51},[45,70497,70498],{"class":47,"line":33118},[45,70499,33542],{"class":51},[45,70501,70502,70504,70506],{"class":47,"line":33124},[45,70503,52498],{"class":51},[45,70505,51894],{"class":51381},[45,70507,51388],{"class":51},[45,70509,70510],{"class":47,"line":33134},[45,70511,2483],{"emptyLinePlaceholder":133},[45,70513,70514,70516,70518],{"class":47,"line":33140},[45,70515,51866],{"class":51},[45,70517,51881],{"class":51381},[45,70519,51388],{"class":51},[45,70521,70522],{"class":47,"line":33151},[45,70523,2483],{"emptyLinePlaceholder":133},[45,70525,70526,70528,70530],{"class":47,"line":33157},[45,70527,51866],{"class":51},[45,70529,50716],{"class":51381},[45,70531,51388],{"class":51},[10,70533,70534],{},"样式：",[35,70536,70540],{"className":70537,"code":70538,"language":70539,"meta":40,"style":40},"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",[42,70541,70542,70547,70557,70566,70570,70574,70579,70589,70594,70598,70603,70613,70618,70627,70631,70635,70640,70645,70655,70665,70670,70674,70679,70688,70698,70703,70713,70723,70727,70732,70740,70744,70749,70754,70759,70767,70776,70780,70785,70794,70798,70803,70812,70816,70821,70830,70839,70847,70851,70856,70865,70875,70884,70894,70900,70909,70919,70929,70933,70938,70947,70955,70965,70973,70982,70991,71001,71009,71013,71018,71027],{"__ignoreMap":40},[45,70543,70544],{"class":47,"line":48},[45,70545,70546],{"class":51},"* {\n",[45,70548,70549,70552,70554],{"class":47,"line":125},[45,70550,70551],{"class":51381},"  margin",[45,70553,51518],{"class":51},[45,70555,70556],{"class":313},"0;\n",[45,70558,70559,70562,70564],{"class":47,"line":1262},[45,70560,70561],{"class":313},"  padding",[45,70563,51518],{"class":51},[45,70565,70556],{"class":313},[45,70567,70568],{"class":47,"line":1277},[45,70569,1648],{"class":51},[45,70571,70572],{"class":47,"line":1283},[45,70573,2483],{"emptyLinePlaceholder":133},[45,70575,70576],{"class":47,"line":1297},[45,70577,70578],{"class":313},"a {\n",[45,70580,70581,70584,70586],{"class":47,"line":1303},[45,70582,70583],{"class":51381},"  text-decoration",[45,70585,51518],{"class":51},[45,70587,70588],{"class":313},"none;\n",[45,70590,70591],{"class":47,"line":1394},[45,70592,70593],{"class":313},"  color:#721c24;\n",[45,70595,70596],{"class":47,"line":1400},[45,70597,1648],{"class":51},[45,70599,70600],{"class":47,"line":1412},[45,70601,70602],{"class":313},"h1 {\n",[45,70604,70605,70608,70610],{"class":47,"line":1695},[45,70606,70607],{"class":51381},"  text-align",[45,70609,51518],{"class":51},[45,70611,70612],{"class":313},"center;\n",[45,70614,70615],{"class":47,"line":1700},[45,70616,70617],{"class":313},"  color:#333;\n",[45,70619,70620,70622,70624],{"class":47,"line":1706},[45,70621,70551],{"class":51381},[45,70623,51518],{"class":51},[45,70625,70626],{"class":313},"20px 0;\n",[45,70628,70629],{"class":47,"line":1711},[45,70630,2757],{"class":51},[45,70632,70633],{"class":47,"line":1725},[45,70634,1648],{"class":51},[45,70636,70637],{"class":47,"line":1730},[45,70638,70639],{"class":313},"table {\n",[45,70641,70642],{"class":47,"line":1736},[45,70643,70644],{"class":313},"  margin:0 auto;\n",[45,70646,70647,70650,70652],{"class":47,"line":1757},[45,70648,70649],{"class":51381},"  width",[45,70651,51518],{"class":51},[45,70653,70654],{"class":313},"800px;\n",[45,70656,70657,70660,70662],{"class":47,"line":1762},[45,70658,70659],{"class":51381},"  border-collapse",[45,70661,51518],{"class":51},[45,70663,70664],{"class":313},"collapse;\n",[45,70666,70667],{"class":47,"line":1776},[45,70668,70669],{"class":313},"  color:#004085;\n",[45,70671,70672],{"class":47,"line":1781},[45,70673,1648],{"class":51},[45,70675,70676],{"class":47,"line":1810},[45,70677,70678],{"class":313},"th {\n",[45,70680,70681,70683,70685],{"class":47,"line":1815},[45,70682,70561],{"class":51381},[45,70684,51518],{"class":51},[45,70686,70687],{"class":313},"10px;\n",[45,70689,70690,70693,70695],{"class":47,"line":1832},[45,70691,70692],{"class":51381},"  background",[45,70694,51518],{"class":51},[45,70696,70697],{"class":267},"#cfe5ff;\n",[45,70699,70700],{"class":47,"line":1837},[45,70701,70702],{"class":51},"  \n",[45,70704,70705,70708,70710],{"class":47,"line":1842},[45,70706,70707],{"class":51381},"  font-size",[45,70709,51518],{"class":51},[45,70711,70712],{"class":313},"20px;\n",[45,70714,70715,70718,70720],{"class":47,"line":1847},[45,70716,70717],{"class":51381},"  font-weight",[45,70719,51518],{"class":51},[45,70721,70722],{"class":313},"400;\n",[45,70724,70725],{"class":47,"line":1861},[45,70726,1648],{"class":51},[45,70728,70729],{"class":47,"line":1866},[45,70730,70731],{"class":313},"td,th {\n",[45,70733,70734,70737],{"class":47,"line":2660},[45,70735,70736],{"class":313},"  border:1px solid",[45,70738,70739],{"class":267}," #b8daff;\n",[45,70741,70742],{"class":47,"line":2674},[45,70743,1648],{"class":51},[45,70745,70746],{"class":47,"line":2682},[45,70747,70748],{"class":313},"td {\n",[45,70750,70751],{"class":47,"line":2687},[45,70752,70753],{"class":313},"  padding:10px;\n",[45,70755,70756],{"class":47,"line":2693},[45,70757,70758],{"class":313},"  color:#666;\n",[45,70760,70761,70763,70765],{"class":47,"line":2699},[45,70762,70607],{"class":51381},[45,70764,51518],{"class":51},[45,70766,70612],{"class":313},[45,70768,70769,70771,70773],{"class":47,"line":2704},[45,70770,70707],{"class":51381},[45,70772,51518],{"class":51},[45,70774,70775],{"class":313},"16px;\n",[45,70777,70778],{"class":47,"line":8031},[45,70779,1648],{"class":51},[45,70781,70782],{"class":47,"line":8055},[45,70783,70784],{"class":313},"tbody tr {\n",[45,70786,70787,70789,70791],{"class":47,"line":8060},[45,70788,70692],{"class":51381},[45,70790,51518],{"class":51},[45,70792,70793],{"class":267},"#fff;\n",[45,70795,70796],{"class":47,"line":8066},[45,70797,1648],{"class":51},[45,70799,70800],{"class":47,"line":8093},[45,70801,70802],{"class":313},"tbody tr:hover {\n",[45,70804,70805,70807,70809],{"class":47,"line":8098},[45,70806,70692],{"class":51381},[45,70808,51518],{"class":51},[45,70810,70811],{"class":267},"#e1ecf8;\n",[45,70813,70814],{"class":47,"line":8104},[45,70815,1648],{"class":51},[45,70817,70818],{"class":47,"line":8116},[45,70819,70820],{"class":313},".info {\n",[45,70822,70823,70825,70827],{"class":47,"line":8128},[45,70824,70649],{"class":51381},[45,70826,51518],{"class":51},[45,70828,70829],{"class":313},"900px;\n",[45,70831,70832,70834,70836],{"class":47,"line":8140},[45,70833,70551],{"class":51381},[45,70835,51518],{"class":51},[45,70837,70838],{"class":313},"50px auto;\n",[45,70840,70841,70843,70845],{"class":47,"line":9799},[45,70842,70607],{"class":51381},[45,70844,51518],{"class":51},[45,70846,70612],{"class":313},[45,70848,70849],{"class":47,"line":9824},[45,70850,1648],{"class":51},[45,70852,70853],{"class":47,"line":9847},[45,70854,70855],{"class":313},".info  input, .info select {\n",[45,70857,70858,70860,70862],{"class":47,"line":9871},[45,70859,70649],{"class":51381},[45,70861,51518],{"class":51},[45,70863,70864],{"class":313},"80px;\n",[45,70866,70867,70870,70872],{"class":47,"line":9876},[45,70868,70869],{"class":51381},"  height",[45,70871,51518],{"class":51},[45,70873,70874],{"class":313},"27px;\n",[45,70876,70877,70880,70882],{"class":47,"line":9881},[45,70878,70879],{"class":51381},"  outline",[45,70881,51518],{"class":51},[45,70883,70588],{"class":313},[45,70885,70886,70889,70891],{"class":47,"line":9886},[45,70887,70888],{"class":51381},"  border-radius",[45,70890,51518],{"class":51},[45,70892,70893],{"class":313},"5px;\n",[45,70895,70896,70898],{"class":47,"line":9895},[45,70897,70736],{"class":313},[45,70899,70739],{"class":267},[45,70901,70902,70905,70907],{"class":47,"line":9900},[45,70903,70904],{"class":51381},"  padding-left",[45,70906,51518],{"class":51},[45,70908,70893],{"class":313},[45,70910,70911,70914,70916],{"class":47,"line":9906},[45,70912,70913],{"class":51381},"  box-sizing",[45,70915,51518],{"class":51},[45,70917,70918],{"class":313},"border-box;\n",[45,70920,70921,70924,70926],{"class":47,"line":9927},[45,70922,70923],{"class":51381},"  margin-right",[45,70925,51518],{"class":51},[45,70927,70928],{"class":313},"15px;\n",[45,70930,70931],{"class":47,"line":9933},[45,70932,1648],{"class":51},[45,70934,70935],{"class":47,"line":9947},[45,70936,70937],{"class":313},".info button {\n",[45,70939,70940,70942,70944],{"class":47,"line":9953},[45,70941,70649],{"class":51381},[45,70943,51518],{"class":51},[45,70945,70946],{"class":313},"60px;\n",[45,70948,70949,70951,70953],{"class":47,"line":9980},[45,70950,70869],{"class":51381},[45,70952,51518],{"class":51},[45,70954,70874],{"class":313},[45,70956,70957,70960,70962],{"class":47,"line":9989},[45,70958,70959],{"class":51381},"  background-color",[45,70961,51518],{"class":51},[45,70963,70964],{"class":267},"#004085;\n",[45,70966,70967,70969,70971],{"class":47,"line":9995},[45,70968,70879],{"class":51381},[45,70970,51518],{"class":51},[45,70972,70588],{"class":313},[45,70974,70975,70978,70980],{"class":47,"line":10003},[45,70976,70977],{"class":51381},"  border",[45,70979,51518],{"class":51},[45,70981,70556],{"class":313},[45,70983,70984,70987,70989],{"class":47,"line":10008},[45,70985,70986],{"class":51381},"  color",[45,70988,51518],{"class":51},[45,70990,70793],{"class":267},[45,70992,70993,70996,70998],{"class":47,"line":16687},[45,70994,70995],{"class":51381},"  cursor",[45,70997,51518],{"class":51},[45,70999,71000],{"class":313},"pointer;\n",[45,71002,71003,71005,71007],{"class":47,"line":16693},[45,71004,70888],{"class":51381},[45,71006,51518],{"class":51},[45,71008,70893],{"class":313},[45,71010,71011],{"class":47,"line":16716},[45,71012,1648],{"class":51},[45,71014,71015],{"class":47,"line":16722},[45,71016,71017],{"class":313},".info .age {\n",[45,71019,71020,71022,71024],{"class":47,"line":16745},[45,71021,70649],{"class":51381},[45,71023,51518],{"class":51},[45,71025,71026],{"class":313},"50px;\n",[45,71028,71029],{"class":47,"line":16759},[45,71030,1648],{"class":51},[10,71032,71033],{},"思路：",[10,71035,71036],{},[1545,71037],{"alt":40,"src":71038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[10,71040,71041],{},[1545,71042],{"alt":40,"src":71043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[10,71045,71046],{},[1545,71047],{"alt":40,"src":71048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[176,71050,71052],{"id":71051},"_3315-重绘回流","3.3.15 重绘回流",[10,71054,71055],{},[1545,71056],{"alt":40,"src":71057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[10,71059,71060],{},[1545,71061],{"alt":40,"src":71062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[10,71064,71065],{},[1545,71066],{"alt":40,"src":71067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[30,71069,71071],{"id":71070},"_34-bom","3.4 BOM",[10,71073,71074],{},[1545,71075],{"alt":40,"src":71076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[10,71078,71079],{},"平时写的document省略了window而已，实际上是window.document",[10,71081,71082],{},"函数也是这样，调用的时候实际为window.fn()",[10,71084,71085],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[10,71087,71088],{},"window大部分情况下可以省略",[176,71090,71092],{"id":71091},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[10,71094,71095],{},"只执行一次",[10,71097,71098],{},[1545,71099],{"alt":40,"src":71100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[10,71102,71103],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[10,71105,71106],{},[1545,71107],{"alt":40,"src":71108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[176,71110,71112],{"id":71111},"_342-js执行机制","3.4.2 JS执行机制",[10,71114,71115],{},[1545,71116],{"alt":40,"src":71117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[10,71119,71120],{},"两个的结果都是1111 3333 2222",[10,71122,71123],{},[1545,71124],{"alt":40,"src":71125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[10,71127,71128],{},[1545,71129],{"alt":40,"src":71130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[10,71132,71133],{},[1545,71134],{"alt":40,"src":71135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[10,71137,71138],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[10,71140,71141],{},"工作流程：",[10,71143,71144],{},[1545,71145],{"alt":40,"src":71146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[10,71148,71149],{},[1545,71150],{"alt":40,"src":71151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[10,71153,71154],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[10,71156,71157],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[176,71159,71161],{"id":71160},"_343-location对象","3.4.3 location对象",[10,71163,71164],{},"location对象属于window这个全局对象下的，可以 省略window",[10,71166,71167],{},[1545,71168],{"alt":40,"src":71169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[10,71171,71172],{},"href可以跳转页面",[159,71174,71175],{},[162,71176,71177],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[10,71179,71180],{},"search得到提交信息之后网站后边的地址",[10,71182,71183],{},[1545,71184],{"alt":40,"src":71185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[10,71187,71188],{},[1545,71189],{"alt":40,"src":71190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[159,71192,71193],{"start":125},[162,71194,71195],{},"hash:这个获取单页面应用#后边的地址",[10,71197,71198],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[10,71200,71201],{},[1545,71202],{"alt":40,"src":71203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[35,71205,71207],{"className":53148,"code":71206,"language":53150,"meta":40,"style":40},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[42,71208,71209,71229,71249],{"__ignoreMap":40},[45,71210,71211,71213,71215,71217,71219,71222,71225,71227],{"class":47,"line":48},[45,71212,52225],{"class":51},[45,71214,13],{"class":51381},[45,71216,61138],{"class":2046},[45,71218,254],{"class":51},[45,71220,71221],{"class":313},"\"#\u002Fmy\"",[45,71223,71224],{"class":51},">我的\u003C\u002F",[45,71226,13],{"class":51381},[45,71228,51388],{"class":51},[45,71230,71231,71233,71235,71237,71239,71242,71245,71247],{"class":47,"line":125},[45,71232,52225],{"class":51},[45,71234,13],{"class":51381},[45,71236,61138],{"class":2046},[45,71238,254],{"class":51},[45,71240,71241],{"class":313},"\"#\u002Ffriend\"",[45,71243,71244],{"class":51},">关注\u003C\u002F",[45,71246,13],{"class":51381},[45,71248,51388],{"class":51},[45,71250,71251,71253,71255,71257,71259,71262,71265,71267],{"class":47,"line":1262},[45,71252,52225],{"class":51},[45,71254,13],{"class":51381},[45,71256,61138],{"class":2046},[45,71258,254],{"class":51},[45,71260,71261],{"class":313},"\"#\u002Fdownload\"",[45,71263,71264],{"class":51},">下载\u003C\u002F",[45,71266,13],{"class":51381},[45,71268,51388],{"class":51},[10,71270,71271],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[159,71273,71274],{"start":1262},[162,71275,71276,71277,71279,71280,71282],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53797,71278],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53797,71281],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[176,71284,71286],{"id":71285},"_345-navigator对象","3.4.5 navigator对象",[10,71288,71289],{},[1545,71290],{"alt":40,"src":71291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[35,71293,71297],{"className":71294,"code":71295,"language":71296,"meta":40,"style":40},"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",[42,71298,71299,71304,71315,71327,71332,71383,71424,71429,71442,71454,71459],{"__ignoreMap":40},[45,71300,71301],{"class":47,"line":48},[45,71302,71303],{"class":267},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[45,71305,71306,71308,71310,71312],{"class":47,"line":125},[45,71307,435],{"class":93},[45,71309,209],{"class":51},[45,71311,54530],{"class":93},[45,71313,71314],{"class":51}," () { \n",[45,71316,71317,71319,71322,71324],{"class":47,"line":1262},[45,71318,6875],{"class":93},[45,71320,71321],{"class":257}," userAgent",[45,71323,13647],{"class":93},[45,71325,71326],{"class":51}," navigator.userAgent \n",[45,71328,71329],{"class":47,"line":1277},[45,71330,71331],{"class":267},"\u002F\u002F 验证是否为Android或iPhone \n",[45,71333,71334,71336,71339,71341,71344,71347,71349,71351,71354,71356,71359,71363,71365,71367,71369,71372,71374,71376,71378,71380],{"class":47,"line":1283},[45,71335,6875],{"class":93},[45,71337,71338],{"class":257}," android",[45,71340,13647],{"class":93},[45,71342,71343],{"class":51}," userAgent.",[45,71345,71346],{"class":2046},"match",[45,71348,209],{"class":51},[45,71350,791],{"class":313},[45,71352,71353],{"class":48058},"(Android);",[45,71355,1193],{"class":93},[45,71357,71358],{"class":257},"[\\s",[45,71360,71362],{"class":71361},"snhLl","\\\u002F",[45,71364,1147],{"class":257},[45,71366,689],{"class":93},[45,71368,209],{"class":48058},[45,71370,71371],{"class":257},"[\\d.]",[45,71373,689],{"class":93},[45,71375,637],{"class":48058},[45,71377,1193],{"class":93},[45,71379,791],{"class":313},[45,71381,71382],{"class":51},") \n",[45,71384,71385,71387,71390,71392,71394,71396,71398,71400,71403,71406,71409,71411,71413,71416,71418,71420,71422],{"class":47,"line":1297},[45,71386,6875],{"class":93},[45,71388,71389],{"class":257}," iphone",[45,71391,13647],{"class":93},[45,71393,71343],{"class":51},[45,71395,71346],{"class":2046},[45,71397,209],{"class":51},[45,71399,791],{"class":313},[45,71401,71402],{"class":48058},"(iPhone",[45,71404,71405],{"class":257},"\\s",[45,71407,71408],{"class":48058},"OS)",[45,71410,71405],{"class":257},[45,71412,209],{"class":48058},[45,71414,71415],{"class":257},"[\\d_]",[45,71417,689],{"class":93},[45,71419,637],{"class":48058},[45,71421,791],{"class":313},[45,71423,71382],{"class":51},[45,71425,71426],{"class":47,"line":1303},[45,71427,71428],{"class":267},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[45,71430,71431,71433,71436,71439],{"class":47,"line":1394},[45,71432,1614],{"class":93},[45,71434,71435],{"class":51}," (android ",[45,71437,71438],{"class":93},"||",[45,71440,71441],{"class":51}," iphone) { \n",[45,71443,71444,71447,71449,71452],{"class":47,"line":1400},[45,71445,71446],{"class":51},"location.href ",[45,71448,254],{"class":93},[45,71450,71451],{"class":313}," 'http:\u002F\u002Fm.itcast.cn'",[45,71453,2757],{"class":51},[45,71455,71456],{"class":47,"line":1412},[45,71457,71458],{"class":51},"} \n",[45,71460,71461],{"class":47,"line":1695},[45,71462,71463],{"class":51},"})()\n",[176,71465,71467],{"id":71466},"_346-histroy对象","3.4.6 histroy对象",[10,71469,71470],{},[1545,71471],{"alt":40,"src":71472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[10,71474,71475],{},"浏览器地址的前进与后退!!!",[10,71477,71478],{},"history.back() 等效于 history.go(-1)",[10,71480,71481],{},"history.forward() 等效于 history.go(1)",[30,71483,71485],{"id":71484},"_35-本地存储","3.5 本地存储",[159,71487,71488,71491,71494],{},[162,71489,71490],{},"数据存储在用户浏览器中",[162,71492,71493],{},"设置、读取方便、甚至页面刷新不丢失数据",[162,71495,71496],{},"容量较大，sessionStorage和localStorage约 5M 左右",[176,71498,71500],{"id":71499},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[10,71502,71503],{},"只能存储字符串",[10,71505,71506],{},[1545,71507],{"alt":40,"src":71508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[10,71510,71511],{},[1545,71512],{"alt":40,"src":71513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[10,71515,71516],{},"键值对要加引号,不然就会当变量来看了",[10,71518,71519],{},"localStorage.setItem('uname', 'pink')",[10,71521,71522],{},"刷新之后信息不再丢失",[10,71524,71525],{},"操作key,value会跟着变",[10,71527,71528],{},"删除只删除键就可以,即名字",[10,71530,71519],{},[10,71532,71533],{},"改:",[10,71535,71536],{},"localStorage.setItem('uname','red')",[10,71538,71539],{},"有这个键就是改,没有这个键就是改",[10,71541,71542],{},[1545,71543],{"alt":40,"src":71544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[10,71546,71547],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[10,71549,71550],{},[1545,71551],{"alt":40,"src":71552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[10,71554,71555],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[176,71557,71559],{"id":71558},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[10,71561,71562],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[10,71564,71565],{},"特性:",[159,71567,71568,71571,71574,71577],{},[162,71569,71570],{},"生命周期为关闭浏览器窗口",[162,71572,71573],{},"在同一个窗口(页面)下数据可以共享",[162,71575,71576],{},"以键值对的形式存储使用",[162,71578,71579],{},"用法跟localStorage 基本相同",[176,71581,71583],{"id":71582},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[10,71585,71586],{},"本地只能存储字符串,无法直接存储复杂数据类型",[35,71588,71590],{"className":53148,"code":71589,"language":53150,"meta":40,"style":40},"\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",[42,71591,71592,71600,71605,71610,71615,71620,71624,71629,71634],{"__ignoreMap":40},[45,71593,71594,71596,71598],{"class":47,"line":48},[45,71595,1117],{"class":51},[45,71597,51894],{"class":51381},[45,71599,51388],{"class":51},[45,71601,71602],{"class":47,"line":125},[45,71603,71604],{"class":51},"    const obj = {\n",[45,71606,71607],{"class":47,"line":1262},[45,71608,71609],{"class":51},"      uname: 'pink老师',\n",[45,71611,71612],{"class":47,"line":1277},[45,71613,71614],{"class":51},"      age: 18,\n",[45,71616,71617],{"class":47,"line":1283},[45,71618,71619],{"class":51},"      gender: '女'\n",[45,71621,71622],{"class":47,"line":1297},[45,71623,2270],{"class":51},[45,71625,71626],{"class":47,"line":1303},[45,71627,71628],{"class":51},"    \u002F\u002F 存储复杂数据类型\n",[45,71630,71631],{"class":47,"line":1394},[45,71632,71633],{"class":51},"    localStorage.setItem('obj', obj)\n",[45,71635,71636,71638,71640],{"class":47,"line":1400},[45,71637,52498],{"class":51},[45,71639,51894],{"class":51381},[45,71641,51388],{"class":51},[10,71643,71644],{},[1545,71645],{"alt":40,"src":71646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[10,71648,71649],{},"如果获取一下数据:",[10,71651,71652],{},"log(localStorage.getItem('obj'))",[10,71654,71655],{},[1545,71656],{"alt":40,"src":71657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[10,71659,71660],{},"发现直接存对象是使用不了的!!!",[22081,71662,71664],{"id":71663},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[10,71666,71667],{},[1545,71668],{"alt":40,"src":71669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[35,71671,71673],{"className":50714,"code":71672,"language":50716,"meta":40,"style":40},"\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",[42,71674,71675,71683,71693,71703,71712,71720,71724,71728,71754,71773,71781,71785,71790,71795],{"__ignoreMap":40},[45,71676,71677,71679,71681],{"class":47,"line":48},[45,71678,1117],{"class":51},[45,71680,51894],{"class":51381},[45,71682,51388],{"class":51},[45,71684,71685,71687,71689,71691],{"class":47,"line":125},[45,71686,11304],{"class":93},[45,71688,70052],{"class":257},[45,71690,13647],{"class":93},[45,71692,15655],{"class":51},[45,71694,71695,71698,71701],{"class":47,"line":1262},[45,71696,71697],{"class":51},"      uname: ",[45,71699,71700],{"class":313},"'pink老师'",[45,71702,31547],{"class":51},[45,71704,71705,71708,71710],{"class":47,"line":1277},[45,71706,71707],{"class":51},"      age: ",[45,71709,857],{"class":257},[45,71711,31547],{"class":51},[45,71713,71714,71717],{"class":47,"line":1283},[45,71715,71716],{"class":51},"      gender: ",[45,71718,71719],{"class":313},"'女'\n",[45,71721,71722],{"class":47,"line":1297},[45,71723,2270],{"class":51},[45,71725,71726],{"class":47,"line":1303},[45,71727,71628],{"class":267},[45,71729,71730,71733,71736,71738,71741,71743,71746,71748,71751],{"class":47,"line":1394},[45,71731,71732],{"class":51},"  localStorage.",[45,71734,71735],{"class":2046},"setItem",[45,71737,209],{"class":51},[45,71739,71740],{"class":313},"'obj'",[45,71742,12518],{"class":51},[45,71744,71745],{"class":257},"JSON",[45,71747,765],{"class":51},[45,71749,71750],{"class":2046},"stringify",[45,71752,71753],{"class":51},"(obj))\n",[45,71755,71756,71759,71761,71764,71767,71769,71771],{"class":47,"line":1400},[45,71757,71758],{"class":51},"  console.",[45,71760,58328],{"class":2046},[45,71762,71763],{"class":51},"(localStorage.",[45,71765,71766],{"class":2046},"getItem",[45,71768,209],{"class":51},[45,71770,71740],{"class":313},[45,71772,30578],{"class":51},[45,71774,71775,71777,71779],{"class":47,"line":1412},[45,71776,52498],{"class":51},[45,71778,51894],{"class":51381},[45,71780,51388],{"class":51},[45,71782,71783],{"class":47,"line":1695},[45,71784,70702],{"class":51},[45,71786,71787],{"class":47,"line":1700},[45,71788,71789],{"class":51},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[45,71791,71792],{"class":47,"line":1706},[45,71793,71794],{"class":51},"  类型是字符串的\n",[45,71796,71797],{"class":47,"line":1711},[45,71798,71799],{"class":51},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22081,71801,71803],{"id":71802},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[10,71805,71806],{},[1545,71807],{"alt":40,"src":71808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[10,71810,71811],{},[1545,71812],{"alt":40,"src":71813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[35,71815,71817],{"className":53148,"code":71816,"language":53150,"meta":40,"style":40},"  \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",[42,71818,71819,71827,71831,71835,71839,71843,71847,71852,71857,71862,71867,71872,71877,71882,71887],{"__ignoreMap":40},[45,71820,71821,71823,71825],{"class":47,"line":48},[45,71822,52225],{"class":51},[45,71824,51894],{"class":51381},[45,71826,51388],{"class":51},[45,71828,71829],{"class":47,"line":125},[45,71830,71604],{"class":51},[45,71832,71833],{"class":47,"line":1262},[45,71834,71609],{"class":51},[45,71836,71837],{"class":47,"line":1277},[45,71838,71614],{"class":51},[45,71840,71841],{"class":47,"line":1283},[45,71842,71619],{"class":51},[45,71844,71845],{"class":47,"line":1297},[45,71846,2270],{"class":51},[45,71848,71849],{"class":47,"line":1303},[45,71850,71851],{"class":51},"    \u002F\u002F 1.存储复杂数据类型\n",[45,71853,71854],{"class":47,"line":1394},[45,71855,71856],{"class":51},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[45,71858,71859],{"class":47,"line":1400},[45,71860,71861],{"class":51},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[45,71863,71864],{"class":47,"line":1412},[45,71865,71866],{"class":51},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[45,71868,71869],{"class":47,"line":1695},[45,71870,71871],{"class":51},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[45,71873,71874],{"class":47,"line":1700},[45,71875,71876],{"class":51},"    \u002F\u002F 取\n",[45,71878,71879],{"class":47,"line":1706},[45,71880,71881],{"class":51},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[45,71883,71884],{"class":47,"line":1711},[45,71885,71886],{"class":51},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[45,71888,71889,71891,71893],{"class":47,"line":1725},[45,71890,52498],{"class":51},[45,71892,51894],{"class":51381},[45,71894,51388],{"class":51},[10,71896,71897],{},[1545,71898],{"alt":40,"src":71899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[176,71901,71903],{"id":71902},"_356-数组map方法","3.5.6 数组map方法",[10,71905,71906],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[10,71908,71909],{},[1545,71910],{"alt":40,"src":71911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[10,71913,71914],{},[1545,71915],{"alt":40,"src":71916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[10,71918,71919,71922],{},[358,71920,71921],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[10,71924,71925],{},"map有返回值，但是forEach没有返回值",[10,71927,71928],{},"map是个方法。用的时候要加 ()",[10,71930,71931],{},"map返回的是一个数组",[176,71933,71935],{"id":71934},"_357-数组中join方法","3.5.7 数组中join方法",[10,71937,71938],{},[1545,71939],{"alt":40,"src":71940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[10,71942,71943],{},"类似于python中拼接字符串一样！",[159,71945,71946,71949,71952],{},[162,71947,71948],{},"小括号为空则逗号分开",[162,71950,71951],{},"小括号为空字符串 ''，则元素之间没有分隔符",[162,71953,71954],{},"小括号用啥符号就用进行分割",[176,71956,71958],{"id":71957},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[159,71960,71961,71964,71967,71970,71973],{},[162,71962,71963],{},"记住本地时间获取快速方式：new Date().toDateString()",[162,71965,71966],{},"尽量减少DOM操作，用好map+join的渲染方式",[162,71968,71969],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[162,71971,71972],{},"return可以实现函数的结束",[162,71974,71975],{},"禁止跳转是 preventDefault() 不要忘记",[35,71977,71979],{"className":50714,"code":71978,"language":50716,"meta":40,"style":40},"\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",[42,71980,71981,71991,72005,72009,72017,72031,72051,72063,72071,72077,72087,72097,72101,72105,72111,72121,72133,72137,72141,72148,72160,72174,72184,72188,72192,72199,72206,72213,72225,72237,72247,72259,72263,72267,72274,72281,72293,72305,72315,72327,72357,72361,72365,72372,72384,72396,72420,72430,72440,72444,72448,72456,72467,72479,72491,72503,72520,72532,72544,72548,72552,72559,72571,72583,72595,72606,72624,72637,72649,72673,72684,72688,72692,72700,72710,72714,72718,72724,72736,72747,72757,72761,72765,72771,72793,72797,72801,72807,72813,72825,72835,72847,72877,72890,72907,72911,72915,72926,72948,72958,72962,72966,72979,72989,73001,73013,73025,73037,73047,73057,73067,73078,73091,73095,73103,73111,73115,73123,73136,73156,73189,73222,73255,73281,73299,73317,73325,73351,73369,73387,73405,73423,73441,73449,73457,73475,73483,73512,73520,73528,73536,73549,73561,73573,73585,73597,73609,73622,73634,73642,73650,73658,73663,73668,73672,73676,73680,73684,73688,73692,73697,73702,73707,73712,73720,73728,73736,73741,73746,73751,73756,73761,73766,73771,73776,73781,73786,73791,73796,73801,73806,73810,73815,73820,73830,73839,73843,73848,73857,73873,73915,73955,73994,74059,74067,74071,74076,74094,74102,74107,74112,74142,74148,74153,74166,74178,74190,74202,74214,74226,74238,74242,74252,74256,74261,74266,74270,74279,74283,74288,74293,74312,74317,74337,74341,74346,74350,74355,74373,74391,74409,74428,74447,74466,74471,74477,74498,74504,74513,74519,74525,74531,74558,74571,74576,74586,74592,74598,74604,74610,74615,74621,74627,74633,74639,74672,74677,74682,74687,74692,74698,74704,74710,74721,74726,74732,74739,74753,74759,74783,74788,74793,74799,74805,74826,74832,74845,74851,74857,74863,74869,74874,74880,74886,74892,74910,74924,74930,74938,74944,74966,74971,74976,74981,74986,74991,75000,75009,75014],{"__ignoreMap":40},[45,71982,71983,71985,71987,71989],{"class":47,"line":48},[45,71984,51378],{"class":51},[45,71986,51382],{"class":51381},[45,71988,51385],{"class":2046},[45,71990,51388],{"class":51},[45,71992,71993,71995,71997,71999,72001,72003],{"class":47,"line":125},[45,71994,1117],{"class":51},[45,71996,50716],{"class":51381},[45,71998,51397],{"class":2046},[45,72000,254],{"class":51},[45,72002,51402],{"class":313},[45,72004,51388],{"class":51},[45,72006,72007],{"class":47,"line":1262},[45,72008,2483],{"emptyLinePlaceholder":133},[45,72010,72011,72013,72015],{"class":47,"line":1277},[45,72012,1117],{"class":51},[45,72014,51415],{"class":51381},[45,72016,51388],{"class":51},[45,72018,72019,72021,72023,72025,72027,72029],{"class":47,"line":1283},[45,72020,52225],{"class":51},[45,72022,51425],{"class":51381},[45,72024,51428],{"class":2046},[45,72026,254],{"class":51},[45,72028,51433],{"class":313},[45,72030,51388],{"class":51},[45,72032,72033,72035,72037,72039,72041,72043,72045,72047,72049],{"class":47,"line":1297},[45,72034,52225],{"class":51},[45,72036,51425],{"class":51381},[45,72038,15003],{"class":2046},[45,72040,254],{"class":51},[45,72042,51472],{"class":313},[45,72044,51452],{"class":2046},[45,72046,254],{"class":51},[45,72048,51479],{"class":313},[45,72050,51388],{"class":51},[45,72052,72053,72055,72057,72059,72061],{"class":47,"line":1303},[45,72054,52225],{"class":51},[45,72056,51488],{"class":51381},[45,72058,51491],{"class":51},[45,72060,51488],{"class":51381},[45,72062,51388],{"class":51},[45,72064,72065,72067,72069],{"class":47,"line":1394},[45,72066,52225],{"class":51},[45,72068,121],{"class":51381},[45,72070,51388],{"class":51},[45,72072,72073,72075],{"class":47,"line":1400},[45,72074,6486],{"class":51381},[45,72076,15655],{"class":51},[45,72078,72079,72081,72083,72085],{"class":47,"line":1412},[45,72080,54776],{"class":257},[45,72082,51518],{"class":51},[45,72084,400],{"class":257},[45,72086,1373],{"class":51},[45,72088,72089,72091,72093,72095],{"class":47,"line":1695},[45,72090,54787],{"class":257},[45,72092,51518],{"class":51},[45,72094,400],{"class":257},[45,72096,1373],{"class":51},[45,72098,72099],{"class":47,"line":1700},[45,72100,2270],{"class":51},[45,72102,72103],{"class":47,"line":1706},[45,72104,2483],{"emptyLinePlaceholder":133},[45,72106,72107,72109],{"class":47,"line":1711},[45,72108,57360],{"class":51381},[45,72110,15655],{"class":51},[45,72112,72113,72115,72117,72119],{"class":47,"line":1725},[45,72114,57367],{"class":257},[45,72116,51518],{"class":51},[45,72118,51673],{"class":257},[45,72120,1373],{"class":51},[45,72122,72123,72125,72127,72129,72131],{"class":47,"line":1730},[45,72124,62158],{"class":257},[45,72126,51518],{"class":51},[45,72128,907],{"class":257},[45,72130,51573],{"class":93},[45,72132,1373],{"class":51},[45,72134,72135],{"class":47,"line":1736},[45,72136,2270],{"class":51},[45,72138,72139],{"class":47,"line":1757},[45,72140,2483],{"emptyLinePlaceholder":133},[45,72142,72143,72146],{"class":47,"line":1762},[45,72144,72145],{"class":2046},"    .info",[45,72147,15655],{"class":51},[45,72149,72150,72152,72154,72156,72158],{"class":47,"line":1776},[45,72151,54852],{"class":257},[45,72153,51518],{"class":51},[45,72155,51570],{"class":257},[45,72157,51573],{"class":93},[45,72159,1373],{"class":51},[45,72161,72162,72164,72166,72168,72170,72172],{"class":47,"line":1781},[45,72163,54787],{"class":257},[45,72165,51518],{"class":51},[45,72167,654],{"class":257},[45,72169,51573],{"class":93},[45,72171,51637],{"class":257},[45,72173,1373],{"class":51},[45,72175,72176,72178,72180,72182],{"class":47,"line":1810},[45,72177,57367],{"class":257},[45,72179,51518],{"class":51},[45,72181,51673],{"class":257},[45,72183,1373],{"class":51},[45,72185,72186],{"class":47,"line":1815},[45,72187,2270],{"class":51},[45,72189,72190],{"class":47,"line":1832},[45,72191,2483],{"emptyLinePlaceholder":133},[45,72193,72194,72197],{"class":47,"line":1837},[45,72195,72196],{"class":2046},"    .uname",[45,72198,31547],{"class":51},[45,72200,72201,72204],{"class":47,"line":1842},[45,72202,72203],{"class":2046},"    .age",[45,72205,31547],{"class":51},[45,72207,72208,72211],{"class":47,"line":1847},[45,72209,72210],{"class":2046},"    .salary",[45,72212,15655],{"class":51},[45,72214,72215,72217,72219,72221,72223],{"class":47,"line":1861},[45,72216,54852],{"class":257},[45,72218,51518],{"class":51},[45,72220,519],{"class":257},[45,72222,51573],{"class":93},[45,72224,1373],{"class":51},[45,72226,72227,72229,72231,72233,72235],{"class":47,"line":1866},[45,72228,54866],{"class":257},[45,72230,51518],{"class":51},[45,72232,907],{"class":257},[45,72234,51573],{"class":93},[45,72236,1373],{"class":51},[45,72238,72239,72241,72243,72245],{"class":47,"line":2660},[45,72240,61861],{"class":257},[45,72242,51518],{"class":51},[45,72244,54818],{"class":257},[45,72246,1373],{"class":51},[45,72248,72249,72251,72253,72255,72257],{"class":47,"line":2674},[45,72250,61831],{"class":257},[45,72252,51518],{"class":51},[45,72254,782],{"class":257},[45,72256,51573],{"class":93},[45,72258,1373],{"class":51},[45,72260,72261],{"class":47,"line":2682},[45,72262,2270],{"class":51},[45,72264,72265],{"class":47,"line":2687},[45,72266,2483],{"emptyLinePlaceholder":133},[45,72268,72269,72272],{"class":47,"line":2693},[45,72270,72271],{"class":2046},"    .gender",[45,72273,31547],{"class":51},[45,72275,72276,72279],{"class":47,"line":2699},[45,72277,72278],{"class":2046},"    .city",[45,72280,15655],{"class":51},[45,72282,72283,72285,72287,72289,72291],{"class":47,"line":2704},[45,72284,54852],{"class":257},[45,72286,51518],{"class":51},[45,72288,519],{"class":257},[45,72290,51573],{"class":93},[45,72292,1373],{"class":51},[45,72294,72295,72297,72299,72301,72303],{"class":47,"line":8031},[45,72296,54866],{"class":257},[45,72298,51518],{"class":51},[45,72300,1032],{"class":257},[45,72302,51573],{"class":93},[45,72304,1373],{"class":51},[45,72306,72307,72309,72311,72313],{"class":47,"line":8055},[45,72308,61861],{"class":257},[45,72310,51518],{"class":51},[45,72312,54818],{"class":257},[45,72314,1373],{"class":51},[45,72316,72317,72319,72321,72323,72325],{"class":47,"line":8060},[45,72318,61831],{"class":257},[45,72320,51518],{"class":51},[45,72322,782],{"class":257},[45,72324,51573],{"class":93},[45,72326,1373],{"class":51},[45,72328,72329,72331,72333,72335,72337,72339,72342,72344,72346,72348,72351,72353,72355],{"class":47,"line":8066},[45,72330,62058],{"class":257},[45,72332,51518],{"class":51},[45,72334,426],{"class":257},[45,72336,51573],{"class":93},[45,72338,51602],{"class":257},[45,72340,72341],{"class":257}," rgb",[45,72343,209],{"class":51},[45,72345,1805],{"class":257},[45,72347,12518],{"class":51},[45,72349,72350],{"class":257},"197",[45,72352,12518],{"class":51},[45,72354,72350],{"class":257},[45,72356,2802],{"class":51},[45,72358,72359],{"class":47,"line":8093},[45,72360,2270],{"class":51},[45,72362,72363],{"class":47,"line":8098},[45,72364,2483],{"emptyLinePlaceholder":133},[45,72366,72367,72370],{"class":47,"line":8104},[45,72368,72369],{"class":51381},"    button",[45,72371,15655],{"class":51},[45,72373,72374,72376,72378,72380,72382],{"class":47,"line":8116},[45,72375,54866],{"class":257},[45,72377,51518],{"class":51},[45,72379,1032],{"class":257},[45,72381,51573],{"class":93},[45,72383,1373],{"class":51},[45,72385,72386,72388,72390,72392,72394],{"class":47,"line":8128},[45,72387,54852],{"class":257},[45,72389,51518],{"class":51},[45,72391,692],{"class":257},[45,72393,51573],{"class":93},[45,72395,1373],{"class":51},[45,72397,72398,72400,72402,72405,72407,72409,72411,72414,72416,72418],{"class":47,"line":8140},[45,72399,54965],{"class":257},[45,72401,51518],{"class":51},[45,72403,72404],{"class":257},"rgb",[45,72406,209],{"class":51},[45,72408,1176],{"class":257},[45,72410,12518],{"class":51},[45,72412,72413],{"class":257},"187",[45,72415,12518],{"class":51},[45,72417,507],{"class":257},[45,72419,2802],{"class":51},[45,72421,72422,72424,72426,72428],{"class":47,"line":9799},[45,72423,57497],{"class":257},[45,72425,51518],{"class":51},[45,72427,60923],{"class":257},[45,72429,1373],{"class":51},[45,72431,72432,72434,72436,72438],{"class":47,"line":9824},[45,72433,62058],{"class":257},[45,72435,51518],{"class":51},[45,72437,400],{"class":257},[45,72439,1373],{"class":51},[45,72441,72442],{"class":47,"line":9847},[45,72443,2270],{"class":51},[45,72445,72446],{"class":47,"line":9871},[45,72447,2483],{"emptyLinePlaceholder":133},[45,72449,72450,72452,72454],{"class":47,"line":9876},[45,72451,72369],{"class":51381},[45,72453,51769],{"class":51381},[45,72455,15655],{"class":51},[45,72457,72458,72460,72462,72465],{"class":47,"line":9881},[45,72459,55090],{"class":257},[45,72461,51518],{"class":51},[45,72463,72464],{"class":257},"inline-block",[45,72466,1373],{"class":51},[45,72468,72469,72471,72473,72475,72477],{"class":47,"line":9886},[45,72470,54852],{"class":257},[45,72472,51518],{"class":51},[45,72474,654],{"class":257},[45,72476,51573],{"class":93},[45,72478,1373],{"class":51},[45,72480,72481,72483,72485,72487,72489],{"class":47,"line":9895},[45,72482,54866],{"class":257},[45,72484,51518],{"class":51},[45,72486,654],{"class":257},[45,72488,51573],{"class":93},[45,72490,1373],{"class":51},[45,72492,72493,72495,72497,72499,72501],{"class":47,"line":9900},[45,72494,57440],{"class":257},[45,72496,51518],{"class":51},[45,72498,680],{"class":257},[45,72500,51573],{"class":93},[45,72502,1373],{"class":51},[45,72504,72505,72507,72509,72511,72513,72515,72518],{"class":47,"line":9906},[45,72506,62058],{"class":257},[45,72508,51518],{"class":51},[45,72510,426],{"class":257},[45,72512,51573],{"class":93},[45,72514,51602],{"class":257},[45,72516,72517],{"class":257}," #fff",[45,72519,1373],{"class":51},[45,72521,72522,72524,72526,72528,72530],{"class":47,"line":9927},[45,72523,55215],{"class":257},[45,72525,51518],{"class":51},[45,72527,527],{"class":257},[45,72529,51573],{"class":93},[45,72531,1373],{"class":51},[45,72533,72534,72536,72538,72540,72542],{"class":47,"line":9933},[45,72535,61831],{"class":257},[45,72537,51518],{"class":51},[45,72539,426],{"class":257},[45,72541,51573],{"class":93},[45,72543,1373],{"class":51},[45,72545,72546],{"class":47,"line":9947},[45,72547,2270],{"class":51},[45,72549,72550],{"class":47,"line":9953},[45,72551,2483],{"emptyLinePlaceholder":133},[45,72553,72554,72557],{"class":47,"line":9980},[45,72555,72556],{"class":2046},"    .total",[45,72558,15655],{"class":51},[45,72560,72561,72563,72565,72567,72569],{"class":47,"line":9989},[45,72562,54852],{"class":257},[45,72564,51518],{"class":51},[45,72566,61710],{"class":257},[45,72568,51573],{"class":93},[45,72570,1373],{"class":51},[45,72572,72573,72575,72577,72579,72581],{"class":47,"line":9995},[45,72574,54866],{"class":257},[45,72576,51518],{"class":51},[45,72578,609],{"class":257},[45,72580,51573],{"class":93},[45,72582,1373],{"class":51},[45,72584,72585,72587,72589,72591,72593],{"class":47,"line":10003},[45,72586,57440],{"class":257},[45,72588,51518],{"class":51},[45,72590,609],{"class":257},[45,72592,51573],{"class":93},[45,72594,1373],{"class":51},[45,72596,72597,72599,72601,72604],{"class":47,"line":10008},[45,72598,57367],{"class":257},[45,72600,51518],{"class":51},[45,72602,72603],{"class":257},"right",[45,72605,1373],{"class":51},[45,72607,72608,72610,72612,72614,72616,72618,72620,72622],{"class":47,"line":16687},[45,72609,54787],{"class":257},[45,72611,51518],{"class":51},[45,72613,609],{"class":257},[45,72615,51573],{"class":93},[45,72617,51637],{"class":257},[45,72619,2121],{"class":257},[45,72621,51573],{"class":93},[45,72623,1373],{"class":51},[45,72625,72626,72629,72631,72633,72635],{"class":47,"line":16693},[45,72627,72628],{"class":257},"      padding-right",[45,72630,51518],{"class":51},[45,72632,654],{"class":257},[45,72634,51573],{"class":93},[45,72636,1373],{"class":51},[45,72638,72639,72641,72643,72645,72647],{"class":47,"line":16716},[45,72640,55003],{"class":257},[45,72642,51518],{"class":51},[45,72644,731],{"class":257},[45,72646,51573],{"class":93},[45,72648,1373],{"class":51},[45,72650,72651,72653,72655,72657,72659,72662,72664,72667,72669,72671],{"class":47,"line":16722},[45,72652,54965],{"class":257},[45,72654,51518],{"class":51},[45,72656,72404],{"class":257},[45,72658,209],{"class":51},[45,72660,72661],{"class":257},"237",[45,72663,12518],{"class":51},[45,72665,72666],{"class":257},"235",[45,72668,12518],{"class":51},[45,72670,72666],{"class":257},[45,72672,2802],{"class":51},[45,72674,72675,72678,72680,72682],{"class":47,"line":16745},[45,72676,72677],{"class":257},"      box-sizing",[45,72679,51518],{"class":51},[45,72681,60586],{"class":257},[45,72683,1373],{"class":51},[45,72685,72686],{"class":47,"line":16759},[45,72687,2270],{"class":51},[45,72689,72690],{"class":47,"line":16779},[45,72691,2483],{"emptyLinePlaceholder":133},[45,72693,72694,72696,72698],{"class":47,"line":16785},[45,72695,72556],{"class":2046},[45,72697,51769],{"class":51381},[45,72699,15655],{"class":51},[45,72701,72702,72704,72706,72708],{"class":47,"line":16796},[45,72703,57497],{"class":257},[45,72705,51518],{"class":51},[45,72707,57502],{"class":257},[45,72709,1373],{"class":51},[45,72711,72712],{"class":47,"line":16819},[45,72713,2270],{"class":51},[45,72715,72716],{"class":47,"line":16841},[45,72717,2483],{"emptyLinePlaceholder":133},[45,72719,72720,72722],{"class":47,"line":16846},[45,72721,65104],{"class":51381},[45,72723,15655],{"class":51},[45,72725,72726,72728,72730,72732,72734],{"class":47,"line":16852},[45,72727,54852],{"class":257},[45,72729,51518],{"class":51},[45,72731,61710],{"class":257},[45,72733,51573],{"class":93},[45,72735,1373],{"class":51},[45,72737,72738,72740,72742,72745],{"class":47,"line":16866},[45,72739,54787],{"class":257},[45,72741,51518],{"class":51},[45,72743,72744],{"class":257},"auto",[45,72746,1373],{"class":51},[45,72748,72749,72751,72753,72755],{"class":47,"line":16879},[45,72750,65111],{"class":257},[45,72752,51518],{"class":51},[45,72754,65116],{"class":257},[45,72756,1373],{"class":51},[45,72758,72759],{"class":47,"line":16884},[45,72760,2270],{"class":51},[45,72762,72763],{"class":47,"line":16898},[45,72764,2483],{"emptyLinePlaceholder":133},[45,72766,72767,72769],{"class":47,"line":16903},[45,72768,65196],{"class":51381},[45,72770,15655],{"class":51},[45,72772,72773,72775,72777,72779,72781,72783,72785,72787,72789,72791],{"class":47,"line":16909},[45,72774,54965],{"class":257},[45,72776,51518],{"class":51},[45,72778,72404],{"class":257},[45,72780,209],{"class":51},[45,72782,72661],{"class":257},[45,72784,12518],{"class":51},[45,72786,72666],{"class":257},[45,72788,12518],{"class":51},[45,72790,72666],{"class":257},[45,72792,2802],{"class":51},[45,72794,72795],{"class":47,"line":16914},[45,72796,2270],{"class":51},[45,72798,72799],{"class":47,"line":16928},[45,72800,2483],{"emptyLinePlaceholder":133},[45,72802,72803,72805],{"class":47,"line":16933},[45,72804,65196],{"class":51381},[45,72806,31547],{"class":51},[45,72808,72809,72811],{"class":47,"line":16938},[45,72810,65262],{"class":51381},[45,72812,15655],{"class":51},[45,72814,72815,72817,72819,72821,72823],{"class":47,"line":16952},[45,72816,54866],{"class":257},[45,72818,51518],{"class":51},[45,72820,481],{"class":257},[45,72822,51573],{"class":93},[45,72824,1373],{"class":51},[45,72826,72827,72829,72831,72833],{"class":47,"line":16964},[45,72828,57367],{"class":257},[45,72830,51518],{"class":51},[45,72832,23819],{"class":257},[45,72834,1373],{"class":51},[45,72836,72837,72839,72841,72843,72845],{"class":47,"line":16969},[45,72838,55003],{"class":257},[45,72840,51518],{"class":51},[45,72842,756],{"class":257},[45,72844,51573],{"class":93},[45,72846,1373],{"class":51},[45,72848,72849,72851,72853,72855,72857,72859,72861,72863,72866,72868,72871,72873,72875],{"class":47,"line":16982},[45,72850,62058],{"class":257},[45,72852,51518],{"class":51},[45,72854,426],{"class":257},[45,72856,51573],{"class":93},[45,72858,51602],{"class":257},[45,72860,72341],{"class":257},[45,72862,209],{"class":51},[45,72864,72865],{"class":257},"228",[45,72867,12518],{"class":51},[45,72869,72870],{"class":257},"225",[45,72872,12518],{"class":51},[45,72874,72870],{"class":257},[45,72876,2802],{"class":51},[45,72878,72879,72882,72884,72886,72888],{"class":47,"line":16987},[45,72880,72881],{"class":257},"      padding-left",[45,72883,51518],{"class":51},[45,72885,527],{"class":257},[45,72887,51573],{"class":93},[45,72889,1373],{"class":51},[45,72891,72892,72894,72896,72898,72901,72903,72905],{"class":47,"line":16992},[45,72893,61941],{"class":257},[45,72895,51518],{"class":51},[45,72897,28204],{"class":257},[45,72899,72900],{"class":257}," linear",[45,72902,61948],{"class":257},[45,72904,902],{"class":93},[45,72906,1373],{"class":51},[45,72908,72909],{"class":47,"line":16997},[45,72910,2270],{"class":51},[45,72912,72913],{"class":47,"line":17010},[45,72914,2483],{"emptyLinePlaceholder":133},[45,72916,72917,72920,72922,72924],{"class":47,"line":17015},[45,72918,72919],{"class":51381},"    tbody",[45,72921,70225],{"class":51381},[45,72923,61021],{"class":2046},[45,72925,15655],{"class":51},[45,72927,72928,72930,72932,72934,72936,72938,72940,72942,72944,72946],{"class":47,"line":32714},[45,72929,54965],{"class":257},[45,72931,51518],{"class":51},[45,72933,72404],{"class":257},[45,72935,209],{"class":51},[45,72937,72661],{"class":257},[45,72939,12518],{"class":51},[45,72941,72666],{"class":257},[45,72943,12518],{"class":51},[45,72945,72666],{"class":257},[45,72947,2802],{"class":51},[45,72949,72950,72952,72954,72956],{"class":47,"line":32720},[45,72951,62106],{"class":257},[45,72953,51518],{"class":51},[45,72955,62111],{"class":257},[45,72957,1373],{"class":51},[45,72959,72960],{"class":47,"line":32726},[45,72961,2270],{"class":51},[45,72963,72964],{"class":47,"line":32732},[45,72965,2483],{"emptyLinePlaceholder":133},[45,72967,72968,72970,72972,72975,72977],{"class":47,"line":32738},[45,72969,72919],{"class":51381},[45,72971,70225],{"class":51381},[45,72973,72974],{"class":51381}," td",[45,72976,1481],{"class":51381},[45,72978,15655],{"class":51},[45,72980,72981,72983,72985,72987],{"class":47,"line":32749},[45,72982,55090],{"class":257},[45,72984,51518],{"class":51},[45,72986,60950],{"class":257},[45,72988,1373],{"class":51},[45,72990,72991,72993,72995,72997,72999],{"class":47,"line":32755},[45,72992,54852],{"class":257},[45,72994,51518],{"class":51},[45,72996,1114],{"class":257},[45,72998,51573],{"class":93},[45,73000,1373],{"class":51},[45,73002,73003,73005,73007,73009,73011],{"class":47,"line":32775},[45,73004,54866],{"class":257},[45,73006,51518],{"class":51},[45,73008,1032],{"class":257},[45,73010,51573],{"class":93},[45,73012,1373],{"class":51},[45,73014,73015,73017,73019,73021,73023],{"class":47,"line":32781},[45,73016,57440],{"class":257},[45,73018,51518],{"class":51},[45,73020,1032],{"class":257},[45,73022,51573],{"class":93},[45,73024,1373],{"class":51},[45,73026,73027,73029,73031,73033,73035],{"class":47,"line":32792},[45,73028,62158],{"class":257},[45,73030,51518],{"class":51},[45,73032,286],{"class":257},[45,73034,51573],{"class":93},[45,73036,1373],{"class":51},[45,73038,73039,73041,73043,73045],{"class":47,"line":32798},[45,73040,57497],{"class":257},[45,73042,51518],{"class":51},[45,73044,60923],{"class":257},[45,73046,1373],{"class":51},[45,73048,73049,73051,73053,73055],{"class":47,"line":32804},[45,73050,57367],{"class":257},[45,73052,51518],{"class":51},[45,73054,51673],{"class":257},[45,73056,1373],{"class":51},[45,73058,73059,73061,73063,73065],{"class":47,"line":32810},[45,73060,64051],{"class":257},[45,73062,51518],{"class":51},[45,73064,54818],{"class":257},[45,73066,1373],{"class":51},[45,73068,73069,73071,73073,73076],{"class":47,"line":32816},[45,73070,54965],{"class":257},[45,73072,51518],{"class":51},[45,73074,73075],{"class":257},"orange",[45,73077,1373],{"class":51},[45,73079,73080,73082,73084,73087,73089],{"class":47,"line":32822},[45,73081,55215],{"class":257},[45,73083,51518],{"class":51},[45,73085,73086],{"class":257},"12.5",[45,73088,51573],{"class":93},[45,73090,1373],{"class":51},[45,73092,73093],{"class":47,"line":32828},[45,73094,2270],{"class":51},[45,73096,73097,73099,73101],{"class":47,"line":32834},[45,73098,52498],{"class":51},[45,73100,121],{"class":51381},[45,73102,51388],{"class":51},[45,73104,73105,73107,73109],{"class":47,"line":32854},[45,73106,51866],{"class":51},[45,73108,51415],{"class":51381},[45,73110,51388],{"class":51},[45,73112,73113],{"class":47,"line":32860},[45,73114,2483],{"emptyLinePlaceholder":133},[45,73116,73117,73119,73121],{"class":47,"line":32876},[45,73118,1117],{"class":51},[45,73120,51881],{"class":51381},[45,73122,51388],{"class":51},[45,73124,73125,73127,73129,73132,73134],{"class":47,"line":32882},[45,73126,52225],{"class":51},[45,73128,30],{"class":51381},[45,73130,73131],{"class":51},">学生就业统计表\u003C\u002F",[45,73133,30],{"class":51381},[45,73135,51388],{"class":51},[45,73137,73138,73140,73142,73144,73146,73148,73150,73152,73154],{"class":47,"line":32896},[45,73139,52225],{"class":51},[45,73141,66706],{"class":51381},[45,73143,53567],{"class":2046},[45,73145,254],{"class":51},[45,73147,62745],{"class":313},[45,73149,69151],{"class":2046},[45,73151,254],{"class":51},[45,73153,31857],{"class":313},[45,73155,51388],{"class":51},[45,73157,73158,73160,73162,73164,73166,73168,73170,73172,73174,73176,73178,73181,73183,73185,73187],{"class":47,"line":32902},[45,73159,51422],{"class":51},[45,73161,53902],{"class":51381},[45,73163,53905],{"class":2046},[45,73165,254],{"class":51},[45,73167,62780],{"class":313},[45,73169,15003],{"class":2046},[45,73171,254],{"class":51},[45,73173,69177],{"class":313},[45,73175,61101],{"class":2046},[45,73177,254],{"class":51},[45,73179,73180],{"class":313},"\"姓名\"",[45,73182,53567],{"class":2046},[45,73184,254],{"class":51},[45,73186,69177],{"class":313},[45,73188,51388],{"class":51},[45,73190,73191,73193,73195,73197,73199,73201,73203,73205,73207,73209,73211,73214,73216,73218,73220],{"class":47,"line":32917},[45,73192,51422],{"class":51},[45,73194,53902],{"class":51381},[45,73196,53905],{"class":2046},[45,73198,254],{"class":51},[45,73200,62780],{"class":313},[45,73202,15003],{"class":2046},[45,73204,254],{"class":51},[45,73206,69205],{"class":313},[45,73208,61101],{"class":2046},[45,73210,254],{"class":51},[45,73212,73213],{"class":313},"\"年龄\"",[45,73215,53567],{"class":2046},[45,73217,254],{"class":51},[45,73219,69205],{"class":313},[45,73221,51388],{"class":51},[45,73223,73224,73226,73228,73230,73232,73234,73236,73238,73240,73242,73244,73247,73249,73251,73253],{"class":47,"line":32923},[45,73225,51422],{"class":51},[45,73227,53902],{"class":51381},[45,73229,53905],{"class":2046},[45,73231,254],{"class":51},[45,73233,62780],{"class":313},[45,73235,15003],{"class":2046},[45,73237,254],{"class":51},[45,73239,69307],{"class":313},[45,73241,61101],{"class":2046},[45,73243,254],{"class":51},[45,73245,73246],{"class":313},"\"薪资\"",[45,73248,53567],{"class":2046},[45,73250,254],{"class":51},[45,73252,69307],{"class":313},[45,73254,51388],{"class":51},[45,73256,73257,73259,73261,73263,73265,73267,73269,73271,73273,73275,73277,73279],{"class":47,"line":32932},[45,73258,51422],{"class":51},[45,73260,69225],{"class":51381},[45,73262,15003],{"class":2046},[45,73264,254],{"class":51},[45,73266,69232],{"class":313},[45,73268,15042],{"class":2046},[45,73270,254],{"class":51},[45,73272,7735],{"class":313},[45,73274,53567],{"class":2046},[45,73276,254],{"class":51},[45,73278,69232],{"class":313},[45,73280,51388],{"class":51},[45,73282,73283,73285,73287,73289,73291,73293,73295,73297],{"class":47,"line":32938},[45,73284,55315],{"class":51},[45,73286,69247],{"class":51381},[45,73288,66732],{"class":2046},[45,73290,254],{"class":51},[45,73292,10044],{"class":313},[45,73294,69256],{"class":51},[45,73296,69247],{"class":51381},[45,73298,51388],{"class":51},[45,73300,73301,73303,73305,73307,73309,73311,73313,73315],{"class":47,"line":32947},[45,73302,55315],{"class":51},[45,73304,69247],{"class":51381},[45,73306,66732],{"class":2046},[45,73308,254],{"class":51},[45,73310,10113],{"class":313},[45,73312,69275],{"class":51},[45,73314,69247],{"class":51381},[45,73316,51388],{"class":51},[45,73318,73319,73321,73323],{"class":47,"line":32953},[45,73320,51857],{"class":51},[45,73322,69225],{"class":51381},[45,73324,51388],{"class":51},[45,73326,73327,73329,73331,73333,73335,73337,73339,73341,73343,73345,73347,73349],{"class":47,"line":32959},[45,73328,51422],{"class":51},[45,73330,69225],{"class":51381},[45,73332,15003],{"class":2046},[45,73334,254],{"class":51},[45,73336,69329],{"class":313},[45,73338,15042],{"class":2046},[45,73340,254],{"class":51},[45,73342,7735],{"class":313},[45,73344,53567],{"class":2046},[45,73346,254],{"class":51},[45,73348,69329],{"class":313},[45,73350,51388],{"class":51},[45,73352,73353,73355,73357,73359,73361,73363,73365,73367],{"class":47,"line":32968},[45,73354,55315],{"class":51},[45,73356,69247],{"class":51381},[45,73358,66732],{"class":2046},[45,73360,254],{"class":51},[45,73362,69350],{"class":313},[45,73364,69353],{"class":51},[45,73366,69247],{"class":51381},[45,73368,51388],{"class":51},[45,73370,73371,73373,73375,73377,73379,73381,73383,73385],{"class":47,"line":32974},[45,73372,55315],{"class":51},[45,73374,69247],{"class":51381},[45,73376,66732],{"class":2046},[45,73378,254],{"class":51},[45,73380,69370],{"class":313},[45,73382,69373],{"class":51},[45,73384,69247],{"class":51381},[45,73386,51388],{"class":51},[45,73388,73389,73391,73393,73395,73397,73399,73401,73403],{"class":47,"line":32985},[45,73390,55315],{"class":51},[45,73392,69247],{"class":51381},[45,73394,66732],{"class":2046},[45,73396,254],{"class":51},[45,73398,69390],{"class":313},[45,73400,69393],{"class":51},[45,73402,69247],{"class":51381},[45,73404,51388],{"class":51},[45,73406,73407,73409,73411,73413,73415,73417,73419,73421],{"class":47,"line":32991},[45,73408,55315],{"class":51},[45,73410,69247],{"class":51381},[45,73412,66732],{"class":2046},[45,73414,254],{"class":51},[45,73416,69410],{"class":313},[45,73418,69413],{"class":51},[45,73420,69247],{"class":51381},[45,73422,51388],{"class":51},[45,73424,73425,73427,73429,73431,73433,73435,73437,73439],{"class":47,"line":33010},[45,73426,55315],{"class":51},[45,73428,69247],{"class":51381},[45,73430,66732],{"class":2046},[45,73432,254],{"class":51},[45,73434,69430],{"class":313},[45,73436,69433],{"class":51},[45,73438,69247],{"class":51381},[45,73440,51388],{"class":51},[45,73442,73443,73445,73447],{"class":47,"line":33016},[45,73444,51857],{"class":51},[45,73446,69225],{"class":51381},[45,73448,51388],{"class":51},[45,73450,73451,73453,73455],{"class":47,"line":33027},[45,73452,51422],{"class":51},[45,73454,53968],{"class":51381},[45,73456,51388],{"class":51},[45,73458,73459,73461,73463,73466,73468,73471,73473],{"class":47,"line":33033},[45,73460,55315],{"class":51},[45,73462,45],{"class":51381},[45,73464,73465],{"class":51},">+\u003C\u002F",[45,73467,45],{"class":51381},[45,73469,73470],{"class":51},">添加\u003C\u002F",[45,73472,53968],{"class":51381},[45,73474,51388],{"class":51},[45,73476,73477,73479,73481],{"class":47,"line":33053},[45,73478,52498],{"class":51},[45,73480,66706],{"class":51381},[45,73482,51388],{"class":51},[45,73484,73485,73487,73489,73491,73493,73495,73498,73500,73503,73505,73508,73510],{"class":47,"line":33069},[45,73486,52225],{"class":51},[45,73488,51692],{"class":51381},[45,73490,53567],{"class":2046},[45,73492,254],{"class":51},[45,73494,62661],{"class":313},[45,73496,73497],{"class":51},">共有数据 \u003C",[45,73499,45],{"class":51381},[45,73501,73502],{"class":51},">0\u003C\u002F",[45,73504,45],{"class":51381},[45,73506,73507],{"class":51},"> 条\u003C\u002F",[45,73509,51692],{"class":51381},[45,73511,51388],{"class":51},[45,73513,73514,73516,73518],{"class":47,"line":33075},[45,73515,52225],{"class":51},[45,73517,346],{"class":51381},[45,73519,51388],{"class":51},[45,73521,73522,73524,73526],{"class":47,"line":33089},[45,73523,51422],{"class":51},[45,73525,349],{"class":51381},[45,73527,51388],{"class":51},[45,73529,73530,73532,73534],{"class":47,"line":33095},[45,73531,55315],{"class":51},[45,73533,352],{"class":51381},[45,73535,51388],{"class":51},[45,73537,73538,73540,73542,73545,73547],{"class":47,"line":33101},[45,73539,55383],{"class":51},[45,73541,355],{"class":51381},[45,73543,73544],{"class":51},">ID\u003C\u002F",[45,73546,355],{"class":51381},[45,73548,51388],{"class":51},[45,73550,73551,73553,73555,73557,73559],{"class":47,"line":33112},[45,73552,55383],{"class":51},[45,73554,355],{"class":51381},[45,73556,69536],{"class":51},[45,73558,355],{"class":51381},[45,73560,51388],{"class":51},[45,73562,73563,73565,73567,73569,73571],{"class":47,"line":33118},[45,73564,55383],{"class":51},[45,73566,355],{"class":51381},[45,73568,69549],{"class":51},[45,73570,355],{"class":51381},[45,73572,51388],{"class":51},[45,73574,73575,73577,73579,73581,73583],{"class":47,"line":33124},[45,73576,55383],{"class":51},[45,73578,355],{"class":51381},[45,73580,69562],{"class":51},[45,73582,355],{"class":51381},[45,73584,51388],{"class":51},[45,73586,73587,73589,73591,73593,73595],{"class":47,"line":33134},[45,73588,55383],{"class":51},[45,73590,355],{"class":51381},[45,73592,69575],{"class":51},[45,73594,355],{"class":51381},[45,73596,51388],{"class":51},[45,73598,73599,73601,73603,73605,73607],{"class":47,"line":33140},[45,73600,55383],{"class":51},[45,73602,355],{"class":51381},[45,73604,69588],{"class":51},[45,73606,355],{"class":51381},[45,73608,51388],{"class":51},[45,73610,73611,73613,73615,73618,73620],{"class":47,"line":33151},[45,73612,55383],{"class":51},[45,73614,355],{"class":51381},[45,73616,73617],{"class":51},">录入时间\u003C\u002F",[45,73619,355],{"class":51381},[45,73621,51388],{"class":51},[45,73623,73624,73626,73628,73630,73632],{"class":47,"line":33157},[45,73625,55383],{"class":51},[45,73627,355],{"class":51381},[45,73629,69601],{"class":51},[45,73631,355],{"class":51381},[45,73633,51388],{"class":51},[45,73635,73636,73638,73640],{"class":47,"line":33167},[45,73637,55488],{"class":51},[45,73639,352],{"class":51381},[45,73641,51388],{"class":51},[45,73643,73644,73646,73648],{"class":47,"line":33172},[45,73645,51857],{"class":51},[45,73647,349],{"class":51381},[45,73649,51388],{"class":51},[45,73651,73652,73654,73656],{"class":47,"line":33178},[45,73653,51422],{"class":51},[45,73655,393],{"class":51381},[45,73657,51388],{"class":51},[45,73659,73660],{"class":47,"line":33227},[45,73661,73662],{"class":267},"      \u003C!-- \u003Ctr>\n",[45,73664,73665],{"class":47,"line":33274},[45,73666,73667],{"class":267},"        \u003Ctd>1\u003C\u002Ftd>\n",[45,73669,73670],{"class":47,"line":33279},[45,73671,73667],{"class":267},[45,73673,73674],{"class":47,"line":33285},[45,73675,73667],{"class":267},[45,73677,73678],{"class":47,"line":33304},[45,73679,73667],{"class":267},[45,73681,73682],{"class":47,"line":33310},[45,73683,73667],{"class":267},[45,73685,73686],{"class":47,"line":33330},[45,73687,73667],{"class":267},[45,73689,73690],{"class":47,"line":33336},[45,73691,73667],{"class":267},[45,73693,73694],{"class":47,"line":33342},[45,73695,73696],{"class":267},"        \u003Ctd>\n",[45,73698,73699],{"class":47,"line":33352},[45,73700,73701],{"class":267},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[45,73703,73704],{"class":47,"line":33357},[45,73705,73706],{"class":267},"        \u003C\u002Ftd>\n",[45,73708,73709],{"class":47,"line":33363},[45,73710,73711],{"class":267},"      \u003C\u002Ftr> -->\n",[45,73713,73714,73716,73718],{"class":47,"line":33379},[45,73715,51857],{"class":51},[45,73717,393],{"class":51381},[45,73719,51388],{"class":51},[45,73721,73722,73724,73726],{"class":47,"line":33424},[45,73723,52498],{"class":51},[45,73725,346],{"class":51381},[45,73727,51388],{"class":51},[45,73729,73730,73732,73734],{"class":47,"line":33430},[45,73731,52225],{"class":51},[45,73733,51894],{"class":51381},[45,73735,51388],{"class":51},[45,73737,73738],{"class":47,"line":33436},[45,73739,73740],{"class":267},"    \u002F\u002F const initData = [{\n",[45,73742,73743],{"class":47,"line":33442},[45,73744,73745],{"class":267},"    \u002F\u002F   unameId: 1,\n",[45,73747,73748],{"class":47,"line":33453},[45,73749,73750],{"class":267},"    \u002F\u002F   uname: '华晨宇',\n",[45,73752,73753],{"class":47,"line":33459},[45,73754,73755],{"class":267},"    \u002F\u002F   age: 22,\n",[45,73757,73758],{"class":47,"line":33465},[45,73759,73760],{"class":267},"    \u002F\u002F   salary: 12000,\n",[45,73762,73763],{"class":47,"line":33471},[45,73764,73765],{"class":267},"    \u002F\u002F   gender: '男',\n",[45,73767,73768],{"class":47,"line":33489},[45,73769,73770],{"class":267},"    \u002F\u002F   city: '北京',\n",[45,73772,73773],{"class":47,"line":33503},[45,73774,73775],{"class":267},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[45,73777,73778],{"class":47,"line":33512},[45,73779,73780],{"class":267},"    \u002F\u002F }]\n",[45,73782,73783],{"class":47,"line":33521},[45,73784,73785],{"class":267},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[45,73787,73788],{"class":47,"line":33530},[45,73789,73790],{"class":267},"    \u002F\u002F 1.渲染业务\n",[45,73792,73793],{"class":47,"line":33539},[45,73794,73795],{"class":267},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[45,73797,73798],{"class":47,"line":33545},[45,73799,73800],{"class":267},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[45,73802,73803],{"class":47,"line":33551},[45,73804,73805],{"class":267},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[45,73807,73808],{"class":47,"line":33559},[45,73809,2483],{"emptyLinePlaceholder":133},[45,73811,73812],{"class":47,"line":33564},[45,73813,73814],{"class":267},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[45,73816,73817],{"class":47,"line":33570},[45,73818,73819],{"class":267},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[45,73821,73822,73824,73826,73828],{"class":47,"line":33581},[45,73823,11304],{"class":93},[45,73825,57776],{"class":257},[45,73827,13647],{"class":93},[45,73829,51919],{"class":51},[45,73831,73832,73835,73837],{"class":47,"line":33587},[45,73833,73834],{"class":51},"    console.",[45,73836,58328],{"class":2046},[45,73838,52493],{"class":51},[45,73840,73841],{"class":47,"line":33607},[45,73842,2483],{"emptyLinePlaceholder":133},[45,73844,73845],{"class":47,"line":33613},[45,73846,73847],{"class":267},"    \u002F\u002F 时间函数\n",[45,73849,73850,73852,73855],{"class":47,"line":33619},[45,73851,70165],{"class":93},[45,73853,73854],{"class":2046}," getTime",[45,73856,10936],{"class":51},[45,73858,73859,73861,73864,73866,73868,73871],{"class":47,"line":33625},[45,73860,58309],{"class":93},[45,73862,73863],{"class":257}," date",[45,73865,13647],{"class":93},[45,73867,11661],{"class":93},[45,73869,73870],{"class":2046}," Date",[45,73872,2059],{"class":51},[45,73874,73875,73877,73879,73881,73884,73887,73889,73891,73893,73896,73899,73901,73903,73905,73907,73909,73911,73913],{"class":47,"line":33642},[45,73876,58309],{"class":93},[45,73878,16174],{"class":257},[45,73880,13647],{"class":93},[45,73882,73883],{"class":51}," date.",[45,73885,73886],{"class":2046},"getHours",[45,73888,13133],{"class":51},[45,73890,1117],{"class":93},[45,73892,2121],{"class":257},[45,73894,73895],{"class":93}," ?",[45,73897,73898],{"class":313}," '0'",[45,73900,45647],{"class":93},[45,73902,73883],{"class":51},[45,73904,73886],{"class":2046},[45,73906,13133],{"class":51},[45,73908,1066],{"class":93},[45,73910,73883],{"class":51},[45,73912,73886],{"class":2046},[45,73914,2059],{"class":51},[45,73916,73917,73919,73922,73924,73926,73929,73931,73933,73935,73937,73939,73941,73943,73945,73947,73949,73951,73953],{"class":47,"line":33648},[45,73918,58309],{"class":93},[45,73920,73921],{"class":257}," m",[45,73923,13647],{"class":93},[45,73925,73883],{"class":51},[45,73927,73928],{"class":2046},"getMinutes",[45,73930,13133],{"class":51},[45,73932,1117],{"class":93},[45,73934,2121],{"class":257},[45,73936,73895],{"class":93},[45,73938,73898],{"class":313},[45,73940,45647],{"class":93},[45,73942,73883],{"class":51},[45,73944,73928],{"class":2046},[45,73946,13133],{"class":51},[45,73948,1066],{"class":93},[45,73950,73883],{"class":51},[45,73952,73928],{"class":2046},[45,73954,2059],{"class":51},[45,73956,73957,73959,73961,73963,73965,73968,73970,73972,73974,73976,73978,73980,73982,73984,73986,73988,73990,73992],{"class":47,"line":33654},[45,73958,58309],{"class":93},[45,73960,8511],{"class":257},[45,73962,13647],{"class":93},[45,73964,73883],{"class":51},[45,73966,73967],{"class":2046},"getSeconds",[45,73969,13133],{"class":51},[45,73971,1117],{"class":93},[45,73973,2121],{"class":257},[45,73975,73895],{"class":93},[45,73977,73898],{"class":313},[45,73979,45647],{"class":93},[45,73981,73883],{"class":51},[45,73983,73967],{"class":2046},[45,73985,13133],{"class":51},[45,73987,1066],{"class":93},[45,73989,73883],{"class":51},[45,73991,73967],{"class":2046},[45,73993,2059],{"class":51},[45,73995,73996,73998,74001,74003,74005,74008,74010,74013,74015,74018,74020,74022,74025,74027,74029,74031,74033,74035,74037,74040,74042,74045,74047,74050,74052,74054,74056],{"class":47,"line":33660},[45,73997,58309],{"class":93},[45,73999,74000],{"class":257}," str",[45,74002,13647],{"class":93},[45,74004,62984],{"class":313},[45,74006,74007],{"class":51},"date",[45,74009,765],{"class":313},[45,74011,74012],{"class":2046},"getFullYear",[45,74014,2510],{"class":313},[45,74016,74017],{"class":313},"}\u002F${",[45,74019,74007],{"class":51},[45,74021,765],{"class":313},[45,74023,74024],{"class":2046},"getMonth",[45,74026,13133],{"class":313},[45,74028,689],{"class":93},[45,74030,25201],{"class":257},[45,74032,74017],{"class":313},[45,74034,74007],{"class":51},[45,74036,765],{"class":313},[45,74038,74039],{"class":2046},"getDate",[45,74041,2510],{"class":313},[45,74043,74044],{"class":313},"} ${",[45,74046,623],{"class":51},[45,74048,74049],{"class":313},"}:${",[45,74051,751],{"class":51},[45,74053,74049],{"class":313},[45,74055,902],{"class":51},[45,74057,74058],{"class":313},"}`\n",[45,74060,74061,74064],{"class":47,"line":33666},[45,74062,74063],{"class":93},"      return",[45,74065,74066],{"class":51}," str\n",[45,74068,74069],{"class":47,"line":33672},[45,74070,2270],{"class":51},[45,74072,74073],{"class":47,"line":33699},[45,74074,74075],{"class":267},"    \u002F\u002F 渲染函数\n",[45,74077,74078,74080,74082,74084,74086,74088,74090,74092],{"class":47,"line":33723},[45,74079,11304],{"class":93},[45,74081,69828],{"class":257},[45,74083,13647],{"class":93},[45,74085,54477],{"class":51},[45,74087,54480],{"class":2046},[45,74089,209],{"class":51},[45,74091,69839],{"class":313},[45,74093,215],{"class":51},[45,74095,74096,74098,74100],{"class":47,"line":33729},[45,74097,70165],{"class":93},[45,74099,70168],{"class":2046},[45,74101,10936],{"class":51},[45,74103,74104],{"class":47,"line":33735},[45,74105,74106],{"class":267},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[45,74108,74109],{"class":47,"line":33741},[45,74110,74111],{"class":267},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[45,74113,74114,74116,74119,74121,74123,74126,74128,74130,74132,74135,74137,74140],{"class":47,"line":33752},[45,74115,58309],{"class":93},[45,74117,74118],{"class":257}," trArr",[45,74120,13647],{"class":93},[45,74122,52046],{"class":51},[45,74124,74125],{"class":2046},"map",[45,74127,209],{"class":51},[45,74129,54530],{"class":93},[45,74131,1741],{"class":51},[45,74133,74134],{"class":5299},"ele",[45,74136,12518],{"class":51},[45,74138,74139],{"class":5299},"index",[45,74141,12525],{"class":51},[45,74143,74144,74146],{"class":47,"line":33763},[45,74145,14835],{"class":93},[45,74147,70249],{"class":313},[45,74149,74150],{"class":47,"line":33769},[45,74151,74152],{"class":313},"      \u003Ctr>\n",[45,74154,74155,74157,74159,74161,74164],{"class":47,"line":33786},[45,74156,70254],{"class":313},[45,74158,74134],{"class":51},[45,74160,765],{"class":313},[45,74162,74163],{"class":51},"unameId",[45,74165,70269],{"class":313},[45,74167,74168,74170,74172,74174,74176],{"class":47,"line":33809},[45,74169,70254],{"class":313},[45,74171,74134],{"class":51},[45,74173,765],{"class":313},[45,74175,70285],{"class":51},[45,74177,70269],{"class":313},[45,74179,74180,74182,74184,74186,74188],{"class":47,"line":33832},[45,74181,70254],{"class":313},[45,74183,74134],{"class":51},[45,74185,765],{"class":313},[45,74187,70302],{"class":51},[45,74189,70269],{"class":313},[45,74191,74192,74194,74196,74198,74200],{"class":47,"line":33838},[45,74193,70254],{"class":313},[45,74195,74134],{"class":51},[45,74197,765],{"class":313},[45,74199,70319],{"class":51},[45,74201,70269],{"class":313},[45,74203,74204,74206,74208,74210,74212],{"class":47,"line":33843},[45,74205,70254],{"class":313},[45,74207,74134],{"class":51},[45,74209,765],{"class":313},[45,74211,70336],{"class":51},[45,74213,70269],{"class":313},[45,74215,74216,74218,74220,74222,74224],{"class":47,"line":33852},[45,74217,70254],{"class":313},[45,74219,74134],{"class":51},[45,74221,765],{"class":313},[45,74223,70353],{"class":51},[45,74225,70269],{"class":313},[45,74227,74228,74230,74232,74234,74236],{"class":47,"line":33862},[45,74229,70254],{"class":313},[45,74231,74134],{"class":51},[45,74233,765],{"class":313},[45,74235,2470],{"class":51},[45,74237,70269],{"class":313},[45,74239,74240],{"class":47,"line":33868},[45,74241,73696],{"class":313},[45,74243,74244,74247,74249],{"class":47,"line":33873},[45,74245,74246],{"class":313},"          \u003Ca href=\"#\" data-id=\"${",[45,74248,74139],{"class":51},[45,74250,74251],{"class":313},"}\">删除\u003C\u002Fa>\n",[45,74253,74254],{"class":47,"line":33879},[45,74255,73706],{"class":313},[45,74257,74258],{"class":47,"line":33892},[45,74259,74260],{"class":313},"      \u003C\u002Ftr>\n",[45,74262,74263],{"class":47,"line":33898},[45,74264,74265],{"class":313},"  `\n",[45,74267,74268],{"class":47,"line":33909},[45,74269,64896],{"class":51},[45,74271,74272,74274,74276],{"class":47,"line":33920},[45,74273,58325],{"class":51},[45,74275,58328],{"class":2046},[45,74277,74278],{"class":51},"(trArr)\n",[45,74280,74281],{"class":47,"line":33939},[45,74282,2483],{"emptyLinePlaceholder":133},[45,74284,74285],{"class":47,"line":49599},[45,74286,74287],{"class":267},"      \u002F\u002F (2) 把数组转换为字符串join\n",[45,74289,74290],{"class":47,"line":49604},[45,74291,74292],{"class":267},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[45,74294,74295,74297,74299,74302,74305,74307,74310],{"class":47,"line":49613},[45,74296,70180],{"class":51},[45,74298,254],{"class":93},[45,74300,74301],{"class":51}," trArr.",[45,74303,74304],{"class":2046},"join",[45,74306,209],{"class":51},[45,74308,74309],{"class":313},"''",[45,74311,215],{"class":51},[45,74313,74314],{"class":47,"line":49622},[45,74315,74316],{"class":267},"      \u002F\u002F 显示共有几条\n",[45,74318,74319,74321,74323,74325,74328,74331,74333,74335],{"class":47,"line":49627},[45,74320,55852],{"class":51},[45,74322,54480],{"class":2046},[45,74324,209],{"class":51},[45,74326,74327],{"class":313},"'.total span'",[45,74329,74330],{"class":51},").innerHTML ",[45,74332,254],{"class":93},[45,74334,52046],{"class":51},[45,74336,55912],{"class":257},[45,74338,74339],{"class":47,"line":49632},[45,74340,2270],{"class":51},[45,74342,74343],{"class":47,"line":49637},[45,74344,74345],{"class":267},"    \u002F\u002F render()\n",[45,74347,74348],{"class":47,"line":49650},[45,74349,2483],{"emptyLinePlaceholder":133},[45,74351,74352],{"class":47,"line":49655},[45,74353,74354],{"class":267},"    \u002F\u002F 获取DOM对象\n",[45,74356,74357,74359,74361,74363,74365,74367,74369,74371],{"class":47,"line":49664},[45,74358,11304],{"class":93},[45,74360,69902],{"class":257},[45,74362,13647],{"class":93},[45,74364,54477],{"class":51},[45,74366,54480],{"class":2046},[45,74368,209],{"class":51},[45,74370,69913],{"class":313},[45,74372,215],{"class":51},[45,74374,74375,74377,74379,74381,74383,74385,74387,74389],{"class":47,"line":49673},[45,74376,11304],{"class":93},[45,74378,69729],{"class":257},[45,74380,13647],{"class":93},[45,74382,54477],{"class":51},[45,74384,54480],{"class":2046},[45,74386,209],{"class":51},[45,74388,69740],{"class":313},[45,74390,215],{"class":51},[45,74392,74393,74395,74397,74399,74401,74403,74405,74407],{"class":47,"line":49690},[45,74394,11304],{"class":93},[45,74396,15772],{"class":257},[45,74398,13647],{"class":93},[45,74400,54477],{"class":51},[45,74402,54480],{"class":2046},[45,74404,209],{"class":51},[45,74406,69759],{"class":313},[45,74408,215],{"class":51},[45,74410,74412,74414,74416,74418,74420,74422,74424,74426],{"class":47,"line":74411},231,[45,74413,11304],{"class":93},[45,74415,69788],{"class":257},[45,74417,13647],{"class":93},[45,74419,54477],{"class":51},[45,74421,54480],{"class":2046},[45,74423,209],{"class":51},[45,74425,69799],{"class":313},[45,74427,215],{"class":51},[45,74429,74431,74433,74435,74437,74439,74441,74443,74445],{"class":47,"line":74430},232,[45,74432,11304],{"class":93},[45,74434,69768],{"class":257},[45,74436,13647],{"class":93},[45,74438,54477],{"class":51},[45,74440,54480],{"class":2046},[45,74442,209],{"class":51},[45,74444,69779],{"class":313},[45,74446,215],{"class":51},[45,74448,74450,74452,74454,74456,74458,74460,74462,74464],{"class":47,"line":74449},233,[45,74451,11304],{"class":93},[45,74453,69808],{"class":257},[45,74455,13647],{"class":93},[45,74457,54477],{"class":51},[45,74459,54480],{"class":2046},[45,74461,209],{"class":51},[45,74463,69819],{"class":313},[45,74465,215],{"class":51},[45,74467,74469],{"class":47,"line":74468},234,[45,74470,2483],{"emptyLinePlaceholder":133},[45,74472,74474],{"class":47,"line":74473},235,[45,74475,74476],{"class":267},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[45,74478,74480,74482,74484,74486,74488,74490,74492,74494,74496],{"class":47,"line":74479},236,[45,74481,69920],{"class":51},[45,74483,57894],{"class":2046},[45,74485,209],{"class":51},[45,74487,69927],{"class":313},[45,74489,12518],{"class":51},[45,74491,54530],{"class":93},[45,74493,1741],{"class":51},[45,74495,283],{"class":5299},[45,74497,12525],{"class":51},[45,74499,74501],{"class":47,"line":74500},237,[45,74502,74503],{"class":267},"      \u002F\u002F 禁止浏览器跳转\n",[45,74505,74507,74509,74511],{"class":47,"line":74506},238,[45,74508,69947],{"class":51},[45,74510,69950],{"class":2046},[45,74512,2059],{"class":51},[45,74514,74516],{"class":47,"line":74515},239,[45,74517,74518],{"class":267},"      \u002F\u002F 非空判断\n",[45,74520,74522],{"class":47,"line":74521},240,[45,74523,74524],{"class":267},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[45,74526,74528],{"class":47,"line":74527},241,[45,74529,74530],{"class":267},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[45,74532,74534,74536,74538,74540,74543,74545,74548,74551,74553,74555],{"class":47,"line":74533},242,[45,74535,54561],{"class":93},[45,74537,1741],{"class":51},[45,74539,435],{"class":93},[45,74541,74542],{"class":51},"uname.value ",[45,74544,71438],{"class":93},[45,74546,74547],{"class":93}," !",[45,74549,74550],{"class":51},"age.value ",[45,74552,71438],{"class":93},[45,74554,74547],{"class":93},[45,74556,74557],{"class":51},"salary.value) {\n",[45,74559,74561,74563,74565,74567,74569],{"class":47,"line":74560},243,[45,74562,14835],{"class":93},[45,74564,70021],{"class":2046},[45,74566,209],{"class":51},[45,74568,70026],{"class":313},[45,74570,215],{"class":51},[45,74572,74574],{"class":47,"line":74573},244,[45,74575,52479],{"class":51},[45,74577,74579,74581,74583],{"class":47,"line":74578},245,[45,74580,58088],{"class":51},[45,74582,51965],{"class":2046},[45,74584,74585],{"class":51},"({\n",[45,74587,74589],{"class":47,"line":74588},246,[45,74590,74591],{"class":267},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[45,74593,74595],{"class":47,"line":74594},247,[45,74596,74597],{"class":267},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[45,74599,74601],{"class":47,"line":74600},248,[45,74602,74603],{"class":267},"        \u002F\u002F 对象的序号应为数组长度+1\n",[45,74605,74607],{"class":47,"line":74606},249,[45,74608,74609],{"class":267},"        \u002F\u002F unameId: arr.length + 1,\n",[45,74611,74613],{"class":47,"line":74612},250,[45,74614,2483],{"emptyLinePlaceholder":133},[45,74616,74618],{"class":47,"line":74617},251,[45,74619,74620],{"class":267},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[45,74622,74624],{"class":47,"line":74623},252,[45,74625,74626],{"class":267},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[45,74628,74630],{"class":47,"line":74629},253,[45,74631,74632],{"class":267},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[45,74634,74636],{"class":47,"line":74635},254,[45,74637,74638],{"class":267},"        \u002F\u002F 0当假看\n",[45,74640,74642,74645,74647,74649,74652,74654,74656,74658,74661,74663,74665,74668,74670],{"class":47,"line":74641},255,[45,74643,74644],{"class":51},"        unameId: arr.",[45,74646,52049],{"class":257},[45,74648,73895],{"class":93},[45,74650,74651],{"class":51}," arr[arr.",[45,74653,52049],{"class":257},[45,74655,52352],{"class":93},[45,74657,25201],{"class":257},[45,74659,74660],{"class":51},"].unameId ",[45,74662,689],{"class":93},[45,74664,25201],{"class":257},[45,74666,74667],{"class":93}," :",[45,74669,25201],{"class":257},[45,74671,31547],{"class":51},[45,74673,74675],{"class":47,"line":74674},256,[45,74676,70074],{"class":51},[45,74678,74680],{"class":47,"line":74679},257,[45,74681,70079],{"class":51},[45,74683,74685],{"class":47,"line":74684},258,[45,74686,70089],{"class":51},[45,74688,74690],{"class":47,"line":74689},259,[45,74691,70084],{"class":51},[45,74693,74695],{"class":47,"line":74694},260,[45,74696,74697],{"class":51},"        city: city.value,\n",[45,74699,74701],{"class":47,"line":74700},261,[45,74702,74703],{"class":267},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[45,74705,74707],{"class":47,"line":74706},262,[45,74708,74709],{"class":267},"        \u002F\u002F time: new Date().toDateString()\n",[45,74711,74713,74716,74719],{"class":47,"line":74712},263,[45,74714,74715],{"class":51},"        time: ",[45,74717,74718],{"class":2046},"getTime",[45,74720,2059],{"class":51},[45,74722,74724],{"class":47,"line":74723},264,[45,74725,64896],{"class":51},[45,74727,74729],{"class":47,"line":74728},265,[45,74730,74731],{"class":267},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[45,74733,74735,74737],{"class":47,"line":74734},266,[45,74736,70149],{"class":2046},[45,74738,2059],{"class":51},[45,74740,74742,74744,74746,74748,74750],{"class":47,"line":74741},267,[45,74743,70132],{"class":257},[45,74745,765],{"class":51},[45,74747,70137],{"class":2046},[45,74749,13133],{"class":51},[45,74751,74752],{"class":267},"\u002F\u002F重置表单\n",[45,74754,74756],{"class":47,"line":74755},268,[45,74757,74758],{"class":267},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[45,74760,74762,74765,74767,74769,74772,74774,74776,74778,74780],{"class":47,"line":74761},269,[45,74763,74764],{"class":51},"      localStorage.",[45,74766,71735],{"class":2046},[45,74768,209],{"class":51},[45,74770,74771],{"class":313},"'data'",[45,74773,12518],{"class":51},[45,74775,71745],{"class":257},[45,74777,765],{"class":51},[45,74779,71750],{"class":2046},[45,74781,74782],{"class":51},"(arr))\n",[45,74784,74786],{"class":47,"line":74785},270,[45,74787,33542],{"class":51},[45,74789,74791],{"class":47,"line":74790},271,[45,74792,2483],{"emptyLinePlaceholder":133},[45,74794,74796],{"class":47,"line":74795},272,[45,74797,74798],{"class":267},"    \u002F\u002F 3.删除业务\n",[45,74800,74802],{"class":47,"line":74801},273,[45,74803,74804],{"class":267},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[45,74806,74808,74810,74812,74814,74816,74818,74820,74822,74824],{"class":47,"line":74807},274,[45,74809,70422],{"class":51},[45,74811,57894],{"class":2046},[45,74813,209],{"class":51},[45,74815,57899],{"class":313},[45,74817,12518],{"class":51},[45,74819,54530],{"class":93},[45,74821,1741],{"class":51},[45,74823,283],{"class":5299},[45,74825,12525],{"class":51},[45,74827,74829],{"class":47,"line":74828},275,[45,74830,74831],{"class":267},"      \u002F\u002F 判断是否点击的是删除按钮\n",[45,74833,74835,74837,74839,74841,74843],{"class":47,"line":74834},276,[45,74836,54561],{"class":93},[45,74838,67115],{"class":51},[45,74840,54567],{"class":93},[45,74842,68337],{"class":313},[45,74844,12525],{"class":51},[45,74846,74848],{"class":47,"line":74847},277,[45,74849,74850],{"class":267},"        \u002F\u002F alert(1)\n",[45,74852,74854],{"class":47,"line":74853},278,[45,74855,74856],{"class":267},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[45,74858,74860],{"class":47,"line":74859},279,[45,74861,74862],{"class":267},"        \u002F\u002F console.log(e.target)\n",[45,74864,74866],{"class":47,"line":74865},280,[45,74867,74868],{"class":267},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[45,74870,74872],{"class":47,"line":74871},281,[45,74873,2483],{"emptyLinePlaceholder":133},[45,74875,74877],{"class":47,"line":74876},282,[45,74878,74879],{"class":267},"        \u002F\u002F 确认框，确然是否真的要删除\n",[45,74881,74883],{"class":47,"line":74882},283,[45,74884,74885],{"class":267},"        \u002F\u002F confirm()为确认框\n",[45,74887,74889],{"class":47,"line":74888},284,[45,74890,74891],{"class":267},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[45,74893,74895,74897,74899,74902,74904,74907],{"class":47,"line":74894},285,[45,74896,2580],{"class":93},[45,74898,1741],{"class":51},[45,74900,74901],{"class":2046},"confirm",[45,74903,209],{"class":51},[45,74905,74906],{"class":313},"'您确定要删除这条数据吗？'",[45,74908,74909],{"class":51},")) {\n",[45,74911,74913,74916,74918,74920,74922],{"class":47,"line":74912},286,[45,74914,74915],{"class":51},"          arr.",[45,74917,58091],{"class":2046},[45,74919,70475],{"class":51},[45,74921,426],{"class":257},[45,74923,215],{"class":51},[45,74925,74927],{"class":47,"line":74926},287,[45,74928,74929],{"class":267},"          \u002F\u002F 3.4 重新渲染页面\n",[45,74931,74933,74936],{"class":47,"line":74932},288,[45,74934,74935],{"class":2046},"          render",[45,74937,2059],{"class":51},[45,74939,74941],{"class":47,"line":74940},289,[45,74942,74943],{"class":267},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[45,74945,74947,74950,74952,74954,74956,74958,74960,74962,74964],{"class":47,"line":74946},290,[45,74948,74949],{"class":51},"          localStorage.",[45,74951,71735],{"class":2046},[45,74953,209],{"class":51},[45,74955,74771],{"class":313},[45,74957,12518],{"class":51},[45,74959,71745],{"class":257},[45,74961,765],{"class":51},[45,74963,71750],{"class":2046},[45,74965,74782],{"class":51},[45,74967,74969],{"class":47,"line":74968},291,[45,74970,2612],{"class":51},[45,74972,74974],{"class":47,"line":74973},292,[45,74975,52479],{"class":51},[45,74977,74979],{"class":47,"line":74978},293,[45,74980,2483],{"emptyLinePlaceholder":133},[45,74982,74984],{"class":47,"line":74983},294,[45,74985,33542],{"class":51},[45,74987,74989],{"class":47,"line":74988},295,[45,74990,2483],{"emptyLinePlaceholder":133},[45,74992,74994,74996,74998],{"class":47,"line":74993},296,[45,74995,52498],{"class":51},[45,74997,51894],{"class":51381},[45,74999,51388],{"class":51},[45,75001,75003,75005,75007],{"class":47,"line":75002},297,[45,75004,51866],{"class":51},[45,75006,51881],{"class":51381},[45,75008,51388],{"class":51},[45,75010,75012],{"class":47,"line":75011},298,[45,75013,2483],{"emptyLinePlaceholder":133},[45,75015,75017,75019,75021],{"class":47,"line":75016},299,[45,75018,51866],{"class":51},[45,75020,50716],{"class":51381},[45,75022,51388],{"class":51},[30,75024,75026],{"id":75025},"_36-正则表达式","3.6 正则表达式",[10,75028,75029],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[10,75031,75032],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[10,75034,75035],{},"正则表达式的作用：",[1214,75037,75038,75045,75051],{},[162,75039,75040,75041,75044],{},"表单验证（ ",[358,75042,75043],{},"匹配"," ）",[162,75046,75047,75048,75044],{},"过滤敏感词（ ",[358,75049,75050],{},"替换",[162,75052,75053,75054,75044],{},"字符串中提取我们想要的部分（ ",[358,75055,75056],{},"提取",[176,75058,75060],{"id":75059},"_361-语法","3.6.1 语法",[10,75062,75063],{},"正则表达式使用步骤：",[159,75065,75066,75069],{},[162,75067,75068],{},"定义规则",[162,75070,75071],{},"查找是否匹配",[10,75073,75074],{},"正则表达式里边不需要写引号",[10,75076,75077],{},[1545,75078],{"alt":40,"src":75079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[10,75081,75082],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[10,75084,75085],{},"reg.test(str)",[10,75087,75088],{},[1545,75089],{"alt":40,"src":75090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[10,75092,75093],{},[1545,75094],{"alt":40,"src":75095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[176,75097,75099],{"id":75098},"_362-元字符","3.6.2 元字符",[159,75101,75102,75105,75108,75111,75118],{},[162,75103,75104],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[162,75106,75107],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[162,75109,75110],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[162,75112,75113,75114],{},"正则验证工具：",[13,75115,75116],{"href":75116,"rel":75117},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[17],[162,75119,75120],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22081,75122,75124],{"id":75123},"_3621-边界符","3.6.2.1 边界符",[10,75126,75127],{},[1545,75128],{"alt":40,"src":75129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[10,75131,75132],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[10,75134,75135],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[10,75137,75138],{},"只匹配一次",[10,75140,75141],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22081,75143,75145],{"id":75144},"_3622-量词","3.6.2.2 量词",[10,75147,75148],{},[1545,75149],{"alt":40,"src":75150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[10,75152,75153],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22081,75155,75157],{"id":75156},"_3623-元字符","3.6.2.3 元字符",[10,75159,75160],{},[1545,75161],{"alt":40,"src":75162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[10,75164,75165],{},"匹配的是a或b或c []只选一个",[10,75167,75168],{},[1545,75169],{"alt":40,"src":75170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[10,75172,75173],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[10,75175,75176],{},[1545,75177],{"alt":40,"src":75178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[10,75180,75181],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[10,75183,75184],{},[1545,75185],{"alt":40,"src":75186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[35,75188,75190],{"className":50714,"code":75189,"language":50716,"meta":40,"style":40},"\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",[42,75191,75192,75202,75216,75220,75228,75242,75262,75274,75282,75286,75294,75302,75307,75338,75365,75393,75397,75402,75430,75461,75466,75471,75502,75534,75566,75570,75575,75606,75636,75666,75670,75675,75706,75737,75767,75797,75801,75806,75839,75843,75848,75879,75910,75914,75919,75950,75980,76011,76015,76020,76052,76083,76114,76141,76172,76204,76237,76268,76299,76331,76362,76370,76378,76382],{"__ignoreMap":40},[45,75193,75194,75196,75198,75200],{"class":47,"line":48},[45,75195,51378],{"class":51},[45,75197,51382],{"class":51381},[45,75199,51385],{"class":2046},[45,75201,51388],{"class":51},[45,75203,75204,75206,75208,75210,75212,75214],{"class":47,"line":125},[45,75205,1117],{"class":51},[45,75207,50716],{"class":51381},[45,75209,51397],{"class":2046},[45,75211,254],{"class":51},[45,75213,51402],{"class":313},[45,75215,51388],{"class":51},[45,75217,75218],{"class":47,"line":1262},[45,75219,2483],{"emptyLinePlaceholder":133},[45,75221,75222,75224,75226],{"class":47,"line":1277},[45,75223,1117],{"class":51},[45,75225,51415],{"class":51381},[45,75227,51388],{"class":51},[45,75229,75230,75232,75234,75236,75238,75240],{"class":47,"line":1283},[45,75231,52225],{"class":51},[45,75233,51425],{"class":51381},[45,75235,51428],{"class":2046},[45,75237,254],{"class":51},[45,75239,51433],{"class":313},[45,75241,51388],{"class":51},[45,75243,75244,75246,75248,75250,75252,75254,75256,75258,75260],{"class":47,"line":1297},[45,75245,52225],{"class":51},[45,75247,51425],{"class":51381},[45,75249,15003],{"class":2046},[45,75251,254],{"class":51},[45,75253,51472],{"class":313},[45,75255,51452],{"class":2046},[45,75257,254],{"class":51},[45,75259,51479],{"class":313},[45,75261,51388],{"class":51},[45,75263,75264,75266,75268,75270,75272],{"class":47,"line":1303},[45,75265,52225],{"class":51},[45,75267,51488],{"class":51381},[45,75269,51491],{"class":51},[45,75271,51488],{"class":51381},[45,75273,51388],{"class":51},[45,75275,75276,75278,75280],{"class":47,"line":1394},[45,75277,51866],{"class":51},[45,75279,51415],{"class":51381},[45,75281,51388],{"class":51},[45,75283,75284],{"class":47,"line":1400},[45,75285,2483],{"emptyLinePlaceholder":133},[45,75287,75288,75290,75292],{"class":47,"line":1412},[45,75289,1117],{"class":51},[45,75291,51881],{"class":51381},[45,75293,51388],{"class":51},[45,75295,75296,75298,75300],{"class":47,"line":1695},[45,75297,52225],{"class":51},[45,75299,51894],{"class":51381},[45,75301,51388],{"class":51},[45,75303,75304],{"class":47,"line":1700},[45,75305,75306],{"class":267},"    \u002F\u002F 元字符中\n",[45,75308,75309,75311,75313,75315,75317,75320,75322,75324,75327,75329,75332,75335],{"class":47,"line":1706},[45,75310,73834],{"class":51},[45,75312,58328],{"class":2046},[45,75314,209],{"class":51},[45,75316,791],{"class":313},[45,75318,75319],{"class":48058},"哈",[45,75321,791],{"class":313},[45,75323,765],{"class":51},[45,75325,75326],{"class":2046},"test",[45,75328,209],{"class":51},[45,75330,75331],{"class":313},"'哈'",[45,75333,75334],{"class":51},"))  ",[45,75336,75337],{"class":267},"\u002F\u002Ftrue\n",[45,75339,75340,75342,75344,75346,75348,75350,75352,75354,75356,75358,75361,75363],{"class":47,"line":1711},[45,75341,73834],{"class":51},[45,75343,58328],{"class":2046},[45,75345,209],{"class":51},[45,75347,791],{"class":313},[45,75349,75319],{"class":48058},[45,75351,791],{"class":313},[45,75353,765],{"class":51},[45,75355,75326],{"class":2046},[45,75357,209],{"class":51},[45,75359,75360],{"class":313},"'哈哈'",[45,75362,75334],{"class":51},[45,75364,75337],{"class":267},[45,75366,75367,75369,75371,75373,75375,75377,75379,75381,75383,75385,75388,75391],{"class":47,"line":1725},[45,75368,73834],{"class":51},[45,75370,58328],{"class":2046},[45,75372,209],{"class":51},[45,75374,791],{"class":313},[45,75376,75319],{"class":48058},[45,75378,791],{"class":313},[45,75380,765],{"class":51},[45,75382,75326],{"class":2046},[45,75384,209],{"class":51},[45,75386,75387],{"class":313},"'二哈'",[45,75389,75390],{"class":51},"))   ",[45,75392,75337],{"class":267},[45,75394,75395],{"class":47,"line":1730},[45,75396,2483],{"emptyLinePlaceholder":133},[45,75398,75399],{"class":47,"line":1736},[45,75400,75401],{"class":267},"    \u002F\u002F 1.边界符\n",[45,75403,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75424,75426,75428],{"class":47,"line":1757},[45,75405,73834],{"class":51},[45,75407,58328],{"class":2046},[45,75409,209],{"class":51},[45,75411,791],{"class":313},[45,75413,1173],{"class":93},[45,75415,75319],{"class":48058},[45,75417,791],{"class":313},[45,75419,765],{"class":51},[45,75421,75326],{"class":2046},[45,75423,209],{"class":51},[45,75425,75331],{"class":313},[45,75427,75334],{"class":51},[45,75429,75337],{"class":267},[45,75431,75432,75434,75436,75438,75440,75442,75444,75446,75448,75450,75452,75454,75456,75458],{"class":47,"line":1762},[45,75433,73834],{"class":51},[45,75435,58328],{"class":2046},[45,75437,209],{"class":51},[45,75439,791],{"class":313},[45,75441,1173],{"class":93},[45,75443,75319],{"class":48058},[45,75445,510],{"class":93},[45,75447,791],{"class":313},[45,75449,765],{"class":51},[45,75451,75326],{"class":2046},[45,75453,209],{"class":51},[45,75455,75360],{"class":313},[45,75457,75334],{"class":51},[45,75459,75460],{"class":267},"\u002F\u002Ffalse\n",[45,75462,75463],{"class":47,"line":1776},[45,75464,75465],{"class":267},"    \u002F\u002F 2.量词\n",[45,75467,75468],{"class":47,"line":1781},[45,75469,75470],{"class":267},"    \u002F\u002F 量词 * 类似于 >= 0\n",[45,75472,75473,75475,75477,75479,75481,75483,75485,75488,75490,75492,75494,75496,75498,75500],{"class":47,"line":1810},[45,75474,73834],{"class":51},[45,75476,58328],{"class":2046},[45,75478,209],{"class":51},[45,75480,791],{"class":313},[45,75482,1173],{"class":93},[45,75484,75319],{"class":48058},[45,75486,75487],{"class":93},"*$",[45,75489,791],{"class":313},[45,75491,765],{"class":51},[45,75493,75326],{"class":2046},[45,75495,209],{"class":51},[45,75497,75360],{"class":313},[45,75499,75334],{"class":51},[45,75501,75337],{"class":267},[45,75503,75504,75506,75508,75510,75512,75514,75516,75518,75520,75522,75524,75526,75529,75531],{"class":47,"line":1815},[45,75505,73834],{"class":51},[45,75507,58328],{"class":2046},[45,75509,209],{"class":51},[45,75511,791],{"class":313},[45,75513,1173],{"class":93},[45,75515,75319],{"class":48058},[45,75517,75487],{"class":93},[45,75519,791],{"class":313},[45,75521,765],{"class":51},[45,75523,75326],{"class":2046},[45,75525,209],{"class":51},[45,75527,75528],{"class":313},"'二哈好傻'",[45,75530,75334],{"class":51},[45,75532,75533],{"class":267},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[45,75535,75536,75538,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558,75561,75563],{"class":47,"line":1832},[45,75537,73834],{"class":51},[45,75539,58328],{"class":2046},[45,75541,209],{"class":51},[45,75543,791],{"class":313},[45,75545,1173],{"class":93},[45,75547,75319],{"class":48058},[45,75549,75487],{"class":93},[45,75551,791],{"class":313},[45,75553,765],{"class":51},[45,75555,75326],{"class":2046},[45,75557,209],{"class":51},[45,75559,75560],{"class":313},"'哈好哈'",[45,75562,75390],{"class":51},[45,75564,75565],{"class":267},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[45,75567,75568],{"class":47,"line":1837},[45,75569,2483],{"emptyLinePlaceholder":133},[45,75571,75572],{"class":47,"line":1842},[45,75573,75574],{"class":267},"    \u002F\u002F +类似于>=1\n",[45,75576,75577,75579,75581,75583,75585,75587,75589,75592,75594,75596,75598,75600,75602,75604],{"class":47,"line":1847},[45,75578,73834],{"class":51},[45,75580,58328],{"class":2046},[45,75582,209],{"class":51},[45,75584,791],{"class":313},[45,75586,1173],{"class":93},[45,75588,75319],{"class":48058},[45,75590,75591],{"class":93},"+$",[45,75593,791],{"class":313},[45,75595,765],{"class":51},[45,75597,75326],{"class":2046},[45,75599,209],{"class":51},[45,75601,75360],{"class":313},[45,75603,75334],{"class":51},[45,75605,75337],{"class":267},[45,75607,75608,75610,75612,75614,75616,75618,75620,75622,75624,75626,75628,75630,75632,75634],{"class":47,"line":1861},[45,75609,73834],{"class":51},[45,75611,58328],{"class":2046},[45,75613,209],{"class":51},[45,75615,791],{"class":313},[45,75617,1173],{"class":93},[45,75619,75319],{"class":48058},[45,75621,75591],{"class":93},[45,75623,791],{"class":313},[45,75625,765],{"class":51},[45,75627,75326],{"class":2046},[45,75629,209],{"class":51},[45,75631,75528],{"class":313},[45,75633,75334],{"class":51},[45,75635,75533],{"class":267},[45,75637,75638,75640,75642,75644,75646,75648,75650,75652,75654,75656,75658,75660,75662,75664],{"class":47,"line":1866},[45,75639,73834],{"class":51},[45,75641,58328],{"class":2046},[45,75643,209],{"class":51},[45,75645,791],{"class":313},[45,75647,1173],{"class":93},[45,75649,75319],{"class":48058},[45,75651,75591],{"class":93},[45,75653,791],{"class":313},[45,75655,765],{"class":51},[45,75657,75326],{"class":2046},[45,75659,209],{"class":51},[45,75661,75560],{"class":313},[45,75663,75390],{"class":51},[45,75665,75460],{"class":267},[45,75667,75668],{"class":47,"line":2660},[45,75669,2483],{"emptyLinePlaceholder":133},[45,75671,75672],{"class":47,"line":2674},[45,75673,75674],{"class":267},"    \u002F\u002F ?类似于0次或一次\n",[45,75676,75677,75679,75681,75683,75685,75687,75690,75692,75694,75696,75698,75700,75702,75704],{"class":47,"line":2682},[45,75678,73834],{"class":51},[45,75680,58328],{"class":2046},[45,75682,209],{"class":51},[45,75684,791],{"class":313},[45,75686,1173],{"class":93},[45,75688,75689],{"class":48058},"哈？",[45,75691,510],{"class":93},[45,75693,791],{"class":313},[45,75695,765],{"class":51},[45,75697,75326],{"class":2046},[45,75699,209],{"class":51},[45,75701,74309],{"class":313},[45,75703,75390],{"class":51},[45,75705,75337],{"class":267},[45,75707,75708,75710,75712,75714,75716,75718,75720,75723,75725,75727,75729,75731,75733,75735],{"class":47,"line":2687},[45,75709,73834],{"class":51},[45,75711,58328],{"class":2046},[45,75713,209],{"class":51},[45,75715,791],{"class":313},[45,75717,1173],{"class":93},[45,75719,75319],{"class":48058},[45,75721,75722],{"class":93},"?$",[45,75724,791],{"class":313},[45,75726,765],{"class":51},[45,75728,75326],{"class":2046},[45,75730,209],{"class":51},[45,75732,75360],{"class":313},[45,75734,75334],{"class":51},[45,75736,75460],{"class":267},[45,75738,75739,75741,75743,75745,75747,75749,75751,75753,75755,75757,75759,75761,75763,75765],{"class":47,"line":2693},[45,75740,73834],{"class":51},[45,75742,58328],{"class":2046},[45,75744,209],{"class":51},[45,75746,791],{"class":313},[45,75748,1173],{"class":93},[45,75750,75319],{"class":48058},[45,75752,75722],{"class":93},[45,75754,791],{"class":313},[45,75756,765],{"class":51},[45,75758,75326],{"class":2046},[45,75760,209],{"class":51},[45,75762,75528],{"class":313},[45,75764,75334],{"class":51},[45,75766,75533],{"class":267},[45,75768,75769,75771,75773,75775,75777,75779,75781,75783,75785,75787,75789,75791,75793,75795],{"class":47,"line":2699},[45,75770,73834],{"class":51},[45,75772,58328],{"class":2046},[45,75774,209],{"class":51},[45,75776,791],{"class":313},[45,75778,1173],{"class":93},[45,75780,75319],{"class":48058},[45,75782,75722],{"class":93},[45,75784,791],{"class":313},[45,75786,765],{"class":51},[45,75788,75326],{"class":2046},[45,75790,209],{"class":51},[45,75792,75560],{"class":313},[45,75794,75334],{"class":51},[45,75796,75460],{"class":267},[45,75798,75799],{"class":47,"line":2704},[45,75800,2483],{"emptyLinePlaceholder":133},[45,75802,75803],{"class":47,"line":8031},[45,75804,75805],{"class":267},"    \u002F\u002F {n}写几，就必须出现几次\n",[45,75807,75808,75810,75812,75814,75816,75818,75820,75823,75825,75827,75829,75831,75834,75837],{"class":47,"line":8055},[45,75809,73834],{"class":51},[45,75811,58328],{"class":2046},[45,75813,209],{"class":51},[45,75815,791],{"class":313},[45,75817,1173],{"class":93},[45,75819,75319],{"class":48058},[45,75821,75822],{"class":93},"{4}$",[45,75824,791],{"class":313},[45,75826,765],{"class":51},[45,75828,75326],{"class":2046},[45,75830,209],{"class":51},[45,75832,75833],{"class":313},"'哈哈哈哈'",[45,75835,75836],{"class":51},")) ",[45,75838,75337],{"class":267},[45,75840,75841],{"class":47,"line":8060},[45,75842,2483],{"emptyLinePlaceholder":133},[45,75844,75845],{"class":47,"line":8066},[45,75846,75847],{"class":267},"    \u002F\u002F {n,}大于等于n次\n",[45,75849,75850,75852,75854,75856,75858,75860,75862,75865,75867,75869,75871,75873,75875,75877],{"class":47,"line":8093},[45,75851,73834],{"class":51},[45,75853,58328],{"class":2046},[45,75855,209],{"class":51},[45,75857,791],{"class":313},[45,75859,1173],{"class":93},[45,75861,75319],{"class":48058},[45,75863,75864],{"class":93},"{4,}$",[45,75866,791],{"class":313},[45,75868,765],{"class":51},[45,75870,75326],{"class":2046},[45,75872,209],{"class":51},[45,75874,75833],{"class":313},[45,75876,75836],{"class":51},[45,75878,75337],{"class":267},[45,75880,75881,75883,75885,75887,75889,75891,75893,75895,75897,75899,75901,75903,75906,75908],{"class":47,"line":8098},[45,75882,73834],{"class":51},[45,75884,58328],{"class":2046},[45,75886,209],{"class":51},[45,75888,791],{"class":313},[45,75890,1173],{"class":93},[45,75892,75319],{"class":48058},[45,75894,75864],{"class":93},[45,75896,791],{"class":313},[45,75898,765],{"class":51},[45,75900,75326],{"class":2046},[45,75902,209],{"class":51},[45,75904,75905],{"class":313},"'哈哈哈哈哈'",[45,75907,75836],{"class":51},[45,75909,75337],{"class":267},[45,75911,75912],{"class":47,"line":8104},[45,75913,2483],{"emptyLinePlaceholder":133},[45,75915,75916],{"class":47,"line":8116},[45,75917,75918],{"class":267},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[45,75920,75921,75923,75925,75927,75929,75931,75933,75936,75938,75940,75942,75944,75946,75948],{"class":47,"line":8128},[45,75922,73834],{"class":51},[45,75924,58328],{"class":2046},[45,75926,209],{"class":51},[45,75928,791],{"class":313},[45,75930,1173],{"class":93},[45,75932,75319],{"class":48058},[45,75934,75935],{"class":93},"{4,6}$",[45,75937,791],{"class":313},[45,75939,765],{"class":51},[45,75941,75326],{"class":2046},[45,75943,209],{"class":51},[45,75945,75833],{"class":313},[45,75947,75836],{"class":51},[45,75949,75337],{"class":267},[45,75951,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75976,75978],{"class":47,"line":8140},[45,75953,73834],{"class":51},[45,75955,58328],{"class":2046},[45,75957,209],{"class":51},[45,75959,791],{"class":313},[45,75961,1173],{"class":93},[45,75963,75319],{"class":48058},[45,75965,75935],{"class":93},[45,75967,791],{"class":313},[45,75969,765],{"class":51},[45,75971,75326],{"class":2046},[45,75973,209],{"class":51},[45,75975,75905],{"class":313},[45,75977,75836],{"class":51},[45,75979,75337],{"class":267},[45,75981,75982,75984,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76007,76009],{"class":47,"line":9799},[45,75983,73834],{"class":51},[45,75985,58328],{"class":2046},[45,75987,209],{"class":51},[45,75989,791],{"class":313},[45,75991,1173],{"class":93},[45,75993,75319],{"class":48058},[45,75995,75935],{"class":93},[45,75997,791],{"class":313},[45,75999,765],{"class":51},[45,76001,75326],{"class":2046},[45,76003,209],{"class":51},[45,76005,76006],{"class":313},"'哈哈哈哈哈哈哈'",[45,76008,75836],{"class":51},[45,76010,75460],{"class":267},[45,76012,76013],{"class":47,"line":9824},[45,76014,2483],{"emptyLinePlaceholder":133},[45,76016,76017],{"class":47,"line":9847},[45,76018,76019],{"class":267},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[45,76021,76022,76024,76026,76028,76030,76032,76035,76037,76039,76041,76043,76045,76048,76050],{"class":47,"line":9871},[45,76023,73834],{"class":51},[45,76025,58328],{"class":2046},[45,76027,209],{"class":51},[45,76029,791],{"class":313},[45,76031,1173],{"class":93},[45,76033,76034],{"class":257},"[abc]",[45,76036,510],{"class":93},[45,76038,791],{"class":313},[45,76040,765],{"class":51},[45,76042,75326],{"class":2046},[45,76044,209],{"class":51},[45,76046,76047],{"class":313},"'a'",[45,76049,75334],{"class":51},[45,76051,75337],{"class":267},[45,76053,76054,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76079,76081],{"class":47,"line":9876},[45,76055,73834],{"class":51},[45,76057,58328],{"class":2046},[45,76059,209],{"class":51},[45,76061,791],{"class":313},[45,76063,1173],{"class":93},[45,76065,76034],{"class":257},[45,76067,510],{"class":93},[45,76069,791],{"class":313},[45,76071,765],{"class":51},[45,76073,75326],{"class":2046},[45,76075,209],{"class":51},[45,76077,76078],{"class":313},"'b'",[45,76080,75334],{"class":51},[45,76082,75337],{"class":267},[45,76084,76085,76087,76089,76091,76093,76095,76097,76099,76101,76103,76105,76107,76110,76112],{"class":47,"line":9881},[45,76086,73834],{"class":51},[45,76088,58328],{"class":2046},[45,76090,209],{"class":51},[45,76092,791],{"class":313},[45,76094,1173],{"class":93},[45,76096,76034],{"class":257},[45,76098,510],{"class":93},[45,76100,791],{"class":313},[45,76102,765],{"class":51},[45,76104,75326],{"class":2046},[45,76106,209],{"class":51},[45,76108,76109],{"class":313},"'c'",[45,76111,75334],{"class":51},[45,76113,75337],{"class":267},[45,76115,76116,76118,76120,76122,76124,76126,76128,76130,76132,76134,76137,76139],{"class":47,"line":9886},[45,76117,73834],{"class":51},[45,76119,58328],{"class":2046},[45,76121,209],{"class":51},[45,76123,791],{"class":313},[45,76125,76034],{"class":257},[45,76127,791],{"class":313},[45,76129,765],{"class":51},[45,76131,75326],{"class":2046},[45,76133,209],{"class":51},[45,76135,76136],{"class":313},"'ab'",[45,76138,75334],{"class":51},[45,76140,75337],{"class":267},[45,76142,76143,76145,76147,76149,76151,76153,76155,76157,76159,76161,76163,76165,76167,76169],{"class":47,"line":9895},[45,76144,73834],{"class":51},[45,76146,58328],{"class":2046},[45,76148,209],{"class":51},[45,76150,791],{"class":313},[45,76152,1173],{"class":93},[45,76154,76034],{"class":257},[45,76156,510],{"class":93},[45,76158,791],{"class":313},[45,76160,765],{"class":51},[45,76162,75326],{"class":2046},[45,76164,209],{"class":51},[45,76166,76136],{"class":313},[45,76168,75334],{"class":51},[45,76170,76171],{"class":267},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[45,76173,76174,76176,76178,76180,76182,76184,76186,76189,76191,76193,76195,76197,76199,76201],{"class":47,"line":9900},[45,76175,73834],{"class":51},[45,76177,58328],{"class":2046},[45,76179,209],{"class":51},[45,76181,791],{"class":313},[45,76183,1173],{"class":93},[45,76185,76034],{"class":257},[45,76187,76188],{"class":93},"{2}$",[45,76190,791],{"class":313},[45,76192,765],{"class":51},[45,76194,75326],{"class":2046},[45,76196,209],{"class":51},[45,76198,76136],{"class":313},[45,76200,75334],{"class":51},[45,76202,76203],{"class":267},"\u002F\u002Ftrue   可以选两个\n",[45,76205,76206,76208,76210,76212,76214,76216,76219,76221,76223,76225,76227,76229,76232,76234],{"class":47,"line":9906},[45,76207,73834],{"class":51},[45,76209,58328],{"class":2046},[45,76211,209],{"class":51},[45,76213,791],{"class":313},[45,76215,1173],{"class":93},[45,76217,76218],{"class":257},"[a-z]",[45,76220,510],{"class":93},[45,76222,791],{"class":313},[45,76224,765],{"class":51},[45,76226,75326],{"class":2046},[45,76228,209],{"class":51},[45,76230,76231],{"class":313},"'p'",[45,76233,75390],{"class":51},[45,76235,76236],{"class":267},"\u002F\u002Ftrue   依然只能选一个\n",[45,76238,76239,76241,76243,76245,76247,76249,76252,76254,76256,76258,76260,76262,76264,76266],{"class":47,"line":9927},[45,76240,73834],{"class":51},[45,76242,58328],{"class":2046},[45,76244,209],{"class":51},[45,76246,791],{"class":313},[45,76248,1173],{"class":93},[45,76250,76251],{"class":257},"[A-Z]",[45,76253,510],{"class":93},[45,76255,791],{"class":313},[45,76257,765],{"class":51},[45,76259,75326],{"class":2046},[45,76261,209],{"class":51},[45,76263,76231],{"class":313},[45,76265,75390],{"class":51},[45,76267,75460],{"class":267},[45,76269,76270,76272,76274,76276,76278,76280,76282,76284,76286,76288,76290,76292,76295,76297],{"class":47,"line":9933},[45,76271,73834],{"class":51},[45,76273,58328],{"class":2046},[45,76275,209],{"class":51},[45,76277,791],{"class":313},[45,76279,1173],{"class":93},[45,76281,76251],{"class":257},[45,76283,510],{"class":93},[45,76285,791],{"class":313},[45,76287,765],{"class":51},[45,76289,75326],{"class":2046},[45,76291,209],{"class":51},[45,76293,76294],{"class":313},"'P'",[45,76296,75390],{"class":51},[45,76298,75337],{"class":267},[45,76300,76301,76303,76305,76307,76309,76311,76314,76316,76318,76320,76322,76324,76327,76329],{"class":47,"line":9947},[45,76302,73834],{"class":51},[45,76304,58328],{"class":2046},[45,76306,209],{"class":51},[45,76308,791],{"class":313},[45,76310,1173],{"class":93},[45,76312,76313],{"class":257},"[0-9]",[45,76315,510],{"class":93},[45,76317,791],{"class":313},[45,76319,765],{"class":51},[45,76321,75326],{"class":2046},[45,76323,209],{"class":51},[45,76325,76326],{"class":313},"'0'",[45,76328,75390],{"class":51},[45,76330,75337],{"class":267},[45,76332,76333,76335,76337,76339,76341,76343,76346,76348,76350,76352,76354,76356,76358,76360],{"class":47,"line":9953},[45,76334,73834],{"class":51},[45,76336,58328],{"class":2046},[45,76338,209],{"class":51},[45,76340,791],{"class":313},[45,76342,1173],{"class":93},[45,76344,76345],{"class":257},"[a-zA-Z0-9]",[45,76347,510],{"class":93},[45,76349,791],{"class":313},[45,76351,765],{"class":51},[45,76353,75326],{"class":2046},[45,76355,209],{"class":51},[45,76357,76231],{"class":313},[45,76359,75334],{"class":51},[45,76361,75337],{"class":267},[45,76363,76364,76366,76368],{"class":47,"line":9980},[45,76365,52498],{"class":51},[45,76367,51894],{"class":51381},[45,76369,51388],{"class":51},[45,76371,76372,76374,76376],{"class":47,"line":9989},[45,76373,51866],{"class":51},[45,76375,51881],{"class":51381},[45,76377,51388],{"class":51},[45,76379,76380],{"class":47,"line":9995},[45,76381,2483],{"emptyLinePlaceholder":133},[45,76383,76384,76386,76388],{"class":47,"line":10003},[45,76385,51866],{"class":51},[45,76387,50716],{"class":51381},[45,76389,51388],{"class":51},[22081,76391,76393],{"id":76392},"_3624-修饰符","3.6.2.4 修饰符",[10,76395,76396],{},[1545,76397],{"alt":40,"src":76398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[10,76400,76401],{},"replace是个方法，使用的时候一定不要忘记括号()",[10,76403,76404],{},[1545,76405],{"alt":40,"src":76406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[35,76408,76410],{"className":50714,"code":76409,"language":50716,"meta":40,"style":40},"\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",[42,76411,76412,76422,76436,76444,76458,76478,76490,76498,76506,76514,76546,76577,76582,76614,76625,76658,76667,76675,76683],{"__ignoreMap":40},[45,76413,76414,76416,76418,76420],{"class":47,"line":48},[45,76415,51378],{"class":51},[45,76417,51382],{"class":51381},[45,76419,51385],{"class":2046},[45,76421,51388],{"class":51},[45,76423,76424,76426,76428,76430,76432,76434],{"class":47,"line":125},[45,76425,1117],{"class":51},[45,76427,50716],{"class":51381},[45,76429,51397],{"class":2046},[45,76431,254],{"class":51},[45,76433,51402],{"class":313},[45,76435,51388],{"class":51},[45,76437,76438,76440,76442],{"class":47,"line":1262},[45,76439,1117],{"class":51},[45,76441,51415],{"class":51381},[45,76443,51388],{"class":51},[45,76445,76446,76448,76450,76452,76454,76456],{"class":47,"line":1277},[45,76447,52225],{"class":51},[45,76449,51425],{"class":51381},[45,76451,51428],{"class":2046},[45,76453,254],{"class":51},[45,76455,51433],{"class":313},[45,76457,51388],{"class":51},[45,76459,76460,76462,76464,76466,76468,76470,76472,76474,76476],{"class":47,"line":1283},[45,76461,52225],{"class":51},[45,76463,51425],{"class":51381},[45,76465,15003],{"class":2046},[45,76467,254],{"class":51},[45,76469,51472],{"class":313},[45,76471,51452],{"class":2046},[45,76473,254],{"class":51},[45,76475,51479],{"class":313},[45,76477,51388],{"class":51},[45,76479,76480,76482,76484,76486,76488],{"class":47,"line":1297},[45,76481,52225],{"class":51},[45,76483,51488],{"class":51381},[45,76485,51491],{"class":51},[45,76487,51488],{"class":51381},[45,76489,51388],{"class":51},[45,76491,76492,76494,76496],{"class":47,"line":1303},[45,76493,51866],{"class":51},[45,76495,51415],{"class":51381},[45,76497,51388],{"class":51},[45,76499,76500,76502,76504],{"class":47,"line":1394},[45,76501,1117],{"class":51},[45,76503,51881],{"class":51381},[45,76505,51388],{"class":51},[45,76507,76508,76510,76512],{"class":47,"line":1400},[45,76509,52225],{"class":51},[45,76511,51894],{"class":51381},[45,76513,51388],{"class":51},[45,76515,76516,76518,76520,76522,76524,76526,76529,76531,76533,76535,76537,76539,76542,76544],{"class":47,"line":1412},[45,76517,73834],{"class":51},[45,76519,58328],{"class":2046},[45,76521,209],{"class":51},[45,76523,791],{"class":313},[45,76525,1173],{"class":93},[45,76527,76528],{"class":48058},"java",[45,76530,510],{"class":93},[45,76532,791],{"class":313},[45,76534,765],{"class":51},[45,76536,75326],{"class":2046},[45,76538,209],{"class":51},[45,76540,76541],{"class":313},"'java'",[45,76543,75836],{"class":51},[45,76545,75337],{"class":267},[45,76547,76548,76550,76552,76554,76556,76558,76560,76562,76564,76566,76568,76570,76573,76575],{"class":47,"line":1695},[45,76549,73834],{"class":51},[45,76551,58328],{"class":2046},[45,76553,209],{"class":51},[45,76555,791],{"class":313},[45,76557,1173],{"class":93},[45,76559,76528],{"class":48058},[45,76561,510],{"class":93},[45,76563,791],{"class":313},[45,76565,765],{"class":51},[45,76567,75326],{"class":2046},[45,76569,209],{"class":51},[45,76571,76572],{"class":313},"'Java'",[45,76574,75836],{"class":51},[45,76576,75460],{"class":267},[45,76578,76579],{"class":47,"line":1700},[45,76580,76581],{"class":267},"    \u002F\u002F 不区分大小写、\n",[45,76583,76584,76586,76588,76590,76592,76594,76596,76598,76600,76602,76604,76606,76608,76610,76612],{"class":47,"line":1706},[45,76585,73834],{"class":51},[45,76587,58328],{"class":2046},[45,76589,209],{"class":51},[45,76591,791],{"class":313},[45,76593,1173],{"class":93},[45,76595,76528],{"class":48058},[45,76597,510],{"class":93},[45,76599,791],{"class":313},[45,76601,649],{"class":93},[45,76603,765],{"class":51},[45,76605,75326],{"class":2046},[45,76607,209],{"class":51},[45,76609,76572],{"class":313},[45,76611,75836],{"class":51},[45,76613,75337],{"class":267},[45,76615,76616,76618,76620,76622],{"class":47,"line":1711},[45,76617,11304],{"class":93},[45,76619,74000],{"class":257},[45,76621,13647],{"class":93},[45,76623,76624],{"class":313}," 'java是一门编程语言，学完java工资很高'\n",[45,76626,76627,76629,76632,76634,76637,76640,76642,76644,76646,76648,76651,76653,76656],{"class":47,"line":1725},[45,76628,11304],{"class":93},[45,76630,76631],{"class":257}," result",[45,76633,13647],{"class":93},[45,76635,76636],{"class":51}," str.",[45,76638,76639],{"class":2046},"replace",[45,76641,209],{"class":51},[45,76643,791],{"class":313},[45,76645,76528],{"class":48058},[45,76647,791],{"class":313},[45,76649,76650],{"class":93},"ig",[45,76652,12518],{"class":51},[45,76654,76655],{"class":313},"'前端'",[45,76657,215],{"class":51},[45,76659,76660,76662,76664],{"class":47,"line":1730},[45,76661,73834],{"class":51},[45,76663,58328],{"class":2046},[45,76665,76666],{"class":51},"(result)\n",[45,76668,76669,76671,76673],{"class":47,"line":1736},[45,76670,52498],{"class":51},[45,76672,51894],{"class":51381},[45,76674,51388],{"class":51},[45,76676,76677,76679,76681],{"class":47,"line":1757},[45,76678,51866],{"class":51},[45,76680,51881],{"class":51381},[45,76682,51388],{"class":51},[45,76684,76685,76687,76689],{"class":47,"line":1762},[45,76686,51866],{"class":51},[45,76688,50716],{"class":51381},[45,76690,51388],{"class":51},[121,76692,76693],{},"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":40,"searchDepth":125,"depth":125,"links":76695},[76696,76706,76718,76735,76742,76750],{"id":53441,"depth":125,"text":53442,"children":76697},[76698,76699,76700,76701,76702,76703,76704,76705],{"id":53445,"depth":1262,"text":53446},{"id":53478,"depth":1262,"text":53479},{"id":53517,"depth":1262,"text":53518},{"id":53675,"depth":1262,"text":53676},{"id":53723,"depth":1262,"text":53724},{"id":53860,"depth":1262,"text":53861},{"id":54182,"depth":1262,"text":54183},{"id":57170,"depth":1262,"text":57171},{"id":57198,"depth":125,"text":57199,"children":76707},[76708,76709,76710,76711,76712,76713,76714,76715,76716,76717],{"id":57202,"depth":1262,"text":57203},{"id":57225,"depth":1262,"text":57226},{"id":58140,"depth":1262,"text":58141},{"id":58830,"depth":1262,"text":58831},{"id":59112,"depth":1262,"text":59113},{"id":63273,"depth":1262,"text":63274},{"id":63443,"depth":1262,"text":63444},{"id":63571,"depth":1262,"text":63572},{"id":63596,"depth":1262,"text":63597},{"id":64985,"depth":1262,"text":64986},{"id":66138,"depth":125,"text":66139,"children":76719},[76720,76721,76722,76723,76724,76725,76726,76727,76728,76729,76730,76731,76732,76733,76734],{"id":66142,"depth":1262,"text":66143},{"id":66796,"depth":1262,"text":66797},{"id":68491,"depth":1262,"text":68492},{"id":68532,"depth":1262,"text":68533},{"id":68574,"depth":1262,"text":68575},{"id":68588,"depth":1262,"text":68589},{"id":68637,"depth":1262,"text":68638},{"id":68649,"depth":1262,"text":68650},{"id":68664,"depth":1262,"text":68665},{"id":68700,"depth":1262,"text":68701},{"id":68781,"depth":1262,"text":68782},{"id":68909,"depth":1262,"text":68910},{"id":68921,"depth":1262,"text":68922},{"id":68940,"depth":1262,"text":68941},{"id":71051,"depth":1262,"text":71052},{"id":71070,"depth":125,"text":71071,"children":76736},[76737,76738,76739,76740,76741],{"id":71091,"depth":1262,"text":71092},{"id":71111,"depth":1262,"text":71112},{"id":71160,"depth":1262,"text":71161},{"id":71285,"depth":1262,"text":71286},{"id":71466,"depth":1262,"text":71467},{"id":71484,"depth":125,"text":71485,"children":76743},[76744,76745,76746,76747,76748,76749],{"id":71499,"depth":1262,"text":71500},{"id":71558,"depth":1262,"text":71559},{"id":71582,"depth":1262,"text":71583},{"id":71902,"depth":1262,"text":71903},{"id":71934,"depth":1262,"text":71935},{"id":71957,"depth":1262,"text":71958},{"id":75025,"depth":125,"text":75026,"children":76751},[76752,76753],{"id":75059,"depth":1262,"text":75060},{"id":75098,"depth":1262,"text":75099},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53413,"description":130},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76760,"title":76761,"body":76762,"description":130,"extension":131,"meta":92899,"navigation":133,"path":92900,"seo":92901,"stem":92902,"__hash__":92903},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76763,"toc":92835},[76764,76767,76770,76774,76778,76783,76788,76799,76803,76808,76811,76815,76818,76823,76827,76831,76834,76839,76842,76846,76849,76857,76860,76864,76869,76874,76877,76881,76886,76891,76894,76898,76903,76906,76911,76914,76919,76922,76927,76932,76935,76938,76942,76947,76952,76955,76959,76963,76966,76969,76972,76976,76980,76985,76990,76993,76997,77002,77007,77010,77013,77016,77019,77022,77025,77028,77031,77034,77039,77043,77048,77053,77056,77059,77062,77065,77068,77071,77074,77077,77081,77085,77088,77091,77094,77099,77101,77104,77107,77110,77113,77116,77119,77122,77125,77128,77131,77134,77137,77140,77145,77150,77155,77158,77162,77165,77170,77174,77176,77187,77192,77293,77296,77299,77302,77305,77308,77311,77314,77317,77319,77322,77325,77328,77331,77334,77336,77339,77342,77345,77348,77351,77354,77356,77359,77361,77363,77366,77370,77374,77377,77380,77383,77386,77389,77392,77395,77398,77401,77406,77526,77529,77532,77537,77540,77543,77546,77549,77554,77557,77560,77563,77566,77571,77574,77674,77739,77813,77817,77820,77823,77827,77830,77844,77873,77876,77879,77882,77885,77888,77891,77894,77896,77899,77902,77905,77908,77912,77917,77921,77926,78001,78004,78187,78190,78193,78196,78199,78202,78204,78207,78210,78213,78216,78219,78222,78224,78228,78231,78236,78239,78242,78245,78248,78250,78255,78258,78261,78264,78267,78269,78274,78277,78280,78282,78284,78287,78291,78294,78297,78302,78305,78308,78311,78361,78366,78370,78375,78378,78447,78450,78459,78463,78468,78471,78474,78482,78485,78502,80304,80308,80312,80317,80320,80324,80330,80336,80488,80493,80498,80501,80504,80507,80510,80513,80516,80519,80522,80525,80528,80531,80534,80539,80543,80546,80557,80561,80566,80569,80572,80575,80578,80581,80583,80586,80589,80592,80595,80597,80614,80617,80621,80624,80629,80634,80637,80640,80644,80647,80650,80659,80662,80666,80669,80674,80679,80746,80750,80753,80756,80761,80766,80852,80857,80861,80864,80867,80882,80885,80890,80894,80899,81008,81011,81022,81172,81176,81181,81290,81294,81299,81304,81309,81312,81319,81339,81375,81539,81544,81547,81552,81559,81562,81565,81568,81627,81683,81739,81743,81748,82063,82066,82070,82073,82078,82187,82192,82196,82201,82205,82276,82280,82282,82285,82288,82326,82602,82606,82623,82689,82723,82727,82730,82735,82764,82771,82780,82785,82800,82805,82814,82817,82954,82958,83020,83024,83029,83274,83278,83283,83286,83289,83292,83295,83299,83304,84885,84889,84893,84899,84902,84907,84911,84914,84919,84922,84933,84937,84942,84946,84951,84956,84959,84964,84968,84972,84975,84980,84985,84988,84991,84994,85116,85121,85223,85226,85229,85233,85238,85410,85415,85419,85422,85427,85493,85498,85501,85632,85635,85640,85643,85646,85737,85742,85745,85748,85751,85754,85759,85764,85767,85772,85777,85782,85786,85789,85792,85797,85802,85807,85812,85866,85869,85872,85877,85880,85883,85888,85893,85898,85902,85907,85921,85926,85929,85934,85938,85943,85948,85953,85958,85963,85968,85973,85978,85981,85985,85990,85993,85996,85999,86004,86009,86012,86015,86019,86022,86025,86030,86035,86040,86045,86048,86053,86058,86119,86124,86127,86132,87373,87378,87382,87386,87391,87394,87399,87404,87407,87412,87414,87419,87423,87426,87429,87440,87444,87449,87454,87509,87514,87519,87524,87735,87740,87744,87749,87752,87754,87757,87760,88207,88212,88219,88225,88228,88231,88495,88500,88504,88769,88774,88778,88783,88788,88793,88798,89129,89132,89137,89142,89145,89149,89153,89158,89163,89168,89173,89178,89183,89187,89190,89195,89200,89203,89277,89282,89287,89292,89294,89297,89667,89672,89677,89682,89685,89688,89790,89795,89800,89903,89907,89912,89916,89920,89925,89930,89933,89938,89941,89944,90337,90342,90345,90348,90351,90354,90874,90878,90883,90888,90893,90896,90901,90904,90907,91289,91294,91296,91298,91301,91304,91816,91820,91881,91884,91887,91890,91894,91897,91902,91907,92832],[20,76765,76761],{"id":76766},"_4js进阶",[10,76768,76769],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[30,76771,76773],{"id":76772},"_41-作用域","4.1 作用域",[176,76775,76777],{"id":76776},"_411-局部作用域","4.1.1 局部作用域",[10,76779,76780],{},[1545,76781],{"alt":40,"src":76782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[10,76784,76785],{},[1545,76786],{"alt":40,"src":76787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1214,76789,76790,76793,76796],{},[162,76791,76792],{},"函数作用域在函数内部",[162,76794,76795],{},"块级作用域在{}",[162,76797,76798],{},"对象的那个{}不是作用域，不是块作用域",[176,76800,76802],{"id":76801},"_412-全局作用域","4.1.2 全局作用域",[10,76804,76805],{},[1545,76806],{"alt":40,"src":76807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[10,76809,76810],{},"window.a=10不要这样写",[176,76812,76814],{"id":76813},"_413-作用域链","4.1.3 作用域链",[10,76816,76817],{},"变量查找机制",[10,76819,76820],{},[1545,76821],{"alt":40,"src":76822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[30,76824,76826],{"id":76825},"_42-垃圾回收机制","4.2 垃圾回收机制",[176,76828,76830],{"id":76829},"_421-大体介绍","4.2.1 大体介绍",[10,76832,76833],{},"垃圾回收机制(Garbage Collection) 简称 GC",[10,76835,76836],{},[1545,76837],{"alt":40,"src":76838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[10,76840,76841],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[176,76843,76845],{"id":76844},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[10,76847,76848],{},"堆栈空间分配区别：",[159,76850,76851,76854],{},[162,76852,76853],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[162,76855,76856],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[10,76858,76859],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22081,76861,76863],{"id":76862},"_4221-引用计数","4.2.2.1 引用计数",[10,76865,76866],{},[1545,76867],{"alt":40,"src":76868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[10,76870,76871],{},[1545,76872],{"alt":40,"src":76873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[10,76875,76876],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22081,76878,76880],{"id":76879},"_4222-标记清除法","4.2.2.2 标记清除法",[10,76882,76883],{},[1545,76884],{"alt":40,"src":76885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[10,76887,76888],{},[1545,76889],{"alt":40,"src":76890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[10,76892,76893],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[30,76895,76897],{"id":76896},"_43-闭包","4.3 闭包",[10,76899,76900],{},[1545,76901],{"alt":40,"src":76902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[10,76904,76905],{},"闭包：内层函数+外层函数的变量",[10,76907,76908],{},[1545,76909],{"alt":40,"src":76910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[10,76912,76913],{},"closure就是闭包",[10,76915,76916],{},[1545,76917],{"alt":40,"src":76918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[10,76920,76921],{},"内层函数必须包含外层函数的变量才是闭包",[10,76923,76924],{},[1545,76925],{"alt":40,"src":76926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[10,76928,76929],{},[1545,76930],{"alt":40,"src":76931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[10,76933,76934],{},"闭包可能会引起内存泄漏",[10,76936,76937],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[30,76939,76941],{"id":76940},"_44-变量提升","4.4 变量提升",[10,76943,76944],{},[1545,76945],{"alt":40,"src":76946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[10,76948,76949],{},[1545,76950],{"alt":40,"src":76951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[10,76953,76954],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[30,76956,76958],{"id":76957},"_45-函数进阶","4.5 函数进阶",[176,76960,76962],{"id":76961},"_451-函数提升","4.5.1 函数提升",[10,76964,76965],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[10,76967,76968],{},"只提升函数声明，不提升函数调用",[51894,76970,76971],{},"\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",[176,76973,76975],{"id":76974},"_452-函数参数","4.5.2 函数参数",[22081,76977,76979],{"id":76978},"_4521-动态参数","4.5.2.1 动态参数",[10,76981,76982],{},[1545,76983],{"alt":40,"src":76984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[10,76986,76987],{},[1545,76988],{"alt":40,"src":76989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[10,76991,76992],{},"箭头函数里边没有arguments",[22081,76994,76996],{"id":76995},"_4522-剩余参数","4.5.2.2 剩余参数",[10,76998,76999],{},[1545,77000],{"alt":40,"src":77001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[10,77003,77004],{},[1545,77005],{"alt":40,"src":77006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[10,77008,77009],{},"剩余参数使用的时候不需要写...",[10,77011,77012],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[10,77014,77015],{},"  function getSum(a,b,...arr) {",[10,77017,77018],{},"  console.log(11)",[10,77020,77021],{},"  }",[10,77023,77024],{},"  getSum(1,2,3,4)",[10,77026,77027],{},"  将1传给a，2传给b，剩下的传给剩余参数",[10,77029,77030],{},"  getSum(1,2)",[10,77032,77033],{},"  将1传给a，2传给b，剩余参数为一个空数组",[10,77035,77036],{},[1545,77037],{"alt":40,"src":77038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22081,77040,77042],{"id":77041},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[10,77044,77045],{},[1545,77046],{"alt":40,"src":77047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[10,77049,77050],{},[1545,77051],{"alt":40,"src":77052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[10,77054,77055],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[10,77057,77058],{},"展开运算符可以用于数组之间的合并：",[10,77060,77061],{},"const arr1 = [1, 2, 3]",[10,77063,77064],{},"const arr2 = [3, 4, 5]",[10,77066,77067],{},"const arr = [...arr1, ...arr2]",[10,77069,77070],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[10,77072,77073],{},"剩余参数：函数参数使用，得到真数组",[10,77075,77076],{},"展开运算符：数组中使用，数组展开",[176,77078,77080],{"id":77079},"_453-箭头函数","4.5.3 箭头函数",[22081,77082,77084],{"id":77083},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[10,77086,77087],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[10,77089,77090],{},"它不是万能的！！！",[10,77092,77093],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[10,77095,77096],{},[1545,77097],{"alt":40,"src":77098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[10,77100,238],{},[10,77102,77103],{},"① 只有一个形参的时候，可以省略小括号：",[10,77105,77106],{},"const fn=x=>{console.log(x)}",[10,77108,77109],{},"② 只有一行代码时可以省略大括号：",[10,77111,77112],{},"const fn=x=>console.log(11)",[10,77114,77115],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[10,77117,77118],{},"const fn=x=>x+x",[10,77120,77121],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[10,77123,77124],{},"⑤ 阻止表单默认提交：",[10,77126,77127],{},"const form = document.querySelector('form')",[10,77129,77130],{},"form.addEventListener('click', ev => ev.preventDefault())",[10,77132,77133],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[10,77135,77136],{},"const fn=uname=>({uname:uname})",[10,77138,77139],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[10,77141,77142],{},[1545,77143],{"alt":40,"src":77144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[10,77146,77147],{},[1545,77148],{"alt":40,"src":77149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[10,77151,77152],{},[1545,77153],{"alt":40,"src":77154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[10,77156,77157],{},"一定不要忘记用()，有()就理解为自带return",[22081,77159,77161],{"id":77160},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[10,77163,77164],{},"箭头函数是没有动态参数的arguments",[10,77166,77167],{},[1545,77168],{"alt":40,"src":77169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22081,77171,77173],{"id":77172},"_4533-箭头函数this","4.5.3.3 箭头函数this",[10,77175,11415],{},[159,77177,77178,77181,77184],{},[162,77179,77180],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[162,77182,77183],{},"事件回调函数使用箭头函数时，this 为全局的 window",[162,77185,77186],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[10,77188,77189],{},[1545,77190],{"alt":40,"src":77191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[35,77193,77195],{"className":53148,"code":77194,"language":53150,"meta":40,"style":40},"  \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",[42,77196,77197,77205,77210,77215,77220,77225,77230,77234,77239,77243,77247,77252,77257,77262,77266,77270,77275,77280,77285],{"__ignoreMap":40},[45,77198,77199,77201,77203],{"class":47,"line":48},[45,77200,52225],{"class":51},[45,77202,51894],{"class":51381},[45,77204,51388],{"class":51},[45,77206,77207],{"class":47,"line":125},[45,77208,77209],{"class":51},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[45,77211,77212],{"class":47,"line":1262},[45,77213,77214],{"class":51},"    console.log(this) \u002F\u002F指向window\n",[45,77216,77217],{"class":47,"line":1277},[45,77218,77219],{"class":51},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[45,77221,77222],{"class":47,"line":1283},[45,77223,77224],{"class":51},"    function fn() {\n",[45,77226,77227],{"class":47,"line":1297},[45,77228,77229],{"class":51},"      console.log(this)  \u002F\u002F指向window\n",[45,77231,77232],{"class":47,"line":1303},[45,77233,2270],{"class":51},[45,77235,77236],{"class":47,"line":1394},[45,77237,77238],{"class":51},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[45,77240,77241],{"class":47,"line":1400},[45,77242,2483],{"emptyLinePlaceholder":133},[45,77244,77245],{"class":47,"line":1412},[45,77246,71604],{"class":51},[45,77248,77249],{"class":47,"line":1695},[45,77250,77251],{"class":51},"      name: 'andy',\n",[45,77253,77254],{"class":47,"line":1700},[45,77255,77256],{"class":51},"      sayHai: function () {\n",[45,77258,77259],{"class":47,"line":1706},[45,77260,77261],{"class":51},"        console.log(this)\n",[45,77263,77264],{"class":47,"line":1711},[45,77265,52479],{"class":51},[45,77267,77268],{"class":47,"line":1725},[45,77269,2270],{"class":51},[45,77271,77272],{"class":47,"line":1730},[45,77273,77274],{"class":51},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[45,77276,77277],{"class":47,"line":1736},[45,77278,77279],{"class":51},"    \u002F\u002F 2.箭头函数的this\n",[45,77281,77282],{"class":47,"line":1757},[45,77283,77284],{"class":51},"    const fn = () => console.log(this)\n",[45,77286,77287,77289,77291],{"class":47,"line":1762},[45,77288,52498],{"class":51},[45,77290,51894],{"class":51381},[45,77292,51388],{"class":51},[10,77294,77295],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[10,77297,77298],{},"const fn = () => console.log(this)",[10,77300,77301],{},"fn() \u002F\u002F指向window",[10,77303,77304],{},"\u002F\u002F 3.对象方法箭头函数 this",[10,77306,77307],{},"①",[10,77309,77310],{},"const obj = {",[10,77312,77313],{},"uname: 'pink老师',",[10,77315,77316],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[10,77318,1153],{},[10,77320,77321],{},"调用对象里边的函数",[10,77323,77324],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[10,77326,77327],{},"obj.sayHai()",[10,77329,77330],{},"②",[10,77332,77333],{},"const obj1 = {",[10,77335,77313],{},[10,77337,77338],{},"sayHai: function () {",[10,77340,77341],{},"let i = 10",[10,77343,77344],{},"const count = () => {",[10,77346,77347],{},"console.log(this)",[10,77349,77350],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[10,77352,77353],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[10,77355,1153],{},[10,77357,77358],{},"count()",[10,77360,1153],{},[10,77362,1153],{},[10,77364,77365],{},"obj1.sayHai()",[30,77367,77369],{"id":77368},"_46-解构赋值","4.6 解构赋值",[176,77371,77373],{"id":77372},"_461-数组解构","4.6.1 数组解构",[10,77375,77376],{},"以前要是使用数组中的值的话：",[10,77378,77379],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[10,77381,77382],{},"const arr=[100,60,80]",[10,77384,77385],{},"const max=arr[0]",[10,77387,77388],{},"const min=arr[1]",[10,77390,77391],{},"const avg=arr[2]",[10,77393,77394],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[10,77396,77397],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[10,77399,77400],{},"这个写法就类似于上边的那种用很多const的方法",[10,77402,77403],{},[1545,77404],{"alt":40,"src":77405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[35,77407,77409],{"className":50714,"code":77408,"language":50716,"meta":40,"style":40},"①变量之间交换值:\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",[42,77410,77411,77416,77421,77426,77431,77436,77440,77444,77449,77453,77458,77463,77467,77472,77477,77488,77498,77503,77508,77513,77517,77521],{"__ignoreMap":40},[45,77412,77413],{"class":47,"line":48},[45,77414,77415],{"class":51},"①变量之间交换值:\n",[45,77417,77418],{"class":47,"line":125},[45,77419,77420],{"class":51},"let a=1\n",[45,77422,77423],{"class":47,"line":1262},[45,77424,77425],{"class":51},"let b=2;\n",[45,77427,77428],{"class":47,"line":1277},[45,77429,77430],{"class":51},"必须加这行代码，不然就会报错\n",[45,77432,77433],{"class":47,"line":1283},[45,77434,77435],{"class":51},"[b,a]=[a,b]\n",[45,77437,77438],{"class":47,"line":1297},[45,77439,2483],{"emptyLinePlaceholder":133},[45,77441,77442],{"class":47,"line":1303},[45,77443,2483],{"emptyLinePlaceholder":133},[45,77445,77446],{"class":47,"line":1394},[45,77447,77448],{"class":51},"可以写成下面的方式：\n",[45,77450,77451],{"class":47,"line":1400},[45,77452,77420],{"class":51},[45,77454,77455],{"class":47,"line":1412},[45,77456,77457],{"class":51},"let b=2\n",[45,77459,77460],{"class":47,"line":1695},[45,77461,77462],{"class":51},";[b,a]=[a,b]\n",[45,77464,77465],{"class":47,"line":1700},[45,77466,2483],{"emptyLinePlaceholder":133},[45,77468,77469],{"class":47,"line":1706},[45,77470,77471],{"class":51},"②排序\n",[45,77473,77474],{"class":47,"line":1711},[45,77475,77476],{"class":51},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[45,77478,77479,77482,77485],{"class":47,"line":1725},[45,77480,77481],{"class":51},"for (let i = 0; i ",[45,77483,1117],{"class":77484},"s7hpK",[45,77486,77487],{"class":51}," arr1.length; i++) {\n",[45,77489,77490,77493,77495],{"class":47,"line":1730},[45,77491,77492],{"class":51},"   for (let j = 0; j ",[45,77494,1117],{"class":77484},[45,77496,77497],{"class":51}," arr1.length - 1; j++) {\n",[45,77499,77500],{"class":47,"line":1736},[45,77501,77502],{"class":51},"      if (arr1[j] > arr1[j + 1]) {\n",[45,77504,77505],{"class":47,"line":1757},[45,77506,77507],{"class":51},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[45,77509,77510],{"class":47,"line":1762},[45,77511,77512],{"class":51},"       }\n",[45,77514,77515],{"class":47,"line":1776},[45,77516,4392],{"class":51},[45,77518,77519],{"class":47,"line":1781},[45,77520,1648],{"class":51},[45,77522,77523],{"class":47,"line":1810},[45,77524,77525],{"class":51},"console.log(arr1)\n",[10,77527,77528],{},"数组解构的细节：",[10,77530,77531],{},"①变量多，单元值少",[10,77533,77534],{},[1545,77535],{"alt":40,"src":77536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[10,77538,77539],{},"防止出现undefined的方法：",[10,77541,77542],{},"const [a=0,b=0] =[1]",[10,77544,77545],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[10,77547,77548],{},"②变量少，单元值多",[10,77550,77551],{},[1545,77552],{"alt":40,"src":77553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[10,77555,77556],{},"此时可以使用剩余参数来接收多余的值",[10,77558,77559],{},"const [a,b,...c]=[1,2,3,4]",[10,77561,77562],{},"console.log(c) 输出[3,4]",[10,77564,77565],{},"③可以按需导入，忽略某些返回值",[10,77567,77568],{},[1545,77569],{"alt":40,"src":77570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[10,77572,77573],{},"④支持多维数组的结构",[35,77575,77579],{"className":77576,"code":77577,"language":77578,"meta":40,"style":40},"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",[42,77580,77581,77609,77625,77640,77655],{"__ignoreMap":40},[45,77582,77583,77585,77587,77589,77591,77593,77595,77597,77600,77602,77604,77606],{"class":47,"line":48},[45,77584,6875],{"class":93},[45,77586,51914],{"class":51},[45,77588,254],{"class":93},[45,77590,52307],{"class":51},[45,77592,426],{"class":257},[45,77594,12518],{"class":51},[45,77596,286],{"class":257},[45,77598,77599],{"class":51},", [",[45,77601,280],{"class":257},[45,77603,12518],{"class":51},[45,77605,501],{"class":257},[45,77607,77608],{"class":51},"]]\n",[45,77610,77611,77614,77616,77618,77620,77622],{"class":47,"line":125},[45,77612,77613],{"class":51},"console.",[45,77615,58328],{"class":2046},[45,77617,3934],{"class":51},[45,77619,400],{"class":257},[45,77621,4299],{"class":51},[45,77623,77624],{"class":267},"  \u002F\u002F1\n",[45,77626,77627,77629,77631,77633,77635,77637],{"class":47,"line":1262},[45,77628,77613],{"class":51},[45,77630,58328],{"class":2046},[45,77632,3934],{"class":51},[45,77634,426],{"class":257},[45,77636,4299],{"class":51},[45,77638,77639],{"class":267},"  \u002F\u002F2\n",[45,77641,77642,77644,77646,77648,77650,77652],{"class":47,"line":1277},[45,77643,77613],{"class":51},[45,77645,58328],{"class":2046},[45,77647,3934],{"class":51},[45,77649,286],{"class":257},[45,77651,4299],{"class":51},[45,77653,77654],{"class":267},"  \u002F\u002F[3,4]\n",[45,77656,77657,77659,77661,77663,77665,77667,77669,77671],{"class":47,"line":1283},[45,77658,77613],{"class":51},[45,77660,58328],{"class":2046},[45,77662,3934],{"class":51},[45,77664,286],{"class":257},[45,77666,4984],{"class":51},[45,77668,400],{"class":257},[45,77670,4299],{"class":51},[45,77672,77673],{"class":267},"  \u002F\u002F3\n",[35,77675,77677],{"className":77576,"code":77676,"language":77578,"meta":40,"style":40},"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",[42,77678,77679,77706,77717,77728],{"__ignoreMap":40},[45,77680,77681,77683,77686,77688,77690,77692,77694,77696,77698,77700,77702,77704],{"class":47,"line":48},[45,77682,6875],{"class":93},[45,77684,77685],{"class":51}," [a, b, c] ",[45,77687,254],{"class":93},[45,77689,52307],{"class":51},[45,77691,426],{"class":257},[45,77693,12518],{"class":51},[45,77695,286],{"class":257},[45,77697,77599],{"class":51},[45,77699,280],{"class":257},[45,77701,12518],{"class":51},[45,77703,501],{"class":257},[45,77705,77608],{"class":51},[45,77707,77708,77710,77712,77715],{"class":47,"line":125},[45,77709,77613],{"class":51},[45,77711,58328],{"class":2046},[45,77713,77714],{"class":51},"(a)",[45,77716,77624],{"class":267},[45,77718,77719,77721,77723,77726],{"class":47,"line":1262},[45,77720,77613],{"class":51},[45,77722,58328],{"class":2046},[45,77724,77725],{"class":51},"(b)",[45,77727,77639],{"class":267},[45,77729,77730,77732,77734,77737],{"class":47,"line":1277},[45,77731,77613],{"class":51},[45,77733,58328],{"class":2046},[45,77735,77736],{"class":51},"(c)",[45,77738,77654],{"class":267},[35,77740,77742],{"className":77576,"code":77741,"language":77578,"meta":40,"style":40},"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",[42,77743,77744,77771,77781,77791,77801],{"__ignoreMap":40},[45,77745,77746,77748,77751,77753,77755,77757,77759,77761,77763,77765,77767,77769],{"class":47,"line":48},[45,77747,6875],{"class":93},[45,77749,77750],{"class":51}," [a, b, [c, d]] ",[45,77752,254],{"class":93},[45,77754,52307],{"class":51},[45,77756,426],{"class":257},[45,77758,12518],{"class":51},[45,77760,286],{"class":257},[45,77762,77599],{"class":51},[45,77764,280],{"class":257},[45,77766,12518],{"class":51},[45,77768,501],{"class":257},[45,77770,77608],{"class":51},[45,77772,77773,77775,77777,77779],{"class":47,"line":125},[45,77774,77613],{"class":51},[45,77776,58328],{"class":2046},[45,77778,77714],{"class":51},[45,77780,77624],{"class":267},[45,77782,77783,77785,77787,77789],{"class":47,"line":1262},[45,77784,77613],{"class":51},[45,77786,58328],{"class":2046},[45,77788,77725],{"class":51},[45,77790,77639],{"class":267},[45,77792,77793,77795,77797,77799],{"class":47,"line":1277},[45,77794,77613],{"class":51},[45,77796,58328],{"class":2046},[45,77798,77736],{"class":51},[45,77800,77673],{"class":267},[45,77802,77803,77805,77807,77810],{"class":47,"line":1283},[45,77804,77613],{"class":51},[45,77806,58328],{"class":2046},[45,77808,77809],{"class":51},"(d)",[45,77811,77812],{"class":267},"  \u002F\u002F4\n",[176,77814,77816],{"id":77815},"_462-对象解构","4.6.2 对象解构",[10,77818,77819],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[10,77821,77822],{},"用的非常非常多！！！！！！",[22081,77824,77826],{"id":77825},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[10,77828,77829],{},"基本语法：",[159,77831,77832,77835,77838,77841],{},[162,77833,77834],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[162,77836,77837],{},"对象属性的值将被赋值给与属性名相同的变量",[162,77839,77840],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[162,77842,77843],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[35,77845,77847],{"className":50714,"code":77846,"language":50716,"meta":40,"style":40},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[42,77848,77849,77854,77859,77864,77868],{"__ignoreMap":40},[45,77850,77851],{"class":47,"line":48},[45,77852,77853],{"class":51},"const obj = {\n",[45,77855,77856],{"class":47,"line":125},[45,77857,77858],{"class":51},"   uname: 'pink老师',\n",[45,77860,77861],{"class":47,"line":1262},[45,77862,77863],{"class":51},"   age: 18,\n",[45,77865,77866],{"class":47,"line":1277},[45,77867,1648],{"class":51},[45,77869,77870],{"class":47,"line":1283},[45,77871,77872],{"class":51},"const { uname, age } = obj\n",[10,77874,77875],{},"上方代码这样写等价于：",[10,77877,77878],{},"const uname等价于obj.uname",[10,77880,77881],{},"变量名可以重新改名：",[10,77883,77884],{},"const uname='red老师'",[10,77886,77887],{},"const user={",[10,77889,77890],{},"  uname:'pink老师',",[10,77892,77893],{},"  age:18",[10,77895,1153],{},[10,77897,77898],{},"const {uname,age}=user",[10,77900,77901],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[10,77903,77904],{},"const {旧变量名：新变量名}=对象",[10,77906,77907],{},"const {uname:username,age}=user",[22081,77909,77911],{"id":77910},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[10,77913,77914],{},[1545,77915],{"alt":40,"src":77916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22081,77918,77920],{"id":77919},"_4623-多级对象解构","4.6.2.3 多级对象解构",[10,77922,77923],{},[1545,77924],{"alt":40,"src":77925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[35,77927,77929],{"className":53148,"code":77928,"language":53150,"meta":40,"style":40},"  \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",[42,77930,77931,77939,77944,77949,77954,77959,77964,77969,77974,77979,77983,77988,77993],{"__ignoreMap":40},[45,77932,77933,77935,77937],{"class":47,"line":48},[45,77934,52225],{"class":51},[45,77936,51894],{"class":51381},[45,77938,51388],{"class":51},[45,77940,77941],{"class":47,"line":125},[45,77942,77943],{"class":51},"    const pig = {\n",[45,77945,77946],{"class":47,"line":1262},[45,77947,77948],{"class":51},"      name: '佩奇',\n",[45,77950,77951],{"class":47,"line":1277},[45,77952,77953],{"class":51},"      family: {\n",[45,77955,77956],{"class":47,"line":1283},[45,77957,77958],{"class":51},"        mother: '猪妈妈',\n",[45,77960,77961],{"class":47,"line":1297},[45,77962,77963],{"class":51},"        father: '猪爸爸',\n",[45,77965,77966],{"class":47,"line":1303},[45,77967,77968],{"class":51},"        sister: '乔治'\n",[45,77970,77971],{"class":47,"line":1394},[45,77972,77973],{"class":51},"      },\n",[45,77975,77976],{"class":47,"line":1400},[45,77977,77978],{"class":51},"      age: 6\n",[45,77980,77981],{"class":47,"line":1412},[45,77982,2270],{"class":51},[45,77984,77985],{"class":47,"line":1695},[45,77986,77987],{"class":51},"    \u002F\u002F 多级对象解构\n",[45,77989,77990],{"class":47,"line":1700},[45,77991,77992],{"class":51},"    const { name, family: { mother, father, sister }, age } = pig\n",[45,77994,77995,77997,77999],{"class":47,"line":1706},[45,77996,52498],{"class":51},[45,77998,51894],{"class":51381},[45,78000,51388],{"class":51},[10,78002,78003],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[35,78005,78008],{"className":78006,"code":78007,"language":76528,"meta":40,"style":40},"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",[42,78009,78010,78015,78026,78038,78050,78059,78063,78074,78086,78096,78101,78105,78115,78126,78135,78139,78143,78154,78165,78174,78178,78183],{"__ignoreMap":40},[45,78011,78012],{"class":47,"line":48},[45,78013,78014],{"class":267},"    \u002F\u002F 这是后台传递过来的数据\n",[45,78016,78017,78019,78022,78024],{"class":47,"line":125},[45,78018,11304],{"class":93},[45,78020,78021],{"class":51}," msg ",[45,78023,254],{"class":93},[45,78025,15655],{"class":51},[45,78027,78028,78031,78033,78036],{"class":47,"line":1262},[45,78029,78030],{"class":313},"      \"code\"",[45,78032,1066],{"class":93},[45,78034,78035],{"class":257}," 200",[45,78037,31547],{"class":51},[45,78039,78040,78043,78045,78048],{"class":47,"line":1277},[45,78041,78042],{"class":313},"      \"msg\"",[45,78044,1066],{"class":93},[45,78046,78047],{"class":313}," \"获取新闻列表成功\"",[45,78049,31547],{"class":51},[45,78051,78052,78055,78057],{"class":47,"line":1283},[45,78053,78054],{"class":313},"      \"data\"",[45,78056,1066],{"class":93},[45,78058,55528],{"class":51},[45,78060,78061],{"class":47,"line":1297},[45,78062,2593],{"class":51},[45,78064,78065,78068,78070,78072],{"class":47,"line":1303},[45,78066,78067],{"class":313},"          \"id\"",[45,78069,1066],{"class":93},[45,78071,25201],{"class":257},[45,78073,31547],{"class":51},[45,78075,78076,78079,78081,78084],{"class":47,"line":1394},[45,78077,78078],{"class":313},"          \"title\"",[45,78080,1066],{"class":93},[45,78082,78083],{"class":313}," \"5G商用自己，三大运用商收入下降\"",[45,78085,31547],{"class":51},[45,78087,78088,78091,78093],{"class":47,"line":1400},[45,78089,78090],{"class":313},"          \"count\"",[45,78092,1066],{"class":93},[45,78094,78095],{"class":257}," 58\n",[45,78097,78098],{"class":47,"line":1412},[45,78099,78100],{"class":51},"        },\n",[45,78102,78103],{"class":47,"line":1695},[45,78104,2593],{"class":51},[45,78106,78107,78109,78111,78113],{"class":47,"line":1700},[45,78108,78067],{"class":313},[45,78110,1066],{"class":93},[45,78112,14838],{"class":257},[45,78114,31547],{"class":51},[45,78116,78117,78119,78121,78124],{"class":47,"line":1706},[45,78118,78078],{"class":313},[45,78120,1066],{"class":93},[45,78122,78123],{"class":313}," \"国际媒体头条速览\"",[45,78125,31547],{"class":51},[45,78127,78128,78130,78132],{"class":47,"line":1711},[45,78129,78090],{"class":313},[45,78131,1066],{"class":93},[45,78133,78134],{"class":257}," 56\n",[45,78136,78137],{"class":47,"line":1725},[45,78138,78100],{"class":51},[45,78140,78141],{"class":47,"line":1730},[45,78142,2593],{"class":51},[45,78144,78145,78147,78149,78152],{"class":47,"line":1736},[45,78146,78067],{"class":313},[45,78148,1066],{"class":93},[45,78150,78151],{"class":257}," 3",[45,78153,31547],{"class":51},[45,78155,78156,78158,78160,78163],{"class":47,"line":1757},[45,78157,78078],{"class":313},[45,78159,1066],{"class":93},[45,78161,78162],{"class":313}," \"乌克兰和俄罗斯持续冲突\"",[45,78164,31547],{"class":51},[45,78166,78167,78169,78171],{"class":47,"line":1762},[45,78168,78090],{"class":313},[45,78170,1066],{"class":93},[45,78172,78173],{"class":257}," 1669\n",[45,78175,78176],{"class":47,"line":1776},[45,78177,78100],{"class":51},[45,78179,78180],{"class":47,"line":1781},[45,78181,78182],{"class":51},"      ]\n",[45,78184,78185],{"class":47,"line":1810},[45,78186,2270],{"class":51},[10,78188,78189],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[10,78191,78192],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[10,78194,78195],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[10,78197,78198],{},"function({data}) {",[10,78200,78201],{},"console.log(data)",[10,78203,1153],{},[10,78205,78206],{},"render(msg)",[10,78208,78209],{},"实参传递给形参的时候解构了",[10,78211,78212],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[10,78214,78215],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[10,78217,78218],{},"function render({data:mydata}) {",[10,78220,78221],{},"  console.log(data)",[10,78223,1153],{},[176,78225,78227],{"id":78226},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[10,78229,78230],{},"有两种情况：一个是数组结构，一个是立即执行函数",[159,78232,78233],{},[162,78234,78235],{},"如果对一个数组进行遍历，有两种方式：",[10,78237,78238],{},"①法1",[10,78240,78241],{},"const arr=[1,2,3]",[10,78243,78244],{},"arr.map(function(item,index) {",[10,78246,78247],{},"  console.log(item)",[10,78249,52545],{},[10,78251,78252],{},[1545,78253],{"alt":40,"src":78254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[10,78256,78257],{},"②法2",[10,78259,78260],{},"const str='pink'",[10,78262,78263],{},"[1,2,3].map(function(item,index) {",[10,78265,78266],{},"console.log(item)",[10,78268,52545],{},[10,78270,78271],{},[1545,78272],{"alt":40,"src":78273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[10,78275,78276],{},"此时会报错",[10,78278,78279],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[10,78281,78266],{},[10,78283,52545],{},[10,78285,78286],{},"内部会当成这样处理，所以我们用分号进行隔开",[30,78288,78290],{"id":78289},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[10,78292,78293],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[10,78295,78296],{},"可以理解为加强版的for循环",[10,78298,78299],{},[1545,78300],{"alt":40,"src":78301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[10,78303,78304],{},"里边不写return，不返回数组，只遍历不返回",[10,78306,78307],{},"map是返回数组",[10,78309,78310],{},"forEach主要用于遍历数组对象",[35,78312,78314],{"className":53148,"code":78313,"language":53150,"meta":40,"style":40},"  \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",[42,78315,78316,78324,78329,78334,78339,78344,78348,78353],{"__ignoreMap":40},[45,78317,78318,78320,78322],{"class":47,"line":48},[45,78319,52225],{"class":51},[45,78321,51894],{"class":51381},[45,78323,51388],{"class":51},[45,78325,78326],{"class":47,"line":125},[45,78327,78328],{"class":51},"    const arr = ['red', 'green', 'pink']\n",[45,78330,78331],{"class":47,"line":1262},[45,78332,78333],{"class":51},"    const result = arr.forEach(function (item, index) {\n",[45,78335,78336],{"class":47,"line":1277},[45,78337,78338],{"class":51},"      console.log(item)\n",[45,78340,78341],{"class":47,"line":1283},[45,78342,78343],{"class":51},"      console.log(index)\n",[45,78345,78346],{"class":47,"line":1297},[45,78347,33542],{"class":51},[45,78349,78350],{"class":47,"line":1303},[45,78351,78352],{"class":51},"    console.log(result)\n",[45,78354,78355,78357,78359],{"class":47,"line":1394},[45,78356,52498],{"class":51},[45,78358,51894],{"class":51381},[45,78360,51388],{"class":51},[10,78362,78363],{},[1545,78364],{"alt":40,"src":78365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[30,78367,78369],{"id":78368},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[10,78371,78372],{},[1545,78373],{"alt":40,"src":78374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[10,78376,78377],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[35,78379,78381],{"className":53148,"code":78380,"language":53150,"meta":40,"style":40},"\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",[42,78382,78383,78391,78399,78404,78409,78413,78417,78422,78426,78431,78439],{"__ignoreMap":40},[45,78384,78385,78387,78389],{"class":47,"line":48},[45,78386,1117],{"class":51},[45,78388,51881],{"class":51381},[45,78390,51388],{"class":51},[45,78392,78393,78395,78397],{"class":47,"line":125},[45,78394,52225],{"class":51},[45,78396,51894],{"class":51381},[45,78398,51388],{"class":51},[45,78400,78401],{"class":47,"line":1262},[45,78402,78403],{"class":51},"    const arr = [10, 20, 30]\n",[45,78405,78406],{"class":47,"line":1277},[45,78407,78408],{"class":51},"    const newArr = arr.filter(function (item, index) {\n",[45,78410,78411],{"class":47,"line":1283},[45,78412,78338],{"class":51},[45,78414,78415],{"class":47,"line":1297},[45,78416,78343],{"class":51},[45,78418,78419],{"class":47,"line":1303},[45,78420,78421],{"class":51},"      return item >= 20\n",[45,78423,78424],{"class":47,"line":1394},[45,78425,33542],{"class":51},[45,78427,78428],{"class":47,"line":1400},[45,78429,78430],{"class":51},"    console.log(newArr)\n",[45,78432,78433,78435,78437],{"class":47,"line":1412},[45,78434,52498],{"class":51},[45,78436,51894],{"class":51381},[45,78438,51388],{"class":51},[45,78440,78441,78443,78445],{"class":47,"line":1695},[45,78442,51866],{"class":51},[45,78444,51881],{"class":51381},[45,78446,51388],{"class":51},[10,78448,78449],{},"这个也可以写成箭头函数：",[35,78451,78453],{"className":50714,"code":78452,"language":50716,"meta":40,"style":40},"const newArr = arr.filter(item => item >= 20)\n",[42,78454,78455],{"__ignoreMap":40},[45,78456,78457],{"class":47,"line":48},[45,78458,78452],{"class":51},[30,78460,78462],{"id":78461},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[10,78464,78465],{},[1545,78466],{"alt":40,"src":78467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[10,78469,78470],{},"步骤：",[10,78472,78473],{},"①：渲染页面模块",[1214,78475,78476,78479],{},[162,78477,78478],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[162,78480,78481],{},"用forEach+字符串的形式",[10,78483,78484],{},"②：点击不同需求，显示不同页面内容",[1214,78486,78487,78490,78493,78496,78499],{},[162,78488,78489],{},"点击采取事件委托方式 .filter",[162,78491,78492],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[162,78494,78495],{},"筛选条件是根据点击的 data-index 来判断",[162,78497,78498],{},"可以使用对象解构，把事件对象解构",[162,78500,78501],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[35,78503,78505],{"className":50714,"code":78504,"language":50716,"meta":40,"style":40},"\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",[42,78506,78507,78517,78531,78535,78543,78557,78577,78589,78597,78603,78613,78623,78633,78637,78641,78647,78660,78672,78682,78694,78698,78702,78709,78722,78734,78751,78769,78782,78786,78790,78802,78812,78816,78820,78827,78868,78895,78905,78909,78913,78921,78933,78937,78941,78949,78961,78973,78984,78988,78992,79001,79013,79024,79028,79032,79041,79053,79065,79069,79073,79080,79090,79102,79114,79129,79133,79137,79145,79161,79171,79181,79191,79203,79207,79211,79221,79232,79242,79246,79254,79262,79266,79274,79289,79315,79340,79365,79384,79392,79406,79411,79416,79421,79426,79431,79439,79447,79452,79463,79468,79478,79488,79498,79508,79512,79516,79525,79534,79543,79552,79556,79560,79569,79578,79587,79596,79600,79604,79613,79622,79631,79640,79644,79648,79657,79666,79675,79684,79688,79692,79701,79710,79719,79728,79732,79736,79745,79754,79763,79772,79776,79780,79789,79798,79806,79815,79819,79823,79827,79832,79844,79849,79861,79865,79882,79910,79919,79924,79934,79944,79953,79958,79963,79967,79972,79989,79993,79998,80006,80011,80038,80043,80063,80068,80080,80085,80090,80095,80106,80120,80157,80175,80208,80225,80249,80253,80258,80264,80268,80272,80276,80284,80292,80296],{"__ignoreMap":40},[45,78508,78509,78511,78513,78515],{"class":47,"line":48},[45,78510,51378],{"class":51},[45,78512,51382],{"class":51381},[45,78514,51385],{"class":2046},[45,78516,51388],{"class":51},[45,78518,78519,78521,78523,78525,78527,78529],{"class":47,"line":125},[45,78520,1117],{"class":51},[45,78522,50716],{"class":51381},[45,78524,51397],{"class":2046},[45,78526,254],{"class":51},[45,78528,51402],{"class":313},[45,78530,51388],{"class":51},[45,78532,78533],{"class":47,"line":1262},[45,78534,2483],{"emptyLinePlaceholder":133},[45,78536,78537,78539,78541],{"class":47,"line":1277},[45,78538,1117],{"class":51},[45,78540,51415],{"class":51381},[45,78542,51388],{"class":51},[45,78544,78545,78547,78549,78551,78553,78555],{"class":47,"line":1283},[45,78546,52225],{"class":51},[45,78548,51425],{"class":51381},[45,78550,51428],{"class":2046},[45,78552,254],{"class":51},[45,78554,51433],{"class":313},[45,78556,51388],{"class":51},[45,78558,78559,78561,78563,78565,78567,78569,78571,78573,78575],{"class":47,"line":1297},[45,78560,52225],{"class":51},[45,78562,51425],{"class":51381},[45,78564,15003],{"class":2046},[45,78566,254],{"class":51},[45,78568,51472],{"class":313},[45,78570,51452],{"class":2046},[45,78572,254],{"class":51},[45,78574,51479],{"class":313},[45,78576,51388],{"class":51},[45,78578,78579,78581,78583,78585,78587],{"class":47,"line":1303},[45,78580,52225],{"class":51},[45,78582,51488],{"class":51381},[45,78584,51491],{"class":51},[45,78586,51488],{"class":51381},[45,78588,51388],{"class":51},[45,78590,78591,78593,78595],{"class":47,"line":1394},[45,78592,52225],{"class":51},[45,78594,121],{"class":51381},[45,78596,51388],{"class":51},[45,78598,78599,78601],{"class":47,"line":1400},[45,78600,6486],{"class":51381},[45,78602,15655],{"class":51},[45,78604,78605,78607,78609,78611],{"class":47,"line":1412},[45,78606,54776],{"class":257},[45,78608,51518],{"class":51},[45,78610,400],{"class":257},[45,78612,1373],{"class":51},[45,78614,78615,78617,78619,78621],{"class":47,"line":1695},[45,78616,54787],{"class":257},[45,78618,51518],{"class":51},[45,78620,400],{"class":257},[45,78622,1373],{"class":51},[45,78624,78625,78627,78629,78631],{"class":47,"line":1700},[45,78626,72677],{"class":257},[45,78628,51518],{"class":51},[45,78630,60586],{"class":257},[45,78632,1373],{"class":51},[45,78634,78635],{"class":47,"line":1706},[45,78636,2270],{"class":51},[45,78638,78639],{"class":47,"line":1711},[45,78640,2483],{"emptyLinePlaceholder":133},[45,78642,78643,78645],{"class":47,"line":1725},[45,78644,62204],{"class":2046},[45,78646,15655],{"class":51},[45,78648,78649,78651,78653,78656,78658],{"class":47,"line":1730},[45,78650,54852],{"class":257},[45,78652,51518],{"class":51},[45,78654,78655],{"class":257},"990",[45,78657,51573],{"class":93},[45,78659,1373],{"class":51},[45,78661,78662,78664,78666,78668,78670],{"class":47,"line":1736},[45,78663,54787],{"class":257},[45,78665,51518],{"class":51},[45,78667,400],{"class":257},[45,78669,51637],{"class":257},[45,78671,1373],{"class":51},[45,78673,78674,78676,78678,78680],{"class":47,"line":1757},[45,78675,55090],{"class":257},[45,78677,51518],{"class":51},[45,78679,51558],{"class":257},[45,78681,1373],{"class":51},[45,78683,78684,78687,78689,78692],{"class":47,"line":1762},[45,78685,78686],{"class":257},"      flex-wrap",[45,78688,51518],{"class":51},[45,78690,78691],{"class":257},"wrap",[45,78693,1373],{"class":51},[45,78695,78696],{"class":47,"line":1776},[45,78697,2270],{"class":51},[45,78699,78700],{"class":47,"line":1781},[45,78701,2483],{"emptyLinePlaceholder":133},[45,78703,78704,78707],{"class":47,"line":1810},[45,78705,78706],{"class":2046},"    .item",[45,78708,15655],{"class":51},[45,78710,78711,78713,78715,78718,78720],{"class":47,"line":1815},[45,78712,54852],{"class":257},[45,78714,51518],{"class":51},[45,78716,78717],{"class":257},"240",[45,78719,51573],{"class":93},[45,78721,1373],{"class":51},[45,78723,78724,78726,78728,78730,78732],{"class":47,"line":1832},[45,78725,62081],{"class":257},[45,78727,51518],{"class":51},[45,78729,654],{"class":257},[45,78731,51573],{"class":93},[45,78733,1373],{"class":51},[45,78735,78736,78738,78740,78742,78744,78747,78749],{"class":47,"line":1837},[45,78737,54776],{"class":257},[45,78739,51518],{"class":51},[45,78741,907],{"class":257},[45,78743,51573],{"class":93},[45,78745,78746],{"class":257}," 30",[45,78748,51573],{"class":93},[45,78750,1373],{"class":51},[45,78752,78753,78755,78757,78759,78762,78765,78767],{"class":47,"line":1842},[45,78754,61941],{"class":257},[45,78756,51518],{"class":51},[45,78758,28204],{"class":257},[45,78760,78761],{"class":257}," ease",[45,78763,78764],{"class":257}," .5",[45,78766,902],{"class":93},[45,78768,1373],{"class":51},[45,78770,78771,78774,78776,78778,78780],{"class":47,"line":1847},[45,78772,78773],{"class":257},"      margin-bottom",[45,78775,51518],{"class":51},[45,78777,907],{"class":257},[45,78779,51573],{"class":93},[45,78781,1373],{"class":51},[45,78783,78784],{"class":47,"line":1861},[45,78785,2270],{"class":51},[45,78787,78788],{"class":47,"line":1866},[45,78789,2483],{"emptyLinePlaceholder":133},[45,78791,78792,78795,78797,78800],{"class":47,"line":2660},[45,78793,78794],{"class":2046},"    .item:nth-child",[45,78796,209],{"class":51},[45,78798,78799],{"class":257},"4n",[45,78801,12525],{"class":51},[45,78803,78804,78806,78808,78810],{"class":47,"line":2674},[45,78805,62081],{"class":257},[45,78807,51518],{"class":51},[45,78809,400],{"class":257},[45,78811,1373],{"class":51},[45,78813,78814],{"class":47,"line":2682},[45,78815,2270],{"class":51},[45,78817,78818],{"class":47,"line":2687},[45,78819,2483],{"emptyLinePlaceholder":133},[45,78821,78822,78825],{"class":47,"line":2693},[45,78823,78824],{"class":2046},"    .item:hover",[45,78826,15655],{"class":51},[45,78828,78829,78832,78834,78836,78838,78840,78842,78844,78846,78849,78851,78853,78855,78857,78859,78861,78863,78866],{"class":47,"line":2699},[45,78830,78831],{"class":257},"      box-shadow",[45,78833,51518],{"class":51},[45,78835,400],{"class":257},[45,78837,51573],{"class":93},[45,78839,4176],{"class":257},[45,78841,51573],{"class":93},[45,78843,2231],{"class":257},[45,78845,51573],{"class":93},[45,78847,78848],{"class":257}," rgba",[45,78850,209],{"class":51},[45,78852,400],{"class":257},[45,78854,12518],{"class":51},[45,78856,400],{"class":257},[45,78858,12518],{"class":51},[45,78860,400],{"class":257},[45,78862,12518],{"class":51},[45,78864,78865],{"class":257},".2",[45,78867,2802],{"class":51},[45,78869,78870,78873,78875,78878,78880,78882,78884,78887,78889,78891,78893],{"class":47,"line":2704},[45,78871,78872],{"class":257},"      transform",[45,78874,51518],{"class":51},[45,78876,78877],{"class":257},"translate3d",[45,78879,209],{"class":51},[45,78881,400],{"class":257},[45,78883,12518],{"class":51},[45,78885,78886],{"class":257},"-4",[45,78888,51573],{"class":93},[45,78890,12518],{"class":51},[45,78892,400],{"class":257},[45,78894,2802],{"class":51},[45,78896,78897,78899,78901,78903],{"class":47,"line":8031},[45,78898,62106],{"class":257},[45,78900,51518],{"class":51},[45,78902,62111],{"class":257},[45,78904,1373],{"class":51},[45,78906,78907],{"class":47,"line":8055},[45,78908,2270],{"class":51},[45,78910,78911],{"class":47,"line":8060},[45,78912,2483],{"emptyLinePlaceholder":133},[45,78914,78915,78917,78919],{"class":47,"line":8066},[45,78916,78706],{"class":2046},[45,78918,55696],{"class":51381},[45,78920,15655],{"class":51},[45,78922,78923,78925,78927,78929,78931],{"class":47,"line":8093},[45,78924,54852],{"class":257},[45,78926,51518],{"class":51},[45,78928,519],{"class":257},[45,78930,536],{"class":93},[45,78932,1373],{"class":51},[45,78934,78935],{"class":47,"line":8098},[45,78936,2270],{"class":51},[45,78938,78939],{"class":47,"line":8104},[45,78940,2483],{"emptyLinePlaceholder":133},[45,78942,78943,78945,78947],{"class":47,"line":8116},[45,78944,78706],{"class":2046},[45,78946,62385],{"class":2046},[45,78948,15655],{"class":51},[45,78950,78951,78953,78955,78957,78959],{"class":47,"line":8128},[45,78952,55003],{"class":257},[45,78954,51518],{"class":51},[45,78956,857],{"class":257},[45,78958,51573],{"class":93},[45,78960,1373],{"class":51},[45,78962,78963,78965,78967,78969,78971],{"class":47,"line":8140},[45,78964,78773],{"class":257},[45,78966,51518],{"class":51},[45,78968,654],{"class":257},[45,78970,51573],{"class":93},[45,78972,1373],{"class":51},[45,78974,78975,78977,78979,78982],{"class":47,"line":9799},[45,78976,57497],{"class":257},[45,78978,51518],{"class":51},[45,78980,78981],{"class":257},"#666",[45,78983,1373],{"class":51},[45,78985,78986],{"class":47,"line":9824},[45,78987,2270],{"class":51},[45,78989,78990],{"class":47,"line":9847},[45,78991,2483],{"emptyLinePlaceholder":133},[45,78993,78994,78996,78999],{"class":47,"line":9871},[45,78995,78706],{"class":2046},[45,78997,78998],{"class":2046}," .price",[45,79000,15655],{"class":51},[45,79002,79003,79005,79007,79009,79011],{"class":47,"line":9876},[45,79004,55003],{"class":257},[45,79006,51518],{"class":51},[45,79008,957],{"class":257},[45,79010,51573],{"class":93},[45,79012,1373],{"class":51},[45,79014,79015,79017,79019,79022],{"class":47,"line":9881},[45,79016,57497],{"class":257},[45,79018,51518],{"class":51},[45,79020,79021],{"class":257},"firebrick",[45,79023,1373],{"class":51},[45,79025,79026],{"class":47,"line":9886},[45,79027,2270],{"class":51},[45,79029,79030],{"class":47,"line":9895},[45,79031,2483],{"emptyLinePlaceholder":133},[45,79033,79034,79036,79039],{"class":47,"line":9900},[45,79035,78706],{"class":2046},[45,79037,79038],{"class":2046}," .price::before",[45,79040,15655],{"class":51},[45,79042,79043,79046,79048,79051],{"class":47,"line":9906},[45,79044,79045],{"class":257},"      content",[45,79047,51518],{"class":51},[45,79049,79050],{"class":313},"'￥'",[45,79052,1373],{"class":51},[45,79054,79055,79057,79059,79061,79063],{"class":47,"line":9927},[45,79056,55003],{"class":257},[45,79058,51518],{"class":51},[45,79060,756],{"class":257},[45,79062,51573],{"class":93},[45,79064,1373],{"class":51},[45,79066,79067],{"class":47,"line":9933},[45,79068,2270],{"class":51},[45,79070,79071],{"class":47,"line":9947},[45,79072,2483],{"emptyLinePlaceholder":133},[45,79074,79075,79078],{"class":47,"line":9953},[45,79076,79077],{"class":2046},"    .filter",[45,79079,15655],{"class":51},[45,79081,79082,79084,79086,79088],{"class":47,"line":9980},[45,79083,55090],{"class":257},[45,79085,51518],{"class":51},[45,79087,51558],{"class":257},[45,79089,1373],{"class":51},[45,79091,79092,79094,79096,79098,79100],{"class":47,"line":9989},[45,79093,54852],{"class":257},[45,79095,51518],{"class":51},[45,79097,78655],{"class":257},[45,79099,51573],{"class":93},[45,79101,1373],{"class":51},[45,79103,79104,79106,79108,79110,79112],{"class":47,"line":9995},[45,79105,54787],{"class":257},[45,79107,51518],{"class":51},[45,79109,400],{"class":257},[45,79111,51637],{"class":257},[45,79113,1373],{"class":51},[45,79115,79116,79118,79120,79122,79124,79126],{"class":47,"line":10003},[45,79117,54776],{"class":257},[45,79119,51518],{"class":51},[45,79121,863],{"class":257},[45,79123,51573],{"class":93},[45,79125,78746],{"class":257},[45,79127,79128],{"class":93},"px\n",[45,79130,79131],{"class":47,"line":10008},[45,79132,2270],{"class":51},[45,79134,79135],{"class":47,"line":16687},[45,79136,2483],{"emptyLinePlaceholder":133},[45,79138,79139,79141,79143],{"class":47,"line":16693},[45,79140,79077],{"class":2046},[45,79142,1481],{"class":51381},[45,79144,15655],{"class":51},[45,79146,79147,79149,79151,79153,79155,79157,79159],{"class":47,"line":16716},[45,79148,54776],{"class":257},[45,79150,51518],{"class":51},[45,79152,654],{"class":257},[45,79154,51573],{"class":93},[45,79156,9033],{"class":257},[45,79158,51573],{"class":93},[45,79160,1373],{"class":51},[45,79162,79163,79165,79167,79169],{"class":47,"line":16722},[45,79164,61802],{"class":257},[45,79166,51518],{"class":51},[45,79168,61899],{"class":257},[45,79170,1373],{"class":51},[45,79172,79173,79175,79177,79179],{"class":47,"line":16745},[45,79174,57497],{"class":257},[45,79176,51518],{"class":51},[45,79178,78981],{"class":257},[45,79180,1373],{"class":51},[45,79182,79183,79185,79187,79189],{"class":47,"line":16759},[45,79184,64051],{"class":257},[45,79186,51518],{"class":51},[45,79188,54818],{"class":257},[45,79190,1373],{"class":51},[45,79192,79193,79195,79197,79199,79201],{"class":47,"line":16779},[45,79194,61831],{"class":257},[45,79196,51518],{"class":51},[45,79198,907],{"class":257},[45,79200,51573],{"class":93},[45,79202,1373],{"class":51},[45,79204,79205],{"class":47,"line":16785},[45,79206,2270],{"class":51},[45,79208,79209],{"class":47,"line":16796},[45,79210,2483],{"emptyLinePlaceholder":133},[45,79212,79213,79215,79217,79219],{"class":47,"line":16819},[45,79214,79077],{"class":2046},[45,79216,1481],{"class":51381},[45,79218,61981],{"class":2046},[45,79220,15655],{"class":51},[45,79222,79223,79225,79227,79230],{"class":47,"line":16841},[45,79224,54965],{"class":257},[45,79226,51518],{"class":51},[45,79228,79229],{"class":257},"#05943c",[45,79231,1373],{"class":51},[45,79233,79234,79236,79238,79240],{"class":47,"line":16846},[45,79235,57497],{"class":257},[45,79237,51518],{"class":51},[45,79239,60923],{"class":257},[45,79241,1373],{"class":51},[45,79243,79244],{"class":47,"line":16852},[45,79245,2270],{"class":51},[45,79247,79248,79250,79252],{"class":47,"line":16866},[45,79249,52498],{"class":51},[45,79251,121],{"class":51381},[45,79253,51388],{"class":51},[45,79255,79256,79258,79260],{"class":47,"line":16879},[45,79257,51866],{"class":51},[45,79259,51415],{"class":51381},[45,79261,51388],{"class":51},[45,79263,79264],{"class":47,"line":16884},[45,79265,2483],{"emptyLinePlaceholder":133},[45,79267,79268,79270,79272],{"class":47,"line":16898},[45,79269,1117],{"class":51},[45,79271,51881],{"class":51381},[45,79273,51388],{"class":51},[45,79275,79276,79278,79280,79282,79284,79287],{"class":47,"line":16903},[45,79277,52225],{"class":51},[45,79279,51692],{"class":51381},[45,79281,53567],{"class":2046},[45,79283,254],{"class":51},[45,79285,79286],{"class":313},"\"filter\"",[45,79288,51388],{"class":51},[45,79290,79291,79293,79295,79297,79299,79301,79304,79306,79308,79311,79313],{"class":47,"line":16909},[45,79292,51422],{"class":51},[45,79294,13],{"class":51381},[45,79296,61138],{"class":2046},[45,79298,254],{"class":51},[45,79300,61143],{"class":313},[45,79302,79303],{"class":2046}," data-index",[45,79305,254],{"class":51},[45,79307,3761],{"class":313},[45,79309,79310],{"class":51},">0-100元\u003C\u002F",[45,79312,13],{"class":51381},[45,79314,51388],{"class":51},[45,79316,79317,79319,79321,79323,79325,79327,79329,79331,79333,79336,79338],{"class":47,"line":16914},[45,79318,51422],{"class":51},[45,79320,13],{"class":51381},[45,79322,61138],{"class":2046},[45,79324,254],{"class":51},[45,79326,61143],{"class":313},[45,79328,79303],{"class":2046},[45,79330,254],{"class":51},[45,79332,3784],{"class":313},[45,79334,79335],{"class":51},">100-300元\u003C\u002F",[45,79337,13],{"class":51381},[45,79339,51388],{"class":51},[45,79341,79342,79344,79346,79348,79350,79352,79354,79356,79358,79361,79363],{"class":47,"line":16928},[45,79343,51422],{"class":51},[45,79345,13],{"class":51381},[45,79347,61138],{"class":2046},[45,79349,254],{"class":51},[45,79351,61143],{"class":313},[45,79353,79303],{"class":2046},[45,79355,254],{"class":51},[45,79357,3797],{"class":313},[45,79359,79360],{"class":51},">300元以上\u003C\u002F",[45,79362,13],{"class":51381},[45,79364,51388],{"class":51},[45,79366,79367,79369,79371,79373,79375,79377,79380,79382],{"class":47,"line":16933},[45,79368,51422],{"class":51},[45,79370,13],{"class":51381},[45,79372,61138],{"class":2046},[45,79374,254],{"class":51},[45,79376,61143],{"class":313},[45,79378,79379],{"class":51},">全部区间\u003C\u002F",[45,79381,13],{"class":51381},[45,79383,51388],{"class":51},[45,79385,79386,79388,79390],{"class":47,"line":16938},[45,79387,52498],{"class":51},[45,79389,51692],{"class":51381},[45,79391,51388],{"class":51},[45,79393,79394,79396,79398,79400,79402,79404],{"class":47,"line":16952},[45,79395,52225],{"class":51},[45,79397,51692],{"class":51381},[45,79399,53567],{"class":2046},[45,79401,254],{"class":51},[45,79403,62689],{"class":313},[45,79405,51388],{"class":51},[45,79407,79408],{"class":47,"line":16964},[45,79409,79410],{"class":267},"    \u003C!-- \u003Cdiv class=\"item\">\n",[45,79412,79413],{"class":47,"line":16969},[45,79414,79415],{"class":267},"      \u003Cimg src=\"\" alt=\"\">\n",[45,79417,79418],{"class":47,"line":16982},[45,79419,79420],{"class":267},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[45,79422,79423],{"class":47,"line":16987},[45,79424,79425],{"class":267},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[45,79427,79428],{"class":47,"line":16992},[45,79429,79430],{"class":267},"    \u003C\u002Fdiv> -->\n",[45,79432,79433,79435,79437],{"class":47,"line":16997},[45,79434,52498],{"class":51},[45,79436,51692],{"class":51381},[45,79438,51388],{"class":51},[45,79440,79441,79443,79445],{"class":47,"line":17010},[45,79442,52225],{"class":51},[45,79444,51894],{"class":51381},[45,79446,51388],{"class":51},[45,79448,79449],{"class":47,"line":17015},[45,79450,79451],{"class":267},"    \u002F\u002F 2. 初始化数据\n",[45,79453,79454,79456,79459,79461],{"class":47,"line":32714},[45,79455,11304],{"class":93},[45,79457,79458],{"class":257}," goodsList",[45,79460,13647],{"class":93},[45,79462,55528],{"class":51},[45,79464,79465],{"class":47,"line":32720},[45,79466,79467],{"class":51},"      {\n",[45,79469,79470,79473,79476],{"class":47,"line":32726},[45,79471,79472],{"class":51},"        id: ",[45,79474,79475],{"class":313},"'4001172'",[45,79477,31547],{"class":51},[45,79479,79480,79483,79486],{"class":47,"line":32732},[45,79481,79482],{"class":51},"        name: ",[45,79484,79485],{"class":313},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[45,79487,31547],{"class":51},[45,79489,79490,79493,79496],{"class":47,"line":32738},[45,79491,79492],{"class":51},"        price: ",[45,79494,79495],{"class":313},"'289.00'",[45,79497,31547],{"class":51},[45,79499,79500,79503,79506],{"class":47,"line":32749},[45,79501,79502],{"class":51},"        picture: ",[45,79504,79505],{"class":313},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[45,79507,31547],{"class":51},[45,79509,79510],{"class":47,"line":32755},[45,79511,77973],{"class":51},[45,79513,79514],{"class":47,"line":32775},[45,79515,79467],{"class":51},[45,79517,79518,79520,79523],{"class":47,"line":32781},[45,79519,79472],{"class":51},[45,79521,79522],{"class":313},"'4001594'",[45,79524,31547],{"class":51},[45,79526,79527,79529,79532],{"class":47,"line":32792},[45,79528,79482],{"class":51},[45,79530,79531],{"class":313},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[45,79533,31547],{"class":51},[45,79535,79536,79538,79541],{"class":47,"line":32798},[45,79537,79492],{"class":51},[45,79539,79540],{"class":313},"'288.00'",[45,79542,31547],{"class":51},[45,79544,79545,79547,79550],{"class":47,"line":32804},[45,79546,79502],{"class":51},[45,79548,79549],{"class":313},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[45,79551,31547],{"class":51},[45,79553,79554],{"class":47,"line":32810},[45,79555,77973],{"class":51},[45,79557,79558],{"class":47,"line":32816},[45,79559,79467],{"class":51},[45,79561,79562,79564,79567],{"class":47,"line":32822},[45,79563,79472],{"class":51},[45,79565,79566],{"class":313},"'4001009'",[45,79568,31547],{"class":51},[45,79570,79571,79573,79576],{"class":47,"line":32828},[45,79572,79482],{"class":51},[45,79574,79575],{"class":313},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[45,79577,31547],{"class":51},[45,79579,79580,79582,79585],{"class":47,"line":32834},[45,79581,79492],{"class":51},[45,79583,79584],{"class":313},"'109.00'",[45,79586,31547],{"class":51},[45,79588,79589,79591,79594],{"class":47,"line":32854},[45,79590,79502],{"class":51},[45,79592,79593],{"class":313},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[45,79595,31547],{"class":51},[45,79597,79598],{"class":47,"line":32860},[45,79599,77973],{"class":51},[45,79601,79602],{"class":47,"line":32876},[45,79603,79467],{"class":51},[45,79605,79606,79608,79611],{"class":47,"line":32882},[45,79607,79472],{"class":51},[45,79609,79610],{"class":313},"'4001874'",[45,79612,31547],{"class":51},[45,79614,79615,79617,79620],{"class":47,"line":32896},[45,79616,79482],{"class":51},[45,79618,79619],{"class":313},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[45,79621,31547],{"class":51},[45,79623,79624,79626,79629],{"class":47,"line":32902},[45,79625,79492],{"class":51},[45,79627,79628],{"class":313},"'488.00'",[45,79630,31547],{"class":51},[45,79632,79633,79635,79638],{"class":47,"line":32917},[45,79634,79502],{"class":51},[45,79636,79637],{"class":313},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[45,79639,31547],{"class":51},[45,79641,79642],{"class":47,"line":32923},[45,79643,77973],{"class":51},[45,79645,79646],{"class":47,"line":32932},[45,79647,79467],{"class":51},[45,79649,79650,79652,79655],{"class":47,"line":32938},[45,79651,79472],{"class":51},[45,79653,79654],{"class":313},"'4001649'",[45,79656,31547],{"class":51},[45,79658,79659,79661,79664],{"class":47,"line":32947},[45,79660,79482],{"class":51},[45,79662,79663],{"class":313},"'大师监制龙泉青瓷茶叶罐'",[45,79665,31547],{"class":51},[45,79667,79668,79670,79673],{"class":47,"line":32953},[45,79669,79492],{"class":51},[45,79671,79672],{"class":313},"'139.00'",[45,79674,31547],{"class":51},[45,79676,79677,79679,79682],{"class":47,"line":32959},[45,79678,79502],{"class":51},[45,79680,79681],{"class":313},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[45,79683,31547],{"class":51},[45,79685,79686],{"class":47,"line":32968},[45,79687,77973],{"class":51},[45,79689,79690],{"class":47,"line":32974},[45,79691,79467],{"class":51},[45,79693,79694,79696,79699],{"class":47,"line":32985},[45,79695,79472],{"class":51},[45,79697,79698],{"class":313},"'3997185'",[45,79700,31547],{"class":51},[45,79702,79703,79705,79708],{"class":47,"line":32991},[45,79704,79482],{"class":51},[45,79706,79707],{"class":313},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[45,79709,31547],{"class":51},[45,79711,79712,79714,79717],{"class":47,"line":33010},[45,79713,79492],{"class":51},[45,79715,79716],{"class":313},"'108.00'",[45,79718,31547],{"class":51},[45,79720,79721,79723,79726],{"class":47,"line":33016},[45,79722,79502],{"class":51},[45,79724,79725],{"class":313},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[45,79727,31547],{"class":51},[45,79729,79730],{"class":47,"line":33027},[45,79731,77973],{"class":51},[45,79733,79734],{"class":47,"line":33033},[45,79735,79467],{"class":51},[45,79737,79738,79740,79743],{"class":47,"line":33053},[45,79739,79472],{"class":51},[45,79741,79742],{"class":313},"'3997403'",[45,79744,31547],{"class":51},[45,79746,79747,79749,79752],{"class":47,"line":33069},[45,79748,79482],{"class":51},[45,79750,79751],{"class":313},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[45,79753,31547],{"class":51},[45,79755,79756,79758,79761],{"class":47,"line":33075},[45,79757,79492],{"class":51},[45,79759,79760],{"class":313},"'100.00'",[45,79762,31547],{"class":51},[45,79764,79765,79767,79770],{"class":47,"line":33089},[45,79766,79502],{"class":51},[45,79768,79769],{"class":313},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[45,79771,31547],{"class":51},[45,79773,79774],{"class":47,"line":33095},[45,79775,77973],{"class":51},[45,79777,79778],{"class":47,"line":33101},[45,79779,79467],{"class":51},[45,79781,79782,79784,79787],{"class":47,"line":33112},[45,79783,79472],{"class":51},[45,79785,79786],{"class":313},"'3998274'",[45,79788,31547],{"class":51},[45,79790,79791,79793,79796],{"class":47,"line":33118},[45,79792,79482],{"class":51},[45,79794,79795],{"class":313},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[45,79797,31547],{"class":51},[45,79799,79800,79802,79804],{"class":47,"line":33124},[45,79801,79492],{"class":51},[45,79803,79672],{"class":313},[45,79805,31547],{"class":51},[45,79807,79808,79810,79813],{"class":47,"line":33134},[45,79809,79502],{"class":51},[45,79811,79812],{"class":313},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[45,79814,31547],{"class":51},[45,79816,79817],{"class":47,"line":33140},[45,79818,77973],{"class":51},[45,79820,79821],{"class":47,"line":33151},[45,79822,53190],{"class":51},[45,79824,79825],{"class":47,"line":33157},[45,79826,2483],{"emptyLinePlaceholder":133},[45,79828,79829],{"class":47,"line":33167},[45,79830,79831],{"class":267},"    \u002F\u002F 1.渲染函数\n",[45,79833,79834,79836,79838,79840,79842],{"class":47,"line":33172},[45,79835,70165],{"class":93},[45,79837,70168],{"class":2046},[45,79839,209],{"class":51},[45,79841,3963],{"class":5299},[45,79843,12525],{"class":51},[45,79845,79846],{"class":47,"line":33178},[45,79847,79848],{"class":267},"      \u002F\u002F 声明空字符串\n",[45,79850,79851,79854,79857,79859],{"class":47,"line":33227},[45,79852,79853],{"class":93},"      let",[45,79855,79856],{"class":51}," str ",[45,79858,254],{"class":93},[45,79860,70185],{"class":313},[45,79862,79863],{"class":47,"line":33274},[45,79864,70190],{"class":267},[45,79866,79867,79869,79872,79874,79877,79880],{"class":47,"line":33279},[45,79868,58088],{"class":51},[45,79870,79871],{"class":2046},"forEach",[45,79873,209],{"class":51},[45,79875,79876],{"class":5299},"item",[45,79878,79879],{"class":93}," =>",[45,79881,15655],{"class":51},[45,79883,79884,79886,79889,79892,79894,79897,79899,79902,79905,79907],{"class":47,"line":33285},[45,79885,61351],{"class":93},[45,79887,79888],{"class":51}," { ",[45,79890,79891],{"class":257},"name",[45,79893,12518],{"class":51},[45,79895,79896],{"class":257},"price",[45,79898,12518],{"class":51},[45,79900,79901],{"class":257},"picture",[45,79903,79904],{"class":51}," } ",[45,79906,254],{"class":93},[45,79908,79909],{"class":51}," item\n",[45,79911,79912,79915,79917],{"class":47,"line":33304},[45,79913,79914],{"class":51},"        str ",[45,79916,9560],{"class":93},[45,79918,70249],{"class":313},[45,79920,79921],{"class":47,"line":33310},[45,79922,79923],{"class":313},"          \u003Cdiv class=\"item\">\n",[45,79925,79926,79929,79931],{"class":47,"line":33330},[45,79927,79928],{"class":313},"            \u003Cimg src=\"${",[45,79930,79901],{"class":51},[45,79932,79933],{"class":313},"}\" alt=\"\">\n",[45,79935,79936,79939,79941],{"class":47,"line":33336},[45,79937,79938],{"class":313},"            \u003Cp class=\"name\">${",[45,79940,79891],{"class":51},[45,79942,79943],{"class":313},"}\u003C\u002Fp>\n",[45,79945,79946,79949,79951],{"class":47,"line":33342},[45,79947,79948],{"class":313},"            \u003Cp class=\"price\">${",[45,79950,79896],{"class":51},[45,79952,79943],{"class":313},[45,79954,79955],{"class":47,"line":33352},[45,79956,79957],{"class":313},"          \u003C\u002Fdiv>\n",[45,79959,79960],{"class":47,"line":33357},[45,79961,79962],{"class":313},"        `\n",[45,79964,79965],{"class":47,"line":33363},[45,79966,64896],{"class":51},[45,79968,79969],{"class":47,"line":33379},[45,79970,79971],{"class":267},"      \u002F\u002F 追加给List\n",[45,79973,79974,79976,79978,79980,79983,79985,79987],{"class":47,"line":33424},[45,79975,55852],{"class":51},[45,79977,54480],{"class":2046},[45,79979,209],{"class":51},[45,79981,79982],{"class":313},"'.list'",[45,79984,74330],{"class":51},[45,79986,254],{"class":93},[45,79988,74066],{"class":51},[45,79990,79991],{"class":47,"line":33430},[45,79992,2270],{"class":51},[45,79994,79995],{"class":47,"line":33436},[45,79996,79997],{"class":267},"    \u002F\u002F 页面一打开就需要渲染\n",[45,79999,80000,80003],{"class":47,"line":33442},[45,80001,80002],{"class":2046},"    render",[45,80004,80005],{"class":51},"(goodsList)\n",[45,80007,80008],{"class":47,"line":33453},[45,80009,80010],{"class":267},"    \u002F\u002F 2.过滤筛选\n",[45,80012,80013,80015,80017,80019,80022,80024,80026,80028,80030,80032,80034,80036],{"class":47,"line":33459},[45,80014,52488],{"class":51},[45,80016,54480],{"class":2046},[45,80018,209],{"class":51},[45,80020,80021],{"class":313},"'.filter'",[45,80023,30907],{"class":51},[45,80025,57894],{"class":2046},[45,80027,209],{"class":51},[45,80029,57899],{"class":313},[45,80031,12518],{"class":51},[45,80033,283],{"class":5299},[45,80035,79879],{"class":93},[45,80037,15655],{"class":51},[45,80039,80040],{"class":47,"line":33465},[45,80041,80042],{"class":267},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[45,80044,80045,80047,80049,80052,80054,80056,80058,80060],{"class":47,"line":33471},[45,80046,58309],{"class":93},[45,80048,79888],{"class":51},[45,80050,80051],{"class":257},"tagName",[45,80053,12518],{"class":51},[45,80055,31618],{"class":257},[45,80057,79904],{"class":51},[45,80059,254],{"class":93},[45,80061,80062],{"class":51}," e.target\n",[45,80064,80065],{"class":47,"line":33489},[45,80066,80067],{"class":267},"      \u002F\u002F 判断\n",[45,80069,80070,80072,80074,80076,80078],{"class":47,"line":33503},[45,80071,54561],{"class":93},[45,80073,67115],{"class":51},[45,80075,54567],{"class":93},[45,80077,68337],{"class":313},[45,80079,12525],{"class":51},[45,80081,80082],{"class":47,"line":33512},[45,80083,80084],{"class":267},"        \u002F\u002F console.log(11)\n",[45,80086,80087],{"class":47,"line":33521},[45,80088,80089],{"class":267},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[45,80091,80092],{"class":47,"line":33530},[45,80093,80094],{"class":267},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[45,80096,80097,80099,80101,80103],{"class":47,"line":33539},[45,80098,51911],{"class":93},[45,80100,51914],{"class":51},[45,80102,254],{"class":93},[45,80104,80105],{"class":51}," goodsList\n",[45,80107,80108,80110,80113,80115,80118],{"class":47,"line":33545},[45,80109,2580],{"class":93},[45,80111,80112],{"class":51}," (dataset.index ",[45,80114,54567],{"class":93},[45,80116,80117],{"class":313}," '1'",[45,80119,12525],{"class":51},[45,80121,80122,80125,80127,80130,80133,80135,80137,80139,80142,80144,80146,80149,80151,80153,80155],{"class":47,"line":33551},[45,80123,80124],{"class":51},"          arr ",[45,80126,254],{"class":93},[45,80128,80129],{"class":51}," goodsList.",[45,80131,80132],{"class":2046},"filter",[45,80134,209],{"class":51},[45,80136,79876],{"class":5299},[45,80138,79879],{"class":93},[45,80140,80141],{"class":51}," item.price ",[45,80143,1793],{"class":93},[45,80145,4176],{"class":257},[45,80147,80148],{"class":93}," &&",[45,80150,80141],{"class":51},[45,80152,1671],{"class":93},[45,80154,5837],{"class":257},[45,80156,215],{"class":51},[45,80158,80159,80162,80164,80166,80168,80170,80173],{"class":47,"line":33559},[45,80160,80161],{"class":51},"        } ",[45,80163,1784],{"class":93},[45,80165,1787],{"class":93},[45,80167,80112],{"class":51},[45,80169,54567],{"class":93},[45,80171,80172],{"class":313}," '2'",[45,80174,12525],{"class":51},[45,80176,80177,80179,80181,80183,80185,80187,80189,80191,80193,80195,80197,80199,80201,80203,80206],{"class":47,"line":33564},[45,80178,80124],{"class":51},[45,80180,254],{"class":93},[45,80182,80129],{"class":51},[45,80184,80132],{"class":2046},[45,80186,209],{"class":51},[45,80188,79876],{"class":5299},[45,80190,79879],{"class":93},[45,80192,80141],{"class":51},[45,80194,1793],{"class":93},[45,80196,5837],{"class":257},[45,80198,80148],{"class":93},[45,80200,80141],{"class":51},[45,80202,1671],{"class":93},[45,80204,80205],{"class":257}," 300",[45,80207,215],{"class":51},[45,80209,80210,80212,80214,80216,80218,80220,80223],{"class":47,"line":33570},[45,80211,80161],{"class":51},[45,80213,1784],{"class":93},[45,80215,1787],{"class":93},[45,80217,80112],{"class":51},[45,80219,54567],{"class":93},[45,80221,80222],{"class":313}," '3'",[45,80224,12525],{"class":51},[45,80226,80227,80229,80231,80233,80235,80237,80239,80241,80243,80245,80247],{"class":47,"line":33581},[45,80228,80124],{"class":51},[45,80230,254],{"class":93},[45,80232,80129],{"class":51},[45,80234,80132],{"class":2046},[45,80236,209],{"class":51},[45,80238,79876],{"class":5299},[45,80240,79879],{"class":93},[45,80242,80141],{"class":51},[45,80244,1793],{"class":93},[45,80246,80205],{"class":257},[45,80248,215],{"class":51},[45,80250,80251],{"class":47,"line":33587},[45,80252,2612],{"class":51},[45,80254,80255],{"class":47,"line":33607},[45,80256,80257],{"class":267},"        \u002F\u002F 渲染函数\n",[45,80259,80260,80262],{"class":47,"line":33613},[45,80261,70489],{"class":2046},[45,80263,52493],{"class":51},[45,80265,80266],{"class":47,"line":33619},[45,80267,52479],{"class":51},[45,80269,80270],{"class":47,"line":33625},[45,80271,2483],{"emptyLinePlaceholder":133},[45,80273,80274],{"class":47,"line":33642},[45,80275,33542],{"class":51},[45,80277,80278,80280,80282],{"class":47,"line":33648},[45,80279,52498],{"class":51},[45,80281,51894],{"class":51381},[45,80283,51388],{"class":51},[45,80285,80286,80288,80290],{"class":47,"line":33654},[45,80287,51866],{"class":51},[45,80289,51881],{"class":51381},[45,80291,51388],{"class":51},[45,80293,80294],{"class":47,"line":33660},[45,80295,2483],{"emptyLinePlaceholder":133},[45,80297,80298,80300,80302],{"class":47,"line":33666},[45,80299,51866],{"class":51},[45,80301,50716],{"class":51381},[45,80303,51388],{"class":51},[30,80305,80307],{"id":80306},"_410-深入了解对象","4.10 深入了解对象",[176,80309,80311],{"id":80310},"_4101-创建对象","4.10.1 创建对象",[10,80313,80314],{},[1545,80315],{"alt":40,"src":80316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[10,80318,80319],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[176,80321,80323],{"id":80322},"_4102-构造函数","4.10.2 构造函数",[10,80325,80326,80329],{},[358,80327,80328],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[10,80331,80332,80335],{},[358,80333,80334],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[35,80337,80339],{"className":50714,"code":80338,"language":50716,"meta":40,"style":40},"\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",[42,80340,80341,80349,80354,80375,80388,80400,80412,80416,80421,80448,80453,80480],{"__ignoreMap":40},[45,80342,80343,80345,80347],{"class":47,"line":48},[45,80344,1117],{"class":51},[45,80346,51894],{"class":51381},[45,80348,51388],{"class":51},[45,80350,80351],{"class":47,"line":125},[45,80352,80353],{"class":267},"\u002F\u002F例：\n",[45,80355,80356,80358,80361,80363,80365,80367,80369,80371,80373],{"class":47,"line":1262},[45,80357,54530],{"class":93},[45,80359,80360],{"class":2046}," Pig",[45,80362,209],{"class":51},[45,80364,79891],{"class":5299},[45,80366,586],{"class":51},[45,80368,70302],{"class":5299},[45,80370,586],{"class":51},[45,80372,70319],{"class":5299},[45,80374,12525],{"class":51},[45,80376,80377,80380,80383,80385],{"class":47,"line":1277},[45,80378,80379],{"class":257},"    this",[45,80381,80382],{"class":51},".name",[45,80384,254],{"class":93},[45,80386,80387],{"class":51},"name\n",[45,80389,80390,80392,80395,80397],{"class":47,"line":1283},[45,80391,80379],{"class":257},[45,80393,80394],{"class":51},".age",[45,80396,254],{"class":93},[45,80398,80399],{"class":51},"age\n",[45,80401,80402,80404,80407,80409],{"class":47,"line":1297},[45,80403,80379],{"class":257},[45,80405,80406],{"class":51},".gender",[45,80408,254],{"class":93},[45,80410,80411],{"class":51},"gender    \n",[45,80413,80414],{"class":47,"line":1303},[45,80415,1648],{"class":51},[45,80417,80418],{"class":47,"line":1394},[45,80419,80420],{"class":267},"\u002F\u002F创建佩奇对象\n",[45,80422,80423,80425,80428,80430,80432,80434,80437,80439,80441,80443,80446],{"class":47,"line":1400},[45,80424,6875],{"class":93},[45,80426,80427],{"class":257}," Peppa",[45,80429,11800],{"class":93},[45,80431,80360],{"class":2046},[45,80433,209],{"class":51},[45,80435,80436],{"class":313},"'佩奇'",[45,80438,586],{"class":51},[45,80440,552],{"class":257},[45,80442,586],{"class":51},[45,80444,80445],{"class":313},"'女'",[45,80447,215],{"class":51},[45,80449,80450],{"class":47,"line":1412},[45,80451,80452],{"class":267},"\u002F\u002F创建乔治对象\n",[45,80454,80455,80457,80460,80462,80464,80466,80469,80471,80473,80475,80478],{"class":47,"line":1695},[45,80456,6875],{"class":93},[45,80458,80459],{"class":257}," George",[45,80461,11800],{"class":93},[45,80463,80360],{"class":2046},[45,80465,209],{"class":51},[45,80467,80468],{"class":313},"'乔治'",[45,80470,586],{"class":51},[45,80472,280],{"class":257},[45,80474,586],{"class":51},[45,80476,80477],{"class":313},"'男'",[45,80479,215],{"class":51},[45,80481,80482,80484,80486],{"class":47,"line":1700},[45,80483,51866],{"class":51},[45,80485,51894],{"class":51381},[45,80487,51388],{"class":51},[10,80489,80490],{},[1545,80491],{"alt":40,"src":80492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[10,80494,80495],{},[1545,80496],{"alt":40,"src":80497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[10,80499,80500],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[10,80502,80503],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[10,80505,80506],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[10,80508,80509],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[10,80511,80512],{},"这里用等号是因为：对象.属性=值",[10,80514,80515],{},"①利用对象字面量创建对象",[10,80517,80518],{},"const o={",[10,80520,80521],{},"name:'pink'",[10,80523,80524],{},"} ②利用new Object创建对象",[10,80526,80527],{},"const o=new Object({name:'pink'})",[10,80529,80530],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[10,80532,80533],{},"构造函数创建对象的执行过程：",[10,80535,80536],{},[1545,80537],{"alt":40,"src":80538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[176,80540,80542],{"id":80541},"_4103-实例成员","4.10.3 实例成员",[10,80544,80545],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[159,80547,80548,80551,80554],{},[162,80549,80550],{},"实例对象的属性和方法即为实例成员",[162,80552,80553],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[162,80555,80556],{},"构造函数创建的实例对象彼此独立互不影响",[176,80558,80560],{"id":80559},"_4104-静态成员","4.10.4 静态成员",[10,80562,80563],{},[1545,80564],{"alt":40,"src":80565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[10,80567,80568],{},"静态成员有Date.now() Math.PI Math.random()",[10,80570,80571],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[10,80573,80574],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[10,80576,80577],{},"function Pig(name) n {",[10,80579,80580],{},"this.name=name",[10,80582,1153],{},[10,80584,80585],{},"Pig.eyes=2",[10,80587,80588],{},"Pig.sayHai=function () { console.log(this) }",[10,80590,80591],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[10,80593,80594],{},"console.log(Pig.eyes) \u002F\u002F2",[10,80596,11415],{},[159,80598,80599,80602,80605,80608,80611],{},[162,80600,80601],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[162,80603,80604],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[162,80606,80607],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[162,80609,80610],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[162,80612,80613],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[10,80615,80616],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[176,80618,80620],{"id":80619},"_4105-内置构造函数","4.10.5 内置构造函数",[10,80622,80623],{},"内置构造函数包含：",[10,80625,80626],{},[1545,80627],{"alt":40,"src":80628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[10,80630,80631],{},[1545,80632],{"alt":40,"src":80633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[10,80635,80636],{},"这些基本数据类型，js对他们进行了包装",[51894,80638,80639],{},"\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",[22081,80641,80643],{"id":80642},"_41051-object","4.10.5.1 Object",[10,80645,80646],{},"Object 是内置的构造函数，用于创建普通对象",[10,80648,80649],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[35,80651,80653],{"className":50714,"code":80652,"language":50716,"meta":40,"style":40},"const user=new Object({name:'小明',age:15})\n",[42,80654,80655],{"__ignoreMap":40},[45,80656,80657],{"class":47,"line":48},[45,80658,80652],{"class":51},[10,80660,80661],{},"三个常用的静态方法：",[22993,80663,80665],{"id":80664},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[10,80667,80668],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[10,80670,80671],{},[1545,80672],{"alt":40,"src":80673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[10,80675,80676],{},[1545,80677],{"alt":40,"src":80678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[35,80680,80682],{"className":53148,"code":80681,"language":53150,"meta":40,"style":40},"\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",[42,80683,80684,80692,80700,80705,80710,80715,80720,80725,80730,80738],{"__ignoreMap":40},[45,80685,80686,80688,80690],{"class":47,"line":48},[45,80687,1117],{"class":51},[45,80689,51881],{"class":51381},[45,80691,51388],{"class":51},[45,80693,80694,80696,80698],{"class":47,"line":125},[45,80695,52225],{"class":51},[45,80697,51894],{"class":51381},[45,80699,51388],{"class":51},[45,80701,80702],{"class":47,"line":1262},[45,80703,80704],{"class":51},"    const o = { name: 'pink', age: 6 }\n",[45,80706,80707],{"class":47,"line":1277},[45,80708,80709],{"class":51},"    \u002F\u002F 获得所有属性名\n",[45,80711,80712],{"class":47,"line":1283},[45,80713,80714],{"class":51},"    const arr = Object.keys(o)\n",[45,80716,80717],{"class":47,"line":1297},[45,80718,80719],{"class":51},"    console.log(arr)\n",[45,80721,80722],{"class":47,"line":1303},[45,80723,80724],{"class":51},"    \u002F\u002F 获得所有属性值\n",[45,80726,80727],{"class":47,"line":1394},[45,80728,80729],{"class":51},"    console.log(Object.values(o))\n",[45,80731,80732,80734,80736],{"class":47,"line":1400},[45,80733,52498],{"class":51},[45,80735,51894],{"class":51381},[45,80737,51388],{"class":51},[45,80739,80740,80742,80744],{"class":47,"line":1412},[45,80741,51866],{"class":51},[45,80743,51881],{"class":51381},[45,80745,51388],{"class":51},[22993,80747,80749],{"id":80748},"_410512-object-assign","4.10.5.1.2 Object. assign",[10,80751,80752],{},"Object.assign(oo,o)",[10,80754,80755],{},"后的东西添加给前 是追加",[10,80757,80758],{},[1545,80759],{"alt":40,"src":80760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[10,80762,80763],{},[1545,80764],{"alt":40,"src":80765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[35,80767,80769],{"className":53148,"code":80768,"language":53150,"meta":40,"style":40},"\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",[42,80770,80771,80779,80787,80791,80795,80799,80803,80807,80811,80816,80821,80826,80831,80836,80844],{"__ignoreMap":40},[45,80772,80773,80775,80777],{"class":47,"line":48},[45,80774,1117],{"class":51},[45,80776,51881],{"class":51381},[45,80778,51388],{"class":51},[45,80780,80781,80783,80785],{"class":47,"line":125},[45,80782,52225],{"class":51},[45,80784,51894],{"class":51381},[45,80786,51388],{"class":51},[45,80788,80789],{"class":47,"line":1262},[45,80790,80704],{"class":51},[45,80792,80793],{"class":47,"line":1277},[45,80794,80709],{"class":51},[45,80796,80797],{"class":47,"line":1283},[45,80798,80714],{"class":51},[45,80800,80801],{"class":47,"line":1297},[45,80802,80719],{"class":51},[45,80804,80805],{"class":47,"line":1303},[45,80806,80724],{"class":51},[45,80808,80809],{"class":47,"line":1394},[45,80810,80729],{"class":51},[45,80812,80813],{"class":47,"line":1400},[45,80814,80815],{"class":51},"    const oo = {}\n",[45,80817,80818],{"class":47,"line":1412},[45,80819,80820],{"class":51},"    Object.assign(oo, o)\n",[45,80822,80823],{"class":47,"line":1695},[45,80824,80825],{"class":51},"    console.log(oo)\n",[45,80827,80828],{"class":47,"line":1700},[45,80829,80830],{"class":51},"    Object.assign(o, { gender: '女' })\n",[45,80832,80833],{"class":47,"line":1706},[45,80834,80835],{"class":51},"    console.log(o)\n",[45,80837,80838,80840,80842],{"class":47,"line":1711},[45,80839,52498],{"class":51},[45,80841,51894],{"class":51381},[45,80843,51388],{"class":51},[45,80845,80846,80848,80850],{"class":47,"line":1725},[45,80847,51866],{"class":51},[45,80849,51881],{"class":51381},[45,80851,51388],{"class":51},[10,80853,80854],{},[1545,80855],{"alt":40,"src":80856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22081,80858,80860],{"id":80859},"_41052-array","4.10.5.2 Array",[10,80862,80863],{},"Array 是内置的构造函数，用于创建数组",[10,80865,80866],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[35,80868,80870],{"className":50714,"code":80869,"language":50716,"meta":40,"style":40},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[42,80871,80872,80877],{"__ignoreMap":40},[45,80873,80874],{"class":47,"line":48},[45,80875,80876],{"class":51},"const arr=new Array(3,5)\n",[45,80878,80879],{"class":47,"line":125},[45,80880,80881],{"class":51},"console.log(arr)  \u002F\u002F[3,5]\n",[10,80883,80884],{},"Array的实例方法，这个方法是实例成员",[10,80886,80887],{},[1545,80888],{"alt":40,"src":80889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22993,80891,80893],{"id":80892},"_410521-reduce","4.10.5.2.1 reduce",[10,80895,80896],{},[1545,80897],{"alt":40,"src":80898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[35,80900,80902],{"className":53148,"code":80901,"language":53150,"meta":40,"style":40},"\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",[42,80903,80904,80912,80920,80925,80930,80935,80940,80944,80949,80954,80959,80963,80968,80973,80977,80982,80987,80992,81000],{"__ignoreMap":40},[45,80905,80906,80908,80910],{"class":47,"line":48},[45,80907,1117],{"class":51},[45,80909,51881],{"class":51381},[45,80911,51388],{"class":51},[45,80913,80914,80916,80918],{"class":47,"line":125},[45,80915,52225],{"class":51},[45,80917,51894],{"class":51381},[45,80919,51388],{"class":51},[45,80921,80922],{"class":47,"line":1262},[45,80923,80924],{"class":51},"    const arr = [1, 5, 8]\n",[45,80926,80927],{"class":47,"line":1277},[45,80928,80929],{"class":51},"    \u002F\u002F 1.没有初始值\n",[45,80931,80932],{"class":47,"line":1283},[45,80933,80934],{"class":51},"    const total = arr.reduce(function (prev, current) {\n",[45,80936,80937],{"class":47,"line":1297},[45,80938,80939],{"class":51},"      return prev + current\n",[45,80941,80942],{"class":47,"line":1303},[45,80943,33542],{"class":51},[45,80945,80946],{"class":47,"line":1394},[45,80947,80948],{"class":51},"    console.log(total)   \u002F\u002F14\n",[45,80950,80951],{"class":47,"line":1400},[45,80952,80953],{"class":51},"    \u002F\u002F 2.有初始值\n",[45,80955,80956],{"class":47,"line":1412},[45,80957,80958],{"class":51},"    const total1 = arr.reduce(function (prev, current) {\n",[45,80960,80961],{"class":47,"line":1695},[45,80962,80939],{"class":51},[45,80964,80965],{"class":47,"line":1700},[45,80966,80967],{"class":51},"    }, 10)\n",[45,80969,80970],{"class":47,"line":1706},[45,80971,80972],{"class":51},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[45,80974,80975],{"class":47,"line":1711},[45,80976,2483],{"emptyLinePlaceholder":133},[45,80978,80979],{"class":47,"line":1725},[45,80980,80981],{"class":51},"    \u002F\u002F 3.箭头函数写法\n",[45,80983,80984],{"class":47,"line":1730},[45,80985,80986],{"class":51},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[45,80988,80989],{"class":47,"line":1736},[45,80990,80991],{"class":51},"    console.log(total2)   \u002F\u002F24\n",[45,80993,80994,80996,80998],{"class":47,"line":1757},[45,80995,52498],{"class":51},[45,80997,51894],{"class":51381},[45,80999,51388],{"class":51},[45,81001,81002,81004,81006],{"class":47,"line":1762},[45,81003,51866],{"class":51},[45,81005,51881],{"class":51381},[45,81007,51388],{"class":51},[10,81009,81010],{},"执行过程：",[159,81012,81013,81016,81019],{},[162,81014,81015],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[162,81017,81018],{},"每一次循环，把返回值给作为下一次循环的上一次值",[162,81020,81021],{},"如果有起始值，则起始值作为上一次值",[35,81023,81025],{"className":53148,"code":81024,"language":53150,"meta":40,"style":40},"\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",[42,81026,81027,81035,81043,81047,81051,81055,81059,81063,81067,81072,81077,81082,81087,81092,81096,81100,81104,81108,81112,81116,81121,81125,81130,81134,81139,81144,81148,81152,81156,81164],{"__ignoreMap":40},[45,81028,81029,81031,81033],{"class":47,"line":48},[45,81030,1117],{"class":51},[45,81032,51881],{"class":51381},[45,81034,51388],{"class":51},[45,81036,81037,81039,81041],{"class":47,"line":125},[45,81038,52225],{"class":51},[45,81040,51894],{"class":51381},[45,81042,51388],{"class":51},[45,81044,81045],{"class":47,"line":1262},[45,81046,80924],{"class":51},[45,81048,81049],{"class":47,"line":1277},[45,81050,80929],{"class":51},[45,81052,81053],{"class":47,"line":1283},[45,81054,80934],{"class":51},[45,81056,81057],{"class":47,"line":1297},[45,81058,80939],{"class":51},[45,81060,81061],{"class":47,"line":1303},[45,81062,33542],{"class":51},[45,81064,81065],{"class":47,"line":1394},[45,81066,80948],{"class":51},[45,81068,81069],{"class":47,"line":1400},[45,81070,81071],{"class":51},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[45,81073,81074],{"class":47,"line":1412},[45,81075,81076],{"class":51},"    \u002F\u002F     1              5                    6\n",[45,81078,81079],{"class":47,"line":1695},[45,81080,81081],{"class":51},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[45,81083,81084],{"class":47,"line":1700},[45,81085,81086],{"class":51},"    \u002F\u002F     6              8                    14\n",[45,81088,81089],{"class":47,"line":1706},[45,81090,81091],{"class":51},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[45,81093,81094],{"class":47,"line":1711},[45,81095,80953],{"class":51},[45,81097,81098],{"class":47,"line":1725},[45,81099,80958],{"class":51},[45,81101,81102],{"class":47,"line":1730},[45,81103,80939],{"class":51},[45,81105,81106],{"class":47,"line":1736},[45,81107,80967],{"class":51},[45,81109,81110],{"class":47,"line":1757},[45,81111,80972],{"class":51},[45,81113,81114],{"class":47,"line":1762},[45,81115,81071],{"class":51},[45,81117,81118],{"class":47,"line":1776},[45,81119,81120],{"class":51},"    \u002F\u002F     10             1                     11\n",[45,81122,81123],{"class":47,"line":1781},[45,81124,81081],{"class":51},[45,81126,81127],{"class":47,"line":1810},[45,81128,81129],{"class":51},"    \u002F\u002F     11             5                    16\n",[45,81131,81132],{"class":47,"line":1815},[45,81133,81081],{"class":51},[45,81135,81136],{"class":47,"line":1832},[45,81137,81138],{"class":51},"    \u002F\u002F     16             8                    24\n",[45,81140,81141],{"class":47,"line":1837},[45,81142,81143],{"class":51},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[45,81145,81146],{"class":47,"line":1842},[45,81147,80981],{"class":51},[45,81149,81150],{"class":47,"line":1847},[45,81151,80986],{"class":51},[45,81153,81154],{"class":47,"line":1861},[45,81155,80991],{"class":51},[45,81157,81158,81160,81162],{"class":47,"line":1866},[45,81159,52498],{"class":51},[45,81161,51894],{"class":51381},[45,81163,51388],{"class":51},[45,81165,81166,81168,81170],{"class":47,"line":2660},[45,81167,51866],{"class":51},[45,81169,51881],{"class":51381},[45,81171,51388],{"class":51},[22993,81173,81175],{"id":81174},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[10,81177,81178],{},[1545,81179],{"alt":40,"src":81180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[35,81182,81184],{"className":53148,"code":81183,"language":53150,"meta":40,"style":40},"\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",[42,81185,81186,81194,81202,81207,81212,81217,81222,81226,81231,81236,81241,81246,81251,81256,81260,81265,81269,81274,81282],{"__ignoreMap":40},[45,81187,81188,81190,81192],{"class":47,"line":48},[45,81189,1117],{"class":51},[45,81191,51881],{"class":51381},[45,81193,51388],{"class":51},[45,81195,81196,81198,81200],{"class":47,"line":125},[45,81197,52225],{"class":51},[45,81199,51894],{"class":51381},[45,81201,51388],{"class":51},[45,81203,81204],{"class":47,"line":1262},[45,81205,81206],{"class":51},"    const arr = [\n",[45,81208,81209],{"class":47,"line":1277},[45,81210,81211],{"class":51},"      { name: '张三', salary: 10000 },\n",[45,81213,81214],{"class":47,"line":1283},[45,81215,81216],{"class":51},"      { name: '李四', salary: 10000 },\n",[45,81218,81219],{"class":47,"line":1297},[45,81220,81221],{"class":51},"      { name: '王五', salary: 10000 }\n",[45,81223,81224],{"class":47,"line":1303},[45,81225,53190],{"class":51},[45,81227,81228],{"class":47,"line":1394},[45,81229,81230],{"class":51},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[45,81232,81233],{"class":47,"line":1400},[45,81234,81235],{"class":51},"    \u002F\u002F prev是累计值\n",[45,81237,81238],{"class":47,"line":1412},[45,81239,81240],{"class":51},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[45,81242,81243],{"class":47,"line":1695},[45,81244,81245],{"class":51},"    console.log(total)\n",[45,81247,81248],{"class":47,"line":1700},[45,81249,81250],{"class":51},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[45,81252,81253],{"class":47,"line":1706},[45,81254,81255],{"class":51},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[45,81257,81258],{"class":47,"line":1711},[45,81259,81250],{"class":51},[45,81261,81262],{"class":47,"line":1725},[45,81263,81264],{"class":51},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[45,81266,81267],{"class":47,"line":1730},[45,81268,81250],{"class":51},[45,81270,81271],{"class":47,"line":1736},[45,81272,81273],{"class":51},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[45,81275,81276,81278,81280],{"class":47,"line":1757},[45,81277,52498],{"class":51},[45,81279,51894],{"class":51381},[45,81281,51388],{"class":51},[45,81283,81284,81286,81288],{"class":47,"line":1762},[45,81285,51866],{"class":51},[45,81287,51881],{"class":51381},[45,81289,51388],{"class":51},[22993,81291,81293],{"id":81292},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[10,81295,81296],{},[1545,81297],{"alt":40,"src":81298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[10,81300,81301],{},[1545,81302],{"alt":40,"src":81303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[159,81305,81306],{},[162,81307,81308],{},"find()",[10,81310,81311],{},"循环查找，找到第一个就ok",[10,81313,81314],{},[13,81315,81318],{"href":81316,"rel":81317},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[17],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[35,81320,81322],{"className":50714,"code":81321,"language":50716,"meta":40,"style":40},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[42,81323,81324,81329,81334],{"__ignoreMap":40},[45,81325,81326],{"class":47,"line":48},[45,81327,81328],{"class":51},"const array1 = [5, 12, 8, 130, 44]\n",[45,81330,81331],{"class":47,"line":125},[45,81332,81333],{"class":51},"const found = array1.find((element) => element > 10)\n",[45,81335,81336],{"class":47,"line":1262},[45,81337,81338],{"class":51},"console.log(found)  \u002F\u002F12\n",[10,81340,81341,81343,81344,81349,81350,81353,81354,81356,81357,81362,81363,81365,81366,81368,81369,81371,81372],{},[42,81342,81308],{}," 方法是一个",[13,81345,81348],{"href":81346,"rel":81347},"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",[17],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[42,81351,81352],{},"callbackFn"," 函数，直到 ",[42,81355,81352],{}," 返回一个",[13,81358,81361],{"href":81359,"rel":81360},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[17],"真值","。然后 ",[42,81364,81308],{}," 返回该元素并停止迭代数组。如果 ",[42,81367,81352],{}," 从未返回真值，则 ",[42,81370,81308],{}," 返回 ",[42,81373,81374],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[35,81376,81378],{"className":53148,"code":81377,"language":53150,"meta":40,"style":40},"\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",[42,81379,81380,81388,81396,81401,81406,81411,81415,81420,81425,81429,81434,81439,81443,81447,81452,81457,81461,81465,81470,81475,81480,81485,81490,81494,81499,81504,81509,81514,81518,81523,81531],{"__ignoreMap":40},[45,81381,81382,81384,81386],{"class":47,"line":48},[45,81383,1117],{"class":51},[45,81385,51881],{"class":51381},[45,81387,51388],{"class":51},[45,81389,81390,81392,81394],{"class":47,"line":125},[45,81391,52225],{"class":51},[45,81393,51894],{"class":51381},[45,81395,51388],{"class":51},[45,81397,81398],{"class":47,"line":1262},[45,81399,81400],{"class":51},"    const arr = ['red', 'blue', 'green']\n",[45,81402,81403],{"class":47,"line":1277},[45,81404,81405],{"class":51},"    const found = arr.find(item => item === 'pink')\n",[45,81407,81408],{"class":47,"line":1283},[45,81409,81410],{"class":51},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[45,81412,81413],{"class":47,"line":1297},[45,81414,2483],{"emptyLinePlaceholder":133},[45,81416,81417],{"class":47,"line":1303},[45,81418,81419],{"class":51},"    \u002F\u002F 使用场景，用于查找数据\n",[45,81421,81422],{"class":47,"line":1394},[45,81423,81424],{"class":51},"    const arr1 = [\n",[45,81426,81427],{"class":47,"line":1400},[45,81428,79467],{"class":51},[45,81430,81431],{"class":47,"line":1412},[45,81432,81433],{"class":51},"        name: '小米',\n",[45,81435,81436],{"class":47,"line":1695},[45,81437,81438],{"class":51},"        price: 1999\n",[45,81440,81441],{"class":47,"line":1700},[45,81442,77973],{"class":51},[45,81444,81445],{"class":47,"line":1706},[45,81446,79467],{"class":51},[45,81448,81449],{"class":47,"line":1711},[45,81450,81451],{"class":51},"        name: '华为',\n",[45,81453,81454],{"class":47,"line":1725},[45,81455,81456],{"class":51},"        price: 3999\n",[45,81458,81459],{"class":47,"line":1730},[45,81460,52479],{"class":51},[45,81462,81463],{"class":47,"line":1736},[45,81464,53190],{"class":51},[45,81466,81467],{"class":47,"line":1757},[45,81468,81469],{"class":51},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[45,81471,81472],{"class":47,"line":1762},[45,81473,81474],{"class":51},"    \u002F\u002F const found1 = arr1.find(item => {\n",[45,81476,81477],{"class":47,"line":1776},[45,81478,81479],{"class":51},"    \u002F\u002F   if (item.name === '小米') {\n",[45,81481,81482],{"class":47,"line":1781},[45,81483,81484],{"class":51},"    \u002F\u002F     return item\n",[45,81486,81487],{"class":47,"line":1810},[45,81488,81489],{"class":51},"    \u002F\u002F   }\n",[45,81491,81492],{"class":47,"line":1815},[45,81493,63371],{"class":51},[45,81495,81496],{"class":47,"line":1832},[45,81497,81498],{"class":51},"    \u002F\u002F 另一种写法\n",[45,81500,81501],{"class":47,"line":1837},[45,81502,81503],{"class":51},"    const found1 = arr1.find(item => {\n",[45,81505,81506],{"class":47,"line":1842},[45,81507,81508],{"class":51},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[45,81510,81511],{"class":47,"line":1847},[45,81512,81513],{"class":51},"      return item.name = '小米'\n",[45,81515,81516],{"class":47,"line":1861},[45,81517,33542],{"class":51},[45,81519,81520],{"class":47,"line":1866},[45,81521,81522],{"class":51},"    console.log(found1)\n",[45,81524,81525,81527,81529],{"class":47,"line":2660},[45,81526,52498],{"class":51},[45,81528,51894],{"class":51381},[45,81530,51388],{"class":51},[45,81532,81533,81535,81537],{"class":47,"line":2674},[45,81534,51866],{"class":51},[45,81536,51881],{"class":51381},[45,81538,51388],{"class":51},[10,81540,81541],{},[1545,81542],{"alt":40,"src":81543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[10,81545,81546],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[159,81548,81549],{"start":125},[162,81550,81551],{},"every()返回的是布尔值",[10,81553,81554],{},[13,81555,81558],{"href":81556,"rel":81557},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[17],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[10,81560,81561],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[10,81563,81564],{},"some是只有有一个就没问题",[10,81566,81567],{},"every是必须全是才行",[35,81569,81573],{"className":81570,"code":81571,"language":81572,"meta":40,"style":40},"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",[42,81574,81575,81591,81605,81609,81618],{"__ignoreMap":40},[45,81576,81577,81579,81582,81584,81586,81589],{"class":47,"line":48},[45,81578,54530],{"class":93},[45,81580,81581],{"class":51}," isBigEnough(element, ",[45,81583,74139],{"class":93},[45,81585,12518],{"class":51},[45,81587,81588],{"class":93},"array",[45,81590,12525],{"class":51},[45,81592,81593,81596,81599,81601,81603],{"class":47,"line":125},[45,81594,81595],{"class":93},"  return",[45,81597,81598],{"class":51}," element ",[45,81600,1793],{"class":93},[45,81602,2121],{"class":257},[45,81604,1373],{"class":51},[45,81606,81607],{"class":47,"line":1262},[45,81608,1648],{"class":51},[45,81610,81611,81614,81616],{"class":47,"line":1277},[45,81612,81613],{"class":51},"[12, 5, 8, 130, 44].every(isBigEnough); ",[45,81615,33410],{"class":93},[45,81617,54597],{"class":51},[45,81619,81620,81623,81625],{"class":47,"line":1283},[45,81621,81622],{"class":51},"[12, 54, 18, 130, 44].every(isBigEnough); ",[45,81624,33410],{"class":93},[45,81626,58021],{"class":51},[35,81628,81630],{"className":53148,"code":81629,"language":53150,"meta":40,"style":40},"\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",[42,81631,81632,81640,81648,81653,81657,81662,81667,81675],{"__ignoreMap":40},[45,81633,81634,81636,81638],{"class":47,"line":48},[45,81635,1117],{"class":51},[45,81637,51881],{"class":51381},[45,81639,51388],{"class":51},[45,81641,81642,81644,81646],{"class":47,"line":125},[45,81643,52225],{"class":51},[45,81645,51894],{"class":51381},[45,81647,51388],{"class":51},[45,81649,81650],{"class":47,"line":1262},[45,81651,81652],{"class":51},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[45,81654,81655],{"class":47,"line":1277},[45,81656,78403],{"class":51},[45,81658,81659],{"class":47,"line":1283},[45,81660,81661],{"class":51},"    const flag = arr.every(item => item >= 10)\n",[45,81663,81664],{"class":47,"line":1297},[45,81665,81666],{"class":51},"    console.log(flag)    \u002F\u002Ftrue\n",[45,81668,81669,81671,81673],{"class":47,"line":1303},[45,81670,52498],{"class":51},[45,81672,51894],{"class":51381},[45,81674,51388],{"class":51},[45,81676,81677,81679,81681],{"class":47,"line":1394},[45,81678,51866],{"class":51},[45,81680,51881],{"class":51381},[45,81682,51388],{"class":51},[35,81684,81686],{"className":53148,"code":81685,"language":53150,"meta":40,"style":40},"\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",[42,81687,81688,81696,81704,81708,81713,81718,81723,81731],{"__ignoreMap":40},[45,81689,81690,81692,81694],{"class":47,"line":48},[45,81691,1117],{"class":51},[45,81693,51881],{"class":51381},[45,81695,51388],{"class":51},[45,81697,81698,81700,81702],{"class":47,"line":125},[45,81699,52225],{"class":51},[45,81701,51894],{"class":51381},[45,81703,51388],{"class":51},[45,81705,81706],{"class":47,"line":1262},[45,81707,81652],{"class":51},[45,81709,81710],{"class":47,"line":1277},[45,81711,81712],{"class":51},"    const arr = [10, 0, 5]\n",[45,81714,81715],{"class":47,"line":1283},[45,81716,81717],{"class":51},"    const flag = arr.some(item => item >= 10)\n",[45,81719,81720],{"class":47,"line":1297},[45,81721,81722],{"class":51},"    console.log(flag)   \u002F\u002Ftrue\n",[45,81724,81725,81727,81729],{"class":47,"line":1303},[45,81726,52498],{"class":51},[45,81728,51894],{"class":51381},[45,81730,51388],{"class":51},[45,81732,81733,81735,81737],{"class":47,"line":1394},[45,81734,51866],{"class":51},[45,81736,51881],{"class":51381},[45,81738,51388],{"class":51},[22993,81740,81742],{"id":81741},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[10,81744,81745],{},[1545,81746],{"alt":40,"src":81747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[35,81749,81751],{"className":50714,"code":81750,"language":50716,"meta":40,"style":40},"\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",[42,81752,81753,81763,81777,81781,81789,81803,81823,81835,81843,81850,81862,81874,81886,81898,81908,81918,81922,81930,81938,81942,81950,81962,81970,81992,81997,82002,82035,82043,82051,82055],{"__ignoreMap":40},[45,81754,81755,81757,81759,81761],{"class":47,"line":48},[45,81756,51378],{"class":51},[45,81758,51382],{"class":51381},[45,81760,51385],{"class":2046},[45,81762,51388],{"class":51},[45,81764,81765,81767,81769,81771,81773,81775],{"class":47,"line":125},[45,81766,1117],{"class":51},[45,81768,50716],{"class":51381},[45,81770,51397],{"class":2046},[45,81772,254],{"class":51},[45,81774,51402],{"class":313},[45,81776,51388],{"class":51},[45,81778,81779],{"class":47,"line":1262},[45,81780,2483],{"emptyLinePlaceholder":133},[45,81782,81783,81785,81787],{"class":47,"line":1277},[45,81784,1117],{"class":51},[45,81786,51415],{"class":51381},[45,81788,51388],{"class":51},[45,81790,81791,81793,81795,81797,81799,81801],{"class":47,"line":1283},[45,81792,52225],{"class":51},[45,81794,51425],{"class":51381},[45,81796,51428],{"class":2046},[45,81798,254],{"class":51},[45,81800,51433],{"class":313},[45,81802,51388],{"class":51},[45,81804,81805,81807,81809,81811,81813,81815,81817,81819,81821],{"class":47,"line":1297},[45,81806,52225],{"class":51},[45,81808,51425],{"class":51381},[45,81810,15003],{"class":2046},[45,81812,254],{"class":51},[45,81814,51472],{"class":313},[45,81816,51452],{"class":2046},[45,81818,254],{"class":51},[45,81820,51479],{"class":313},[45,81822,51388],{"class":51},[45,81824,81825,81827,81829,81831,81833],{"class":47,"line":1303},[45,81826,52225],{"class":51},[45,81828,51488],{"class":51381},[45,81830,51491],{"class":51},[45,81832,51488],{"class":51381},[45,81834,51388],{"class":51},[45,81836,81837,81839,81841],{"class":47,"line":1394},[45,81838,52225],{"class":51},[45,81840,121],{"class":51381},[45,81842,51388],{"class":51},[45,81844,81845,81848],{"class":47,"line":1400},[45,81846,81847],{"class":51381},"    div",[45,81849,15655],{"class":51},[45,81851,81852,81854,81856,81858,81860],{"class":47,"line":1412},[45,81853,54852],{"class":257},[45,81855,51518],{"class":51},[45,81857,1805],{"class":257},[45,81859,51573],{"class":93},[45,81861,1373],{"class":51},[45,81863,81864,81866,81868,81870,81872],{"class":47,"line":1695},[45,81865,54866],{"class":257},[45,81867,51518],{"class":51},[45,81869,609],{"class":257},[45,81871,51573],{"class":93},[45,81873,1373],{"class":51},[45,81875,81876,81878,81880,81882,81884],{"class":47,"line":1700},[45,81877,57440],{"class":257},[45,81879,51518],{"class":51},[45,81881,609],{"class":257},[45,81883,51573],{"class":93},[45,81885,1373],{"class":51},[45,81887,81888,81890,81892,81894,81896],{"class":47,"line":1706},[45,81889,65214],{"class":257},[45,81891,51518],{"class":51},[45,81893,706],{"class":257},[45,81895,51573],{"class":93},[45,81897,1373],{"class":51},[45,81899,81900,81902,81904,81906],{"class":47,"line":1711},[45,81901,57367],{"class":257},[45,81903,51518],{"class":51},[45,81905,51673],{"class":257},[45,81907,1373],{"class":51},[45,81909,81910,81912,81914,81916],{"class":47,"line":1725},[45,81911,54965],{"class":257},[45,81913,51518],{"class":51},[45,81915,51726],{"class":257},[45,81917,1373],{"class":51},[45,81919,81920],{"class":47,"line":1730},[45,81921,2270],{"class":51},[45,81923,81924,81926,81928],{"class":47,"line":1736},[45,81925,52498],{"class":51},[45,81927,121],{"class":51381},[45,81929,51388],{"class":51},[45,81931,81932,81934,81936],{"class":47,"line":1757},[45,81933,51866],{"class":51},[45,81935,51415],{"class":51381},[45,81937,51388],{"class":51},[45,81939,81940],{"class":47,"line":1762},[45,81941,2483],{"emptyLinePlaceholder":133},[45,81943,81944,81946,81948],{"class":47,"line":1776},[45,81945,1117],{"class":51},[45,81947,51881],{"class":51381},[45,81949,51388],{"class":51},[45,81951,81952,81954,81956,81958,81960],{"class":47,"line":1781},[45,81953,52225],{"class":51},[45,81955,51692],{"class":51381},[45,81957,55395],{"class":51},[45,81959,51692],{"class":51381},[45,81961,51388],{"class":51},[45,81963,81964,81966,81968],{"class":47,"line":1810},[45,81965,52225],{"class":51},[45,81967,51894],{"class":51381},[45,81969,51388],{"class":51},[45,81971,81972,81974,81977,81979,81982,81985,81987,81990],{"class":47,"line":1815},[45,81973,11304],{"class":93},[45,81975,81976],{"class":257}," spec",[45,81978,13647],{"class":93},[45,81980,81981],{"class":51}," { size: ",[45,81983,81984],{"class":313},"'40cm*40cm'",[45,81986,55545],{"class":51},[45,81988,81989],{"class":313},"'黑色'",[45,81991,55685],{"class":51},[45,81993,81994],{"class":47,"line":1832},[45,81995,81996],{"class":267},"    \u002F\u002F const arr = Object.values(spec)\n",[45,81998,81999],{"class":47,"line":1837},[45,82000,82001],{"class":267},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[45,82003,82004,82006,82008,82010,82013,82015,82017,82020,82023,82026,82028,82030,82033],{"class":47,"line":1842},[45,82005,52488],{"class":51},[45,82007,54480],{"class":2046},[45,82009,209],{"class":51},[45,82011,82012],{"class":313},"'div'",[45,82014,74330],{"class":51},[45,82016,254],{"class":93},[45,82018,82019],{"class":51}," Object.",[45,82021,82022],{"class":2046},"values",[45,82024,82025],{"class":51},"(spec).",[45,82027,74304],{"class":2046},[45,82029,209],{"class":51},[45,82031,82032],{"class":313},"'\u002F'",[45,82034,215],{"class":51},[45,82036,82037,82039,82041],{"class":47,"line":1847},[45,82038,52498],{"class":51},[45,82040,51894],{"class":51381},[45,82042,51388],{"class":51},[45,82044,82045,82047,82049],{"class":47,"line":1861},[45,82046,51866],{"class":51},[45,82048,51881],{"class":51381},[45,82050,51388],{"class":51},[45,82052,82053],{"class":47,"line":1866},[45,82054,2483],{"emptyLinePlaceholder":133},[45,82056,82057,82059,82061],{"class":47,"line":2660},[45,82058,51866],{"class":51},[45,82060,50716],{"class":51381},[45,82062,51388],{"class":51},[10,82064,82065],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22993,82067,82069],{"id":82068},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[10,82071,82072],{},"静态方法，将伪数组转换为真数组",[10,82074,82075],{},[1545,82076],{"alt":40,"src":82077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[35,82079,82081],{"className":53148,"code":82080,"language":53150,"meta":40,"style":40},"\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",[42,82082,82083,82091,82099,82111,82123,82135,82143,82151,82156,82161,82166,82171,82179],{"__ignoreMap":40},[45,82084,82085,82087,82089],{"class":47,"line":48},[45,82086,1117],{"class":51},[45,82088,51881],{"class":51381},[45,82090,51388],{"class":51},[45,82092,82093,82095,82097],{"class":47,"line":125},[45,82094,52225],{"class":51},[45,82096,1214],{"class":51381},[45,82098,51388],{"class":51},[45,82100,82101,82103,82105,82107,82109],{"class":47,"line":1262},[45,82102,51422],{"class":51},[45,82104,162],{"class":51381},[45,82106,55395],{"class":51},[45,82108,162],{"class":51381},[45,82110,51388],{"class":51},[45,82112,82113,82115,82117,82119,82121],{"class":47,"line":1277},[45,82114,51422],{"class":51},[45,82116,162],{"class":51381},[45,82118,55395],{"class":51},[45,82120,162],{"class":51381},[45,82122,51388],{"class":51},[45,82124,82125,82127,82129,82131,82133],{"class":47,"line":1283},[45,82126,51422],{"class":51},[45,82128,162],{"class":51381},[45,82130,55395],{"class":51},[45,82132,162],{"class":51381},[45,82134,51388],{"class":51},[45,82136,82137,82139,82141],{"class":47,"line":1297},[45,82138,52498],{"class":51},[45,82140,1214],{"class":51381},[45,82142,51388],{"class":51},[45,82144,82145,82147,82149],{"class":47,"line":1303},[45,82146,52225],{"class":51},[45,82148,51894],{"class":51381},[45,82150,51388],{"class":51},[45,82152,82153],{"class":47,"line":1394},[45,82154,82155],{"class":51},"    const lis = document.querySelectorAll('li')\n",[45,82157,82158],{"class":47,"line":1400},[45,82159,82160],{"class":51},"    const liss = Array.from(lis)\n",[45,82162,82163],{"class":47,"line":1412},[45,82164,82165],{"class":51},"    liss.pop()\n",[45,82167,82168],{"class":47,"line":1695},[45,82169,82170],{"class":51},"    console.log(liss)\n",[45,82172,82173,82175,82177],{"class":47,"line":1700},[45,82174,52498],{"class":51},[45,82176,51894],{"class":51381},[45,82178,51388],{"class":51},[45,82180,82181,82183,82185],{"class":47,"line":1706},[45,82182,51866],{"class":51},[45,82184,51881],{"class":51381},[45,82186,51388],{"class":51},[10,82188,82189],{},[1545,82190],{"alt":40,"src":82191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22081,82193,82195],{"id":82194},"_41053-string","4.10.5.3 String",[10,82197,82198],{},[1545,82199],{"alt":40,"src":82200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22993,82202,82204],{"id":82203},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[35,82206,82208],{"className":53148,"code":82207,"language":53150,"meta":40,"style":40},"\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",[42,82209,82210,82218,82226,82231,82236,82241,82245,82250,82255,82260,82268],{"__ignoreMap":40},[45,82211,82212,82214,82216],{"class":47,"line":48},[45,82213,1117],{"class":51},[45,82215,51881],{"class":51381},[45,82217,51388],{"class":51},[45,82219,82220,82222,82224],{"class":47,"line":125},[45,82221,52225],{"class":51},[45,82223,51894],{"class":51381},[45,82225,51388],{"class":51},[45,82227,82228],{"class":47,"line":1262},[45,82229,82230],{"class":51},"    \u002F\u002F 把字符串转化为数组\n",[45,82232,82233],{"class":47,"line":1277},[45,82234,82235],{"class":51},"    const str = 'pink,red'\n",[45,82237,82238],{"class":47,"line":1283},[45,82239,82240],{"class":51},"    const arr = str.split(',')\n",[45,82242,82243],{"class":47,"line":1297},[45,82244,80719],{"class":51},[45,82246,82247],{"class":47,"line":1303},[45,82248,82249],{"class":51},"    const str1 = '2025-8-25'\n",[45,82251,82252],{"class":47,"line":1394},[45,82253,82254],{"class":51},"    const arr1 = str1.split('-')\n",[45,82256,82257],{"class":47,"line":1400},[45,82258,82259],{"class":51},"    console.log(arr1)\n",[45,82261,82262,82264,82266],{"class":47,"line":1412},[45,82263,52498],{"class":51},[45,82265,51894],{"class":51381},[45,82267,51388],{"class":51},[45,82269,82270,82272,82274],{"class":47,"line":1695},[45,82271,51866],{"class":51},[45,82273,51881],{"class":51381},[45,82275,51388],{"class":51},[22993,82277,82279],{"id":82278},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[10,82281,5264],{},[10,82283,82284],{},"substring(indexStart)",[10,82286,82287],{},"substring(indexStart, indexEnd)",[1214,82289,82290,82301,82313,82323],{},[162,82291,82292,82293,82296,82297,82300],{},"如果省略了 ",[42,82294,82295],{},"indexEnd","，则 ",[42,82298,82299],{},"substring()"," 提取字符直到字符串的末尾",[162,82302,82303,82304,82307,82308,82296,82310,82312],{},"如果 ",[42,82305,82306],{},"indexStart"," 等于 ",[42,82309,82295],{},[42,82311,82299],{}," 返回一个空字符串",[162,82314,82303,82315,82317,82318,82296,82320,82322],{},[42,82316,82306],{}," 大于 ",[42,82319,82295],{},[42,82321,82299],{}," 的效果就像交换了这两个参数一样",[162,82324,82325],{},"结束的索引号不包含想要截取的部分",[35,82327,82329],{"className":81570,"code":82328,"language":81572,"meta":40,"style":40},"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",[42,82330,82331,82343,82347,82381,82411,82415,82446,82450,82477,82507,82537,82541,82572],{"__ignoreMap":40},[45,82332,82333,82336,82338,82341],{"class":47,"line":48},[45,82334,82335],{"class":51},"const anyString ",[45,82337,254],{"class":93},[45,82339,82340],{"class":313}," \"Mozilla\"",[45,82342,1373],{"class":51},[45,82344,82345],{"class":47,"line":125},[45,82346,2483],{"emptyLinePlaceholder":133},[45,82348,82349,82352,82354,82356,82358,82361,82363,82366,82368,82370,82372,82374,82376,82378],{"class":47,"line":1262},[45,82350,82351],{"class":257},"console",[45,82353,765],{"class":51},[45,82355,58328],{"class":257},[45,82357,209],{"class":51},[45,82359,82360],{"class":257},"anyString",[45,82362,765],{"class":51},[45,82364,82365],{"class":257},"substring",[45,82367,209],{"class":51},[45,82369,400],{"class":257},[45,82371,12518],{"class":51},[45,82373,426],{"class":257},[45,82375,75334],{"class":51},[45,82377,33410],{"class":93},[45,82379,82380],{"class":313}," 'M'\n",[45,82382,82383,82385,82387,82389,82391,82393,82395,82397,82399,82401,82403,82405,82407,82409],{"class":47,"line":1277},[45,82384,82351],{"class":257},[45,82386,765],{"class":51},[45,82388,58328],{"class":257},[45,82390,209],{"class":51},[45,82392,82360],{"class":257},[45,82394,765],{"class":51},[45,82396,82365],{"class":257},[45,82398,209],{"class":51},[45,82400,426],{"class":257},[45,82402,12518],{"class":51},[45,82404,400],{"class":257},[45,82406,75334],{"class":51},[45,82408,33410],{"class":93},[45,82410,82380],{"class":313},[45,82412,82413],{"class":47,"line":1283},[45,82414,2483],{"emptyLinePlaceholder":133},[45,82416,82417,82419,82421,82423,82425,82427,82429,82431,82433,82435,82437,82439,82441,82443],{"class":47,"line":1297},[45,82418,82351],{"class":257},[45,82420,765],{"class":51},[45,82422,58328],{"class":257},[45,82424,209],{"class":51},[45,82426,82360],{"class":257},[45,82428,765],{"class":51},[45,82430,82365],{"class":257},[45,82432,209],{"class":51},[45,82434,400],{"class":257},[45,82436,12518],{"class":51},[45,82438,552],{"class":257},[45,82440,75334],{"class":51},[45,82442,33410],{"class":93},[45,82444,82445],{"class":313}," 'Mozill'\n",[45,82447,82448],{"class":47,"line":1303},[45,82449,2483],{"emptyLinePlaceholder":133},[45,82451,82452,82454,82456,82458,82460,82462,82464,82466,82468,82470,82472,82474],{"class":47,"line":1394},[45,82453,82351],{"class":257},[45,82455,765],{"class":51},[45,82457,58328],{"class":257},[45,82459,209],{"class":51},[45,82461,82360],{"class":257},[45,82463,765],{"class":51},[45,82465,82365],{"class":257},[45,82467,209],{"class":51},[45,82469,501],{"class":257},[45,82471,75334],{"class":51},[45,82473,33410],{"class":93},[45,82475,82476],{"class":313}," 'lla'\n",[45,82478,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501,82503,82505],{"class":47,"line":1400},[45,82480,82351],{"class":257},[45,82482,765],{"class":51},[45,82484,58328],{"class":257},[45,82486,209],{"class":51},[45,82488,82360],{"class":257},[45,82490,765],{"class":51},[45,82492,82365],{"class":257},[45,82494,209],{"class":51},[45,82496,501],{"class":257},[45,82498,12518],{"class":51},[45,82500,577],{"class":257},[45,82502,75390],{"class":51},[45,82504,33410],{"class":93},[45,82506,82476],{"class":313},[45,82508,82509,82511,82513,82515,82517,82519,82521,82523,82525,82527,82529,82531,82533,82535],{"class":47,"line":1412},[45,82510,82351],{"class":257},[45,82512,765],{"class":51},[45,82514,58328],{"class":257},[45,82516,209],{"class":51},[45,82518,82360],{"class":257},[45,82520,765],{"class":51},[45,82522,82365],{"class":257},[45,82524,209],{"class":51},[45,82526,577],{"class":257},[45,82528,12518],{"class":51},[45,82530,501],{"class":257},[45,82532,75334],{"class":51},[45,82534,33410],{"class":93},[45,82536,82476],{"class":313},[45,82538,82539],{"class":47,"line":1695},[45,82540,2483],{"emptyLinePlaceholder":133},[45,82542,82543,82545,82547,82549,82551,82553,82555,82557,82559,82561,82563,82565,82567,82569],{"class":47,"line":1700},[45,82544,82351],{"class":257},[45,82546,765],{"class":51},[45,82548,58328],{"class":257},[45,82550,209],{"class":51},[45,82552,82360],{"class":257},[45,82554,765],{"class":51},[45,82556,82365],{"class":257},[45,82558,209],{"class":51},[45,82560,400],{"class":257},[45,82562,12518],{"class":51},[45,82564,577],{"class":257},[45,82566,75334],{"class":51},[45,82568,33410],{"class":93},[45,82570,82571],{"class":313}," 'Mozilla'\n",[45,82573,82574,82576,82578,82580,82582,82584,82586,82588,82590,82592,82594,82596,82598,82600],{"class":47,"line":1706},[45,82575,82351],{"class":257},[45,82577,765],{"class":51},[45,82579,58328],{"class":257},[45,82581,209],{"class":51},[45,82583,82360],{"class":257},[45,82585,765],{"class":51},[45,82587,82365],{"class":257},[45,82589,209],{"class":51},[45,82591,400],{"class":257},[45,82593,12518],{"class":51},[45,82595,654],{"class":257},[45,82597,75334],{"class":51},[45,82599,33410],{"class":93},[45,82601,82571],{"class":313},[22993,82603,82605],{"id":82604},"_410533-startswith","4.10.5.3.3 startsWith",[10,82607,82608,82611,82612,82617,82618,82620,82621],{},[42,82609,82610],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[358,82613,82614],{},[42,82615,82616],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[42,82619,1445],{}," 或 ",[42,82622,66101],{},[35,82624,82626],{"className":77576,"code":82625,"language":77578,"meta":40,"style":40},"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",[42,82627,82628,82640,82659,82664,82684],{"__ignoreMap":40},[45,82629,82630,82632,82635,82637],{"class":47,"line":48},[45,82631,6875],{"class":93},[45,82633,82634],{"class":51}," str1 ",[45,82636,254],{"class":93},[45,82638,82639],{"class":313}," \"Saturday night plans\"\n",[45,82641,82642,82644,82646,82649,82652,82654,82657],{"class":47,"line":125},[45,82643,77613],{"class":51},[45,82645,58328],{"class":2046},[45,82647,82648],{"class":51},"(str1.",[45,82650,82651],{"class":2046},"startsWith",[45,82653,209],{"class":51},[45,82655,82656],{"class":313},"\"Sat\"",[45,82658,30578],{"class":51},[45,82660,82661],{"class":47,"line":1262},[45,82662,82663],{"class":267},"\u002F\u002F Expected output: true\n",[45,82665,82666,82668,82670,82672,82674,82676,82678,82680,82682],{"class":47,"line":1277},[45,82667,77613],{"class":51},[45,82669,58328],{"class":2046},[45,82671,82648],{"class":51},[45,82673,82651],{"class":2046},[45,82675,209],{"class":51},[45,82677,82656],{"class":313},[45,82679,12518],{"class":51},[45,82681,280],{"class":257},[45,82683,30578],{"class":51},[45,82685,82686],{"class":47,"line":1283},[45,82687,82688],{"class":267},"\u002F\u002F Expected output: false\n",[35,82690,82692],{"className":50714,"code":82691,"language":50716,"meta":40,"style":40},"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",[42,82693,82694,82699,82704,82708,82713,82718],{"__ignoreMap":40},[45,82695,82696],{"class":47,"line":48},[45,82697,82698],{"class":51},"startsWith(searchString)\n",[45,82700,82701],{"class":47,"line":125},[45,82702,82703],{"class":51},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[45,82705,82706],{"class":47,"line":1262},[45,82707,2483],{"emptyLinePlaceholder":133},[45,82709,82710],{"class":47,"line":1277},[45,82711,82712],{"class":51},"const str3 = 'pink老师上课中'\n",[45,82714,82715],{"class":47,"line":1283},[45,82716,82717],{"class":51},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[45,82719,82720],{"class":47,"line":1297},[45,82721,82722],{"class":51},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22993,82724,82726],{"id":82725},"_410534-includes","4.10.5.3.4 includes",[10,82728,82729],{},"includes(searchString) includes(searchString, position)",[159,82731,82732],{},[162,82733,82734],{},"searchString:",[10,82736,82737,82738,82740,82741,82746,82747,82752,82753,21583,82756,82759,82760,82763],{},"一个要在 ",[42,82739,1382],{}," 中查找的字符串。",[13,82742,82745],{"href":82743,"rel":82744},"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",[17],"不能是正则表达式","。所有非正则表达式的值都会被",[13,82748,82751],{"href":82749,"rel":82750},"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",[17],"强制转换为字符串","，因此如果该参数被省略或传入 ",[42,82754,82755],{},"undefined",[42,82757,82758],{},"includes()"," 方法会在字符串中搜索 ",[42,82761,82762],{},"\"undefined\"","，这通常不是你想要的",[159,82765,82766],{"start":125},[162,82767,82768,1066],{},[42,82769,82770],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[10,82772,82773,82774,82777,82778],{},"在字符串中开始搜索 ",[42,82775,82776],{},"searchString"," 的位置。默认值为 ",[42,82779,400],{},[159,82781,82782],{"start":1262},[162,82783,82784],{},"返回值：",[10,82786,82787,82788,82790,82791,82795,82796],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[42,82789,82776],{}," 为空字符串的情况），则返回 ",[358,82792,82793],{},[42,82794,1445],{}," ，否则返回 ",[358,82797,82798],{},[42,82799,66101],{},[159,82801,82802],{"start":1277},[162,82803,82804],{},"异常：",[10,82806,82303,82807,13878,82809,82813],{},[42,82808,82776],{},[13,82810,82812],{"href":82743,"rel":82811},[17],"是一个正则表达式","，则会抛出",[10,82815,82816],{},"只要是有就是true，不需要非得以谁开头结尾",[35,82818,82820],{"className":77576,"code":82819,"language":77578,"meta":40,"style":40},"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",[42,82821,82822,82833,82856,82875,82895,82917,82936],{"__ignoreMap":40},[45,82823,82824,82826,82828,82830],{"class":47,"line":48},[45,82825,6875],{"class":93},[45,82827,79856],{"class":51},[45,82829,254],{"class":93},[45,82831,82832],{"class":313}," \"To be, or not to be, that is the question.\"\n",[45,82834,82835,82837,82839,82842,82845,82847,82850,82853],{"class":47,"line":125},[45,82836,77613],{"class":51},[45,82838,58328],{"class":2046},[45,82840,82841],{"class":51},"(str.",[45,82843,82844],{"class":2046},"includes",[45,82846,209],{"class":51},[45,82848,82849],{"class":313},"\"To be\"",[45,82851,82852],{"class":51},"))",[45,82854,82855],{"class":267},"  \u002F\u002F true\n",[45,82857,82858,82860,82862,82864,82866,82868,82871,82873],{"class":47,"line":1262},[45,82859,77613],{"class":51},[45,82861,58328],{"class":2046},[45,82863,82841],{"class":51},[45,82865,82844],{"class":2046},[45,82867,209],{"class":51},[45,82869,82870],{"class":313},"\"question\"",[45,82872,82852],{"class":51},[45,82874,82855],{"class":267},[45,82876,82877,82879,82881,82883,82885,82887,82890,82892],{"class":47,"line":1277},[45,82878,77613],{"class":51},[45,82880,58328],{"class":2046},[45,82882,82841],{"class":51},[45,82884,82844],{"class":2046},[45,82886,209],{"class":51},[45,82888,82889],{"class":313},"\"nonexistent\"",[45,82891,82852],{"class":51},[45,82893,82894],{"class":267},"  \u002F\u002F false\n",[45,82896,82897,82899,82901,82903,82905,82907,82909,82911,82913,82915],{"class":47,"line":1283},[45,82898,77613],{"class":51},[45,82900,58328],{"class":2046},[45,82902,82841],{"class":51},[45,82904,82844],{"class":2046},[45,82906,209],{"class":51},[45,82908,82849],{"class":313},[45,82910,12518],{"class":51},[45,82912,426],{"class":257},[45,82914,82852],{"class":51},[45,82916,82894],{"class":267},[45,82918,82919,82921,82923,82925,82927,82929,82932,82934],{"class":47,"line":1297},[45,82920,77613],{"class":51},[45,82922,58328],{"class":2046},[45,82924,82841],{"class":51},[45,82926,82844],{"class":2046},[45,82928,209],{"class":51},[45,82930,82931],{"class":313},"\"TO BE\"",[45,82933,82852],{"class":51},[45,82935,82894],{"class":267},[45,82937,82938,82940,82942,82944,82946,82948,82950,82952],{"class":47,"line":1303},[45,82939,77613],{"class":51},[45,82941,58328],{"class":2046},[45,82943,82841],{"class":51},[45,82945,82844],{"class":2046},[45,82947,209],{"class":51},[45,82949,7735],{"class":313},[45,82951,82852],{"class":51},[45,82953,82855],{"class":267},[22993,82955,82957],{"id":82956},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[35,82959,82961],{"className":53148,"code":82960,"language":53150,"meta":40,"style":40},"\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",[42,82962,82963,82971,82979,82984,82989,82994,82999,83004,83012],{"__ignoreMap":40},[45,82964,82965,82967,82969],{"class":47,"line":48},[45,82966,1117],{"class":51},[45,82968,51881],{"class":51381},[45,82970,51388],{"class":51},[45,82972,82973,82975,82977],{"class":47,"line":125},[45,82974,52225],{"class":51},[45,82976,51894],{"class":51381},[45,82978,51388],{"class":51},[45,82980,82981],{"class":47,"line":1262},[45,82982,82983],{"class":51},"    const num = 10\n",[45,82985,82986],{"class":47,"line":1277},[45,82987,82988],{"class":51},"    \u002F\u002F 强制转换\n",[45,82990,82991],{"class":47,"line":1283},[45,82992,82993],{"class":51},"    console.log(String(num))\n",[45,82995,82996],{"class":47,"line":1297},[45,82997,82998],{"class":51},"    \u002F\u002F toString()方法转换\n",[45,83000,83001],{"class":47,"line":1303},[45,83002,83003],{"class":51},"    console.log(num.toString())\n",[45,83005,83006,83008,83010],{"class":47,"line":1394},[45,83007,52498],{"class":51},[45,83009,51894],{"class":51381},[45,83011,51388],{"class":51},[45,83013,83014,83016,83018],{"class":47,"line":1400},[45,83015,51866],{"class":51},[45,83017,51881],{"class":51381},[45,83019,51388],{"class":51},[22993,83021,83023],{"id":83022},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[10,83025,83026],{},[1545,83027],{"alt":40,"src":83028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[35,83030,83032],{"className":50714,"code":83031,"language":50716,"meta":40,"style":40},"\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",[42,83033,83034,83044,83058,83062,83070,83084,83104,83116,83124,83128,83136,83148,83156,83168,83173,83178,83183,83230,83246,83254,83262,83266],{"__ignoreMap":40},[45,83035,83036,83038,83040,83042],{"class":47,"line":48},[45,83037,51378],{"class":51},[45,83039,51382],{"class":51381},[45,83041,51385],{"class":2046},[45,83043,51388],{"class":51},[45,83045,83046,83048,83050,83052,83054,83056],{"class":47,"line":125},[45,83047,1117],{"class":51},[45,83049,50716],{"class":51381},[45,83051,51397],{"class":2046},[45,83053,254],{"class":51},[45,83055,51402],{"class":313},[45,83057,51388],{"class":51},[45,83059,83060],{"class":47,"line":1262},[45,83061,2483],{"emptyLinePlaceholder":133},[45,83063,83064,83066,83068],{"class":47,"line":1277},[45,83065,1117],{"class":51},[45,83067,51415],{"class":51381},[45,83069,51388],{"class":51},[45,83071,83072,83074,83076,83078,83080,83082],{"class":47,"line":1283},[45,83073,52225],{"class":51},[45,83075,51425],{"class":51381},[45,83077,51428],{"class":2046},[45,83079,254],{"class":51},[45,83081,51433],{"class":313},[45,83083,51388],{"class":51},[45,83085,83086,83088,83090,83092,83094,83096,83098,83100,83102],{"class":47,"line":1297},[45,83087,52225],{"class":51},[45,83089,51425],{"class":51381},[45,83091,15003],{"class":2046},[45,83093,254],{"class":51},[45,83095,51472],{"class":313},[45,83097,51452],{"class":2046},[45,83099,254],{"class":51},[45,83101,51479],{"class":313},[45,83103,51388],{"class":51},[45,83105,83106,83108,83110,83112,83114],{"class":47,"line":1303},[45,83107,52225],{"class":51},[45,83109,51488],{"class":51381},[45,83111,51491],{"class":51},[45,83113,51488],{"class":51381},[45,83115,51388],{"class":51},[45,83117,83118,83120,83122],{"class":47,"line":1394},[45,83119,51866],{"class":51},[45,83121,51415],{"class":51381},[45,83123,51388],{"class":51},[45,83125,83126],{"class":47,"line":1400},[45,83127,2483],{"emptyLinePlaceholder":133},[45,83129,83130,83132,83134],{"class":47,"line":1412},[45,83131,1117],{"class":51},[45,83133,51881],{"class":51381},[45,83135,51388],{"class":51},[45,83137,83138,83140,83142,83144,83146],{"class":47,"line":1695},[45,83139,52225],{"class":51},[45,83141,51692],{"class":51381},[45,83143,55395],{"class":51},[45,83145,51692],{"class":51381},[45,83147,51388],{"class":51},[45,83149,83150,83152,83154],{"class":47,"line":1700},[45,83151,52225],{"class":51},[45,83153,51894],{"class":51381},[45,83155,51388],{"class":51},[45,83157,83158,83160,83163,83165],{"class":47,"line":1706},[45,83159,11304],{"class":93},[45,83161,83162],{"class":257}," gift",[45,83164,13647],{"class":93},[45,83166,83167],{"class":313}," '50g的茶叶，清洗球'\n",[45,83169,83170],{"class":47,"line":1711},[45,83171,83172],{"class":267},"    \u002F\u002F 1.把字符串拆分为数组\n",[45,83174,83175],{"class":47,"line":1725},[45,83176,83177],{"class":267},"    \u002F\u002F console.log(gift.split(','))\n",[45,83179,83180],{"class":47,"line":1730},[45,83181,83182],{"class":267},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[45,83184,83185,83187,83189,83191,83194,83197,83199,83202,83204,83206,83208,83210,83212,83215,83217,83220,83222,83224,83226,83228],{"class":47,"line":1736},[45,83186,11304],{"class":93},[45,83188,74000],{"class":257},[45,83190,13647],{"class":93},[45,83192,83193],{"class":51}," gift.",[45,83195,83196],{"class":2046},"split",[45,83198,209],{"class":51},[45,83200,83201],{"class":313},"'，'",[45,83203,30907],{"class":51},[45,83205,74125],{"class":2046},[45,83207,209],{"class":51},[45,83209,79876],{"class":5299},[45,83211,79879],{"class":93},[45,83213,83214],{"class":313}," `\u003Cspan>【赠品】${",[45,83216,79876],{"class":51},[45,83218,83219],{"class":313},"}\u003C\u002Fspan>\u003Cbr>`",[45,83221,30907],{"class":51},[45,83223,74304],{"class":2046},[45,83225,209],{"class":51},[45,83227,74309],{"class":313},[45,83229,215],{"class":51},[45,83231,83232,83234,83236,83238,83240,83242,83244],{"class":47,"line":1757},[45,83233,52488],{"class":51},[45,83235,54480],{"class":2046},[45,83237,209],{"class":51},[45,83239,82012],{"class":313},[45,83241,74330],{"class":51},[45,83243,254],{"class":93},[45,83245,74066],{"class":51},[45,83247,83248,83250,83252],{"class":47,"line":1762},[45,83249,52498],{"class":51},[45,83251,51894],{"class":51381},[45,83253,51388],{"class":51},[45,83255,83256,83258,83260],{"class":47,"line":1776},[45,83257,51866],{"class":51},[45,83259,51881],{"class":51381},[45,83261,51388],{"class":51},[45,83263,83264],{"class":47,"line":1781},[45,83265,2483],{"emptyLinePlaceholder":133},[45,83267,83268,83270,83272],{"class":47,"line":1810},[45,83269,51866],{"class":51},[45,83271,50716],{"class":51381},[45,83273,51388],{"class":51},[22081,83275,83277],{"id":83276},"_41054-number","4.10.5.4 Number",[10,83279,83280],{},[1545,83281],{"alt":40,"src":83282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[10,83284,83285],{},"整数也可以进行toFixed来保留小数",[10,83287,83288],{},"比如：",[10,83290,83291],{},"const price=10",[10,83293,83294],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22081,83296,83298],{"id":83297},"_41055-购物车展示","4.10.5.5 购物车展示",[10,83300,83301],{},[1545,83302],{"alt":40,"src":83303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[35,83305,83307],{"className":50714,"code":83306,"language":50716,"meta":40,"style":40},"\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",[42,83308,83309,83319,83333,83337,83345,83359,83379,83391,83399,83405,83415,83425,83435,83439,83443,83449,83461,83475,83479,83483,83489,83501,83517,83527,83543,83547,83551,83557,83567,83577,83581,83585,83593,83605,83617,83629,83633,83637,83645,83657,83661,83665,83676,83686,83698,83710,83720,83724,83728,83736,83745,83757,83767,83777,83781,83785,83793,83802,83809,83819,83831,83835,83839,83848,83858,83869,83881,83893,83897,83901,83910,83920,83931,83935,83939,83945,83957,83969,83979,83989,84007,84019,84023,84027,84036,84048,84058,84068,84080,84084,84092,84100,84104,84112,84126,84134,84148,84176,84184,84192,84202,84206,84214,84222,84231,84239,84248,84258,84262,84266,84274,84282,84291,84299,84307,84320,84324,84328,84336,84344,84353,84361,84369,84384,84388,84392,84400,84408,84417,84425,84433,84447,84455,84459,84463,84468,84494,84499,84536,84541,84564,84569,84623,84628,84664,84668,84674,84679,84688,84702,84711,84730,84739,84749,84754,84759,84772,84777,84831,84857,84865,84873,84877],{"__ignoreMap":40},[45,83310,83311,83313,83315,83317],{"class":47,"line":48},[45,83312,51378],{"class":51},[45,83314,51382],{"class":51381},[45,83316,51385],{"class":2046},[45,83318,51388],{"class":51},[45,83320,83321,83323,83325,83327,83329,83331],{"class":47,"line":125},[45,83322,1117],{"class":51},[45,83324,50716],{"class":51381},[45,83326,51397],{"class":2046},[45,83328,254],{"class":51},[45,83330,51402],{"class":313},[45,83332,51388],{"class":51},[45,83334,83335],{"class":47,"line":1262},[45,83336,2483],{"emptyLinePlaceholder":133},[45,83338,83339,83341,83343],{"class":47,"line":1277},[45,83340,1117],{"class":51},[45,83342,51415],{"class":51381},[45,83344,51388],{"class":51},[45,83346,83347,83349,83351,83353,83355,83357],{"class":47,"line":1283},[45,83348,52225],{"class":51},[45,83350,51425],{"class":51381},[45,83352,51428],{"class":2046},[45,83354,254],{"class":51},[45,83356,51433],{"class":313},[45,83358,51388],{"class":51},[45,83360,83361,83363,83365,83367,83369,83371,83373,83375,83377],{"class":47,"line":1297},[45,83362,52225],{"class":51},[45,83364,51425],{"class":51381},[45,83366,15003],{"class":2046},[45,83368,254],{"class":51},[45,83370,51472],{"class":313},[45,83372,51452],{"class":2046},[45,83374,254],{"class":51},[45,83376,51479],{"class":313},[45,83378,51388],{"class":51},[45,83380,83381,83383,83385,83387,83389],{"class":47,"line":1303},[45,83382,52225],{"class":51},[45,83384,51488],{"class":51381},[45,83386,51491],{"class":51},[45,83388,51488],{"class":51381},[45,83390,51388],{"class":51},[45,83392,83393,83395,83397],{"class":47,"line":1394},[45,83394,52225],{"class":51},[45,83396,121],{"class":51381},[45,83398,51388],{"class":51},[45,83400,83401,83403],{"class":47,"line":1400},[45,83402,6486],{"class":51381},[45,83404,15655],{"class":51},[45,83406,83407,83409,83411,83413],{"class":47,"line":1412},[45,83408,54776],{"class":257},[45,83410,51518],{"class":51},[45,83412,400],{"class":257},[45,83414,1373],{"class":51},[45,83416,83417,83419,83421,83423],{"class":47,"line":1695},[45,83418,54787],{"class":257},[45,83420,51518],{"class":51},[45,83422,400],{"class":257},[45,83424,1373],{"class":51},[45,83426,83427,83429,83431,83433],{"class":47,"line":1700},[45,83428,72677],{"class":257},[45,83430,51518],{"class":51},[45,83432,60586],{"class":257},[45,83434,1373],{"class":51},[45,83436,83437],{"class":47,"line":1706},[45,83438,2270],{"class":51},[45,83440,83441],{"class":47,"line":1711},[45,83442,2483],{"emptyLinePlaceholder":133},[45,83444,83445,83447],{"class":47,"line":1725},[45,83446,62204],{"class":2046},[45,83448,15655],{"class":51},[45,83450,83451,83453,83455,83457,83459],{"class":47,"line":1730},[45,83452,54852],{"class":257},[45,83454,51518],{"class":51},[45,83456,78655],{"class":257},[45,83458,51573],{"class":93},[45,83460,1373],{"class":51},[45,83462,83463,83465,83467,83469,83471,83473],{"class":47,"line":1736},[45,83464,54787],{"class":257},[45,83466,51518],{"class":51},[45,83468,519],{"class":257},[45,83470,51573],{"class":93},[45,83472,51637],{"class":257},[45,83474,1373],{"class":51},[45,83476,83477],{"class":47,"line":1757},[45,83478,2270],{"class":51},[45,83480,83481],{"class":47,"line":1762},[45,83482,2483],{"emptyLinePlaceholder":133},[45,83484,83485,83487],{"class":47,"line":1776},[45,83486,78706],{"class":2046},[45,83488,15655],{"class":51},[45,83490,83491,83493,83495,83497,83499],{"class":47,"line":1781},[45,83492,54776],{"class":257},[45,83494,51518],{"class":51},[45,83496,782],{"class":257},[45,83498,51573],{"class":93},[45,83500,1373],{"class":51},[45,83502,83503,83505,83507,83509,83511,83513,83515],{"class":47,"line":1810},[45,83504,61941],{"class":257},[45,83506,51518],{"class":51},[45,83508,28204],{"class":257},[45,83510,78761],{"class":257},[45,83512,78764],{"class":257},[45,83514,902],{"class":93},[45,83516,1373],{"class":51},[45,83518,83519,83521,83523,83525],{"class":47,"line":1815},[45,83520,55090],{"class":257},[45,83522,51518],{"class":51},[45,83524,51558],{"class":257},[45,83526,1373],{"class":51},[45,83528,83529,83531,83533,83535,83537,83539,83541],{"class":47,"line":1832},[45,83530,62058],{"class":257},[45,83532,51518],{"class":51},[45,83534,426],{"class":257},[45,83536,51573],{"class":93},[45,83538,51602],{"class":257},[45,83540,62325],{"class":257},[45,83542,1373],{"class":51},[45,83544,83545],{"class":47,"line":1837},[45,83546,2270],{"class":51},[45,83548,83549],{"class":47,"line":1842},[45,83550,2483],{"emptyLinePlaceholder":133},[45,83552,83553,83555],{"class":47,"line":1847},[45,83554,78824],{"class":2046},[45,83556,15655],{"class":51},[45,83558,83559,83561,83563,83565],{"class":47,"line":1861},[45,83560,62106],{"class":257},[45,83562,51518],{"class":51},[45,83564,62111],{"class":257},[45,83566,1373],{"class":51},[45,83568,83569,83571,83573,83575],{"class":47,"line":1866},[45,83570,54965],{"class":257},[45,83572,51518],{"class":51},[45,83574,61899],{"class":257},[45,83576,1373],{"class":51},[45,83578,83579],{"class":47,"line":2660},[45,83580,2270],{"class":51},[45,83582,83583],{"class":47,"line":2674},[45,83584,2483],{"emptyLinePlaceholder":133},[45,83586,83587,83589,83591],{"class":47,"line":2682},[45,83588,78706],{"class":2046},[45,83590,55696],{"class":51381},[45,83592,15655],{"class":51},[45,83594,83595,83597,83599,83601,83603],{"class":47,"line":2687},[45,83596,54852],{"class":257},[45,83598,51518],{"class":51},[45,83600,819],{"class":257},[45,83602,51573],{"class":93},[45,83604,1373],{"class":51},[45,83606,83607,83609,83611,83613,83615],{"class":47,"line":2693},[45,83608,54866],{"class":257},[45,83610,51518],{"class":51},[45,83612,819],{"class":257},[45,83614,51573],{"class":93},[45,83616,1373],{"class":51},[45,83618,83619,83621,83623,83625,83627],{"class":47,"line":2699},[45,83620,61831],{"class":257},[45,83622,51518],{"class":51},[45,83624,527],{"class":257},[45,83626,51573],{"class":93},[45,83628,1373],{"class":51},[45,83630,83631],{"class":47,"line":2704},[45,83632,2270],{"class":51},[45,83634,83635],{"class":47,"line":8031},[45,83636,2483],{"emptyLinePlaceholder":133},[45,83638,83639,83641,83643],{"class":47,"line":8055},[45,83640,78706],{"class":2046},[45,83642,62385],{"class":2046},[45,83644,15655],{"class":51},[45,83646,83647,83649,83651,83653,83655],{"class":47,"line":8060},[45,83648,54852],{"class":257},[45,83650,51518],{"class":51},[45,83652,1805],{"class":257},[45,83654,51573],{"class":93},[45,83656,1373],{"class":51},[45,83658,83659],{"class":47,"line":8066},[45,83660,2270],{"class":51},[45,83662,83663],{"class":47,"line":8093},[45,83664,2483],{"emptyLinePlaceholder":133},[45,83666,83667,83669,83671,83674],{"class":47,"line":8098},[45,83668,78706],{"class":2046},[45,83670,62385],{"class":2046},[45,83672,83673],{"class":2046}," .tag",[45,83675,15655],{"class":51},[45,83677,83678,83680,83682,83684],{"class":47,"line":8104},[45,83679,55090],{"class":257},[45,83681,51518],{"class":51},[45,83683,60950],{"class":257},[45,83685,1373],{"class":51},[45,83687,83688,83690,83692,83694,83696],{"class":47,"line":8116},[45,83689,54776],{"class":257},[45,83691,51518],{"class":51},[45,83693,286],{"class":257},[45,83695,51573],{"class":93},[45,83697,1373],{"class":51},[45,83699,83700,83702,83704,83706,83708],{"class":47,"line":8128},[45,83701,55003],{"class":257},[45,83703,51518],{"class":51},[45,83705,706],{"class":257},[45,83707,51573],{"class":93},[45,83709,1373],{"class":51},[45,83711,83712,83714,83716,83718],{"class":47,"line":8140},[45,83713,57497],{"class":257},[45,83715,51518],{"class":51},[45,83717,62151],{"class":257},[45,83719,1373],{"class":51},[45,83721,83722],{"class":47,"line":9799},[45,83723,2270],{"class":51},[45,83725,83726],{"class":47,"line":9824},[45,83727,2483],{"emptyLinePlaceholder":133},[45,83729,83730,83732,83734],{"class":47,"line":9847},[45,83731,78706],{"class":2046},[45,83733,78998],{"class":2046},[45,83735,31547],{"class":51},[45,83737,83738,83740,83743],{"class":47,"line":9871},[45,83739,78706],{"class":2046},[45,83741,83742],{"class":2046}," .sub-total",[45,83744,15655],{"class":51},[45,83746,83747,83749,83751,83753,83755],{"class":47,"line":9876},[45,83748,55003],{"class":257},[45,83750,51518],{"class":51},[45,83752,857],{"class":257},[45,83754,51573],{"class":93},[45,83756,1373],{"class":51},[45,83758,83759,83761,83763,83765],{"class":47,"line":9881},[45,83760,57497],{"class":257},[45,83762,51518],{"class":51},[45,83764,79021],{"class":257},[45,83766,1373],{"class":51},[45,83768,83769,83771,83773,83775],{"class":47,"line":9886},[45,83770,61918],{"class":257},[45,83772,51518],{"class":51},[45,83774,426],{"class":257},[45,83776,1373],{"class":51},[45,83778,83779],{"class":47,"line":9895},[45,83780,2270],{"class":51},[45,83782,83783],{"class":47,"line":9900},[45,83784,2483],{"emptyLinePlaceholder":133},[45,83786,83787,83789,83791],{"class":47,"line":9906},[45,83788,78706],{"class":2046},[45,83790,79038],{"class":2046},[45,83792,31547],{"class":51},[45,83794,83795,83797,83800],{"class":47,"line":9927},[45,83796,78706],{"class":2046},[45,83798,83799],{"class":2046}," .sub-total::before",[45,83801,31547],{"class":51},[45,83803,83804,83807],{"class":47,"line":9933},[45,83805,83806],{"class":2046},"    .amount::before",[45,83808,15655],{"class":51},[45,83810,83811,83813,83815,83817],{"class":47,"line":9947},[45,83812,79045],{"class":257},[45,83814,51518],{"class":51},[45,83816,79050],{"class":313},[45,83818,1373],{"class":51},[45,83820,83821,83823,83825,83827,83829],{"class":47,"line":9953},[45,83822,55003],{"class":257},[45,83824,51518],{"class":51},[45,83826,706],{"class":257},[45,83828,51573],{"class":93},[45,83830,1373],{"class":51},[45,83832,83833],{"class":47,"line":9980},[45,83834,2270],{"class":51},[45,83836,83837],{"class":47,"line":9989},[45,83838,2483],{"emptyLinePlaceholder":133},[45,83840,83841,83843,83846],{"class":47,"line":9995},[45,83842,78706],{"class":2046},[45,83844,83845],{"class":2046}," .spec",[45,83847,15655],{"class":51},[45,83849,83850,83852,83854,83856],{"class":47,"line":10003},[45,83851,61918],{"class":257},[45,83853,51518],{"class":51},[45,83855,286],{"class":257},[45,83857,1373],{"class":51},[45,83859,83860,83862,83864,83867],{"class":47,"line":10008},[45,83861,57497],{"class":257},[45,83863,51518],{"class":51},[45,83865,83866],{"class":257},"#888",[45,83868,1373],{"class":51},[45,83870,83871,83873,83875,83877,83879],{"class":47,"line":16687},[45,83872,55003],{"class":257},[45,83874,51518],{"class":51},[45,83876,756],{"class":257},[45,83878,51573],{"class":93},[45,83880,1373],{"class":51},[45,83882,83883,83885,83887,83889,83891],{"class":47,"line":16693},[45,83884,62081],{"class":257},[45,83886,51518],{"class":51},[45,83888,907],{"class":257},[45,83890,51573],{"class":93},[45,83892,1373],{"class":51},[45,83894,83895],{"class":47,"line":16716},[45,83896,2270],{"class":51},[45,83898,83899],{"class":47,"line":16722},[45,83900,2483],{"emptyLinePlaceholder":133},[45,83902,83903,83905,83908],{"class":47,"line":16745},[45,83904,78706],{"class":2046},[45,83906,83907],{"class":2046}," .count",[45,83909,15655],{"class":51},[45,83911,83912,83914,83916,83918],{"class":47,"line":16759},[45,83913,61918],{"class":257},[45,83915,51518],{"class":51},[45,83917,426],{"class":257},[45,83919,1373],{"class":51},[45,83921,83922,83924,83926,83929],{"class":47,"line":16779},[45,83923,57497],{"class":257},[45,83925,51518],{"class":51},[45,83927,83928],{"class":257},"#aaa",[45,83930,1373],{"class":51},[45,83932,83933],{"class":47,"line":16785},[45,83934,2270],{"class":51},[45,83936,83937],{"class":47,"line":16796},[45,83938,2483],{"emptyLinePlaceholder":133},[45,83940,83941,83943],{"class":47,"line":16819},[45,83942,72556],{"class":2046},[45,83944,15655],{"class":51},[45,83946,83947,83949,83951,83953,83955],{"class":47,"line":16841},[45,83948,54852],{"class":257},[45,83950,51518],{"class":51},[45,83952,78655],{"class":257},[45,83954,51573],{"class":93},[45,83956,1373],{"class":51},[45,83958,83959,83961,83963,83965,83967],{"class":47,"line":16846},[45,83960,54787],{"class":257},[45,83962,51518],{"class":51},[45,83964,400],{"class":257},[45,83966,51637],{"class":257},[45,83968,1373],{"class":51},[45,83970,83971,83973,83975,83977],{"class":47,"line":16852},[45,83972,55090],{"class":257},[45,83974,51518],{"class":51},[45,83976,51558],{"class":257},[45,83978,1373],{"class":51},[45,83980,83981,83983,83985,83987],{"class":47,"line":16866},[45,83982,55101],{"class":257},[45,83984,51518],{"class":51},[45,83986,51661],{"class":257},[45,83988,1373],{"class":51},[45,83990,83991,83994,83996,83998,84000,84002,84005],{"class":47,"line":16879},[45,83992,83993],{"class":257},"      border-top",[45,83995,51518],{"class":51},[45,83997,426],{"class":257},[45,83999,51573],{"class":93},[45,84001,51602],{"class":257},[45,84003,84004],{"class":257}," #4e4e4e",[45,84006,1373],{"class":51},[45,84008,84009,84011,84013,84015,84017],{"class":47,"line":16884},[45,84010,54776],{"class":257},[45,84012,51518],{"class":51},[45,84014,907],{"class":257},[45,84016,51573],{"class":93},[45,84018,1373],{"class":51},[45,84020,84021],{"class":47,"line":16898},[45,84022,2270],{"class":51},[45,84024,84025],{"class":47,"line":16903},[45,84026,2483],{"emptyLinePlaceholder":133},[45,84028,84029,84031,84034],{"class":47,"line":16909},[45,84030,72556],{"class":2046},[45,84032,84033],{"class":2046}," .amount",[45,84035,15655],{"class":51},[45,84037,84038,84040,84042,84044,84046],{"class":47,"line":16914},[45,84039,55003],{"class":257},[45,84041,51518],{"class":51},[45,84043,857],{"class":257},[45,84045,51573],{"class":93},[45,84047,1373],{"class":51},[45,84049,84050,84052,84054,84056],{"class":47,"line":16928},[45,84051,57497],{"class":257},[45,84053,51518],{"class":51},[45,84055,79021],{"class":257},[45,84057,1373],{"class":51},[45,84059,84060,84062,84064,84066],{"class":47,"line":16933},[45,84061,62415],{"class":257},[45,84063,51518],{"class":51},[45,84065,51570],{"class":257},[45,84067,1373],{"class":51},[45,84069,84070,84072,84074,84076,84078],{"class":47,"line":16938},[45,84071,61831],{"class":257},[45,84073,51518],{"class":51},[45,84075,863],{"class":257},[45,84077,51573],{"class":93},[45,84079,1373],{"class":51},[45,84081,84082],{"class":47,"line":16952},[45,84083,2270],{"class":51},[45,84085,84086,84088,84090],{"class":47,"line":16964},[45,84087,52498],{"class":51},[45,84089,121],{"class":51381},[45,84091,51388],{"class":51},[45,84093,84094,84096,84098],{"class":47,"line":16969},[45,84095,51866],{"class":51},[45,84097,51415],{"class":51381},[45,84099,51388],{"class":51},[45,84101,84102],{"class":47,"line":16982},[45,84103,2483],{"emptyLinePlaceholder":133},[45,84105,84106,84108,84110],{"class":47,"line":16987},[45,84107,1117],{"class":51},[45,84109,51881],{"class":51381},[45,84111,51388],{"class":51},[45,84113,84114,84116,84118,84120,84122,84124],{"class":47,"line":16992},[45,84115,52225],{"class":51},[45,84117,51692],{"class":51381},[45,84119,53567],{"class":2046},[45,84121,254],{"class":51},[45,84123,62689],{"class":313},[45,84125,51388],{"class":51},[45,84127,84128,84130,84132],{"class":47,"line":16997},[45,84129,52498],{"class":51},[45,84131,51692],{"class":51381},[45,84133,51388],{"class":51},[45,84135,84136,84138,84140,84142,84144,84146],{"class":47,"line":17010},[45,84137,52225],{"class":51},[45,84139,51692],{"class":51381},[45,84141,53567],{"class":2046},[45,84143,254],{"class":51},[45,84145,62661],{"class":313},[45,84147,51388],{"class":51},[45,84149,84150,84152,84154,84157,84159,84161,84163,84166,84168,84170,84172,84174],{"class":47,"line":17015},[45,84151,51422],{"class":51},[45,84153,51692],{"class":51381},[45,84155,84156],{"class":51},">合计：\u003C",[45,84158,45],{"class":51381},[45,84160,53567],{"class":2046},[45,84162,254],{"class":51},[45,84164,84165],{"class":313},"\"amount\"",[45,84167,55395],{"class":51},[45,84169,45],{"class":51381},[45,84171,55395],{"class":51},[45,84173,51692],{"class":51381},[45,84175,51388],{"class":51},[45,84177,84178,84180,84182],{"class":47,"line":32714},[45,84179,52498],{"class":51},[45,84181,51692],{"class":51381},[45,84183,51388],{"class":51},[45,84185,84186,84188,84190],{"class":47,"line":32720},[45,84187,52225],{"class":51},[45,84189,51894],{"class":51381},[45,84191,51388],{"class":51},[45,84193,84194,84196,84198,84200],{"class":47,"line":32726},[45,84195,11304],{"class":93},[45,84197,79458],{"class":257},[45,84199,13647],{"class":93},[45,84201,55528],{"class":51},[45,84203,84204],{"class":47,"line":32732},[45,84205,79467],{"class":51},[45,84207,84208,84210,84212],{"class":47,"line":32738},[45,84209,79472],{"class":51},[45,84211,79475],{"class":313},[45,84213,31547],{"class":51},[45,84215,84216,84218,84220],{"class":47,"line":32749},[45,84217,79482],{"class":51},[45,84219,79485],{"class":313},[45,84221,31547],{"class":51},[45,84223,84224,84226,84229],{"class":47,"line":32755},[45,84225,79492],{"class":51},[45,84227,84228],{"class":257},"289.9",[45,84230,31547],{"class":51},[45,84232,84233,84235,84237],{"class":47,"line":32775},[45,84234,79502],{"class":51},[45,84236,79505],{"class":313},[45,84238,31547],{"class":51},[45,84240,84241,84244,84246],{"class":47,"line":32781},[45,84242,84243],{"class":51},"        count: ",[45,84245,286],{"class":257},[45,84247,31547],{"class":51},[45,84249,84250,84253,84256],{"class":47,"line":32792},[45,84251,84252],{"class":51},"        spec: { color: ",[45,84254,84255],{"class":313},"'白色'",[45,84257,55685],{"class":51},[45,84259,84260],{"class":47,"line":32798},[45,84261,77973],{"class":51},[45,84263,84264],{"class":47,"line":32804},[45,84265,79467],{"class":51},[45,84267,84268,84270,84272],{"class":47,"line":32810},[45,84269,79472],{"class":51},[45,84271,79566],{"class":313},[45,84273,31547],{"class":51},[45,84275,84276,84278,84280],{"class":47,"line":32816},[45,84277,79482],{"class":51},[45,84279,79575],{"class":313},[45,84281,31547],{"class":51},[45,84283,84284,84286,84289],{"class":47,"line":32822},[45,84285,79492],{"class":51},[45,84287,84288],{"class":257},"109.8",[45,84290,31547],{"class":51},[45,84292,84293,84295,84297],{"class":47,"line":32828},[45,84294,79502],{"class":51},[45,84296,79593],{"class":313},[45,84298,31547],{"class":51},[45,84300,84301,84303,84305],{"class":47,"line":32834},[45,84302,84243],{"class":51},[45,84304,280],{"class":257},[45,84306,31547],{"class":51},[45,84308,84309,84312,84314,84316,84318],{"class":47,"line":32854},[45,84310,84311],{"class":51},"        spec: { size: ",[45,84313,81984],{"class":313},[45,84315,55545],{"class":51},[45,84317,81989],{"class":313},[45,84319,55685],{"class":51},[45,84321,84322],{"class":47,"line":32860},[45,84323,77973],{"class":51},[45,84325,84326],{"class":47,"line":32876},[45,84327,79467],{"class":51},[45,84329,84330,84332,84334],{"class":47,"line":32882},[45,84331,79472],{"class":51},[45,84333,79610],{"class":313},[45,84335,31547],{"class":51},[45,84337,84338,84340,84342],{"class":47,"line":32896},[45,84339,79482],{"class":51},[45,84341,79619],{"class":313},[45,84343,31547],{"class":51},[45,84345,84346,84348,84351],{"class":47,"line":32902},[45,84347,79492],{"class":51},[45,84349,84350],{"class":257},"488",[45,84352,31547],{"class":51},[45,84354,84355,84357,84359],{"class":47,"line":32917},[45,84356,79502],{"class":51},[45,84358,79637],{"class":313},[45,84360,31547],{"class":51},[45,84362,84363,84365,84367],{"class":47,"line":32923},[45,84364,84243],{"class":51},[45,84366,426],{"class":257},[45,84368,31547],{"class":51},[45,84370,84371,84373,84376,84379,84382],{"class":47,"line":32932},[45,84372,84252],{"class":51},[45,84374,84375],{"class":313},"'青色'",[45,84377,84378],{"class":51},", sum: ",[45,84380,84381],{"class":313},"'一大四小'",[45,84383,55685],{"class":51},[45,84385,84386],{"class":47,"line":32938},[45,84387,77973],{"class":51},[45,84389,84390],{"class":47,"line":32947},[45,84391,79467],{"class":51},[45,84393,84394,84396,84398],{"class":47,"line":32953},[45,84395,79472],{"class":51},[45,84397,79654],{"class":313},[45,84399,31547],{"class":51},[45,84401,84402,84404,84406],{"class":47,"line":32959},[45,84403,79482],{"class":51},[45,84405,79663],{"class":313},[45,84407,31547],{"class":51},[45,84409,84410,84412,84415],{"class":47,"line":32968},[45,84411,79492],{"class":51},[45,84413,84414],{"class":257},"139",[45,84416,31547],{"class":51},[45,84418,84419,84421,84423],{"class":47,"line":32974},[45,84420,79502],{"class":51},[45,84422,79681],{"class":313},[45,84424,31547],{"class":51},[45,84426,84427,84429,84431],{"class":47,"line":32985},[45,84428,84243],{"class":51},[45,84430,426],{"class":257},[45,84432,31547],{"class":51},[45,84434,84435,84437,84440,84442,84445],{"class":47,"line":32991},[45,84436,84311],{"class":51},[45,84438,84439],{"class":313},"'小号'",[45,84441,55545],{"class":51},[45,84443,84444],{"class":313},"'紫色'",[45,84446,55551],{"class":51},[45,84448,84449,84452],{"class":47,"line":33010},[45,84450,84451],{"class":51},"        gift: ",[45,84453,84454],{"class":313},"'50g茶叶,清洗球'\n",[45,84456,84457],{"class":47,"line":33016},[45,84458,52479],{"class":51},[45,84460,84461],{"class":47,"line":33027},[45,84462,53190],{"class":51},[45,84464,84465],{"class":47,"line":33033},[45,84466,84467],{"class":267},"    \u002F\u002F  1.根据数据渲染页面\n",[45,84469,84470,84472,84474,84476,84478,84480,84482,84484,84486,84488,84490,84492],{"class":47,"line":33053},[45,84471,52488],{"class":51},[45,84473,54480],{"class":2046},[45,84475,209],{"class":51},[45,84477,79982],{"class":313},[45,84479,74330],{"class":51},[45,84481,254],{"class":93},[45,84483,80129],{"class":51},[45,84485,74125],{"class":2046},[45,84487,209],{"class":51},[45,84489,79876],{"class":5299},[45,84491,79879],{"class":93},[45,84493,15655],{"class":51},[45,84495,84496],{"class":47,"line":33069},[45,84497,84498],{"class":267},"      \u002F\u002F 对象解构\n",[45,84500,84501,84503,84505,84507,84509,84511,84513,84516,84518,84520,84522,84525,84527,84530,84532,84534],{"class":47,"line":33075},[45,84502,58309],{"class":93},[45,84504,79888],{"class":51},[45,84506,79901],{"class":257},[45,84508,12518],{"class":51},[45,84510,79891],{"class":257},[45,84512,12518],{"class":51},[45,84514,84515],{"class":257},"count",[45,84517,12518],{"class":51},[45,84519,79896],{"class":257},[45,84521,12518],{"class":51},[45,84523,84524],{"class":257},"spec",[45,84526,12518],{"class":51},[45,84528,84529],{"class":257},"gift",[45,84531,79904],{"class":51},[45,84533,254],{"class":93},[45,84535,79909],{"class":51},[45,84537,84538],{"class":47,"line":33089},[45,84539,84540],{"class":267},"      \u002F\u002F 规格文字模块处理\n",[45,84542,84543,84545,84548,84550,84552,84554,84556,84558,84560,84562],{"class":47,"line":33095},[45,84544,58309],{"class":93},[45,84546,84547],{"class":257}," text",[45,84549,13647],{"class":93},[45,84551,82019],{"class":51},[45,84553,82022],{"class":2046},[45,84555,82025],{"class":51},[45,84557,74304],{"class":2046},[45,84559,209],{"class":51},[45,84561,82032],{"class":313},[45,84563,215],{"class":51},[45,84565,84566],{"class":47,"line":33101},[45,84567,84568],{"class":267},"      \u002F\u002F 处理赠品模块\n",[45,84570,84571,84573,84575,84577,84580,84582,84584,84586,84588,84591,84593,84595,84597,84599,84601,84604,84606,84609,84611,84613,84615,84617,84619,84621],{"class":47,"line":33112},[45,84572,58309],{"class":93},[45,84574,74000],{"class":257},[45,84576,13647],{"class":93},[45,84578,84579],{"class":51}," gift ",[45,84581,1193],{"class":93},[45,84583,83193],{"class":51},[45,84585,83196],{"class":2046},[45,84587,209],{"class":51},[45,84589,84590],{"class":313},"','",[45,84592,30907],{"class":51},[45,84594,74125],{"class":2046},[45,84596,209],{"class":51},[45,84598,79876],{"class":5299},[45,84600,79879],{"class":93},[45,84602,84603],{"class":313}," `\u003Cspan class=\"tag\">【赠品】${",[45,84605,79876],{"class":51},[45,84607,84608],{"class":313},"}\u003C\u002Fspan>`",[45,84610,30907],{"class":51},[45,84612,74304],{"class":2046},[45,84614,209],{"class":51},[45,84616,74309],{"class":313},[45,84618,13797],{"class":51},[45,84620,1066],{"class":93},[45,84622,70185],{"class":313},[45,84624,84625],{"class":47,"line":33118},[45,84626,84627],{"class":267},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[45,84629,84630,84632,84635,84637,84640,84642,84644,84646,84649,84651,84653,84655,84658,84660,84662],{"class":47,"line":33124},[45,84631,58309],{"class":93},[45,84633,84634],{"class":257}," subtotal",[45,84636,13647],{"class":93},[45,84638,84639],{"class":51}," ((price ",[45,84641,663],{"class":93},[45,84643,5837],{"class":257},[45,84645,6601],{"class":93},[45,84647,84648],{"class":51}," count) ",[45,84650,791],{"class":93},[45,84652,5837],{"class":257},[45,84654,30907],{"class":51},[45,84656,84657],{"class":2046},"toFixed",[45,84659,209],{"class":51},[45,84661,286],{"class":257},[45,84663,215],{"class":51},[45,84665,84666],{"class":47,"line":33134},[45,84667,2483],{"emptyLinePlaceholder":133},[45,84669,84670,84672],{"class":47,"line":33140},[45,84671,74063],{"class":93},[45,84673,70249],{"class":313},[45,84675,84676],{"class":47,"line":33151},[45,84677,84678],{"class":313},"        \u003Cdiv class=\"item\">\n",[45,84680,84681,84684,84686],{"class":47,"line":33157},[45,84682,84683],{"class":313},"          \u003Cimg src=\"${",[45,84685,79901],{"class":51},[45,84687,79933],{"class":313},[45,84689,84690,84693,84695,84698,84700],{"class":47,"line":33167},[45,84691,84692],{"class":313},"          \u003Cp class=\"name\">${",[45,84694,79891],{"class":51},[45,84696,84697],{"class":313},"}${",[45,84699,1382],{"class":51},[45,84701,79943],{"class":313},[45,84703,84704,84707,84709],{"class":47,"line":33172},[45,84705,84706],{"class":313},"          \u003Cp class=\"spec\">${",[45,84708,5270],{"class":51},[45,84710,79943],{"class":313},[45,84712,84713,84716,84718,84720,84722,84724,84726,84728],{"class":47,"line":33178},[45,84714,84715],{"class":313},"          \u003Cp class=\"price\">${",[45,84717,79896],{"class":51},[45,84719,765],{"class":313},[45,84721,84657],{"class":2046},[45,84723,209],{"class":313},[45,84725,286],{"class":257},[45,84727,637],{"class":313},[45,84729,79943],{"class":313},[45,84731,84732,84735,84737],{"class":47,"line":33227},[45,84733,84734],{"class":313},"          \u003Cp class=\"count\">x${",[45,84736,84515],{"class":51},[45,84738,79943],{"class":313},[45,84740,84741,84744,84747],{"class":47,"line":33274},[45,84742,84743],{"class":313},"          \u003Cp class=\"sub-total\">${",[45,84745,84746],{"class":51},"subtotal",[45,84748,79943],{"class":313},[45,84750,84751],{"class":47,"line":33279},[45,84752,84753],{"class":313},"        \u003C\u002Fdiv> \n",[45,84755,84756],{"class":47,"line":33285},[45,84757,84758],{"class":313},"             `\n",[45,84760,84761,84764,84766,84768,84770],{"class":47,"line":33304},[45,84762,84763],{"class":51},"    }).",[45,84765,74304],{"class":2046},[45,84767,209],{"class":51},[45,84769,74309],{"class":313},[45,84771,215],{"class":51},[45,84773,84774],{"class":47,"line":33310},[45,84775,84776],{"class":267},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[45,84778,84779,84781,84783,84785,84787,84790,84792,84795,84797,84799,84801,84804,84807,84809,84812,84814,84816,84818,84821,84823,84825,84827,84829],{"class":47,"line":33330},[45,84780,11304],{"class":93},[45,84782,62866],{"class":257},[45,84784,13647],{"class":93},[45,84786,80129],{"class":51},[45,84788,84789],{"class":2046},"reduce",[45,84791,2459],{"class":51},[45,84793,84794],{"class":5299},"prev",[45,84796,12518],{"class":51},[45,84798,79876],{"class":5299},[45,84800,13797],{"class":51},[45,84802,84803],{"class":93},"=>",[45,84805,84806],{"class":51}," prev ",[45,84808,689],{"class":93},[45,84810,84811],{"class":51}," (item.price ",[45,84813,663],{"class":93},[45,84815,5837],{"class":257},[45,84817,6601],{"class":93},[45,84819,84820],{"class":51}," item.count) ",[45,84822,791],{"class":93},[45,84824,5837],{"class":257},[45,84826,12518],{"class":51},[45,84828,400],{"class":257},[45,84830,215],{"class":51},[45,84832,84833,84835,84837,84839,84842,84844,84846,84849,84851,84853,84855],{"class":47,"line":33336},[45,84834,52488],{"class":51},[45,84836,54480],{"class":2046},[45,84838,209],{"class":51},[45,84840,84841],{"class":313},"'.amount'",[45,84843,74330],{"class":51},[45,84845,254],{"class":93},[45,84847,84848],{"class":51}," total.",[45,84850,84657],{"class":2046},[45,84852,209],{"class":51},[45,84854,286],{"class":257},[45,84856,215],{"class":51},[45,84858,84859,84861,84863],{"class":47,"line":33342},[45,84860,52498],{"class":51},[45,84862,51894],{"class":51381},[45,84864,51388],{"class":51},[45,84866,84867,84869,84871],{"class":47,"line":33352},[45,84868,51866],{"class":51},[45,84870,51881],{"class":51381},[45,84872,51388],{"class":51},[45,84874,84875],{"class":47,"line":33357},[45,84876,2483],{"emptyLinePlaceholder":133},[45,84878,84879,84881,84883],{"class":47,"line":33363},[45,84880,51866],{"class":51},[45,84882,50716],{"class":51381},[45,84884,51388],{"class":51},[30,84886,84888],{"id":84887},"_411-编程思想","4.11 编程思想",[176,84890,84892],{"id":84891},"_4111-面向过程介绍","4.11.1 面向过程介绍",[10,84894,84895,84898],{},[358,84896,84897],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[10,84900,84901],{},"调用就可以了",[10,84903,84904],{},[1545,84905],{"alt":40,"src":84906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[176,84908,84910],{"id":84909},"_4112-面向对象","4.11.2 面向对象",[10,84912,84913],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[10,84915,84916],{},[1545,84917],{"alt":40,"src":84918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[10,84920,84921],{},"面向对象的特性：",[1214,84923,84924,84927,84930],{},[162,84925,84926],{},"封装性",[162,84928,84929],{},"继承性",[162,84931,84932],{},"多态性",[176,84934,84936],{"id":84935},"_4113-两者比较","4.11.3 两者比较",[10,84938,84939],{},[1545,84940],{"alt":40,"src":84941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[30,84943,84945],{"id":84944},"_412-构造函数回顾","4.12 构造函数回顾",[10,84947,84948],{},[1545,84949],{"alt":40,"src":84950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[10,84952,84953],{},[1545,84954],{"alt":40,"src":84955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[10,84957,84958],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[10,84960,84961],{},[1545,84962],{"alt":40,"src":84963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[30,84965,84967],{"id":84966},"_413-原型","4.13 原型",[176,84969,84971],{"id":84970},"_4131-原型对象的认识","4.13.1 原型对象的认识",[10,84973,84974],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[10,84976,84977],{},[1545,84978],{"alt":40,"src":84979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[10,84981,84982],{},[1545,84983],{"alt":40,"src":84984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[10,84986,84987],{},"原型是构造函数的属性，它也是一个对象",[10,84989,84990],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[10,84992,84993],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[35,84995,84997],{"className":53148,"code":84996,"language":53150,"meta":40,"style":40},"\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",[42,84998,84999,85007,85012,85020,85025,85030,85035,85040,85045,85049,85053,85057,85062,85067,85071,85076,85081,85086,85091,85096,85100,85108],{"__ignoreMap":40},[45,85000,85001,85003,85005],{"class":47,"line":48},[45,85002,1117],{"class":51},[45,85004,51881],{"class":51381},[45,85006,51388],{"class":51},[45,85008,85009],{"class":47,"line":125},[45,85010,85011],{"class":267},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[45,85013,85014,85016,85018],{"class":47,"line":1262},[45,85015,52225],{"class":51},[45,85017,51894],{"class":51381},[45,85019,51388],{"class":51},[45,85021,85022],{"class":47,"line":1277},[45,85023,85024],{"class":51},"    function Star(uname, age) {\n",[45,85026,85027],{"class":47,"line":1283},[45,85028,85029],{"class":51},"      this.uname = uname,\n",[45,85031,85032],{"class":47,"line":1297},[45,85033,85034],{"class":51},"        this.age = age\n",[45,85036,85037],{"class":47,"line":1303},[45,85038,85039],{"class":51},"      \u002F\u002F this.sing = function () {\n",[45,85041,85042],{"class":47,"line":1394},[45,85043,85044],{"class":51},"      \u002F\u002F   console.log('唱歌')\n",[45,85046,85047],{"class":47,"line":1400},[45,85048,2483],{"emptyLinePlaceholder":133},[45,85050,85051],{"class":47,"line":1412},[45,85052,60118],{"class":51},[45,85054,85055],{"class":47,"line":1695},[45,85056,2270],{"class":51},[45,85058,85059],{"class":47,"line":1700},[45,85060,85061],{"class":51},"    Star.prototype.sing = function () {\n",[45,85063,85064],{"class":47,"line":1706},[45,85065,85066],{"class":51},"      console.log('唱歌')\n",[45,85068,85069],{"class":47,"line":1711},[45,85070,2270],{"class":51},[45,85072,85073],{"class":47,"line":1725},[45,85074,85075],{"class":51},"    \u002F\u002F console.dir(Star.prototype)\n",[45,85077,85078],{"class":47,"line":1730},[45,85079,85080],{"class":51},"    const pink = new Star('pink', 18)\n",[45,85082,85083],{"class":47,"line":1736},[45,85084,85085],{"class":51},"    const red = new Star('red', 20)\n",[45,85087,85088],{"class":47,"line":1757},[45,85089,85090],{"class":51},"    pink.sing()\n",[45,85092,85093],{"class":47,"line":1762},[45,85094,85095],{"class":51},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[45,85097,85098],{"class":47,"line":1776},[45,85099,2483],{"emptyLinePlaceholder":133},[45,85101,85102,85104,85106],{"class":47,"line":1781},[45,85103,52498],{"class":51},[45,85105,51894],{"class":51381},[45,85107,51388],{"class":51},[45,85109,85110,85112,85114],{"class":47,"line":1810},[45,85111,51866],{"class":51},[45,85113,51881],{"class":51381},[45,85115,51388],{"class":51},[10,85117,85118],{},[1545,85119],{"alt":40,"src":85120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[35,85122,85124],{"className":53148,"code":85123,"language":53150,"meta":40,"style":40},"\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",[42,85125,85126,85134,85142,85147,85152,85157,85162,85166,85171,85176,85181,85185,85190,85194,85198,85203,85207,85215],{"__ignoreMap":40},[45,85127,85128,85130,85132],{"class":47,"line":48},[45,85129,1117],{"class":51},[45,85131,51881],{"class":51381},[45,85133,51388],{"class":51},[45,85135,85136,85138,85140],{"class":47,"line":125},[45,85137,52225],{"class":51},[45,85139,51894],{"class":51381},[45,85141,51388],{"class":51},[45,85143,85144],{"class":47,"line":1262},[45,85145,85146],{"class":51},"    let that\n",[45,85148,85149],{"class":47,"line":1277},[45,85150,85151],{"class":51},"    function Star(uname) {\n",[45,85153,85154],{"class":47,"line":1283},[45,85155,85156],{"class":51},"      this.uname = uname\n",[45,85158,85159],{"class":47,"line":1297},[45,85160,85161],{"class":51},"      that = this\n",[45,85163,85164],{"class":47,"line":1303},[45,85165,2270],{"class":51},[45,85167,85168],{"class":47,"line":1394},[45,85169,85170],{"class":51},"    \u002F\u002F 实例对象是 ldh\n",[45,85172,85173],{"class":47,"line":1400},[45,85174,85175],{"class":51},"    const ldh = new Star('刘德华')\n",[45,85177,85178],{"class":47,"line":1412},[45,85179,85180],{"class":51},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[45,85182,85183],{"class":47,"line":1695},[45,85184,2483],{"emptyLinePlaceholder":133},[45,85186,85187],{"class":47,"line":1700},[45,85188,85189],{"class":51},"    Star.sing = function () {\n",[45,85191,85192],{"class":47,"line":1706},[45,85193,85066],{"class":51},[45,85195,85196],{"class":47,"line":1711},[45,85197,2270],{"class":51},[45,85199,85200],{"class":47,"line":1725},[45,85201,85202],{"class":51},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[45,85204,85205],{"class":47,"line":1730},[45,85206,2483],{"emptyLinePlaceholder":133},[45,85208,85209,85211,85213],{"class":47,"line":1736},[45,85210,52498],{"class":51},[45,85212,51894],{"class":51381},[45,85214,51388],{"class":51},[45,85216,85217,85219,85221],{"class":47,"line":1757},[45,85218,51866],{"class":51},[45,85220,51881],{"class":51381},[45,85222,51388],{"class":51},[10,85224,85225],{},"构造函数的this指向的是实例对象；",[10,85227,85228],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[176,85230,85232],{"id":85231},"_4132-数组扩展方法","4.13.2 数组扩展方法",[10,85234,85235],{},[1545,85236],{"alt":40,"src":85237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[35,85239,85241],{"className":53148,"code":85240,"language":53150,"meta":40,"style":40},"\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",[42,85242,85243,85251,85259,85264,85269,85274,85279,85284,85289,85294,85299,85304,85309,85313,85318,85323,85328,85333,85337,85342,85347,85352,85357,85361,85366,85371,85376,85381,85385,85390,85394,85402],{"__ignoreMap":40},[45,85244,85245,85247,85249],{"class":47,"line":48},[45,85246,1117],{"class":51},[45,85248,51881],{"class":51381},[45,85250,51388],{"class":51},[45,85252,85253,85255,85257],{"class":47,"line":125},[45,85254,52225],{"class":51},[45,85256,51894],{"class":51381},[45,85258,51388],{"class":51},[45,85260,85261],{"class":47,"line":1262},[45,85262,85263],{"class":51},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[45,85265,85266],{"class":47,"line":1277},[45,85267,85268],{"class":51},"    const arr = [1, 2, 3]\n",[45,85270,85271],{"class":47,"line":1283},[45,85272,85273],{"class":51},"    \u002F\u002F 自己定义数组的扩展方法\n",[45,85275,85276],{"class":47,"line":1297},[45,85277,85278],{"class":51},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[45,85280,85281],{"class":47,"line":1303},[45,85282,85283],{"class":51},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[45,85285,85286],{"class":47,"line":1394},[45,85287,85288],{"class":51},"    \u002F\u002F ①.最大值\n",[45,85290,85291],{"class":47,"line":1400},[45,85292,85293],{"class":51},"    Array.prototype.max = function () {\n",[45,85295,85296],{"class":47,"line":1412},[45,85297,85298],{"class":51},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[45,85300,85301],{"class":47,"line":1695},[45,85302,85303],{"class":51},"      return Math.max(...this)\n",[45,85305,85306],{"class":47,"line":1700},[45,85307,85308],{"class":51},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[45,85310,85311],{"class":47,"line":1706},[45,85312,2270],{"class":51},[45,85314,85315],{"class":47,"line":1711},[45,85316,85317],{"class":51},"    console.log(arr.max())\n",[45,85319,85320],{"class":47,"line":1725},[45,85321,85322],{"class":51},"    \u002F\u002F ②最小值\n",[45,85324,85325],{"class":47,"line":1730},[45,85326,85327],{"class":51},"    Array.prototype.min = function () {\n",[45,85329,85330],{"class":47,"line":1736},[45,85331,85332],{"class":51},"      return Math.min(...this)\n",[45,85334,85335],{"class":47,"line":1757},[45,85336,2270],{"class":51},[45,85338,85339],{"class":47,"line":1762},[45,85340,85341],{"class":51},"    console.log(arr.min())\n",[45,85343,85344],{"class":47,"line":1776},[45,85345,85346],{"class":51},"    \u002F\u002F③求和\n",[45,85348,85349],{"class":47,"line":1781},[45,85350,85351],{"class":51},"    Array.prototype.sum = function () {\n",[45,85353,85354],{"class":47,"line":1810},[45,85355,85356],{"class":51},"      return this.reduce((prev, current) => prev + current, 0)\n",[45,85358,85359],{"class":47,"line":1815},[45,85360,2270],{"class":51},[45,85362,85363],{"class":47,"line":1832},[45,85364,85365],{"class":51},"    console.log(arr.sum())\n",[45,85367,85368],{"class":47,"line":1837},[45,85369,85370],{"class":51},"    \u002F\u002F ③排序\n",[45,85372,85373],{"class":47,"line":1842},[45,85374,85375],{"class":51},"    Array.prototype.rever = function () {\n",[45,85377,85378],{"class":47,"line":1847},[45,85379,85380],{"class":51},"      return this.reverse()\n",[45,85382,85383],{"class":47,"line":1861},[45,85384,2270],{"class":51},[45,85386,85387],{"class":47,"line":1866},[45,85388,85389],{"class":51},"    console.log(arr.rever())\n",[45,85391,85392],{"class":47,"line":2660},[45,85393,2483],{"emptyLinePlaceholder":133},[45,85395,85396,85398,85400],{"class":47,"line":2674},[45,85397,52498],{"class":51},[45,85399,51894],{"class":51381},[45,85401,51388],{"class":51},[45,85403,85404,85406,85408],{"class":47,"line":2682},[45,85405,51866],{"class":51},[45,85407,51881],{"class":51381},[45,85409,51388],{"class":51},[10,85411,85412],{},[1545,85413],{"alt":40,"src":85414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[176,85416,85418],{"id":85417},"_4133-constructor-属性","4.13.3 constructor 属性",[10,85420,85421],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[10,85423,85424],{},[1545,85425],{"alt":40,"src":85426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[35,85428,85430],{"className":53148,"code":85429,"language":53150,"meta":40,"style":40},"\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",[42,85431,85432,85440,85448,85453,85458,85462,85467,85472,85477,85485],{"__ignoreMap":40},[45,85433,85434,85436,85438],{"class":47,"line":48},[45,85435,1117],{"class":51},[45,85437,51881],{"class":51381},[45,85439,51388],{"class":51},[45,85441,85442,85444,85446],{"class":47,"line":125},[45,85443,52225],{"class":51},[45,85445,51894],{"class":51381},[45,85447,51388],{"class":51},[45,85449,85450],{"class":47,"line":1262},[45,85451,85452],{"class":51},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[45,85454,85455],{"class":47,"line":1277},[45,85456,85457],{"class":51},"    function Star() {\n",[45,85459,85460],{"class":47,"line":1283},[45,85461,2270],{"class":51},[45,85463,85464],{"class":47,"line":1297},[45,85465,85466],{"class":51},"    const ldh = new Star()\n",[45,85468,85469],{"class":47,"line":1303},[45,85470,85471],{"class":51},"    console.log(Star.prototype)\n",[45,85473,85474],{"class":47,"line":1394},[45,85475,85476],{"class":51},"    console.log(Star.prototype.constructor === Star)\n",[45,85478,85479,85481,85483],{"class":47,"line":1400},[45,85480,52498],{"class":51},[45,85482,51894],{"class":51381},[45,85484,51388],{"class":51},[45,85486,85487,85489,85491],{"class":47,"line":1412},[45,85488,51866],{"class":51},[45,85490,51881],{"class":51381},[45,85492,51388],{"class":51},[10,85494,85495],{},[1545,85496],{"alt":40,"src":85497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[10,85499,85500],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[35,85502,85504],{"className":53148,"code":85503,"language":53150,"meta":40,"style":40},"  \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",[42,85505,85506,85514,85518,85522,85526,85531,85536,85541,85545,85550,85555,85560,85565,85570,85575,85579,85583,85588,85593,85598,85602,85607,85612,85616,85620,85624],{"__ignoreMap":40},[45,85507,85508,85510,85512],{"class":47,"line":48},[45,85509,52225],{"class":51},[45,85511,51894],{"class":51381},[45,85513,51388],{"class":51},[45,85515,85516],{"class":47,"line":125},[45,85517,85452],{"class":51},[45,85519,85520],{"class":47,"line":1262},[45,85521,85457],{"class":51},[45,85523,85524],{"class":47,"line":1277},[45,85525,2270],{"class":51},[45,85527,85528],{"class":47,"line":1283},[45,85529,85530],{"class":51},"    \u002F\u002F const ldh = new Star()\n",[45,85532,85533],{"class":47,"line":1297},[45,85534,85535],{"class":51},"    \u002F\u002F console.log(Star.prototype)\n",[45,85537,85538],{"class":47,"line":1303},[45,85539,85540],{"class":51},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[45,85542,85543],{"class":47,"line":1394},[45,85544,2483],{"emptyLinePlaceholder":133},[45,85546,85547],{"class":47,"line":1400},[45,85548,85549],{"class":51},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[45,85551,85552],{"class":47,"line":1412},[45,85553,85554],{"class":51},"    \u002F\u002F Star.prototype.sing = function () {\n",[45,85556,85557],{"class":47,"line":1695},[45,85558,85559],{"class":51},"    \u002F\u002F   console.log('唱歌')\n",[45,85561,85562],{"class":47,"line":1700},[45,85563,85564],{"class":51},"    \u002F\u002F }\n",[45,85566,85567],{"class":47,"line":1706},[45,85568,85569],{"class":51},"    \u002F\u002F Star.prototype.dance = function () {\n",[45,85571,85572],{"class":47,"line":1711},[45,85573,85574],{"class":51},"    \u002F\u002F   console.log('跳舞')\n",[45,85576,85577],{"class":47,"line":1725},[45,85578,85564],{"class":51},[45,85580,85581],{"class":47,"line":1730},[45,85582,85471],{"class":51},[45,85584,85585],{"class":47,"line":1736},[45,85586,85587],{"class":51},"    Star.prototype = {\n",[45,85589,85590],{"class":47,"line":1757},[45,85591,85592],{"class":51},"      sing: function () {\n",[45,85594,85595],{"class":47,"line":1762},[45,85596,85597],{"class":51},"        console.log('唱歌')\n",[45,85599,85600],{"class":47,"line":1776},[45,85601,77973],{"class":51},[45,85603,85604],{"class":47,"line":1781},[45,85605,85606],{"class":51},"      dance: function () {\n",[45,85608,85609],{"class":47,"line":1810},[45,85610,85611],{"class":51},"        console.log('跳舞')\n",[45,85613,85614],{"class":47,"line":1815},[45,85615,52479],{"class":51},[45,85617,85618],{"class":47,"line":1832},[45,85619,2270],{"class":51},[45,85621,85622],{"class":47,"line":1837},[45,85623,85471],{"class":51},[45,85625,85626,85628,85630],{"class":47,"line":1842},[45,85627,52498],{"class":51},[45,85629,51894],{"class":51381},[45,85631,51388],{"class":51},[10,85633,85634],{},"进行输出结果后会发现：",[10,85636,85637],{},[1545,85638],{"alt":40,"src":85639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[10,85641,85642],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[10,85644,85645],{},"所以，要重新指回创造这个原型对象的构造函数",[35,85647,85649],{"className":71294,"code":85648,"language":71296,"meta":40,"style":40},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[42,85650,85651,85665,85670,85675,85686,85699,85704,85715,85729,85733],{"__ignoreMap":40},[45,85652,85653,85656,85658,85661,85663],{"class":47,"line":48},[45,85654,85655],{"class":257},"Star",[45,85657,765],{"class":51},[45,85659,85660],{"class":257},"prototype",[45,85662,13647],{"class":93},[45,85664,15655],{"class":51},[45,85666,85667],{"class":47,"line":125},[45,85668,85669],{"class":267},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[45,85671,85672],{"class":47,"line":1262},[45,85673,85674],{"class":51},"  constructor: Star,\n",[45,85676,85677,85680,85682,85684],{"class":47,"line":1277},[45,85678,85679],{"class":2046},"  sing",[45,85681,51518],{"class":51},[45,85683,54530],{"class":93},[45,85685,54533],{"class":51},[45,85687,85688,85690,85692,85694,85697],{"class":47,"line":1283},[45,85689,73834],{"class":51},[45,85691,58328],{"class":2046},[45,85693,209],{"class":51},[45,85695,85696],{"class":313},"'唱歌'",[45,85698,215],{"class":51},[45,85700,85701],{"class":47,"line":1297},[45,85702,85703],{"class":51},"   },\n",[45,85705,85706,85709,85711,85713],{"class":47,"line":1303},[45,85707,85708],{"class":2046},"   dance",[45,85710,51518],{"class":51},[45,85712,54530],{"class":93},[45,85714,54533],{"class":51},[45,85716,85717,85720,85722,85724,85727],{"class":47,"line":1394},[45,85718,85719],{"class":51},"     console.",[45,85721,58328],{"class":2046},[45,85723,209],{"class":51},[45,85725,85726],{"class":313},"'跳舞'",[45,85728,215],{"class":51},[45,85730,85731],{"class":47,"line":1400},[45,85732,4392],{"class":51},[45,85734,85735],{"class":47,"line":1412},[45,85736,1648],{"class":51},[10,85738,85739],{},[1545,85740],{"alt":40,"src":85741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[10,85743,85744],{},"总结1：",[10,85746,85747],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[10,85749,85750],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[10,85752,85753],{},"constructor指的是他的来源",[10,85755,85756],{},[1545,85757],{"alt":40,"src":85758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[10,85760,85761],{},[1545,85762],{"alt":40,"src":85763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[10,85765,85766],{},"总结2：",[10,85768,85769],{},[1545,85770],{"alt":40,"src":85771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[10,85773,85774],{},[1545,85775],{"alt":40,"src":85776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[10,85778,85779],{},[1545,85780],{"alt":40,"src":85781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[176,85783,85785],{"id":85784},"_4134-对象原型","4.13.4 对象原型",[10,85787,85788],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[10,85790,85791],{},"对象原型就是__proto__这个属性",[10,85793,85794],{},[1545,85795],{"alt":40,"src":85796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[10,85798,85799],{},[1545,85800],{"alt":40,"src":85801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[10,85803,85804],{},[1545,85805],{"alt":40,"src":85806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[10,85808,85809],{},[1545,85810],{"alt":40,"src":85811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[35,85813,85815],{"className":53148,"code":85814,"language":53150,"meta":40,"style":40},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[42,85816,85817,85825,85833,85837,85841,85845,85850,85858],{"__ignoreMap":40},[45,85818,85819,85821,85823],{"class":47,"line":48},[45,85820,1117],{"class":51},[45,85822,51881],{"class":51381},[45,85824,51388],{"class":51},[45,85826,85827,85829,85831],{"class":47,"line":125},[45,85828,52225],{"class":51},[45,85830,51894],{"class":51381},[45,85832,51388],{"class":51},[45,85834,85835],{"class":47,"line":1262},[45,85836,85457],{"class":51},[45,85838,85839],{"class":47,"line":1277},[45,85840,2270],{"class":51},[45,85842,85843],{"class":47,"line":1283},[45,85844,85466],{"class":51},[45,85846,85847],{"class":47,"line":1297},[45,85848,85849],{"class":51},"    console.log(ldh)\n",[45,85851,85852,85854,85856],{"class":47,"line":1303},[45,85853,52498],{"class":51},[45,85855,51894],{"class":51381},[45,85857,51388],{"class":51},[45,85859,85860,85862,85864],{"class":47,"line":1394},[45,85861,51866],{"class":51},[45,85863,51881],{"class":51381},[45,85865,51388],{"class":51},[10,85867,85868],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[10,85870,85871],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[10,85873,85874],{},[1545,85875],{"alt":40,"src":85876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[10,85878,85879],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[10,85881,85882],{},"对象原型指向原型对象",[10,85884,85885],{},[1545,85886],{"alt":40,"src":85887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[10,85889,85890],{},[1545,85891],{"alt":40,"src":85892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[10,85894,85895],{},[1545,85896],{"alt":40,"src":85897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[176,85899,85901],{"id":85900},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[10,85903,85904],{},[1545,85905],{"alt":40,"src":85906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[159,85908,85909,85912,85915,85918],{},[162,85910,85911],{},"构造函数通过new的形式实例化得到实例对象",[162,85913,85914],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[162,85916,85917],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[162,85919,85920],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[10,85922,85923],{},[1545,85924],{"alt":40,"src":85925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[10,85927,85928],{},"题目梳理：",[10,85930,85931],{},[1545,85932],{"alt":40,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[176,85935,85937],{"id":85936},"_4136-原型继承","4.13.6 原型继承",[10,85939,85940],{},[1545,85941],{"alt":40,"src":85942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[10,85944,85945],{},[1545,85946],{"alt":40,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[10,85949,85950],{},[1545,85951],{"alt":40,"src":85952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[10,85954,85955],{},[1545,85956],{"alt":40,"src":85957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[10,85959,85960],{},[1545,85961],{"alt":40,"src":85962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[10,85964,85965],{},[1545,85966],{"alt":40,"src":85967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[10,85969,85970],{},[1545,85971],{"alt":40,"src":85972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[10,85974,85975],{},[1545,85976],{"alt":40,"src":85977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[10,85979,85980],{},"回顾：构造函数每次new得到对象都是不同的",[176,85982,85984],{"id":85983},"_4137-原型链","4.13.7 原型链",[10,85986,85987],{},[1545,85988],{"alt":40,"src":85989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[10,85991,85992],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[10,85994,85995],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[10,85997,85998],{},"大哥是Object",[10,86000,86001],{},[1545,86002],{"alt":40,"src":86003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[10,86005,86006],{},[1545,86007],{"alt":40,"src":86008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[10,86010,86011],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[10,86013,86014],{},"万物皆对象",[176,86016,86018],{"id":86017},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[10,86020,86021],{},"模态框",[10,86023,86024],{},"以后遇见这个效果直接使用这个就行",[10,86026,86027],{},[1545,86028],{"alt":40,"src":86029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[10,86031,86032],{},[1545,86033],{"alt":40,"src":86034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[10,86036,86037],{},[1545,86038],{"alt":40,"src":86039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[10,86041,86042],{},[1545,86043],{"alt":40,"src":86044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[10,86046,86047],{},"补充知识点：",[159,86049,86050],{},[162,86051,86052],{},"append()",[10,86054,86055],{},[1545,86056],{"alt":40,"src":86057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[35,86059,86061],{"className":50714,"code":86060,"language":50716,"meta":40,"style":40},"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",[42,86062,86063,86068,86073,86078,86082,86086,86090,86095,86100,86105,86109],{"__ignoreMap":40},[45,86064,86065],{"class":47,"line":48},[45,86066,86067],{"class":51},"append(param1)\n",[45,86069,86070],{"class":47,"line":125},[45,86071,86072],{"class":51},"append(param1, param2)\n",[45,86074,86075],{"class":47,"line":1262},[45,86076,86077],{"class":51},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[45,86079,86080],{"class":47,"line":1277},[45,86081,2483],{"emptyLinePlaceholder":133},[45,86083,86084],{"class":47,"line":1283},[45,86085,2483],{"emptyLinePlaceholder":133},[45,86087,86088],{"class":47,"line":1297},[45,86089,2483],{"emptyLinePlaceholder":133},[45,86091,86092],{"class":47,"line":1303},[45,86093,86094],{"class":51},"let div = document.createElement(\"div\");\n",[45,86096,86097],{"class":47,"line":1394},[45,86098,86099],{"class":51},"let p = document.createElement(\"p\");\n",[45,86101,86102],{"class":47,"line":1400},[45,86103,86104],{"class":51},"div.append(p);\n",[45,86106,86107],{"class":47,"line":1412},[45,86108,2483],{"emptyLinePlaceholder":133},[45,86110,86111,86114,86116],{"class":47,"line":1695},[45,86112,86113],{"class":51},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[45,86115,10],{"class":51381},[45,86117,86118],{"class":51},"> ]\n",[159,86120,86121],{"start":125},[162,86122,86123],{},"remove()",[10,86125,86126],{},"自己删自己",[10,86128,86129],{},[1545,86130],{"alt":40,"src":86131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[35,86133,86135],{"className":50714,"code":86134,"language":50716,"meta":40,"style":40},"\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",[42,86136,86137,86147,86161,86165,86173,86187,86207,86219,86227,86234,86246,86259,86294,86306,86317,86329,86341,86353,86380,86390,86394,86398,86407,86419,86433,86443,86455,86459,86463,86473,86484,86494,86504,86517,86530,86540,86544,86548,86557,86567,86579,86583,86587,86596,86606,86616,86628,86632,86636,86646,86662,86673,86683,86693,86705,86717,86729,86733,86737,86750,86761,86765,86773,86781,86785,86793,86813,86833,86841,86846,86872,86877,86882,86901,86906,86918,86923,86934,86944,86954,86959,86964,86968,86973,86978,86983,87003,87008,87028,87033,87047,87052,87057,87062,87078,87082,87087,87116,87121,87126,87131,87142,87146,87150,87154,87159,87184,87189,87214,87219,87228,87232,87237,87262,87266,87291,87295,87304,87308,87313,87331,87341,87345,87353,87361,87365],{"__ignoreMap":40},[45,86138,86139,86141,86143,86145],{"class":47,"line":48},[45,86140,51378],{"class":51},[45,86142,51382],{"class":51381},[45,86144,51385],{"class":2046},[45,86146,51388],{"class":51},[45,86148,86149,86151,86153,86155,86157,86159],{"class":47,"line":125},[45,86150,1117],{"class":51},[45,86152,50716],{"class":51381},[45,86154,51397],{"class":2046},[45,86156,254],{"class":51},[45,86158,51402],{"class":313},[45,86160,51388],{"class":51},[45,86162,86163],{"class":47,"line":1262},[45,86164,2483],{"emptyLinePlaceholder":133},[45,86166,86167,86169,86171],{"class":47,"line":1277},[45,86168,1117],{"class":51},[45,86170,51415],{"class":51381},[45,86172,51388],{"class":51},[45,86174,86175,86177,86179,86181,86183,86185],{"class":47,"line":1283},[45,86176,52225],{"class":51},[45,86178,51425],{"class":51381},[45,86180,51428],{"class":2046},[45,86182,254],{"class":51},[45,86184,51433],{"class":313},[45,86186,51388],{"class":51},[45,86188,86189,86191,86193,86195,86197,86199,86201,86203,86205],{"class":47,"line":1297},[45,86190,52225],{"class":51},[45,86192,51425],{"class":51381},[45,86194,15003],{"class":2046},[45,86196,254],{"class":51},[45,86198,51472],{"class":313},[45,86200,51452],{"class":2046},[45,86202,254],{"class":51},[45,86204,51479],{"class":313},[45,86206,51388],{"class":51},[45,86208,86209,86211,86213,86215,86217],{"class":47,"line":1303},[45,86210,52225],{"class":51},[45,86212,51488],{"class":51381},[45,86214,51491],{"class":51},[45,86216,51488],{"class":51381},[45,86218,51388],{"class":51},[45,86220,86221,86223,86225],{"class":47,"line":1394},[45,86222,52225],{"class":51},[45,86224,121],{"class":51381},[45,86226,51388],{"class":51},[45,86228,86229,86232],{"class":47,"line":1400},[45,86230,86231],{"class":2046},"    .modal",[45,86233,15655],{"class":51},[45,86235,86236,86238,86240,86242,86244],{"class":47,"line":1412},[45,86237,54852],{"class":257},[45,86239,51518],{"class":51},[45,86241,4056],{"class":257},[45,86243,51573],{"class":93},[45,86245,1373],{"class":51},[45,86247,86248,86251,86253,86255,86257],{"class":47,"line":1695},[45,86249,86250],{"class":257},"      min-height",[45,86252,51518],{"class":51},[45,86254,519],{"class":257},[45,86256,51573],{"class":93},[45,86258,1373],{"class":51},[45,86260,86261,86263,86265,86267,86269,86271,86273,86275,86277,86279,86281,86283,86285,86287,86289,86292],{"class":47,"line":1700},[45,86262,78831],{"class":257},[45,86264,51518],{"class":51},[45,86266,400],{"class":257},[45,86268,4176],{"class":257},[45,86270,2121],{"class":257},[45,86272,51573],{"class":93},[45,86274,78848],{"class":257},[45,86276,209],{"class":51},[45,86278,400],{"class":257},[45,86280,12518],{"class":51},[45,86282,400],{"class":257},[45,86284,12518],{"class":51},[45,86286,400],{"class":257},[45,86288,12518],{"class":51},[45,86290,86291],{"class":257},"0.1",[45,86293,2802],{"class":51},[45,86295,86296,86298,86300,86302,86304],{"class":47,"line":1706},[45,86297,55215],{"class":257},[45,86299,51518],{"class":51},[45,86301,501],{"class":257},[45,86303,51573],{"class":93},[45,86305,1373],{"class":51},[45,86307,86308,86310,86312,86315],{"class":47,"line":1711},[45,86309,54840],{"class":257},[45,86311,51518],{"class":51},[45,86313,86314],{"class":257},"fixed",[45,86316,1373],{"class":51},[45,86318,86319,86322,86324,86327],{"class":47,"line":1725},[45,86320,86321],{"class":257},"      z-index",[45,86323,51518],{"class":51},[45,86325,86326],{"class":257},"999",[45,86328,1373],{"class":51},[45,86330,86331,86333,86335,86337,86339],{"class":47,"line":1730},[45,86332,54919],{"class":257},[45,86334,51518],{"class":51},[45,86336,863],{"class":257},[45,86338,536],{"class":93},[45,86340,1373],{"class":51},[45,86342,86343,86345,86347,86349,86351],{"class":47,"line":1736},[45,86344,55028],{"class":257},[45,86346,51518],{"class":51},[45,86348,863],{"class":257},[45,86350,536],{"class":93},[45,86352,1373],{"class":51},[45,86354,86355,86357,86359,86361,86363,86366,86368,86370,86372,86374,86376,86378],{"class":47,"line":1757},[45,86356,78872],{"class":257},[45,86358,51518],{"class":51},[45,86360,78877],{"class":257},[45,86362,209],{"class":51},[45,86364,86365],{"class":257},"-50",[45,86367,536],{"class":93},[45,86369,12518],{"class":51},[45,86371,86365],{"class":257},[45,86373,536],{"class":93},[45,86375,12518],{"class":51},[45,86377,400],{"class":257},[45,86379,2802],{"class":51},[45,86381,86382,86384,86386,86388],{"class":47,"line":1762},[45,86383,54965],{"class":257},[45,86385,51518],{"class":51},[45,86387,60923],{"class":257},[45,86389,1373],{"class":51},[45,86391,86392],{"class":47,"line":1776},[45,86393,2270],{"class":51},[45,86395,86396],{"class":47,"line":1781},[45,86397,2483],{"emptyLinePlaceholder":133},[45,86399,86400,86402,86405],{"class":47,"line":1810},[45,86401,86231],{"class":2046},[45,86403,86404],{"class":2046}," .header",[45,86406,15655],{"class":51},[45,86408,86409,86411,86413,86415,86417],{"class":47,"line":1815},[45,86410,57440],{"class":257},[45,86412,51518],{"class":51},[45,86414,609],{"class":257},[45,86416,51573],{"class":93},[45,86418,1373],{"class":51},[45,86420,86421,86423,86425,86427,86429,86431],{"class":47,"line":1832},[45,86422,54776],{"class":257},[45,86424,51518],{"class":51},[45,86426,400],{"class":257},[45,86428,2121],{"class":257},[45,86430,51573],{"class":93},[45,86432,1373],{"class":51},[45,86434,86435,86437,86439,86441],{"class":47,"line":1837},[45,86436,54840],{"class":257},[45,86438,51518],{"class":51},[45,86440,54845],{"class":257},[45,86442,1373],{"class":51},[45,86444,86445,86447,86449,86451,86453],{"class":47,"line":1842},[45,86446,55003],{"class":257},[45,86448,51518],{"class":51},[45,86450,907],{"class":257},[45,86452,51573],{"class":93},[45,86454,1373],{"class":51},[45,86456,86457],{"class":47,"line":1847},[45,86458,2270],{"class":51},[45,86460,86461],{"class":47,"line":1861},[45,86462,2483],{"emptyLinePlaceholder":133},[45,86464,86465,86467,86469,86471],{"class":47,"line":1866},[45,86466,86231],{"class":2046},[45,86468,86404],{"class":2046},[45,86470,3115],{"class":51381},[45,86472,15655],{"class":51},[45,86474,86475,86478,86480,86482],{"class":47,"line":2660},[45,86476,86477],{"class":257},"      font-style",[45,86479,51518],{"class":51},[45,86481,63922],{"class":257},[45,86483,1373],{"class":51},[45,86485,86486,86488,86490,86492],{"class":47,"line":2674},[45,86487,57497],{"class":257},[45,86489,51518],{"class":51},[45,86491,62151],{"class":257},[45,86493,1373],{"class":51},[45,86495,86496,86498,86500,86502],{"class":47,"line":2682},[45,86497,54840],{"class":257},[45,86499,51518],{"class":51},[45,86501,54912],{"class":257},[45,86503,1373],{"class":51},[45,86505,86506,86509,86511,86513,86515],{"class":47,"line":2687},[45,86507,86508],{"class":257},"      right",[45,86510,51518],{"class":51},[45,86512,782],{"class":257},[45,86514,51573],{"class":93},[45,86516,1373],{"class":51},[45,86518,86519,86521,86523,86526,86528],{"class":47,"line":2693},[45,86520,55028],{"class":257},[45,86522,51518],{"class":51},[45,86524,86525],{"class":257},"-2",[45,86527,51573],{"class":93},[45,86529,1373],{"class":51},[45,86531,86532,86534,86536,86538],{"class":47,"line":2699},[45,86533,62106],{"class":257},[45,86535,51518],{"class":51},[45,86537,62111],{"class":257},[45,86539,1373],{"class":51},[45,86541,86542],{"class":47,"line":2704},[45,86543,2270],{"class":51},[45,86545,86546],{"class":47,"line":8031},[45,86547,2483],{"emptyLinePlaceholder":133},[45,86549,86550,86552,86555],{"class":47,"line":8055},[45,86551,86231],{"class":2046},[45,86553,86554],{"class":2046}," .body",[45,86556,15655],{"class":51},[45,86558,86559,86561,86563,86565],{"class":47,"line":8060},[45,86560,57367],{"class":257},[45,86562,51518],{"class":51},[45,86564,51673],{"class":257},[45,86566,1373],{"class":51},[45,86568,86569,86571,86573,86575,86577],{"class":47,"line":8066},[45,86570,54776],{"class":257},[45,86572,51518],{"class":51},[45,86574,654],{"class":257},[45,86576,51573],{"class":93},[45,86578,1373],{"class":51},[45,86580,86581],{"class":47,"line":8093},[45,86582,2270],{"class":51},[45,86584,86585],{"class":47,"line":8098},[45,86586,2483],{"emptyLinePlaceholder":133},[45,86588,86589,86591,86594],{"class":47,"line":8104},[45,86590,86231],{"class":2046},[45,86592,86593],{"class":2046}," .footer",[45,86595,15655],{"class":51},[45,86597,86598,86600,86602,86604],{"class":47,"line":8116},[45,86599,55090],{"class":257},[45,86601,51518],{"class":51},[45,86603,51558],{"class":257},[45,86605,1373],{"class":51},[45,86607,86608,86610,86612,86614],{"class":47,"line":8128},[45,86609,55101],{"class":257},[45,86611,51518],{"class":51},[45,86613,51661],{"class":257},[45,86615,1373],{"class":51},[45,86617,86618,86620,86622,86624,86626],{"class":47,"line":8140},[45,86619,54776],{"class":257},[45,86621,51518],{"class":51},[45,86623,654],{"class":257},[45,86625,51573],{"class":93},[45,86627,1373],{"class":51},[45,86629,86630],{"class":47,"line":9799},[45,86631,2270],{"class":51},[45,86633,86634],{"class":47,"line":9824},[45,86635,2483],{"emptyLinePlaceholder":133},[45,86637,86638,86640,86642,86644],{"class":47,"line":9847},[45,86639,86231],{"class":2046},[45,86641,86593],{"class":2046},[45,86643,1481],{"class":51381},[45,86645,15655],{"class":51},[45,86647,86648,86650,86652,86654,86656,86658,86660],{"class":47,"line":9871},[45,86649,54776],{"class":257},[45,86651,51518],{"class":51},[45,86653,280],{"class":257},[45,86655,51573],{"class":93},[45,86657,2166],{"class":257},[45,86659,51573],{"class":93},[45,86661,1373],{"class":51},[45,86663,86664,86666,86668,86671],{"class":47,"line":9876},[45,86665,61802],{"class":257},[45,86667,51518],{"class":51},[45,86669,86670],{"class":257},"#ccc",[45,86672,1373],{"class":51},[45,86674,86675,86677,86679,86681],{"class":47,"line":9881},[45,86676,64051],{"class":257},[45,86678,51518],{"class":51},[45,86680,54818],{"class":257},[45,86682,1373],{"class":51},[45,86684,86685,86687,86689,86691],{"class":47,"line":9886},[45,86686,57497],{"class":257},[45,86688,51518],{"class":51},[45,86690,60923],{"class":257},[45,86692,1373],{"class":51},[45,86694,86695,86697,86699,86701,86703],{"class":47,"line":9895},[45,86696,55215],{"class":257},[45,86698,51518],{"class":51},[45,86700,286],{"class":257},[45,86702,51573],{"class":93},[45,86704,1373],{"class":51},[45,86706,86707,86709,86711,86713,86715],{"class":47,"line":9900},[45,86708,61831],{"class":257},[45,86710,51518],{"class":51},[45,86712,654],{"class":257},[45,86714,51573],{"class":93},[45,86716,1373],{"class":51},[45,86718,86719,86721,86723,86725,86727],{"class":47,"line":9906},[45,86720,55003],{"class":257},[45,86722,51518],{"class":51},[45,86724,756],{"class":257},[45,86726,51573],{"class":93},[45,86728,1373],{"class":51},[45,86730,86731],{"class":47,"line":9927},[45,86732,2270],{"class":51},[45,86734,86735],{"class":47,"line":9933},[45,86736,2483],{"emptyLinePlaceholder":133},[45,86738,86739,86741,86743,86745,86748],{"class":47,"line":9947},[45,86740,86231],{"class":2046},[45,86742,86593],{"class":2046},[45,86744,1481],{"class":51381},[45,86746,86747],{"class":2046},".submit",[45,86749,15655],{"class":51},[45,86751,86752,86754,86756,86759],{"class":47,"line":9953},[45,86753,54965],{"class":257},[45,86755,51518],{"class":51},[45,86757,86758],{"class":257},"#369",[45,86760,1373],{"class":51},[45,86762,86763],{"class":47,"line":9980},[45,86764,2270],{"class":51},[45,86766,86767,86769,86771],{"class":47,"line":9989},[45,86768,52498],{"class":51},[45,86770,121],{"class":51381},[45,86772,51388],{"class":51},[45,86774,86775,86777,86779],{"class":47,"line":9995},[45,86776,51866],{"class":51},[45,86778,51415],{"class":51381},[45,86780,51388],{"class":51},[45,86782,86783],{"class":47,"line":10003},[45,86784,2483],{"emptyLinePlaceholder":133},[45,86786,86787,86789,86791],{"class":47,"line":10008},[45,86788,1117],{"class":51},[45,86790,51881],{"class":51381},[45,86792,51388],{"class":51},[45,86794,86795,86797,86799,86801,86803,86806,86809,86811],{"class":47,"line":16687},[45,86796,52225],{"class":51},[45,86798,53968],{"class":51381},[45,86800,15042],{"class":2046},[45,86802,254],{"class":51},[45,86804,86805],{"class":313},"\"delete\"",[45,86807,86808],{"class":51},">删除\u003C\u002F",[45,86810,53968],{"class":51381},[45,86812,51388],{"class":51},[45,86814,86815,86817,86819,86821,86823,86826,86829,86831],{"class":47,"line":16693},[45,86816,52225],{"class":51},[45,86818,53968],{"class":51381},[45,86820,15042],{"class":2046},[45,86822,254],{"class":51},[45,86824,86825],{"class":313},"\"login\"",[45,86827,86828],{"class":51},">登录\u003C\u002F",[45,86830,53968],{"class":51381},[45,86832,51388],{"class":51},[45,86834,86835,86837,86839],{"class":47,"line":16716},[45,86836,52225],{"class":51},[45,86838,51894],{"class":51381},[45,86840,51388],{"class":51},[45,86842,86843],{"class":47,"line":16722},[45,86844,86845],{"class":267},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[45,86847,86848,86850,86853,86855,86857,86859,86861,86863,86866,86868,86870],{"class":47,"line":16745},[45,86849,70165],{"class":93},[45,86851,86852],{"class":2046}," Modal",[45,86854,209],{"class":51},[45,86856,51488],{"class":5299},[45,86858,13647],{"class":93},[45,86860,70011],{"class":313},[45,86862,12518],{"class":51},[45,86864,86865],{"class":5299},"message",[45,86867,13647],{"class":93},[45,86869,70011],{"class":313},[45,86871,12525],{"class":51},[45,86873,86874],{"class":47,"line":16759},[45,86875,86876],{"class":267},"      \u002F\u002F 创建Model 模态框盒子\n",[45,86878,86879],{"class":47,"line":16779},[45,86880,86881],{"class":267},"      \u002F\u002F 1.1 创建div标签\n",[45,86883,86884,86886,86889,86891,86893,86895,86897,86899],{"class":47,"line":16785},[45,86885,70132],{"class":257},[45,86887,86888],{"class":51},".modalBox ",[45,86890,254],{"class":93},[45,86892,54477],{"class":51},[45,86894,70232],{"class":2046},[45,86896,209],{"class":51},[45,86898,82012],{"class":313},[45,86900,215],{"class":51},[45,86902,86903],{"class":47,"line":16796},[45,86904,86905],{"class":267},"      \u002F\u002F 1.2 给div 添加类名为model\n",[45,86907,86908,86910,86913,86915],{"class":47,"line":16819},[45,86909,70132],{"class":257},[45,86911,86912],{"class":51},".modalBox.className ",[45,86914,254],{"class":93},[45,86916,86917],{"class":313}," 'modal'\n",[45,86919,86920],{"class":47,"line":16841},[45,86921,86922],{"class":267},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[45,86924,86925,86927,86930,86932],{"class":47,"line":16846},[45,86926,70132],{"class":257},[45,86928,86929],{"class":51},".modalBox.innerHTML ",[45,86931,254],{"class":93},[45,86933,70249],{"class":313},[45,86935,86936,86939,86941],{"class":47,"line":16852},[45,86937,86938],{"class":313},"        \u003Cdiv class=\"header\">${",[45,86940,51488],{"class":51},[45,86942,86943],{"class":313},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[45,86945,86946,86949,86951],{"class":47,"line":16866},[45,86947,86948],{"class":313},"        \u003Cdiv class=\"body\">${",[45,86950,86865],{"class":51},[45,86952,86953],{"class":313},"}\u003C\u002Fdiv>\n",[45,86955,86956],{"class":47,"line":16879},[45,86957,86958],{"class":313},"      `\n",[45,86960,86961],{"class":47,"line":16884},[45,86962,86963],{"class":267},"      \u002F\u002F console.log(this.modalBox)\n",[45,86965,86966],{"class":47,"line":16898},[45,86967,2270],{"class":51},[45,86969,86970],{"class":47,"line":16903},[45,86971,86972],{"class":267},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[45,86974,86975],{"class":47,"line":16909},[45,86976,86977],{"class":267},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[45,86979,86980],{"class":47,"line":16914},[45,86981,86982],{"class":267},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[45,86984,86985,86988,86990,86992,86994,86997,86999,87001],{"class":47,"line":16928},[45,86986,86987],{"class":257},"    Modal",[45,86989,765],{"class":51},[45,86991,85660],{"class":257},[45,86993,765],{"class":51},[45,86995,86996],{"class":2046},"open",[45,86998,13647],{"class":93},[45,87000,58999],{"class":93},[45,87002,54533],{"class":51},[45,87004,87005],{"class":47,"line":16933},[45,87006,87007],{"class":267},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[45,87009,87010,87012,87015,87017,87019,87021,87023,87026],{"class":47,"line":16938},[45,87011,58309],{"class":93},[45,87013,87014],{"class":257}," box",[45,87016,13647],{"class":93},[45,87018,54477],{"class":51},[45,87020,54480],{"class":2046},[45,87022,209],{"class":51},[45,87024,87025],{"class":313},"'.modal'",[45,87027,215],{"class":51},[45,87029,87030],{"class":47,"line":16952},[45,87031,87032],{"class":267},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[45,87034,87035,87038,87040,87043,87045],{"class":47,"line":16964},[45,87036,87037],{"class":51},"      box ",[45,87039,1798],{"class":93},[45,87041,87042],{"class":51}," box.",[45,87044,57087],{"class":2046},[45,87046,2059],{"class":51},[45,87048,87049],{"class":47,"line":16969},[45,87050,87051],{"class":267},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[45,87053,87054],{"class":47,"line":16982},[45,87055,87056],{"class":267},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[45,87058,87059],{"class":47,"line":16987},[45,87060,87061],{"class":267},"      \u002F\u002F append可以增加对象\n",[45,87063,87064,87067,87070,87072,87075],{"class":47,"line":16992},[45,87065,87066],{"class":51},"      document.body.",[45,87068,87069],{"class":2046},"append",[45,87071,209],{"class":51},[45,87073,87074],{"class":257},"this",[45,87076,87077],{"class":51},".modalBox)\n",[45,87079,87080],{"class":47,"line":16997},[45,87081,2483],{"emptyLinePlaceholder":133},[45,87083,87084],{"class":47,"line":17010},[45,87085,87086],{"class":267},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[45,87088,87089,87091,87094,87096,87098,87101,87103,87105,87107,87109,87112,87114],{"class":47,"line":17015},[45,87090,70132],{"class":257},[45,87092,87093],{"class":51},".modalBox.",[45,87095,54480],{"class":2046},[45,87097,209],{"class":51},[45,87099,87100],{"class":313},"'i'",[45,87102,30907],{"class":51},[45,87104,57894],{"class":2046},[45,87106,209],{"class":51},[45,87108,57899],{"class":313},[45,87110,87111],{"class":51},", () ",[45,87113,84803],{"class":93},[45,87115,15655],{"class":51},[45,87117,87118],{"class":47,"line":32714},[45,87119,87120],{"class":267},"        \u002F\u002F 这个地方需要用到箭头函数\n",[45,87122,87123],{"class":47,"line":32720},[45,87124,87125],{"class":267},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[45,87127,87128],{"class":47,"line":32726},[45,87129,87130],{"class":267},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[45,87132,87133,87135,87137,87140],{"class":47,"line":32732},[45,87134,64807],{"class":257},[45,87136,765],{"class":51},[45,87138,87139],{"class":2046},"close",[45,87141,2059],{"class":51},[45,87143,87144],{"class":47,"line":32738},[45,87145,64896],{"class":51},[45,87147,87148],{"class":47,"line":32749},[45,87149,2270],{"class":51},[45,87151,87152],{"class":47,"line":32755},[45,87153,2483],{"emptyLinePlaceholder":133},[45,87155,87156],{"class":47,"line":32775},[45,87157,87158],{"class":267},"    \u002F\u002F 测试一下 点击 删除按钮\n",[45,87160,87161,87163,87165,87167,87170,87172,87174,87176,87178,87180,87182],{"class":47,"line":32781},[45,87162,52488],{"class":51},[45,87164,54480],{"class":2046},[45,87166,209],{"class":51},[45,87168,87169],{"class":313},"'#delete'",[45,87171,30907],{"class":51},[45,87173,57894],{"class":2046},[45,87175,209],{"class":51},[45,87177,57899],{"class":313},[45,87179,87111],{"class":51},[45,87181,84803],{"class":93},[45,87183,15655],{"class":51},[45,87185,87186],{"class":47,"line":32792},[45,87187,87188],{"class":267},"      \u002F\u002F 先调用Model构造函数\n",[45,87190,87191,87193,87196,87198,87200,87202,87204,87207,87209,87212],{"class":47,"line":32798},[45,87192,58309],{"class":93},[45,87194,87195],{"class":257}," del",[45,87197,13647],{"class":93},[45,87199,11661],{"class":93},[45,87201,86852],{"class":2046},[45,87203,209],{"class":51},[45,87205,87206],{"class":313},"'温馨的提示'",[45,87208,12518],{"class":51},[45,87210,87211],{"class":313},"'您没有删除权限操作'",[45,87213,215],{"class":51},[45,87215,87216],{"class":47,"line":32804},[45,87217,87218],{"class":267},"      \u002F\u002F 实例对象调用open方法\n",[45,87220,87221,87224,87226],{"class":47,"line":32810},[45,87222,87223],{"class":51},"      del.",[45,87225,86996],{"class":2046},[45,87227,2059],{"class":51},[45,87229,87230],{"class":47,"line":32816},[45,87231,33542],{"class":51},[45,87233,87234],{"class":47,"line":32822},[45,87235,87236],{"class":267},"    \u002F\u002F 测试一下 点击 登录按钮\n",[45,87238,87239,87241,87243,87245,87248,87250,87252,87254,87256,87258,87260],{"class":47,"line":32828},[45,87240,52488],{"class":51},[45,87242,54480],{"class":2046},[45,87244,209],{"class":51},[45,87246,87247],{"class":313},"'#login'",[45,87249,30907],{"class":51},[45,87251,57894],{"class":2046},[45,87253,209],{"class":51},[45,87255,57899],{"class":313},[45,87257,87111],{"class":51},[45,87259,84803],{"class":93},[45,87261,15655],{"class":51},[45,87263,87264],{"class":47,"line":32834},[45,87265,87188],{"class":267},[45,87267,87268,87270,87273,87275,87277,87279,87281,87284,87286,87289],{"class":47,"line":32854},[45,87269,58309],{"class":93},[45,87271,87272],{"class":257}," log",[45,87274,13647],{"class":93},[45,87276,11661],{"class":93},[45,87278,86852],{"class":2046},[45,87280,209],{"class":51},[45,87282,87283],{"class":313},"'友情提示'",[45,87285,12518],{"class":51},[45,87287,87288],{"class":313},"'您还没有登录呢'",[45,87290,215],{"class":51},[45,87292,87293],{"class":47,"line":32860},[45,87294,87218],{"class":267},[45,87296,87297,87300,87302],{"class":47,"line":32876},[45,87298,87299],{"class":51},"      log.",[45,87301,86996],{"class":2046},[45,87303,2059],{"class":51},[45,87305,87306],{"class":47,"line":32882},[45,87307,33542],{"class":51},[45,87309,87310],{"class":47,"line":32896},[45,87311,87312],{"class":267},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[45,87314,87315,87317,87319,87321,87323,87325,87327,87329],{"class":47,"line":32902},[45,87316,86987],{"class":257},[45,87318,765],{"class":51},[45,87320,85660],{"class":257},[45,87322,765],{"class":51},[45,87324,87139],{"class":2046},[45,87326,13647],{"class":93},[45,87328,58999],{"class":93},[45,87330,54533],{"class":51},[45,87332,87333,87335,87337,87339],{"class":47,"line":32917},[45,87334,70132],{"class":257},[45,87336,87093],{"class":51},[45,87338,57087],{"class":2046},[45,87340,2059],{"class":51},[45,87342,87343],{"class":47,"line":32923},[45,87344,2270],{"class":51},[45,87346,87347,87349,87351],{"class":47,"line":32932},[45,87348,52498],{"class":51},[45,87350,51894],{"class":51381},[45,87352,51388],{"class":51},[45,87354,87355,87357,87359],{"class":47,"line":32938},[45,87356,51866],{"class":51},[45,87358,51881],{"class":51381},[45,87360,51388],{"class":51},[45,87362,87363],{"class":47,"line":32947},[45,87364,2483],{"emptyLinePlaceholder":133},[45,87366,87367,87369,87371],{"class":47,"line":32953},[45,87368,51866],{"class":51},[45,87370,50716],{"class":51381},[45,87372,51388],{"class":51},[10,87374,87375],{},[1545,87376],{"alt":40,"src":87377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[30,87379,87381],{"id":87380},"_414-深浅拷贝","4.14 深浅拷贝",[176,87383,87385],{"id":87384},"_4141-浅拷贝","4.14.1 浅拷贝",[10,87387,87388],{},[1545,87389],{"alt":40,"src":87390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[10,87392,87393],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[10,87395,87396],{},[1545,87397],{"alt":40,"src":87398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[10,87400,87401],{},[1545,87402],{"alt":40,"src":87403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[10,87405,87406],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[10,87408,87409],{},[1545,87410],{"alt":40,"src":87411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[10,87413,11415],{},[10,87415,87416],{},[1545,87417],{"alt":40,"src":87418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[176,87420,87422],{"id":87421},"_4142-深拷贝","4.14.2 深拷贝",[10,87424,87425],{},"深拷贝：拷贝的是对象，不是地址",[10,87427,87428],{},"常用的三种方法：",[159,87430,87431,87434,87437],{},[162,87432,87433],{},"通过递归实现深拷贝",[162,87435,87436],{},"lodash\u002FcloneDeep",[162,87438,87439],{},"通过JSON.stringify()实现",[22081,87441,87443],{"id":87442},"_41421-递归函数","4.14.2.1 递归函数",[10,87445,87446],{},[1545,87447],{"alt":40,"src":87448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[159,87450,87451],{},[162,87452,87453],{},"死递归占溢出：",[35,87455,87457],{"className":53148,"code":87456,"language":53150,"meta":40,"style":40},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[42,87458,87459,87467,87475,87479,87484,87488,87493,87501],{"__ignoreMap":40},[45,87460,87461,87463,87465],{"class":47,"line":48},[45,87462,1117],{"class":51},[45,87464,51881],{"class":51381},[45,87466,51388],{"class":51},[45,87468,87469,87471,87473],{"class":47,"line":125},[45,87470,52225],{"class":51},[45,87472,51894],{"class":51381},[45,87474,51388],{"class":51},[45,87476,87477],{"class":47,"line":1262},[45,87478,77224],{"class":51},[45,87480,87481],{"class":47,"line":1277},[45,87482,87483],{"class":51},"      fn()\n",[45,87485,87486],{"class":47,"line":1283},[45,87487,2270],{"class":51},[45,87489,87490],{"class":47,"line":1297},[45,87491,87492],{"class":51},"    fn()\n",[45,87494,87495,87497,87499],{"class":47,"line":1303},[45,87496,52498],{"class":51},[45,87498,51894],{"class":51381},[45,87500,51388],{"class":51},[45,87502,87503,87505,87507],{"class":47,"line":1394},[45,87504,51866],{"class":51},[45,87506,51881],{"class":51381},[45,87508,51388],{"class":51},[159,87510,87511],{"start":125},[162,87512,87513],{},"递归函数要加判断条件：",[10,87515,87516],{},[1545,87517],{"alt":40,"src":87518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[159,87520,87521],{"start":1262},[162,87522,87523],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[35,87525,87527],{"className":50714,"code":87526,"language":50716,"meta":40,"style":40},"\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",[42,87528,87529,87539,87553,87557,87565,87579,87599,87611,87619,87623,87631,87643,87651,87659,87684,87696,87700,87707,87715,87723,87727],{"__ignoreMap":40},[45,87530,87531,87533,87535,87537],{"class":47,"line":48},[45,87532,51378],{"class":51},[45,87534,51382],{"class":51381},[45,87536,51385],{"class":2046},[45,87538,51388],{"class":51},[45,87540,87541,87543,87545,87547,87549,87551],{"class":47,"line":125},[45,87542,1117],{"class":51},[45,87544,50716],{"class":51381},[45,87546,51397],{"class":2046},[45,87548,254],{"class":51},[45,87550,51402],{"class":313},[45,87552,51388],{"class":51},[45,87554,87555],{"class":47,"line":1262},[45,87556,2483],{"emptyLinePlaceholder":133},[45,87558,87559,87561,87563],{"class":47,"line":1277},[45,87560,1117],{"class":51},[45,87562,51415],{"class":51381},[45,87564,51388],{"class":51},[45,87566,87567,87569,87571,87573,87575,87577],{"class":47,"line":1283},[45,87568,52225],{"class":51},[45,87570,51425],{"class":51381},[45,87572,51428],{"class":2046},[45,87574,254],{"class":51},[45,87576,51433],{"class":313},[45,87578,51388],{"class":51},[45,87580,87581,87583,87585,87587,87589,87591,87593,87595,87597],{"class":47,"line":1297},[45,87582,52225],{"class":51},[45,87584,51425],{"class":51381},[45,87586,15003],{"class":2046},[45,87588,254],{"class":51},[45,87590,51472],{"class":313},[45,87592,51452],{"class":2046},[45,87594,254],{"class":51},[45,87596,51479],{"class":313},[45,87598,51388],{"class":51},[45,87600,87601,87603,87605,87607,87609],{"class":47,"line":1303},[45,87602,52225],{"class":51},[45,87604,51488],{"class":51381},[45,87606,51491],{"class":51},[45,87608,51488],{"class":51381},[45,87610,51388],{"class":51},[45,87612,87613,87615,87617],{"class":47,"line":1394},[45,87614,51866],{"class":51},[45,87616,51415],{"class":51381},[45,87618,51388],{"class":51},[45,87620,87621],{"class":47,"line":1400},[45,87622,2483],{"emptyLinePlaceholder":133},[45,87624,87625,87627,87629],{"class":47,"line":1412},[45,87626,1117],{"class":51},[45,87628,51881],{"class":51381},[45,87630,51388],{"class":51},[45,87632,87633,87635,87637,87639,87641],{"class":47,"line":1695},[45,87634,52225],{"class":51},[45,87636,51692],{"class":51381},[45,87638,55395],{"class":51},[45,87640,51692],{"class":51381},[45,87642,51388],{"class":51},[45,87644,87645,87647,87649],{"class":47,"line":1700},[45,87646,52225],{"class":51},[45,87648,51894],{"class":51381},[45,87650,51388],{"class":51},[45,87652,87653,87655,87657],{"class":47,"line":1706},[45,87654,70165],{"class":93},[45,87656,73854],{"class":2046},[45,87658,10936],{"class":51},[45,87660,87661,87663,87665,87667,87669,87671,87673,87675,87677,87679,87682],{"class":47,"line":1711},[45,87662,55852],{"class":51},[45,87664,54480],{"class":2046},[45,87666,209],{"class":51},[45,87668,82012],{"class":313},[45,87670,74330],{"class":51},[45,87672,254],{"class":93},[45,87674,11661],{"class":93},[45,87676,73870],{"class":2046},[45,87678,17344],{"class":51},[45,87680,87681],{"class":2046},"toLocaleString",[45,87683,2059],{"class":51},[45,87685,87686,87689,87692,87694],{"class":47,"line":1725},[45,87687,87688],{"class":2046},"      setTimeout",[45,87690,87691],{"class":51},"(getTime, ",[45,87693,6493],{"class":257},[45,87695,215],{"class":51},[45,87697,87698],{"class":47,"line":1730},[45,87699,2270],{"class":51},[45,87701,87702,87705],{"class":47,"line":1736},[45,87703,87704],{"class":2046},"    getTime",[45,87706,2059],{"class":51},[45,87708,87709,87711,87713],{"class":47,"line":1757},[45,87710,52498],{"class":51},[45,87712,51894],{"class":51381},[45,87714,51388],{"class":51},[45,87716,87717,87719,87721],{"class":47,"line":1762},[45,87718,51866],{"class":51},[45,87720,51881],{"class":51381},[45,87722,51388],{"class":51},[45,87724,87725],{"class":47,"line":1776},[45,87726,2483],{"emptyLinePlaceholder":133},[45,87728,87729,87731,87733],{"class":47,"line":1781},[45,87730,51866],{"class":51},[45,87732,50716],{"class":51381},[45,87734,51388],{"class":51},[10,87736,87737],{},[1545,87738],{"alt":40,"src":87739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[159,87741,87742],{"start":1277},[162,87743,87433],{},[10,87745,87746],{},[1545,87747],{"alt":40,"src":87748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[10,87750,87751],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[10,87753,39270],{},[10,87755,87756],{},"这个是简易版的递归函数深拷贝",[10,87758,87759],{},"一定要注意先数组再对象，因为万物皆可对象",[35,87761,87763],{"className":50714,"code":87762,"language":50716,"meta":40,"style":40},"\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",[42,87764,87765,87775,87789,87793,87801,87815,87835,87847,87855,87859,87867,87875,87885,87894,87902,87918,87922,87930,87934,87938,87950,87955,87974,87990,87995,88000,88005,88020,88025,88030,88039,88047,88064,88072,88078,88086,88091,88096,88105,88109,88113,88117,88128,88137,88147,88161,88171,88179,88187,88195,88199],{"__ignoreMap":40},[45,87766,87767,87769,87771,87773],{"class":47,"line":48},[45,87768,51378],{"class":51},[45,87770,51382],{"class":51381},[45,87772,51385],{"class":2046},[45,87774,51388],{"class":51},[45,87776,87777,87779,87781,87783,87785,87787],{"class":47,"line":125},[45,87778,1117],{"class":51},[45,87780,50716],{"class":51381},[45,87782,51397],{"class":2046},[45,87784,254],{"class":51},[45,87786,51402],{"class":313},[45,87788,51388],{"class":51},[45,87790,87791],{"class":47,"line":1262},[45,87792,2483],{"emptyLinePlaceholder":133},[45,87794,87795,87797,87799],{"class":47,"line":1277},[45,87796,1117],{"class":51},[45,87798,51415],{"class":51381},[45,87800,51388],{"class":51},[45,87802,87803,87805,87807,87809,87811,87813],{"class":47,"line":1283},[45,87804,52225],{"class":51},[45,87806,51425],{"class":51381},[45,87808,51428],{"class":2046},[45,87810,254],{"class":51},[45,87812,51433],{"class":313},[45,87814,51388],{"class":51},[45,87816,87817,87819,87821,87823,87825,87827,87829,87831,87833],{"class":47,"line":1297},[45,87818,52225],{"class":51},[45,87820,51425],{"class":51381},[45,87822,15003],{"class":2046},[45,87824,254],{"class":51},[45,87826,51472],{"class":313},[45,87828,51452],{"class":2046},[45,87830,254],{"class":51},[45,87832,51479],{"class":313},[45,87834,51388],{"class":51},[45,87836,87837,87839,87841,87843,87845],{"class":47,"line":1303},[45,87838,52225],{"class":51},[45,87840,51488],{"class":51381},[45,87842,51491],{"class":51},[45,87844,51488],{"class":51381},[45,87846,51388],{"class":51},[45,87848,87849,87851,87853],{"class":47,"line":1394},[45,87850,51866],{"class":51},[45,87852,51415],{"class":51381},[45,87854,51388],{"class":51},[45,87856,87857],{"class":47,"line":1400},[45,87858,2483],{"emptyLinePlaceholder":133},[45,87860,87861,87863,87865],{"class":47,"line":1412},[45,87862,1117],{"class":51},[45,87864,51881],{"class":51381},[45,87866,51388],{"class":51},[45,87868,87869,87871,87873],{"class":47,"line":1695},[45,87870,52225],{"class":51},[45,87872,51894],{"class":51381},[45,87874,51388],{"class":51},[45,87876,87877,87879,87881,87883],{"class":47,"line":1700},[45,87878,11304],{"class":93},[45,87880,70052],{"class":257},[45,87882,13647],{"class":93},[45,87884,15655],{"class":51},[45,87886,87887,87889,87892],{"class":47,"line":1706},[45,87888,71697],{"class":51},[45,87890,87891],{"class":313},"'pink'",[45,87893,31547],{"class":51},[45,87895,87896,87898,87900],{"class":47,"line":1711},[45,87897,71707],{"class":51},[45,87899,857],{"class":257},[45,87901,31547],{"class":51},[45,87903,87904,87907,87910,87912,87915],{"class":47,"line":1725},[45,87905,87906],{"class":51},"      hobby: [",[45,87908,87909],{"class":313},"'乒乓球'",[45,87911,12518],{"class":51},[45,87913,87914],{"class":313},"'足球'",[45,87916,87917],{"class":51},"],\n",[45,87919,87920],{"class":47,"line":1730},[45,87921,77953],{"class":51},[45,87923,87924,87927],{"class":47,"line":1736},[45,87925,87926],{"class":51},"        baby: ",[45,87928,87929],{"class":313},"'小pink'\n",[45,87931,87932],{"class":47,"line":1757},[45,87933,52479],{"class":51},[45,87935,87936],{"class":47,"line":1762},[45,87937,2270],{"class":51},[45,87939,87940,87942,87945,87947],{"class":47,"line":1776},[45,87941,11304],{"class":93},[45,87943,87944],{"class":257}," o",[45,87946,13647],{"class":93},[45,87948,87949],{"class":51}," {}\n",[45,87951,87952],{"class":47,"line":1781},[45,87953,87954],{"class":267},"    \u002F\u002F 拷贝函数\n",[45,87956,87957,87959,87962,87964,87967,87969,87972],{"class":47,"line":1810},[45,87958,70165],{"class":93},[45,87960,87961],{"class":2046}," deepCopy",[45,87963,209],{"class":51},[45,87965,87966],{"class":5299},"newObj",[45,87968,12518],{"class":51},[45,87970,87971],{"class":5299},"oldObj",[45,87973,12525],{"class":51},[45,87975,87976,87978,87980,87982,87985,87987],{"class":47,"line":1815},[45,87977,52365],{"class":93},[45,87979,1741],{"class":51},[45,87981,51928],{"class":93},[45,87983,87984],{"class":51}," k ",[45,87986,26126],{"class":93},[45,87988,87989],{"class":51}," oldObj) {\n",[45,87991,87992],{"class":47,"line":1832},[45,87993,87994],{"class":267},"        \u002F\u002F 处理数组的问题\n",[45,87996,87997],{"class":47,"line":1837},[45,87998,87999],{"class":267},"        \u002F\u002F 判断是否属于数组\n",[45,88001,88002],{"class":47,"line":1842},[45,88003,88004],{"class":267},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[45,88006,88007,88009,88012,88015,88018],{"class":47,"line":1847},[45,88008,2580],{"class":93},[45,88010,88011],{"class":51}," (oldObj[k] ",[45,88013,88014],{"class":93},"instanceof",[45,88016,88017],{"class":2046}," Array",[45,88019,12525],{"class":51},[45,88021,88022],{"class":47,"line":1861},[45,88023,88024],{"class":267},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[45,88026,88027],{"class":47,"line":1866},[45,88028,88029],{"class":267},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[45,88031,88032,88035,88037],{"class":47,"line":2660},[45,88033,88034],{"class":51},"          newObj[k] ",[45,88036,254],{"class":93},[45,88038,51919],{"class":51},[45,88040,88041,88044],{"class":47,"line":2674},[45,88042,88043],{"class":2046},"          deepCopy",[45,88045,88046],{"class":51},"(newObj[k], oldObj[k])\n",[45,88048,88049,88051,88053,88055,88057,88059,88062],{"class":47,"line":2682},[45,88050,80161],{"class":51},[45,88052,1784],{"class":93},[45,88054,1787],{"class":93},[45,88056,88011],{"class":51},[45,88058,88014],{"class":93},[45,88060,88061],{"class":2046}," Object",[45,88063,12525],{"class":51},[45,88065,88066,88068,88070],{"class":47,"line":2687},[45,88067,88034],{"class":51},[45,88069,254],{"class":93},[45,88071,87949],{"class":51},[45,88073,88074,88076],{"class":47,"line":2693},[45,88075,88043],{"class":2046},[45,88077,88046],{"class":51},[45,88079,88080,88082,88084],{"class":47,"line":2699},[45,88081,80161],{"class":51},[45,88083,1784],{"class":93},[45,88085,15655],{"class":51},[45,88087,88088],{"class":47,"line":2704},[45,88089,88090],{"class":267},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[45,88092,88093],{"class":47,"line":8031},[45,88094,88095],{"class":267},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[45,88097,88098,88100,88102],{"class":47,"line":8055},[45,88099,88034],{"class":51},[45,88101,254],{"class":93},[45,88103,88104],{"class":51}," oldObj[k]\n",[45,88106,88107],{"class":47,"line":8060},[45,88108,2612],{"class":51},[45,88110,88111],{"class":47,"line":8066},[45,88112,52479],{"class":51},[45,88114,88115],{"class":47,"line":8093},[45,88116,2270],{"class":51},[45,88118,88119,88122,88125],{"class":47,"line":8098},[45,88120,88121],{"class":2046},"    deepCopy",[45,88123,88124],{"class":51},"(o, obj) ",[45,88126,88127],{"class":267},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[45,88129,88130,88132,88134],{"class":47,"line":8104},[45,88131,73834],{"class":51},[45,88133,58328],{"class":2046},[45,88135,88136],{"class":51},"(o)\n",[45,88138,88139,88142,88144],{"class":47,"line":8116},[45,88140,88141],{"class":51},"    o.age ",[45,88143,254],{"class":93},[45,88145,88146],{"class":257}," 20\n",[45,88148,88149,88152,88154,88156,88158],{"class":47,"line":8128},[45,88150,88151],{"class":51},"    o.hobby[",[45,88153,400],{"class":257},[45,88155,4526],{"class":51},[45,88157,254],{"class":93},[45,88159,88160],{"class":313}," '篮球'\n",[45,88162,88163,88166,88168],{"class":47,"line":8140},[45,88164,88165],{"class":51},"    o.family ",[45,88167,254],{"class":93},[45,88169,88170],{"class":313}," '老pink'\n",[45,88172,88173,88175,88177],{"class":47,"line":9799},[45,88174,73834],{"class":51},[45,88176,58328],{"class":2046},[45,88178,70117],{"class":51},[45,88180,88181,88183,88185],{"class":47,"line":9824},[45,88182,52498],{"class":51},[45,88184,51894],{"class":51381},[45,88186,51388],{"class":51},[45,88188,88189,88191,88193],{"class":47,"line":9847},[45,88190,51866],{"class":51},[45,88192,51881],{"class":51381},[45,88194,51388],{"class":51},[45,88196,88197],{"class":47,"line":9871},[45,88198,2483],{"emptyLinePlaceholder":133},[45,88200,88201,88203,88205],{"class":47,"line":9876},[45,88202,51866],{"class":51},[45,88204,50716],{"class":51381},[45,88206,51388],{"class":51},[10,88208,88209],{},[1545,88210],{"alt":40,"src":88211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22081,88213,88215,88216],{"id":88214},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[358,88217,88218],{},"js库lodash里面cloneDeep内部实现了深拷贝",[10,88220,88221],{},[13,88222,88223],{"href":88223,"rel":88224},"https:\u002F\u002Fwww.lodashjs.com\u002F",[17],[10,88226,88227],{},"lodash里边的方法都要加上一个下划线_",[10,88229,88230],{},"_.cloneDeep()",[35,88232,88234],{"className":50714,"code":88233,"language":50716,"meta":40,"style":40},"\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",[42,88235,88236,88246,88260,88264,88272,88286,88306,88318,88326,88330,88338,88343,88362,88370,88380,88388,88396,88408,88412,88418,88422,88426,88442,88450,88459,88467,88475,88483,88487],{"__ignoreMap":40},[45,88237,88238,88240,88242,88244],{"class":47,"line":48},[45,88239,51378],{"class":51},[45,88241,51382],{"class":51381},[45,88243,51385],{"class":2046},[45,88245,51388],{"class":51},[45,88247,88248,88250,88252,88254,88256,88258],{"class":47,"line":125},[45,88249,1117],{"class":51},[45,88251,50716],{"class":51381},[45,88253,51397],{"class":2046},[45,88255,254],{"class":51},[45,88257,51402],{"class":313},[45,88259,51388],{"class":51},[45,88261,88262],{"class":47,"line":1262},[45,88263,2483],{"emptyLinePlaceholder":133},[45,88265,88266,88268,88270],{"class":47,"line":1277},[45,88267,1117],{"class":51},[45,88269,51415],{"class":51381},[45,88271,51388],{"class":51},[45,88273,88274,88276,88278,88280,88282,88284],{"class":47,"line":1283},[45,88275,52225],{"class":51},[45,88277,51425],{"class":51381},[45,88279,51428],{"class":2046},[45,88281,254],{"class":51},[45,88283,51433],{"class":313},[45,88285,51388],{"class":51},[45,88287,88288,88290,88292,88294,88296,88298,88300,88302,88304],{"class":47,"line":1297},[45,88289,52225],{"class":51},[45,88291,51425],{"class":51381},[45,88293,15003],{"class":2046},[45,88295,254],{"class":51},[45,88297,51472],{"class":313},[45,88299,51452],{"class":2046},[45,88301,254],{"class":51},[45,88303,51479],{"class":313},[45,88305,51388],{"class":51},[45,88307,88308,88310,88312,88314,88316],{"class":47,"line":1303},[45,88309,52225],{"class":51},[45,88311,51488],{"class":51381},[45,88313,51491],{"class":51},[45,88315,51488],{"class":51381},[45,88317,51388],{"class":51},[45,88319,88320,88322,88324],{"class":47,"line":1394},[45,88321,51866],{"class":51},[45,88323,51415],{"class":51381},[45,88325,51388],{"class":51},[45,88327,88328],{"class":47,"line":1400},[45,88329,2483],{"emptyLinePlaceholder":133},[45,88331,88332,88334,88336],{"class":47,"line":1412},[45,88333,1117],{"class":51},[45,88335,51881],{"class":51381},[45,88337,51388],{"class":51},[45,88339,88340],{"class":47,"line":1695},[45,88341,88342],{"class":267},"  \u003C!-- 先引用这个库 -->\n",[45,88344,88345,88347,88349,88351,88353,88356,88358,88360],{"class":47,"line":1700},[45,88346,52225],{"class":51},[45,88348,51894],{"class":51381},[45,88350,55320],{"class":2046},[45,88352,254],{"class":51},[45,88354,88355],{"class":313},"\"lodash.min.js\"",[45,88357,55395],{"class":51},[45,88359,51894],{"class":51381},[45,88361,51388],{"class":51},[45,88363,88364,88366,88368],{"class":47,"line":1706},[45,88365,52225],{"class":51},[45,88367,51894],{"class":51381},[45,88369,51388],{"class":51},[45,88371,88372,88374,88376,88378],{"class":47,"line":1711},[45,88373,11304],{"class":93},[45,88375,70052],{"class":257},[45,88377,13647],{"class":93},[45,88379,15655],{"class":51},[45,88381,88382,88384,88386],{"class":47,"line":1725},[45,88383,71697],{"class":51},[45,88385,87891],{"class":313},[45,88387,31547],{"class":51},[45,88389,88390,88392,88394],{"class":47,"line":1730},[45,88391,71707],{"class":51},[45,88393,857],{"class":257},[45,88395,31547],{"class":51},[45,88397,88398,88400,88402,88404,88406],{"class":47,"line":1736},[45,88399,87906],{"class":51},[45,88401,87909],{"class":313},[45,88403,12518],{"class":51},[45,88405,87914],{"class":313},[45,88407,87917],{"class":51},[45,88409,88410],{"class":47,"line":1757},[45,88411,77953],{"class":51},[45,88413,88414,88416],{"class":47,"line":1762},[45,88415,87926],{"class":51},[45,88417,87929],{"class":313},[45,88419,88420],{"class":47,"line":1776},[45,88421,52479],{"class":51},[45,88423,88424],{"class":47,"line":1781},[45,88425,2270],{"class":51},[45,88427,88428,88430,88432,88434,88437,88440],{"class":47,"line":1810},[45,88429,11304],{"class":93},[45,88431,87944],{"class":257},[45,88433,13647],{"class":93},[45,88435,88436],{"class":51}," _.",[45,88438,88439],{"class":2046},"cloneDeep",[45,88441,70117],{"class":51},[45,88443,88444,88446,88448],{"class":47,"line":1815},[45,88445,73834],{"class":51},[45,88447,58328],{"class":2046},[45,88449,88136],{"class":51},[45,88451,88452,88455,88457],{"class":47,"line":1832},[45,88453,88454],{"class":51},"    o.family.baby ",[45,88456,254],{"class":93},[45,88458,88170],{"class":313},[45,88460,88461,88463,88465],{"class":47,"line":1837},[45,88462,73834],{"class":51},[45,88464,58328],{"class":2046},[45,88466,70117],{"class":51},[45,88468,88469,88471,88473],{"class":47,"line":1842},[45,88470,52498],{"class":51},[45,88472,51894],{"class":51381},[45,88474,51388],{"class":51},[45,88476,88477,88479,88481],{"class":47,"line":1847},[45,88478,51866],{"class":51},[45,88480,51881],{"class":51381},[45,88482,51388],{"class":51},[45,88484,88485],{"class":47,"line":1861},[45,88486,2483],{"emptyLinePlaceholder":133},[45,88488,88489,88491,88493],{"class":47,"line":1866},[45,88490,51866],{"class":51},[45,88492,50716],{"class":51381},[45,88494,51388],{"class":51},[10,88496,88497],{},[1545,88498],{"alt":40,"src":88499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22081,88501,88503],{"id":88502},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[35,88505,88507],{"className":50714,"code":88506,"language":50716,"meta":40,"style":40},"\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",[42,88508,88509,88519,88533,88537,88545,88559,88579,88591,88599,88603,88611,88619,88629,88637,88645,88657,88661,88667,88671,88675,88680,88685,88690,88716,88724,88733,88741,88749,88757,88761],{"__ignoreMap":40},[45,88510,88511,88513,88515,88517],{"class":47,"line":48},[45,88512,51378],{"class":51},[45,88514,51382],{"class":51381},[45,88516,51385],{"class":2046},[45,88518,51388],{"class":51},[45,88520,88521,88523,88525,88527,88529,88531],{"class":47,"line":125},[45,88522,1117],{"class":51},[45,88524,50716],{"class":51381},[45,88526,51397],{"class":2046},[45,88528,254],{"class":51},[45,88530,51402],{"class":313},[45,88532,51388],{"class":51},[45,88534,88535],{"class":47,"line":1262},[45,88536,2483],{"emptyLinePlaceholder":133},[45,88538,88539,88541,88543],{"class":47,"line":1277},[45,88540,1117],{"class":51},[45,88542,51415],{"class":51381},[45,88544,51388],{"class":51},[45,88546,88547,88549,88551,88553,88555,88557],{"class":47,"line":1283},[45,88548,52225],{"class":51},[45,88550,51425],{"class":51381},[45,88552,51428],{"class":2046},[45,88554,254],{"class":51},[45,88556,51433],{"class":313},[45,88558,51388],{"class":51},[45,88560,88561,88563,88565,88567,88569,88571,88573,88575,88577],{"class":47,"line":1297},[45,88562,52225],{"class":51},[45,88564,51425],{"class":51381},[45,88566,15003],{"class":2046},[45,88568,254],{"class":51},[45,88570,51472],{"class":313},[45,88572,51452],{"class":2046},[45,88574,254],{"class":51},[45,88576,51479],{"class":313},[45,88578,51388],{"class":51},[45,88580,88581,88583,88585,88587,88589],{"class":47,"line":1303},[45,88582,52225],{"class":51},[45,88584,51488],{"class":51381},[45,88586,51491],{"class":51},[45,88588,51488],{"class":51381},[45,88590,51388],{"class":51},[45,88592,88593,88595,88597],{"class":47,"line":1394},[45,88594,51866],{"class":51},[45,88596,51415],{"class":51381},[45,88598,51388],{"class":51},[45,88600,88601],{"class":47,"line":1400},[45,88602,2483],{"emptyLinePlaceholder":133},[45,88604,88605,88607,88609],{"class":47,"line":1412},[45,88606,1117],{"class":51},[45,88608,51881],{"class":51381},[45,88610,51388],{"class":51},[45,88612,88613,88615,88617],{"class":47,"line":1695},[45,88614,52225],{"class":51},[45,88616,51894],{"class":51381},[45,88618,51388],{"class":51},[45,88620,88621,88623,88625,88627],{"class":47,"line":1700},[45,88622,11304],{"class":93},[45,88624,70052],{"class":257},[45,88626,13647],{"class":93},[45,88628,15655],{"class":51},[45,88630,88631,88633,88635],{"class":47,"line":1706},[45,88632,71697],{"class":51},[45,88634,87891],{"class":313},[45,88636,31547],{"class":51},[45,88638,88639,88641,88643],{"class":47,"line":1711},[45,88640,71707],{"class":51},[45,88642,857],{"class":257},[45,88644,31547],{"class":51},[45,88646,88647,88649,88651,88653,88655],{"class":47,"line":1725},[45,88648,87906],{"class":51},[45,88650,87909],{"class":313},[45,88652,12518],{"class":51},[45,88654,87914],{"class":313},[45,88656,87917],{"class":51},[45,88658,88659],{"class":47,"line":1730},[45,88660,77953],{"class":51},[45,88662,88663,88665],{"class":47,"line":1736},[45,88664,87926],{"class":51},[45,88666,87929],{"class":313},[45,88668,88669],{"class":47,"line":1757},[45,88670,52479],{"class":51},[45,88672,88673],{"class":47,"line":1762},[45,88674,2270],{"class":51},[45,88676,88677],{"class":47,"line":1776},[45,88678,88679],{"class":267},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[45,88681,88682],{"class":47,"line":1781},[45,88683,88684],{"class":267},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[45,88686,88687],{"class":47,"line":1810},[45,88688,88689],{"class":267},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[45,88691,88692,88694,88696,88698,88701,88703,88706,88708,88710,88712,88714],{"class":47,"line":1815},[45,88693,11304],{"class":93},[45,88695,87944],{"class":257},[45,88697,13647],{"class":93},[45,88699,88700],{"class":257}," JSON",[45,88702,765],{"class":51},[45,88704,88705],{"class":2046},"parse",[45,88707,209],{"class":51},[45,88709,71745],{"class":257},[45,88711,765],{"class":51},[45,88713,71750],{"class":2046},[45,88715,71753],{"class":51},[45,88717,88718,88720,88722],{"class":47,"line":1832},[45,88719,73834],{"class":51},[45,88721,58328],{"class":2046},[45,88723,88136],{"class":51},[45,88725,88726,88728,88730],{"class":47,"line":1837},[45,88727,88454],{"class":51},[45,88729,254],{"class":93},[45,88731,88732],{"class":313}," '123'\n",[45,88734,88735,88737,88739],{"class":47,"line":1842},[45,88736,73834],{"class":51},[45,88738,58328],{"class":2046},[45,88740,70117],{"class":51},[45,88742,88743,88745,88747],{"class":47,"line":1847},[45,88744,52498],{"class":51},[45,88746,51894],{"class":51381},[45,88748,51388],{"class":51},[45,88750,88751,88753,88755],{"class":47,"line":1861},[45,88752,51866],{"class":51},[45,88754,51881],{"class":51381},[45,88756,51388],{"class":51},[45,88758,88759],{"class":47,"line":1866},[45,88760,2483],{"emptyLinePlaceholder":133},[45,88762,88763,88765,88767],{"class":47,"line":2660},[45,88764,51866],{"class":51},[45,88766,50716],{"class":51381},[45,88768,51388],{"class":51},[10,88770,88771],{},[1545,88772],{"alt":40,"src":88773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[30,88775,88777],{"id":88776},"_415-异常处理","4.15 异常处理",[159,88779,88780],{},[162,88781,88782],{},"throw抛异常",[10,88784,88785],{},[1545,88786],{"alt":40,"src":88787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[159,88789,88790],{"start":125},[162,88791,88792],{},"try\u002Fcatch 捕获错误信息",[10,88794,88795],{},[1545,88796],{"alt":40,"src":88797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[35,88799,88801],{"className":50714,"code":88800,"language":50716,"meta":40,"style":40},"\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",[42,88802,88803,88813,88827,88831,88839,88853,88873,88885,88893,88897,88905,88917,88925,88934,88941,88946,88965,88974,88985,88990,89000,89005,89010,89015,89032,89036,89041,89048,89060,89064,89076,89080,89084,89089,89094,89101,89109,89117,89121],{"__ignoreMap":40},[45,88804,88805,88807,88809,88811],{"class":47,"line":48},[45,88806,51378],{"class":51},[45,88808,51382],{"class":51381},[45,88810,51385],{"class":2046},[45,88812,51388],{"class":51},[45,88814,88815,88817,88819,88821,88823,88825],{"class":47,"line":125},[45,88816,1117],{"class":51},[45,88818,50716],{"class":51381},[45,88820,51397],{"class":2046},[45,88822,254],{"class":51},[45,88824,51402],{"class":313},[45,88826,51388],{"class":51},[45,88828,88829],{"class":47,"line":1262},[45,88830,2483],{"emptyLinePlaceholder":133},[45,88832,88833,88835,88837],{"class":47,"line":1277},[45,88834,1117],{"class":51},[45,88836,51415],{"class":51381},[45,88838,51388],{"class":51},[45,88840,88841,88843,88845,88847,88849,88851],{"class":47,"line":1283},[45,88842,52225],{"class":51},[45,88844,51425],{"class":51381},[45,88846,51428],{"class":2046},[45,88848,254],{"class":51},[45,88850,51433],{"class":313},[45,88852,51388],{"class":51},[45,88854,88855,88857,88859,88861,88863,88865,88867,88869,88871],{"class":47,"line":1297},[45,88856,52225],{"class":51},[45,88858,51425],{"class":51381},[45,88860,15003],{"class":2046},[45,88862,254],{"class":51},[45,88864,51472],{"class":313},[45,88866,51452],{"class":2046},[45,88868,254],{"class":51},[45,88870,51479],{"class":313},[45,88872,51388],{"class":51},[45,88874,88875,88877,88879,88881,88883],{"class":47,"line":1303},[45,88876,52225],{"class":51},[45,88878,51488],{"class":51381},[45,88880,51491],{"class":51},[45,88882,51488],{"class":51381},[45,88884,51388],{"class":51},[45,88886,88887,88889,88891],{"class":47,"line":1394},[45,88888,51866],{"class":51},[45,88890,51415],{"class":51381},[45,88892,51388],{"class":51},[45,88894,88895],{"class":47,"line":1400},[45,88896,2483],{"emptyLinePlaceholder":133},[45,88898,88899,88901,88903],{"class":47,"line":1412},[45,88900,1117],{"class":51},[45,88902,51881],{"class":51381},[45,88904,51388],{"class":51},[45,88906,88907,88909,88911,88913,88915],{"class":47,"line":1695},[45,88908,52225],{"class":51},[45,88910,10],{"class":51381},[45,88912,53575],{"class":51},[45,88914,10],{"class":51381},[45,88916,51388],{"class":51},[45,88918,88919,88921,88923],{"class":47,"line":1700},[45,88920,52225],{"class":51},[45,88922,51894],{"class":51381},[45,88924,51388],{"class":51},[45,88926,88927,88929,88932],{"class":47,"line":1706},[45,88928,70165],{"class":93},[45,88930,88931],{"class":2046}," fn",[45,88933,10936],{"class":51},[45,88935,88936,88939],{"class":47,"line":1711},[45,88937,88938],{"class":93},"      try",[45,88940,15655],{"class":51},[45,88942,88943],{"class":47,"line":1725},[45,88944,88945],{"class":267},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[45,88947,88948,88950,88952,88954,88956,88958,88960,88963],{"class":47,"line":1730},[45,88949,61351],{"class":93},[45,88951,6908],{"class":257},[45,88953,13647],{"class":93},[45,88955,54477],{"class":51},[45,88957,54480],{"class":2046},[45,88959,209],{"class":51},[45,88961,88962],{"class":313},"'.p'",[45,88964,215],{"class":51},[45,88966,88967,88970,88972],{"class":47,"line":1736},[45,88968,88969],{"class":51},"        p.style.color ",[45,88971,254],{"class":93},[45,88973,67132],{"class":313},[45,88975,88976,88979,88982],{"class":47,"line":1757},[45,88977,88978],{"class":51},"      } ",[45,88980,88981],{"class":93},"catch",[45,88983,88984],{"class":51}," (err) {\n",[45,88986,88987],{"class":47,"line":1762},[45,88988,88989],{"class":267},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[45,88991,88992,88995,88997],{"class":47,"line":1776},[45,88993,88994],{"class":51},"        console.",[45,88996,58328],{"class":2046},[45,88998,88999],{"class":51},"(err.message)\n",[45,89001,89002],{"class":47,"line":1781},[45,89003,89004],{"class":267},"        \u002F\u002F 想要中断程序，需要加return\n",[45,89006,89007],{"class":47,"line":1810},[45,89008,89009],{"class":267},"        \u002F\u002F return\n",[45,89011,89012],{"class":47,"line":1815},[45,89013,89014],{"class":267},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[45,89016,89017,89020,89022,89025,89027,89030],{"class":47,"line":1832},[45,89018,89019],{"class":93},"        throw",[45,89021,11661],{"class":93},[45,89023,89024],{"class":2046}," Error",[45,89026,209],{"class":51},[45,89028,89029],{"class":313},"'你看看，选择器错误了吧'",[45,89031,215],{"class":51},[45,89033,89034],{"class":47,"line":1837},[45,89035,52479],{"class":51},[45,89037,89038],{"class":47,"line":1842},[45,89039,89040],{"class":267},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[45,89042,89043,89046],{"class":47,"line":1847},[45,89044,89045],{"class":93},"      finally",[45,89047,15655],{"class":51},[45,89049,89050,89053,89055,89058],{"class":47,"line":1861},[45,89051,89052],{"class":2046},"        alert",[45,89054,209],{"class":51},[45,89056,89057],{"class":313},"'弹出对话框'",[45,89059,215],{"class":51},[45,89061,89062],{"class":47,"line":1866},[45,89063,52479],{"class":51},[45,89065,89066,89068,89070,89072,89074],{"class":47,"line":2660},[45,89067,58325],{"class":51},[45,89069,58328],{"class":2046},[45,89071,209],{"class":51},[45,89073,680],{"class":257},[45,89075,215],{"class":51},[45,89077,89078],{"class":47,"line":2674},[45,89079,2483],{"emptyLinePlaceholder":133},[45,89081,89082],{"class":47,"line":2682},[45,89083,2270],{"class":51},[45,89085,89086],{"class":47,"line":2687},[45,89087,89088],{"class":267},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[45,89090,89091],{"class":47,"line":2693},[45,89092,89093],{"class":267},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[45,89095,89096,89099],{"class":47,"line":2699},[45,89097,89098],{"class":2046},"    fn",[45,89100,2059],{"class":51},[45,89102,89103,89105,89107],{"class":47,"line":2704},[45,89104,52498],{"class":51},[45,89106,51894],{"class":51381},[45,89108,51388],{"class":51},[45,89110,89111,89113,89115],{"class":47,"line":8031},[45,89112,51866],{"class":51},[45,89114,51881],{"class":51381},[45,89116,51388],{"class":51},[45,89118,89119],{"class":47,"line":8055},[45,89120,2483],{"emptyLinePlaceholder":133},[45,89122,89123,89125,89127],{"class":47,"line":8060},[45,89124,51866],{"class":51},[45,89126,50716],{"class":51381},[45,89128,51388],{"class":51},[10,89130,89131],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[159,89133,89134],{"start":1262},[162,89135,89136],{},"debugger",[10,89138,89139],{},[1545,89140],{"alt":40,"src":89141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[10,89143,89144],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[30,89146,89148],{"id":89147},"_416-处理this","4.16 处理this",[176,89150,89152],{"id":89151},"_4161-this的指向","4.16.1 this的指向",[159,89154,89155],{},[162,89156,89157],{},"普通函数的this",[10,89159,89160],{},[1545,89161],{"alt":40,"src":89162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[159,89164,89165],{"start":125},[162,89166,89167],{},"箭头函数的this",[10,89169,89170],{},[1545,89171],{"alt":40,"src":89172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[10,89174,89175],{},[1545,89176],{"alt":40,"src":89177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[10,89179,89180],{},[1545,89181],{"alt":40,"src":89182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[176,89184,89186],{"id":89185},"_4162-this的改变","4.16.2 this的改变",[10,89188,89189],{},"call() apply() bind()",[159,89191,89192],{},[162,89193,89194],{},"call()",[10,89196,89197],{},[1545,89198],{"alt":40,"src":89199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[10,89201,89202],{},"两个作用：①调用函数；②改变this指向",[35,89204,89206],{"className":53148,"code":89205,"language":53150,"meta":40,"style":40},"\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",[42,89207,89208,89216,89224,89228,89233,89237,89242,89247,89252,89256,89261,89269],{"__ignoreMap":40},[45,89209,89210,89212,89214],{"class":47,"line":48},[45,89211,1117],{"class":51},[45,89213,51881],{"class":51381},[45,89215,51388],{"class":51},[45,89217,89218,89220,89222],{"class":47,"line":125},[45,89219,52225],{"class":51},[45,89221,51894],{"class":51381},[45,89223,51388],{"class":51},[45,89225,89226],{"class":47,"line":1262},[45,89227,71604],{"class":51},[45,89229,89230],{"class":47,"line":1277},[45,89231,89232],{"class":51},"      uname: 'pink'\n",[45,89234,89235],{"class":47,"line":1283},[45,89236,2270],{"class":51},[45,89238,89239],{"class":47,"line":1297},[45,89240,89241],{"class":51},"    function fn(x, y) {\n",[45,89243,89244],{"class":47,"line":1303},[45,89245,89246],{"class":51},"      console.log(this)  \u002F\u002Fwindow\n",[45,89248,89249],{"class":47,"line":1394},[45,89250,89251],{"class":51},"      console.log(x + y)\n",[45,89253,89254],{"class":47,"line":1400},[45,89255,2270],{"class":51},[45,89257,89258],{"class":47,"line":1412},[45,89259,89260],{"class":51},"    fn.call(obj, 1, 2)\n",[45,89262,89263,89265,89267],{"class":47,"line":1695},[45,89264,52498],{"class":51},[45,89266,51894],{"class":51381},[45,89268,51388],{"class":51},[45,89270,89271,89273,89275],{"class":47,"line":1700},[45,89272,51866],{"class":51},[45,89274,51881],{"class":51381},[45,89276,51388],{"class":51},[10,89278,89279],{},[1545,89280],{"alt":40,"src":89281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[159,89283,89284],{"start":125},[162,89285,89286],{},"apply()",[10,89288,89289],{},[1545,89290],{"alt":40,"src":89291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[10,89293,89202],{},[10,89295,89296],{},"call传递的是普通参数，而apply必须传递的是数组",[35,89298,89300],{"className":50714,"code":89299,"language":50716,"meta":40,"style":40},"\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",[42,89301,89302,89312,89326,89330,89338,89352,89372,89384,89392,89396,89404,89412,89422,89429,89433,89438,89454,89466,89480,89484,89489,89508,89513,89517,89522,89527,89535,89540,89562,89567,89583,89599,89611,89615,89620,89639,89647,89655,89659],{"__ignoreMap":40},[45,89303,89304,89306,89308,89310],{"class":47,"line":48},[45,89305,51378],{"class":51},[45,89307,51382],{"class":51381},[45,89309,51385],{"class":2046},[45,89311,51388],{"class":51},[45,89313,89314,89316,89318,89320,89322,89324],{"class":47,"line":125},[45,89315,1117],{"class":51},[45,89317,50716],{"class":51381},[45,89319,51397],{"class":2046},[45,89321,254],{"class":51},[45,89323,51402],{"class":313},[45,89325,51388],{"class":51},[45,89327,89328],{"class":47,"line":1262},[45,89329,2483],{"emptyLinePlaceholder":133},[45,89331,89332,89334,89336],{"class":47,"line":1277},[45,89333,1117],{"class":51},[45,89335,51415],{"class":51381},[45,89337,51388],{"class":51},[45,89339,89340,89342,89344,89346,89348,89350],{"class":47,"line":1283},[45,89341,52225],{"class":51},[45,89343,51425],{"class":51381},[45,89345,51428],{"class":2046},[45,89347,254],{"class":51},[45,89349,51433],{"class":313},[45,89351,51388],{"class":51},[45,89353,89354,89356,89358,89360,89362,89364,89366,89368,89370],{"class":47,"line":1297},[45,89355,52225],{"class":51},[45,89357,51425],{"class":51381},[45,89359,15003],{"class":2046},[45,89361,254],{"class":51},[45,89363,51472],{"class":313},[45,89365,51452],{"class":2046},[45,89367,254],{"class":51},[45,89369,51479],{"class":313},[45,89371,51388],{"class":51},[45,89373,89374,89376,89378,89380,89382],{"class":47,"line":1303},[45,89375,52225],{"class":51},[45,89377,51488],{"class":51381},[45,89379,51491],{"class":51},[45,89381,51488],{"class":51381},[45,89383,51388],{"class":51},[45,89385,89386,89388,89390],{"class":47,"line":1394},[45,89387,51866],{"class":51},[45,89389,51415],{"class":51381},[45,89391,51388],{"class":51},[45,89393,89394],{"class":47,"line":1400},[45,89395,2483],{"emptyLinePlaceholder":133},[45,89397,89398,89400,89402],{"class":47,"line":1412},[45,89399,1117],{"class":51},[45,89401,51881],{"class":51381},[45,89403,51388],{"class":51},[45,89405,89406,89408,89410],{"class":47,"line":1695},[45,89407,52225],{"class":51},[45,89409,51894],{"class":51381},[45,89411,51388],{"class":51},[45,89413,89414,89416,89418,89420],{"class":47,"line":1700},[45,89415,11304],{"class":93},[45,89417,70052],{"class":257},[45,89419,13647],{"class":93},[45,89421,15655],{"class":51},[45,89423,89424,89426],{"class":47,"line":1706},[45,89425,71707],{"class":51},[45,89427,89428],{"class":257},"18\n",[45,89430,89431],{"class":47,"line":1711},[45,89432,2270],{"class":51},[45,89434,89435],{"class":47,"line":1725},[45,89436,89437],{"class":267},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[45,89439,89440,89442,89444,89446,89448,89450,89452],{"class":47,"line":1730},[45,89441,70165],{"class":93},[45,89443,88931],{"class":2046},[45,89445,209],{"class":51},[45,89447,1027],{"class":5299},[45,89449,12518],{"class":51},[45,89451,1052],{"class":5299},[45,89453,12525],{"class":51},[45,89455,89456,89458,89460,89462,89464],{"class":47,"line":1736},[45,89457,58325],{"class":51},[45,89459,58328],{"class":2046},[45,89461,209],{"class":51},[45,89463,87074],{"class":257},[45,89465,215],{"class":51},[45,89467,89468,89470,89472,89475,89477],{"class":47,"line":1757},[45,89469,58325],{"class":51},[45,89471,58328],{"class":2046},[45,89473,89474],{"class":51},"(x ",[45,89476,689],{"class":93},[45,89478,89479],{"class":51}," y)\n",[45,89481,89482],{"class":47,"line":1762},[45,89483,2270],{"class":51},[45,89485,89486],{"class":47,"line":1776},[45,89487,89488],{"class":267},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[45,89490,89491,89494,89497,89500,89502,89504,89506],{"class":47,"line":1781},[45,89492,89493],{"class":51},"    fn.",[45,89495,89496],{"class":2046},"apply",[45,89498,89499],{"class":51},"(obj, [",[45,89501,426],{"class":257},[45,89503,12518],{"class":51},[45,89505,286],{"class":257},[45,89507,4740],{"class":51},[45,89509,89510],{"class":47,"line":1810},[45,89511,89512],{"class":267},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[45,89514,89515],{"class":47,"line":1815},[45,89516,2483],{"emptyLinePlaceholder":133},[45,89518,89519],{"class":47,"line":1832},[45,89520,89521],{"class":267},"    \u002F\u002F 使用场景：求数组最大值\n",[45,89523,89524],{"class":47,"line":1837},[45,89525,89526],{"class":267},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[45,89528,89529,89532],{"class":47,"line":1842},[45,89530,89531],{"class":267},"    \u002F\u002F console.log(max)",[45,89533,89534],{"class":267},"   \u002F\u002F3\n",[45,89536,89537],{"class":47,"line":1847},[45,89538,89539],{"class":267},"    \u002F\u002F 指向空或者Math都是可以的\n",[45,89541,89542,89544,89546,89548,89550,89552,89554,89556,89558,89560],{"class":47,"line":1861},[45,89543,11304],{"class":93},[45,89545,57776],{"class":257},[45,89547,13647],{"class":93},[45,89549,52307],{"class":51},[45,89551,519],{"class":257},[45,89553,12518],{"class":51},[45,89555,712],{"class":257},[45,89557,12518],{"class":51},[45,89559,742],{"class":257},[45,89561,33327],{"class":51},[45,89563,89564],{"class":47,"line":1866},[45,89565,89566],{"class":267},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[45,89568,89569,89571,89573,89575,89578,89580],{"class":47,"line":2660},[45,89570,11304],{"class":93},[45,89572,6034],{"class":257},[45,89574,13647],{"class":93},[45,89576,89577],{"class":51}," Math.max.",[45,89579,89496],{"class":2046},[45,89581,89582],{"class":51},"(Math, arr)\n",[45,89584,89585,89587,89590,89592,89595,89597],{"class":47,"line":2674},[45,89586,11304],{"class":93},[45,89588,89589],{"class":257}," min",[45,89591,13647],{"class":93},[45,89593,89594],{"class":51}," Math.min.",[45,89596,89496],{"class":2046},[45,89598,89582],{"class":51},[45,89600,89601,89603,89605,89608],{"class":47,"line":2682},[45,89602,73834],{"class":51},[45,89604,58328],{"class":2046},[45,89606,89607],{"class":51},"(max, min)     ",[45,89609,89610],{"class":267},"\u002F\u002F100,4\n",[45,89612,89613],{"class":47,"line":2687},[45,89614,2483],{"emptyLinePlaceholder":133},[45,89616,89617],{"class":47,"line":2693},[45,89618,89619],{"class":267},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[45,89621,89622,89624,89626,89629,89631,89633,89636],{"class":47,"line":2699},[45,89623,73834],{"class":51},[45,89625,58328],{"class":2046},[45,89627,89628],{"class":51},"(Max.",[45,89630,6098],{"class":2046},[45,89632,209],{"class":51},[45,89634,89635],{"class":93},"...",[45,89637,89638],{"class":51},"arr))\n",[45,89640,89641,89643,89645],{"class":47,"line":2704},[45,89642,52498],{"class":51},[45,89644,51894],{"class":51381},[45,89646,51388],{"class":51},[45,89648,89649,89651,89653],{"class":47,"line":8031},[45,89650,51866],{"class":51},[45,89652,51881],{"class":51381},[45,89654,51388],{"class":51},[45,89656,89657],{"class":47,"line":8055},[45,89658,2483],{"emptyLinePlaceholder":133},[45,89660,89661,89663,89665],{"class":47,"line":8060},[45,89662,51866],{"class":51},[45,89664,50716],{"class":51381},[45,89666,51388],{"class":51},[10,89668,89669],{},[1545,89670],{"alt":40,"src":89671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[159,89673,89674],{"start":1262},[162,89675,89676],{},"bind()",[10,89678,89679],{},[1545,89680],{"alt":40,"src":89681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[10,89683,89684],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[10,89686,89687],{},"bind的语法跟call很相似",[35,89689,89691],{"className":53148,"code":89690,"language":53150,"meta":40,"style":40},"\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",[42,89692,89693,89701,89709,89713,89718,89722,89726,89731,89735,89740,89745,89750,89755,89760,89765,89770,89774,89782],{"__ignoreMap":40},[45,89694,89695,89697,89699],{"class":47,"line":48},[45,89696,1117],{"class":51},[45,89698,51881],{"class":51381},[45,89700,51388],{"class":51},[45,89702,89703,89705,89707],{"class":47,"line":125},[45,89704,52225],{"class":51},[45,89706,51894],{"class":51381},[45,89708,51388],{"class":51},[45,89710,89711],{"class":47,"line":1262},[45,89712,71604],{"class":51},[45,89714,89715],{"class":47,"line":1277},[45,89716,89717],{"class":51},"      age: 18\n",[45,89719,89720],{"class":47,"line":1283},[45,89721,2270],{"class":51},[45,89723,89724],{"class":47,"line":1297},[45,89725,77224],{"class":51},[45,89727,89728],{"class":47,"line":1303},[45,89729,89730],{"class":51},"      console.log(this)\n",[45,89732,89733],{"class":47,"line":1394},[45,89734,2270],{"class":51},[45,89736,89737],{"class":47,"line":1400},[45,89738,89739],{"class":51},"    \u002F\u002F 1.bind 不会调用函数\n",[45,89741,89742],{"class":47,"line":1412},[45,89743,89744],{"class":51},"    \u002F\u002F 2.bind能改变this的指向\n",[45,89746,89747],{"class":47,"line":1695},[45,89748,89749],{"class":51},"    fn.bind()\n",[45,89751,89752],{"class":47,"line":1700},[45,89753,89754],{"class":51},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[45,89756,89757],{"class":47,"line":1706},[45,89758,89759],{"class":51},"    const fun = fn.bind(obj)\n",[45,89761,89762],{"class":47,"line":1711},[45,89763,89764],{"class":51},"    \u002F\u002F console.log(fun)\n",[45,89766,89767],{"class":47,"line":1725},[45,89768,89769],{"class":51},"    \u002F\u002F 调用,查看this的指向\n",[45,89771,89772],{"class":47,"line":1730},[45,89773,52732],{"class":51},[45,89775,89776,89778,89780],{"class":47,"line":1736},[45,89777,52498],{"class":51},[45,89779,51894],{"class":51381},[45,89781,51388],{"class":51},[45,89783,89784,89786,89788],{"class":47,"line":1757},[45,89785,51866],{"class":51},[45,89787,51881],{"class":51381},[45,89789,51388],{"class":51},[10,89791,89792],{},[1545,89793],{"alt":40,"src":89794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[159,89796,89797],{"start":1277},[162,89798,89799],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[35,89801,89803],{"className":53148,"code":89802,"language":53150,"meta":40,"style":40},"\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",[42,89804,89805,89813,89826,89834,89839,89843,89848,89853,89858,89863,89868,89873,89878,89883,89887,89895],{"__ignoreMap":40},[45,89806,89807,89809,89811],{"class":47,"line":48},[45,89808,1117],{"class":51},[45,89810,51881],{"class":51381},[45,89812,51388],{"class":51},[45,89814,89815,89817,89819,89822,89824],{"class":47,"line":125},[45,89816,52225],{"class":51},[45,89818,53968],{"class":51381},[45,89820,89821],{"class":51},">禁用\u003C\u002F",[45,89823,53968],{"class":51381},[45,89825,51388],{"class":51},[45,89827,89828,89830,89832],{"class":47,"line":1262},[45,89829,52225],{"class":51},[45,89831,51894],{"class":51381},[45,89833,51388],{"class":51},[45,89835,89836],{"class":47,"line":1277},[45,89837,89838],{"class":51},"    const btn = document.querySelector('button')\n",[45,89840,89841],{"class":47,"line":1283},[45,89842,59097],{"class":51},[45,89844,89845],{"class":47,"line":1297},[45,89846,89847],{"class":51},"      this.disabled = true\n",[45,89849,89850],{"class":47,"line":1303},[45,89851,89852],{"class":51},"      \u002F\u002F 定时器是window进行调用的\n",[45,89854,89855],{"class":47,"line":1394},[45,89856,89857],{"class":51},"      setTimeout(function () {\n",[45,89859,89860],{"class":47,"line":1400},[45,89861,89862],{"class":51},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[45,89864,89865],{"class":47,"line":1412},[45,89866,89867],{"class":51},"        this.disabled = false\n",[45,89869,89870],{"class":47,"line":1695},[45,89871,89872],{"class":51},"      }.bind(this), 2000)\n",[45,89874,89875],{"class":47,"line":1700},[45,89876,89877],{"class":51},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[45,89879,89880],{"class":47,"line":1706},[45,89881,89882],{"class":51},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[45,89884,89885],{"class":47,"line":1711},[45,89886,33542],{"class":51},[45,89888,89889,89891,89893],{"class":47,"line":1725},[45,89890,52498],{"class":51},[45,89892,51894],{"class":51381},[45,89894,51388],{"class":51},[45,89896,89897,89899,89901],{"class":47,"line":1730},[45,89898,51866],{"class":51},[45,89900,51881],{"class":51381},[45,89902,51388],{"class":51},[159,89904,89905],{"start":1283},[162,89906,22036],{},[10,89908,89909],{},[1545,89910],{"alt":40,"src":89911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[30,89913,89915],{"id":89914},"_417-性能优化","4.17 性能优化",[176,89917,89919],{"id":89918},"_4171-防抖","4.17.1 防抖",[10,89921,89922],{},[1545,89923],{"alt":40,"src":89924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[10,89926,89927],{},[358,89928,89929],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[10,89931,89932],{},"防抖实现方式：",[1214,89934,89935],{},[162,89936,89937],{},"lodash 提供了防抖处理",[10,89939,89940],{},"_.debounce(func,[wait=0],[options={}])",[10,89942,89943],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[35,89945,89947],{"className":50714,"code":89946,"language":50716,"meta":40,"style":40},"\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",[42,89948,89949,89959,89973,89977,89985,89999,90019,90031,90039,90045,90055,90067,90079,90090,90102,90112,90122,90135,90139,90147,90155,90159,90167,90185,90203,90211,90230,90240,90249,90260,90265,90269,90274,90279,90284,90309,90317,90325,90329],{"__ignoreMap":40},[45,89950,89951,89953,89955,89957],{"class":47,"line":48},[45,89952,51378],{"class":51},[45,89954,51382],{"class":51381},[45,89956,51385],{"class":2046},[45,89958,51388],{"class":51},[45,89960,89961,89963,89965,89967,89969,89971],{"class":47,"line":125},[45,89962,1117],{"class":51},[45,89964,50716],{"class":51381},[45,89966,51397],{"class":2046},[45,89968,254],{"class":51},[45,89970,51402],{"class":313},[45,89972,51388],{"class":51},[45,89974,89975],{"class":47,"line":1262},[45,89976,2483],{"emptyLinePlaceholder":133},[45,89978,89979,89981,89983],{"class":47,"line":1277},[45,89980,1117],{"class":51},[45,89982,51415],{"class":51381},[45,89984,51388],{"class":51},[45,89986,89987,89989,89991,89993,89995,89997],{"class":47,"line":1283},[45,89988,52225],{"class":51},[45,89990,51425],{"class":51381},[45,89992,51428],{"class":2046},[45,89994,254],{"class":51},[45,89996,51433],{"class":313},[45,89998,51388],{"class":51},[45,90000,90001,90003,90005,90007,90009,90011,90013,90015,90017],{"class":47,"line":1297},[45,90002,52225],{"class":51},[45,90004,51425],{"class":51381},[45,90006,15003],{"class":2046},[45,90008,254],{"class":51},[45,90010,51472],{"class":313},[45,90012,51452],{"class":2046},[45,90014,254],{"class":51},[45,90016,51479],{"class":313},[45,90018,51388],{"class":51},[45,90020,90021,90023,90025,90027,90029],{"class":47,"line":1303},[45,90022,52225],{"class":51},[45,90024,51488],{"class":51381},[45,90026,51491],{"class":51},[45,90028,51488],{"class":51381},[45,90030,51388],{"class":51},[45,90032,90033,90035,90037],{"class":47,"line":1394},[45,90034,52225],{"class":51},[45,90036,121],{"class":51381},[45,90038,51388],{"class":51},[45,90040,90041,90043],{"class":47,"line":1400},[45,90042,54833],{"class":2046},[45,90044,15655],{"class":51},[45,90046,90047,90049,90051,90053],{"class":47,"line":1412},[45,90048,72677],{"class":257},[45,90050,51518],{"class":51},[45,90052,60586],{"class":257},[45,90054,1373],{"class":51},[45,90056,90057,90059,90061,90063,90065],{"class":47,"line":1695},[45,90058,54852],{"class":257},[45,90060,51518],{"class":51},[45,90062,1805],{"class":257},[45,90064,51573],{"class":93},[45,90066,1373],{"class":51},[45,90068,90069,90071,90073,90075,90077],{"class":47,"line":1700},[45,90070,54866],{"class":257},[45,90072,51518],{"class":51},[45,90074,1805],{"class":257},[45,90076,51573],{"class":93},[45,90078,1373],{"class":51},[45,90080,90081,90083,90085,90088],{"class":47,"line":1706},[45,90082,54965],{"class":257},[45,90084,51518],{"class":51},[45,90086,90087],{"class":257},"gray",[45,90089,1373],{"class":51},[45,90091,90092,90094,90096,90098,90100],{"class":47,"line":1711},[45,90093,55003],{"class":257},[45,90095,51518],{"class":51},[45,90097,1032],{"class":257},[45,90099,51573],{"class":93},[45,90101,1373],{"class":51},[45,90103,90104,90106,90108,90110],{"class":47,"line":1725},[45,90105,57497],{"class":257},[45,90107,51518],{"class":51},[45,90109,60923],{"class":257},[45,90111,1373],{"class":51},[45,90113,90114,90116,90118,90120],{"class":47,"line":1730},[45,90115,57367],{"class":257},[45,90117,51518],{"class":51},[45,90119,51673],{"class":257},[45,90121,1373],{"class":51},[45,90123,90124,90127,90129,90131,90133],{"class":47,"line":1736},[45,90125,90126],{"class":257},"      padding-top",[45,90128,51518],{"class":51},[45,90130,527],{"class":257},[45,90132,51573],{"class":93},[45,90134,1373],{"class":51},[45,90136,90137],{"class":47,"line":1757},[45,90138,2270],{"class":51},[45,90140,90141,90143,90145],{"class":47,"line":1762},[45,90142,52498],{"class":51},[45,90144,121],{"class":51381},[45,90146,51388],{"class":51},[45,90148,90149,90151,90153],{"class":47,"line":1776},[45,90150,51866],{"class":51},[45,90152,51415],{"class":51381},[45,90154,51388],{"class":51},[45,90156,90157],{"class":47,"line":1781},[45,90158,2483],{"emptyLinePlaceholder":133},[45,90160,90161,90163,90165],{"class":47,"line":1810},[45,90162,1117],{"class":51},[45,90164,51881],{"class":51381},[45,90166,51388],{"class":51},[45,90168,90169,90171,90173,90175,90177,90179,90181,90183],{"class":47,"line":1815},[45,90170,52225],{"class":51},[45,90172,51692],{"class":51381},[45,90174,53567],{"class":2046},[45,90176,254],{"class":51},[45,90178,53572],{"class":313},[45,90180,55395],{"class":51},[45,90182,51692],{"class":51381},[45,90184,51388],{"class":51},[45,90186,90187,90189,90191,90193,90195,90197,90199,90201],{"class":47,"line":1832},[45,90188,52225],{"class":51},[45,90190,51894],{"class":51381},[45,90192,55320],{"class":2046},[45,90194,254],{"class":51},[45,90196,88355],{"class":313},[45,90198,55395],{"class":51},[45,90200,51894],{"class":51381},[45,90202,51388],{"class":51},[45,90204,90205,90207,90209],{"class":47,"line":1837},[45,90206,52225],{"class":51},[45,90208,51894],{"class":51381},[45,90210,51388],{"class":51},[45,90212,90213,90215,90217,90219,90221,90223,90225,90228],{"class":47,"line":1842},[45,90214,11304],{"class":93},[45,90216,87014],{"class":257},[45,90218,13647],{"class":93},[45,90220,54477],{"class":51},[45,90222,54480],{"class":2046},[45,90224,209],{"class":51},[45,90226,90227],{"class":313},"'.box'",[45,90229,215],{"class":51},[45,90231,90232,90234,90236,90238],{"class":47,"line":1847},[45,90233,52300],{"class":93},[45,90235,9521],{"class":51},[45,90237,254],{"class":93},[45,90239,47414],{"class":257},[45,90241,90242,90244,90247],{"class":47,"line":1861},[45,90243,70165],{"class":93},[45,90245,90246],{"class":2046}," mouseMove",[45,90248,10936],{"class":51},[45,90250,90251,90254,90256,90258],{"class":47,"line":1866},[45,90252,90253],{"class":51},"      box.innerHTML ",[45,90255,254],{"class":93},[45,90257,3115],{"class":51},[45,90259,2785],{"class":93},[45,90261,90262],{"class":47,"line":2660},[45,90263,90264],{"class":267},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[45,90266,90267],{"class":47,"line":2674},[45,90268,2270],{"class":51},[45,90270,90271],{"class":47,"line":2682},[45,90272,90273],{"class":267},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[45,90275,90276],{"class":47,"line":2687},[45,90277,90278],{"class":267},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[45,90280,90281],{"class":47,"line":2693},[45,90282,90283],{"class":267},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[45,90285,90286,90289,90291,90293,90296,90299,90302,90305,90307],{"class":47,"line":2699},[45,90287,90288],{"class":51},"    box.",[45,90290,57894],{"class":2046},[45,90292,209],{"class":51},[45,90294,90295],{"class":313},"'mousemove'",[45,90297,90298],{"class":51},", _.",[45,90300,90301],{"class":2046},"debounce",[45,90303,90304],{"class":51},"(mouseMove, ",[45,90306,65155],{"class":257},[45,90308,30578],{"class":51},[45,90310,90311,90313,90315],{"class":47,"line":2704},[45,90312,52498],{"class":51},[45,90314,51894],{"class":51381},[45,90316,51388],{"class":51},[45,90318,90319,90321,90323],{"class":47,"line":8031},[45,90320,51866],{"class":51},[45,90322,51881],{"class":51381},[45,90324,51388],{"class":51},[45,90326,90327],{"class":47,"line":8055},[45,90328,2483],{"emptyLinePlaceholder":133},[45,90330,90331,90333,90335],{"class":47,"line":8060},[45,90332,51866],{"class":51},[45,90334,50716],{"class":51381},[45,90336,51388],{"class":51},[1214,90338,90339],{},[162,90340,90341],{},"手写一个防抖函数来处理",[10,90343,90344],{},"防抖的核心就是利用定时器来实现的：",[10,90346,90347],{},"①声明一个定时器变量",[10,90349,90350],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[10,90352,90353],{},"③如果没有定时器则开启定时器，记得存到变量里面",[35,90355,90357],{"className":50714,"code":90356,"language":50716,"meta":40,"style":40},"\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",[42,90358,90359,90369,90383,90387,90395,90409,90429,90441,90449,90455,90465,90477,90489,90499,90511,90521,90531,90543,90547,90555,90563,90567,90575,90593,90611,90619,90637,90647,90655,90665,90669,90673,90677,90682,90687,90692,90697,90702,90707,90725,90732,90737,90745,90750,90763,90779,90789,90794,90798,90802,90822,90826,90831,90836,90841,90846,90854,90862,90866],{"__ignoreMap":40},[45,90360,90361,90363,90365,90367],{"class":47,"line":48},[45,90362,51378],{"class":51},[45,90364,51382],{"class":51381},[45,90366,51385],{"class":2046},[45,90368,51388],{"class":51},[45,90370,90371,90373,90375,90377,90379,90381],{"class":47,"line":125},[45,90372,1117],{"class":51},[45,90374,50716],{"class":51381},[45,90376,51397],{"class":2046},[45,90378,254],{"class":51},[45,90380,51402],{"class":313},[45,90382,51388],{"class":51},[45,90384,90385],{"class":47,"line":1262},[45,90386,2483],{"emptyLinePlaceholder":133},[45,90388,90389,90391,90393],{"class":47,"line":1277},[45,90390,1117],{"class":51},[45,90392,51415],{"class":51381},[45,90394,51388],{"class":51},[45,90396,90397,90399,90401,90403,90405,90407],{"class":47,"line":1283},[45,90398,52225],{"class":51},[45,90400,51425],{"class":51381},[45,90402,51428],{"class":2046},[45,90404,254],{"class":51},[45,90406,51433],{"class":313},[45,90408,51388],{"class":51},[45,90410,90411,90413,90415,90417,90419,90421,90423,90425,90427],{"class":47,"line":1297},[45,90412,52225],{"class":51},[45,90414,51425],{"class":51381},[45,90416,15003],{"class":2046},[45,90418,254],{"class":51},[45,90420,51472],{"class":313},[45,90422,51452],{"class":2046},[45,90424,254],{"class":51},[45,90426,51479],{"class":313},[45,90428,51388],{"class":51},[45,90430,90431,90433,90435,90437,90439],{"class":47,"line":1303},[45,90432,52225],{"class":51},[45,90434,51488],{"class":51381},[45,90436,51491],{"class":51},[45,90438,51488],{"class":51381},[45,90440,51388],{"class":51},[45,90442,90443,90445,90447],{"class":47,"line":1394},[45,90444,52225],{"class":51},[45,90446,121],{"class":51381},[45,90448,51388],{"class":51},[45,90450,90451,90453],{"class":47,"line":1400},[45,90452,54833],{"class":2046},[45,90454,15655],{"class":51},[45,90456,90457,90459,90461,90463],{"class":47,"line":1412},[45,90458,72677],{"class":257},[45,90460,51518],{"class":51},[45,90462,60586],{"class":257},[45,90464,1373],{"class":51},[45,90466,90467,90469,90471,90473,90475],{"class":47,"line":1695},[45,90468,54852],{"class":257},[45,90470,51518],{"class":51},[45,90472,1805],{"class":257},[45,90474,51573],{"class":93},[45,90476,1373],{"class":51},[45,90478,90479,90481,90483,90485,90487],{"class":47,"line":1700},[45,90480,54866],{"class":257},[45,90482,51518],{"class":51},[45,90484,1805],{"class":257},[45,90486,51573],{"class":93},[45,90488,1373],{"class":51},[45,90490,90491,90493,90495,90497],{"class":47,"line":1706},[45,90492,54965],{"class":257},[45,90494,51518],{"class":51},[45,90496,90087],{"class":257},[45,90498,1373],{"class":51},[45,90500,90501,90503,90505,90507,90509],{"class":47,"line":1711},[45,90502,55003],{"class":257},[45,90504,51518],{"class":51},[45,90506,1032],{"class":257},[45,90508,51573],{"class":93},[45,90510,1373],{"class":51},[45,90512,90513,90515,90517,90519],{"class":47,"line":1725},[45,90514,57497],{"class":257},[45,90516,51518],{"class":51},[45,90518,60923],{"class":257},[45,90520,1373],{"class":51},[45,90522,90523,90525,90527,90529],{"class":47,"line":1730},[45,90524,57367],{"class":257},[45,90526,51518],{"class":51},[45,90528,51673],{"class":257},[45,90530,1373],{"class":51},[45,90532,90533,90535,90537,90539,90541],{"class":47,"line":1736},[45,90534,90126],{"class":257},[45,90536,51518],{"class":51},[45,90538,527],{"class":257},[45,90540,51573],{"class":93},[45,90542,1373],{"class":51},[45,90544,90545],{"class":47,"line":1757},[45,90546,2270],{"class":51},[45,90548,90549,90551,90553],{"class":47,"line":1762},[45,90550,52498],{"class":51},[45,90552,121],{"class":51381},[45,90554,51388],{"class":51},[45,90556,90557,90559,90561],{"class":47,"line":1776},[45,90558,51866],{"class":51},[45,90560,51415],{"class":51381},[45,90562,51388],{"class":51},[45,90564,90565],{"class":47,"line":1781},[45,90566,2483],{"emptyLinePlaceholder":133},[45,90568,90569,90571,90573],{"class":47,"line":1810},[45,90570,1117],{"class":51},[45,90572,51881],{"class":51381},[45,90574,51388],{"class":51},[45,90576,90577,90579,90581,90583,90585,90587,90589,90591],{"class":47,"line":1815},[45,90578,52225],{"class":51},[45,90580,51692],{"class":51381},[45,90582,53567],{"class":2046},[45,90584,254],{"class":51},[45,90586,53572],{"class":313},[45,90588,55395],{"class":51},[45,90590,51692],{"class":51381},[45,90592,51388],{"class":51},[45,90594,90595,90597,90599,90601,90603,90605,90607,90609],{"class":47,"line":1832},[45,90596,52225],{"class":51},[45,90598,51894],{"class":51381},[45,90600,55320],{"class":2046},[45,90602,254],{"class":51},[45,90604,88355],{"class":313},[45,90606,55395],{"class":51},[45,90608,51894],{"class":51381},[45,90610,51388],{"class":51},[45,90612,90613,90615,90617],{"class":47,"line":1837},[45,90614,52225],{"class":51},[45,90616,51894],{"class":51381},[45,90618,51388],{"class":51},[45,90620,90621,90623,90625,90627,90629,90631,90633,90635],{"class":47,"line":1842},[45,90622,11304],{"class":93},[45,90624,87014],{"class":257},[45,90626,13647],{"class":93},[45,90628,54477],{"class":51},[45,90630,54480],{"class":2046},[45,90632,209],{"class":51},[45,90634,90227],{"class":313},[45,90636,215],{"class":51},[45,90638,90639,90641,90643,90645],{"class":47,"line":1847},[45,90640,52300],{"class":93},[45,90642,9521],{"class":51},[45,90644,254],{"class":93},[45,90646,47414],{"class":257},[45,90648,90649,90651,90653],{"class":47,"line":1861},[45,90650,70165],{"class":93},[45,90652,90246],{"class":2046},[45,90654,10936],{"class":51},[45,90656,90657,90659,90661,90663],{"class":47,"line":1866},[45,90658,90253],{"class":51},[45,90660,254],{"class":93},[45,90662,3115],{"class":51},[45,90664,2785],{"class":93},[45,90666,90667],{"class":47,"line":2660},[45,90668,90264],{"class":267},[45,90670,90671],{"class":47,"line":2674},[45,90672,2270],{"class":51},[45,90674,90675],{"class":47,"line":2682},[45,90676,90273],{"class":267},[45,90678,90679],{"class":47,"line":2687},[45,90680,90681],{"class":267},"    \u002F\u002F 手写防抖函数\n",[45,90683,90684],{"class":47,"line":2693},[45,90685,90686],{"class":267},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[45,90688,90689],{"class":47,"line":2699},[45,90690,90691],{"class":267},"    \u002F\u002F 1.声明定时器变量\n",[45,90693,90694],{"class":47,"line":2704},[45,90695,90696],{"class":267},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[45,90698,90699],{"class":47,"line":8031},[45,90700,90701],{"class":267},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[45,90703,90704],{"class":47,"line":8055},[45,90705,90706],{"class":267},"    \u002F\u002F 4.定时器里面写函数调用\n",[45,90708,90709,90711,90714,90716,90719,90721,90723],{"class":47,"line":8060},[45,90710,70165],{"class":93},[45,90712,90713],{"class":2046}," debounce",[45,90715,209],{"class":51},[45,90717,90718],{"class":5299},"fn",[45,90720,12518],{"class":51},[45,90722,927],{"class":5299},[45,90724,12525],{"class":51},[45,90726,90727,90729],{"class":47,"line":8066},[45,90728,79853],{"class":93},[45,90730,90731],{"class":51}," timer\n",[45,90733,90734],{"class":47,"line":8093},[45,90735,90736],{"class":267},"      \u002F\u002F return 返回一个匿名函数\n",[45,90738,90739,90741,90743],{"class":47,"line":8098},[45,90740,74063],{"class":93},[45,90742,58999],{"class":93},[45,90744,54533],{"class":51},[45,90746,90747],{"class":47,"line":8104},[45,90748,90749],{"class":267},"        \u002F\u002F 这里边写第二三四步\n",[45,90751,90752,90754,90757,90760],{"class":47,"line":8116},[45,90753,2580],{"class":93},[45,90755,90756],{"class":51}," (timer) ",[45,90758,90759],{"class":2046},"clearTimeout",[45,90761,90762],{"class":51},"(timer)\n",[45,90764,90765,90768,90770,90773,90775,90777],{"class":47,"line":8128},[45,90766,90767],{"class":51},"        timer ",[45,90769,254],{"class":93},[45,90771,90772],{"class":2046}," setTimeout",[45,90774,209],{"class":51},[45,90776,54530],{"class":93},[45,90778,54533],{"class":51},[45,90780,90781,90784,90786],{"class":47,"line":8140},[45,90782,90783],{"class":2046},"          fn",[45,90785,13133],{"class":51},[45,90787,90788],{"class":267},"\u002F\u002F加小括号调用fn }, t)\n",[45,90790,90791],{"class":47,"line":9799},[45,90792,90793],{"class":51},"        }, t)\n",[45,90795,90796],{"class":47,"line":9824},[45,90797,52479],{"class":51},[45,90799,90800],{"class":47,"line":9847},[45,90801,2270],{"class":51},[45,90803,90804,90806,90808,90810,90812,90814,90816,90818,90820],{"class":47,"line":9871},[45,90805,90288],{"class":51},[45,90807,57894],{"class":2046},[45,90809,209],{"class":51},[45,90811,90295],{"class":313},[45,90813,12518],{"class":51},[45,90815,90301],{"class":2046},[45,90817,90304],{"class":51},[45,90819,65155],{"class":257},[45,90821,30578],{"class":51},[45,90823,90824],{"class":47,"line":9876},[45,90825,2483],{"emptyLinePlaceholder":133},[45,90827,90828],{"class":47,"line":9881},[45,90829,90830],{"class":267},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[45,90832,90833],{"class":47,"line":9886},[45,90834,90835],{"class":267},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[45,90837,90838],{"class":47,"line":9895},[45,90839,90840],{"class":267},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[45,90842,90843],{"class":47,"line":9900},[45,90844,90845],{"class":267},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[45,90847,90848,90850,90852],{"class":47,"line":9906},[45,90849,52498],{"class":51},[45,90851,51894],{"class":51381},[45,90853,51388],{"class":51},[45,90855,90856,90858,90860],{"class":47,"line":9927},[45,90857,51866],{"class":51},[45,90859,51881],{"class":51381},[45,90861,51388],{"class":51},[45,90863,90864],{"class":47,"line":9933},[45,90865,2483],{"emptyLinePlaceholder":133},[45,90867,90868,90870,90872],{"class":47,"line":9947},[45,90869,51866],{"class":51},[45,90871,50716],{"class":51381},[45,90873,51388],{"class":51},[176,90875,90877],{"id":90876},"_4172-节流","4.17.2 节流",[10,90879,90880],{},[1545,90881],{"alt":40,"src":90882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[10,90884,90885],{},[1545,90886],{"alt":40,"src":90887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[10,90889,90890],{},[358,90891,90892],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[10,90894,90895],{},"实现方式：",[1214,90897,90898],{},[162,90899,90900],{},"lodash 提供的节流函数来处理",[10,90902,90903],{},"_.throttle(func,[wait=0],[options=])",[10,90905,90906],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[35,90908,90910],{"className":50714,"code":90909,"language":50716,"meta":40,"style":40},"\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",[42,90911,90912,90922,90936,90940,90948,90962,90982,90994,91002,91008,91018,91030,91042,91052,91064,91074,91084,91096,91100,91108,91116,91120,91128,91146,91164,91172,91190,91200,91208,91218,91222,91226,91230,91235,91240,91261,91269,91277,91281],{"__ignoreMap":40},[45,90913,90914,90916,90918,90920],{"class":47,"line":48},[45,90915,51378],{"class":51},[45,90917,51382],{"class":51381},[45,90919,51385],{"class":2046},[45,90921,51388],{"class":51},[45,90923,90924,90926,90928,90930,90932,90934],{"class":47,"line":125},[45,90925,1117],{"class":51},[45,90927,50716],{"class":51381},[45,90929,51397],{"class":2046},[45,90931,254],{"class":51},[45,90933,51402],{"class":313},[45,90935,51388],{"class":51},[45,90937,90938],{"class":47,"line":1262},[45,90939,2483],{"emptyLinePlaceholder":133},[45,90941,90942,90944,90946],{"class":47,"line":1277},[45,90943,1117],{"class":51},[45,90945,51415],{"class":51381},[45,90947,51388],{"class":51},[45,90949,90950,90952,90954,90956,90958,90960],{"class":47,"line":1283},[45,90951,52225],{"class":51},[45,90953,51425],{"class":51381},[45,90955,51428],{"class":2046},[45,90957,254],{"class":51},[45,90959,51433],{"class":313},[45,90961,51388],{"class":51},[45,90963,90964,90966,90968,90970,90972,90974,90976,90978,90980],{"class":47,"line":1297},[45,90965,52225],{"class":51},[45,90967,51425],{"class":51381},[45,90969,15003],{"class":2046},[45,90971,254],{"class":51},[45,90973,51472],{"class":313},[45,90975,51452],{"class":2046},[45,90977,254],{"class":51},[45,90979,51479],{"class":313},[45,90981,51388],{"class":51},[45,90983,90984,90986,90988,90990,90992],{"class":47,"line":1303},[45,90985,52225],{"class":51},[45,90987,51488],{"class":51381},[45,90989,51491],{"class":51},[45,90991,51488],{"class":51381},[45,90993,51388],{"class":51},[45,90995,90996,90998,91000],{"class":47,"line":1394},[45,90997,52225],{"class":51},[45,90999,121],{"class":51381},[45,91001,51388],{"class":51},[45,91003,91004,91006],{"class":47,"line":1400},[45,91005,54833],{"class":2046},[45,91007,15655],{"class":51},[45,91009,91010,91012,91014,91016],{"class":47,"line":1412},[45,91011,72677],{"class":257},[45,91013,51518],{"class":51},[45,91015,60586],{"class":257},[45,91017,1373],{"class":51},[45,91019,91020,91022,91024,91026,91028],{"class":47,"line":1695},[45,91021,54852],{"class":257},[45,91023,51518],{"class":51},[45,91025,1805],{"class":257},[45,91027,51573],{"class":93},[45,91029,1373],{"class":51},[45,91031,91032,91034,91036,91038,91040],{"class":47,"line":1700},[45,91033,54866],{"class":257},[45,91035,51518],{"class":51},[45,91037,1805],{"class":257},[45,91039,51573],{"class":93},[45,91041,1373],{"class":51},[45,91043,91044,91046,91048,91050],{"class":47,"line":1706},[45,91045,54965],{"class":257},[45,91047,51518],{"class":51},[45,91049,90087],{"class":257},[45,91051,1373],{"class":51},[45,91053,91054,91056,91058,91060,91062],{"class":47,"line":1711},[45,91055,55003],{"class":257},[45,91057,51518],{"class":51},[45,91059,1032],{"class":257},[45,91061,51573],{"class":93},[45,91063,1373],{"class":51},[45,91065,91066,91068,91070,91072],{"class":47,"line":1725},[45,91067,57497],{"class":257},[45,91069,51518],{"class":51},[45,91071,60923],{"class":257},[45,91073,1373],{"class":51},[45,91075,91076,91078,91080,91082],{"class":47,"line":1730},[45,91077,57367],{"class":257},[45,91079,51518],{"class":51},[45,91081,51673],{"class":257},[45,91083,1373],{"class":51},[45,91085,91086,91088,91090,91092,91094],{"class":47,"line":1736},[45,91087,90126],{"class":257},[45,91089,51518],{"class":51},[45,91091,527],{"class":257},[45,91093,51573],{"class":93},[45,91095,1373],{"class":51},[45,91097,91098],{"class":47,"line":1757},[45,91099,2270],{"class":51},[45,91101,91102,91104,91106],{"class":47,"line":1762},[45,91103,52498],{"class":51},[45,91105,121],{"class":51381},[45,91107,51388],{"class":51},[45,91109,91110,91112,91114],{"class":47,"line":1776},[45,91111,51866],{"class":51},[45,91113,51415],{"class":51381},[45,91115,51388],{"class":51},[45,91117,91118],{"class":47,"line":1781},[45,91119,2483],{"emptyLinePlaceholder":133},[45,91121,91122,91124,91126],{"class":47,"line":1810},[45,91123,1117],{"class":51},[45,91125,51881],{"class":51381},[45,91127,51388],{"class":51},[45,91129,91130,91132,91134,91136,91138,91140,91142,91144],{"class":47,"line":1815},[45,91131,52225],{"class":51},[45,91133,51692],{"class":51381},[45,91135,53567],{"class":2046},[45,91137,254],{"class":51},[45,91139,53572],{"class":313},[45,91141,55395],{"class":51},[45,91143,51692],{"class":51381},[45,91145,51388],{"class":51},[45,91147,91148,91150,91152,91154,91156,91158,91160,91162],{"class":47,"line":1832},[45,91149,52225],{"class":51},[45,91151,51894],{"class":51381},[45,91153,55320],{"class":2046},[45,91155,254],{"class":51},[45,91157,88355],{"class":313},[45,91159,55395],{"class":51},[45,91161,51894],{"class":51381},[45,91163,51388],{"class":51},[45,91165,91166,91168,91170],{"class":47,"line":1837},[45,91167,52225],{"class":51},[45,91169,51894],{"class":51381},[45,91171,51388],{"class":51},[45,91173,91174,91176,91178,91180,91182,91184,91186,91188],{"class":47,"line":1842},[45,91175,11304],{"class":93},[45,91177,87014],{"class":257},[45,91179,13647],{"class":93},[45,91181,54477],{"class":51},[45,91183,54480],{"class":2046},[45,91185,209],{"class":51},[45,91187,90227],{"class":313},[45,91189,215],{"class":51},[45,91191,91192,91194,91196,91198],{"class":47,"line":1847},[45,91193,52300],{"class":93},[45,91195,9521],{"class":51},[45,91197,254],{"class":93},[45,91199,47414],{"class":257},[45,91201,91202,91204,91206],{"class":47,"line":1861},[45,91203,70165],{"class":93},[45,91205,90246],{"class":2046},[45,91207,10936],{"class":51},[45,91209,91210,91212,91214,91216],{"class":47,"line":1866},[45,91211,90253],{"class":51},[45,91213,254],{"class":93},[45,91215,3115],{"class":51},[45,91217,2785],{"class":93},[45,91219,91220],{"class":47,"line":2660},[45,91221,90264],{"class":267},[45,91223,91224],{"class":47,"line":2674},[45,91225,2270],{"class":51},[45,91227,91228],{"class":47,"line":2682},[45,91229,90273],{"class":267},[45,91231,91232],{"class":47,"line":2687},[45,91233,91234],{"class":267},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[45,91236,91237],{"class":47,"line":2693},[45,91238,91239],{"class":267},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[45,91241,91242,91244,91246,91248,91250,91252,91255,91257,91259],{"class":47,"line":2699},[45,91243,90288],{"class":51},[45,91245,57894],{"class":2046},[45,91247,209],{"class":51},[45,91249,90295],{"class":313},[45,91251,90298],{"class":51},[45,91253,91254],{"class":2046},"throttle",[45,91256,90304],{"class":51},[45,91258,65155],{"class":257},[45,91260,30578],{"class":51},[45,91262,91263,91265,91267],{"class":47,"line":2704},[45,91264,52498],{"class":51},[45,91266,51894],{"class":51381},[45,91268,51388],{"class":51},[45,91270,91271,91273,91275],{"class":47,"line":8031},[45,91272,51866],{"class":51},[45,91274,51881],{"class":51381},[45,91276,51388],{"class":51},[45,91278,91279],{"class":47,"line":8055},[45,91280,2483],{"emptyLinePlaceholder":133},[45,91282,91283,91285,91287],{"class":47,"line":8060},[45,91284,51866],{"class":51},[45,91286,50716],{"class":51381},[45,91288,51388],{"class":51},[1214,91290,91291],{},[162,91292,91293],{},"手写一个节流函数来处理",[10,91295,71033],{},[10,91297,90347],{},[10,91299,91300],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[10,91302,91303],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[35,91305,91307],{"className":50714,"code":91306,"language":50716,"meta":40,"style":40},"\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",[42,91308,91309,91319,91333,91337,91345,91359,91379,91391,91399,91405,91415,91427,91439,91449,91461,91471,91481,91493,91497,91505,91513,91517,91525,91543,91561,91569,91587,91597,91605,91615,91619,91623,91627,91632,91637,91642,91647,91652,91657,91674,91680,91688,91699,91714,91721,91726,91731,91741,91746,91751,91756,91760,91764,91768,91788,91796,91804,91808],{"__ignoreMap":40},[45,91310,91311,91313,91315,91317],{"class":47,"line":48},[45,91312,51378],{"class":51},[45,91314,51382],{"class":51381},[45,91316,51385],{"class":2046},[45,91318,51388],{"class":51},[45,91320,91321,91323,91325,91327,91329,91331],{"class":47,"line":125},[45,91322,1117],{"class":51},[45,91324,50716],{"class":51381},[45,91326,51397],{"class":2046},[45,91328,254],{"class":51},[45,91330,51402],{"class":313},[45,91332,51388],{"class":51},[45,91334,91335],{"class":47,"line":1262},[45,91336,2483],{"emptyLinePlaceholder":133},[45,91338,91339,91341,91343],{"class":47,"line":1277},[45,91340,1117],{"class":51},[45,91342,51415],{"class":51381},[45,91344,51388],{"class":51},[45,91346,91347,91349,91351,91353,91355,91357],{"class":47,"line":1283},[45,91348,52225],{"class":51},[45,91350,51425],{"class":51381},[45,91352,51428],{"class":2046},[45,91354,254],{"class":51},[45,91356,51433],{"class":313},[45,91358,51388],{"class":51},[45,91360,91361,91363,91365,91367,91369,91371,91373,91375,91377],{"class":47,"line":1297},[45,91362,52225],{"class":51},[45,91364,51425],{"class":51381},[45,91366,15003],{"class":2046},[45,91368,254],{"class":51},[45,91370,51472],{"class":313},[45,91372,51452],{"class":2046},[45,91374,254],{"class":51},[45,91376,51479],{"class":313},[45,91378,51388],{"class":51},[45,91380,91381,91383,91385,91387,91389],{"class":47,"line":1303},[45,91382,52225],{"class":51},[45,91384,51488],{"class":51381},[45,91386,51491],{"class":51},[45,91388,51488],{"class":51381},[45,91390,51388],{"class":51},[45,91392,91393,91395,91397],{"class":47,"line":1394},[45,91394,52225],{"class":51},[45,91396,121],{"class":51381},[45,91398,51388],{"class":51},[45,91400,91401,91403],{"class":47,"line":1400},[45,91402,54833],{"class":2046},[45,91404,15655],{"class":51},[45,91406,91407,91409,91411,91413],{"class":47,"line":1412},[45,91408,72677],{"class":257},[45,91410,51518],{"class":51},[45,91412,60586],{"class":257},[45,91414,1373],{"class":51},[45,91416,91417,91419,91421,91423,91425],{"class":47,"line":1695},[45,91418,54852],{"class":257},[45,91420,51518],{"class":51},[45,91422,1805],{"class":257},[45,91424,51573],{"class":93},[45,91426,1373],{"class":51},[45,91428,91429,91431,91433,91435,91437],{"class":47,"line":1700},[45,91430,54866],{"class":257},[45,91432,51518],{"class":51},[45,91434,1805],{"class":257},[45,91436,51573],{"class":93},[45,91438,1373],{"class":51},[45,91440,91441,91443,91445,91447],{"class":47,"line":1706},[45,91442,54965],{"class":257},[45,91444,51518],{"class":51},[45,91446,90087],{"class":257},[45,91448,1373],{"class":51},[45,91450,91451,91453,91455,91457,91459],{"class":47,"line":1711},[45,91452,55003],{"class":257},[45,91454,51518],{"class":51},[45,91456,1032],{"class":257},[45,91458,51573],{"class":93},[45,91460,1373],{"class":51},[45,91462,91463,91465,91467,91469],{"class":47,"line":1725},[45,91464,57497],{"class":257},[45,91466,51518],{"class":51},[45,91468,60923],{"class":257},[45,91470,1373],{"class":51},[45,91472,91473,91475,91477,91479],{"class":47,"line":1730},[45,91474,57367],{"class":257},[45,91476,51518],{"class":51},[45,91478,51673],{"class":257},[45,91480,1373],{"class":51},[45,91482,91483,91485,91487,91489,91491],{"class":47,"line":1736},[45,91484,90126],{"class":257},[45,91486,51518],{"class":51},[45,91488,527],{"class":257},[45,91490,51573],{"class":93},[45,91492,1373],{"class":51},[45,91494,91495],{"class":47,"line":1757},[45,91496,2270],{"class":51},[45,91498,91499,91501,91503],{"class":47,"line":1762},[45,91500,52498],{"class":51},[45,91502,121],{"class":51381},[45,91504,51388],{"class":51},[45,91506,91507,91509,91511],{"class":47,"line":1776},[45,91508,51866],{"class":51},[45,91510,51415],{"class":51381},[45,91512,51388],{"class":51},[45,91514,91515],{"class":47,"line":1781},[45,91516,2483],{"emptyLinePlaceholder":133},[45,91518,91519,91521,91523],{"class":47,"line":1810},[45,91520,1117],{"class":51},[45,91522,51881],{"class":51381},[45,91524,51388],{"class":51},[45,91526,91527,91529,91531,91533,91535,91537,91539,91541],{"class":47,"line":1815},[45,91528,52225],{"class":51},[45,91530,51692],{"class":51381},[45,91532,53567],{"class":2046},[45,91534,254],{"class":51},[45,91536,53572],{"class":313},[45,91538,55395],{"class":51},[45,91540,51692],{"class":51381},[45,91542,51388],{"class":51},[45,91544,91545,91547,91549,91551,91553,91555,91557,91559],{"class":47,"line":1832},[45,91546,52225],{"class":51},[45,91548,51894],{"class":51381},[45,91550,55320],{"class":2046},[45,91552,254],{"class":51},[45,91554,88355],{"class":313},[45,91556,55395],{"class":51},[45,91558,51894],{"class":51381},[45,91560,51388],{"class":51},[45,91562,91563,91565,91567],{"class":47,"line":1837},[45,91564,52225],{"class":51},[45,91566,51894],{"class":51381},[45,91568,51388],{"class":51},[45,91570,91571,91573,91575,91577,91579,91581,91583,91585],{"class":47,"line":1842},[45,91572,11304],{"class":93},[45,91574,87014],{"class":257},[45,91576,13647],{"class":93},[45,91578,54477],{"class":51},[45,91580,54480],{"class":2046},[45,91582,209],{"class":51},[45,91584,90227],{"class":313},[45,91586,215],{"class":51},[45,91588,91589,91591,91593,91595],{"class":47,"line":1847},[45,91590,52300],{"class":93},[45,91592,9521],{"class":51},[45,91594,254],{"class":93},[45,91596,47414],{"class":257},[45,91598,91599,91601,91603],{"class":47,"line":1861},[45,91600,70165],{"class":93},[45,91602,90246],{"class":2046},[45,91604,10936],{"class":51},[45,91606,91607,91609,91611,91613],{"class":47,"line":1866},[45,91608,90253],{"class":51},[45,91610,254],{"class":93},[45,91612,3115],{"class":51},[45,91614,2785],{"class":93},[45,91616,91617],{"class":47,"line":2660},[45,91618,90264],{"class":267},[45,91620,91621],{"class":47,"line":2674},[45,91622,2270],{"class":51},[45,91624,91625],{"class":47,"line":2682},[45,91626,90273],{"class":267},[45,91628,91629],{"class":47,"line":2687},[45,91630,91631],{"class":267},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[45,91633,91634],{"class":47,"line":2693},[45,91635,91636],{"class":267},"    \u002F\u002F 1.声明一个定时器变量\n",[45,91638,91639],{"class":47,"line":2699},[45,91640,91641],{"class":267},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[45,91643,91644],{"class":47,"line":2704},[45,91645,91646],{"class":267},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[45,91648,91649],{"class":47,"line":8031},[45,91650,91651],{"class":267},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[45,91653,91654],{"class":47,"line":8055},[45,91655,91656],{"class":267},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[45,91658,91659,91661,91664,91666,91668,91670,91672],{"class":47,"line":8060},[45,91660,70165],{"class":93},[45,91662,91663],{"class":2046}," throttle",[45,91665,209],{"class":51},[45,91667,90718],{"class":5299},[45,91669,12518],{"class":51},[45,91671,927],{"class":5299},[45,91673,12525],{"class":51},[45,91675,91676,91678],{"class":47,"line":8066},[45,91677,79853],{"class":93},[45,91679,90731],{"class":51},[45,91681,91682,91684,91686],{"class":47,"line":8093},[45,91683,74063],{"class":93},[45,91685,58999],{"class":93},[45,91687,54533],{"class":51},[45,91689,91690,91692,91694,91696],{"class":47,"line":8098},[45,91691,2580],{"class":93},[45,91693,1741],{"class":51},[45,91695,435],{"class":93},[45,91697,91698],{"class":51},"timer) {\n",[45,91700,91701,91704,91706,91708,91710,91712],{"class":47,"line":8104},[45,91702,91703],{"class":51},"          timer ",[45,91705,254],{"class":93},[45,91707,90772],{"class":2046},[45,91709,209],{"class":51},[45,91711,54530],{"class":93},[45,91713,54533],{"class":51},[45,91715,91716,91719],{"class":47,"line":8116},[45,91717,91718],{"class":2046},"            fn",[45,91720,2059],{"class":51},[45,91722,91723],{"class":47,"line":8128},[45,91724,91725],{"class":267},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[45,91727,91728],{"class":47,"line":8140},[45,91729,91730],{"class":267},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[45,91732,91733,91736,91738],{"class":47,"line":9799},[45,91734,91735],{"class":51},"            timer ",[45,91737,254],{"class":93},[45,91739,91740],{"class":257}," null\n",[45,91742,91743],{"class":47,"line":9824},[45,91744,91745],{"class":267},"            \u002F\u002F 不能用clearTimeout(timer)\n",[45,91747,91748],{"class":47,"line":9847},[45,91749,91750],{"class":267},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[45,91752,91753],{"class":47,"line":9871},[45,91754,91755],{"class":51},"          }, t)\n",[45,91757,91758],{"class":47,"line":9876},[45,91759,2612],{"class":51},[45,91761,91762],{"class":47,"line":9881},[45,91763,52479],{"class":51},[45,91765,91766],{"class":47,"line":9886},[45,91767,2270],{"class":51},[45,91769,91770,91772,91774,91776,91778,91780,91782,91784,91786],{"class":47,"line":9895},[45,91771,90288],{"class":51},[45,91773,57894],{"class":2046},[45,91775,209],{"class":51},[45,91777,90295],{"class":313},[45,91779,12518],{"class":51},[45,91781,91254],{"class":2046},[45,91783,90304],{"class":51},[45,91785,65155],{"class":257},[45,91787,30578],{"class":51},[45,91789,91790,91792,91794],{"class":47,"line":9900},[45,91791,52498],{"class":51},[45,91793,51894],{"class":51381},[45,91795,51388],{"class":51},[45,91797,91798,91800,91802],{"class":47,"line":9906},[45,91799,51866],{"class":51},[45,91801,51881],{"class":51381},[45,91803,51388],{"class":51},[45,91805,91806],{"class":47,"line":9927},[45,91807,2483],{"emptyLinePlaceholder":133},[45,91809,91810,91812,91814],{"class":47,"line":9933},[45,91811,51866],{"class":51},[45,91813,50716],{"class":51381},[45,91815,51388],{"class":51},[176,91817,91819],{"id":91818},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[35,91821,91823],{"className":53148,"code":91822,"language":53150,"meta":40,"style":40},"\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",[42,91824,91825,91833,91841,91846,91851,91856,91861,91865,91873],{"__ignoreMap":40},[45,91826,91827,91829,91831],{"class":47,"line":48},[45,91828,1117],{"class":51},[45,91830,51881],{"class":51381},[45,91832,51388],{"class":51},[45,91834,91835,91837,91839],{"class":47,"line":125},[45,91836,52225],{"class":51},[45,91838,51894],{"class":51381},[45,91840,51388],{"class":51},[45,91842,91843],{"class":47,"line":1262},[45,91844,91845],{"class":51},"    let timer = null\n",[45,91847,91848],{"class":47,"line":1277},[45,91849,91850],{"class":51},"    timer = setTimeout(() => {\n",[45,91852,91853],{"class":47,"line":1283},[45,91854,91855],{"class":51},"      clearTimeout(timer)\n",[45,91857,91858],{"class":47,"line":1297},[45,91859,91860],{"class":51},"      console.log(timer)\n",[45,91862,91863],{"class":47,"line":1303},[45,91864,60306],{"class":51},[45,91866,91867,91869,91871],{"class":47,"line":1394},[45,91868,52498],{"class":51},[45,91870,51894],{"class":51381},[45,91872,51388],{"class":51},[45,91874,91875,91877,91879],{"class":47,"line":1400},[45,91876,51866],{"class":51},[45,91878,51881],{"class":51381},[45,91880,51388],{"class":51},[10,91882,91883],{},"输出为1",[10,91885,91886],{},"在开启的定时器里边写清除定时器",[10,91888,91889],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[176,91891,91893],{"id":91892},"_4174-节流综合案例","4.17.4 节流综合案例",[10,91895,91896],{},"页面打开，可以记录上一次的视频播放位置",[10,91898,91899],{},[1545,91900],{"alt":40,"src":91901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[10,91903,91904],{},[1545,91905],{"alt":40,"src":91906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[35,91908,91910],{"className":50714,"code":91909,"language":50716,"meta":40,"style":40},"\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",[42,91911,91912,91922,91936,91940,91948,91962,91982,92002,92024,92037,92045,92051,92061,92071,92081,92085,92089,92096,92109,92121,92125,92129,92139,92151,92165,92169,92173,92180,92190,92203,92215,92225,92235,92251,92263,92267,92271,92279,92289,92301,92311,92321,92331,92335,92339,92349,92360,92364,92372,92380,92384,92392,92407,92422,92437,92458,92466,92474,92489,92511,92519,92534,92560,92586,92612,92620,92628,92647,92655,92660,92679,92684,92702,92707,92712,92720,92725,92739,92747,92752,92769,92773,92778,92800,92804,92812,92820,92824],{"__ignoreMap":40},[45,91913,91914,91916,91918,91920],{"class":47,"line":48},[45,91915,51378],{"class":51},[45,91917,51382],{"class":51381},[45,91919,51385],{"class":2046},[45,91921,51388],{"class":51},[45,91923,91924,91926,91928,91930,91932,91934],{"class":47,"line":125},[45,91925,1117],{"class":51},[45,91927,50716],{"class":51381},[45,91929,51397],{"class":2046},[45,91931,254],{"class":51},[45,91933,51402],{"class":313},[45,91935,51388],{"class":51},[45,91937,91938],{"class":47,"line":1262},[45,91939,2483],{"emptyLinePlaceholder":133},[45,91941,91942,91944,91946],{"class":47,"line":1277},[45,91943,1117],{"class":51},[45,91945,51415],{"class":51381},[45,91947,51388],{"class":51},[45,91949,91950,91952,91954,91956,91958,91960],{"class":47,"line":1283},[45,91951,52225],{"class":51},[45,91953,51425],{"class":51381},[45,91955,51428],{"class":2046},[45,91957,254],{"class":51},[45,91959,51433],{"class":313},[45,91961,59208],{"class":51},[45,91963,91964,91966,91968,91970,91972,91974,91976,91978,91980],{"class":47,"line":1297},[45,91965,52225],{"class":51},[45,91967,51425],{"class":51381},[45,91969,51444],{"class":2046},[45,91971,254],{"class":51},[45,91973,51449],{"class":313},[45,91975,51452],{"class":2046},[45,91977,254],{"class":51},[45,91979,51457],{"class":313},[45,91981,59208],{"class":51},[45,91983,91984,91986,91988,91990,91992,91994,91996,91998,92000],{"class":47,"line":1303},[45,91985,52225],{"class":51},[45,91987,51425],{"class":51381},[45,91989,15003],{"class":2046},[45,91991,254],{"class":51},[45,91993,51472],{"class":313},[45,91995,51452],{"class":2046},[45,91997,254],{"class":51},[45,91999,51479],{"class":313},[45,92001,59208],{"class":51},[45,92003,92004,92006,92008,92010,92012,92015,92017,92019,92022],{"class":47,"line":1394},[45,92005,52225],{"class":51},[45,92007,51425],{"class":51381},[45,92009,15003],{"class":2046},[45,92011,254],{"class":51},[45,92013,92014],{"class":313},"\"referrer\"",[45,92016,51452],{"class":2046},[45,92018,254],{"class":51},[45,92020,92021],{"class":313},"\"never\"",[45,92023,59208],{"class":51},[45,92025,92026,92028,92030,92033,92035],{"class":47,"line":1400},[45,92027,52225],{"class":51},[45,92029,51488],{"class":51381},[45,92031,92032],{"class":51},">综合案例\u003C\u002F",[45,92034,51488],{"class":51381},[45,92036,51388],{"class":51},[45,92038,92039,92041,92043],{"class":47,"line":1412},[45,92040,52225],{"class":51},[45,92042,121],{"class":51381},[45,92044,51388],{"class":51},[45,92046,92047,92049],{"class":47,"line":1695},[45,92048,6486],{"class":51381},[45,92050,15655],{"class":51},[45,92052,92053,92055,92057,92059],{"class":47,"line":1700},[45,92054,54776],{"class":257},[45,92056,51518],{"class":51},[45,92058,400],{"class":257},[45,92060,1373],{"class":51},[45,92062,92063,92065,92067,92069],{"class":47,"line":1706},[45,92064,54787],{"class":257},[45,92066,51518],{"class":51},[45,92068,400],{"class":257},[45,92070,1373],{"class":51},[45,92072,92073,92075,92077,92079],{"class":47,"line":1711},[45,92074,72677],{"class":257},[45,92076,51518],{"class":51},[45,92078,60586],{"class":257},[45,92080,1373],{"class":51},[45,92082,92083],{"class":47,"line":1725},[45,92084,2270],{"class":51},[45,92086,92087],{"class":47,"line":1730},[45,92088,2483],{"emptyLinePlaceholder":133},[45,92090,92091,92094],{"class":47,"line":1736},[45,92092,92093],{"class":2046},"    .container",[45,92095,15655],{"class":51},[45,92097,92098,92100,92102,92105,92107],{"class":47,"line":1757},[45,92099,54852],{"class":257},[45,92101,51518],{"class":51},[45,92103,92104],{"class":257},"1200",[45,92106,51573],{"class":93},[45,92108,1373],{"class":51},[45,92110,92111,92113,92115,92117,92119],{"class":47,"line":1762},[45,92112,54787],{"class":257},[45,92114,51518],{"class":51},[45,92116,400],{"class":257},[45,92118,51637],{"class":257},[45,92120,1373],{"class":51},[45,92122,92123],{"class":47,"line":1776},[45,92124,2270],{"class":51},[45,92126,92127],{"class":47,"line":1781},[45,92128,2483],{"emptyLinePlaceholder":133},[45,92130,92131,92134,92137],{"class":47,"line":1810},[45,92132,92133],{"class":2046},"    .video",[45,92135,92136],{"class":51381}," video",[45,92138,15655],{"class":51},[45,92140,92141,92143,92145,92147,92149],{"class":47,"line":1815},[45,92142,54852],{"class":257},[45,92144,51518],{"class":51},[45,92146,519],{"class":257},[45,92148,536],{"class":93},[45,92150,1373],{"class":51},[45,92152,92153,92155,92157,92159,92161,92163],{"class":47,"line":1832},[45,92154,54776],{"class":257},[45,92156,51518],{"class":51},[45,92158,907],{"class":257},[45,92160,51573],{"class":93},[45,92162,4176],{"class":257},[45,92164,1373],{"class":51},[45,92166,92167],{"class":47,"line":1837},[45,92168,2270],{"class":51},[45,92170,92171],{"class":47,"line":1842},[45,92172,2483],{"emptyLinePlaceholder":133},[45,92174,92175,92178],{"class":47,"line":1847},[45,92176,92177],{"class":2046},"    .elevator",[45,92179,15655],{"class":51},[45,92181,92182,92184,92186,92188],{"class":47,"line":1861},[45,92183,54840],{"class":257},[45,92185,51518],{"class":51},[45,92187,86314],{"class":257},[45,92189,1373],{"class":51},[45,92191,92192,92194,92196,92199,92201],{"class":47,"line":1866},[45,92193,55028],{"class":257},[45,92195,51518],{"class":51},[45,92197,92198],{"class":257},"280",[45,92200,51573],{"class":93},[45,92202,1373],{"class":51},[45,92204,92205,92207,92209,92211,92213],{"class":47,"line":2660},[45,92206,86508],{"class":257},[45,92208,51518],{"class":51},[45,92210,907],{"class":257},[45,92212,51573],{"class":93},[45,92214,1373],{"class":51},[45,92216,92217,92219,92221,92223],{"class":47,"line":2674},[45,92218,86321],{"class":257},[45,92220,51518],{"class":51},[45,92222,86326],{"class":257},[45,92224,1373],{"class":51},[45,92226,92227,92229,92231,92233],{"class":47,"line":2682},[45,92228,61802],{"class":257},[45,92230,51518],{"class":51},[45,92232,60923],{"class":257},[45,92234,1373],{"class":51},[45,92236,92237,92239,92241,92243,92245,92247,92249],{"class":47,"line":2687},[45,92238,62058],{"class":257},[45,92240,51518],{"class":51},[45,92242,426],{"class":257},[45,92244,51573],{"class":93},[45,92246,51602],{"class":257},[45,92248,62325],{"class":257},[45,92250,1373],{"class":51},[45,92252,92253,92255,92257,92259,92261],{"class":47,"line":2693},[45,92254,54852],{"class":257},[45,92256,51518],{"class":51},[45,92258,1114],{"class":257},[45,92260,51573],{"class":93},[45,92262,1373],{"class":51},[45,92264,92265],{"class":47,"line":2699},[45,92266,2270],{"class":51},[45,92268,92269],{"class":47,"line":2704},[45,92270,2483],{"emptyLinePlaceholder":133},[45,92272,92273,92275,92277],{"class":47,"line":8031},[45,92274,92177],{"class":2046},[45,92276,1481],{"class":51381},[45,92278,15655],{"class":51},[45,92280,92281,92283,92285,92287],{"class":47,"line":8055},[45,92282,55090],{"class":257},[45,92284,51518],{"class":51},[45,92286,60950],{"class":257},[45,92288,1373],{"class":51},[45,92290,92291,92293,92295,92297,92299],{"class":47,"line":8060},[45,92292,54776],{"class":257},[45,92294,51518],{"class":51},[45,92296,654],{"class":257},[45,92298,51573],{"class":93},[45,92300,1373],{"class":51},[45,92302,92303,92305,92307,92309],{"class":47,"line":8066},[45,92304,64051],{"class":257},[45,92306,51518],{"class":51},[45,92308,54818],{"class":257},[45,92310,1373],{"class":51},[45,92312,92313,92315,92317,92319],{"class":47,"line":8093},[45,92314,57367],{"class":257},[45,92316,51518],{"class":51},[45,92318,51673],{"class":257},[45,92320,1373],{"class":51},[45,92322,92323,92325,92327,92329],{"class":47,"line":8098},[45,92324,57497],{"class":257},[45,92326,51518],{"class":51},[45,92328,62151],{"class":257},[45,92330,1373],{"class":51},[45,92332,92333],{"class":47,"line":8104},[45,92334,2270],{"class":51},[45,92336,92337],{"class":47,"line":8116},[45,92338,2483],{"emptyLinePlaceholder":133},[45,92340,92341,92343,92345,92347],{"class":47,"line":8128},[45,92342,92177],{"class":2046},[45,92344,1481],{"class":51381},[45,92346,64105],{"class":2046},[45,92348,15655],{"class":51},[45,92350,92351,92353,92355,92358],{"class":47,"line":8140},[45,92352,57497],{"class":257},[45,92354,51518],{"class":51},[45,92356,92357],{"class":257},"#1286ff",[45,92359,1373],{"class":51},[45,92361,92362],{"class":47,"line":9799},[45,92363,2270],{"class":51},[45,92365,92366,92368,92370],{"class":47,"line":9824},[45,92367,52498],{"class":51},[45,92369,121],{"class":51381},[45,92371,51388],{"class":51},[45,92373,92374,92376,92378],{"class":47,"line":9847},[45,92375,51866],{"class":51},[45,92377,51415],{"class":51381},[45,92379,51388],{"class":51},[45,92381,92382],{"class":47,"line":9871},[45,92383,2483],{"emptyLinePlaceholder":133},[45,92385,92386,92388,92390],{"class":47,"line":9876},[45,92387,1117],{"class":51},[45,92389,51881],{"class":51381},[45,92391,51388],{"class":51},[45,92393,92394,92396,92398,92400,92402,92405],{"class":47,"line":9881},[45,92395,52225],{"class":51},[45,92397,51692],{"class":51381},[45,92399,53567],{"class":2046},[45,92401,254],{"class":51},[45,92403,92404],{"class":313},"\"container\"",[45,92406,51388],{"class":51},[45,92408,92409,92411,92413,92415,92417,92420],{"class":47,"line":9886},[45,92410,51422],{"class":51},[45,92412,51692],{"class":51381},[45,92414,53567],{"class":2046},[45,92416,254],{"class":51},[45,92418,92419],{"class":313},"\"header\"",[45,92421,51388],{"class":51},[45,92423,92424,92426,92428,92430,92432,92435],{"class":47,"line":9895},[45,92425,55315],{"class":51},[45,92427,13],{"class":51381},[45,92429,61138],{"class":2046},[45,92431,254],{"class":51},[45,92433,92434],{"class":313},"\"http:\u002F\u002Fpip.itcast.cn\"",[45,92436,51388],{"class":51},[45,92438,92439,92441,92443,92445,92447,92450,92452,92454,92456],{"class":47,"line":9900},[45,92440,55383],{"class":51},[45,92442,1545],{"class":51381},[45,92444,55320],{"class":2046},[45,92446,254],{"class":51},[45,92448,92449],{"class":313},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[45,92451,55328],{"class":2046},[45,92453,254],{"class":51},[45,92455,7735],{"class":313},[45,92457,59208],{"class":51},[45,92459,92460,92462,92464],{"class":47,"line":9906},[45,92461,55488],{"class":51},[45,92463,13],{"class":51381},[45,92465,51388],{"class":51},[45,92467,92468,92470,92472],{"class":47,"line":9927},[45,92469,51857],{"class":51},[45,92471,51692],{"class":51381},[45,92473,51388],{"class":51},[45,92475,92476,92478,92480,92482,92484,92487],{"class":47,"line":9933},[45,92477,51422],{"class":51},[45,92479,51692],{"class":51381},[45,92481,53567],{"class":2046},[45,92483,254],{"class":51},[45,92485,92486],{"class":313},"\"video\"",[45,92488,51388],{"class":51},[45,92490,92491,92493,92495,92497,92499,92502,92505,92507,92509],{"class":47,"line":9947},[45,92492,55315],{"class":51},[45,92494,28266],{"class":51381},[45,92496,55320],{"class":2046},[45,92498,254],{"class":51},[45,92500,92501],{"class":313},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[45,92503,92504],{"class":2046}," controls",[45,92506,55395],{"class":51},[45,92508,28266],{"class":51381},[45,92510,51388],{"class":51},[45,92512,92513,92515,92517],{"class":47,"line":9953},[45,92514,51857],{"class":51},[45,92516,51692],{"class":51381},[45,92518,51388],{"class":51},[45,92520,92521,92523,92525,92527,92529,92532],{"class":47,"line":9980},[45,92522,51422],{"class":51},[45,92524,51692],{"class":51381},[45,92526,53567],{"class":2046},[45,92528,254],{"class":51},[45,92530,92531],{"class":313},"\"elevator\"",[45,92533,51388],{"class":51},[45,92535,92536,92538,92540,92542,92544,92546,92549,92551,92553,92556,92558],{"class":47,"line":9989},[45,92537,55315],{"class":51},[45,92539,13],{"class":51381},[45,92541,61138],{"class":2046},[45,92543,254],{"class":51},[45,92545,64317],{"class":313},[45,92547,92548],{"class":2046}," data-ref",[45,92550,254],{"class":51},[45,92552,92486],{"class":313},[45,92554,92555],{"class":51},">视频介绍\u003C\u002F",[45,92557,13],{"class":51381},[45,92559,51388],{"class":51},[45,92561,92562,92564,92566,92568,92570,92572,92574,92576,92579,92582,92584],{"class":47,"line":9995},[45,92563,55315],{"class":51},[45,92565,13],{"class":51381},[45,92567,61138],{"class":2046},[45,92569,254],{"class":51},[45,92571,64317],{"class":313},[45,92573,92548],{"class":2046},[45,92575,254],{"class":51},[45,92577,92578],{"class":313},"\"intro\"",[45,92580,92581],{"class":51},">课程简介\u003C\u002F",[45,92583,13],{"class":51381},[45,92585,51388],{"class":51},[45,92587,92588,92590,92592,92594,92596,92598,92600,92602,92605,92608,92610],{"class":47,"line":10003},[45,92589,55315],{"class":51},[45,92591,13],{"class":51381},[45,92593,61138],{"class":2046},[45,92595,254],{"class":51},[45,92597,64317],{"class":313},[45,92599,92548],{"class":2046},[45,92601,254],{"class":51},[45,92603,92604],{"class":313},"\"outline\"",[45,92606,92607],{"class":51},">评论列表\u003C\u002F",[45,92609,13],{"class":51381},[45,92611,51388],{"class":51},[45,92613,92614,92616,92618],{"class":47,"line":10008},[45,92615,51857],{"class":51},[45,92617,51692],{"class":51381},[45,92619,51388],{"class":51},[45,92621,92622,92624,92626],{"class":47,"line":16687},[45,92623,52498],{"class":51},[45,92625,51692],{"class":51381},[45,92627,51388],{"class":51},[45,92629,92630,92632,92634,92636,92638,92641,92643,92645],{"class":47,"line":16693},[45,92631,52225],{"class":51},[45,92633,51894],{"class":51381},[45,92635,55320],{"class":2046},[45,92637,254],{"class":51},[45,92639,92640],{"class":313},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[45,92642,55395],{"class":51},[45,92644,51894],{"class":51381},[45,92646,51388],{"class":51},[45,92648,92649,92651,92653],{"class":47,"line":16716},[45,92650,52225],{"class":51},[45,92652,51894],{"class":51381},[45,92654,51388],{"class":51},[45,92656,92657],{"class":47,"line":16722},[45,92658,92659],{"class":267},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[45,92661,92662,92664,92666,92668,92670,92672,92674,92677],{"class":47,"line":16745},[45,92663,11304],{"class":93},[45,92665,92136],{"class":257},[45,92667,13647],{"class":93},[45,92669,54477],{"class":51},[45,92671,54480],{"class":2046},[45,92673,209],{"class":51},[45,92675,92676],{"class":313},"'video'",[45,92678,215],{"class":51},[45,92680,92681],{"class":47,"line":16759},[45,92682,92683],{"class":267},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[45,92685,92686,92689,92691,92693,92695,92698,92700],{"class":47,"line":16779},[45,92687,92688],{"class":51},"    video.ontimeupdate ",[45,92690,254],{"class":93},[45,92692,88436],{"class":51},[45,92694,91254],{"class":2046},[45,92696,92697],{"class":51},"(() ",[45,92699,84803],{"class":93},[45,92701,15655],{"class":51},[45,92703,92704],{"class":47,"line":16785},[45,92705,92706],{"class":267},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[45,92708,92709],{"class":47,"line":16796},[45,92710,92711],{"class":267},"      \u002F\u002F 控制台输出当前的时间\n",[45,92713,92714,92717],{"class":47,"line":16819},[45,92715,92716],{"class":267},"      \u002F\u002F console.log(video.currentTime)",[45,92718,92719],{"class":267},"  \u002F\u002F获得当前的视频时间\n",[45,92721,92722],{"class":47,"line":16841},[45,92723,92724],{"class":267},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[45,92726,92727,92729,92731,92733,92736],{"class":47,"line":16846},[45,92728,74764],{"class":51},[45,92730,71735],{"class":2046},[45,92732,209],{"class":51},[45,92734,92735],{"class":313},"'currentTime'",[45,92737,92738],{"class":51},", video.currentTime)\n",[45,92740,92741,92743,92745],{"class":47,"line":16852},[45,92742,54616],{"class":51},[45,92744,6493],{"class":257},[45,92746,215],{"class":51},[45,92748,92749],{"class":47,"line":16866},[45,92750,92751],{"class":267},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[45,92753,92754,92757,92760,92762,92765,92767],{"class":47,"line":16879},[45,92755,92756],{"class":51},"    video.",[45,92758,92759],{"class":2046},"onloadeddata",[45,92761,13647],{"class":93},[45,92763,92764],{"class":51}," () ",[45,92766,84803],{"class":93},[45,92768,15655],{"class":51},[45,92770,92771],{"class":47,"line":16884},[45,92772,60093],{"class":267},[45,92774,92775],{"class":47,"line":16898},[45,92776,92777],{"class":267},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[45,92779,92780,92783,92785,92788,92790,92792,92794,92796,92798],{"class":47,"line":16903},[45,92781,92782],{"class":51},"      video.currentTime ",[45,92784,254],{"class":93},[45,92786,92787],{"class":51}," localStorage.",[45,92789,71766],{"class":2046},[45,92791,209],{"class":51},[45,92793,92735],{"class":313},[45,92795,13797],{"class":51},[45,92797,71438],{"class":93},[45,92799,47414],{"class":257},[45,92801,92802],{"class":47,"line":16909},[45,92803,2270],{"class":51},[45,92805,92806,92808,92810],{"class":47,"line":16914},[45,92807,52498],{"class":51},[45,92809,51894],{"class":51381},[45,92811,51388],{"class":51},[45,92813,92814,92816,92818],{"class":47,"line":16928},[45,92815,51866],{"class":51},[45,92817,51881],{"class":51381},[45,92819,51388],{"class":51},[45,92821,92822],{"class":47,"line":16933},[45,92823,2483],{"emptyLinePlaceholder":133},[45,92825,92826,92828,92830],{"class":47,"line":16938},[45,92827,51866],{"class":51},[45,92829,50716],{"class":51381},[45,92831,51388],{"class":51},[121,92833,92834],{},"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":40,"searchDepth":125,"depth":125,"links":92836},[92837,92842,92846,92847,92848,92853,92858,92859,92860,92861,92868,92873,92874,92884,92888,92889,92893],{"id":76772,"depth":125,"text":76773,"children":92838},[92839,92840,92841],{"id":76776,"depth":1262,"text":76777},{"id":76801,"depth":1262,"text":76802},{"id":76813,"depth":1262,"text":76814},{"id":76825,"depth":125,"text":76826,"children":92843},[92844,92845],{"id":76829,"depth":1262,"text":76830},{"id":76844,"depth":1262,"text":76845},{"id":76896,"depth":125,"text":76897},{"id":76940,"depth":125,"text":76941},{"id":76957,"depth":125,"text":76958,"children":92849},[92850,92851,92852],{"id":76961,"depth":1262,"text":76962},{"id":76974,"depth":1262,"text":76975},{"id":77079,"depth":1262,"text":77080},{"id":77368,"depth":125,"text":77369,"children":92854},[92855,92856,92857],{"id":77372,"depth":1262,"text":77373},{"id":77815,"depth":1262,"text":77816},{"id":78226,"depth":1262,"text":78227},{"id":78289,"depth":125,"text":78290},{"id":78368,"depth":125,"text":78369},{"id":78461,"depth":125,"text":78462},{"id":80306,"depth":125,"text":80307,"children":92862},[92863,92864,92865,92866,92867],{"id":80310,"depth":1262,"text":80311},{"id":80322,"depth":1262,"text":80323},{"id":80541,"depth":1262,"text":80542},{"id":80559,"depth":1262,"text":80560},{"id":80619,"depth":1262,"text":80620},{"id":84887,"depth":125,"text":84888,"children":92869},[92870,92871,92872],{"id":84891,"depth":1262,"text":84892},{"id":84909,"depth":1262,"text":84910},{"id":84935,"depth":1262,"text":84936},{"id":84944,"depth":125,"text":84945},{"id":84966,"depth":125,"text":84967,"children":92875},[92876,92877,92878,92879,92880,92881,92882,92883],{"id":84970,"depth":1262,"text":84971},{"id":85231,"depth":1262,"text":85232},{"id":85417,"depth":1262,"text":85418},{"id":85784,"depth":1262,"text":85785},{"id":85900,"depth":1262,"text":85901},{"id":85936,"depth":1262,"text":85937},{"id":85983,"depth":1262,"text":85984},{"id":86017,"depth":1262,"text":86018},{"id":87380,"depth":125,"text":87381,"children":92885},[92886,92887],{"id":87384,"depth":1262,"text":87385},{"id":87421,"depth":1262,"text":87422},{"id":88776,"depth":125,"text":88777},{"id":89147,"depth":125,"text":89148,"children":92890},[92891,92892],{"id":89151,"depth":1262,"text":89152},{"id":89185,"depth":1262,"text":89186},{"id":89914,"depth":125,"text":89915,"children":92894},[92895,92896,92897,92898],{"id":89918,"depth":1262,"text":89919},{"id":90876,"depth":1262,"text":90877},{"id":91818,"depth":1262,"text":91819},{"id":91892,"depth":1262,"text":91893},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76761,"description":130},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92905,"title":92906,"body":92907,"description":92918,"extension":131,"meta":92919,"navigation":133,"path":92921,"seo":92922,"stem":92923,"__hash__":92924},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92908,"toc":92916},[92909],[10,92910,92911,92912],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[13,92913,92914],{"href":92914,"rel":92915},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[17],{"title":40,"searchDepth":125,"depth":125,"links":92917},[],"三件套第三套学习",{"category":92920},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92906,"description":92918},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":4,"title":5,"body":92926,"description":130,"extension":131,"meta":93006,"navigation":133,"path":134,"seo":93007,"stem":136,"__hash__":137},{"type":7,"value":92927,"toc":93001},[92928,92933,92935,92937,92939,92941,92949,92951,92953,92955,92963,92965,92967,92969,92985,92987,92999],[10,92929,92930],{},[13,92931,18],{"href":15,"rel":92932},[17],[20,92934,5],{"id":22},[10,92936,25],{},[10,92938,28],{},[30,92940,33],{"id":32},[35,92942,92943],{"className":37,"code":38,"language":39,"meta":40,"style":40},[42,92944,92945],{"__ignoreMap":40},[45,92946,92947],{"class":47,"line":48},[45,92948,38],{"class":51},[10,92950,54],{},[10,92952,57],{},[30,92954,61],{"id":60},[35,92956,92957],{"className":37,"code":64,"language":39,"meta":40,"style":40},[42,92958,92959],{"__ignoreMap":40},[45,92960,92961],{"class":47,"line":48},[45,92962,64],{"class":51},[10,92964,73],{},[30,92966,77],{"id":76},[10,92968,80],{},[35,92970,92971],{"className":37,"code":83,"language":39,"meta":40,"style":40},[42,92972,92973],{"__ignoreMap":40},[45,92974,92975,92977,92979,92981,92983],{"class":47,"line":48},[45,92976,90],{"class":51},[45,92978,94],{"class":93},[45,92980,97],{"class":51},[45,92982,94],{"class":93},[45,92984,102],{"class":51},[10,92986,105],{},[35,92988,92989],{"className":37,"code":108,"language":39,"meta":40,"style":40},[42,92990,92991],{"__ignoreMap":40},[45,92992,92993,92995,92997],{"class":47,"line":48},[45,92994,115],{"class":51},[45,92996,94],{"class":93},[45,92998,102],{"class":51},[121,93000,123],{},{"title":40,"searchDepth":125,"depth":125,"links":93002},[93003,93004,93005],{"id":32,"depth":125,"text":33},{"id":60,"depth":125,"text":61},{"id":76,"depth":125,"text":77},{},{"title":5,"description":130},{"id":93009,"title":93010,"body":93011,"description":130,"extension":131,"meta":93124,"navigation":133,"path":93125,"seo":93126,"stem":93127,"__hash__":93128},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93012,"toc":93122},[93013,93016,93019,93022,93025,93028,93031,93034,93037,93040,93116,93119],[20,93014,93010],{"id":93015},"_10算数函数",[10,93017,93018],{},"加减乘除运算跟python基础语法没区别",[10,93020,93021],{},"除了python那种方法外还可以使用函数",[10,93023,93024],{},"加：np.add(a,b)",[10,93026,93027],{},"减：np.subtract(a,b)",[10,93029,93030],{},"乘：np.multiply(a,b)",[10,93032,93033],{},"除：np.divide(a,b) == a\u002Fb",[10,93035,93036],{},"取余：np.mod(a,b) == a%b",[10,93038,93039],{},"必须会的用法：",[35,93041,93043],{"className":37,"code":93042,"language":39,"meta":40,"style":40},"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",[42,93044,93045,93067,93088,93098,93111],{"__ignoreMap":40},[45,93046,93047,93049,93051,93054,93056,93059,93061,93063,93065],{"class":47,"line":48},[45,93048,13],{"class":51},[45,93050,254],{"class":93},[45,93052,93053],{"class":51},"np.arange(",[45,93055,628],{"class":257},[45,93057,93058],{"class":51},").reshape(",[45,93060,280],{"class":257},[45,93062,586],{"class":51},[45,93064,280],{"class":257},[45,93066,215],{"class":51},[45,93068,93069,93071,93073,93076,93078,93080,93082,93084,93086],{"class":47,"line":125},[45,93070,471],{"class":51},[45,93072,254],{"class":93},[45,93074,93075],{"class":51},"np.array([",[45,93077,654],{"class":257},[45,93079,586],{"class":51},[45,93081,654],{"class":257},[45,93083,586],{"class":51},[45,93085,654],{"class":257},[45,93087,4740],{"class":51},[45,93089,93090,93093,93095],{"class":47,"line":1262},[45,93091,93092],{"class":51},"result",[45,93094,254],{"class":93},[45,93096,93097],{"class":51},"np.empty_like(a)\n",[45,93099,93100,93103,93106,93108],{"class":47,"line":1277},[45,93101,93102],{"class":51},"np.add(a,b,",[45,93104,93105],{"class":5299},"out",[45,93107,254],{"class":93},[45,93109,93110],{"class":51},"result)\n",[45,93112,93113],{"class":47,"line":1283},[45,93114,93115],{"class":51},"result\n",[10,93117,93118],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[121,93120,93121],{},"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":40,"searchDepth":125,"depth":125,"links":93123},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93010,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93130,"title":93131,"body":93132,"description":130,"extension":131,"meta":93894,"navigation":133,"path":93895,"seo":93896,"stem":93897,"__hash__":93898},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93133,"toc":93881},[93134,93137,93140,93143,93147,93186,93190,93234,93294,93298,93301,93340,93343,93388,93392,93428,93432,93501,93505,93569,93573,93576,93579,93582,93585,93621,93625,93665,93669,93741,93744,93748,93811,93815,93878],[20,93135,93131],{"id":93136},"_11统计函数",[10,93138,93139],{},"sum max min mean",[10,93141,93142],{},"这些有axis参数，可以指定方向",[30,93144,93146],{"id":93145},"_111-sum求和函数","11.1 sum()求和函数",[35,93148,93150],{"className":37,"code":93149,"language":39,"meta":40,"style":40},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[42,93151,93152,93157,93178],{"__ignoreMap":40},[45,93153,93154],{"class":47,"line":48},[45,93155,93156],{"class":267},"#创建一维数组\n",[45,93158,93159,93161,93163,93166,93168,93170,93172,93174,93176],{"class":47,"line":125},[45,93160,13],{"class":51},[45,93162,254],{"class":93},[45,93164,93165],{"class":51},"np.random.randint(",[45,93167,426],{"class":257},[45,93169,586],{"class":51},[45,93171,519],{"class":257},[45,93173,586],{"class":51},[45,93175,907],{"class":257},[45,93177,215],{"class":51},[45,93179,93180,93183],{"class":47,"line":1262},[45,93181,93182],{"class":51},"np.sum(a)",[45,93184,93185],{"class":267},"#求和\n",[30,93187,93189],{"id":93188},"_112-max求最大值函数","11.2 max()求最大值函数",[35,93191,93193],{"className":37,"code":93192,"language":39,"meta":40,"style":40},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[42,93194,93195,93199,93219,93224,93229],{"__ignoreMap":40},[45,93196,93197],{"class":47,"line":48},[45,93198,93156],{"class":267},[45,93200,93201,93203,93205,93207,93209,93211,93213,93215,93217],{"class":47,"line":125},[45,93202,13],{"class":51},[45,93204,254],{"class":93},[45,93206,93165],{"class":51},[45,93208,426],{"class":257},[45,93210,586],{"class":51},[45,93212,519],{"class":257},[45,93214,586],{"class":51},[45,93216,907],{"class":257},[45,93218,215],{"class":51},[45,93220,93221],{"class":47,"line":1262},[45,93222,93223],{"class":51},"np.max(a)\n",[45,93225,93226],{"class":47,"line":1277},[45,93227,93228],{"class":267},"#最大索引(求最大元素的索引)arg\n",[45,93230,93231],{"class":47,"line":1283},[45,93232,93233],{"class":51},"np.argmax(a)\n",[35,93235,93237],{"className":37,"code":93236,"language":39,"meta":40,"style":40},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[42,93238,93239,93260,93280,93284],{"__ignoreMap":40},[45,93240,93241,93243,93245,93248,93250,93252,93254,93256,93258],{"class":47,"line":48},[45,93242,11002],{"class":51},[45,93244,254],{"class":93},[45,93246,93247],{"class":51}," np.array([",[45,93249,426],{"class":257},[45,93251,12518],{"class":51},[45,93253,527],{"class":257},[45,93255,12518],{"class":51},[45,93257,280],{"class":257},[45,93259,4740],{"class":51},[45,93261,93262,93264,93266,93268,93270,93272,93274,93276,93278],{"class":47,"line":125},[45,93263,11028],{"class":51},[45,93265,254],{"class":93},[45,93267,93247],{"class":51},[45,93269,280],{"class":257},[45,93271,12518],{"class":51},[45,93273,286],{"class":257},[45,93275,12518],{"class":51},[45,93277,501],{"class":257},[45,93279,4740],{"class":51},[45,93281,93282],{"class":47,"line":1262},[45,93283,2483],{"emptyLinePlaceholder":133},[45,93285,93286,93288,93291],{"class":47,"line":1277},[45,93287,30496],{"class":257},[45,93289,93290],{"class":51},"(np.maximum(a, b))   ",[45,93292,93293],{"class":267},"# [3 5 4]，每个位置上取较大值\n",[30,93295,93297],{"id":93296},"_113-mean求平均值函数","11.3 mean()求平均值函数",[10,93299,93300],{},"①一维数组：",[35,93302,93304],{"className":37,"code":93303,"language":39,"meta":40,"style":40},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[42,93305,93306,93310,93330,93335],{"__ignoreMap":40},[45,93307,93308],{"class":47,"line":48},[45,93309,93156],{"class":267},[45,93311,93312,93314,93316,93318,93320,93322,93324,93326,93328],{"class":47,"line":125},[45,93313,13],{"class":51},[45,93315,254],{"class":93},[45,93317,93165],{"class":51},[45,93319,426],{"class":257},[45,93321,586],{"class":51},[45,93323,519],{"class":257},[45,93325,586],{"class":51},[45,93327,907],{"class":257},[45,93329,215],{"class":51},[45,93331,93332],{"class":47,"line":1262},[45,93333,93334],{"class":267},"#求平均值\n",[45,93336,93337],{"class":47,"line":1277},[45,93338,93339],{"class":51},"np.mean(a)\n",[10,93341,93342],{},"②二维数组",[35,93344,93346],{"className":37,"code":93345,"language":39,"meta":40,"style":40},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[42,93347,93348,93353,93378,93383],{"__ignoreMap":40},[45,93349,93350],{"class":47,"line":48},[45,93351,93352],{"class":267},"#二维数组\n",[45,93354,93355,93358,93360,93362,93364,93366,93368,93370,93372,93374,93376],{"class":47,"line":125},[45,93356,93357],{"class":51},"aa",[45,93359,254],{"class":93},[45,93361,93053],{"class":51},[45,93363,426],{"class":257},[45,93365,586],{"class":51},[45,93367,731],{"class":257},[45,93369,93058],{"class":51},[45,93371,280],{"class":257},[45,93373,586],{"class":51},[45,93375,501],{"class":257},[45,93377,215],{"class":51},[45,93379,93380],{"class":47,"line":1262},[45,93381,93382],{"class":267},"#对数组中的所有数求平均\n",[45,93384,93385],{"class":47,"line":1277},[45,93386,93387],{"class":51},"np.mean(aa)\n",[30,93389,93391],{"id":93390},"_114-median求中位数函数","11.4 median()求中位数函数",[35,93393,93395],{"className":37,"code":93394,"language":39,"meta":40,"style":40},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[42,93396,93397,93402,93418,93423],{"__ignoreMap":40},[45,93398,93399],{"class":47,"line":48},[45,93400,93401],{"class":267},"#求中位数\n",[45,93403,93404,93406,93408,93410,93412,93414,93416],{"class":47,"line":125},[45,93405,471],{"class":51},[45,93407,254],{"class":93},[45,93409,93053],{"class":51},[45,93411,426],{"class":257},[45,93413,586],{"class":51},[45,93415,654],{"class":257},[45,93417,215],{"class":51},[45,93419,93420],{"class":47,"line":1262},[45,93421,93422],{"class":51},"np.median(b)\n",[45,93424,93425],{"class":47,"line":1277},[45,93426,93427],{"class":267},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[30,93429,93431],{"id":93430},"_115-power求幂运算函数","11.5 power()求幂运算函数",[35,93433,93435],{"className":37,"code":93434,"language":39,"meta":40,"style":40},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[42,93436,93437,93453,93458,93463,93472,93477,93486],{"__ignoreMap":40},[45,93438,93439,93441,93443,93445,93447,93449,93451],{"class":47,"line":48},[45,93440,471],{"class":51},[45,93442,254],{"class":93},[45,93444,93053],{"class":51},[45,93446,426],{"class":257},[45,93448,586],{"class":51},[45,93450,654],{"class":257},[45,93452,215],{"class":51},[45,93454,93455],{"class":47,"line":125},[45,93456,93457],{"class":267},"#幂运算\n",[45,93459,93460],{"class":47,"line":1262},[45,93461,93462],{"class":267},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[45,93464,93465,93468,93470],{"class":47,"line":1277},[45,93466,93467],{"class":51},"np.power(b,",[45,93469,286],{"class":257},[45,93471,215],{"class":51},[45,93473,93474],{"class":47,"line":1283},[45,93475,93476],{"class":267},"#或者以下代码，将数据存储起来\n",[45,93478,93479,93481,93483],{"class":47,"line":1297},[45,93480,1052],{"class":51},[45,93482,254],{"class":93},[45,93484,93485],{"class":51},"np.empty_like(b)\n",[45,93487,93488,93490,93492,93494,93496,93498],{"class":47,"line":1303},[45,93489,93467],{"class":51},[45,93491,286],{"class":257},[45,93493,586],{"class":51},[45,93495,93105],{"class":5299},[45,93497,254],{"class":93},[45,93499,93500],{"class":51},"y)\n",[30,93502,93504],{"id":93503},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[35,93506,93508],{"className":37,"code":93507,"language":39,"meta":40,"style":40},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[42,93509,93510,93526,93531,93536,93540,93558],{"__ignoreMap":40},[45,93511,93512,93514,93516,93518,93520,93522,93524],{"class":47,"line":48},[45,93513,471],{"class":51},[45,93515,254],{"class":93},[45,93517,93053],{"class":51},[45,93519,426],{"class":257},[45,93521,586],{"class":51},[45,93523,654],{"class":257},[45,93525,215],{"class":51},[45,93527,93528],{"class":47,"line":125},[45,93529,93530],{"class":267},"#开方\n",[45,93532,93533],{"class":47,"line":1262},[45,93534,93535],{"class":51},"np.sqrt(b)\n",[45,93537,93538],{"class":47,"line":1277},[45,93539,93476],{"class":267},[45,93541,93542,93544,93546,93549,93552,93554,93556],{"class":47,"line":1283},[45,93543,1052],{"class":51},[45,93545,254],{"class":93},[45,93547,93548],{"class":51},"np.empty_like(b,",[45,93550,93551],{"class":5299},"dtype",[45,93553,254],{"class":93},[45,93555,248],{"class":257},[45,93557,215],{"class":51},[45,93559,93560,93563,93565,93567],{"class":47,"line":1297},[45,93561,93562],{"class":51},"np.sqrt(b,",[45,93564,93105],{"class":5299},[45,93566,254],{"class":93},[45,93568,93500],{"class":51},[30,93570,93572],{"id":93571},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[10,93574,93575],{},"对数组中的元素累计求和，可指定轴",[10,93577,93578],{},"#累计求和的意思是：",[10,93580,93581],{},"a = np.array([1, 2, 3, 4])",[10,93583,93584],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[35,93586,93588],{"className":37,"code":93587,"language":39,"meta":40,"style":40},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[42,93589,93590,93606,93611,93616],{"__ignoreMap":40},[45,93591,93592,93594,93596,93598,93600,93602,93604],{"class":47,"line":48},[45,93593,471],{"class":51},[45,93595,254],{"class":93},[45,93597,93053],{"class":51},[45,93599,426],{"class":257},[45,93601,586],{"class":51},[45,93603,654],{"class":257},[45,93605,215],{"class":51},[45,93607,93608],{"class":47,"line":125},[45,93609,93610],{"class":51},"np.cumsum(b)\n",[45,93612,93613],{"class":47,"line":1262},[45,93614,93615],{"class":267},"#结果：\n",[45,93617,93618],{"class":47,"line":1277},[45,93619,93620],{"class":267},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[30,93622,93624],{"id":93623},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[35,93626,93628],{"className":37,"code":93627,"language":39,"meta":40,"style":40},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[42,93629,93630,93646,93651,93656,93660],{"__ignoreMap":40},[45,93631,93632,93634,93636,93638,93640,93642,93644],{"class":47,"line":48},[45,93633,471],{"class":51},[45,93635,254],{"class":93},[45,93637,93053],{"class":51},[45,93639,426],{"class":257},[45,93641,586],{"class":51},[45,93643,654],{"class":257},[45,93645,215],{"class":51},[45,93647,93648],{"class":47,"line":125},[45,93649,93650],{"class":267},"#对数组中的元素累计求积，可指定轴\n",[45,93652,93653],{"class":47,"line":1262},[45,93654,93655],{"class":51},"np.cumprod(b)\n",[45,93657,93658],{"class":47,"line":1277},[45,93659,93615],{"class":267},[45,93661,93662],{"class":47,"line":1283},[45,93663,93664],{"class":267},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[30,93666,93668],{"id":93667},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[35,93670,93672],{"className":37,"code":93671,"language":39,"meta":40,"style":40},"#删除数组中的重复数据，并对数据进行排序\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",[42,93673,93674,93679,93727,93732,93736],{"__ignoreMap":40},[45,93675,93676],{"class":47,"line":48},[45,93677,93678],{"class":267},"#删除数组中的重复数据，并对数据进行排序\n",[45,93680,93681,93683,93685,93687,93689,93691,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725],{"class":47,"line":125},[45,93682,13],{"class":51},[45,93684,254],{"class":93},[45,93686,93075],{"class":51},[45,93688,426],{"class":257},[45,93690,586],{"class":51},[45,93692,286],{"class":257},[45,93694,586],{"class":51},[45,93696,280],{"class":257},[45,93698,586],{"class":51},[45,93700,706],{"class":257},[45,93702,586],{"class":51},[45,93704,280],{"class":257},[45,93706,586],{"class":51},[45,93708,654],{"class":257},[45,93710,586],{"class":51},[45,93712,406],{"class":257},[45,93714,586],{"class":51},[45,93716,400],{"class":257},[45,93718,586],{"class":51},[45,93720,982],{"class":257},[45,93722,586],{"class":51},[45,93724,501],{"class":257},[45,93726,4740],{"class":51},[45,93728,93729],{"class":47,"line":1262},[45,93730,93731],{"class":51},"np.unique(a)\n",[45,93733,93734],{"class":47,"line":1277},[45,93735,93615],{"class":267},[45,93737,93738],{"class":47,"line":1283},[45,93739,93740],{"class":267},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[10,93742,93743],{},"升序形式排序",[30,93745,93747],{"id":93746},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[35,93749,93751],{"className":37,"code":93750,"language":39,"meta":40,"style":40},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[42,93752,93753,93801,93806],{"__ignoreMap":40},[45,93754,93755,93757,93759,93761,93763,93765,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799],{"class":47,"line":48},[45,93756,13],{"class":51},[45,93758,254],{"class":93},[45,93760,93075],{"class":51},[45,93762,426],{"class":257},[45,93764,586],{"class":51},[45,93766,286],{"class":257},[45,93768,586],{"class":51},[45,93770,280],{"class":257},[45,93772,586],{"class":51},[45,93774,706],{"class":257},[45,93776,586],{"class":51},[45,93778,280],{"class":257},[45,93780,586],{"class":51},[45,93782,654],{"class":257},[45,93784,586],{"class":51},[45,93786,406],{"class":257},[45,93788,586],{"class":51},[45,93790,400],{"class":257},[45,93792,586],{"class":51},[45,93794,982],{"class":257},[45,93796,586],{"class":51},[45,93798,501],{"class":257},[45,93800,4740],{"class":51},[45,93802,93803],{"class":47,"line":125},[45,93804,93805],{"class":267},"#返回数组中非零元素的索引\n",[45,93807,93808],{"class":47,"line":1262},[45,93809,93810],{"class":51},"np.nonzero(a)\n",[30,93812,93814],{"id":93813},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[35,93816,93818],{"className":37,"code":93817,"language":39,"meta":40,"style":40},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[42,93819,93820,93868,93873],{"__ignoreMap":40},[45,93821,93822,93824,93826,93828,93830,93832,93834,93836,93838,93840,93842,93844,93846,93848,93850,93852,93854,93856,93858,93860,93862,93864,93866],{"class":47,"line":48},[45,93823,13],{"class":51},[45,93825,254],{"class":93},[45,93827,93075],{"class":51},[45,93829,426],{"class":257},[45,93831,586],{"class":51},[45,93833,286],{"class":257},[45,93835,586],{"class":51},[45,93837,280],{"class":257},[45,93839,586],{"class":51},[45,93841,706],{"class":257},[45,93843,586],{"class":51},[45,93845,280],{"class":257},[45,93847,586],{"class":51},[45,93849,654],{"class":257},[45,93851,586],{"class":51},[45,93853,406],{"class":257},[45,93855,586],{"class":51},[45,93857,400],{"class":257},[45,93859,586],{"class":51},[45,93861,982],{"class":257},[45,93863,586],{"class":51},[45,93865,501],{"class":257},[45,93867,4740],{"class":51},[45,93869,93870],{"class":47,"line":125},[45,93871,93872],{"class":267},"#计算一组数中最大值与最小值的差，可指定轴\n",[45,93874,93875],{"class":47,"line":1262},[45,93876,93877],{"class":51},"np.ptp(a)\n",[121,93879,93880],{},"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":40,"searchDepth":125,"depth":125,"links":93882},[93883,93884,93885,93886,93887,93888,93889,93890,93891,93892,93893],{"id":93145,"depth":125,"text":93146},{"id":93188,"depth":125,"text":93189},{"id":93296,"depth":125,"text":93297},{"id":93390,"depth":125,"text":93391},{"id":93430,"depth":125,"text":93431},{"id":93503,"depth":125,"text":93504},{"id":93571,"depth":125,"text":93572},{"id":93623,"depth":125,"text":93624},{"id":93667,"depth":125,"text":93668},{"id":93746,"depth":125,"text":93747},{"id":93813,"depth":125,"text":93814},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93131,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93900,"title":93901,"body":93902,"description":130,"extension":131,"meta":94557,"navigation":133,"path":94558,"seo":94559,"stem":94560,"__hash__":94561},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93903,"toc":94545},[93904,93907,93911,93914,94130,94134,94137,94346,94350,94416,94421,94425,94428,94431,94469,94473,94476,94481,94485,94488,94491,94496,94500,94503,94507,94510,94513,94518,94522,94525,94528,94533,94537,94542],[20,93905,93901],{"id":93906},"_12其他常用函数",[30,93908,93910],{"id":93909},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[10,93912,93913],{},"将数组的数据按照行列复制扩展",[35,93915,93917],{"className":37,"code":93916,"language":39,"meta":40,"style":40},"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",[42,93918,93919,93935,93944,93948,93953,93958,93971,93975,93980,93985,93990,93994,93999,94023,94035,94039,94043,94048,94053,94058,94063,94067,94080,94084,94088,94093,94098,94103,94108,94113,94117,94121,94126],{"__ignoreMap":40},[45,93920,93921,93923,93925,93927,93929,93931,93933],{"class":47,"line":48},[45,93922,13],{"class":51},[45,93924,254],{"class":93},[45,93926,93053],{"class":51},[45,93928,426],{"class":257},[45,93930,586],{"class":51},[45,93932,527],{"class":257},[45,93934,215],{"class":51},[45,93936,93937,93940,93942],{"class":47,"line":125},[45,93938,93939],{"class":51},"np.tile(a,",[45,93941,286],{"class":257},[45,93943,215],{"class":51},[45,93945,93946],{"class":47,"line":1262},[45,93947,93615],{"class":267},[45,93949,93950],{"class":47,"line":1277},[45,93951,93952],{"class":267},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[45,93954,93955],{"class":47,"line":1283},[45,93956,93957],{"class":267},"#行复制两次，列复制三次\n",[45,93959,93960,93963,93965,93967,93969],{"class":47,"line":1297},[45,93961,93962],{"class":51},"np.tile(a,(",[45,93964,286],{"class":257},[45,93966,586],{"class":51},[45,93968,280],{"class":257},[45,93970,30578],{"class":51},[45,93972,93973],{"class":47,"line":1303},[45,93974,93615],{"class":267},[45,93976,93977],{"class":47,"line":1394},[45,93978,93979],{"class":313},"'''\n",[45,93981,93982],{"class":47,"line":1400},[45,93983,93984],{"class":313},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[45,93986,93987],{"class":47,"line":1412},[45,93988,93989],{"class":313},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[45,93991,93992],{"class":47,"line":1695},[45,93993,93979],{"class":313},[45,93995,93996],{"class":47,"line":1700},[45,93997,93998],{"class":267},"#创建二维数组\n",[45,94000,94001,94003,94005,94007,94009,94011,94013,94015,94017,94019,94021],{"class":47,"line":1706},[45,94002,93357],{"class":51},[45,94004,254],{"class":93},[45,94006,93053],{"class":51},[45,94008,426],{"class":257},[45,94010,586],{"class":51},[45,94012,731],{"class":257},[45,94014,93058],{"class":51},[45,94016,501],{"class":257},[45,94018,586],{"class":51},[45,94020,280],{"class":257},[45,94022,215],{"class":51},[45,94024,94025,94028,94030,94032],{"class":47,"line":1711},[45,94026,94027],{"class":51},"np.tile(aa,",[45,94029,286],{"class":257},[45,94031,637],{"class":51},[45,94033,94034],{"class":267},"#一个数的时候就是行\n",[45,94036,94037],{"class":47,"line":1725},[45,94038,93615],{"class":267},[45,94040,94041],{"class":47,"line":1730},[45,94042,93979],{"class":313},[45,94044,94045],{"class":47,"line":1736},[45,94046,94047],{"class":313},"array([[ 1,  2,  3,  1,  2,  3],\n",[45,94049,94050],{"class":47,"line":1757},[45,94051,94052],{"class":313},"       [ 4,  5,  6,  4,  5,  6],\n",[45,94054,94055],{"class":47,"line":1762},[45,94056,94057],{"class":313},"       [ 7,  8,  9,  7,  8,  9],\n",[45,94059,94060],{"class":47,"line":1776},[45,94061,94062],{"class":313},"       [10, 11, 12, 10, 11, 12]])\n",[45,94064,94065],{"class":47,"line":1781},[45,94066,93979],{"class":313},[45,94068,94069,94072,94074,94076,94078],{"class":47,"line":1810},[45,94070,94071],{"class":51},"np.tile(aa,(",[45,94073,286],{"class":257},[45,94075,586],{"class":51},[45,94077,280],{"class":257},[45,94079,30578],{"class":51},[45,94081,94082],{"class":47,"line":1815},[45,94083,93615],{"class":267},[45,94085,94086],{"class":47,"line":1832},[45,94087,93979],{"class":313},[45,94089,94090],{"class":47,"line":1837},[45,94091,94092],{"class":313},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[45,94094,94095],{"class":47,"line":1842},[45,94096,94097],{"class":313},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[45,94099,94100],{"class":47,"line":1847},[45,94101,94102],{"class":313},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[45,94104,94105],{"class":47,"line":1861},[45,94106,94107],{"class":313},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[45,94109,94110],{"class":47,"line":1866},[45,94111,94112],{"class":313},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[45,94114,94115],{"class":47,"line":2660},[45,94116,94097],{"class":313},[45,94118,94119],{"class":47,"line":2674},[45,94120,94102],{"class":313},[45,94122,94123],{"class":47,"line":2682},[45,94124,94125],{"class":313},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[45,94127,94128],{"class":47,"line":2687},[45,94129,93979],{"class":313},[30,94131,94133],{"id":94132},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[10,94135,94136],{},"repeat()将数组中的每个元素重复若干次",[35,94138,94140],{"className":37,"code":94139,"language":39,"meta":40,"style":40},"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",[42,94141,94142,94158,94167,94171,94176,94200,94205,94214,94218,94223,94227,94232,94248,94252,94256,94261,94266,94271,94275,94280,94284,94289,94294,94298,94314,94318,94322,94327,94332,94337,94342],{"__ignoreMap":40},[45,94143,94144,94146,94148,94150,94152,94154,94156],{"class":47,"line":48},[45,94145,13],{"class":51},[45,94147,254],{"class":93},[45,94149,93053],{"class":51},[45,94151,426],{"class":257},[45,94153,586],{"class":51},[45,94155,527],{"class":257},[45,94157,215],{"class":51},[45,94159,94160,94163,94165],{"class":47,"line":125},[45,94161,94162],{"class":51},"np.repeat(a,",[45,94164,280],{"class":257},[45,94166,215],{"class":51},[45,94168,94169],{"class":47,"line":1262},[45,94170,93615],{"class":267},[45,94172,94173],{"class":47,"line":1277},[45,94174,94175],{"class":267},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[45,94177,94178,94180,94182,94184,94186,94188,94190,94192,94194,94196,94198],{"class":47,"line":1283},[45,94179,93357],{"class":51},[45,94181,254],{"class":93},[45,94183,93053],{"class":51},[45,94185,426],{"class":257},[45,94187,586],{"class":51},[45,94189,731],{"class":257},[45,94191,93058],{"class":51},[45,94193,501],{"class":257},[45,94195,586],{"class":51},[45,94197,280],{"class":257},[45,94199,215],{"class":51},[45,94201,94202],{"class":47,"line":1297},[45,94203,94204],{"class":267},"#这个重复之后二维变成一维\n",[45,94206,94207,94210,94212],{"class":47,"line":1303},[45,94208,94209],{"class":51},"np.repeat(aa,",[45,94211,286],{"class":257},[45,94213,215],{"class":51},[45,94215,94216],{"class":47,"line":1394},[45,94217,93979],{"class":313},[45,94219,94220],{"class":47,"line":1400},[45,94221,94222],{"class":313},"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",[45,94224,94225],{"class":47,"line":1412},[45,94226,93979],{"class":313},[45,94228,94229],{"class":47,"line":1695},[45,94230,94231],{"class":267},"#指定axis\n",[45,94233,94234,94236,94238,94240,94242,94244,94246],{"class":47,"line":1700},[45,94235,94209],{"class":51},[45,94237,286],{"class":257},[45,94239,586],{"class":51},[45,94241,47595],{"class":5299},[45,94243,254],{"class":93},[45,94245,400],{"class":257},[45,94247,215],{"class":51},[45,94249,94250],{"class":47,"line":1706},[45,94251,93615],{"class":267},[45,94253,94254],{"class":47,"line":1711},[45,94255,93979],{"class":313},[45,94257,94258],{"class":47,"line":1725},[45,94259,94260],{"class":313},"array([[ 1,  2,  3],\n",[45,94262,94263],{"class":47,"line":1730},[45,94264,94265],{"class":313},"       [ 1,  2,  3],\n",[45,94267,94268],{"class":47,"line":1736},[45,94269,94270],{"class":313},"       [ 4,  5,  6],\n",[45,94272,94273],{"class":47,"line":1757},[45,94274,94270],{"class":313},[45,94276,94277],{"class":47,"line":1762},[45,94278,94279],{"class":313},"       [ 7,  8,  9],\n",[45,94281,94282],{"class":47,"line":1776},[45,94283,94279],{"class":313},[45,94285,94286],{"class":47,"line":1781},[45,94287,94288],{"class":313},"       [10, 11, 12],\n",[45,94290,94291],{"class":47,"line":1810},[45,94292,94293],{"class":313},"       [10, 11, 12]])\n",[45,94295,94296],{"class":47,"line":1815},[45,94297,93979],{"class":313},[45,94299,94300,94302,94304,94306,94308,94310,94312],{"class":47,"line":1832},[45,94301,94209],{"class":51},[45,94303,286],{"class":257},[45,94305,586],{"class":51},[45,94307,47595],{"class":5299},[45,94309,254],{"class":93},[45,94311,426],{"class":257},[45,94313,215],{"class":51},[45,94315,94316],{"class":47,"line":1837},[45,94317,93615],{"class":267},[45,94319,94320],{"class":47,"line":1842},[45,94321,93979],{"class":313},[45,94323,94324],{"class":47,"line":1847},[45,94325,94326],{"class":313},"array([[ 1,  1,  2,  2,  3,  3],\n",[45,94328,94329],{"class":47,"line":1861},[45,94330,94331],{"class":313},"       [ 4,  4,  5,  5,  6,  6],\n",[45,94333,94334],{"class":47,"line":1866},[45,94335,94336],{"class":313},"       [ 7,  7,  8,  8,  9,  9],\n",[45,94338,94339],{"class":47,"line":2660},[45,94340,94341],{"class":313},"       [10, 10, 11, 11, 12, 12]])\n",[45,94343,94344],{"class":47,"line":2674},[45,94345,93979],{"class":313},[30,94347,94349],{"id":94348},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[35,94351,94353],{"className":37,"code":94352,"language":39,"meta":40,"style":40},"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",[42,94354,94355,94371,94376,94388,94392,94397,94407,94411],{"__ignoreMap":40},[45,94356,94357,94359,94361,94363,94365,94367,94369],{"class":47,"line":48},[45,94358,13],{"class":51},[45,94360,254],{"class":93},[45,94362,93053],{"class":51},[45,94364,426],{"class":257},[45,94366,586],{"class":51},[45,94368,527],{"class":257},[45,94370,215],{"class":51},[45,94372,94373],{"class":47,"line":125},[45,94374,94375],{"class":267},"#array([，2，3，4])\n",[45,94377,94378,94381,94383,94385],{"class":47,"line":1262},[45,94379,94380],{"class":51},"np.roll(a,",[45,94382,286],{"class":257},[45,94384,637],{"class":51},[45,94386,94387],{"class":267},"#传正数向后调多少位，传负数向前调多少位\n",[45,94389,94390],{"class":47,"line":1277},[45,94391,93615],{"class":267},[45,94393,94394],{"class":47,"line":1283},[45,94395,94396],{"class":267},"#array([3, 4, 1, 2])\n",[45,94398,94399,94401,94403,94405],{"class":47,"line":1297},[45,94400,94380],{"class":51},[45,94402,94],{"class":93},[45,94404,426],{"class":257},[45,94406,215],{"class":51},[45,94408,94409],{"class":47,"line":1303},[45,94410,93615],{"class":267},[45,94412,94413],{"class":47,"line":1394},[45,94414,94415],{"class":267},"#array([2, 3, 4, 1])\n",[10,94417,94418],{},[1545,94419],{"alt":40,"src":94420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[30,94422,94424],{"id":94423},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[10,94426,94427],{},"resize()重新调整数组的大小",[10,94429,94430],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[35,94432,94434],{"className":37,"code":94433,"language":39,"meta":40,"style":40},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[42,94435,94436,94441,94454],{"__ignoreMap":40},[45,94437,94438],{"class":47,"line":48},[45,94439,94440],{"class":267},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[45,94442,94443,94446,94448,94450,94452],{"class":47,"line":125},[45,94444,94445],{"class":51},"np.resize(aa,(",[45,94447,286],{"class":257},[45,94449,586],{"class":51},[45,94451,552],{"class":257},[45,94453,30578],{"class":51},[45,94455,94456,94458,94460,94462,94464,94466],{"class":47,"line":1262},[45,94457,94445],{"class":51},[45,94459,286],{"class":257},[45,94461,586],{"class":51},[45,94463,628],{"class":257},[45,94465,82852],{"class":51},[45,94467,94468],{"class":267},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[30,94470,94472],{"id":94471},"_125-placeput函数","12.5 place()\u002Fput()函数",[10,94474,94475],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[10,94477,94478],{},[1545,94479],{"alt":40,"src":94480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[30,94482,94484],{"id":94483},"_126-保存加载文件","12.6 保存加载文件",[10,94486,94487],{},"savetxt():将数据保存到txt文件中",[10,94489,94490],{},"loadtxt():从文件加载数据",[10,94492,94493],{},[1545,94494],{"alt":40,"src":94495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[30,94497,94499],{"id":94498},"_127-genfromtxt函数","12.7 genfromtxt()函数",[10,94501,94502],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[30,94504,94506],{"id":94505},"_128-anyall函数","12.8 any()\u002Fall()函数",[10,94508,94509],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[10,94511,94512],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[10,94514,94515],{},[1545,94516],{"alt":40,"src":94517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[30,94519,94521],{"id":94520},"_129-where语句","12.9 where语句",[10,94523,94524],{},"np.where(条件,x,y)",[10,94526,94527],{},"如果条件为True,对应值为x,否则对应值为y",[10,94529,94530],{},[1545,94531],{"alt":40,"src":94532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[30,94534,94536],{"id":94535},"_1210-dot矩阵","12.10 dot()矩阵",[10,94538,94539],{},[1545,94540],{"alt":40,"src":94541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[121,94543,94544],{},"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":40,"searchDepth":125,"depth":125,"links":94546},[94547,94548,94549,94550,94551,94552,94553,94554,94555,94556],{"id":93909,"depth":125,"text":93910},{"id":94132,"depth":125,"text":94133},{"id":94348,"depth":125,"text":94349},{"id":94423,"depth":125,"text":94424},{"id":94471,"depth":125,"text":94472},{"id":94483,"depth":125,"text":94484},{"id":94498,"depth":125,"text":94499},{"id":94505,"depth":125,"text":94506},{"id":94520,"depth":125,"text":94521},{"id":94535,"depth":125,"text":94536},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93901,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94563,"title":94564,"body":94565,"description":130,"extension":131,"meta":94918,"navigation":133,"path":94919,"seo":94920,"stem":94921,"__hash__":94922},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94566,"toc":94916},[94567,94570,94573,94576,94579,94582,94647,94649,94913],[20,94568,94564],{"id":94569},"_13数组排序",[10,94571,94572],{},"排序主要用到的方法是np.sort和np.argsort",[10,94574,94575],{},"其中np.sort()对数组直接排序",[10,94577,94578],{},"而np.argsort()是返回排序后的原始索引",[10,94580,94581],{},"①一维数组",[35,94583,94585],{"className":37,"code":94584,"language":39,"meta":40,"style":40},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[42,94586,94587,94591,94631,94639],{"__ignoreMap":40},[45,94588,94589],{"class":47,"line":48},[45,94590,93156],{"class":267},[45,94592,94593,94595,94597,94599,94601,94603,94605,94607,94609,94611,94613,94615,94617,94619,94621,94623,94625,94627,94629],{"class":47,"line":125},[45,94594,13],{"class":51},[45,94596,254],{"class":93},[45,94598,93075],{"class":51},[45,94600,280],{"class":257},[45,94602,586],{"class":51},[45,94604,706],{"class":257},[45,94606,586],{"class":51},[45,94608,603],{"class":257},[45,94610,586],{"class":51},[45,94612,982],{"class":257},[45,94614,586],{"class":51},[45,94616,487],{"class":257},[45,94618,586],{"class":51},[45,94620,1100],{"class":257},[45,94622,586],{"class":51},[45,94624,552],{"class":257},[45,94626,586],{"class":51},[45,94628,654],{"class":257},[45,94630,4740],{"class":51},[45,94632,94633,94636],{"class":47,"line":1262},[45,94634,94635],{"class":51},"np.sort(a)",[45,94637,94638],{"class":267},"#升序排序\n",[45,94640,94641,94644],{"class":47,"line":1277},[45,94642,94643],{"class":51},"np.argsort(a)",[45,94645,94646],{"class":267},"#按照元素大小来索引排序\n",[10,94648,93342],{},[35,94650,94652],{"className":37,"code":94651,"language":39,"meta":40,"style":40},"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",[42,94653,94654,94666,94692,94697,94701,94706,94711,94716,94721,94725,94733,94737,94742,94747,94752,94757,94761,94766,94779,94783,94788,94793,94798,94803,94807,94812,94824,94828,94832,94836,94840,94844,94848,94853,94868,94873,94882,94887,94891,94895,94900,94904,94909],{"__ignoreMap":40},[45,94655,94656,94659,94661,94663],{"class":47,"line":48},[45,94657,94658],{"class":51},"np.random.seed(",[45,94660,400],{"class":257},[45,94662,637],{"class":51},[45,94664,94665],{"class":267},"#保证每次值一样\n",[45,94667,94668,94670,94672,94674,94676,94678,94680,94682,94684,94686,94688,94690],{"class":47,"line":125},[45,94669,93357],{"class":51},[45,94671,254],{"class":93},[45,94673,93165],{"class":51},[45,94675,519],{"class":257},[45,94677,586],{"class":51},[45,94679,31577],{"class":5299},[45,94681,254],{"class":93},[45,94683,209],{"class":51},[45,94685,501],{"class":257},[45,94687,586],{"class":51},[45,94689,552],{"class":257},[45,94691,30578],{"class":51},[45,94693,94694],{"class":47,"line":1262},[45,94695,94696],{"class":267},"#原数组：\n",[45,94698,94699],{"class":47,"line":1277},[45,94700,93979],{"class":313},[45,94702,94703],{"class":47,"line":1283},[45,94704,94705],{"class":313},"array([[44, 47, 64, 67, 67,  9],\n",[45,94707,94708],{"class":47,"line":1297},[45,94709,94710],{"class":313},"       [83, 21, 36, 87, 70, 88],\n",[45,94712,94713],{"class":47,"line":1303},[45,94714,94715],{"class":313},"       [88, 12, 58, 65, 39, 87],\n",[45,94717,94718],{"class":47,"line":1394},[45,94719,94720],{"class":313},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[45,94722,94723],{"class":47,"line":1400},[45,94724,93979],{"class":313},[45,94726,94727,94730],{"class":47,"line":1412},[45,94728,94729],{"class":51},"np.sort(aa)",[45,94731,94732],{"class":267},"#每行进行了排序\n",[45,94734,94735],{"class":47,"line":1695},[45,94736,93979],{"class":313},[45,94738,94739],{"class":47,"line":1700},[45,94740,94741],{"class":313},"array([[ 9, 44, 47, 64, 67, 67],\n",[45,94743,94744],{"class":47,"line":1706},[45,94745,94746],{"class":313},"       [21, 36, 70, 83, 87, 88],\n",[45,94748,94749],{"class":47,"line":1711},[45,94750,94751],{"class":313},"       [12, 39, 58, 65, 87, 88],\n",[45,94753,94754],{"class":47,"line":1725},[45,94755,94756],{"class":313},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[45,94758,94759],{"class":47,"line":1730},[45,94760,93979],{"class":313},[45,94762,94763],{"class":47,"line":1736},[45,94764,94765],{"class":267},"#axis=0时\n",[45,94767,94768,94771,94773,94775,94777],{"class":47,"line":1757},[45,94769,94770],{"class":51},"np.sort(aa,",[45,94772,47595],{"class":5299},[45,94774,254],{"class":93},[45,94776,400],{"class":257},[45,94778,215],{"class":51},[45,94780,94781],{"class":47,"line":1762},[45,94782,93979],{"class":313},[45,94784,94785],{"class":47,"line":1776},[45,94786,94787],{"class":313},"array([[44, 12, 36, 37, 25,  9],\n",[45,94789,94790],{"class":47,"line":1781},[45,94791,94792],{"class":313},"       [46, 21, 58, 65, 39, 77],\n",[45,94794,94795],{"class":47,"line":1810},[45,94796,94797],{"class":313},"       [83, 47, 64, 67, 67, 87],\n",[45,94799,94800],{"class":47,"line":1815},[45,94801,94802],{"class":313},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[45,94804,94805],{"class":47,"line":1832},[45,94806,93979],{"class":313},[45,94808,94809],{"class":47,"line":1837},[45,94810,94811],{"class":267},"#axis=1时,为默认值\n",[45,94813,94814,94816,94818,94820,94822],{"class":47,"line":1842},[45,94815,94770],{"class":51},[45,94817,47595],{"class":5299},[45,94819,254],{"class":93},[45,94821,426],{"class":257},[45,94823,215],{"class":51},[45,94825,94826],{"class":47,"line":1847},[45,94827,93979],{"class":313},[45,94829,94830],{"class":47,"line":1861},[45,94831,94741],{"class":313},[45,94833,94834],{"class":47,"line":1866},[45,94835,94746],{"class":313},[45,94837,94838],{"class":47,"line":2660},[45,94839,94751],{"class":313},[45,94841,94842],{"class":47,"line":2674},[45,94843,94756],{"class":313},[45,94845,94846],{"class":47,"line":2682},[45,94847,93979],{"class":313},[45,94849,94850],{"class":47,"line":2687},[45,94851,94852],{"class":267},"#按最后一列排序\n",[45,94854,94855,94857,94859,94862,94864,94866],{"class":47,"line":2693},[45,94856,471],{"class":51},[45,94858,254],{"class":93},[45,94860,94861],{"class":51},"aa[:,",[45,94863,94],{"class":93},[45,94865,426],{"class":257},[45,94867,33327],{"class":51},[45,94869,94870],{"class":47,"line":2699},[45,94871,94872],{"class":267},"#获取最后一列排好序的索引\n",[45,94874,94875,94877,94879],{"class":47,"line":2704},[45,94876,74139],{"class":51},[45,94878,254],{"class":93},[45,94880,94881],{"class":51},"np.argsort(b)\n",[45,94883,94884],{"class":47,"line":8031},[45,94885,94886],{"class":51},"aa[index]\n",[45,94888,94889],{"class":47,"line":8055},[45,94890,93979],{"class":313},[45,94892,94893],{"class":47,"line":8060},[45,94894,94705],{"class":313},[45,94896,94897],{"class":47,"line":8066},[45,94898,94899],{"class":313},"       [46, 88, 81, 37, 25, 77],\n",[45,94901,94902],{"class":47,"line":8093},[45,94903,94715],{"class":313},[45,94905,94906],{"class":47,"line":8098},[45,94907,94908],{"class":313},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[45,94910,94911],{"class":47,"line":8104},[45,94912,93979],{"class":313},[121,94914,94915],{},"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":40,"searchDepth":125,"depth":125,"links":94917},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94564,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94924,"title":94925,"body":94926,"description":130,"extension":131,"meta":94956,"navigation":133,"path":94957,"seo":94958,"stem":94959,"__hash__":94960},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94927,"toc":94954},[94928,94931,94934,94937,94940,94943,94946,94949],[20,94929,94925],{"id":94930},"_14广播机制",[10,94932,94933],{},"广播的规则：",[10,94935,94936],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[10,94938,94939],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[10,94941,94942],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[10,94944,94945],{},"3.如果没有维度形状为1，则会引发异常",[10,94947,94948],{},"也就是只有维度或者个数为1才可以进行广播操作",[10,94950,94951],{},[1545,94952],{"alt":40,"src":94953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":40,"searchDepth":125,"depth":125,"links":94955},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94925,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94962,"title":94963,"body":94964,"description":130,"extension":131,"meta":95062,"navigation":133,"path":95063,"seo":95064,"stem":95065,"__hash__":95066},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94965,"toc":95060},[94966,94969,94972,95057],[20,94967,94963],{"id":94968},"_15比较掩码",[10,94970,94971],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[35,94973,94975],{"className":37,"code":94974,"language":39,"meta":40,"style":40},"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",[42,94976,94977,95023,95034,95048,95052],{"__ignoreMap":40},[45,94978,94979,94981,94983,94986,94988,94990,94992,94994,94996,94998,95000,95002,95004,95006,95008,95010,95012,95014,95016,95018,95020],{"class":47,"line":48},[45,94980,13],{"class":51},[45,94982,254],{"class":93},[45,94984,94985],{"class":51},"np.array([[",[45,94987,426],{"class":257},[45,94989,586],{"class":51},[45,94991,286],{"class":257},[45,94993,586],{"class":51},[45,94995,280],{"class":257},[45,94997,48111],{"class":51},[45,94999,680],{"class":257},[45,95001,586],{"class":51},[45,95003,706],{"class":257},[45,95005,586],{"class":51},[45,95007,731],{"class":257},[45,95009,48111],{"class":51},[45,95011,932],{"class":257},[45,95013,586],{"class":51},[45,95015,957],{"class":257},[45,95017,586],{"class":51},[45,95019,982],{"class":257},[45,95021,95022],{"class":51},"]])\n",[45,95024,95025,95027,95029,95031],{"class":47,"line":125},[45,95026,13],{"class":51},[45,95028,1117],{"class":93},[45,95030,907],{"class":257},[45,95032,95033],{"class":267},"#结果是一个由True,False组成的数组\n",[45,95035,95036,95039,95041,95043,95045],{"class":47,"line":1262},[45,95037,95038],{"class":51},"a[a",[45,95040,1117],{"class":93},[45,95042,907],{"class":257},[45,95044,1147],{"class":51},[45,95046,95047],{"class":267},"#小于20的元素会存到这个数组中\n",[45,95049,95050],{"class":47,"line":1277},[45,95051,93615],{"class":267},[45,95053,95054],{"class":47,"line":1283},[45,95055,95056],{"class":267},"#array([ 1,  2,  3, 11, 12, 13])\n",[121,95058,95059],{},"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":40,"searchDepth":125,"depth":125,"links":95061},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94963,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95068,"title":95069,"body":95070,"description":130,"extension":131,"meta":95162,"navigation":133,"path":95163,"seo":95164,"stem":95165,"__hash__":95166},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95071,"toc":95160},[95072,95075,95078,95081,95084,95087,95152,95157],[20,95073,95069],{"id":95074},"_16魔法命令time",[10,95076,95077],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[10,95079,95080],{},"%:行模式",[10,95082,95083],{},"%%:单元格模式",[10,95085,95086],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[35,95088,95090],{"className":37,"code":95089,"language":39,"meta":40,"style":40},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[42,95091,95092,95097,95104,95109,95118,95131,95135,95143],{"__ignoreMap":40},[45,95093,95094],{"class":47,"line":48},[45,95095,95096],{"class":267},"#程序执行时间\n",[45,95098,95099,95101],{"class":47,"line":125},[45,95100,30473],{"class":93},[45,95102,95103],{"class":51}," time \n",[45,95105,95106],{"class":47,"line":1262},[45,95107,95108],{"class":267},"#获取时间\n",[45,95110,95111,95114,95116],{"class":47,"line":1277},[45,95112,95113],{"class":51},"start",[45,95115,254],{"class":93},[45,95117,32499],{"class":51},[45,95119,95120,95123,95126,95128],{"class":47,"line":1283},[45,95121,95122],{"class":51},"time.sleep(",[45,95124,95125],{"class":257},"0.4",[45,95127,637],{"class":51},[45,95129,95130],{"class":267},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[45,95132,95133],{"class":47,"line":1297},[45,95134,95108],{"class":267},[45,95136,95137,95139,95141],{"class":47,"line":1303},[45,95138,45882],{"class":51},[45,95140,254],{"class":93},[45,95142,32499],{"class":51},[45,95144,95145,95147,95149],{"class":47,"line":1394},[45,95146,45882],{"class":51},[45,95148,94],{"class":93},[45,95150,95151],{"class":51},"start\n",[10,95153,95154],{},[1545,95155],{"alt":40,"src":95156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[121,95158,95159],{},"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":40,"searchDepth":125,"depth":125,"links":95161},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95069,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95168,"title":95169,"body":95170,"description":130,"extension":131,"meta":95205,"navigation":133,"path":95206,"seo":95207,"stem":95208,"__hash__":95209},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95171,"toc":95203},[95172,95175,95178,95181,95184,95187,95190,95193,95198],[20,95173,95169],{"id":95174},"_17魔法命令timeit",[10,95176,95177],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[10,95179,95180],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[10,95182,95183],{},"单元格模式：",[10,95185,95186],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[10,95188,95189],{},"初始化语句执行次数由轮数来决定",[10,95191,95192],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[10,95194,95195],{},[1545,95196],{"alt":40,"src":95197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[10,95199,95200],{},[1545,95201],{"alt":40,"src":95202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":40,"searchDepth":125,"depth":125,"links":95204},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95169,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95211,"title":95212,"body":95213,"description":130,"extension":131,"meta":95231,"navigation":133,"path":95232,"seo":95233,"stem":95234,"__hash__":95235},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95214,"toc":95229},[95215,95218,95221,95224],[20,95216,95212],{"id":95217},"_18魔法命令writefile和run",[10,95219,95220],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[10,95222,95223],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[10,95225,95226],{},[1545,95227],{"alt":40,"src":95228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":40,"searchDepth":125,"depth":125,"links":95230},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95212,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95237,"title":95238,"body":95239,"description":130,"extension":131,"meta":95292,"navigation":133,"path":95293,"seo":95294,"stem":95295,"__hash__":95296},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95240,"toc":95290},[95241,95244,95247,95249,95252,95255,95260,95263,95266,95269,95272,95275,95278,95281,95284,95287],[20,95242,95238],{"id":95243},"_19魔法命令memit",[10,95245,95246],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[10,95248,24682],{},[10,95250,95251],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[10,95253,95254],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[10,95256,95257],{},[1545,95258],{"alt":40,"src":95259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[10,95261,95262],{},"补充：",[10,95264,95265],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[10,95267,95268],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[10,95270,95271],{},"解决方法：",[10,95273,95274],{},"1.cmd",[10,95276,95277],{},"2.依次输入以下代码：",[10,95279,95280],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[10,95282,95283],{},"pip install --upgrade ipython",[10,95285,95286],{},"#升级 memory_profiler 和 setuptools",[10,95288,95289],{},"pip install --upgrade memory_profiler setuptools",{"title":40,"searchDepth":125,"depth":125,"links":95291},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95238,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95298,"title":95299,"body":95300,"description":130,"extension":131,"meta":96946,"navigation":133,"path":96947,"seo":96948,"stem":96949,"__hash__":96950},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95301,"toc":96916},[95302,95305,95309,95313,95374,95377,95382,95386,95391,95396,95401,95406,95409,95414,95418,95422,95455,95458,95461,95464,95516,95519,95555,95558,95600,95604,95625,95627,95664,95666,95671,95673,95678,95682,95685,95713,95717,95721,95774,95778,95870,95874,95878,95881,95886,95890,95915,95920,95924,95927,95930,95933,95936,95939,95942,95945,95957,95961,95965,95968,96000,96003,96026,96029,96055,96058,96084,96087,96121,96124,96186,96190,96193,96197,96200,96226,96229,96232,96237,96240,96309,96311,96316,96377,96380,96391,96397,96402,96406,96409,96422,96426,96441,96443,96466,96468,96494,96497,96500,96503,96551,96553,96558,96562,96566,96593,96597,96624,96627,96632,96637,96727,96731,96789,96794,96797,96800,96842,96846,96902,96907,96910,96913],[20,95303,95299],{"id":95304},"_2创建数组",[30,95306,95308],{"id":95307},"_21-array函数创建数组","2.1 array()函数创建数组",[176,95310,95312],{"id":95311},"_221-函数语句","2.2.1 函数语句",[35,95314,95316],{"className":37,"code":95315,"language":39,"meta":40,"style":40},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[42,95317,95318],{"__ignoreMap":40},[45,95319,95320,95323,95326,95328,95330,95332,95334,95336,95339,95341,95344,95346,95349,95351,95353,95355,95358,95360,95363,95365,95368,95370,95372],{"class":47,"line":48},[45,95321,95322],{"class":51},"numpy.array(",[45,95324,95325],{"class":257},"object",[45,95327,12518],{"class":51},[45,95329,93551],{"class":5299},[45,95331,13647],{"class":93},[45,95333,39014],{"class":257},[45,95335,12518],{"class":51},[45,95337,95338],{"class":5299},"copy",[45,95340,13647],{"class":93},[45,95342,95343],{"class":257}," True",[45,95345,12518],{"class":51},[45,95347,95348],{"class":5299},"order",[45,95350,13647],{"class":93},[45,95352,39014],{"class":257},[45,95354,12518],{"class":51},[45,95356,95357],{"class":5299},"subok",[45,95359,13647],{"class":93},[45,95361,95362],{"class":257}," False",[45,95364,12518],{"class":51},[45,95366,95367],{"class":5299},"ndmin",[45,95369,13647],{"class":93},[45,95371,4176],{"class":257},[45,95373,215],{"class":51},[10,95375,95376],{},"参数：",[10,95378,95379],{},[1545,95380],{"alt":40,"src":95381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[176,95383,95385],{"id":95384},"_222-实例","2.2.2 实例",[10,95387,95388],{},[1545,95389],{"alt":40,"src":95390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[10,95392,95393],{},[1545,95394],{"alt":40,"src":95395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[10,95397,95398],{},[1545,95399],{"alt":40,"src":95400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[10,95402,95403],{},[1545,95404],{"alt":40,"src":95405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[10,95407,95408],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[10,95410,95411],{},[1545,95412],{"alt":40,"src":95413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[30,95415,95417],{"id":95416},"_22-随机数创建数组","2.2 随机数创建数组",[176,95419,95421],{"id":95420},"_221-random语句","2.2.1 random语句",[35,95423,95425],{"className":37,"code":95424,"language":39,"meta":40,"style":40},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[42,95426,95427,95432,95437,95445,95450],{"__ignoreMap":40},[45,95428,95429],{"class":47,"line":48},[45,95430,95431],{"class":267},"#random.random()\n",[45,95433,95434],{"class":47,"line":125},[45,95435,95436],{"class":267},"#确定随机种子,就是每次运行结果是相同的\n",[45,95438,95439,95441,95443],{"class":47,"line":1262},[45,95440,94658],{"class":51},[45,95442,400],{"class":257},[45,95444,215],{"class":51},[45,95446,95447],{"class":47,"line":1277},[45,95448,95449],{"class":51},"np.random.random()\n",[45,95451,95452],{"class":47,"line":1283},[45,95453,95454],{"class":267},"#生成一个随机的数目\n",[10,95456,95457],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[10,95459,95460],{},"可以指定数组形状 size",[10,95462,95463],{},"①生成一维数组",[35,95465,95467],{"className":37,"code":95466,"language":39,"meta":40,"style":40},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[42,95468,95469,95474,95487,95492,95508],{"__ignoreMap":40},[45,95470,95471],{"class":47,"line":48},[45,95472,95473],{"class":267},"#random.random(size())\n",[45,95475,95476,95479,95481,95483,95485],{"class":47,"line":125},[45,95477,95478],{"class":51},"np.random.random(",[45,95480,31577],{"class":5299},[45,95482,254],{"class":93},[45,95484,527],{"class":257},[45,95486,215],{"class":51},[45,95488,95489],{"class":47,"line":1262},[45,95490,95491],{"class":267},"#生成一位的五个元素\n",[45,95493,95494,95496,95498,95500,95502,95504,95506],{"class":47,"line":1277},[45,95495,13],{"class":51},[45,95497,254],{"class":93},[45,95499,95478],{"class":51},[45,95501,31577],{"class":5299},[45,95503,254],{"class":93},[45,95505,501],{"class":257},[45,95507,215],{"class":51},[45,95509,95510,95513],{"class":47,"line":1283},[45,95511,95512],{"class":51},"a.shape ",[45,95514,95515],{"class":267},"#输出数组形状\n",[10,95517,95518],{},"②生成二维数组",[35,95520,95522],{"className":37,"code":95521,"language":39,"meta":40,"style":40},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[42,95523,95524,95528,95550],{"__ignoreMap":40},[45,95525,95526],{"class":47,"line":48},[45,95527,93352],{"class":267},[45,95529,95530,95532,95534,95536,95538,95540,95542,95544,95546,95548],{"class":47,"line":125},[45,95531,93357],{"class":51},[45,95533,254],{"class":93},[45,95535,95478],{"class":51},[45,95537,31577],{"class":5299},[45,95539,254],{"class":93},[45,95541,209],{"class":51},[45,95543,501],{"class":257},[45,95545,586],{"class":51},[45,95547,527],{"class":257},[45,95549,30578],{"class":51},[45,95551,95552],{"class":47,"line":1262},[45,95553,95554],{"class":267},"#生成四行五列的数组\n",[10,95556,95557],{},"③生成三维数组",[35,95559,95561],{"className":37,"code":95560,"language":39,"meta":40,"style":40},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[42,95562,95563,95568,95595],{"__ignoreMap":40},[45,95564,95565],{"class":47,"line":48},[45,95566,95567],{"class":267},"#三维数组\n",[45,95569,95570,95573,95575,95577,95579,95581,95583,95585,95587,95589,95591,95593],{"class":47,"line":125},[45,95571,95572],{"class":51},"aaa",[45,95574,254],{"class":93},[45,95576,95478],{"class":51},[45,95578,31577],{"class":5299},[45,95580,254],{"class":93},[45,95582,209],{"class":51},[45,95584,286],{"class":257},[45,95586,586],{"class":51},[45,95588,280],{"class":257},[45,95590,586],{"class":51},[45,95592,501],{"class":257},[45,95594,30578],{"class":51},[45,95596,95597],{"class":47,"line":1262},[45,95598,95599],{"class":51},"aaa.shape\n",[176,95601,95603],{"id":95602},"_222-randint语句","2.2.2 randint语句",[35,95605,95607],{"className":37,"code":95606,"language":39,"meta":40,"style":40},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[42,95608,95609,95614],{"__ignoreMap":40},[45,95610,95611],{"class":47,"line":48},[45,95612,95613],{"class":267},"#生成随机的整数 random.randint(low,high,size)\n",[45,95615,95616,95618,95620,95622],{"class":47,"line":125},[45,95617,93165],{"class":51},[45,95619,527],{"class":257},[45,95621,13797],{"class":51},[45,95623,95624],{"class":267},"#0~5中的随机一个数\n",[10,95626,95463],{},[35,95628,95630],{"className":37,"code":95629,"language":39,"meta":40,"style":40},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[42,95631,95632,95637,95659],{"__ignoreMap":40},[45,95633,95634],{"class":47,"line":48},[45,95635,95636],{"class":267},"#一维\n",[45,95638,95639,95641,95643,95645,95647,95649,95651,95653,95655,95657],{"class":47,"line":125},[45,95640,93165],{"class":51},[45,95642,426],{"class":257},[45,95644,586],{"class":51},[45,95646,680],{"class":257},[45,95648,586],{"class":51},[45,95650,31577],{"class":5299},[45,95652,254],{"class":93},[45,95654,209],{"class":51},[45,95656,654],{"class":257},[45,95658,30578],{"class":51},[45,95660,95661],{"class":47,"line":1262},[45,95662,95663],{"class":267},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[10,95665,95518],{},[10,95667,95668],{},[1545,95669],{"alt":40,"src":95670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[10,95672,95557],{},[10,95674,95675],{},[1545,95676],{"alt":40,"src":95677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[176,95679,95681],{"id":95680},"_222-rand语句","2.2.2 rand语句",[10,95683,95684],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[35,95686,95688],{"className":37,"code":95687,"language":39,"meta":40,"style":40},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[42,95689,95690,95703,95708],{"__ignoreMap":40},[45,95691,95692,95695,95697,95699,95701],{"class":47,"line":48},[45,95693,95694],{"class":51},"np.random.rand(",[45,95696,519],{"class":257},[45,95698,586],{"class":51},[45,95700,654],{"class":257},[45,95702,215],{"class":51},[45,95704,95705],{"class":47,"line":125},[45,95706,95707],{"class":267},"#第一个参数100：行数，表示有100个样本\n",[45,95709,95710],{"class":47,"line":1262},[45,95711,95712],{"class":267},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[30,95714,95716],{"id":95715},"_23-arange创建数组","2.3 arange()创建数组",[176,95718,95720],{"id":95719},"_231-函数语句","2.3.1 函数语句",[35,95722,95724],{"className":37,"code":95723,"language":39,"meta":40,"style":40},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[42,95725,95726,95740,95745,95750,95755,95760,95765,95770],{"__ignoreMap":40},[45,95727,95728,95731,95733,95735,95738],{"class":47,"line":48},[45,95729,95730],{"class":51},"numpy.arange([start,] stop[, step], ",[45,95732,93551],{"class":5299},[45,95734,254],{"class":93},[45,95736,95737],{"class":257},"None",[45,95739,215],{"class":51},[45,95741,95742],{"class":47,"line":125},[45,95743,95744],{"class":267},"#参数\n",[45,95746,95747],{"class":47,"line":1262},[45,95748,95749],{"class":313},"\"\"\"\n",[45,95751,95752],{"class":47,"line":1277},[45,95753,95754],{"class":313},"start:起始值，可选，默认从 0 开始。\n",[45,95756,95757],{"class":47,"line":1283},[45,95758,95759],{"class":313},"stop:结束值（不包含该值）。\n",[45,95761,95762],{"class":47,"line":1297},[45,95763,95764],{"class":313},"step:步长，可选，默认是 1。可以为浮点数。\n",[45,95766,95767],{"class":47,"line":1303},[45,95768,95769],{"class":313},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[45,95771,95772],{"class":47,"line":1394},[45,95773,95749],{"class":313},[176,95775,95777],{"id":95776},"_232-实例","2.3.2 实例",[35,95779,95781],{"className":37,"code":95780,"language":39,"meta":40,"style":40},"#创建一维数组\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",[42,95782,95783,95787,95811,95816,95821,95825,95848,95852,95856,95861,95866],{"__ignoreMap":40},[45,95784,95785],{"class":47,"line":48},[45,95786,93156],{"class":267},[45,95788,95789,95791,95793,95795,95797,95799,95801,95803,95805,95807,95809],{"class":47,"line":125},[45,95790,93053],{"class":51},[45,95792,426],{"class":257},[45,95794,586],{"class":51},[45,95796,932],{"class":257},[45,95798,586],{"class":51},[45,95800,426],{"class":257},[45,95802,586],{"class":51},[45,95804,93551],{"class":5299},[45,95806,254],{"class":93},[45,95808,212],{"class":257},[45,95810,215],{"class":51},[45,95812,95813],{"class":47,"line":1262},[45,95814,95815],{"class":267},"#输出结果：\n",[45,95817,95818],{"class":47,"line":1277},[45,95819,95820],{"class":267},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[45,95822,95823],{"class":47,"line":1283},[45,95824,93998],{"class":267},[45,95826,95827,95830,95832,95834,95836,95839,95841,95843,95845],{"class":47,"line":1297},[45,95828,95829],{"class":51},"np.array([np.arange(",[45,95831,426],{"class":257},[45,95833,586],{"class":51},[45,95835,501],{"class":257},[45,95837,95838],{"class":51},"),np.arange(",[45,95840,501],{"class":257},[45,95842,586],{"class":51},[45,95844,577],{"class":257},[45,95846,95847],{"class":51},")])\n",[45,95849,95850],{"class":47,"line":1303},[45,95851,93615],{"class":267},[45,95853,95854],{"class":47,"line":1394},[45,95855,95749],{"class":313},[45,95857,95858],{"class":47,"line":1400},[45,95859,95860],{"class":313},"array([[1, 2, 3],\n",[45,95862,95863],{"class":47,"line":1412},[45,95864,95865],{"class":313},"       [4, 5, 6]])\n",[45,95867,95868],{"class":47,"line":1695},[45,95869,95749],{"class":313},[30,95871,95873],{"id":95872},"_24-生态分布","2.4 生态分布",[176,95875,95877],{"id":95876},"_241-标准正态分布","2.4.1 标准正态分布",[10,95879,95880],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[10,95882,95883],{},[1545,95884],{"alt":40,"src":95885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[176,95887,95889],{"id":95888},"_242-常规正态分布","2.4.2 常规正态分布",[35,95891,95893],{"className":37,"code":95892,"language":39,"meta":40,"style":40},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[42,95894,95895,95900,95905,95910],{"__ignoreMap":40},[45,95896,95897],{"class":47,"line":48},[45,95898,95899],{"class":51},"random.normal(loc,scale,size)也可以生成正态分布\n",[45,95901,95902],{"class":47,"line":125},[45,95903,95904],{"class":267},"#loc:期望\n",[45,95906,95907],{"class":47,"line":1262},[45,95908,95909],{"class":267},"#scale:方差\n",[45,95911,95912],{"class":47,"line":1277},[45,95913,95914],{"class":267},"#size:用于确定是几维的数列\n",[10,95916,95917],{},[1545,95918],{"alt":40,"src":95919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[30,95921,95923],{"id":95922},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[10,95925,95926],{},"ndim:秩，维度个数",[10,95928,95929],{},"size:数组元素的个数",[10,95931,95932],{},"shape:数组的形状",[10,95934,95935],{},"dtype:数组元素的类型",[10,95937,95938],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[10,95940,95941],{},"他们都是属性，通过数组.属性的形式来确定",[10,95943,95944],{},"如果需要输出多个可以通过以下方式：",[35,95946,95948],{"className":37,"code":95947,"language":39,"meta":40,"style":40},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[42,95949,95950],{"__ignoreMap":40},[45,95951,95952,95954],{"class":47,"line":48},[45,95953,30496],{"class":257},[45,95955,95956],{"class":51},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[30,95958,95960],{"id":95959},"_26-其他方式创建数组","2.6 其他方式创建数组",[176,95962,95964],{"id":95963},"_261-zeros创建数组","2.6.1 zeros()创建数组",[10,95966,95967],{},"①创建一维数组",[35,95969,95971],{"className":37,"code":95970,"language":39,"meta":40,"style":40},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[42,95972,95973,95982,95986,95991,95996],{"__ignoreMap":40},[45,95974,95975,95978,95980],{"class":47,"line":48},[45,95976,95977],{"class":51},"np.zeros(",[45,95979,654],{"class":257},[45,95981,215],{"class":51},[45,95983,95984],{"class":47,"line":125},[45,95985,95749],{"class":313},[45,95987,95988],{"class":47,"line":1262},[45,95989,95990],{"class":313},"输出结果：\n",[45,95992,95993],{"class":47,"line":1277},[45,95994,95995],{"class":313},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[45,95997,95998],{"class":47,"line":1283},[45,95999,95749],{"class":313},[10,96001,96002],{},"上方代码等价于：",[35,96004,96006],{"className":37,"code":96005,"language":39,"meta":40,"style":40},"np.zeros(shape=(10))#创建10个元素的0数组\n",[42,96007,96008],{"__ignoreMap":40},[45,96009,96010,96012,96015,96017,96019,96021,96023],{"class":47,"line":48},[45,96011,95977],{"class":51},[45,96013,96014],{"class":5299},"shape",[45,96016,254],{"class":93},[45,96018,209],{"class":51},[45,96020,654],{"class":257},[45,96022,82852],{"class":51},[45,96024,96025],{"class":267},"#创建10个元素的0数组\n",[10,96027,96028],{},"也可以指定类型",[35,96030,96032],{"className":37,"code":96031,"language":39,"meta":40,"style":40},"#指定类型\nnp.zeros(5,dtype=int)\n",[42,96033,96034,96039],{"__ignoreMap":40},[45,96035,96036],{"class":47,"line":48},[45,96037,96038],{"class":267},"#指定类型\n",[45,96040,96041,96043,96045,96047,96049,96051,96053],{"class":47,"line":125},[45,96042,95977],{"class":51},[45,96044,527],{"class":257},[45,96046,586],{"class":51},[45,96048,93551],{"class":5299},[45,96050,254],{"class":93},[45,96052,212],{"class":257},[45,96054,215],{"class":51},[10,96056,96057],{},"②创建二维数组",[35,96059,96061],{"className":37,"code":96060,"language":39,"meta":40,"style":40},"np.zeros((3,4),dtype=int)\n",[42,96062,96063],{"__ignoreMap":40},[45,96064,96065,96068,96070,96072,96074,96076,96078,96080,96082],{"class":47,"line":48},[45,96066,96067],{"class":51},"np.zeros((",[45,96069,280],{"class":257},[45,96071,586],{"class":51},[45,96073,501],{"class":257},[45,96075,42337],{"class":51},[45,96077,93551],{"class":5299},[45,96079,254],{"class":93},[45,96081,212],{"class":257},[45,96083,215],{"class":51},[10,96085,96086],{},"③创建三维数组",[35,96088,96090],{"className":37,"code":96089,"language":39,"meta":40,"style":40},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[42,96091,96092,96097],{"__ignoreMap":40},[45,96093,96094],{"class":47,"line":48},[45,96095,96096],{"class":267},"#创建三维数组\n",[45,96098,96099,96101,96103,96105,96107,96109,96111,96113,96115,96117,96119],{"class":47,"line":125},[45,96100,96067],{"class":51},[45,96102,280],{"class":257},[45,96104,586],{"class":51},[45,96106,501],{"class":257},[45,96108,586],{"class":51},[45,96110,527],{"class":257},[45,96112,42337],{"class":51},[45,96114,93551],{"class":5299},[45,96116,254],{"class":93},[45,96118,212],{"class":257},[45,96120,215],{"class":51},[10,96122,96123],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[35,96125,96127],{"className":37,"code":96126,"language":39,"meta":40,"style":40},"#使用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",[42,96128,96129,96134,96149,96154,96159,96181],{"__ignoreMap":40},[45,96130,96131],{"class":47,"line":48},[45,96132,96133],{"class":267},"#使用zeros_like将创建的一维数组变成全0的数组\n",[45,96135,96136,96138,96140,96142,96144,96146],{"class":47,"line":125},[45,96137,13],{"class":51},[45,96139,254],{"class":93},[45,96141,93053],{"class":51},[45,96143,501],{"class":257},[45,96145,637],{"class":51},[45,96147,96148],{"class":267},"#这个得到的结果：一维数组0，1，2，3\n",[45,96150,96151],{"class":47,"line":1262},[45,96152,96153],{"class":51},"np.zeros_like(a)\n",[45,96155,96156],{"class":47,"line":1277},[45,96157,96158],{"class":267},"#使用zeros_like将创建的二维数组变成全0的数组\n",[45,96160,96161,96163,96165,96167,96169,96171,96173,96175,96177,96179],{"class":47,"line":1283},[45,96162,93357],{"class":51},[45,96164,254],{"class":93},[45,96166,95478],{"class":51},[45,96168,31577],{"class":5299},[45,96170,254],{"class":93},[45,96172,209],{"class":51},[45,96174,501],{"class":257},[45,96176,586],{"class":51},[45,96178,527],{"class":257},[45,96180,30578],{"class":51},[45,96182,96183],{"class":47,"line":1297},[45,96184,96185],{"class":51},"np.zeros_like(aa)\n",[176,96187,96189],{"id":96188},"_262-ones创建数组","2.6.2 ones()创建数组",[10,96191,96192],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[176,96194,96196],{"id":96195},"_263-empty创建数组","2.6.3 empty()创建数组",[10,96198,96199],{},"①empty()用法",[35,96201,96203],{"className":37,"code":96202,"language":39,"meta":40,"style":40},"numpy.empty(shape,dtype=float,order='c')\n",[42,96204,96205],{"__ignoreMap":40},[45,96206,96207,96210,96212,96214,96216,96218,96220,96222,96224],{"class":47,"line":48},[45,96208,96209],{"class":51},"numpy.empty(shape,",[45,96211,93551],{"class":5299},[45,96213,254],{"class":93},[45,96215,248],{"class":257},[45,96217,586],{"class":51},[45,96219,95348],{"class":5299},[45,96221,254],{"class":93},[45,96223,76109],{"class":313},[45,96225,215],{"class":51},[10,96227,96228],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[10,96230,96231],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[10,96233,96234],{},[1545,96235],{"alt":40,"src":96236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[10,96238,96239],{},"②empty()用法",[35,96241,96243],{"className":37,"code":96242,"language":39,"meta":40,"style":40},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[42,96244,96245,96266,96278,96299,96304],{"__ignoreMap":40},[45,96246,96247,96249,96251,96254,96256,96258,96260,96262,96264],{"class":47,"line":48},[45,96248,1052],{"class":51},[45,96250,254],{"class":93},[45,96252,96253],{"class":51},"np.empty(",[45,96255,654],{"class":257},[45,96257,586],{"class":51},[45,96259,93551],{"class":5299},[45,96261,254],{"class":93},[45,96263,212],{"class":257},[45,96265,215],{"class":51},[45,96267,96268,96270,96272,96274,96276],{"class":47,"line":125},[45,96269,1027],{"class":51},[45,96271,254],{"class":93},[45,96273,93053],{"class":51},[45,96275,527],{"class":257},[45,96277,215],{"class":51},[45,96279,96280,96283,96285,96288,96290,96292,96295,96297],{"class":47,"line":1262},[45,96281,96282],{"class":51},"np.add(",[45,96284,286],{"class":257},[45,96286,96287],{"class":51},",x,",[45,96289,93105],{"class":5299},[45,96291,254],{"class":93},[45,96293,96294],{"class":51},"y[:",[45,96296,527],{"class":257},[45,96298,4740],{"class":51},[45,96300,96301],{"class":47,"line":1277},[45,96302,96303],{"class":267},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[45,96305,96306],{"class":47,"line":1283},[45,96307,96308],{"class":51},"y\n",[10,96310,11597],{},[10,96312,96313],{},[1545,96314],{"alt":40,"src":96315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[35,96317,96319],{"className":37,"code":96318,"language":39,"meta":40,"style":40},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[42,96320,96321,96337,96357,96372],{"__ignoreMap":40},[45,96322,96323,96325,96327,96329,96331,96333,96335],{"class":47,"line":48},[45,96324,1027],{"class":51},[45,96326,254],{"class":93},[45,96328,93053],{"class":51},[45,96330,426],{"class":257},[45,96332,586],{"class":51},[45,96334,552],{"class":257},[45,96336,215],{"class":51},[45,96338,96339,96341,96343,96345,96347,96349,96351,96353,96355],{"class":47,"line":125},[45,96340,1052],{"class":51},[45,96342,254],{"class":93},[45,96344,96253],{"class":51},[45,96346,527],{"class":257},[45,96348,586],{"class":51},[45,96350,93551],{"class":5299},[45,96352,254],{"class":93},[45,96354,212],{"class":257},[45,96356,215],{"class":51},[45,96358,96359,96362,96364,96366,96368,96370],{"class":47,"line":1262},[45,96360,96361],{"class":51},"np.add(x,",[45,96363,286],{"class":257},[45,96365,586],{"class":51},[45,96367,93105],{"class":5299},[45,96369,254],{"class":93},[45,96371,93500],{"class":51},[45,96373,96374],{"class":47,"line":1277},[45,96375,96376],{"class":267},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[10,96378,96379],{},"③empty_like()",[10,96381,96382],{},[358,96383,96384,96385,96390],{},"创建一个",[358,96386,96387],{},[358,96388,96389],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[10,96392,96393,96396],{},[42,96394,96395],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[10,96398,96399],{},[1545,96400],{"alt":40,"src":96401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[176,96403,96405],{"id":96404},"_264-用法","2.6.4 ？？用法",[10,96407,96408],{},"当想查看一个函数的参数时，可以通过？？来实现",[35,96410,96412],{"className":37,"code":96411,"language":39,"meta":40,"style":40},"np.full??\n",[42,96413,96414],{"__ignoreMap":40},[45,96415,96416,96419],{"class":47,"line":48},[45,96417,96418],{"class":51},"np.full",[45,96420,96421],{"class":77484},"??\n",[176,96423,96425],{"id":96424},"_265-full创建数组","2.6.5 full()创建数组",[35,96427,96429],{"className":37,"code":96428,"language":39,"meta":40,"style":40},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[42,96430,96431,96436],{"__ignoreMap":40},[45,96432,96433],{"class":47,"line":48},[45,96434,96435],{"class":51},"full(shape,fill_value)\n",[45,96437,96438],{"class":47,"line":125},[45,96439,96440],{"class":51},"创建全为某个指定值的数组\n",[10,96442,94581],{},[35,96444,96446],{"className":37,"code":96445,"language":39,"meta":40,"style":40},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[42,96447,96448,96453],{"__ignoreMap":40},[45,96449,96450],{"class":47,"line":48},[45,96451,96452],{"class":267},"#创建一个一维数组,以20进行填充\n",[45,96454,96455,96458,96460,96462,96464],{"class":47,"line":125},[45,96456,96457],{"class":51},"np.full(",[45,96459,654],{"class":257},[45,96461,586],{"class":51},[45,96463,907],{"class":257},[45,96465,215],{"class":51},[10,96467,93342],{},[35,96469,96471],{"className":37,"code":96470,"language":39,"meta":40,"style":40},"#创建二维数组\nnp.full((3,5),11)\n",[42,96472,96473,96477],{"__ignoreMap":40},[45,96474,96475],{"class":47,"line":48},[45,96476,93998],{"class":267},[45,96478,96479,96482,96484,96486,96488,96490,96492],{"class":47,"line":125},[45,96480,96481],{"class":51},"np.full((",[45,96483,280],{"class":257},[45,96485,586],{"class":51},[45,96487,527],{"class":257},[45,96489,42337],{"class":51},[45,96491,680],{"class":257},[45,96493,215],{"class":51},[10,96495,96496],{},"③full_like用法",[10,96498,96499],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[10,96501,96502],{},"这里是指定填充而已",[35,96504,96506],{"className":37,"code":96505,"language":39,"meta":40,"style":40},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[42,96507,96508,96513,96537,96542],{"__ignoreMap":40},[45,96509,96510],{"class":47,"line":48},[45,96511,96512],{"class":267},"#创建一个指定形状数组\n",[45,96514,96515,96517,96519,96521,96523,96525,96527,96529,96531,96533,96535],{"class":47,"line":125},[45,96516,13],{"class":51},[45,96518,254],{"class":93},[45,96520,93053],{"class":51},[45,96522,426],{"class":257},[45,96524,586],{"class":51},[45,96526,533],{"class":257},[45,96528,93058],{"class":51},[45,96530,501],{"class":257},[45,96532,586],{"class":51},[45,96534,628],{"class":257},[45,96536,215],{"class":51},[45,96538,96539],{"class":47,"line":1262},[45,96540,96541],{"class":267},"#进行指定填充\n",[45,96543,96544,96547,96549],{"class":47,"line":1277},[45,96545,96546],{"class":51},"np.full_like(a,",[45,96548,654],{"class":257},[45,96550,215],{"class":51},[10,96552,11597],{},[10,96554,96555],{},[1545,96556],{"alt":40,"src":96557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[176,96559,96561],{"id":96560},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22081,96563,96565],{"id":96564},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[35,96567,96569],{"className":37,"code":96568,"language":39,"meta":40,"style":40},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[42,96570,96571,96588],{"__ignoreMap":40},[45,96572,96573,96576,96578,96580,96582,96584,96586],{"class":47,"line":48},[45,96574,96575],{"class":51},"np.eye(",[45,96577,501],{"class":257},[45,96579,586],{"class":51},[45,96581,93551],{"class":5299},[45,96583,254],{"class":93},[45,96585,212],{"class":257},[45,96587,215],{"class":51},[45,96589,96590],{"class":47,"line":125},[45,96591,96592],{"class":267},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22081,96594,96596],{"id":96595},"_2662-法2identity","2.6.6.2 法2：identity()",[35,96598,96600],{"className":37,"code":96599,"language":39,"meta":40,"style":40},"#identity()\nnp.identity(5,dtype=int)\n",[42,96601,96602,96607],{"__ignoreMap":40},[45,96603,96604],{"class":47,"line":48},[45,96605,96606],{"class":267},"#identity()\n",[45,96608,96609,96612,96614,96616,96618,96620,96622],{"class":47,"line":125},[45,96610,96611],{"class":51},"np.identity(",[45,96613,527],{"class":257},[45,96615,586],{"class":51},[45,96617,93551],{"class":5299},[45,96619,254],{"class":93},[45,96621,212],{"class":257},[45,96623,215],{"class":51},[10,96625,96626],{},"两个函数是有区别的",[10,96628,96629],{},[1545,96630],{"alt":40,"src":96631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[10,96633,96634],{},[1545,96635],{"alt":40,"src":96636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[35,96638,96640],{"className":37,"code":96639,"language":39,"meta":40,"style":40},"# 创建一个 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",[42,96641,96642,96647,96659,96664,96669,96674,96679,96683,96688,96708,96712,96717,96722],{"__ignoreMap":40},[45,96643,96644],{"class":47,"line":48},[45,96645,96646],{"class":267},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[45,96648,96649,96651,96653,96655,96657],{"class":47,"line":125},[45,96650,96575],{"class":51},[45,96652,280],{"class":257},[45,96654,12518],{"class":51},[45,96656,501],{"class":257},[45,96658,215],{"class":51},[45,96660,96661],{"class":47,"line":1262},[45,96662,96663],{"class":267},"# 输出:\n",[45,96665,96666],{"class":47,"line":1277},[45,96667,96668],{"class":267},"# [[1. 0. 0. 0.]\n",[45,96670,96671],{"class":47,"line":1283},[45,96672,96673],{"class":267},"#  [0. 1. 0. 0.]\n",[45,96675,96676],{"class":47,"line":1297},[45,96677,96678],{"class":267},"#  [0. 0. 1. 0.]]\n",[45,96680,96681],{"class":47,"line":1303},[45,96682,2483],{"emptyLinePlaceholder":133},[45,96684,96685],{"class":47,"line":1394},[45,96686,96687],{"class":267},"# 对角线向上偏移1\n",[45,96689,96690,96692,96694,96696,96698,96700,96702,96704,96706],{"class":47,"line":1400},[45,96691,96575],{"class":51},[45,96693,280],{"class":257},[45,96695,12518],{"class":51},[45,96697,501],{"class":257},[45,96699,12518],{"class":51},[45,96701,701],{"class":5299},[45,96703,254],{"class":93},[45,96705,426],{"class":257},[45,96707,215],{"class":51},[45,96709,96710],{"class":47,"line":1412},[45,96711,96663],{"class":267},[45,96713,96714],{"class":47,"line":1695},[45,96715,96716],{"class":267},"# [[0. 1. 0. 0.]\n",[45,96718,96719],{"class":47,"line":1700},[45,96720,96721],{"class":267},"#  [0. 0. 1. 0.]\n",[45,96723,96724],{"class":47,"line":1706},[45,96725,96726],{"class":267},"#  [0. 0. 0. 1.]]\n",[176,96728,96730],{"id":96729},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[35,96732,96734],{"className":37,"code":96733,"language":39,"meta":40,"style":40},"#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",[42,96735,96736,96741,96745,96750,96755,96760,96765,96770,96775,96780,96785],{"__ignoreMap":40},[45,96737,96738],{"class":47,"line":48},[45,96739,96740],{"class":267},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[45,96742,96743],{"class":47,"line":125},[45,96744,95749],{"class":313},[45,96746,96747],{"class":47,"line":1262},[45,96748,96749],{"class":313},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[45,96751,96752],{"class":47,"line":1277},[45,96753,96754],{"class":313},"参数介绍：\n",[45,96756,96757],{"class":47,"line":1283},[45,96758,96759],{"class":313},"start：序列的起始值\n",[45,96761,96762],{"class":47,"line":1297},[45,96763,96764],{"class":313},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[45,96766,96767],{"class":47,"line":1303},[45,96768,96769],{"class":313},"num：要生长的等步长的样本数量，默认为50\n",[45,96771,96772],{"class":47,"line":1394},[45,96773,96774],{"class":313},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[45,96776,96777],{"class":47,"line":1400},[45,96778,96779],{"class":313},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[45,96781,96782],{"class":47,"line":1412},[45,96783,96784],{"class":313},"dtype：ndarry的数据类型\n",[45,96786,96787],{"class":47,"line":1695},[45,96788,95749],{"class":313},[10,96790,96791],{},[1545,96792],{"alt":40,"src":96793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[10,96795,96796],{},"这里num=是可以省略的",[10,96798,96799],{},"也就是下方两行代码结果是一模一样的",[35,96801,96803],{"className":37,"code":96802,"language":39,"meta":40,"style":40},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[42,96804,96805,96822],{"__ignoreMap":40},[45,96806,96807,96810,96812,96814,96816,96818,96820],{"class":47,"line":48},[45,96808,96809],{"class":51},"np.linspace(",[45,96811,426],{"class":257},[45,96813,586],{"class":51},[45,96815,527],{"class":257},[45,96817,586],{"class":51},[45,96819,527],{"class":257},[45,96821,215],{"class":51},[45,96823,96824,96826,96828,96830,96832,96834,96836,96838,96840],{"class":47,"line":125},[45,96825,96809],{"class":51},[45,96827,426],{"class":257},[45,96829,586],{"class":51},[45,96831,527],{"class":257},[45,96833,586],{"class":51},[45,96835,1748],{"class":5299},[45,96837,254],{"class":93},[45,96839,527],{"class":257},[45,96841,215],{"class":51},[176,96843,96845],{"id":96844},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[35,96847,96849],{"className":37,"code":96848,"language":39,"meta":40,"style":40},"#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",[42,96850,96851,96856,96860,96865,96870,96875,96880,96884,96889,96894,96898],{"__ignoreMap":40},[45,96852,96853],{"class":47,"line":48},[45,96854,96855],{"class":267},"#logspace函数用于创建一个等比数列，格式如下：\n",[45,96857,96858],{"class":47,"line":125},[45,96859,95749],{"class":313},[45,96861,96862],{"class":47,"line":1262},[45,96863,96864],{"class":313},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[45,96866,96867],{"class":47,"line":1277},[45,96868,96869],{"class":313},"参数为：\n",[45,96871,96872],{"class":47,"line":1283},[45,96873,96874],{"class":313},"start:序列的起始位置为：base**start\n",[45,96876,96877],{"class":47,"line":1297},[45,96878,96879],{"class":313},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[45,96881,96882],{"class":47,"line":1303},[45,96883,96769],{"class":313},[45,96885,96886],{"class":47,"line":1394},[45,96887,96888],{"class":313},"endpoint：是否包含 stop 这个值，默认是 True\n",[45,96890,96891],{"class":47,"line":1400},[45,96892,96893],{"class":313},"base：对数的底数，默认是 10（常见对数）\n",[45,96895,96896],{"class":47,"line":1412},[45,96897,96784],{"class":313},[45,96899,96900],{"class":47,"line":1695},[45,96901,95749],{"class":313},[10,96903,96904],{},[1545,96905],{"alt":40,"src":96906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[10,96908,96909],{},"logspace()函数中的num参数也是可以不写num=的",[10,96911,96912],{},"endpoint是不可以省略的",[121,96914,96915],{},"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":40,"searchDepth":125,"depth":125,"links":96917},[96918,96922,96927,96931,96935,96936],{"id":95307,"depth":125,"text":95308,"children":96919},[96920,96921],{"id":95311,"depth":1262,"text":95312},{"id":95384,"depth":1262,"text":95385},{"id":95416,"depth":125,"text":95417,"children":96923},[96924,96925,96926],{"id":95420,"depth":1262,"text":95421},{"id":95602,"depth":1262,"text":95603},{"id":95680,"depth":1262,"text":95681},{"id":95715,"depth":125,"text":95716,"children":96928},[96929,96930],{"id":95719,"depth":1262,"text":95720},{"id":95776,"depth":1262,"text":95777},{"id":95872,"depth":125,"text":95873,"children":96932},[96933,96934],{"id":95876,"depth":1262,"text":95877},{"id":95888,"depth":1262,"text":95889},{"id":95922,"depth":125,"text":95923},{"id":95959,"depth":125,"text":95960,"children":96937},[96938,96939,96940,96941,96942,96943,96944,96945],{"id":95963,"depth":1262,"text":95964},{"id":96188,"depth":1262,"text":96189},{"id":96195,"depth":1262,"text":96196},{"id":96404,"depth":1262,"text":96405},{"id":96424,"depth":1262,"text":96425},{"id":96560,"depth":1262,"text":96561},{"id":96729,"depth":1262,"text":96730},{"id":96844,"depth":1262,"text":96845},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95299,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96952,"title":96953,"body":96954,"description":130,"extension":131,"meta":97047,"navigation":133,"path":97048,"seo":97049,"stem":97050,"__hash__":97051},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96955,"toc":97045},[96956,96959,96962,96965,96968,96971,96974,96977,96980,96983,96986,96989,96991,96994,96997,97002,97005,97008,97042],[20,96957,96953],{"id":96958},"_20魔法命令mprun",[10,96960,96961],{},"逐行分析数据内存的使用情况",[10,96963,96964],{},"语法格式：",[10,96966,96967],{},"%mprun -f 模块名.函数名 模块名.函数名()",[10,96969,96970],{},"分析结果列如下：",[10,96972,96973],{},"Line行号",[10,96975,96976],{},"Mem usage内存使用大小",[10,96978,96979],{},"increment内存增量",[10,96981,96982],{},"Line content代码内容",[10,96984,96985],{},"补充说明：",[10,96987,96988],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[10,96990,95254],{},[10,96992,96993],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[10,96995,96996],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[10,96998,96999],{},[1545,97000],{"alt":40,"src":97001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[10,97003,97004],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[10,97006,97007],{},"这时候需要重新加载模块",[35,97009,97011],{"className":37,"code":97010,"language":39,"meta":40,"style":40},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[42,97012,97013,97018,97025,97030],{"__ignoreMap":40},[45,97014,97015],{"class":47,"line":48},[45,97016,97017],{"class":267},"#重新加载模块\n",[45,97019,97020,97022],{"class":47,"line":125},[45,97021,30473],{"class":93},[45,97023,97024],{"class":51}," importlib\n",[45,97026,97027],{"class":47,"line":1262},[45,97028,97029],{"class":51},"importlib.reload(mprun_test)\n",[45,97031,97032,97034,97037,97039],{"class":47,"line":1277},[45,97033,536],{"class":93},[45,97035,97036],{"class":51},"mprun ",[45,97038,94],{"class":93},[45,97040,97041],{"class":51},"f mprun_test.fun_test mprun_test.fun_test()\n",[121,97043,97044],{},"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":40,"searchDepth":125,"depth":125,"links":97046},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96953,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97053,"title":97054,"body":97055,"description":130,"extension":131,"meta":97072,"navigation":133,"path":97073,"seo":97074,"stem":97075,"__hash__":97076},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97056,"toc":97070},[97057,97060,97065],[20,97058,97054],{"id":97059},"_3一维数组的索引和切片",[10,97061,97062],{},[1545,97063],{"alt":40,"src":97064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[10,97066,97067],{},[1545,97068],{"alt":40,"src":97069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":40,"searchDepth":125,"depth":125,"links":97071},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97054,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97078,"title":97079,"body":97080,"description":130,"extension":131,"meta":97563,"navigation":133,"path":97564,"seo":97565,"stem":97566,"__hash__":97567},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97081,"toc":97561},[97082,97085,97088,97093,97126,97129,97167,97170,97204,97207,97312,97315,97352,97355,97456,97459,97510,97513,97555,97558],[20,97083,97079],{"id":97084},"_4二维数组的索引与切片",[10,97086,97087],{},"①获取指定单个元素",[10,97089,97090],{},[1545,97091],{"alt":40,"src":97092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[35,97094,97096],{"className":37,"code":97095,"language":39,"meta":40,"style":40},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[42,97097,97098,97103,97108,97113],{"__ignoreMap":40},[45,97099,97100],{"class":47,"line":48},[45,97101,97102],{"class":267},"#获取元素9\n",[45,97104,97105],{"class":47,"line":125},[45,97106,97107],{"class":267},"#先获取所在行，再获取所在列\n",[45,97109,97110],{"class":47,"line":1262},[45,97111,97112],{"class":267},"#数组[行索引号，列索引号]\n",[45,97114,97115,97118,97120,97122,97124],{"class":47,"line":1277},[45,97116,97117],{"class":51},"a[",[45,97119,426],{"class":257},[45,97121,586],{"class":51},[45,97123,286],{"class":257},[45,97125,33327],{"class":51},[10,97127,97128],{},"②获取整行元素",[35,97130,97132],{"className":37,"code":97131,"language":39,"meta":40,"style":40},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[42,97133,97134,97139,97144,97152,97157],{"__ignoreMap":40},[45,97135,97136],{"class":47,"line":48},[45,97137,97138],{"class":267},"#获取整行 数组[行索引号]\n",[45,97140,97141],{"class":47,"line":125},[45,97142,97143],{"class":267},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[45,97145,97146,97148,97150],{"class":47,"line":1262},[45,97147,97117],{"class":51},[45,97149,286],{"class":257},[45,97151,33327],{"class":51},[45,97153,97154],{"class":47,"line":1277},[45,97155,97156],{"class":267},"#也可以负索引获取一行\n",[45,97158,97159,97161,97163,97165],{"class":47,"line":1283},[45,97160,97117],{"class":51},[45,97162,94],{"class":93},[45,97164,426],{"class":257},[45,97166,33327],{"class":51},[10,97168,97169],{},"③获取整列元素",[35,97171,97173],{"className":37,"code":97172,"language":39,"meta":40,"style":40},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[42,97174,97175,97180,97189,97194],{"__ignoreMap":40},[45,97176,97177],{"class":47,"line":48},[45,97178,97179],{"class":267},"#获取整列 数组名[:,列索引]\n",[45,97181,97182,97185,97187],{"class":47,"line":125},[45,97183,97184],{"class":51},"a[:,",[45,97186,286],{"class":257},[45,97188,33327],{"class":51},[45,97190,97191],{"class":47,"line":1262},[45,97192,97193],{"class":267},"#也可以负索引获取一列\n",[45,97195,97196,97198,97200,97202],{"class":47,"line":1277},[45,97197,97184],{"class":51},[45,97199,94],{"class":93},[45,97201,426],{"class":257},[45,97203,33327],{"class":51},[10,97205,97206],{},"④部分行部分列的元素",[35,97208,97210],{"className":37,"code":97209,"language":39,"meta":40,"style":40},"#部分行部分列 数组名[行切片，列切片]\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",[42,97211,97212,97217,97227,97231,97235,97240,97245,97249,97261,97265,97269,97274,97279,97284,97289,97293,97298],{"__ignoreMap":40},[45,97213,97214],{"class":47,"line":48},[45,97215,97216],{"class":267},"#部分行部分列 数组名[行切片，列切片]\n",[45,97218,97219,97222,97224],{"class":47,"line":125},[45,97220,97221],{"class":51},"a[:",[45,97223,286],{"class":257},[45,97225,97226],{"class":51},",:]\n",[45,97228,97229],{"class":47,"line":1262},[45,97230,93615],{"class":267},[45,97232,97233],{"class":47,"line":1277},[45,97234,93979],{"class":313},[45,97236,97237],{"class":47,"line":1283},[45,97238,97239],{"class":313},"array([[ 1,  2,  3,  4,  5,  6],\n",[45,97241,97242],{"class":47,"line":1297},[45,97243,97244],{"class":313},"       [ 7,  8,  9, 10, 11, 12]])\n",[45,97246,97247],{"class":47,"line":1303},[45,97248,93979],{"class":313},[45,97250,97251,97253,97255,97257,97259],{"class":47,"line":1394},[45,97252,97184],{"class":51},[45,97254,426],{"class":257},[45,97256,1066],{"class":51},[45,97258,501],{"class":257},[45,97260,33327],{"class":51},[45,97262,97263],{"class":47,"line":1400},[45,97264,93615],{"class":267},[45,97266,97267],{"class":47,"line":1412},[45,97268,93979],{"class":313},[45,97270,97271],{"class":47,"line":1695},[45,97272,97273],{"class":313},"array([[ 2,  3,  4],\n",[45,97275,97276],{"class":47,"line":1700},[45,97277,97278],{"class":313},"       [ 8,  9, 10],\n",[45,97280,97281],{"class":47,"line":1706},[45,97282,97283],{"class":313},"       [14, 15, 16],\n",[45,97285,97286],{"class":47,"line":1711},[45,97287,97288],{"class":313},"       [20, 21, 22]])\n",[45,97290,97291],{"class":47,"line":1725},[45,97292,93979],{"class":313},[45,97294,97295],{"class":47,"line":1730},[45,97296,97297],{"class":267},"#对列行同时进行切片，使用了step参数\n",[45,97299,97300,97303,97305,97308,97310],{"class":47,"line":1736},[45,97301,97302],{"class":51},"a[::",[45,97304,286],{"class":257},[45,97306,97307],{"class":51},",::",[45,97309,286],{"class":257},[45,97311,33327],{"class":51},[10,97313,97314],{},"⑤同时获取两个元素",[35,97316,97318],{"className":37,"code":97317,"language":39,"meta":40,"style":40},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[42,97319,97320,97325,97330],{"__ignoreMap":40},[45,97321,97322],{"class":47,"line":48},[45,97323,97324],{"class":267},"#同时获取第三行第二列，第四行第一列\n",[45,97326,97327],{"class":47,"line":125},[45,97328,97329],{"class":267},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[45,97331,97332,97335,97337,97339,97341,97343,97345,97347,97349],{"class":47,"line":1262},[45,97333,97334],{"class":51},"a[(",[45,97336,286],{"class":257},[45,97338,586],{"class":51},[45,97340,280],{"class":257},[45,97342,42328],{"class":51},[45,97344,426],{"class":257},[45,97346,586],{"class":51},[45,97348,400],{"class":257},[45,97350,97351],{"class":51},")]\n",[10,97353,97354],{},"⑥切片，对行进行反向获取",[35,97356,97358],{"className":37,"code":97357,"language":39,"meta":40,"style":40},"#切片 对所有行进行反向获取\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",[42,97359,97360,97365,97375,97379,97383,97388,97393,97398,97403,97407,97412,97428,97432,97437,97442,97447,97452],{"__ignoreMap":40},[45,97361,97362],{"class":47,"line":48},[45,97363,97364],{"class":267},"#切片 对所有行进行反向获取\n",[45,97366,97367,97369,97371,97373],{"class":47,"line":125},[45,97368,97302],{"class":51},[45,97370,94],{"class":93},[45,97372,426],{"class":257},[45,97374,33327],{"class":51},[45,97376,97377],{"class":47,"line":1262},[45,97378,93615],{"class":267},[45,97380,97381],{"class":47,"line":1277},[45,97382,93979],{"class":313},[45,97384,97385],{"class":47,"line":1283},[45,97386,97387],{"class":313},"array([[19, 20, 21, 22, 23, 24],\n",[45,97389,97390],{"class":47,"line":1297},[45,97391,97392],{"class":313},"       [13, 14, 15, 16, 17, 18],\n",[45,97394,97395],{"class":47,"line":1303},[45,97396,97397],{"class":313},"       [ 7,  8,  9, 10, 11, 12],\n",[45,97399,97400],{"class":47,"line":1394},[45,97401,97402],{"class":313},"       [ 1,  2,  3,  4,  5,  6]])\n",[45,97404,97405],{"class":47,"line":1400},[45,97406,93979],{"class":313},[45,97408,97409],{"class":47,"line":1412},[45,97410,97411],{"class":267},"#对行列都进行反向切片获取\n",[45,97413,97414,97416,97418,97420,97422,97424,97426],{"class":47,"line":1695},[45,97415,97302],{"class":51},[45,97417,94],{"class":93},[45,97419,426],{"class":257},[45,97421,97307],{"class":51},[45,97423,94],{"class":93},[45,97425,426],{"class":257},[45,97427,33327],{"class":51},[45,97429,97430],{"class":47,"line":1700},[45,97431,93979],{"class":313},[45,97433,97434],{"class":47,"line":1706},[45,97435,97436],{"class":313},"array([[24, 23, 22, 21, 20, 19],\n",[45,97438,97439],{"class":47,"line":1711},[45,97440,97441],{"class":313},"       [18, 17, 16, 15, 14, 13],\n",[45,97443,97444],{"class":47,"line":1725},[45,97445,97446],{"class":313},"       [12, 11, 10,  9,  8,  7],\n",[45,97448,97449],{"class":47,"line":1730},[45,97450,97451],{"class":313},"       [ 6,  5,  4,  3,  2,  1]])\n",[45,97453,97454],{"class":47,"line":1736},[45,97455,93979],{"class":313},[10,97457,97458],{},"⑦修改元素",[35,97460,97462],{"className":37,"code":97461,"language":39,"meta":40,"style":40},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[42,97463,97464,97469,97487,97492],{"__ignoreMap":40},[45,97465,97466],{"class":47,"line":48},[45,97467,97468],{"class":267},"#获取前两行和前两列\n",[45,97470,97471,97474,97476,97478,97480,97483,97485],{"class":47,"line":125},[45,97472,97473],{"class":51},"sub_a",[45,97475,254],{"class":93},[45,97477,97221],{"class":51},[45,97479,286],{"class":257},[45,97481,97482],{"class":51},",:",[45,97484,286],{"class":257},[45,97486,33327],{"class":51},[45,97488,97489],{"class":47,"line":1262},[45,97490,97491],{"class":267},"#修改sub_a第一个元素的值\n",[45,97493,97494,97497,97499,97501,97503,97505,97507],{"class":47,"line":1277},[45,97495,97496],{"class":51},"sub_a[",[45,97498,400],{"class":257},[45,97500,586],{"class":51},[45,97502,400],{"class":257},[45,97504,1147],{"class":51},[45,97506,254],{"class":93},[45,97508,97509],{"class":257},"100\n",[10,97511,97512],{},"⑧数组复制copy()",[35,97514,97516],{"className":37,"code":97515,"language":39,"meta":40,"style":40},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[42,97517,97518,97523,97533,97538],{"__ignoreMap":40},[45,97519,97520],{"class":47,"line":48},[45,97521,97522],{"class":267},"#数组复制\n",[45,97524,97525,97528,97530],{"class":47,"line":125},[45,97526,97527],{"class":51},"copy_a",[45,97529,254],{"class":93},[45,97531,97532],{"class":51},"np.copy(sub_a)\n",[45,97534,97535],{"class":47,"line":1262},[45,97536,97537],{"class":267},"#修改copy_a后不影响原数组\n",[45,97539,97540,97543,97545,97547,97549,97551,97553],{"class":47,"line":1277},[45,97541,97542],{"class":51},"copy_a[",[45,97544,400],{"class":257},[45,97546,586],{"class":51},[45,97548,400],{"class":257},[45,97550,1147],{"class":51},[45,97552,254],{"class":93},[45,97554,97509],{"class":257},[10,97556,97557],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[121,97559,97560],{},"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":40,"searchDepth":125,"depth":125,"links":97562},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97079,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97569,"title":97570,"body":97571,"description":130,"extension":131,"meta":98063,"navigation":133,"path":98064,"seo":98065,"stem":98066,"__hash__":98067},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97572,"toc":98055},[97573,97576,97580,97583,97586,97639,97642,97667,97670,97689,97709,97712,97728,97732,97778,97782,97824,97828,97831,97834,97837,97840,97843,97905,97965,97969,97972,98029,98033,98038,98047,98052],[20,97574,97570],{"id":97575},"_5改变数组的维度",[30,97577,97579],{"id":97578},"_51-使用reshape","5.1 使用reshape()",[10,97581,97582],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[10,97584,97585],{},"①一维数组转换为二维数组",[35,97587,97589],{"className":37,"code":97588,"language":39,"meta":40,"style":40},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[42,97590,97591,97607,97612,97617,97622],{"__ignoreMap":40},[45,97592,97593,97595,97597,97599,97601,97603,97605],{"class":47,"line":48},[45,97594,13],{"class":51},[45,97596,254],{"class":93},[45,97598,93053],{"class":51},[45,97600,426],{"class":257},[45,97602,586],{"class":51},[45,97604,731],{"class":257},[45,97606,215],{"class":51},[45,97608,97609],{"class":47,"line":125},[45,97610,97611],{"class":267},"#将一维数组进行转换\n",[45,97613,97614],{"class":47,"line":1262},[45,97615,97616],{"class":267},"#注意点：元素个数不可以变\n",[45,97618,97619],{"class":47,"line":1277},[45,97620,97621],{"class":267},"#转换维度要保持一致，不一致就异常！！！\n",[45,97623,97624,97626,97628,97631,97633,97635,97637],{"class":47,"line":1283},[45,97625,93357],{"class":51},[45,97627,254],{"class":93},[45,97629,97630],{"class":51},"a.reshape(",[45,97632,286],{"class":257},[45,97634,586],{"class":51},[45,97636,552],{"class":257},[45,97638,215],{"class":51},[10,97640,97641],{},"②一维数组转换为三维数组",[35,97643,97645],{"className":37,"code":97644,"language":39,"meta":40,"style":40},"aaa=a.reshape(2,3,2)\n",[42,97646,97647],{"__ignoreMap":40},[45,97648,97649,97651,97653,97655,97657,97659,97661,97663,97665],{"class":47,"line":48},[45,97650,95572],{"class":51},[45,97652,254],{"class":93},[45,97654,97630],{"class":51},[45,97656,286],{"class":257},[45,97658,586],{"class":51},[45,97660,280],{"class":257},[45,97662,586],{"class":51},[45,97664,286],{"class":257},[45,97666,215],{"class":51},[10,97668,97669],{},"③二维数组转化为一维数组",[35,97671,97673],{"className":37,"code":97672,"language":39,"meta":40,"style":40},"#知道元素个数：\naa.reshape(12)\n",[42,97674,97675,97680],{"__ignoreMap":40},[45,97676,97677],{"class":47,"line":48},[45,97678,97679],{"class":267},"#知道元素个数：\n",[45,97681,97682,97685,97687],{"class":47,"line":125},[45,97683,97684],{"class":51},"aa.reshape(",[45,97686,706],{"class":257},[45,97688,215],{"class":51},[35,97690,97692],{"className":37,"code":97691,"language":39,"meta":40,"style":40},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[42,97693,97694,97699],{"__ignoreMap":40},[45,97695,97696],{"class":47,"line":48},[45,97697,97698],{"class":267},"#不知道元素个数，参数传递-1\n",[45,97700,97701,97703,97705,97707],{"class":47,"line":125},[45,97702,97684],{"class":51},[45,97704,94],{"class":93},[45,97706,426],{"class":257},[45,97708,215],{"class":51},[10,97710,97711],{},"④三维数组转换为一维数组",[35,97713,97715],{"className":37,"code":97714,"language":39,"meta":40,"style":40},"aaa.reshape(-1)\n",[42,97716,97717],{"__ignoreMap":40},[45,97718,97719,97722,97724,97726],{"class":47,"line":48},[45,97720,97721],{"class":51},"aaa.reshape(",[45,97723,94],{"class":93},[45,97725,426],{"class":257},[45,97727,215],{"class":51},[30,97729,97731],{"id":97730},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[35,97733,97735],{"className":37,"code":97734,"language":39,"meta":40,"style":40},"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",[42,97736,97737,97764,97769,97773],{"__ignoreMap":40},[45,97738,97739,97741,97743,97745,97747,97749,97751,97753,97755,97757,97759,97761],{"class":47,"line":48},[45,97740,93357],{"class":51},[45,97742,254],{"class":93},[45,97744,93053],{"class":51},[45,97746,426],{"class":257},[45,97748,586],{"class":51},[45,97750,731],{"class":257},[45,97752,93058],{"class":51},[45,97754,286],{"class":257},[45,97756,586],{"class":51},[45,97758,552],{"class":257},[45,97760,637],{"class":51},[45,97762,97763],{"class":267},"#转换为2行6列的数组\n",[45,97765,97766],{"class":47,"line":125},[45,97767,97768],{"class":51},"aa.revel()\n",[45,97770,97771],{"class":47,"line":1262},[45,97772,93615],{"class":267},[45,97774,97775],{"class":47,"line":1277},[45,97776,97777],{"class":267},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[30,97779,97781],{"id":97780},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[35,97783,97785],{"className":37,"code":97784,"language":39,"meta":40,"style":40},"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",[42,97786,97787,97811,97816,97820],{"__ignoreMap":40},[45,97788,97789,97791,97793,97795,97797,97799,97801,97803,97805,97807,97809],{"class":47,"line":48},[45,97790,93357],{"class":51},[45,97792,254],{"class":93},[45,97794,93053],{"class":51},[45,97796,426],{"class":257},[45,97798,586],{"class":51},[45,97800,731],{"class":257},[45,97802,93058],{"class":51},[45,97804,286],{"class":257},[45,97806,586],{"class":51},[45,97808,552],{"class":257},[45,97810,215],{"class":51},[45,97812,97813],{"class":47,"line":125},[45,97814,97815],{"class":51},"aa.flatten()\n",[45,97817,97818],{"class":47,"line":1262},[45,97819,93615],{"class":267},[45,97821,97822],{"class":47,"line":1277},[45,97823,97777],{"class":267},[30,97825,97827],{"id":97826},"_54-使用resize","5.4 使用resize()",[10,97829,97830],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[10,97832,97833],{},"通过resize方法可以改变数组的维度",[10,97835,97836],{},"#resize修改数组维度",[10,97838,97839],{},"#以元组的形式指定形状",[10,97841,97842],{},"#改变的是原数组",[35,97844,97846],{"className":37,"code":97845,"language":39,"meta":40,"style":40},"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",[42,97847,97848,97864,97884,97897,97901],{"__ignoreMap":40},[45,97849,97850,97852,97854,97856,97858,97860,97862],{"class":47,"line":48},[45,97851,13],{"class":51},[45,97853,254],{"class":93},[45,97855,93053],{"class":51},[45,97857,426],{"class":257},[45,97859,586],{"class":51},[45,97861,731],{"class":257},[45,97863,215],{"class":51},[45,97865,97866,97869,97871,97873,97875,97877,97879,97881],{"class":47,"line":125},[45,97867,97868],{"class":51},"a.shape",[45,97870,254],{"class":93},[45,97872,209],{"class":51},[45,97874,286],{"class":257},[45,97876,586],{"class":51},[45,97878,552],{"class":257},[45,97880,637],{"class":51},[45,97882,97883],{"class":267},"#改变了原数组\n",[45,97885,97886,97888,97890,97893,97895],{"class":47,"line":1262},[45,97887,13],{"class":51},[45,97889,254],{"class":93},[45,97891,97892],{"class":51},"resize((",[45,97894,706],{"class":257},[45,97896,30578],{"class":51},[45,97898,97899],{"class":47,"line":1277},[45,97900,93615],{"class":267},[45,97902,97903],{"class":47,"line":1283},[45,97904,97777],{"class":267},[35,97906,97908],{"className":37,"code":97907,"language":39,"meta":40,"style":40},"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",[42,97909,97910,97923,97927,97931,97936,97941,97946,97951,97956,97961],{"__ignoreMap":40},[45,97911,97912,97915,97917,97919,97921],{"class":47,"line":48},[45,97913,97914],{"class":51},"a.resize((",[45,97916,552],{"class":257},[45,97918,586],{"class":51},[45,97920,286],{"class":257},[45,97922,30578],{"class":51},[45,97924,97925],{"class":47,"line":125},[45,97926,93615],{"class":267},[45,97928,97929],{"class":47,"line":1262},[45,97930,93979],{"class":313},[45,97932,97933],{"class":47,"line":1277},[45,97934,97935],{"class":313},"array([[ 1,  2],\n",[45,97937,97938],{"class":47,"line":1283},[45,97939,97940],{"class":313},"       [ 3,  4],\n",[45,97942,97943],{"class":47,"line":1297},[45,97944,97945],{"class":313},"       [ 5,  6],\n",[45,97947,97948],{"class":47,"line":1303},[45,97949,97950],{"class":313},"       [ 7,  8],\n",[45,97952,97953],{"class":47,"line":1394},[45,97954,97955],{"class":313},"       [ 9, 10],\n",[45,97957,97958],{"class":47,"line":1400},[45,97959,97960],{"class":313},"       [11, 12]])\n",[45,97962,97963],{"class":47,"line":1412},[45,97964,93979],{"class":313},[30,97966,97968],{"id":97967},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[10,97970,97971],{},"改变了原数组",[35,97973,97975],{"className":37,"code":97974,"language":39,"meta":40,"style":40},"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",[42,97976,97977,97993,98009,98013,98017,98021,98025],{"__ignoreMap":40},[45,97978,97979,97981,97983,97985,97987,97989,97991],{"class":47,"line":48},[45,97980,13],{"class":51},[45,97982,254],{"class":93},[45,97984,93053],{"class":51},[45,97986,426],{"class":257},[45,97988,586],{"class":51},[45,97990,731],{"class":257},[45,97992,215],{"class":51},[45,97994,97995,97997,97999,98001,98003,98005,98007],{"class":47,"line":125},[45,97996,97868],{"class":51},[45,97998,254],{"class":93},[45,98000,209],{"class":51},[45,98002,286],{"class":257},[45,98004,586],{"class":51},[45,98006,552],{"class":257},[45,98008,215],{"class":51},[45,98010,98011],{"class":47,"line":1262},[45,98012,93615],{"class":267},[45,98014,98015],{"class":47,"line":1277},[45,98016,93979],{"class":313},[45,98018,98019],{"class":47,"line":1283},[45,98020,97239],{"class":313},[45,98022,98023],{"class":47,"line":1297},[45,98024,97244],{"class":313},[45,98026,98027],{"class":47,"line":1303},[45,98028,93979],{"class":313},[30,98030,98032],{"id":98031},"_56-重要比较","5.6 重要比较：",[10,98034,98035],{},[1545,98036],{"alt":40,"src":98037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[10,98039,98040,98041,98043,98044,98046],{},"口诀：NumPy 函数要么用 ",[42,98042,96014],{},"，要么用 ",[42,98045,31577],{},"，创建结构用 shape，造数据用 size",[10,98048,98049],{},[1545,98050],{"alt":40,"src":98051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[121,98053,98054],{},"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":40,"searchDepth":125,"depth":125,"links":98056},[98057,98058,98059,98060,98061,98062],{"id":97578,"depth":125,"text":97579},{"id":97730,"depth":125,"text":97731},{"id":97780,"depth":125,"text":97781},{"id":97826,"depth":125,"text":97827},{"id":97967,"depth":125,"text":97968},{"id":98031,"depth":125,"text":98032},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97570,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98069,"title":98070,"body":98071,"description":130,"extension":131,"meta":99143,"navigation":133,"path":99144,"seo":99145,"stem":99146,"__hash__":99147},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98072,"toc":99137},[98073,98076,98080,98083,98086,98089,98154,98157,98197,98200,98282,98285,98290,98312,98314,98319,98324,98327,98330,98485,98488,98690,98694,98697,98700,98768,98770,98775,98778,98781,98861,98865,98868,98870,98943,98945,98950,98952,99032,99036,99039,99042,99045,99048,99051,99054,99134],[20,98074,98070],{"id":98075},"_6数组的拼接",[30,98077,98079],{"id":98078},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[10,98081,98082],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[10,98084,98085],{},"函数内部传两个数列构成的数列或者元组",[10,98087,98088],{},"①一维数组的拼接",[35,98090,98092],{"className":37,"code":98091,"language":39,"meta":40,"style":40},"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",[42,98093,98094,98114,98134,98139,98144,98149],{"__ignoreMap":40},[45,98095,98096,98098,98100,98102,98104,98106,98108,98110,98112],{"class":47,"line":48},[45,98097,13],{"class":51},[45,98099,254],{"class":93},[45,98101,93075],{"class":51},[45,98103,426],{"class":257},[45,98105,586],{"class":51},[45,98107,286],{"class":257},[45,98109,586],{"class":51},[45,98111,280],{"class":257},[45,98113,4740],{"class":51},[45,98115,98116,98118,98120,98122,98124,98126,98128,98130,98132],{"class":47,"line":125},[45,98117,471],{"class":51},[45,98119,254],{"class":93},[45,98121,93075],{"class":51},[45,98123,501],{"class":257},[45,98125,586],{"class":51},[45,98127,527],{"class":257},[45,98129,586],{"class":51},[45,98131,552],{"class":257},[45,98133,4740],{"class":51},[45,98135,98136],{"class":47,"line":1262},[45,98137,98138],{"class":267},"#调用concatenate进行数组拼接\n",[45,98140,98141],{"class":47,"line":1277},[45,98142,98143],{"class":51},"np.concatenate((a,b))\n",[45,98145,98146],{"class":47,"line":1283},[45,98147,98148],{"class":267},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[45,98150,98151],{"class":47,"line":1297},[45,98152,98153],{"class":267},"#np.concatenate([a,b])\n",[10,98155,98156],{},"②一维多个数组拼接",[35,98158,98160],{"className":37,"code":98159,"language":39,"meta":40,"style":40},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[42,98161,98162,98167,98187,98192],{"__ignoreMap":40},[45,98163,98164],{"class":47,"line":48},[45,98165,98166],{"class":267},"#也可以多个数组进行拼接\n",[45,98168,98169,98171,98173,98175,98177,98179,98181,98183,98185],{"class":47,"line":125},[45,98170,496],{"class":51},[45,98172,254],{"class":93},[45,98174,93075],{"class":51},[45,98176,654],{"class":257},[45,98178,586],{"class":51},[45,98180,680],{"class":257},[45,98182,586],{"class":51},[45,98184,731],{"class":257},[45,98186,4740],{"class":51},[45,98188,98189],{"class":47,"line":1262},[45,98190,98191],{"class":51},"c\n",[45,98193,98194],{"class":47,"line":1277},[45,98195,98196],{"class":51},"np.concatenate((a,b,c))\n",[10,98198,98199],{},"③二维数组拼接",[35,98201,98203],{"className":37,"code":98202,"language":39,"meta":40,"style":40},"#二维数组使用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",[42,98204,98205,98210,98234,98259,98264,98269],{"__ignoreMap":40},[45,98206,98207],{"class":47,"line":48},[45,98208,98209],{"class":267},"#二维数组使用concatenate进行拼接\n",[45,98211,98212,98214,98216,98218,98220,98222,98224,98226,98228,98230,98232],{"class":47,"line":125},[45,98213,93357],{"class":51},[45,98215,254],{"class":93},[45,98217,93053],{"class":51},[45,98219,426],{"class":257},[45,98221,586],{"class":51},[45,98223,731],{"class":257},[45,98225,93058],{"class":51},[45,98227,280],{"class":257},[45,98229,586],{"class":51},[45,98231,501],{"class":257},[45,98233,215],{"class":51},[45,98235,98236,98239,98241,98243,98245,98247,98249,98251,98253,98255,98257],{"class":47,"line":1262},[45,98237,98238],{"class":51},"bb",[45,98240,254],{"class":93},[45,98242,93053],{"class":51},[45,98244,545],{"class":257},[45,98246,586],{"class":51},[45,98248,849],{"class":257},[45,98250,93058],{"class":51},[45,98252,280],{"class":257},[45,98254,586],{"class":51},[45,98256,501],{"class":257},[45,98258,215],{"class":51},[45,98260,98261],{"class":47,"line":1277},[45,98262,98263],{"class":267},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[45,98265,98266],{"class":47,"line":1283},[45,98267,98268],{"class":267},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[45,98270,98271,98274,98276,98278,98280],{"class":47,"line":1297},[45,98272,98273],{"class":51},"np.concatenate((aa,bb),",[45,98275,47595],{"class":5299},[45,98277,254],{"class":93},[45,98279,400],{"class":257},[45,98281,215],{"class":51},[10,98283,98284],{},"结果：",[10,98286,98287],{},[1545,98288],{"alt":40,"src":98289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[35,98291,98293],{"className":37,"code":98292,"language":39,"meta":40,"style":40},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[42,98294,98295,98300],{"__ignoreMap":40},[45,98296,98297],{"class":47,"line":48},[45,98298,98299],{"class":267},"#指定axis为1进行拼接\n",[45,98301,98302,98304,98306,98308,98310],{"class":47,"line":125},[45,98303,98273],{"class":51},[45,98305,47595],{"class":5299},[45,98307,254],{"class":93},[45,98309,426],{"class":257},[45,98311,215],{"class":51},[10,98313,98284],{},[10,98315,98316],{},[1545,98317],{"alt":40,"src":98318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[10,98320,98321],{},[358,98322,98323],{},"二维数组总结：0竖着方向，1横着方向",[10,98325,98326],{},"④三维数组拼接",[10,98328,98329],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[35,98331,98333],{"className":37,"code":98332,"language":39,"meta":40,"style":40},"#两个三行六列\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",[42,98334,98335,98340,98368,98398,98403,98420,98425,98430,98435,98452,98457,98462,98467,98480],{"__ignoreMap":40},[45,98336,98337],{"class":47,"line":48},[45,98338,98339],{"class":267},"#两个三行六列\n",[45,98341,98342,98344,98346,98348,98350,98352,98354,98356,98358,98360,98362,98364,98366],{"class":47,"line":125},[45,98343,95572],{"class":51},[45,98345,254],{"class":93},[45,98347,93053],{"class":51},[45,98349,426],{"class":257},[45,98351,586],{"class":51},[45,98353,533],{"class":257},[45,98355,93058],{"class":51},[45,98357,286],{"class":257},[45,98359,586],{"class":51},[45,98361,280],{"class":257},[45,98363,586],{"class":51},[45,98365,552],{"class":257},[45,98367,215],{"class":51},[45,98369,98370,98373,98375,98377,98379,98381,98384,98386,98388,98390,98392,98394,98396],{"class":47,"line":1262},[45,98371,98372],{"class":51},"bbb",[45,98374,254],{"class":93},[45,98376,93053],{"class":51},[45,98378,545],{"class":257},[45,98380,586],{"class":51},[45,98382,98383],{"class":257},"137",[45,98385,93058],{"class":51},[45,98387,286],{"class":257},[45,98389,586],{"class":51},[45,98391,280],{"class":257},[45,98393,586],{"class":51},[45,98395,552],{"class":257},[45,98397,215],{"class":51},[45,98399,98400],{"class":47,"line":1277},[45,98401,98402],{"class":267},"#axis=0\n",[45,98404,98405,98407,98409,98412,98414,98416,98418],{"class":47,"line":1283},[45,98406,902],{"class":51},[45,98408,254],{"class":93},[45,98410,98411],{"class":51},"np.concatenate((aaa,bbb),",[45,98413,47595],{"class":5299},[45,98415,254],{"class":93},[45,98417,400],{"class":257},[45,98419,215],{"class":51},[45,98421,98422],{"class":47,"line":1297},[45,98423,98424],{"class":51},"s.shape\n",[45,98426,98427],{"class":47,"line":1303},[45,98428,98429],{"class":267},"#输出：(4,3,6)\n",[45,98431,98432],{"class":47,"line":1394},[45,98433,98434],{"class":267},"#axis=1\n",[45,98436,98437,98440,98442,98444,98446,98448,98450],{"class":47,"line":1400},[45,98438,98439],{"class":51},"ss",[45,98441,254],{"class":93},[45,98443,98411],{"class":51},[45,98445,47595],{"class":5299},[45,98447,254],{"class":93},[45,98449,426],{"class":257},[45,98451,215],{"class":51},[45,98453,98454],{"class":47,"line":1412},[45,98455,98456],{"class":51},"ss.shape\n",[45,98458,98459],{"class":47,"line":1695},[45,98460,98461],{"class":267},"#输出：(2,6,6)\n",[45,98463,98464],{"class":47,"line":1700},[45,98465,98466],{"class":267},"#axis=2\n",[45,98468,98469,98471,98473,98475,98477],{"class":47,"line":1706},[45,98470,98411],{"class":51},[45,98472,47595],{"class":5299},[45,98474,254],{"class":93},[45,98476,286],{"class":257},[45,98478,98479],{"class":51},").shape\n",[45,98481,98482],{"class":47,"line":1711},[45,98483,98484],{"class":267},"#输出：（2，3，12）\n",[10,98486,98487],{},"⑤四维数组拼接",[35,98489,98491],{"className":37,"code":98490,"language":39,"meta":40,"style":40},"#两个三行六列\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",[42,98492,98493,98497,98525,98553,98578,98604,98608,98621,98626,98630,98642,98647,98651,98663,98668,98673,98685],{"__ignoreMap":40},[45,98494,98495],{"class":47,"line":48},[45,98496,98339],{"class":267},[45,98498,98499,98501,98503,98505,98507,98509,98511,98513,98515,98517,98519,98521,98523],{"class":47,"line":125},[45,98500,95572],{"class":51},[45,98502,254],{"class":93},[45,98504,93053],{"class":51},[45,98506,426],{"class":257},[45,98508,586],{"class":51},[45,98510,533],{"class":257},[45,98512,93058],{"class":51},[45,98514,286],{"class":257},[45,98516,586],{"class":51},[45,98518,280],{"class":257},[45,98520,586],{"class":51},[45,98522,552],{"class":257},[45,98524,215],{"class":51},[45,98526,98527,98529,98531,98533,98535,98537,98539,98541,98543,98545,98547,98549,98551],{"class":47,"line":1262},[45,98528,98372],{"class":51},[45,98530,254],{"class":93},[45,98532,93053],{"class":51},[45,98534,545],{"class":257},[45,98536,586],{"class":51},[45,98538,98383],{"class":257},[45,98540,93058],{"class":51},[45,98542,286],{"class":257},[45,98544,586],{"class":51},[45,98546,280],{"class":257},[45,98548,586],{"class":51},[45,98550,552],{"class":257},[45,98552,215],{"class":51},[45,98554,98555,98558,98560,98562,98564,98566,98568,98570,98572,98574,98576],{"class":47,"line":1277},[45,98556,98557],{"class":51},"aaaa",[45,98559,254],{"class":93},[45,98561,97721],{"class":51},[45,98563,286],{"class":257},[45,98565,586],{"class":51},[45,98567,280],{"class":257},[45,98569,586],{"class":51},[45,98571,280],{"class":257},[45,98573,586],{"class":51},[45,98575,286],{"class":257},[45,98577,215],{"class":51},[45,98579,98580,98583,98585,98588,98590,98592,98594,98596,98598,98600,98602],{"class":47,"line":1283},[45,98581,98582],{"class":51},"bbbb",[45,98584,254],{"class":93},[45,98586,98587],{"class":51},"bbb.reshape(",[45,98589,286],{"class":257},[45,98591,586],{"class":51},[45,98593,280],{"class":257},[45,98595,586],{"class":51},[45,98597,280],{"class":257},[45,98599,586],{"class":51},[45,98601,286],{"class":257},[45,98603,215],{"class":51},[45,98605,98606],{"class":47,"line":1297},[45,98607,98402],{"class":267},[45,98609,98610,98613,98615,98617,98619],{"class":47,"line":1303},[45,98611,98612],{"class":51},"np.concatenate((aaaa,bbbb),",[45,98614,47595],{"class":5299},[45,98616,254],{"class":93},[45,98618,400],{"class":257},[45,98620,98479],{"class":51},[45,98622,98623],{"class":47,"line":1394},[45,98624,98625],{"class":267},"#结果：（4，3，3，2）\n",[45,98627,98628],{"class":47,"line":1400},[45,98629,98434],{"class":267},[45,98631,98632,98634,98636,98638,98640],{"class":47,"line":1412},[45,98633,98612],{"class":51},[45,98635,47595],{"class":5299},[45,98637,254],{"class":93},[45,98639,426],{"class":257},[45,98641,98479],{"class":51},[45,98643,98644],{"class":47,"line":1695},[45,98645,98646],{"class":267},"#结果：（2，6，3，2）\n",[45,98648,98649],{"class":47,"line":1700},[45,98650,98466],{"class":267},[45,98652,98653,98655,98657,98659,98661],{"class":47,"line":1706},[45,98654,98612],{"class":51},[45,98656,47595],{"class":5299},[45,98658,254],{"class":93},[45,98660,286],{"class":257},[45,98662,98479],{"class":51},[45,98664,98665],{"class":47,"line":1711},[45,98666,98667],{"class":267},"#结果：（2，3，6，2）\n",[45,98669,98670],{"class":47,"line":1725},[45,98671,98672],{"class":267},"#axis=3\n",[45,98674,98675,98677,98679,98681,98683],{"class":47,"line":1730},[45,98676,98612],{"class":51},[45,98678,47595],{"class":5299},[45,98680,254],{"class":93},[45,98682,280],{"class":257},[45,98684,98479],{"class":51},[45,98686,98687],{"class":47,"line":1736},[45,98688,98689],{"class":267},"#结果：（2，3，3，4）\n",[30,98691,98693],{"id":98692},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[10,98695,98696],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[10,98698,98699],{},"①二维数组",[35,98701,98703],{"className":37,"code":98702,"language":39,"meta":40,"style":40},"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",[42,98704,98705,98729,98753,98758,98763],{"__ignoreMap":40},[45,98706,98707,98709,98711,98713,98715,98717,98719,98721,98723,98725,98727],{"class":47,"line":48},[45,98708,93357],{"class":51},[45,98710,254],{"class":93},[45,98712,93053],{"class":51},[45,98714,426],{"class":257},[45,98716,586],{"class":51},[45,98718,731],{"class":257},[45,98720,93058],{"class":51},[45,98722,280],{"class":257},[45,98724,586],{"class":51},[45,98726,501],{"class":257},[45,98728,215],{"class":51},[45,98730,98731,98733,98735,98737,98739,98741,98743,98745,98747,98749,98751],{"class":47,"line":125},[45,98732,98238],{"class":51},[45,98734,254],{"class":93},[45,98736,93053],{"class":51},[45,98738,545],{"class":257},[45,98740,586],{"class":51},[45,98742,849],{"class":257},[45,98744,93058],{"class":51},[45,98746,280],{"class":257},[45,98748,586],{"class":51},[45,98750,501],{"class":257},[45,98752,215],{"class":51},[45,98754,98755],{"class":47,"line":1262},[45,98756,98757],{"class":51},"np.hstack((aa,bb))\n",[45,98759,98760],{"class":47,"line":1277},[45,98761,98762],{"class":267},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[45,98764,98765],{"class":47,"line":1283},[45,98766,98767],{"class":267},"#np.hstack([aa,bb])\n",[10,98769,98284],{},[10,98771,98772],{},[1545,98773],{"alt":40,"src":98774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[10,98776,98777],{},"等效于concatenate()函数中axis=1时的情况",[10,98779,98780],{},"②三维数组",[35,98782,98784],{"className":37,"code":98783,"language":39,"meta":40,"style":40},"#两个三行六列\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",[42,98785,98786,98790,98818,98846,98851,98856],{"__ignoreMap":40},[45,98787,98788],{"class":47,"line":48},[45,98789,98339],{"class":267},[45,98791,98792,98794,98796,98798,98800,98802,98804,98806,98808,98810,98812,98814,98816],{"class":47,"line":125},[45,98793,95572],{"class":51},[45,98795,254],{"class":93},[45,98797,93053],{"class":51},[45,98799,426],{"class":257},[45,98801,586],{"class":51},[45,98803,533],{"class":257},[45,98805,93058],{"class":51},[45,98807,286],{"class":257},[45,98809,586],{"class":51},[45,98811,280],{"class":257},[45,98813,586],{"class":51},[45,98815,552],{"class":257},[45,98817,215],{"class":51},[45,98819,98820,98822,98824,98826,98828,98830,98832,98834,98836,98838,98840,98842,98844],{"class":47,"line":1262},[45,98821,98372],{"class":51},[45,98823,254],{"class":93},[45,98825,93053],{"class":51},[45,98827,545],{"class":257},[45,98829,586],{"class":51},[45,98831,98383],{"class":257},[45,98833,93058],{"class":51},[45,98835,286],{"class":257},[45,98837,586],{"class":51},[45,98839,280],{"class":257},[45,98841,586],{"class":51},[45,98843,552],{"class":257},[45,98845,215],{"class":51},[45,98847,98848],{"class":47,"line":1277},[45,98849,98850],{"class":267},"#使用hstack\n",[45,98852,98853],{"class":47,"line":1283},[45,98854,98855],{"class":51},"np.hstack((aaa,bbb)).shape\n",[45,98857,98858],{"class":47,"line":1297},[45,98859,98860],{"class":267},"#输出：（2，6，6）\n",[30,98862,98864],{"id":98863},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[10,98866,98867],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[10,98869,98699],{},[35,98871,98873],{"className":37,"code":98872,"language":39,"meta":40,"style":40},"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",[42,98874,98875,98899,98923,98928,98933,98938],{"__ignoreMap":40},[45,98876,98877,98879,98881,98883,98885,98887,98889,98891,98893,98895,98897],{"class":47,"line":48},[45,98878,93357],{"class":51},[45,98880,254],{"class":93},[45,98882,93053],{"class":51},[45,98884,426],{"class":257},[45,98886,586],{"class":51},[45,98888,731],{"class":257},[45,98890,93058],{"class":51},[45,98892,280],{"class":257},[45,98894,586],{"class":51},[45,98896,501],{"class":257},[45,98898,215],{"class":51},[45,98900,98901,98903,98905,98907,98909,98911,98913,98915,98917,98919,98921],{"class":47,"line":125},[45,98902,98238],{"class":51},[45,98904,254],{"class":93},[45,98906,93053],{"class":51},[45,98908,545],{"class":257},[45,98910,586],{"class":51},[45,98912,849],{"class":257},[45,98914,93058],{"class":51},[45,98916,280],{"class":257},[45,98918,586],{"class":51},[45,98920,501],{"class":257},[45,98922,215],{"class":51},[45,98924,98925],{"class":47,"line":1262},[45,98926,98927],{"class":267},"#vstack 垂直方向进行堆叠\n",[45,98929,98930],{"class":47,"line":1277},[45,98931,98932],{"class":51},"np.vstack((aa,bb))\n",[45,98934,98935],{"class":47,"line":1283},[45,98936,98937],{"class":267},"#与hstack传的参数类似，等价于：\n",[45,98939,98940],{"class":47,"line":1297},[45,98941,98942],{"class":51},"np.vstack([aa,bb])\n",[10,98944,98284],{},[10,98946,98947],{},[1545,98948],{"alt":40,"src":98949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[10,98951,98780],{},[35,98953,98955],{"className":37,"code":98954,"language":39,"meta":40,"style":40},"#两个三行六列\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",[42,98956,98957,98961,98989,99017,99022,99027],{"__ignoreMap":40},[45,98958,98959],{"class":47,"line":48},[45,98960,98339],{"class":267},[45,98962,98963,98965,98967,98969,98971,98973,98975,98977,98979,98981,98983,98985,98987],{"class":47,"line":125},[45,98964,95572],{"class":51},[45,98966,254],{"class":93},[45,98968,93053],{"class":51},[45,98970,426],{"class":257},[45,98972,586],{"class":51},[45,98974,533],{"class":257},[45,98976,93058],{"class":51},[45,98978,286],{"class":257},[45,98980,586],{"class":51},[45,98982,280],{"class":257},[45,98984,586],{"class":51},[45,98986,552],{"class":257},[45,98988,215],{"class":51},[45,98990,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013,99015],{"class":47,"line":1262},[45,98992,98372],{"class":51},[45,98994,254],{"class":93},[45,98996,93053],{"class":51},[45,98998,545],{"class":257},[45,99000,586],{"class":51},[45,99002,98383],{"class":257},[45,99004,93058],{"class":51},[45,99006,286],{"class":257},[45,99008,586],{"class":51},[45,99010,280],{"class":257},[45,99012,586],{"class":51},[45,99014,552],{"class":257},[45,99016,215],{"class":51},[45,99018,99019],{"class":47,"line":1277},[45,99020,99021],{"class":267},"#使用vstack\n",[45,99023,99024],{"class":47,"line":1283},[45,99025,99026],{"class":51},"np.vstack((aaa,bbb)).shape\n",[45,99028,99029],{"class":47,"line":1297},[45,99030,99031],{"class":267},"#输出：（4，3，6）\n",[30,99033,99035],{"id":99034},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[10,99037,99038],{},"该方法是三维数组特有的方法",[10,99040,99041],{},"也就是说",[10,99043,99044],{},"一维数组拼接方法用：concatenate()",[10,99046,99047],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[10,99049,99050],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[10,99052,99053],{},"四维数组及多维数组只能用concatenate进行拼接",[35,99055,99057],{"className":37,"code":99056,"language":39,"meta":40,"style":40},"#两个三行六列\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",[42,99058,99059,99063,99091,99119,99124,99129],{"__ignoreMap":40},[45,99060,99061],{"class":47,"line":48},[45,99062,98339],{"class":267},[45,99064,99065,99067,99069,99071,99073,99075,99077,99079,99081,99083,99085,99087,99089],{"class":47,"line":125},[45,99066,95572],{"class":51},[45,99068,254],{"class":93},[45,99070,93053],{"class":51},[45,99072,426],{"class":257},[45,99074,586],{"class":51},[45,99076,533],{"class":257},[45,99078,93058],{"class":51},[45,99080,286],{"class":257},[45,99082,586],{"class":51},[45,99084,280],{"class":257},[45,99086,586],{"class":51},[45,99088,552],{"class":257},[45,99090,215],{"class":51},[45,99092,99093,99095,99097,99099,99101,99103,99105,99107,99109,99111,99113,99115,99117],{"class":47,"line":1262},[45,99094,98372],{"class":51},[45,99096,254],{"class":93},[45,99098,93053],{"class":51},[45,99100,545],{"class":257},[45,99102,586],{"class":51},[45,99104,98383],{"class":257},[45,99106,93058],{"class":51},[45,99108,286],{"class":257},[45,99110,586],{"class":51},[45,99112,280],{"class":257},[45,99114,586],{"class":51},[45,99116,552],{"class":257},[45,99118,215],{"class":51},[45,99120,99121],{"class":47,"line":1277},[45,99122,99123],{"class":267},"#使用dstack\n",[45,99125,99126],{"class":47,"line":1283},[45,99127,99128],{"class":51},"np.dstack((aaa,bbb)).shape\n",[45,99130,99131],{"class":47,"line":1297},[45,99132,99133],{"class":267},"#结果：（2，3，12）\n",[121,99135,99136],{},"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":40,"searchDepth":125,"depth":125,"links":99138},[99139,99140,99141,99142],{"id":98078,"depth":125,"text":98079},{"id":98692,"depth":125,"text":98693},{"id":98863,"depth":125,"text":98864},{"id":99034,"depth":125,"text":99035},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98070,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99149,"title":99150,"body":99151,"description":130,"extension":131,"meta":99426,"navigation":133,"path":99427,"seo":99428,"stem":99429,"__hash__":99430},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99152,"toc":99424},[99153,99156,99159,99253,99256,99259,99262,99265,99268,99271,99274,99277,99421],[20,99154,99150],{"id":99155},"_7数组转置",[10,99157,99158],{},"使用transpose()函数",[35,99160,99162],{"className":37,"code":99161,"language":39,"meta":40,"style":40},"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",[42,99163,99164,99174,99198,99203,99208,99213,99218,99226,99230,99234,99239,99244,99249],{"__ignoreMap":40},[45,99165,99166,99168,99170,99172],{"class":47,"line":48},[45,99167,30473],{"class":93},[45,99169,31461],{"class":51},[45,99171,31464],{"class":93},[45,99173,31467],{"class":51},[45,99175,99176,99178,99180,99182,99184,99186,99188,99190,99192,99194,99196],{"class":47,"line":125},[45,99177,13],{"class":51},[45,99179,254],{"class":93},[45,99181,31798],{"class":51},[45,99183,426],{"class":257},[45,99185,586],{"class":51},[45,99187,731],{"class":257},[45,99189,93058],{"class":51},[45,99191,501],{"class":257},[45,99193,586],{"class":51},[45,99195,280],{"class":257},[45,99197,215],{"class":51},[45,99199,99200],{"class":47,"line":1262},[45,99201,99202],{"class":267},"#二维数组转置\n",[45,99204,99205],{"class":47,"line":1277},[45,99206,99207],{"class":267},"#调用transpose()函数\n",[45,99209,99210],{"class":47,"line":1283},[45,99211,99212],{"class":51},"a.transpose()\n",[45,99214,99215],{"class":47,"line":1297},[45,99216,99217],{"class":267},"#对于二维数组也可以采用.T来实现\n",[45,99219,99220,99223],{"class":47,"line":1303},[45,99221,99222],{"class":51},"a.T",[45,99224,99225],{"class":267},"#与上述代码一样\n",[45,99227,99228],{"class":47,"line":1394},[45,99229,93615],{"class":267},[45,99231,99232],{"class":47,"line":1400},[45,99233,93979],{"class":313},[45,99235,99236],{"class":47,"line":1412},[45,99237,99238],{"class":313},"array([[ 1,  4,  7, 10],\n",[45,99240,99241],{"class":47,"line":1695},[45,99242,99243],{"class":313},"       [ 2,  5,  8, 11],\n",[45,99245,99246],{"class":47,"line":1700},[45,99247,99248],{"class":313},"       [ 3,  6,  9, 12]])\n",[45,99250,99251],{"class":47,"line":1706},[45,99252,93979],{"class":313},[10,99254,99255],{},"也可以使用np.transpose()的形式",[10,99257,99258],{},"#多维数组进行转置 np.transpose()",[10,99260,99261],{},"#对二维数组也可以使用np.transpose()进行转置",[10,99263,99264],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[10,99266,99267],{},"第二个参数，维度可以理解为用axis中的数来理解",[10,99269,99270],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[10,99272,99273],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[10,99275,99276],{},"四维及以上的数组也是一样的道理",[35,99278,99280],{"className":37,"code":99279,"language":39,"meta":40,"style":40},"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",[42,99281,99282,99310,99315,99320,99325,99343,99348,99380,99385,99390,99395,99416],{"__ignoreMap":40},[45,99283,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308],{"class":47,"line":48},[45,99285,1027],{"class":51},[45,99287,254],{"class":93},[45,99289,93053],{"class":51},[45,99291,426],{"class":257},[45,99293,586],{"class":51},[45,99295,533],{"class":257},[45,99297,93058],{"class":51},[45,99299,280],{"class":257},[45,99301,586],{"class":51},[45,99303,552],{"class":257},[45,99305,586],{"class":51},[45,99307,286],{"class":257},[45,99309,215],{"class":51},[45,99311,99312],{"class":47,"line":125},[45,99313,99314],{"class":51},"x.shape\n",[45,99316,99317],{"class":47,"line":1262},[45,99318,99319],{"class":267},"#结果：（3,6,2）\n",[45,99321,99322],{"class":47,"line":1277},[45,99323,99324],{"class":267},"#使用np.transpose()进行转置 变为(2,6,3)\n",[45,99326,99327,99330,99332,99334,99336,99338,99340],{"class":47,"line":1283},[45,99328,99329],{"class":51},"np.transpose(x,(",[45,99331,286],{"class":257},[45,99333,586],{"class":51},[45,99335,426],{"class":257},[45,99337,586],{"class":51},[45,99339,400],{"class":257},[45,99341,99342],{"class":51},")).shape\n",[45,99344,99345],{"class":47,"line":1297},[45,99346,99347],{"class":267},"#结果：(2,6,3)\n",[45,99349,99350,99352,99354,99356,99358,99360,99362,99364,99366,99368,99370,99372,99374,99376,99378],{"class":47,"line":1303},[45,99351,98557],{"class":51},[45,99353,254],{"class":93},[45,99355,93053],{"class":51},[45,99357,426],{"class":257},[45,99359,586],{"class":51},[45,99361,533],{"class":257},[45,99363,93058],{"class":51},[45,99365,280],{"class":257},[45,99367,586],{"class":51},[45,99369,286],{"class":257},[45,99371,586],{"class":51},[45,99373,426],{"class":257},[45,99375,586],{"class":51},[45,99377,552],{"class":257},[45,99379,215],{"class":51},[45,99381,99382],{"class":47,"line":1394},[45,99383,99384],{"class":51},"aaaa.shape\n",[45,99386,99387],{"class":47,"line":1400},[45,99388,99389],{"class":267},"#结果：（3，2，1，6）\n",[45,99391,99392],{"class":47,"line":1412},[45,99393,99394],{"class":267},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[45,99396,99397,99400,99402,99404,99406,99408,99410,99412,99414],{"class":47,"line":1695},[45,99398,99399],{"class":51},"np.transpose(aaaa,(",[45,99401,426],{"class":257},[45,99403,586],{"class":51},[45,99405,286],{"class":257},[45,99407,586],{"class":51},[45,99409,400],{"class":257},[45,99411,586],{"class":51},[45,99413,280],{"class":257},[45,99415,99342],{"class":51},[45,99417,99418],{"class":47,"line":1700},[45,99419,99420],{"class":267},"#结果：(2,1,3,6)\n",[121,99422,99423],{},"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":40,"searchDepth":125,"depth":125,"links":99425},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99150,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99432,"title":99433,"body":99434,"description":130,"extension":131,"meta":100168,"navigation":133,"path":100169,"seo":100170,"stem":100171,"__hash__":100172},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99435,"toc":100166},[99436,99439,99442,99445,99448,99451,99454,99457,99460,99569,99572,99575,100163],[20,99437,99433],{"id":99438},"_8数组分割",[10,99440,99441],{},"split分割",[10,99443,99444],{},"numpy.split(ary,indics_or_sections,axis)",[10,99446,99447],{},"解释：",[10,99449,99450],{},"ary:被分割的数组",[10,99452,99453],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[10,99455,99456],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[10,99458,99459],{},"①一维数组的分割",[35,99461,99463],{"className":37,"code":99462,"language":39,"meta":40,"style":40},"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",[42,99464,99465,99481,99486,99495,99499,99504,99512,99516,99521,99526,99539,99543,99548,99560,99564],{"__ignoreMap":40},[45,99466,99467,99469,99471,99473,99475,99477,99479],{"class":47,"line":48},[45,99468,13],{"class":51},[45,99470,254],{"class":93},[45,99472,93053],{"class":51},[45,99474,426],{"class":257},[45,99476,586],{"class":51},[45,99478,628],{"class":257},[45,99480,215],{"class":51},[45,99482,99483],{"class":47,"line":125},[45,99484,99485],{"class":267},"#如果传入整数，必须能够平分，否则会报错\n",[45,99487,99488,99491,99493],{"class":47,"line":1262},[45,99489,99490],{"class":51},"np.split(a,",[45,99492,286],{"class":257},[45,99494,215],{"class":51},[45,99496,99497],{"class":47,"line":1277},[45,99498,93615],{"class":267},[45,99500,99501],{"class":47,"line":1283},[45,99502,99503],{"class":267},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[45,99505,99506,99508,99510],{"class":47,"line":1297},[45,99507,99490],{"class":51},[45,99509,501],{"class":257},[45,99511,215],{"class":51},[45,99513,99514],{"class":47,"line":1303},[45,99515,93615],{"class":267},[45,99517,99518],{"class":47,"line":1394},[45,99519,99520],{"class":267},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[45,99522,99523],{"class":47,"line":1400},[45,99524,99525],{"class":267},"#传入数组\n",[45,99527,99528,99531,99533,99535,99537],{"class":47,"line":1412},[45,99529,99530],{"class":51},"np.split(a,[",[45,99532,280],{"class":257},[45,99534,586],{"class":51},[45,99536,527],{"class":257},[45,99538,4740],{"class":51},[45,99540,99541],{"class":47,"line":1695},[45,99542,93615],{"class":267},[45,99544,99545],{"class":47,"line":1700},[45,99546,99547],{"class":267},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[45,99549,99550,99552,99554,99556,99558],{"class":47,"line":1706},[45,99551,99530],{"class":51},[45,99553,527],{"class":257},[45,99555,586],{"class":51},[45,99557,577],{"class":257},[45,99559,4740],{"class":51},[45,99561,99562],{"class":47,"line":1711},[45,99563,93615],{"class":267},[45,99565,99566],{"class":47,"line":1725},[45,99567,99568],{"class":267},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[10,99570,99571],{},"②二维数组的分割",[10,99573,99574],{},"使用split()",[35,99576,99578],{"className":37,"code":99577,"language":39,"meta":40,"style":40},"#二维数组分割\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",[42,99579,99580,99585,99609,99614,99623,99627,99631,99636,99641,99646,99651,99656,99661,99666,99670,99683,99687,99691,99695,99699,99703,99708,99713,99718,99722,99727,99743,99747,99751,99756,99761,99766,99771,99776,99781,99786,99791,99796,99801,99806,99811,99816,99821,99826,99831,99836,99841,99845,99849,99869,99873,99877,99882,99887,99892,99897,99902,99907,99912,99917,99922,99927,99932,99937,99942,99947,99952,99957,99962,99967,99971,99976,99985,99989,99993,99997,100001,100005,100009,100013,100017,100021,100030,100034,100038,100042,100046,100050,100054,100058,100062,100066,100070,100074,100078,100082,100086,100090,100094,100098,100102,100106,100110,100114,100127,100131,100135,100139,100143,100147,100151,100155,100159],{"__ignoreMap":40},[45,99581,99582],{"class":47,"line":48},[45,99583,99584],{"class":267},"#二维数组分割\n",[45,99586,99587,99589,99591,99593,99595,99597,99599,99601,99603,99605,99607],{"class":47,"line":125},[45,99588,93357],{"class":51},[45,99590,254],{"class":93},[45,99592,93053],{"class":51},[45,99594,426],{"class":257},[45,99596,586],{"class":51},[45,99598,533],{"class":257},[45,99600,93058],{"class":51},[45,99602,552],{"class":257},[45,99604,586],{"class":51},[45,99606,552],{"class":257},[45,99608,215],{"class":51},[45,99610,99611],{"class":47,"line":1262},[45,99612,99613],{"class":267},"#默认axis=0  传入整数平均分,按行来的\n",[45,99615,99616,99619,99621],{"class":47,"line":1277},[45,99617,99618],{"class":51},"np.split(aa,",[45,99620,280],{"class":257},[45,99622,215],{"class":51},[45,99624,99625],{"class":47,"line":1283},[45,99626,95815],{"class":267},[45,99628,99629],{"class":47,"line":1297},[45,99630,93979],{"class":313},[45,99632,99633],{"class":47,"line":1303},[45,99634,99635],{"class":313},"[array([[ 1,  2,  3,  4,  5,  6],\n",[45,99637,99638],{"class":47,"line":1394},[45,99639,99640],{"class":313},"        [ 7,  8,  9, 10, 11, 12]]),\n",[45,99642,99643],{"class":47,"line":1400},[45,99644,99645],{"class":313}," array([[13, 14, 15, 16, 17, 18],\n",[45,99647,99648],{"class":47,"line":1412},[45,99649,99650],{"class":313},"        [19, 20, 21, 22, 23, 24]]),\n",[45,99652,99653],{"class":47,"line":1695},[45,99654,99655],{"class":313}," array([[25, 26, 27, 28, 29, 30],\n",[45,99657,99658],{"class":47,"line":1700},[45,99659,99660],{"class":313},"        [31, 32, 33, 34, 35, 36]])]\n",[45,99662,99663],{"class":47,"line":1706},[45,99664,99665],{"class":313}," '''\n",[45,99667,99668],{"class":47,"line":1711},[45,99669,99525],{"class":267},[45,99671,99672,99675,99677,99679,99681],{"class":47,"line":1725},[45,99673,99674],{"class":51},"np.split(aa,[",[45,99676,286],{"class":257},[45,99678,586],{"class":51},[45,99680,527],{"class":257},[45,99682,4740],{"class":51},[45,99684,99685],{"class":47,"line":1730},[45,99686,95815],{"class":267},[45,99688,99689],{"class":47,"line":1736},[45,99690,93979],{"class":313},[45,99692,99693],{"class":47,"line":1757},[45,99694,99635],{"class":313},[45,99696,99697],{"class":47,"line":1762},[45,99698,99640],{"class":313},[45,99700,99701],{"class":47,"line":1776},[45,99702,99645],{"class":313},[45,99704,99705],{"class":47,"line":1781},[45,99706,99707],{"class":313},"        [19, 20, 21, 22, 23, 24],\n",[45,99709,99710],{"class":47,"line":1810},[45,99711,99712],{"class":313},"        [25, 26, 27, 28, 29, 30]]),\n",[45,99714,99715],{"class":47,"line":1815},[45,99716,99717],{"class":313}," array([[31, 32, 33, 34, 35, 36]])]\n",[45,99719,99720],{"class":47,"line":1832},[45,99721,93979],{"class":313},[45,99723,99724],{"class":47,"line":1837},[45,99725,99726],{"class":267},"#axis=1 按照列来分\n",[45,99728,99729,99731,99733,99735,99737,99739,99741],{"class":47,"line":1842},[45,99730,99618],{"class":51},[45,99732,280],{"class":257},[45,99734,586],{"class":51},[45,99736,47595],{"class":5299},[45,99738,254],{"class":93},[45,99740,426],{"class":257},[45,99742,215],{"class":51},[45,99744,99745],{"class":47,"line":1847},[45,99746,95815],{"class":267},[45,99748,99749],{"class":47,"line":1861},[45,99750,93979],{"class":313},[45,99752,99753],{"class":47,"line":1866},[45,99754,99755],{"class":313},"[array([[ 1,  2],\n",[45,99757,99758],{"class":47,"line":2660},[45,99759,99760],{"class":313},"        [ 7,  8],\n",[45,99762,99763],{"class":47,"line":2674},[45,99764,99765],{"class":313},"        [13, 14],\n",[45,99767,99768],{"class":47,"line":2682},[45,99769,99770],{"class":313},"        [19, 20],\n",[45,99772,99773],{"class":47,"line":2687},[45,99774,99775],{"class":313},"        [25, 26],\n",[45,99777,99778],{"class":47,"line":2693},[45,99779,99780],{"class":313},"        [31, 32]]),\n",[45,99782,99783],{"class":47,"line":2699},[45,99784,99785],{"class":313}," array([[ 3,  4],\n",[45,99787,99788],{"class":47,"line":2704},[45,99789,99790],{"class":313},"        [ 9, 10],\n",[45,99792,99793],{"class":47,"line":8031},[45,99794,99795],{"class":313},"        [15, 16],\n",[45,99797,99798],{"class":47,"line":8055},[45,99799,99800],{"class":313},"        [21, 22],\n",[45,99802,99803],{"class":47,"line":8060},[45,99804,99805],{"class":313},"        [27, 28],\n",[45,99807,99808],{"class":47,"line":8066},[45,99809,99810],{"class":313},"        [33, 34]]),\n",[45,99812,99813],{"class":47,"line":8093},[45,99814,99815],{"class":313}," array([[ 5,  6],\n",[45,99817,99818],{"class":47,"line":8098},[45,99819,99820],{"class":313},"        [11, 12],\n",[45,99822,99823],{"class":47,"line":8104},[45,99824,99825],{"class":313},"        [17, 18],\n",[45,99827,99828],{"class":47,"line":8116},[45,99829,99830],{"class":313},"        [23, 24],\n",[45,99832,99833],{"class":47,"line":8128},[45,99834,99835],{"class":313},"        [29, 30],\n",[45,99837,99838],{"class":47,"line":8140},[45,99839,99840],{"class":313},"        [35, 36]])]\n",[45,99842,99843],{"class":47,"line":9799},[45,99844,99665],{"class":313},[45,99846,99847],{"class":47,"line":9824},[45,99848,99525],{"class":267},[45,99850,99851,99853,99855,99857,99859,99861,99863,99865,99867],{"class":47,"line":9847},[45,99852,99674],{"class":51},[45,99854,426],{"class":257},[45,99856,586],{"class":51},[45,99858,286],{"class":257},[45,99860,41690],{"class":51},[45,99862,47595],{"class":5299},[45,99864,254],{"class":93},[45,99866,426],{"class":257},[45,99868,215],{"class":51},[45,99870,99871],{"class":47,"line":9871},[45,99872,93615],{"class":267},[45,99874,99875],{"class":47,"line":9876},[45,99876,93979],{"class":313},[45,99878,99879],{"class":47,"line":9881},[45,99880,99881],{"class":313},"[array([[ 1],\n",[45,99883,99884],{"class":47,"line":9886},[45,99885,99886],{"class":313},"        [ 7],\n",[45,99888,99889],{"class":47,"line":9895},[45,99890,99891],{"class":313},"        [13],\n",[45,99893,99894],{"class":47,"line":9900},[45,99895,99896],{"class":313},"        [19],\n",[45,99898,99899],{"class":47,"line":9906},[45,99900,99901],{"class":313},"        [25],\n",[45,99903,99904],{"class":47,"line":9927},[45,99905,99906],{"class":313},"        [31]]),\n",[45,99908,99909],{"class":47,"line":9933},[45,99910,99911],{"class":313}," array([[ 2],\n",[45,99913,99914],{"class":47,"line":9947},[45,99915,99916],{"class":313},"        [ 8],\n",[45,99918,99919],{"class":47,"line":9953},[45,99920,99921],{"class":313},"        [14],\n",[45,99923,99924],{"class":47,"line":9980},[45,99925,99926],{"class":313},"        [20],\n",[45,99928,99929],{"class":47,"line":9989},[45,99930,99931],{"class":313},"        [26],\n",[45,99933,99934],{"class":47,"line":9995},[45,99935,99936],{"class":313},"        [32]]),\n",[45,99938,99939],{"class":47,"line":10003},[45,99940,99941],{"class":313}," array([[ 3,  4,  5,  6],\n",[45,99943,99944],{"class":47,"line":10008},[45,99945,99946],{"class":313},"        [ 9, 10, 11, 12],\n",[45,99948,99949],{"class":47,"line":16687},[45,99950,99951],{"class":313},"        [15, 16, 17, 18],\n",[45,99953,99954],{"class":47,"line":16693},[45,99955,99956],{"class":313},"        [21, 22, 23, 24],\n",[45,99958,99959],{"class":47,"line":16716},[45,99960,99961],{"class":313},"        [27, 28, 29, 30],\n",[45,99963,99964],{"class":47,"line":16722},[45,99965,99966],{"class":313},"        [33, 34, 35, 36]])]\n",[45,99968,99969],{"class":47,"line":16745},[45,99970,93979],{"class":313},[45,99972,99973],{"class":47,"line":16759},[45,99974,99975],{"class":267},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[45,99977,99978,99981,99983],{"class":47,"line":16779},[45,99979,99980],{"class":51},"np.vsplit(aa,",[45,99982,280],{"class":257},[45,99984,215],{"class":51},[45,99986,99987],{"class":47,"line":16785},[45,99988,93615],{"class":267},[45,99990,99991],{"class":47,"line":16796},[45,99992,93979],{"class":313},[45,99994,99995],{"class":47,"line":16819},[45,99996,99635],{"class":313},[45,99998,99999],{"class":47,"line":16841},[45,100000,99640],{"class":313},[45,100002,100003],{"class":47,"line":16846},[45,100004,99645],{"class":313},[45,100006,100007],{"class":47,"line":16852},[45,100008,99650],{"class":313},[45,100010,100011],{"class":47,"line":16866},[45,100012,99655],{"class":313},[45,100014,100015],{"class":47,"line":16879},[45,100016,99660],{"class":313},[45,100018,100019],{"class":47,"line":16884},[45,100020,93979],{"class":313},[45,100022,100023,100026,100028],{"class":47,"line":16898},[45,100024,100025],{"class":51},"np.hsplit(aa,",[45,100027,280],{"class":257},[45,100029,215],{"class":51},[45,100031,100032],{"class":47,"line":16903},[45,100033,93615],{"class":267},[45,100035,100036],{"class":47,"line":16909},[45,100037,93979],{"class":313},[45,100039,100040],{"class":47,"line":16914},[45,100041,99755],{"class":313},[45,100043,100044],{"class":47,"line":16928},[45,100045,99760],{"class":313},[45,100047,100048],{"class":47,"line":16933},[45,100049,99765],{"class":313},[45,100051,100052],{"class":47,"line":16938},[45,100053,99770],{"class":313},[45,100055,100056],{"class":47,"line":16952},[45,100057,99775],{"class":313},[45,100059,100060],{"class":47,"line":16964},[45,100061,99780],{"class":313},[45,100063,100064],{"class":47,"line":16969},[45,100065,99785],{"class":313},[45,100067,100068],{"class":47,"line":16982},[45,100069,99790],{"class":313},[45,100071,100072],{"class":47,"line":16987},[45,100073,99795],{"class":313},[45,100075,100076],{"class":47,"line":16992},[45,100077,99800],{"class":313},[45,100079,100080],{"class":47,"line":16997},[45,100081,99805],{"class":313},[45,100083,100084],{"class":47,"line":17010},[45,100085,99810],{"class":313},[45,100087,100088],{"class":47,"line":17015},[45,100089,99815],{"class":313},[45,100091,100092],{"class":47,"line":32714},[45,100093,99820],{"class":313},[45,100095,100096],{"class":47,"line":32720},[45,100097,99825],{"class":313},[45,100099,100100],{"class":47,"line":32726},[45,100101,99830],{"class":313},[45,100103,100104],{"class":47,"line":32732},[45,100105,99835],{"class":313},[45,100107,100108],{"class":47,"line":32738},[45,100109,99840],{"class":313},[45,100111,100112],{"class":47,"line":32749},[45,100113,93979],{"class":313},[45,100115,100116,100119,100121,100123,100125],{"class":47,"line":32755},[45,100117,100118],{"class":51},"np.vsplit(aa,[",[45,100120,286],{"class":257},[45,100122,586],{"class":51},[45,100124,527],{"class":257},[45,100126,4740],{"class":51},[45,100128,100129],{"class":47,"line":32775},[45,100130,93615],{"class":267},[45,100132,100133],{"class":47,"line":32781},[45,100134,93979],{"class":313},[45,100136,100137],{"class":47,"line":32792},[45,100138,99635],{"class":313},[45,100140,100141],{"class":47,"line":32798},[45,100142,99640],{"class":313},[45,100144,100145],{"class":47,"line":32804},[45,100146,99645],{"class":313},[45,100148,100149],{"class":47,"line":32810},[45,100150,99707],{"class":313},[45,100152,100153],{"class":47,"line":32816},[45,100154,99712],{"class":313},[45,100156,100157],{"class":47,"line":32822},[45,100158,99717],{"class":313},[45,100160,100161],{"class":47,"line":32828},[45,100162,99665],{"class":313},[121,100164,100165],{},"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":40,"searchDepth":125,"depth":125,"links":100167},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99433,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100174,"title":100175,"body":100176,"description":130,"extension":131,"meta":100670,"navigation":133,"path":100671,"seo":100672,"stem":100673,"__hash__":100674},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100177,"toc":100661},[100178,100181,100184,100209,100213,100272,100324,100328,100330,100366,100420,100422,100460,100531,100535,100540,100544,100547,100580,100583,100587,100590,100593,100596,100599,100604,100608,100611,100614,100617,100620,100625,100629,100634,100637,100658],[20,100179,100175],{"id":100180},"_9数学函数",[10,100182,100183],{},"补充回顾：python的列表推导式",[35,100185,100187],{"className":37,"code":100186,"language":39,"meta":40,"style":40},"[1\u002Fi for i in a]\n",[42,100188,100189],{"__ignoreMap":40},[45,100190,100191,100193,100195,100197,100200,100202,100204,100206],{"class":47,"line":48},[45,100192,1097],{"class":51},[45,100194,426],{"class":257},[45,100196,791],{"class":93},[45,100198,100199],{"class":51},"i ",[45,100201,3108],{"class":93},[45,100203,9521],{"class":51},[45,100205,26126],{"class":93},[45,100207,100208],{"class":51}," a]\n",[30,100210,100212],{"id":100211},"_91-求倒数","9.1 求倒数",[35,100214,100216],{"className":37,"code":100215,"language":39,"meta":40,"style":40},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[42,100217,100218,100223,100251,100263],{"__ignoreMap":40},[45,100219,100220],{"class":47,"line":48},[45,100221,100222],{"class":267},"#数组求倒数\n",[45,100224,100225,100227,100229,100231,100233,100235,100237,100239,100241,100243,100245,100247,100249],{"class":47,"line":125},[45,100226,13],{"class":51},[45,100228,254],{"class":93},[45,100230,1097],{"class":51},[45,100232,426],{"class":257},[45,100234,586],{"class":51},[45,100236,286],{"class":257},[45,100238,586],{"class":51},[45,100240,280],{"class":257},[45,100242,586],{"class":51},[45,100244,501],{"class":257},[45,100246,586],{"class":51},[45,100248,527],{"class":257},[45,100250,33327],{"class":51},[45,100252,100253,100255,100257,100260],{"class":47,"line":1262},[45,100254,471],{"class":51},[45,100256,254],{"class":93},[45,100258,100259],{"class":51},"np.array(a)",[45,100261,100262],{"class":267},"#将列表转换为数组\n",[45,100264,100265,100267,100269],{"class":47,"line":1277},[45,100266,426],{"class":257},[45,100268,791],{"class":93},[45,100270,100271],{"class":51},"b\n",[35,100273,100275],{"className":37,"code":100274,"language":39,"meta":40,"style":40},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[42,100276,100277,100305,100314,100319],{"__ignoreMap":40},[45,100278,100279,100281,100283,100285,100287,100289,100291,100293,100295,100297,100299,100301,100303],{"class":47,"line":48},[45,100280,13],{"class":51},[45,100282,254],{"class":93},[45,100284,1097],{"class":51},[45,100286,426],{"class":257},[45,100288,586],{"class":51},[45,100290,286],{"class":257},[45,100292,586],{"class":51},[45,100294,280],{"class":257},[45,100296,586],{"class":51},[45,100298,501],{"class":257},[45,100300,586],{"class":51},[45,100302,527],{"class":257},[45,100304,33327],{"class":51},[45,100306,100307,100309,100311],{"class":47,"line":125},[45,100308,471],{"class":51},[45,100310,254],{"class":93},[45,100312,100313],{"class":51},"np.array(a)\n",[45,100315,100316],{"class":47,"line":1262},[45,100317,100318],{"class":267},"#调用numpy中的函数reciprocal()\n",[45,100320,100321],{"class":47,"line":1277},[45,100322,100323],{"class":51},"np.reciprocal(b)\n",[30,100325,100327],{"id":100326},"_92-求平方","9.2 求平方",[10,100329,94581],{},[35,100331,100333],{"className":37,"code":100332,"language":39,"meta":40,"style":40},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[42,100334,100335,100340,100345,100361],{"__ignoreMap":40},[45,100336,100337],{"class":47,"line":48},[45,100338,100339],{"class":267},"#square()，求平方\n",[45,100341,100342],{"class":47,"line":125},[45,100343,100344],{"class":267},"#一维数组\n",[45,100346,100347,100349,100351,100353,100355,100357,100359],{"class":47,"line":1262},[45,100348,13],{"class":51},[45,100350,254],{"class":93},[45,100352,93053],{"class":51},[45,100354,426],{"class":257},[45,100356,586],{"class":51},[45,100358,654],{"class":257},[45,100360,215],{"class":51},[45,100362,100363],{"class":47,"line":1277},[45,100364,100365],{"class":51},"np.square(a)\n",[35,100367,100369],{"className":37,"code":100368,"language":39,"meta":40,"style":40},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[42,100370,100371,100376,100381,100402],{"__ignoreMap":40},[45,100372,100373],{"class":47,"line":48},[45,100374,100375],{"class":267},"#或者通过循环遍历的形式来计算\n",[45,100377,100378],{"class":47,"line":125},[45,100379,100380],{"class":267},"#这是一个列表\n",[45,100382,100383,100386,100388,100390,100392,100394,100396,100399],{"class":47,"line":1262},[45,100384,100385],{"class":51},"[i",[45,100387,663],{"class":93},[45,100389,100199],{"class":51},[45,100391,3108],{"class":93},[45,100393,9521],{"class":51},[45,100395,26126],{"class":93},[45,100397,100398],{"class":51}," a]",[45,100400,100401],{"class":267},"#这个求完之后在数列当中\n",[45,100403,100404,100407,100409,100411,100413,100415,100417],{"class":47,"line":1277},[45,100405,100406],{"class":51},"np.array([i",[45,100408,663],{"class":93},[45,100410,100199],{"class":51},[45,100412,3108],{"class":93},[45,100414,9521],{"class":51},[45,100416,26126],{"class":93},[45,100418,100419],{"class":51}," a])\n",[10,100421,93342],{},[35,100423,100425],{"className":37,"code":100424,"language":39,"meta":40,"style":40},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[42,100426,100427,100431,100455],{"__ignoreMap":40},[45,100428,100429],{"class":47,"line":48},[45,100430,93352],{"class":267},[45,100432,100433,100435,100437,100439,100441,100443,100445,100447,100449,100451,100453],{"class":47,"line":125},[45,100434,93357],{"class":51},[45,100436,254],{"class":93},[45,100438,93053],{"class":51},[45,100440,426],{"class":257},[45,100442,586],{"class":51},[45,100444,731],{"class":257},[45,100446,93058],{"class":51},[45,100448,501],{"class":257},[45,100450,586],{"class":51},[45,100452,280],{"class":257},[45,100454,215],{"class":51},[45,100456,100457],{"class":47,"line":1262},[45,100458,100459],{"class":51},"np.square(aa)\n",[35,100461,100463],{"className":37,"code":100462,"language":39,"meta":40,"style":40},"#传统的方式\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",[42,100464,100465,100470,100479,100495,100511,100526],{"__ignoreMap":40},[45,100466,100467],{"class":47,"line":48},[45,100468,100469],{"class":267},"#传统的方式\n",[45,100471,100472,100474,100476],{"class":47,"line":125},[45,100473,98238],{"class":51},[45,100475,254],{"class":93},[45,100477,100478],{"class":51},"np.empty_like(aa)\n",[45,100480,100481,100483,100485,100487,100489,100491,100493],{"class":47,"line":1262},[45,100482,3108],{"class":93},[45,100484,9521],{"class":51},[45,100486,26126],{"class":93},[45,100488,32524],{"class":257},[45,100490,209],{"class":51},[45,100492,501],{"class":257},[45,100494,30867],{"class":51},[45,100496,100497,100499,100501,100503,100505,100507,100509],{"class":47,"line":1277},[45,100498,3284],{"class":93},[45,100500,9583],{"class":51},[45,100502,26126],{"class":93},[45,100504,32524],{"class":257},[45,100506,209],{"class":51},[45,100508,280],{"class":257},[45,100510,30867],{"class":51},[45,100512,100513,100516,100518,100521,100523],{"class":47,"line":1283},[45,100514,100515],{"class":51},"        bb[i,j]",[45,100517,254],{"class":93},[45,100519,100520],{"class":51},"aa[i,j]",[45,100522,663],{"class":93},[45,100524,100525],{"class":51},"aa[i,j]\n",[45,100527,100528],{"class":47,"line":1297},[45,100529,100530],{"class":51},"bb\n",[30,100532,100534],{"id":100533},"_93-求各元素的符号","9.3 求各元素的符号",[10,100536,100537],{},[1545,100538],{"alt":40,"src":100539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[30,100541,100543],{"id":100542},"_94-modf函数","9.4 modf函数",[10,100545,100546],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[35,100548,100550],{"className":37,"code":100549,"language":39,"meta":40,"style":40},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[42,100551,100552,100575],{"__ignoreMap":40},[45,100553,100554,100556,100558,100560,100562,100564,100566,100568,100570,100573],{"class":47,"line":48},[45,100555,13],{"class":51},[45,100557,254],{"class":93},[45,100559,93053],{"class":51},[45,100561,94],{"class":93},[45,100563,654],{"class":257},[45,100565,586],{"class":51},[45,100567,654],{"class":257},[45,100569,586],{"class":51},[45,100571,100572],{"class":257},"0.3",[45,100574,215],{"class":51},[45,100576,100577],{"class":47,"line":125},[45,100578,100579],{"class":51},"np.modf(a)\n",[10,100581,100582],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[30,100584,100586],{"id":100585},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[10,100588,100589],{},"np.cell()",[10,100591,100592],{},"np.floor()",[10,100594,100595],{},"np.rint()",[10,100597,100598],{},"对各元素分别向上取整、向下取整、四舍五入",[10,100600,100601],{},[1545,100602],{"alt":40,"src":100603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[30,100605,100607],{"id":100606},"_96-around函数","9.6 around()函数",[10,100609,100610],{},"around()函数也可以实现对数的小数位数进行操作",[10,100612,100613],{},"其中的参数：",[10,100615,100616],{},"1.要传的数组",[10,100618,100619],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[10,100621,100622],{},[1545,100623],{"alt":40,"src":100624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[30,100626,100628],{"id":100627},"_97-三角函数","9.7 三角函数",[10,100630,100631],{},[1545,100632],{"alt":40,"src":100633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[10,100635,100636],{},"引入图像模块非常重要",[35,100638,100640],{"className":37,"code":100639,"language":39,"meta":40,"style":40},"from matplotlib import pyplot as plt\n",[42,100641,100642],{"__ignoreMap":40},[45,100643,100644,100646,100649,100651,100654,100656],{"class":47,"line":48},[45,100645,30818],{"class":93},[45,100647,100648],{"class":51}," matplotlib ",[45,100650,30473],{"class":93},[45,100652,100653],{"class":51}," pyplot ",[45,100655,31464],{"class":93},[45,100657,31518],{"class":51},[121,100659,100660],{},"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":40,"searchDepth":125,"depth":125,"links":100662},[100663,100664,100665,100666,100667,100668,100669],{"id":100211,"depth":125,"text":100212},{"id":100326,"depth":125,"text":100327},{"id":100533,"depth":125,"text":100534},{"id":100542,"depth":125,"text":100543},{"id":100585,"depth":125,"text":100586},{"id":100606,"depth":125,"text":100607},{"id":100627,"depth":125,"text":100628},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100175,"description":130},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100676,"title":100677,"body":100678,"description":130,"extension":131,"meta":100682,"navigation":133,"path":100683,"seo":100684,"stem":100685,"__hash__":100686},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100679,"toc":100680},[],{"title":40,"searchDepth":125,"depth":125,"links":100681},[],{"category":50501},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100677,"description":130},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100688,"title":100689,"body":100690,"description":40,"extension":131,"meta":102698,"navigation":133,"path":102699,"seo":102700,"stem":102701,"__hash__":102702},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100691,"toc":102674},[100692,100695,100699,100702,100705,100711,100714,100737,100740,100774,100777,100818,100822,100825,100918,100921,100965,100968,100985,100988,101002,101005,101008,101053,101056,101093,101097,101100,101106,101111,101131,101135,101138,101204,101207,101225,101229,101232,101261,101271,101277,101281,101284,101290,101301,101305,101308,101338,101341,101621,101624,101627,101638,101641,101644,101666,101673,101676,101694,101697,101700,101714,101722,101725,101751,101757,101760,101763,101773,101785,101805,101814,101834,101844,101868,101881,101895,101900,101941,101958,101983,101995,102015,102021,102066,102085,102102,102115,102131,102138,102150,102159,102194,102215,102240,102253,102277,102292,102317,102320,102341,102350,102353,102364,102368,102371,102377,102389,102396,102400,102403,102415,102418,102432,102435,102445,102455,102458,102498,102501,102505,102511,102514,102528,102532,102535,102568,102572,102575,102598,102606,102609,102615,102621,102624,102627,102655,102659,102662,102668,102671],[20,100693,100689],{"id":100694},"_1环境安装与第一个-mujoco-程序",[30,100696,100698],{"id":100697},"_1目标说明","1.目标说明",[10,100700,100701],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[10,100703,100704],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[35,100706,100709],{"className":100707,"code":100708,"language":5270,"meta":40},[5268],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[42,100710,100708],{"__ignoreMap":40},[10,100712,100713],{},"需要掌握:",[159,100715,100716,100719,100722,100727,100732],{},[162,100717,100718],{},"Fedora 44 下 MuJoCo 的系统依赖",[162,100720,100721],{},"Python 虚拟环境创建",[162,100723,100724],{},[42,100725,100726],{},"mujoco.MjModel",[162,100728,100729],{},[42,100730,100731],{},"mujoco.MjData",[162,100733,100734],{},[42,100735,100736],{},"mujoco.mj_step(model, data)",[10,100738,100739],{},"MuJoCo 中最重要的两个对象:",[346,100741,100742,100752],{},[349,100743,100744],{},[352,100745,100746,100749],{},[355,100747,100748],{"align":23819},"对象",[355,100750,100751],{"align":23819},"含义",[393,100753,100754,100764],{},[352,100755,100756,100761],{},[398,100757,100758],{"align":23819},[42,100759,100760],{},"MjModel",[398,100762,100763],{"align":23819},"模型结构，来自 XML，基本不随时间变化",[352,100765,100766,100771],{},[398,100767,100768],{"align":23819},[42,100769,100770],{},"MjData",[398,100772,100773],{"align":23819},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[10,100775,100776],{},"可以先用一个类比理解：",[346,100778,100779,100789],{},[349,100780,100781],{},[352,100782,100783,100786],{},[355,100784,100785],{"align":23819},"类比",[355,100787,100788],{"align":23819},"MuJoCo 对象",[393,100790,100791,100800,100809],{},[352,100792,100793,100796],{},[398,100794,100795],{"align":23819},"游戏地图和角色配置",[398,100797,100798],{"align":23819},[42,100799,100760],{},[352,100801,100802,100805],{},[398,100803,100804],{"align":23819},"游戏运行到当前帧的状态",[398,100806,100807],{"align":23819},[42,100808,100770],{},[352,100810,100811,100814],{},[398,100812,100813],{"align":23819},"前进一帧",[398,100815,100816],{"align":23819},[42,100817,100736],{},[30,100819,100821],{"id":100820},"_2环境与依赖安装","2.环境与依赖安装",[10,100823,100824],{},"Fedora 44 系统依赖:",[35,100826,100828],{"className":23905,"code":100827,"language":23907,"meta":40,"style":40},"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",[42,100829,100830,100842,100855,100868,100878,100888,100907],{"__ignoreMap":40},[45,100831,100832,100834,100836,100838,100840],{"class":47,"line":48},[45,100833,24659],{"class":2046},[45,100835,26398],{"class":313},[45,100837,23917],{"class":313},[45,100839,26483],{"class":257},[45,100841,24761],{"class":257},[45,100843,100844,100847,100850,100853],{"class":47,"line":125},[45,100845,100846],{"class":313},"  python3",[45,100848,100849],{"class":313}," python3-pip",[45,100851,100852],{"class":313}," python3-virtualenv",[45,100854,24761],{"class":257},[45,100856,100857,100860,100863,100866],{"class":47,"line":1262},[45,100858,100859],{"class":313},"  mesa-libGL",[45,100861,100862],{"class":313}," mesa-libGLU",[45,100864,100865],{"class":313}," mesa-dri-drivers",[45,100867,24761],{"class":257},[45,100869,100870,100873,100876],{"class":47,"line":1277},[45,100871,100872],{"class":313},"  libglvnd-glx",[45,100874,100875],{"class":313}," libglvnd-opengl",[45,100877,24761],{"class":257},[45,100879,100880,100883,100886],{"class":47,"line":1283},[45,100881,100882],{"class":313},"  glfw",[45,100884,100885],{"class":313}," glfw-devel",[45,100887,24761],{"class":257},[45,100889,100890,100893,100896,100899,100902,100905],{"class":47,"line":1297},[45,100891,100892],{"class":313},"  libX11",[45,100894,100895],{"class":313}," libXcursor",[45,100897,100898],{"class":313}," libXi",[45,100900,100901],{"class":313}," libXinerama",[45,100903,100904],{"class":313}," libXrandr",[45,100906,24761],{"class":257},[45,100908,100909,100912,100915],{"class":47,"line":1303},[45,100910,100911],{"class":313},"  gcc",[45,100913,100914],{"class":313}," gcc-c++",[45,100916,100917],{"class":313}," make\n",[10,100919,100920],{},"创建 Python 环境:",[35,100922,100924],{"className":23905,"code":100923,"language":23907,"meta":40,"style":40},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[42,100925,100926,100940,100948],{"__ignoreMap":40},[45,100927,100928,100931,100934,100937],{"class":47,"line":48},[45,100929,100930],{"class":2046},"python3",[45,100932,100933],{"class":257}," -m",[45,100935,100936],{"class":313}," venv",[45,100938,100939],{"class":313}," .venv\n",[45,100941,100942,100945],{"class":47,"line":125},[45,100943,100944],{"class":257},"source",[45,100946,100947],{"class":313}," .venv\u002Fbin\u002Factivate\n",[45,100949,100950,100952,100954,100957,100959,100962],{"class":47,"line":1262},[45,100951,39],{"class":2046},[45,100953,100933],{"class":257},[45,100955,100956],{"class":313}," pip",[45,100958,23917],{"class":313},[45,100960,100961],{"class":257}," --upgrade",[45,100963,100964],{"class":313}," pip\n",[10,100966,100967],{},"pip 安装:",[35,100969,100971],{"className":23905,"code":100970,"language":23907,"meta":40,"style":40},"pip install \"mujoco>=2.3\" numpy\n",[42,100972,100973],{"__ignoreMap":40},[45,100974,100975,100977,100979,100982],{"class":47,"line":48},[45,100976,23914],{"class":2046},[45,100978,23917],{"class":313},[45,100980,100981],{"class":313}," \"mujoco>=2.3\"",[45,100983,100984],{"class":313}," numpy\n",[10,100986,100987],{},"安装完成后，先做最小检查：",[35,100989,100991],{"className":23905,"code":100990,"language":23907,"meta":40,"style":40},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[42,100992,100993],{"__ignoreMap":40},[45,100994,100995,100997,100999],{"class":47,"line":48},[45,100996,39],{"class":2046},[45,100998,30441],{"class":257},[45,101000,101001],{"class":313}," \"import mujoco; print(mujoco.__version__)\"\n",[10,101003,101004],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[10,101006,101007],{},"conda 安装:",[35,101009,101011],{"className":23905,"code":101010,"language":23907,"meta":40,"style":40},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[42,101012,101013,101033,101043],{"__ignoreMap":40},[45,101014,101015,101017,101019,101021,101024,101027,101030],{"class":47,"line":48},[45,101016,30413],{"class":2046},[45,101018,29259],{"class":313},[45,101020,25198],{"class":257},[45,101022,101023],{"class":313}," mujoco-study",[45,101025,101026],{"class":313}," python=",[45,101028,101029],{"class":257},"3.10",[45,101031,101032],{"class":257}," -y\n",[45,101034,101035,101037,101040],{"class":47,"line":125},[45,101036,30413],{"class":2046},[45,101038,101039],{"class":313}," activate",[45,101041,101042],{"class":313}," mujoco-study\n",[45,101044,101045,101047,101049,101051],{"class":47,"line":1262},[45,101046,23914],{"class":2046},[45,101048,23917],{"class":313},[45,101050,100981],{"class":313},[45,101052,100984],{"class":313},[10,101054,101055],{},"版本冲突说明:",[159,101057,101058,101064,101074,101083],{},[162,101059,101060,101061,28468],{},"不要安装 ",[42,101062,101063],{},"mujoco-py",[162,101065,101066,101067,101069,101070,101073],{},"如果旧项目里同时安装了 ",[42,101068,101063],{}," 和 ",[42,101071,101072],{},"mujoco","，建议新建干净虚拟环境。",[162,101075,101076,101079,101080,28468],{},[42,101077,101078],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[42,101081,101082],{},"~\u002F.mujoco\u002Fmujoco210",[162,101084,101085,101086,82620,101089,101092],{},"离屏渲染可能涉及 OpenGL 后端，",[42,101087,101088],{},"MUJOCO_GL=egl",[42,101090,101091],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[30,101094,101096],{"id":101095},"_3核心概念解释","3.核心概念解释",[10,101098,101099],{},"MuJoCo 的基本执行流程:",[35,101101,101104],{"className":101102,"code":101103,"language":5270,"meta":40},[5268],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[42,101105,101103],{"__ignoreMap":40},[10,101107,101108,101110],{},[42,101109,100760],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[10,101112,101113,101115,101116,421,101119,421,101122,421,101125,421,101128,28468],{},[42,101114,100770],{}," 存放仿真运行时状态，例如 ",[42,101117,101118],{},"data.time",[42,101120,101121],{},"data.qpos",[42,101123,101124],{},"data.qvel",[42,101126,101127],{},"data.ctrl",[42,101129,101130],{},"data.xpos",[176,101132,101134],{"id":101133},"xml-是什么","XML 是什么",[10,101136,101137],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[35,101139,101141],{"className":53148,"code":101140,"language":53150,"meta":40,"style":40},"\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",[42,101142,101143,101165,101196],{"__ignoreMap":40},[45,101144,101145,101147,101149,101151,101153,101155,101158,101160,101163],{"class":47,"line":48},[45,101146,1117],{"class":51},[45,101148,51881],{"class":51381},[45,101150,15003],{"class":2046},[45,101152,254],{"class":51},[45,101154,53572],{"class":313},[45,101156,101157],{"class":2046}," pos",[45,101159,254],{"class":51},[45,101161,101162],{"class":313},"\"0 0 1\"",[45,101164,51388],{"class":51},[45,101166,101167,101169,101172,101174,101176,101179,101181,101183,101185,101188,101190,101193],{"class":47,"line":125},[45,101168,52225],{"class":51},[45,101170,101171],{"class":51381},"geom",[45,101173,15003],{"class":2046},[45,101175,254],{"class":51},[45,101177,101178],{"class":313},"\"box_geom\"",[45,101180,53905],{"class":2046},[45,101182,254],{"class":51},[45,101184,53572],{"class":313},[45,101186,101187],{"class":2046}," size",[45,101189,254],{"class":51},[45,101191,101192],{"class":313},"\"0.1 0.1 0.1\"",[45,101194,101195],{"class":51},"\u002F>\n",[45,101197,101198,101200,101202],{"class":47,"line":1262},[45,101199,51866],{"class":51},[45,101201,51881],{"class":51381},[45,101203,51388],{"class":51},[10,101205,101206],{},"这段意思是：",[159,101208,101209,101215,101222],{},[162,101210,101211,101212,101214],{},"创建一个叫 ",[42,101213,53795],{}," 的刚体。",[162,101216,101217,101218,101221],{},"它初始放在 ",[42,101219,101220],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[162,101223,101224],{},"它里面有一个盒子形状的几何体。",[176,101226,101228],{"id":101227},"timestep-是什么","timestep 是什么",[10,101230,101231],{},"XML 里的：",[35,101233,101235],{"className":53148,"code":101234,"language":53150,"meta":40,"style":40},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[42,101236,101237],{"__ignoreMap":40},[45,101238,101239,101241,101243,101246,101248,101251,101254,101256,101259],{"class":47,"line":48},[45,101240,1117],{"class":51},[45,101242,69247],{"class":51381},[45,101244,101245],{"class":2046}," timestep",[45,101247,254],{"class":51},[45,101249,101250],{"class":313},"\"0.01\"",[45,101252,101253],{"class":2046}," gravity",[45,101255,254],{"class":51},[45,101257,101258],{"class":313},"\"0 0 -9.81\"",[45,101260,101195],{"class":51},[10,101262,101263,101264,101267,101268,101270],{},"表示每调用一次 ",[42,101265,101266],{},"mj_step","，仿真时间前进 ",[42,101269,39067],{}," 秒。循环 100 次，大约就是 1 秒：",[35,101272,101275],{"className":101273,"code":101274,"language":5270,"meta":40},[5268],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[42,101276,101274],{"__ignoreMap":40},[176,101278,101280],{"id":101279},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[10,101282,101283],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[35,101285,101288],{"className":101286,"code":101287,"language":5270,"meta":40},[5268],"x y z qw qx qy qz\n",[42,101289,101287],{"__ignoreMap":40},[10,101291,101292,101293,101296,101297,101300],{},"表示一个自由刚体的位置和姿态。其中 ",[42,101294,101295],{},"x y z"," 是位置，",[42,101298,101299],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[30,101302,101304],{"id":101303},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[10,101306,101307],{},"新建文件:",[35,101309,101311],{"className":23905,"code":101310,"language":23907,"meta":40,"style":40},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[42,101312,101313,101323,101330],{"__ignoreMap":40},[45,101314,101315,101318,101320],{"class":47,"line":48},[45,101316,101317],{"class":2046},"mkdir",[45,101319,29299],{"class":257},[45,101321,101322],{"class":313}," mujoco_tutorial\n",[45,101324,101325,101328],{"class":47,"line":125},[45,101326,101327],{"class":257},"cd",[45,101329,101322],{"class":313},[45,101331,101332,101335],{"class":47,"line":1262},[45,101333,101334],{"class":2046},"touch",[45,101336,101337],{"class":313}," ch1_first_sim.py\n",[10,101339,101340],{},"写入:",[35,101342,101344],{"className":37,"code":101343,"language":39,"meta":40,"style":40},"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",[42,101345,101346,101353,101357,101361,101371,101376,101381,101385,101390,101395,101399,101404,101409,101414,101419,101424,101429,101433,101437,101441,101454,101468,101478,101482,101494,101506,101518,101530,101542,101546,101563,101568,101572,101583,101594,101598,101602,101616],{"__ignoreMap":40},[45,101347,101348,101350],{"class":47,"line":48},[45,101349,30473],{"class":93},[45,101351,101352],{"class":51}," mujoco\n",[45,101354,101355],{"class":47,"line":125},[45,101356,2483],{"emptyLinePlaceholder":133},[45,101358,101359],{"class":47,"line":1262},[45,101360,2483],{"emptyLinePlaceholder":133},[45,101362,101363,101366,101368],{"class":47,"line":1277},[45,101364,101365],{"class":257},"XML",[45,101367,13647],{"class":93},[45,101369,101370],{"class":313}," \"\"\"\n",[45,101372,101373],{"class":47,"line":1283},[45,101374,101375],{"class":313},"\u003Cmujoco model=\"first_sim\">\n",[45,101377,101378],{"class":47,"line":1297},[45,101379,101380],{"class":313},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[45,101382,101383],{"class":47,"line":1303},[45,101384,2483],{"emptyLinePlaceholder":133},[45,101386,101387],{"class":47,"line":1394},[45,101388,101389],{"class":313},"  \u003Cworldbody>\n",[45,101391,101392],{"class":47,"line":1400},[45,101393,101394],{"class":313},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[45,101396,101397],{"class":47,"line":1412},[45,101398,2483],{"emptyLinePlaceholder":133},[45,101400,101401],{"class":47,"line":1695},[45,101402,101403],{"class":313},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[45,101405,101406],{"class":47,"line":1700},[45,101407,101408],{"class":313},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[45,101410,101411],{"class":47,"line":1706},[45,101412,101413],{"class":313},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[45,101415,101416],{"class":47,"line":1711},[45,101417,101418],{"class":313},"    \u003C\u002Fbody>\n",[45,101420,101421],{"class":47,"line":1725},[45,101422,101423],{"class":313},"  \u003C\u002Fworldbody>\n",[45,101425,101426],{"class":47,"line":1730},[45,101427,101428],{"class":313},"\u003C\u002Fmujoco>\n",[45,101430,101431],{"class":47,"line":1736},[45,101432,95749],{"class":313},[45,101434,101435],{"class":47,"line":1757},[45,101436,2483],{"emptyLinePlaceholder":133},[45,101438,101439],{"class":47,"line":1762},[45,101440,2483],{"emptyLinePlaceholder":133},[45,101442,101443,101445,101447,101450,101452],{"class":47,"line":1776},[45,101444,32028],{"class":93},[45,101446,2056],{"class":2046},[45,101448,101449],{"class":51},"() -> ",[45,101451,95737],{"class":257},[45,101453,3822],{"class":51},[45,101455,101456,101459,101461,101464,101466],{"class":47,"line":1781},[45,101457,101458],{"class":51},"    model ",[45,101460,254],{"class":93},[45,101462,101463],{"class":51}," mujoco.MjModel.from_xml_string(",[45,101465,101365],{"class":257},[45,101467,215],{"class":51},[45,101469,101470,101473,101475],{"class":47,"line":1810},[45,101471,101472],{"class":51},"    data ",[45,101474,254],{"class":93},[45,101476,101477],{"class":51}," mujoco.MjData(model)\n",[45,101479,101480],{"class":47,"line":1815},[45,101481,2483],{"emptyLinePlaceholder":133},[45,101483,101484,101486,101488,101491],{"class":47,"line":1832},[45,101485,31380],{"class":257},[45,101487,209],{"class":51},[45,101489,101490],{"class":313},"\"nq:\"",[45,101492,101493],{"class":51},", model.nq)\n",[45,101495,101496,101498,101500,101503],{"class":47,"line":1837},[45,101497,31380],{"class":257},[45,101499,209],{"class":51},[45,101501,101502],{"class":313},"\"nv:\"",[45,101504,101505],{"class":51},", model.nv)\n",[45,101507,101508,101510,101512,101515],{"class":47,"line":1842},[45,101509,31380],{"class":257},[45,101511,209],{"class":51},[45,101513,101514],{"class":313},"\"nu:\"",[45,101516,101517],{"class":51},", model.nu)\n",[45,101519,101520,101522,101524,101527],{"class":47,"line":1847},[45,101521,31380],{"class":257},[45,101523,209],{"class":51},[45,101525,101526],{"class":313},"\"initial time:\"",[45,101528,101529],{"class":51},", data.time)\n",[45,101531,101532,101534,101536,101539],{"class":47,"line":1861},[45,101533,31380],{"class":257},[45,101535,209],{"class":51},[45,101537,101538],{"class":313},"\"initial qpos:\"",[45,101540,101541],{"class":51},", data.qpos.copy())\n",[45,101543,101544],{"class":47,"line":1866},[45,101545,2483],{"emptyLinePlaceholder":133},[45,101547,101548,101550,101553,101555,101557,101559,101561],{"class":47,"line":2660},[45,101549,3284],{"class":93},[45,101551,101552],{"class":51}," _ ",[45,101554,26126],{"class":93},[45,101556,32524],{"class":257},[45,101558,209],{"class":51},[45,101560,519],{"class":257},[45,101562,30867],{"class":51},[45,101564,101565],{"class":47,"line":2674},[45,101566,101567],{"class":51},"        mujoco.mj_step(model, data)\n",[45,101569,101570],{"class":47,"line":2682},[45,101571,2483],{"emptyLinePlaceholder":133},[45,101573,101574,101576,101578,101581],{"class":47,"line":2687},[45,101575,31380],{"class":257},[45,101577,209],{"class":51},[45,101579,101580],{"class":313},"\"final time:\"",[45,101582,101529],{"class":51},[45,101584,101585,101587,101589,101592],{"class":47,"line":2693},[45,101586,31380],{"class":257},[45,101588,209],{"class":51},[45,101590,101591],{"class":313},"\"final qpos:\"",[45,101593,101541],{"class":51},[45,101595,101596],{"class":47,"line":2699},[45,101597,2483],{"emptyLinePlaceholder":133},[45,101599,101600],{"class":47,"line":2704},[45,101601,2483],{"emptyLinePlaceholder":133},[45,101603,101604,101606,101608,101611,101614],{"class":47,"line":8031},[45,101605,1614],{"class":93},[45,101607,31301],{"class":257},[45,101609,101610],{"class":93}," ==",[45,101612,101613],{"class":313}," \"__main__\"",[45,101615,3822],{"class":51},[45,101617,101618],{"class":47,"line":8055},[45,101619,101620],{"class":51},"    main()\n",[176,101622,101623],{"id":101623},"代码逐段解释",[10,101625,101626],{},"导入库：",[35,101628,101630],{"className":37,"code":101629,"language":39,"meta":40,"style":40},"import mujoco\n",[42,101631,101632],{"__ignoreMap":40},[45,101633,101634,101636],{"class":47,"line":48},[45,101635,30473],{"class":93},[45,101637,101352],{"class":51},[10,101639,101640],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[10,101642,101643],{},"定义 XML：",[35,101645,101647],{"className":37,"code":101646,"language":39,"meta":40,"style":40},"XML = \"\"\"\n...\n\"\"\"\n",[42,101648,101649,101657,101662],{"__ignoreMap":40},[45,101650,101651,101653,101655],{"class":47,"line":48},[45,101652,101365],{"class":257},[45,101654,13647],{"class":93},[45,101656,101370],{"class":313},[45,101658,101659],{"class":47,"line":125},[45,101660,101661],{"class":313},"...\n",[45,101663,101664],{"class":47,"line":1262},[45,101665,95749],{"class":313},[10,101667,101668,101669,101672],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[42,101670,101671],{},"freejoint"," 的方块。",[10,101674,101675],{},"编译模型：",[35,101677,101679],{"className":37,"code":101678,"language":39,"meta":40,"style":40},"model = mujoco.MjModel.from_xml_string(XML)\n",[42,101680,101681],{"__ignoreMap":40},[45,101682,101683,101686,101688,101690,101692],{"class":47,"line":48},[45,101684,101685],{"class":51},"model ",[45,101687,254],{"class":93},[45,101689,101463],{"class":51},[45,101691,101365],{"class":257},[45,101693,215],{"class":51},[10,101695,101696],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[10,101698,101699],{},"创建数据：",[35,101701,101703],{"className":37,"code":101702,"language":39,"meta":40,"style":40},"data = mujoco.MjData(model)\n",[42,101704,101705],{"__ignoreMap":40},[45,101706,101707,101710,101712],{"class":47,"line":48},[45,101708,101709],{"class":51},"data ",[45,101711,254],{"class":93},[45,101713,101477],{"class":51},[10,101715,101716,101718,101719,101721],{},[42,101717,33482],{}," 会保存仿真当前状态。刚创建时，时间是 ",[42,101720,400],{},"，方块还在初始位置。",[10,101723,101724],{},"推进仿真：",[35,101726,101728],{"className":37,"code":101727,"language":39,"meta":40,"style":40},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[42,101729,101730,101746],{"__ignoreMap":40},[45,101731,101732,101734,101736,101738,101740,101742,101744],{"class":47,"line":48},[45,101733,3108],{"class":93},[45,101735,101552],{"class":51},[45,101737,26126],{"class":93},[45,101739,32524],{"class":257},[45,101741,209],{"class":51},[45,101743,519],{"class":257},[45,101745,30867],{"class":51},[45,101747,101748],{"class":47,"line":125},[45,101749,101750],{"class":51},"    mujoco.mj_step(model, data)\n",[10,101752,101753,101754,101756],{},"每次 ",[42,101755,101266],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[176,101758,101759],{"id":101759},"代码逐行细讲",[10,101761,101762],{},"下面把完整代码按新手视角拆开讲。",[35,101764,101765],{"className":37,"code":101629,"language":39,"meta":40,"style":40},[42,101766,101767],{"__ignoreMap":40},[45,101768,101769,101771],{"class":47,"line":48},[45,101770,30473],{"class":93},[45,101772,101352],{"class":51},[10,101774,101775,101777,101778,421,101780,421,101782,28468],{},[42,101776,30473],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[42,101779,100726],{},[42,101781,100731],{},[42,101783,101784],{},"mujoco.mj_step",[35,101786,101787],{"className":37,"code":101646,"language":39,"meta":40,"style":40},[42,101788,101789,101797,101801],{"__ignoreMap":40},[45,101790,101791,101793,101795],{"class":47,"line":48},[45,101792,101365],{"class":257},[45,101794,13647],{"class":93},[45,101796,101370],{"class":313},[45,101798,101799],{"class":47,"line":125},[45,101800,101661],{"class":313},[45,101802,101803],{"class":47,"line":1262},[45,101804,95749],{"class":313},[10,101806,101807,101809,101810,101813],{},[42,101808,101365],{}," 是一个变量名。右边的三引号 ",[42,101811,101812],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[35,101815,101816],{"className":53148,"code":101375,"language":53150,"meta":40,"style":40},[42,101817,101818],{"__ignoreMap":40},[45,101819,101820,101822,101824,101827,101829,101832],{"class":47,"line":48},[45,101821,1117],{"class":51},[45,101823,101072],{"class":51381},[45,101825,101826],{"class":2046}," model",[45,101828,254],{"class":51},[45,101830,101831],{"class":313},"\"first_sim\"",[45,101833,51388],{"class":51},[10,101835,101836,101837,101840,101841,28468],{},"这是 XML 的根标签。",[42,101838,101839],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[42,101842,101843],{},"first_sim",[35,101845,101846],{"className":53148,"code":101234,"language":53150,"meta":40,"style":40},[42,101847,101848],{"__ignoreMap":40},[45,101849,101850,101852,101854,101856,101858,101860,101862,101864,101866],{"class":47,"line":48},[45,101851,1117],{"class":51},[45,101853,69247],{"class":51381},[45,101855,101245],{"class":2046},[45,101857,254],{"class":51},[45,101859,101250],{"class":313},[45,101861,101253],{"class":2046},[45,101863,254],{"class":51},[45,101865,101258],{"class":313},[45,101867,101195],{"class":51},[10,101869,101870,101872,101873,101876,101877,101880],{},[42,101871,69247],{}," 用来设置仿真参数。",[42,101874,101875],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[42,101878,101879],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[35,101882,101884],{"className":53148,"code":101883,"language":53150,"meta":40,"style":40},"\u003Cworldbody>\n",[42,101885,101886],{"__ignoreMap":40},[45,101887,101888,101890,101893],{"class":47,"line":48},[45,101889,1117],{"class":51},[45,101891,101892],{"class":51381},"worldbody",[45,101894,51388],{"class":51},[10,101896,101897,101899],{},[42,101898,101892],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[35,101901,101903],{"className":53148,"code":101902,"language":53150,"meta":40,"style":40},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[42,101904,101905],{"__ignoreMap":40},[45,101906,101907,101909,101911,101913,101915,101918,101920,101922,101925,101927,101929,101932,101934,101936,101939],{"class":47,"line":48},[45,101908,1117],{"class":51},[45,101910,101171],{"class":51381},[45,101912,15003],{"class":2046},[45,101914,254],{"class":51},[45,101916,101917],{"class":313},"\"floor\"",[45,101919,53905],{"class":2046},[45,101921,254],{"class":51},[45,101923,101924],{"class":313},"\"plane\"",[45,101926,101187],{"class":2046},[45,101928,254],{"class":51},[45,101930,101931],{"class":313},"\"2 2 0.1\"",[45,101933,78848],{"class":2046},[45,101935,254],{"class":51},[45,101937,101938],{"class":313},"\"0.8 0.8 0.8 1\"",[45,101940,101195],{"class":51},[10,101942,101943,101944,101946,101947,101950,101951,101954,101955,101957],{},"这行创建地面。",[42,101945,101171],{}," 是几何体。",[42,101948,101949],{},"name=\"floor\""," 是名字。",[42,101952,101953],{},"type=\"plane\""," 表示平面。",[42,101956,55191],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[35,101959,101961],{"className":53148,"code":101960,"language":53150,"meta":40,"style":40},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[42,101962,101963],{"__ignoreMap":40},[45,101964,101965,101967,101969,101971,101973,101975,101977,101979,101981],{"class":47,"line":48},[45,101966,1117],{"class":51},[45,101968,51881],{"class":51381},[45,101970,15003],{"class":2046},[45,101972,254],{"class":51},[45,101974,53572],{"class":313},[45,101976,101157],{"class":2046},[45,101978,254],{"class":51},[45,101980,101162],{"class":313},[45,101982,51388],{"class":51},[10,101984,101985,101986,28468,101988,101991,101992,101994],{},"这行创建一个刚体，名字叫 ",[42,101987,53795],{},[42,101989,101990],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[42,101993,101220],{},"，也就是离地面 1 米高。",[35,101996,101998],{"className":53148,"code":101997,"language":53150,"meta":40,"style":40},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[42,101999,102000],{"__ignoreMap":40},[45,102001,102002,102004,102006,102008,102010,102013],{"class":47,"line":48},[45,102003,1117],{"class":51},[45,102005,101671],{"class":51381},[45,102007,15003],{"class":2046},[45,102009,254],{"class":51},[45,102011,102012],{"class":313},"\"box_free\"",[45,102014,101195],{"class":51},[10,102016,102017,102018,102020],{},"这行很重要。",[42,102019,101671],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[35,102022,102024],{"className":53148,"code":102023,"language":53150,"meta":40,"style":40},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[42,102025,102026],{"__ignoreMap":40},[45,102027,102028,102030,102032,102034,102036,102038,102040,102042,102044,102046,102048,102050,102053,102055,102057,102059,102061,102064],{"class":47,"line":48},[45,102029,1117],{"class":51},[45,102031,101171],{"class":51381},[45,102033,15003],{"class":2046},[45,102035,254],{"class":51},[45,102037,101178],{"class":313},[45,102039,53905],{"class":2046},[45,102041,254],{"class":51},[45,102043,53572],{"class":313},[45,102045,101187],{"class":2046},[45,102047,254],{"class":51},[45,102049,101192],{"class":313},[45,102051,102052],{"class":2046}," mass",[45,102054,254],{"class":51},[45,102056,3761],{"class":313},[45,102058,78848],{"class":2046},[45,102060,254],{"class":51},[45,102062,102063],{"class":313},"\"1 0 0 1\"",[45,102065,101195],{"class":51},[10,102067,102068,102069,102072,102073,102076,102077,102080,102081,102084],{},"这行给 box body 添加一个盒子形状。",[42,102070,102071],{},"type=\"box\""," 表示形状是盒子。",[42,102074,102075],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[42,102078,102079],{},"mass=\"1\""," 表示质量是 1。",[42,102082,102083],{},"rgba=\"1 0 0 1\""," 表示红色。",[35,102086,102088],{"className":37,"code":102087,"language":39,"meta":40,"style":40},"def main() -> None:\n",[42,102089,102090],{"__ignoreMap":40},[45,102091,102092,102094,102096,102098,102100],{"class":47,"line":48},[45,102093,32028],{"class":93},[45,102095,2056],{"class":2046},[45,102097,101449],{"class":51},[45,102099,95737],{"class":257},[45,102101,3822],{"class":51},[10,102103,102104,102106,102107,102110,102111,102114],{},[42,102105,32028],{}," 用来定义函数。这里定义了一个叫 ",[42,102108,102109],{},"main"," 的函数。",[42,102112,102113],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[35,102116,102117],{"className":37,"code":101678,"language":39,"meta":40,"style":40},[42,102118,102119],{"__ignoreMap":40},[45,102120,102121,102123,102125,102127,102129],{"class":47,"line":48},[45,102122,101685],{"class":51},[45,102124,254],{"class":93},[45,102126,101463],{"class":51},[45,102128,101365],{"class":257},[45,102130,215],{"class":51},[10,102132,102133,102134,102137],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[42,102135,102136],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[35,102139,102140],{"className":37,"code":101702,"language":39,"meta":40,"style":40},[42,102141,102142],{"__ignoreMap":40},[45,102143,102144,102146,102148],{"class":47,"line":48},[45,102145,101709],{"class":51},[45,102147,254],{"class":93},[45,102149,101477],{"class":51},[10,102151,102152,102153,102155,102156,102158],{},"这行创建仿真数据。",[42,102154,33482],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[42,102157,33482],{}," 都会变化。",[35,102160,102162],{"className":37,"code":102161,"language":39,"meta":40,"style":40},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[42,102163,102164,102174,102184],{"__ignoreMap":40},[45,102165,102166,102168,102170,102172],{"class":47,"line":48},[45,102167,30496],{"class":257},[45,102169,209],{"class":51},[45,102171,101490],{"class":313},[45,102173,101493],{"class":51},[45,102175,102176,102178,102180,102182],{"class":47,"line":125},[45,102177,30496],{"class":257},[45,102179,209],{"class":51},[45,102181,101502],{"class":313},[45,102183,101505],{"class":51},[45,102185,102186,102188,102190,102192],{"class":47,"line":1262},[45,102187,30496],{"class":257},[45,102189,209],{"class":51},[45,102191,101514],{"class":313},[45,102193,101517],{"class":51},[10,102195,102196,102198,102199,102202,102203,102206,102207,102210,102211,102214],{},[42,102197,30496],{}," 用来输出信息。",[42,102200,102201],{},"model.nq"," 是位置变量数量，",[42,102204,102205],{},"model.nv"," 是速度变量数量，",[42,102208,102209],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[42,102212,102213],{},"nu"," 是 0。",[35,102216,102218],{"className":37,"code":102217,"language":39,"meta":40,"style":40},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[42,102219,102220,102230],{"__ignoreMap":40},[45,102221,102222,102224,102226,102228],{"class":47,"line":48},[45,102223,30496],{"class":257},[45,102225,209],{"class":51},[45,102227,101526],{"class":313},[45,102229,101529],{"class":51},[45,102231,102232,102234,102236,102238],{"class":47,"line":125},[45,102233,30496],{"class":257},[45,102235,209],{"class":51},[45,102237,101538],{"class":313},[45,102239,101541],{"class":51},[10,102241,102242,102243,102245,102246,102248,102249,102252],{},"这里打印初始时间和初始位置。",[42,102244,101118],{}," 一开始是 0。",[42,102247,101121],{}," 是位置数组。",[42,102250,102251],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[35,102254,102255],{"className":37,"code":101727,"language":39,"meta":40,"style":40},[42,102256,102257,102273],{"__ignoreMap":40},[45,102258,102259,102261,102263,102265,102267,102269,102271],{"class":47,"line":48},[45,102260,3108],{"class":93},[45,102262,101552],{"class":51},[45,102264,26126],{"class":93},[45,102266,32524],{"class":257},[45,102268,209],{"class":51},[45,102270,519],{"class":257},[45,102272,30867],{"class":51},[45,102274,102275],{"class":47,"line":125},[45,102276,101750],{"class":51},[10,102278,102279,102281,102282,102285,102286,102288,102289,102291],{},[42,102280,3108],{}," 是循环。",[42,102283,102284],{},"range(100)"," 表示循环 100 次。",[42,102287,1199],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[42,102290,101266],{},"，仿真就前进一步。",[35,102293,102295],{"className":37,"code":102294,"language":39,"meta":40,"style":40},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[42,102296,102297,102307],{"__ignoreMap":40},[45,102298,102299,102301,102303,102305],{"class":47,"line":48},[45,102300,30496],{"class":257},[45,102302,209],{"class":51},[45,102304,101580],{"class":313},[45,102306,101529],{"class":51},[45,102308,102309,102311,102313,102315],{"class":47,"line":125},[45,102310,30496],{"class":257},[45,102312,209],{"class":51},[45,102314,101591],{"class":313},[45,102316,101541],{"class":51},[10,102318,102319],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[35,102321,102323],{"className":37,"code":102322,"language":39,"meta":40,"style":40},"if __name__ == \"__main__\":\n    main()\n",[42,102324,102325,102337],{"__ignoreMap":40},[45,102326,102327,102329,102331,102333,102335],{"class":47,"line":48},[45,102328,1614],{"class":93},[45,102330,31301],{"class":257},[45,102332,101610],{"class":93},[45,102334,101613],{"class":313},[45,102336,3822],{"class":51},[45,102338,102339],{"class":47,"line":125},[45,102340,101620],{"class":51},[10,102342,102343,102344,102347,102348,28468],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[42,102345,102346],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[42,102349,102346],{},[10,102351,102352],{},"运行:",[35,102354,102356],{"className":23905,"code":102355,"language":23907,"meta":40,"style":40},"python ch1_first_sim.py\n",[42,102357,102358],{"__ignoreMap":40},[45,102359,102360,102362],{"class":47,"line":48},[45,102361,39],{"class":2046},[45,102363,101337],{"class":313},[30,102365,102367],{"id":102366},"_5运行结果说明","5.运行结果说明",[10,102369,102370],{},"你应该看到类似输出:",[35,102372,102375],{"className":102373,"code":102374,"language":5270,"meta":40},[5268],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[42,102376,102374],{"__ignoreMap":40},[10,102378,102379,102381,102382,102385,102386,28468],{},[42,102380,101671],{}," 有 7 个位置变量: ",[42,102383,102384],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[42,102387,102388],{},"vx vy vz wx wy wz",[10,102390,102391,102392,102395],{},"你还会看到 ",[42,102393,102394],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[30,102397,102399],{"id":102398},"_6验证步骤","6.验证步骤",[10,102401,102402],{},"确认版本:",[35,102404,102405],{"className":23905,"code":100990,"language":23907,"meta":40,"style":40},[42,102406,102407],{"__ignoreMap":40},[45,102408,102409,102411,102413],{"class":47,"line":48},[45,102410,39],{"class":2046},[45,102412,30441],{"class":257},[45,102414,101001],{"class":313},[10,102416,102417],{},"确认导入的是官方 bindings:",[35,102419,102421],{"className":23905,"code":102420,"language":23907,"meta":40,"style":40},"python -c \"import mujoco; print(mujoco)\"\n",[42,102422,102423],{"__ignoreMap":40},[45,102424,102425,102427,102429],{"class":47,"line":48},[45,102426,39],{"class":2046},[45,102428,30441],{"class":257},[45,102430,102431],{"class":313}," \"import mujoco; print(mujoco)\"\n",[10,102433,102434],{},"运行程序:",[35,102436,102437],{"className":23905,"code":102355,"language":23907,"meta":40,"style":40},[42,102438,102439],{"__ignoreMap":40},[45,102440,102441,102443],{"class":47,"line":48},[45,102442,39],{"class":2046},[45,102444,101337],{"class":313},[10,102446,102447,102448,102451,102452,28468],{},"检查 ",[42,102449,102450],{},"final time"," 是否约等于 ",[42,102453,102454],{},"1.0",[10,102456,102457],{},"再做几个小实验：",[159,102459,102460,102470,102478,102491],{},[162,102461,102462,102463,102465,102466,102469],{},"把 ",[42,102464,101990],{}," 改成 ",[42,102467,102468],{},"pos=\"0 0 2\"","，观察初始高度变化。",[162,102471,102462,102472,102465,102474,102477],{},[42,102473,101879],{},[42,102475,102476],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[162,102479,102462,102480,102465,102482,102485,102486,102488,102489,28468],{},[42,102481,101875],{},[42,102483,102484],{},"timestep=\"0.005\"","，观察 100 步后的 ",[42,102487,102450],{}," 是否变成约 ",[42,102490,35410],{},[162,102492,102493,102494,102497],{},"删除 ",[42,102495,102496],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[10,102499,102500],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[30,102502,102504],{"id":102503},"_7常见错误与解决方案","7.常见错误与解决方案",[176,102506,102508],{"id":102507},"modulenotfounderror-no-module-named-mujoco",[42,102509,102510],{},"ModuleNotFoundError: No module named 'mujoco'",[10,102512,102513],{},"解决:",[35,102515,102517],{"className":23905,"code":102516,"language":23907,"meta":40,"style":40},"pip install \"mujoco>=2.3\"\n",[42,102518,102519],{"__ignoreMap":40},[45,102520,102521,102523,102525],{"class":47,"line":48},[45,102522,23914],{"class":2046},[45,102524,23917],{"class":313},[45,102526,102527],{"class":313}," \"mujoco>=2.3\"\n",[176,102529,102531],{"id":102530},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[10,102533,102534],{},"先安装系统依赖:",[35,102536,102538],{"className":23905,"code":102537,"language":23907,"meta":40,"style":40},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[42,102539,102540],{"__ignoreMap":40},[45,102541,102542,102544,102546,102548,102550,102553,102555,102558,102560,102563,102565],{"class":47,"line":48},[45,102543,24659],{"class":2046},[45,102545,26398],{"class":313},[45,102547,23917],{"class":313},[45,102549,26483],{"class":257},[45,102551,102552],{"class":313}," mesa-libGL",[45,102554,100865],{"class":313},[45,102556,102557],{"class":313}," glfw",[45,102559,100885],{"class":313},[45,102561,102562],{"class":313}," libX11",[45,102564,100898],{"class":313},[45,102566,102567],{"class":313}," libXrandr\n",[176,102569,102571],{"id":102570},"xml-解析失败","XML 解析失败",[10,102573,102574],{},"检查:",[159,102576,102577,102580,102583,102589],{},[162,102578,102579],{},"标签是否闭合",[162,102581,102582],{},"属性是否带引号",[162,102584,102585,102586],{},"根节点是否是 ",[42,102587,102588],{},"\u003Cmujoco>",[162,102590,102591,102593,102594,102597],{},[42,102592,51881],{}," 是否放在 ",[42,102595,102596],{},"\u003Cworldbody>"," 内部",[176,102599,102601,102603,102604],{"id":102600},"final-time-不是严格等于-10",[42,102602,102450],{}," 不是严格等于 ",[42,102605,102454],{},[10,102607,102608],{},"这通常不是错误。浮点数计算可能得到：",[35,102610,102613],{"className":102611,"code":102612,"language":5270,"meta":40},[5268],"1.0000000000000007\n",[42,102614,102612],{"__ignoreMap":40},[10,102616,102617,102618,102620],{},"只要接近 ",[42,102619,102454],{}," 就正常。",[176,102622,102623],{"id":102623},"方块没有掉下来",[10,102625,102626],{},"检查：",[159,102628,102629,102635,102641,102646],{},[162,102630,102631,102632],{},"方块 body 里是否有 ",[42,102633,102634],{},"\u003Cfreejoint\u002F>",[162,102636,102637,102638],{},"重力是否是 ",[42,102639,102640],{},"0 0 -9.81",[162,102642,102643,102644],{},"是否真的调用了 ",[42,102645,100736],{},[162,102647,102648,102649,102651,102652],{},"你看的是否是 ",[42,102650,102394],{},"，不是 ",[42,102653,102654],{},"initial qpos",[30,102656,102658],{"id":102657},"_8本章小结","8.本章小结",[10,102660,102661],{},"本章你已经完成了 MuJoCo 的最小闭环：",[35,102663,102666],{"className":102664,"code":102665,"language":5270,"meta":40},[5268],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[42,102667,102665],{"__ignoreMap":40},[10,102669,102670],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[121,102672,102673],{},"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":40,"searchDepth":125,"depth":125,"links":102675},[102676,102677,102678,102683,102687,102688,102689,102697],{"id":100697,"depth":125,"text":100698},{"id":100820,"depth":125,"text":100821},{"id":101095,"depth":125,"text":101096,"children":102679},[102680,102681,102682],{"id":101133,"depth":1262,"text":101134},{"id":101227,"depth":1262,"text":101228},{"id":101279,"depth":1262,"text":101280},{"id":101303,"depth":125,"text":101304,"children":102684},[102685,102686],{"id":101623,"depth":1262,"text":101623},{"id":101759,"depth":1262,"text":101759},{"id":102366,"depth":125,"text":102367},{"id":102398,"depth":125,"text":102399},{"id":102503,"depth":125,"text":102504,"children":102690},[102691,102692,102693,102694,102696],{"id":102507,"depth":1262,"text":102510},{"id":102530,"depth":1262,"text":102531},{"id":102570,"depth":1262,"text":102571},{"id":102600,"depth":1262,"text":102695},"final time 不是严格等于 1.0",{"id":102623,"depth":1262,"text":102623},{"id":102657,"depth":125,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100689,"description":40},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102704,"title":102705,"body":102706,"description":40,"extension":131,"meta":104362,"navigation":133,"path":104363,"seo":104364,"stem":104365,"__hash__":104366},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102707,"toc":104338},[102708,102711,102713,102716,102719,102736,102831,102834,102840,102842,102844,102868,102871,102885,102888,102929,102931,102944,102946,102949,102997,103009,103012,103015,103021,103034,103101,103104,103123,103126,103129,103135,103137,103146,103149,103153,103162,103244,103253,103257,103263,103277,103287,103289,103619,103622,103634,103636,103647,103649,103652,103670,103673,103676,103694,103705,103708,103723,103733,103735,103756,103773,103793,103799,103839,103855,103871,103877,103880,103904,103920,103925,103955,103972,103997,104000,104015,104024,104039,104048,104063,104070,104072,104082,104095,104102,104105,104144,104151,104153,104205,104207,104213,104216,104223,104230,104233,104235,104253,104256,104259,104293,104305,104307,104310,104332,104335],[20,102709,102705],{"id":102710},"_2xml-与-mjcf-物理建模基础",[30,102712,100698],{"id":100697},[10,102714,102715],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[10,102717,102718],{},"本章结束后，你应该能看懂一个简单模型里：",[159,102720,102721,102724,102727,102730,102733],{},[162,102722,102723],{},"地面在哪里。",[162,102725,102726],{},"物体初始位置在哪里。",[162,102728,102729],{},"几何体是什么形状。",[162,102731,102732],{},"哪些 body 可以自由运动。",[162,102734,102735],{},"如何用名字在 Python 里找到 XML 中的对象。",[346,102737,102738,102748],{},[349,102739,102740],{},[352,102741,102742,102745],{},[355,102743,102744],{"align":23819},"标签",[355,102746,102747],{"align":23819},"作用",[393,102749,102750,102759,102769,102778,102788,102798,102811,102821],{},[352,102751,102752,102756],{},[398,102753,102754],{"align":23819},[42,102755,102588],{},[398,102757,102758],{"align":23819},"根节点",[352,102760,102761,102766],{},[398,102762,102763],{"align":23819},[42,102764,102765],{},"\u003Coption>",[398,102767,102768],{"align":23819},"仿真参数",[352,102770,102771,102775],{},[398,102772,102773],{"align":23819},[42,102774,102596],{},[398,102776,102777],{"align":23819},"世界中的物体",[352,102779,102780,102785],{},[398,102781,102782],{"align":23819},[42,102783,102784],{},"\u003Cbody>",[398,102786,102787],{"align":23819},"刚体",[352,102789,102790,102795],{},[398,102791,102792],{"align":23819},[42,102793,102794],{},"\u003Cgeom>",[398,102796,102797],{"align":23819},"几何体、碰撞体、可视体",[352,102799,102800,102808],{},[398,102801,102802,25061,102805],{"align":23819},[42,102803,102804],{},"\u003Cjoint>",[42,102806,102807],{},"\u003Cfreejoint>",[398,102809,102810],{"align":23819},"关节",[352,102812,102813,102818],{},[398,102814,102815],{"align":23819},[42,102816,102817],{},"\u003Csite>",[398,102819,102820],{"align":23819},"标记点",[352,102822,102823,102828],{},[398,102824,102825],{"align":23819},[42,102826,102827],{},"\u003Cactuator>",[398,102829,102830],{"align":23819},"控制器",[10,102832,102833],{},"初学时可以先记住：",[35,102835,102838],{"className":102836,"code":102837,"language":5270,"meta":40},[5268],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[42,102839,102837],{"__ignoreMap":40},[30,102841,100821],{"id":100820},[10,102843,100824],{},[35,102845,102847],{"className":23905,"code":102846,"language":23907,"meta":40,"style":40},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[42,102848,102849],{"__ignoreMap":40},[45,102850,102851,102853,102855,102857,102859,102861,102863,102865],{"class":47,"line":48},[45,102852,24659],{"class":2046},[45,102854,26398],{"class":313},[45,102856,23917],{"class":313},[45,102858,26483],{"class":257},[45,102860,102552],{"class":313},[45,102862,100865],{"class":313},[45,102864,102557],{"class":313},[45,102866,102867],{"class":313}," glfw-devel\n",[10,102869,102870],{},"pip:",[35,102872,102873],{"className":23905,"code":100970,"language":23907,"meta":40,"style":40},[42,102874,102875],{"__ignoreMap":40},[45,102876,102877,102879,102881,102883],{"class":47,"line":48},[45,102878,23914],{"class":2046},[45,102880,23917],{"class":313},[45,102882,100981],{"class":313},[45,102884,100984],{"class":313},[10,102886,102887],{},"conda:",[35,102889,102891],{"className":23905,"code":102890,"language":23907,"meta":40,"style":40},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[42,102892,102893,102910,102919],{"__ignoreMap":40},[45,102894,102895,102897,102899,102901,102904,102906,102908],{"class":47,"line":48},[45,102896,30413],{"class":2046},[45,102898,29259],{"class":313},[45,102900,25198],{"class":257},[45,102902,102903],{"class":313}," mujoco-xml",[45,102905,101026],{"class":313},[45,102907,101029],{"class":257},[45,102909,101032],{"class":257},[45,102911,102912,102914,102916],{"class":47,"line":125},[45,102913,30413],{"class":2046},[45,102915,101039],{"class":313},[45,102917,102918],{"class":313}," mujoco-xml\n",[45,102920,102921,102923,102925,102927],{"class":47,"line":1262},[45,102922,23914],{"class":2046},[45,102924,23917],{"class":313},[45,102926,100981],{"class":313},[45,102928,100984],{"class":313},[10,102930,101055],{},[159,102932,102933,102936,102941],{},[162,102934,102935],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[162,102937,102938,102939,28468],{},"本章使用基础标签，适用于 ",[42,102940,101078],{},[162,102942,102943],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[30,102945,101096],{"id":101095},[10,102947,102948],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[35,102950,102952],{"className":53148,"code":102951,"language":53150,"meta":40,"style":40},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[42,102953,102954,102968,102976,102981,102989],{"__ignoreMap":40},[45,102955,102956,102958,102960,102962,102964,102966],{"class":47,"line":48},[45,102957,1117],{"class":51},[45,102959,101072],{"class":51381},[45,102961,101826],{"class":2046},[45,102963,254],{"class":51},[45,102965,62760],{"class":313},[45,102967,51388],{"class":51},[45,102969,102970,102972,102974],{"class":47,"line":125},[45,102971,52225],{"class":51},[45,102973,101892],{"class":51381},[45,102975,51388],{"class":51},[45,102977,102978],{"class":47,"line":1262},[45,102979,102980],{"class":51},"    ...\n",[45,102982,102983,102985,102987],{"class":47,"line":1277},[45,102984,52498],{"class":51},[45,102986,101892],{"class":51381},[45,102988,51388],{"class":51},[45,102990,102991,102993,102995],{"class":47,"line":1283},[45,102992,51866],{"class":51},[45,102994,101072],{"class":51381},[45,102996,51388],{"class":51},[10,102998,102999,103001,103002,103004,103005,103008],{},[42,103000,51881],{}," 表示刚体。",[42,103003,101171],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[42,103006,103007],{},"joint"," 表示刚体相对父刚体如何运动。",[176,103010,103011],{"id":103011},"层级结构非常重要",[10,103013,103014],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[35,103016,103019],{"className":103017,"code":103018,"language":5270,"meta":40},[5268],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[42,103020,103018],{"__ignoreMap":40},[10,103022,103023,101069,103026,103029,103030,103033],{},[42,103024,103025],{},"red_box_geom",[42,103027,103028],{},"box_center"," 都属于 ",[42,103031,103032],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[35,103035,103037],{"className":53148,"code":103036,"language":53150,"meta":40,"style":40},"\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",[42,103038,103039,103059,103073,103093],{"__ignoreMap":40},[45,103040,103041,103043,103045,103047,103049,103051,103053,103055,103057],{"class":47,"line":48},[45,103042,1117],{"class":51},[45,103044,51881],{"class":51381},[45,103046,15003],{"class":2046},[45,103048,254],{"class":51},[45,103050,53572],{"class":313},[45,103052,101157],{"class":2046},[45,103054,254],{"class":51},[45,103056,101162],{"class":313},[45,103058,51388],{"class":51},[45,103060,103061,103063,103065,103067,103069,103071],{"class":47,"line":125},[45,103062,52225],{"class":51},[45,103064,101671],{"class":51381},[45,103066,15003],{"class":2046},[45,103068,254],{"class":51},[45,103070,102012],{"class":313},[45,103072,101195],{"class":51},[45,103074,103075,103077,103079,103081,103083,103085,103087,103089,103091],{"class":47,"line":1262},[45,103076,52225],{"class":51},[45,103078,101171],{"class":51381},[45,103080,53905],{"class":2046},[45,103082,254],{"class":51},[45,103084,53572],{"class":313},[45,103086,101187],{"class":2046},[45,103088,254],{"class":51},[45,103090,101192],{"class":313},[45,103092,101195],{"class":51},[45,103094,103095,103097,103099],{"class":47,"line":1277},[45,103096,51866],{"class":51},[45,103098,51881],{"class":51381},[45,103100,51388],{"class":51},[10,103102,103103],{},"含义:",[159,103105,103106,103112,103117,103120],{},[162,103107,103108,103109,103111],{},"创建名为 ",[42,103110,53795],{}," 的刚体",[162,103113,103114,103115],{},"初始位置在世界坐标 ",[42,103116,101220],{},[162,103118,103119],{},"它有一个自由关节",[162,103121,103122],{},"它有一个盒子几何体",[176,103124,103125],{"id":103125},"坐标怎么理解",[10,103127,103128],{},"MuJoCo 默认使用三维坐标：",[35,103130,103133],{"className":103131,"code":103132,"language":5270,"meta":40},[5268],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[42,103134,103132],{"__ignoreMap":40},[10,103136,14716],{},[35,103138,103140],{"className":53148,"code":103139,"language":53150,"meta":40,"style":40},"pos=\"0 0 1\"\n",[42,103141,103142],{"__ignoreMap":40},[45,103143,103144],{"class":47,"line":48},[45,103145,103139],{"class":51},[10,103147,103148],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[176,103150,103152],{"id":103151},"geom-的-size-怎么理解","geom 的 size 怎么理解",[10,103154,103155,103156,82611,103159,103161],{},"不同 ",[42,103157,103158],{},"type",[42,103160,31577],{}," 含义不同：",[346,103163,103164,103179],{},[349,103165,103166],{},[352,103167,103168,103172,103177],{},[355,103169,103170],{"align":23819},[42,103171,103158],{},[355,103173,103174,103176],{"align":23819},[42,103175,31577],{}," 示例",[355,103178,100751],{"align":23819},[393,103180,103181,103195,103210,103229],{},[352,103182,103183,103187,103192],{},[398,103184,103185],{"align":23819},[42,103186,53795],{},[398,103188,103189],{"align":23819},[42,103190,103191],{},"size=\"0.1 0.2 0.3\"",[398,103193,103194],{"align":23819},"x\u002Fy\u002Fz 半边长，不是完整长度",[352,103196,103197,103202,103207],{},[398,103198,103199],{"align":23819},[42,103200,103201],{},"sphere",[398,103203,103204],{"align":23819},[42,103205,103206],{},"size=\"0.1\"",[398,103208,103209],{"align":23819},"球半径",[352,103211,103212,103217,103222],{},[398,103213,103214],{"align":23819},[42,103215,103216],{},"capsule",[398,103218,103219],{"align":23819},[42,103220,103221],{},"size=\"0.03\"",[398,103223,103224,103225,103228],{"align":23819},"胶囊半径，长度常用 ",[42,103226,103227],{},"fromto"," 指定",[352,103230,103231,103236,103241],{},[398,103232,103233],{"align":23819},[42,103234,103235],{},"plane",[398,103237,103238],{"align":23819},[42,103239,103240],{},"size=\"3 3 0.1\"",[398,103242,103243],{"align":23819},"可视平面大小，通常当地面",[10,103245,103246,103247,103249,103250,103252],{},"最容易踩坑的是 box：",[42,103248,102075],{}," 表示边长大约是 ",[42,103251,32118],{},"，因为 MuJoCo 用的是半边长。",[176,103254,103256],{"id":103255},"site-是什么","site 是什么",[10,103258,103259,103262],{},[42,103260,103261],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[159,103264,103265,103268,103271,103274],{},[162,103266,103267],{},"标记机械臂末端。",[162,103269,103270],{},"标记目标位置。",[162,103272,103273],{},"放传感器或相机参考点。",[162,103275,103276],{},"在 Python 中读取某个关键点的世界坐标。",[10,103278,103279,103280,101069,103283,103286],{},"在后面的 Reacher 任务中，",[42,103281,103282],{},"tip",[42,103284,103285],{},"target"," 就会用 site 表示。",[30,103288,101304],{"id":101303},[35,103290,103292],{"className":37,"code":103291,"language":39,"meta":40,"style":40},"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",[42,103293,103294,103300,103310,103314,103318,103326,103331,103335,103339,103343,103348,103352,103357,103362,103367,103372,103376,103380,103384,103388,103392,103396,103408,103420,103428,103432,103447,103462,103466,103479,103494,103507,103520,103524,103540,103544,103548,103559,103571,103583,103595,103599,103603,103615],{"__ignoreMap":40},[45,103295,103296,103298],{"class":47,"line":48},[45,103297,30473],{"class":93},[45,103299,101352],{"class":51},[45,103301,103302,103304,103306,103308],{"class":47,"line":125},[45,103303,30473],{"class":93},[45,103305,31461],{"class":51},[45,103307,31464],{"class":93},[45,103309,31467],{"class":51},[45,103311,103312],{"class":47,"line":1262},[45,103313,2483],{"emptyLinePlaceholder":133},[45,103315,103316],{"class":47,"line":1277},[45,103317,2483],{"emptyLinePlaceholder":133},[45,103319,103320,103322,103324],{"class":47,"line":1283},[45,103321,101365],{"class":257},[45,103323,13647],{"class":93},[45,103325,101370],{"class":313},[45,103327,103328],{"class":47,"line":1297},[45,103329,103330],{"class":313},"\u003Cmujoco model=\"xml_basic\">\n",[45,103332,103333],{"class":47,"line":1303},[45,103334,101380],{"class":313},[45,103336,103337],{"class":47,"line":1394},[45,103338,2483],{"emptyLinePlaceholder":133},[45,103340,103341],{"class":47,"line":1400},[45,103342,101389],{"class":313},[45,103344,103345],{"class":47,"line":1412},[45,103346,103347],{"class":313},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[45,103349,103350],{"class":47,"line":1695},[45,103351,2483],{"emptyLinePlaceholder":133},[45,103353,103354],{"class":47,"line":1700},[45,103355,103356],{"class":313},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[45,103358,103359],{"class":47,"line":1706},[45,103360,103361],{"class":313},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[45,103363,103364],{"class":47,"line":1711},[45,103365,103366],{"class":313},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[45,103368,103369],{"class":47,"line":1725},[45,103370,103371],{"class":313},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[45,103373,103374],{"class":47,"line":1730},[45,103375,101418],{"class":313},[45,103377,103378],{"class":47,"line":1736},[45,103379,101423],{"class":313},[45,103381,103382],{"class":47,"line":1757},[45,103383,101428],{"class":313},[45,103385,103386],{"class":47,"line":1762},[45,103387,95749],{"class":313},[45,103389,103390],{"class":47,"line":1776},[45,103391,2483],{"emptyLinePlaceholder":133},[45,103393,103394],{"class":47,"line":1781},[45,103395,2483],{"emptyLinePlaceholder":133},[45,103397,103398,103400,103402,103404,103406],{"class":47,"line":1810},[45,103399,32028],{"class":93},[45,103401,2056],{"class":2046},[45,103403,101449],{"class":51},[45,103405,95737],{"class":257},[45,103407,3822],{"class":51},[45,103409,103410,103412,103414,103416,103418],{"class":47,"line":1815},[45,103411,101458],{"class":51},[45,103413,254],{"class":93},[45,103415,101463],{"class":51},[45,103417,101365],{"class":257},[45,103419,215],{"class":51},[45,103421,103422,103424,103426],{"class":47,"line":1832},[45,103423,101472],{"class":51},[45,103425,254],{"class":93},[45,103427,101477],{"class":51},[45,103429,103430],{"class":47,"line":1837},[45,103431,2483],{"emptyLinePlaceholder":133},[45,103433,103434,103437,103439,103442,103445],{"class":47,"line":1842},[45,103435,103436],{"class":51},"    box_body_id ",[45,103438,254],{"class":93},[45,103440,103441],{"class":51}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[45,103443,103444],{"class":313},"\"red_box\"",[45,103446,215],{"class":51},[45,103448,103449,103452,103454,103457,103460],{"class":47,"line":1847},[45,103450,103451],{"class":51},"    site_id ",[45,103453,254],{"class":93},[45,103455,103456],{"class":51}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[45,103458,103459],{"class":313},"\"box_center\"",[45,103461,215],{"class":51},[45,103463,103464],{"class":47,"line":1861},[45,103465,2483],{"emptyLinePlaceholder":133},[45,103467,103468,103470,103473,103475,103477],{"class":47,"line":1866},[45,103469,3184],{"class":93},[45,103471,103472],{"class":51}," box_body_id ",[45,103474,1117],{"class":93},[45,103476,4176],{"class":257},[45,103478,3822],{"class":51},[45,103480,103481,103484,103487,103489,103492],{"class":47,"line":2660},[45,103482,103483],{"class":93},"        raise",[45,103485,103486],{"class":257}," RuntimeError",[45,103488,209],{"class":51},[45,103490,103491],{"class":313},"\"body red_box not found\"",[45,103493,215],{"class":51},[45,103495,103496,103498,103501,103503,103505],{"class":47,"line":2674},[45,103497,3184],{"class":93},[45,103499,103500],{"class":51}," site_id ",[45,103502,1117],{"class":93},[45,103504,4176],{"class":257},[45,103506,3822],{"class":51},[45,103508,103509,103511,103513,103515,103518],{"class":47,"line":2682},[45,103510,103483],{"class":93},[45,103512,103486],{"class":257},[45,103514,209],{"class":51},[45,103516,103517],{"class":313},"\"site box_center not found\"",[45,103519,215],{"class":51},[45,103521,103522],{"class":47,"line":2687},[45,103523,2483],{"emptyLinePlaceholder":133},[45,103525,103526,103528,103530,103532,103534,103536,103538],{"class":47,"line":2693},[45,103527,3284],{"class":93},[45,103529,101552],{"class":51},[45,103531,26126],{"class":93},[45,103533,32524],{"class":257},[45,103535,209],{"class":51},[45,103537,1805],{"class":257},[45,103539,30867],{"class":51},[45,103541,103542],{"class":47,"line":2699},[45,103543,101567],{"class":51},[45,103545,103546],{"class":47,"line":2704},[45,103547,2483],{"emptyLinePlaceholder":133},[45,103549,103550,103552,103554,103557],{"class":47,"line":8031},[45,103551,31380],{"class":257},[45,103553,209],{"class":51},[45,103555,103556],{"class":313},"\"simulation time:\"",[45,103558,101529],{"class":51},[45,103560,103561,103563,103565,103568],{"class":47,"line":8055},[45,103562,31380],{"class":257},[45,103564,209],{"class":51},[45,103566,103567],{"class":313},"\"box body position:\"",[45,103569,103570],{"class":51},", data.xpos[box_body_id].copy())\n",[45,103572,103573,103575,103577,103580],{"class":47,"line":8060},[45,103574,31380],{"class":257},[45,103576,209],{"class":51},[45,103578,103579],{"class":313},"\"site position:\"",[45,103581,103582],{"class":51},", data.site_xpos[site_id].copy())\n",[45,103584,103585,103587,103589,103592],{"class":47,"line":8066},[45,103586,31380],{"class":257},[45,103588,209],{"class":51},[45,103590,103591],{"class":313},"\"box qpos:\"",[45,103593,103594],{"class":51},", np.array(data.qpos))\n",[45,103596,103597],{"class":47,"line":8093},[45,103598,2483],{"emptyLinePlaceholder":133},[45,103600,103601],{"class":47,"line":8098},[45,103602,2483],{"emptyLinePlaceholder":133},[45,103604,103605,103607,103609,103611,103613],{"class":47,"line":8104},[45,103606,1614],{"class":93},[45,103608,31301],{"class":257},[45,103610,101610],{"class":93},[45,103612,101613],{"class":313},[45,103614,3822],{"class":51},[45,103616,103617],{"class":47,"line":8116},[45,103618,101620],{"class":51},[10,103620,103621],{},"保存为：",[35,103623,103625],{"className":23905,"code":103624,"language":23907,"meta":40,"style":40},"touch ch2_xml_basic.py\n",[42,103626,103627],{"__ignoreMap":40},[45,103628,103629,103631],{"class":47,"line":48},[45,103630,101334],{"class":2046},[45,103632,103633],{"class":313}," ch2_xml_basic.py\n",[10,103635,102352],{},[35,103637,103639],{"className":23905,"code":103638,"language":23907,"meta":40,"style":40},"python ch2_xml_basic.py\n",[42,103640,103641],{"__ignoreMap":40},[45,103642,103643,103645],{"class":47,"line":48},[45,103644,39],{"class":2046},[45,103646,103633],{"class":313},[176,103648,101623],{"id":101623},[10,103650,103651],{},"用名字查找 body：",[35,103653,103655],{"className":37,"code":103654,"language":39,"meta":40,"style":40},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[42,103656,103657],{"__ignoreMap":40},[45,103658,103659,103662,103664,103666,103668],{"class":47,"line":48},[45,103660,103661],{"class":51},"box_body_id ",[45,103663,254],{"class":93},[45,103665,103441],{"class":51},[45,103667,103444],{"class":313},[45,103669,215],{"class":51},[10,103671,103672],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[10,103674,103675],{},"用名字查找 site：",[35,103677,103679],{"className":37,"code":103678,"language":39,"meta":40,"style":40},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[42,103680,103681],{"__ignoreMap":40},[45,103682,103683,103686,103688,103690,103692],{"class":47,"line":48},[45,103684,103685],{"class":51},"site_id ",[45,103687,254],{"class":93},[45,103689,103456],{"class":51},[45,103691,103459],{"class":313},[45,103693,215],{"class":51},[10,103695,103696,103697,103700,103701,103704],{},"注意第二个参数是对象类型。查 body 就用 ",[42,103698,103699],{},"mjOBJ_BODY","，查 site 就用 ",[42,103702,103703],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[10,103706,103707],{},"读取世界坐标：",[35,103709,103711],{"className":37,"code":103710,"language":39,"meta":40,"style":40},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[42,103712,103713,103718],{"__ignoreMap":40},[45,103714,103715],{"class":47,"line":48},[45,103716,103717],{"class":51},"data.xpos[box_body_id]\n",[45,103719,103720],{"class":47,"line":125},[45,103721,103722],{"class":51},"data.site_xpos[site_id]\n",[10,103724,103725,103728,103729,103732],{},[42,103726,103727],{},"xpos"," 是 body 的世界坐标，",[42,103730,103731],{},"site_xpos"," 是 site 的世界坐标。",[176,103734,101759],{"id":101759},[35,103736,103738],{"className":37,"code":103737,"language":39,"meta":40,"style":40},"import mujoco\nimport numpy as np\n",[42,103739,103740,103746],{"__ignoreMap":40},[45,103741,103742,103744],{"class":47,"line":48},[45,103743,30473],{"class":93},[45,103745,101352],{"class":51},[45,103747,103748,103750,103752,103754],{"class":47,"line":125},[45,103749,30473],{"class":93},[45,103751,31461],{"class":51},[45,103753,31464],{"class":93},[45,103755,31467],{"class":51},[10,103757,103758,103759,103762,103763,103766,103767,421,103770,28468],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[42,103760,103761],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[42,103764,103765],{},"as np"," 是习惯写法，后面就可以写 ",[42,103768,103769],{},"np.array(...)",[42,103771,103772],{},"np.round(...)",[35,103774,103775],{"className":37,"code":101646,"language":39,"meta":40,"style":40},[42,103776,103777,103785,103789],{"__ignoreMap":40},[45,103778,103779,103781,103783],{"class":47,"line":48},[45,103780,101365],{"class":257},[45,103782,13647],{"class":93},[45,103784,101370],{"class":313},[45,103786,103787],{"class":47,"line":125},[45,103788,101661],{"class":313},[45,103790,103791],{"class":47,"line":1262},[45,103792,95749],{"class":313},[10,103794,103795,103796,28468],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[42,103797,103798],{},"mujoco.MjModel.from_xml_string(XML)",[35,103800,103802],{"className":53148,"code":103801,"language":53150,"meta":40,"style":40},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[42,103803,103804],{"__ignoreMap":40},[45,103805,103806,103808,103810,103812,103814,103816,103818,103820,103823,103825,103827,103830,103832,103834,103837],{"class":47,"line":48},[45,103807,1117],{"class":51},[45,103809,103261],{"class":51381},[45,103811,15003],{"class":2046},[45,103813,254],{"class":51},[45,103815,103459],{"class":313},[45,103817,101157],{"class":2046},[45,103819,254],{"class":51},[45,103821,103822],{"class":313},"\"0 0 0\"",[45,103824,101187],{"class":2046},[45,103826,254],{"class":51},[45,103828,103829],{"class":313},"\"0.03\"",[45,103831,78848],{"class":2046},[45,103833,254],{"class":51},[45,103835,103836],{"class":313},"\"0 1 0 1\"",[45,103838,101195],{"class":51},[10,103840,103841,103843,103844,103847,103848,103850,103851,103854],{},[42,103842,103261],{}," 是标记点。",[42,103845,103846],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[42,103849,103221],{}," 表示显示出来的小球大小。",[42,103852,103853],{},"rgba=\"0 1 0 1\""," 表示绿色。",[35,103856,103857],{"className":37,"code":103654,"language":39,"meta":40,"style":40},[42,103858,103859],{"__ignoreMap":40},[45,103860,103861,103863,103865,103867,103869],{"class":47,"line":48},[45,103862,103661],{"class":51},[45,103864,254],{"class":93},[45,103866,103441],{"class":51},[45,103868,103444],{"class":313},[45,103870,215],{"class":51},[10,103872,103873,103874,103876],{},"这行的作用是：根据名字 ",[42,103875,103444],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[10,103878,103879],{},"拆开看：",[159,103881,103882,103888,103893,103899],{},[162,103883,103884,103887],{},[42,103885,103886],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[162,103889,103890,103892],{},[42,103891,102136],{}," 是被查询的模型。",[162,103894,103895,103898],{},[42,103896,103897],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[162,103900,103901,103903],{},[42,103902,103444],{}," 是 XML 里写的名字。",[35,103905,103906],{"className":37,"code":103678,"language":39,"meta":40,"style":40},[42,103907,103908],{"__ignoreMap":40},[45,103909,103910,103912,103914,103916,103918],{"class":47,"line":48},[45,103911,103685],{"class":51},[45,103913,254],{"class":93},[45,103915,103456],{"class":51},[45,103917,103459],{"class":313},[45,103919,215],{"class":51},[10,103921,103922,103923,28468],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[42,103924,103459],{},[35,103926,103928],{"className":37,"code":103927,"language":39,"meta":40,"style":40},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[42,103929,103930,103942],{"__ignoreMap":40},[45,103931,103932,103934,103936,103938,103940],{"class":47,"line":48},[45,103933,1614],{"class":93},[45,103935,103472],{"class":51},[45,103937,1117],{"class":93},[45,103939,4176],{"class":257},[45,103941,3822],{"class":51},[45,103943,103944,103947,103949,103951,103953],{"class":47,"line":125},[45,103945,103946],{"class":93},"    raise",[45,103948,103486],{"class":257},[45,103950,209],{"class":51},[45,103952,103491],{"class":313},[45,103954,215],{"class":51},[10,103956,103957,103959,103960,103963,103964,103967,103968,103971],{},[42,103958,1614],{}," 是条件判断。",[42,103961,103962],{},"mj_name2id"," 找不到对象时会返回 ",[42,103965,103966],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[42,103969,103970],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[35,103973,103975],{"className":37,"code":103974,"language":39,"meta":40,"style":40},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[42,103976,103977,103993],{"__ignoreMap":40},[45,103978,103979,103981,103983,103985,103987,103989,103991],{"class":47,"line":48},[45,103980,3108],{"class":93},[45,103982,101552],{"class":51},[45,103984,26126],{"class":93},[45,103986,32524],{"class":257},[45,103988,209],{"class":51},[45,103990,1805],{"class":257},[45,103992,30867],{"class":51},[45,103994,103995],{"class":47,"line":125},[45,103996,101750],{"class":51},[10,103998,103999],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[35,104001,104003],{"className":37,"code":104002,"language":39,"meta":40,"style":40},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[42,104004,104005],{"__ignoreMap":40},[45,104006,104007,104009,104011,104013],{"class":47,"line":48},[45,104008,30496],{"class":257},[45,104010,209],{"class":51},[45,104012,103567],{"class":313},[45,104014,103570],{"class":51},[10,104016,104017,104019,104020,104023],{},[42,104018,101130],{}," 保存所有 body 的世界坐标。",[42,104021,104022],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[35,104025,104027],{"className":37,"code":104026,"language":39,"meta":40,"style":40},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[42,104028,104029],{"__ignoreMap":40},[45,104030,104031,104033,104035,104037],{"class":47,"line":48},[45,104032,30496],{"class":257},[45,104034,209],{"class":51},[45,104036,103579],{"class":313},[45,104038,103582],{"class":51},[10,104040,104041,104044,104045,104047],{},[42,104042,104043],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[42,104046,103028],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[35,104049,104051],{"className":37,"code":104050,"language":39,"meta":40,"style":40},"print(\"box qpos:\", np.array(data.qpos))\n",[42,104052,104053],{"__ignoreMap":40},[45,104054,104055,104057,104059,104061],{"class":47,"line":48},[45,104056,30496],{"class":257},[45,104058,209],{"class":51},[45,104060,103591],{"class":313},[45,104062,103594],{"class":51},[10,104064,104065,104066,104069],{},"这里打印广义位置数组。",[42,104067,104068],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[30,104071,102367],{"id":102366},[10,104073,104074,104075,104078,104079,28468],{},"程序会输出 ",[42,104076,104077],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[42,104080,104081],{},"qpos",[10,104083,104084,104086,104087,104090,104091,104094],{},[42,104085,104022],{}," 是 body 的世界坐标位置。",[42,104088,104089],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[42,104092,104093],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[10,104096,82303,104097,82611,104099,104101],{},[42,104098,103028],{},[42,104100,103846],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[10,104103,104104],{},"如果你把 site 改成：",[35,104106,104108],{"className":53148,"code":104107,"language":53150,"meta":40,"style":40},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[42,104109,104110],{"__ignoreMap":40},[45,104111,104112,104114,104116,104118,104120,104123,104125,104127,104130,104132,104134,104136,104138,104140,104142],{"class":47,"line":48},[45,104113,1117],{"class":51},[45,104115,103261],{"class":51381},[45,104117,15003],{"class":2046},[45,104119,254],{"class":51},[45,104121,104122],{"class":313},"\"box_top\"",[45,104124,101157],{"class":2046},[45,104126,254],{"class":51},[45,104128,104129],{"class":313},"\"0 0 0.15\"",[45,104131,101187],{"class":2046},[45,104133,254],{"class":51},[45,104135,103829],{"class":313},[45,104137,78848],{"class":2046},[45,104139,254],{"class":51},[45,104141,103836],{"class":313},[45,104143,101195],{"class":51},[10,104145,104146,104147,104150],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[42,104148,104149],{},"site position"," 就会比 body position 的 z 坐标更高。",[30,104152,102399],{"id":102398},[159,104154,104155,104164,104167,104174,104180,104191],{},[162,104156,102462,104157,104159,104160,102465,104162,28468],{},[42,104158,103032],{}," 的初始高度从 ",[42,104161,426],{},[42,104163,286],{},[162,104165,104166],{},"重新运行程序。",[162,104168,104169,104170,104173],{},"观察 ",[42,104171,104172],{},"box qpos"," 和最终位置是否变化。",[162,104175,104176,104177,104179],{},"故意把 ",[42,104178,103261],{}," 名称改错，确认程序能报错。",[162,104181,102462,104182,104184,104185,102465,104187,104190],{},[42,104183,101171],{}," 的颜色 ",[42,104186,102083],{},[42,104188,104189],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[162,104192,102462,104193,82611,104195,102465,104198,104201,104202,104204],{},[42,104194,103028],{},[42,104196,104197],{},"pos",[42,104199,104200],{},"0 0 0.2","，观察 ",[42,104203,104149],{}," 如何变化。",[30,104206,102504],{"id":102503},[176,104208,104210],{"id":104209},"xml-error-schema-violation",[42,104211,104212],{},"XML Error: Schema violation",[10,104214,104215],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[176,104217,104219,81371,104221],{"id":104218},"mj_name2id-返回-1",[42,104220,103962],{},[42,104222,103966],{},[10,104224,104225,104226,104229],{},"说明名字没有找到。检查 XML 中 ",[42,104227,104228],{},"name=\"...\"","，并确认对象类型正确。",[176,104231,104232],{"id":104232},"物体不下落",[10,104234,102574],{},[159,104236,104237,104242,104247],{},[162,104238,104239,104240],{},"body 是否有 ",[42,104241,101671],{},[162,104243,104244,104245],{},"gravity 是否为 ",[42,104246,102640],{},[162,104248,104249,104250,104252],{},"body 是否被固定在 ",[42,104251,101892],{}," 中",[176,104254,104255],{"id":104255},"坐标看起来不符合预期",[10,104257,104258],{},"先区分两种坐标：",[346,104260,104261,104270],{},[349,104262,104263],{},[352,104264,104265,104268],{},[355,104266,104267],{"align":23819},"坐标",[355,104269,100751],{"align":23819},[393,104271,104272,104282],{},[352,104273,104274,104279],{},[398,104275,104276,104277],{"align":23819},"XML 里的 ",[42,104278,104197],{},[398,104280,104281],{"align":23819},"相对父 body 的局部坐标",[352,104283,104284,104290],{},[398,104285,104286,25061,104288],{"align":23819},[42,104287,101130],{},[42,104289,104043],{},[398,104291,104292],{"align":23819},"仿真更新后的世界坐标",[10,104294,104295,104296,104298,104299,82620,104302,104304],{},"如果你修改了 ",[42,104297,101121],{},"，但还没调用 ",[42,104300,104301],{},"mj_forward",[42,104303,101266],{},"，世界坐标可能还没有更新。",[30,104306,102658],{"id":102657},[10,104308,104309],{},"MJCF 建模先掌握四件事：",[159,104311,104312,104317,104322,104327],{},[162,104313,104314,104316],{},[42,104315,51881],{}," 表示刚体层级。",[162,104318,104319,104321],{},[42,104320,101171],{}," 表示形状、碰撞和质量。",[162,104323,104324,104326],{},[42,104325,103007],{}," 决定 body 能不能动、怎么动。",[162,104328,104329,104331],{},[42,104330,103261],{}," 用来标记关键点，方便 Python 读取位置。",[10,104333,104334],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[121,104336,104337],{},"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":40,"searchDepth":125,"depth":125,"links":104339},[104340,104341,104342,104348,104352,104353,104354,104361],{"id":100697,"depth":125,"text":100698},{"id":100820,"depth":125,"text":100821},{"id":101095,"depth":125,"text":101096,"children":104343},[104344,104345,104346,104347],{"id":103011,"depth":1262,"text":103011},{"id":103125,"depth":1262,"text":103125},{"id":103151,"depth":1262,"text":103152},{"id":103255,"depth":1262,"text":103256},{"id":101303,"depth":125,"text":101304,"children":104349},[104350,104351],{"id":101623,"depth":1262,"text":101623},{"id":101759,"depth":1262,"text":101759},{"id":102366,"depth":125,"text":102367},{"id":102398,"depth":125,"text":102399},{"id":102503,"depth":125,"text":102504,"children":104355},[104356,104357,104359,104360],{"id":104209,"depth":1262,"text":104212},{"id":104218,"depth":1262,"text":104358},"mj_name2id 返回 -1",{"id":104232,"depth":1262,"text":104232},{"id":104255,"depth":1262,"text":104255},{"id":102657,"depth":125,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102705,"description":40},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104368,"title":104369,"body":104370,"description":40,"extension":131,"meta":105865,"navigation":133,"path":105866,"seo":105867,"stem":105868,"__hash__":105869},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104371,"toc":105837},[104372,104375,104377,104380,104383,104421,104424,104430,104433,104435,104437,104464,104466,104480,104482,104523,104525,104549,104551,104554,104563,104572,104575,104584,104592,104601,104604,104614,104617,104669,104676,104682,104690,104738,104741,104760,104763,104771,104775,104784,104817,104819,105167,105169,105181,105183,105194,105196,105199,105220,105226,105229,105254,105264,105267,105275,105278,105281,105302,105313,105315,105335,105338,105359,105368,105387,105393,105418,105421,105435,105442,105466,105469,105477,105486,105502,105514,105522,105531,105533,105536,105560,105565,105568,105590,105592,105631,105633,105640,105642,105650,105653,105656,105668,105709,105716,105727,105734,105737,105786,105789,105792,105798,105800,105805,105831,105834],[20,104373,104369],{"id":104374},"_3python-控制接口读取状态与推进仿真",[30,104376,100698],{"id":100697},[10,104378,104379],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[10,104381,104382],{},"你将学习:",[159,104384,104385,104390,104395,104399,104404,104415],{},[162,104386,104387],{},[42,104388,104389],{},"MjModel.from_xml_string",[162,104391,104392],{},[42,104393,104394],{},"MjData(model)",[162,104396,104397],{},[42,104398,101266],{},[162,104400,104401],{},[42,104402,104403],{},"mj_resetData",[162,104405,104406,104407,421,104409,421,104412],{},"读取 ",[42,104408,104081],{},[42,104410,104411],{},"qvel",[42,104413,104414],{},"ctrl",[162,104416,104417,104418],{},"使用 ",[42,104419,104420],{},"model.opt.timestep",[10,104422,104423],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[35,104425,104428],{"className":104426,"code":104427,"language":5270,"meta":40},[5268],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[42,104429,104427],{"__ignoreMap":40},[10,104431,104432],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[30,104434,100821],{"id":100820},[10,104436,100824],{},[35,104438,104440],{"className":23905,"code":104439,"language":23907,"meta":40,"style":40},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[42,104441,104442],{"__ignoreMap":40},[45,104443,104444,104446,104448,104450,104452,104455,104457,104459,104461],{"class":47,"line":48},[45,104445,24659],{"class":2046},[45,104447,26398],{"class":313},[45,104449,23917],{"class":313},[45,104451,26483],{"class":257},[45,104453,104454],{"class":313}," python3",[45,104456,100849],{"class":313},[45,104458,102552],{"class":313},[45,104460,100865],{"class":313},[45,104462,104463],{"class":313}," glfw\n",[10,104465,102870],{},[35,104467,104468],{"className":23905,"code":100970,"language":23907,"meta":40,"style":40},[42,104469,104470],{"__ignoreMap":40},[45,104471,104472,104474,104476,104478],{"class":47,"line":48},[45,104473,23914],{"class":2046},[45,104475,23917],{"class":313},[45,104477,100981],{"class":313},[45,104479,100984],{"class":313},[10,104481,102887],{},[35,104483,104485],{"className":23905,"code":104484,"language":23907,"meta":40,"style":40},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[42,104486,104487,104504,104513],{"__ignoreMap":40},[45,104488,104489,104491,104493,104495,104498,104500,104502],{"class":47,"line":48},[45,104490,30413],{"class":2046},[45,104492,29259],{"class":313},[45,104494,25198],{"class":257},[45,104496,104497],{"class":313}," mujoco-python-api",[45,104499,101026],{"class":313},[45,104501,101029],{"class":257},[45,104503,101032],{"class":257},[45,104505,104506,104508,104510],{"class":47,"line":125},[45,104507,30413],{"class":2046},[45,104509,101039],{"class":313},[45,104511,104512],{"class":313}," mujoco-python-api\n",[45,104514,104515,104517,104519,104521],{"class":47,"line":1262},[45,104516,23914],{"class":2046},[45,104518,23917],{"class":313},[45,104520,100981],{"class":313},[45,104522,100984],{"class":313},[10,104524,101055],{},[159,104526,104527,104534,104543],{},[162,104528,104529,101069,104531,104533],{},[42,104530,100726],{},[42,104532,100731],{}," 是官方 Python bindings 的类名。",[162,104535,104536,104537,104540,104541,28468],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[42,104538,104539],{},"mjModel"," 在 Python 中是 ",[42,104542,100760],{},[162,104544,104545,104546,28468],{},"不要使用 ",[42,104547,104548],{},"sim = mujoco_py.MjSim(...)",[30,104550,101096],{"id":101095},[10,104552,104553],{},"仿真推进核心代码:",[35,104555,104557],{"className":37,"code":104556,"language":39,"meta":40,"style":40},"mujoco.mj_step(model, data)\n",[42,104558,104559],{"__ignoreMap":40},[45,104560,104561],{"class":47,"line":48},[45,104562,104556],{"class":51},[10,104564,104565,104566,421,104568,421,104570,28468],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[42,104567,101121],{},[42,104569,101124],{},[42,104571,101118],{},[10,104573,104574],{},"重置仿真:",[35,104576,104578],{"className":37,"code":104577,"language":39,"meta":40,"style":40},"mujoco.mj_resetData(model, data)\n",[42,104579,104580],{"__ignoreMap":40},[45,104581,104582],{"class":47,"line":48},[45,104583,104577],{"class":51},[10,104585,104586,104587,82620,104589,104591],{},"如果手动修改了 ",[42,104588,101121],{},[42,104590,101124],{},"，通常应调用:",[35,104593,104595],{"className":37,"code":104594,"language":39,"meta":40,"style":40},"mujoco.mj_forward(model, data)\n",[42,104596,104597],{"__ignoreMap":40},[45,104598,104599],{"class":47,"line":48},[45,104600,104594],{"class":51},[10,104602,104603],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[176,104605,104607,421,104609,421,104611,104613],{"id":104606},"qposqvelctrl-是什么",[42,104608,104081],{},[42,104610,104411],{},[42,104612,104414],{}," 是什么",[10,104615,104616],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[346,104618,104619,104631],{},[349,104620,104621],{},[352,104622,104623,104626,104628],{},[355,104624,104625],{"align":23819},"字段",[355,104627,100751],{"align":23819},[355,104629,104630],{"align":23819},"谁来修改",[393,104632,104633,104645,104657],{},[352,104634,104635,104639,104642],{},[398,104636,104637],{"align":23819},[42,104638,101121],{},[398,104640,104641],{"align":23819},"广义位置，例如小车位置、关节角、自由物体位置姿态",[398,104643,104644],{"align":23819},"MuJoCo 更新，也可以手动设置初始状态",[352,104646,104647,104651,104654],{},[398,104648,104649],{"align":23819},[42,104650,101124],{},[398,104652,104653],{"align":23819},"广义速度，例如小车速度、关节角速度",[398,104655,104656],{"align":23819},"MuJoCo 更新，也可以手动清零",[352,104658,104659,104663,104666],{},[398,104660,104661],{"align":23819},[42,104662,101127],{},[398,104664,104665],{"align":23819},"actuator 的控制输入",[398,104667,104668],{"align":23819},"主要由你的控制代码写入",[10,104670,9108,104671,101069,104673,104675],{},[42,104672,104081],{},[42,104674,104411],{}," 不一定同维。自由刚体就是典型例子：",[35,104677,104680],{"className":104678,"code":104679,"language":5270,"meta":40},[5268],"freejoint: qpos 7 维，qvel 6 维\n",[42,104681,104679],{"__ignoreMap":40},[176,104683,104685,101069,104687,104689],{"id":104684},"mj_step-和-mj_forward-的区别",[42,104686,101266],{},[42,104688,104301],{}," 的区别",[346,104691,104692,104705],{},[349,104693,104694],{},[352,104695,104696,104699,104702],{},[355,104697,104698],{"align":23819},"函数",[355,104700,104701],{"align":23819},"是否推进时间",[355,104703,104704],{"align":23819},"什么时候用",[393,104706,104707,104720],{},[352,104708,104709,104714,104717],{},[398,104710,104711],{"align":23819},[42,104712,104713],{},"mj_step(model, data)",[398,104715,104716],{"align":23819},"是",[398,104718,104719],{"align":23819},"正常仿真循环，每调用一次前进一步",[352,104721,104722,104727,104730],{},[398,104723,104724],{"align":23819},[42,104725,104726],{},"mj_forward(model, data)",[398,104728,104729],{"align":23819},"否",[398,104731,104732,104733,421,104735,104737],{"align":23819},"手动改了 ",[42,104734,104081],{},[42,104736,104411],{}," 后，刷新派生量",[10,104739,104740],{},"例如你写：",[35,104742,104744],{"className":37,"code":104743,"language":39,"meta":40,"style":40},"data.qpos[2] = 2.0\n",[42,104745,104746],{"__ignoreMap":40},[45,104747,104748,104751,104753,104755,104757],{"class":47,"line":48},[45,104749,104750],{"class":51},"data.qpos[",[45,104752,286],{"class":257},[45,104754,4526],{"class":51},[45,104756,254],{"class":93},[45,104758,104759],{"class":257}," 2.0\n",[10,104761,104762],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[35,104764,104765],{"className":37,"code":104594,"language":39,"meta":40,"style":40},[42,104766,104767],{"__ignoreMap":40},[45,104768,104769],{"class":47,"line":48},[45,104770,104594],{"class":51},[176,104772,104774],{"id":104773},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[10,104776,104777,104780,104781,104783],{},[42,104778,104779],{},"mujoco.mj_resetData(model, data)"," 会把 ",[42,104782,33482],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[35,104785,104787],{"className":37,"code":104786,"language":39,"meta":40,"style":40},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[42,104788,104789,104793,104803,104813],{"__ignoreMap":40},[45,104790,104791],{"class":47,"line":48},[45,104792,104577],{"class":51},[45,104794,104795,104798,104800],{"class":47,"line":125},[45,104796,104797],{"class":51},"data.qpos[:] ",[45,104799,254],{"class":93},[45,104801,104802],{"class":51}," random_qpos\n",[45,104804,104805,104808,104810],{"class":47,"line":1262},[45,104806,104807],{"class":51},"data.qvel[:] ",[45,104809,254],{"class":93},[45,104811,104812],{"class":257}," 0.0\n",[45,104814,104815],{"class":47,"line":1277},[45,104816,104594],{"class":51},[30,104818,101304],{"id":101303},[35,104820,104822],{"className":37,"code":104821,"language":39,"meta":40,"style":40},"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",[42,104823,104824,104830,104840,104844,104848,104856,104861,104865,104869,104873,104878,104882,104887,104892,104897,104901,104905,104909,104913,104917,104921,104940,104947,104959,104970,104986,105002,105006,105010,105022,105034,105042,105046,105057,105061,105077,105081,105085,105094,105098,105103,105112,105116,105129,105134,105143,105147,105151,105163],{"__ignoreMap":40},[45,104825,104826,104828],{"class":47,"line":48},[45,104827,30473],{"class":93},[45,104829,101352],{"class":51},[45,104831,104832,104834,104836,104838],{"class":47,"line":125},[45,104833,30473],{"class":93},[45,104835,31461],{"class":51},[45,104837,31464],{"class":93},[45,104839,31467],{"class":51},[45,104841,104842],{"class":47,"line":1262},[45,104843,2483],{"emptyLinePlaceholder":133},[45,104845,104846],{"class":47,"line":1277},[45,104847,2483],{"emptyLinePlaceholder":133},[45,104849,104850,104852,104854],{"class":47,"line":1283},[45,104851,101365],{"class":257},[45,104853,13647],{"class":93},[45,104855,101370],{"class":313},[45,104857,104858],{"class":47,"line":1297},[45,104859,104860],{"class":313},"\u003Cmujoco model=\"state_api\">\n",[45,104862,104863],{"class":47,"line":1303},[45,104864,101380],{"class":313},[45,104866,104867],{"class":47,"line":1394},[45,104868,2483],{"emptyLinePlaceholder":133},[45,104870,104871],{"class":47,"line":1400},[45,104872,101389],{"class":313},[45,104874,104875],{"class":47,"line":1412},[45,104876,104877],{"class":313},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[45,104879,104880],{"class":47,"line":1695},[45,104881,2483],{"emptyLinePlaceholder":133},[45,104883,104884],{"class":47,"line":1700},[45,104885,104886],{"class":313},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[45,104888,104889],{"class":47,"line":1706},[45,104890,104891],{"class":313},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[45,104893,104894],{"class":47,"line":1711},[45,104895,104896],{"class":313},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[45,104898,104899],{"class":47,"line":1725},[45,104900,101418],{"class":313},[45,104902,104903],{"class":47,"line":1730},[45,104904,101423],{"class":313},[45,104906,104907],{"class":47,"line":1736},[45,104908,101428],{"class":313},[45,104910,104911],{"class":47,"line":1757},[45,104912,95749],{"class":313},[45,104914,104915],{"class":47,"line":1762},[45,104916,2483],{"emptyLinePlaceholder":133},[45,104918,104919],{"class":47,"line":1776},[45,104920,2483],{"emptyLinePlaceholder":133},[45,104922,104923,104925,104928,104931,104933,104936,104938],{"class":47,"line":1781},[45,104924,32028],{"class":93},[45,104926,104927],{"class":2046}," print_state",[45,104929,104930],{"class":51},"(prefix: ",[45,104932,1382],{"class":257},[45,104934,104935],{"class":51},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[45,104937,95737],{"class":257},[45,104939,3822],{"class":51},[45,104941,104942,104944],{"class":47,"line":1810},[45,104943,31380],{"class":257},[45,104945,104946],{"class":51},"(prefix)\n",[45,104948,104949,104951,104953,104956],{"class":47,"line":1815},[45,104950,31380],{"class":257},[45,104952,209],{"class":51},[45,104954,104955],{"class":313},"\"  timestep:\"",[45,104957,104958],{"class":51},", model.opt.timestep)\n",[45,104960,104961,104963,104965,104968],{"class":47,"line":1832},[45,104962,31380],{"class":257},[45,104964,209],{"class":51},[45,104966,104967],{"class":313},"\"  time:\"",[45,104969,101529],{"class":51},[45,104971,104972,104974,104976,104979,104982,104984],{"class":47,"line":1837},[45,104973,31380],{"class":257},[45,104975,209],{"class":51},[45,104977,104978],{"class":313},"\"  qpos:\"",[45,104980,104981],{"class":51},", np.round(data.qpos.copy(), ",[45,104983,501],{"class":257},[45,104985,30578],{"class":51},[45,104987,104988,104990,104992,104995,104998,105000],{"class":47,"line":1842},[45,104989,31380],{"class":257},[45,104991,209],{"class":51},[45,104993,104994],{"class":313},"\"  qvel:\"",[45,104996,104997],{"class":51},", np.round(data.qvel.copy(), ",[45,104999,501],{"class":257},[45,105001,30578],{"class":51},[45,105003,105004],{"class":47,"line":1847},[45,105005,2483],{"emptyLinePlaceholder":133},[45,105007,105008],{"class":47,"line":1861},[45,105009,2483],{"emptyLinePlaceholder":133},[45,105011,105012,105014,105016,105018,105020],{"class":47,"line":1866},[45,105013,32028],{"class":93},[45,105015,2056],{"class":2046},[45,105017,101449],{"class":51},[45,105019,95737],{"class":257},[45,105021,3822],{"class":51},[45,105023,105024,105026,105028,105030,105032],{"class":47,"line":2660},[45,105025,101458],{"class":51},[45,105027,254],{"class":93},[45,105029,101463],{"class":51},[45,105031,101365],{"class":257},[45,105033,215],{"class":51},[45,105035,105036,105038,105040],{"class":47,"line":2674},[45,105037,101472],{"class":51},[45,105039,254],{"class":93},[45,105041,101477],{"class":51},[45,105043,105044],{"class":47,"line":2682},[45,105045,2483],{"emptyLinePlaceholder":133},[45,105047,105048,105051,105054],{"class":47,"line":2687},[45,105049,105050],{"class":51},"    print_state(",[45,105052,105053],{"class":313},"\"initial\"",[45,105055,105056],{"class":51},", model, data)\n",[45,105058,105059],{"class":47,"line":2693},[45,105060,2483],{"emptyLinePlaceholder":133},[45,105062,105063,105065,105067,105069,105071,105073,105075],{"class":47,"line":2699},[45,105064,3284],{"class":93},[45,105066,101552],{"class":51},[45,105068,26126],{"class":93},[45,105070,32524],{"class":257},[45,105072,209],{"class":51},[45,105074,863],{"class":257},[45,105076,30867],{"class":51},[45,105078,105079],{"class":47,"line":2704},[45,105080,101567],{"class":51},[45,105082,105083],{"class":47,"line":8031},[45,105084,2483],{"emptyLinePlaceholder":133},[45,105086,105087,105089,105092],{"class":47,"line":8055},[45,105088,105050],{"class":51},[45,105090,105091],{"class":313},"\"after 50 steps\"",[45,105093,105056],{"class":51},[45,105095,105096],{"class":47,"line":8060},[45,105097,2483],{"emptyLinePlaceholder":133},[45,105099,105100],{"class":47,"line":8066},[45,105101,105102],{"class":51},"    mujoco.mj_resetData(model, data)\n",[45,105104,105105,105107,105110],{"class":47,"line":8093},[45,105106,105050],{"class":51},[45,105108,105109],{"class":313},"\"after reset\"",[45,105111,105056],{"class":51},[45,105113,105114],{"class":47,"line":8098},[45,105115,2483],{"emptyLinePlaceholder":133},[45,105117,105118,105121,105123,105125,105127],{"class":47,"line":8104},[45,105119,105120],{"class":51},"    data.qpos[",[45,105122,286],{"class":257},[45,105124,4526],{"class":51},[45,105126,254],{"class":93},[45,105128,104759],{"class":257},[45,105130,105131],{"class":47,"line":8116},[45,105132,105133],{"class":51},"    mujoco.mj_forward(model, data)\n",[45,105135,105136,105138,105141],{"class":47,"line":8128},[45,105137,105050],{"class":51},[45,105139,105140],{"class":313},"\"after manual qpos edit\"",[45,105142,105056],{"class":51},[45,105144,105145],{"class":47,"line":8140},[45,105146,2483],{"emptyLinePlaceholder":133},[45,105148,105149],{"class":47,"line":9799},[45,105150,2483],{"emptyLinePlaceholder":133},[45,105152,105153,105155,105157,105159,105161],{"class":47,"line":9824},[45,105154,1614],{"class":93},[45,105156,31301],{"class":257},[45,105158,101610],{"class":93},[45,105160,101613],{"class":313},[45,105162,3822],{"class":51},[45,105164,105165],{"class":47,"line":9847},[45,105166,101620],{"class":51},[10,105168,103621],{},[35,105170,105172],{"className":23905,"code":105171,"language":23907,"meta":40,"style":40},"touch ch3_python_state.py\n",[42,105173,105174],{"__ignoreMap":40},[45,105175,105176,105178],{"class":47,"line":48},[45,105177,101334],{"class":2046},[45,105179,105180],{"class":313}," ch3_python_state.py\n",[10,105182,102352],{},[35,105184,105186],{"className":23905,"code":105185,"language":23907,"meta":40,"style":40},"python ch3_python_state.py\n",[42,105187,105188],{"__ignoreMap":40},[45,105189,105190,105192],{"class":47,"line":48},[45,105191,39],{"class":2046},[45,105193,105180],{"class":313},[176,105195,101623],{"id":101623},[10,105197,105198],{},"打印状态的函数：",[35,105200,105202],{"className":37,"code":105201,"language":39,"meta":40,"style":40},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[42,105203,105204],{"__ignoreMap":40},[45,105205,105206,105208,105210,105212,105214,105216,105218],{"class":47,"line":48},[45,105207,32028],{"class":93},[45,105209,104927],{"class":2046},[45,105211,104930],{"class":51},[45,105213,1382],{"class":257},[45,105215,104935],{"class":51},[45,105217,95737],{"class":257},[45,105219,3822],{"class":51},[10,105221,105222,105223,105225],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[42,105224,33482],{}," 里发生了什么。",[10,105227,105228],{},"推进 50 步：",[35,105230,105232],{"className":37,"code":105231,"language":39,"meta":40,"style":40},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[42,105233,105234,105250],{"__ignoreMap":40},[45,105235,105236,105238,105240,105242,105244,105246,105248],{"class":47,"line":48},[45,105237,3108],{"class":93},[45,105239,101552],{"class":51},[45,105241,26126],{"class":93},[45,105243,32524],{"class":257},[45,105245,209],{"class":51},[45,105247,863],{"class":257},[45,105249,30867],{"class":51},[45,105251,105252],{"class":47,"line":125},[45,105253,101750],{"class":51},[10,105255,105256,105257,105260,105261,105263],{},"由于 ",[42,105258,105259],{},"timestep=0.01","，所以 50 步后时间约为 ",[42,105262,35410],{}," 秒。",[10,105265,105266],{},"重置：",[35,105268,105269],{"className":37,"code":104577,"language":39,"meta":40,"style":40},[42,105270,105271],{"__ignoreMap":40},[45,105272,105273],{"class":47,"line":48},[45,105274,104577],{"class":51},[10,105276,105277],{},"这会把时间、位置、速度恢复到初始状态。",[10,105279,105280],{},"手动改高度：",[35,105282,105284],{"className":37,"code":105283,"language":39,"meta":40,"style":40},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[42,105285,105286,105298],{"__ignoreMap":40},[45,105287,105288,105290,105292,105294,105296],{"class":47,"line":48},[45,105289,104750],{"class":51},[45,105291,286],{"class":257},[45,105293,4526],{"class":51},[45,105295,254],{"class":93},[45,105297,104759],{"class":257},[45,105299,105300],{"class":47,"line":125},[45,105301,104594],{"class":51},[10,105303,105304,105305,105308,105309,105312],{},"这个例子里 ",[42,105306,105307],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[42,105310,105311],{},"2.0"," 表示把小球放到更高的位置。",[176,105314,101759],{"id":101759},[35,105316,105317],{"className":37,"code":105201,"language":39,"meta":40,"style":40},[42,105318,105319],{"__ignoreMap":40},[45,105320,105321,105323,105325,105327,105329,105331,105333],{"class":47,"line":48},[45,105322,32028],{"class":93},[45,105324,104927],{"class":2046},[45,105326,104930],{"class":51},[45,105328,1382],{"class":257},[45,105330,104935],{"class":51},[45,105332,95737],{"class":257},[45,105334,3822],{"class":51},[10,105336,105337],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[159,105339,105340,105349,105354],{},[162,105341,105342,105345,105346,105348],{},[42,105343,105344],{},"prefix","：一段文字，比如 ",[42,105347,105053],{},"，用来说明现在打印的是哪个阶段。",[162,105350,105351,105353],{},[42,105352,102136],{},"：MuJoCo 模型。",[162,105355,105356,105358],{},[42,105357,33482],{},"：MuJoCo 当前状态。",[10,105360,105361,421,105364,105367],{},[42,105362,105363],{},"prefix: str",[42,105365,105366],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[35,105369,105371],{"className":37,"code":105370,"language":39,"meta":40,"style":40},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[42,105372,105373],{"__ignoreMap":40},[45,105374,105375,105377,105379,105381,105383,105385],{"class":47,"line":48},[45,105376,30496],{"class":257},[45,105378,209],{"class":51},[45,105380,104978],{"class":313},[45,105382,104981],{"class":51},[45,105384,501],{"class":257},[45,105386,30578],{"class":51},[10,105388,105389,105392],{},[42,105390,105391],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[35,105394,105396],{"className":37,"code":105395,"language":39,"meta":40,"style":40},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[42,105397,105398,105410],{"__ignoreMap":40},[45,105399,105400,105402,105404,105406,105408],{"class":47,"line":48},[45,105401,101685],{"class":51},[45,105403,254],{"class":93},[45,105405,101463],{"class":51},[45,105407,101365],{"class":257},[45,105409,215],{"class":51},[45,105411,105412,105414,105416],{"class":47,"line":125},[45,105413,101709],{"class":51},[45,105415,254],{"class":93},[45,105417,101477],{"class":51},[10,105419,105420],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[35,105422,105424],{"className":37,"code":105423,"language":39,"meta":40,"style":40},"print_state(\"initial\", model, data)\n",[42,105425,105426],{"__ignoreMap":40},[45,105427,105428,105431,105433],{"class":47,"line":48},[45,105429,105430],{"class":51},"print_state(",[45,105432,105053],{"class":313},[45,105434,105056],{"class":51},[10,105436,105437,105438,105441],{},"调用刚才定义的 ",[42,105439,105440],{},"print_state"," 函数，打印初始状态。",[35,105443,105444],{"className":37,"code":105231,"language":39,"meta":40,"style":40},[42,105445,105446,105462],{"__ignoreMap":40},[45,105447,105448,105450,105452,105454,105456,105458,105460],{"class":47,"line":48},[45,105449,3108],{"class":93},[45,105451,101552],{"class":51},[45,105453,26126],{"class":93},[45,105455,32524],{"class":257},[45,105457,209],{"class":51},[45,105459,863],{"class":257},[45,105461,30867],{"class":51},[45,105463,105464],{"class":47,"line":125},[45,105465,101750],{"class":51},[10,105467,105468],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[35,105470,105471],{"className":37,"code":104577,"language":39,"meta":40,"style":40},[42,105472,105473],{"__ignoreMap":40},[45,105474,105475],{"class":47,"line":48},[45,105476,104577],{"class":51},[10,105478,105479,105480,105482,105483,105485],{},"重置 ",[42,105481,33482],{},"。注意它不会重新创建 ",[42,105484,102136],{},"，因为模型结构没有变，只是状态回到初始值。",[35,105487,105488],{"className":37,"code":104743,"language":39,"meta":40,"style":40},[42,105489,105490],{"__ignoreMap":40},[45,105491,105492,105494,105496,105498,105500],{"class":47,"line":48},[45,105493,104750],{"class":51},[45,105495,286],{"class":257},[45,105497,4526],{"class":51},[45,105499,254],{"class":93},[45,105501,104759],{"class":257},[10,105503,105504,105505,421,105508,421,105511,105513],{},"这行是“手动改状态”。在 freejoint 中，",[42,105506,105507],{},"qpos[0]",[42,105509,105510],{},"qpos[1]",[42,105512,105307],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[35,105515,105516],{"className":37,"code":104594,"language":39,"meta":40,"style":40},[42,105517,105518],{"__ignoreMap":40},[45,105519,105520],{"class":47,"line":48},[45,105521,104594],{"class":51},[10,105523,105524,105525,105527,105528,105530],{},"手动改完 ",[42,105526,104081],{}," 后，调用 ",[42,105529,104301],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[30,105532,102367],{"id":102366},[10,105534,105535],{},"你会看到:",[159,105537,105538,105543,105548,105551],{},[162,105539,105540,105541],{},"初始时间为 ",[42,105542,400],{},[162,105544,105545,105546],{},"50 步后时间约为 ",[42,105547,35410],{},[162,105549,105550],{},"reset 后状态恢复",[162,105552,105553,105554,105557,105558],{},"手动修改 ",[42,105555,105556],{},"data.qpos[2]"," 后，小球高度变为 ",[42,105559,105311],{},[10,105561,105562,105564],{},[42,105563,105307],{}," 在这个例子中表示自由刚体的 z 坐标。",[10,105566,105567],{},"输出里可以重点看三件事：",[159,105569,105570,105578,105583],{},[162,105571,105572,105574,105575,105577],{},[42,105573,2470],{}," 是否随着 ",[42,105576,101266],{}," 增加。",[162,105579,105580,105582],{},[42,105581,104081],{}," 的 z 坐标是否因为下落而变化。",[162,105584,105585,105587,105588,28468],{},[42,105586,104403],{}," 后时间是否回到 ",[42,105589,400],{},[30,105591,102399],{"id":102398},[159,105593,105594,105600,105606,105612,105615,105624],{},[162,105595,105596,105597,28468],{},"修改 timestep 为 ",[42,105598,105599],{},"0.005",[162,105601,105602,105603,28468],{},"重新运行，检查 50 步后时间是否约为 ",[42,105604,105605],{},"0.25",[162,105607,105608,105609,28468],{},"修改重力为 ",[42,105610,105611],{},"0 0 -1.0",[162,105613,105614],{},"观察小球下降速度是否变慢。",[162,105616,102462,105617,102465,105620,105623],{},[42,105618,105619],{},"data.qpos[2] = 2.0",[42,105621,105622],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[162,105625,105626,105627,105630],{},"注释掉 ",[42,105628,105629],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[30,105632,102504],{"id":102503},[176,105634,105636,105637,105639],{"id":105635},"修改-dataqpos-后位置没有更新","修改 ",[42,105638,101121],{}," 后位置没有更新",[10,105641,102513],{},[35,105643,105644],{"className":37,"code":104594,"language":39,"meta":40,"style":40},[42,105645,105646],{"__ignoreMap":40},[45,105647,105648],{"class":47,"line":48},[45,105649,104594],{"class":51},[176,105651,105652],{"id":105652},"数组维度看不懂",[10,105654,105655],{},"打印模型维度:",[35,105657,105659],{"className":37,"code":105658,"language":39,"meta":40,"style":40},"print(model.nq, model.nv, model.nu)\n",[42,105660,105661],{"__ignoreMap":40},[45,105662,105663,105665],{"class":47,"line":48},[45,105664,30496],{"class":257},[45,105666,105667],{"class":51},"(model.nq, model.nv, model.nu)\n",[346,105669,105670,105678],{},[349,105671,105672],{},[352,105673,105674,105676],{},[355,105675,104625],{"align":23819},[355,105677,100751],{"align":23819},[393,105679,105680,105690,105700],{},[352,105681,105682,105687],{},[398,105683,105684],{"align":23819},[42,105685,105686],{},"nq",[398,105688,105689],{"align":23819},"位置变量数量",[352,105691,105692,105697],{},[398,105693,105694],{"align":23819},[42,105695,105696],{},"nv",[398,105698,105699],{"align":23819},"速度变量数量",[352,105701,105702,105706],{},[398,105703,105704],{"align":23819},[42,105705,102213],{},[398,105707,105708],{"align":23819},"控制输入数量",[176,105710,105712,105713,105715],{"id":105711},"误以为-qpos-一定等于关节数","误以为 ",[42,105714,104081],{}," 一定等于关节数",[10,105717,105718,105719,82611,105721,105723,105724,105726],{},"不是。例如 ",[42,105720,101671],{},[42,105722,104081],{}," 是 7 维，但 ",[42,105725,104411],{}," 是 6 维。",[176,105728,105730,105731,105733],{"id":105729},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[42,105732,104081],{}," 的第几位",[10,105735,105736],{},"初学时可以先打印：",[35,105738,105740],{"className":37,"code":105739,"language":39,"meta":40,"style":40},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[42,105741,105742,105752,105762,105774],{"__ignoreMap":40},[45,105743,105744,105746,105748,105750],{"class":47,"line":48},[45,105745,30496],{"class":257},[45,105747,209],{"class":51},[45,105749,101490],{"class":313},[45,105751,101493],{"class":51},[45,105753,105754,105756,105758,105760],{"class":47,"line":125},[45,105755,30496],{"class":257},[45,105757,209],{"class":51},[45,105759,101502],{"class":313},[45,105761,101505],{"class":51},[45,105763,105764,105766,105768,105771],{"class":47,"line":1262},[45,105765,30496],{"class":257},[45,105767,209],{"class":51},[45,105769,105770],{"class":313},"\"qpos:\"",[45,105772,105773],{"class":51},", data.qpos)\n",[45,105775,105776,105778,105780,105783],{"class":47,"line":1277},[45,105777,30496],{"class":257},[45,105779,209],{"class":51},[45,105781,105782],{"class":313},"\"qvel:\"",[45,105784,105785],{"class":51},", data.qvel)\n",[10,105787,105788],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[176,105790,105791],{"id":105791},"仿真结果每次都一样",[10,105793,105794,105795,105797],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[42,105796,104081],{},"、目标点或控制输入。",[30,105799,102658],{"id":102657},[10,105801,105802,105803,24701],{},"Python 控制 MuJoCo 的核心就是读写 ",[42,105804,33482],{},[159,105806,105807,105815,105820,105825],{},[162,105808,105809,105810,101069,105812,105814],{},"用 ",[42,105811,101121],{},[42,105813,101124],{}," 读取状态。",[162,105816,105809,105817,105819],{},[42,105818,101127],{}," 写入控制。",[162,105821,105809,105822,105824],{},[42,105823,101266],{}," 推进时间。",[162,105826,105827,105828,105830],{},"手动改状态后用 ",[42,105829,104301],{}," 刷新派生量。",[10,105832,105833],{},"理解这一章后，就可以进入关节和 actuator 控制。",[121,105835,105836],{},"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":40,"searchDepth":125,"depth":125,"links":105838},[105839,105840,105841,105848,105852,105853,105854,105864],{"id":100697,"depth":125,"text":100698},{"id":100820,"depth":125,"text":100821},{"id":101095,"depth":125,"text":101096,"children":105842},[105843,105845,105847],{"id":104606,"depth":1262,"text":105844},"qpos、qvel、ctrl 是什么",{"id":104684,"depth":1262,"text":105846},"mj_step 和 mj_forward 的区别",{"id":104773,"depth":1262,"text":104774},{"id":101303,"depth":125,"text":101304,"children":105849},[105850,105851],{"id":101623,"depth":1262,"text":101623},{"id":101759,"depth":1262,"text":101759},{"id":102366,"depth":125,"text":102367},{"id":102398,"depth":125,"text":102399},{"id":102503,"depth":125,"text":102504,"children":105855},[105856,105858,105859,105861,105863],{"id":105635,"depth":1262,"text":105857},"修改 data.qpos 后位置没有更新",{"id":105652,"depth":1262,"text":105652},{"id":105711,"depth":1262,"text":105860},"误以为 qpos 一定等于关节数",{"id":105729,"depth":1262,"text":105862},"不知道某个元素在 qpos 的第几位",{"id":105791,"depth":1262,"text":105791},{"id":102657,"depth":125,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104369,"description":40},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105871,"title":105872,"body":105873,"description":40,"extension":131,"meta":107563,"navigation":133,"path":107564,"seo":107565,"stem":107566,"__hash__":107567},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105874,"toc":107539},[105875,105878,105880,105883,105885,105910,105913,105932,105935,105937,105939,105963,105965,105979,105981,106022,106024,106048,106050,106053,106087,106089,106102,106105,106173,106182,106186,106189,106223,106229,106232,106236,106275,106278,106298,106302,106345,106347,106376,106379,106385,106388,106390,106784,106786,106798,106800,106811,106813,106816,106845,106853,106856,106891,106894,106896,106904,106907,106909,106920,106930,106950,106953,106989,107001,107049,107068,107110,107123,107151,107156,107177,107187,107205,107208,107242,107245,107265,107268,107287,107293,107295,107298,107304,107310,107320,107323,107329,107338,107340,107386,107388,107394,107400,107403,107406,107426,107429,107435,107441,107443,107466,107469,107472,107481,107484,107522,107524,107527,107533,107536],[20,105876,105872],{"id":105877},"_4关节actuator-与力控制",[30,105879,100698],{"id":100697},[10,105881,105882],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[10,105884,104382],{},[159,105886,105887,105893,105898,105902,105907],{},[162,105888,105889,105892],{},[42,105890,105891],{},"hinge"," 关节",[162,105894,105895],{},[42,105896,105897],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[162,105899,105900],{},[42,105901,101127],{},[162,105903,105904],{},[42,105905,105906],{},"ctrlrange",[162,105908,105909],{},"读取关节角和角速度",[10,105911,105912],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[35,105914,105916],{"className":37,"code":105915,"language":39,"meta":40,"style":40},"data.ctrl[0] = ...\n",[42,105917,105918],{"__ignoreMap":40},[45,105919,105920,105923,105925,105927,105929],{"class":47,"line":48},[45,105921,105922],{"class":51},"data.ctrl[",[45,105924,400],{"class":257},[45,105926,4526],{"class":51},[45,105928,254],{"class":93},[45,105930,105931],{"class":257}," ...\n",[10,105933,105934],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[30,105936,100821],{"id":100820},[10,105938,100824],{},[35,105940,105941],{"className":23905,"code":104439,"language":23907,"meta":40,"style":40},[42,105942,105943],{"__ignoreMap":40},[45,105944,105945,105947,105949,105951,105953,105955,105957,105959,105961],{"class":47,"line":48},[45,105946,24659],{"class":2046},[45,105948,26398],{"class":313},[45,105950,23917],{"class":313},[45,105952,26483],{"class":257},[45,105954,104454],{"class":313},[45,105956,100849],{"class":313},[45,105958,102552],{"class":313},[45,105960,100865],{"class":313},[45,105962,104463],{"class":313},[10,105964,102870],{},[35,105966,105967],{"className":23905,"code":100970,"language":23907,"meta":40,"style":40},[42,105968,105969],{"__ignoreMap":40},[45,105970,105971,105973,105975,105977],{"class":47,"line":48},[45,105972,23914],{"class":2046},[45,105974,23917],{"class":313},[45,105976,100981],{"class":313},[45,105978,100984],{"class":313},[10,105980,102887],{},[35,105982,105984],{"className":23905,"code":105983,"language":23907,"meta":40,"style":40},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[42,105985,105986,106003,106012],{"__ignoreMap":40},[45,105987,105988,105990,105992,105994,105997,105999,106001],{"class":47,"line":48},[45,105989,30413],{"class":2046},[45,105991,29259],{"class":313},[45,105993,25198],{"class":257},[45,105995,105996],{"class":313}," mujoco-control",[45,105998,101026],{"class":313},[45,106000,101029],{"class":257},[45,106002,101032],{"class":257},[45,106004,106005,106007,106009],{"class":47,"line":125},[45,106006,30413],{"class":2046},[45,106008,101039],{"class":313},[45,106010,106011],{"class":313}," mujoco-control\n",[45,106013,106014,106016,106018,106020],{"class":47,"line":1262},[45,106015,23914],{"class":2046},[45,106017,23917],{"class":313},[45,106019,100981],{"class":313},[45,106021,100984],{"class":313},[10,106023,101055],{},[159,106025,106026,106032,106039,106045],{},[162,106027,106028,106031],{},[42,106029,106030],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[162,106033,106034,106036,106037,28468],{},[42,106035,101127],{}," 长度等于 ",[42,106038,102209],{},[162,106040,82303,106041,106044],{},[42,106042,106043],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[162,106046,106047],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[30,106049,101096],{"id":101095},[10,106051,106052],{},"关节决定 body 如何运动:",[35,106054,106056],{"className":53148,"code":106055,"language":53150,"meta":40,"style":40},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[42,106057,106058],{"__ignoreMap":40},[45,106059,106060,106062,106064,106066,106068,106071,106073,106075,106077,106080,106082,106085],{"class":47,"line":48},[45,106061,1117],{"class":51},[45,106063,103007],{"class":51381},[45,106065,15003],{"class":2046},[45,106067,254],{"class":51},[45,106069,106070],{"class":313},"\"hinge\"",[45,106072,53905],{"class":2046},[45,106074,254],{"class":51},[45,106076,106070],{"class":313},[45,106078,106079],{"class":2046}," axis",[45,106081,254],{"class":51},[45,106083,106084],{"class":313},"\"0 1 0\"",[45,106086,101195],{"class":51},[10,106088,103103],{},[159,106090,106091,106096,106099],{},[162,106092,106093,106094],{},"名字是 ",[42,106095,105891],{},[162,106097,106098],{},"类型是旋转关节",[162,106100,106101],{},"绕 y 轴旋转",[10,106103,106104],{},"actuator 决定如何施加控制:",[35,106106,106108],{"className":53148,"code":106107,"language":53150,"meta":40,"style":40},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[42,106109,106110,106119,106165],{"__ignoreMap":40},[45,106111,106112,106114,106117],{"class":47,"line":48},[45,106113,1117],{"class":51},[45,106115,106116],{"class":51381},"actuator",[45,106118,51388],{"class":51},[45,106120,106121,106123,106126,106128,106130,106133,106136,106138,106140,106143,106145,106147,106150,106152,106155,106158,106160,106163],{"class":47,"line":125},[45,106122,52225],{"class":51},[45,106124,106125],{"class":51381},"motor",[45,106127,15003],{"class":2046},[45,106129,254],{"class":51},[45,106131,106132],{"class":313},"\"hinge_motor\"",[45,106134,106135],{"class":2046}," joint",[45,106137,254],{"class":51},[45,106139,106070],{"class":313},[45,106141,106142],{"class":2046}," gear",[45,106144,254],{"class":51},[45,106146,3761],{"class":313},[45,106148,106149],{"class":2046}," ctrlrange",[45,106151,254],{"class":51},[45,106153,106154],{"class":313},"\"-2 2\"",[45,106156,106157],{"class":2046}," ctrllimited",[45,106159,254],{"class":51},[45,106161,106162],{"class":313},"\"true\"",[45,106164,101195],{"class":51},[45,106166,106167,106169,106171],{"class":47,"line":1262},[45,106168,51866],{"class":51},[45,106170,106116],{"class":51381},[45,106172,51388],{"class":51},[10,106174,106175,106178,106179,28468],{},[42,106176,106177],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[42,106180,106181],{},"[-2, 2]",[176,106183,106185],{"id":106184},"joint-和-actuator-的关系","joint 和 actuator 的关系",[10,106187,106188],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[346,106190,106191,106201],{},[349,106192,106193],{},[352,106194,106195,106197,106199],{},[355,106196,25836],{"align":23819},[355,106198,102747],{"align":23819},[355,106200,100785],{"align":23819},[393,106202,106203,106213],{},[352,106204,106205,106207,106210],{},[398,106206,103007],{"align":23819},[398,106208,106209],{"align":23819},"定义能怎么动",[398,106211,106212],{"align":23819},"门轴允许门旋转",[352,106214,106215,106217,106220],{},[398,106216,106116],{"align":23819},[398,106218,106219],{"align":23819},"定义怎么施力或控制",[398,106221,106222],{"align":23819},"人推门、马达带动门",[10,106224,106225,106226,106228],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[42,106227,101127],{}," 主动控制它。",[10,106230,106231],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[176,106233,106235],{"id":106234},"hinge-joint","hinge joint",[35,106237,106239],{"className":53148,"code":106238,"language":53150,"meta":40,"style":40},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[42,106240,106241],{"__ignoreMap":40},[45,106242,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106268,106270,106273],{"class":47,"line":48},[45,106244,1117],{"class":51},[45,106246,103007],{"class":51381},[45,106248,15003],{"class":2046},[45,106250,254],{"class":51},[45,106252,106070],{"class":313},[45,106254,53905],{"class":2046},[45,106256,254],{"class":51},[45,106258,106070],{"class":313},[45,106260,106079],{"class":2046},[45,106262,254],{"class":51},[45,106264,106084],{"class":313},[45,106266,106267],{"class":2046}," damping",[45,106269,254],{"class":51},[45,106271,106272],{"class":313},"\"0.1\"",[45,106274,101195],{"class":51},[10,106276,106277],{},"含义：",[159,106279,106280,106286,106292],{},[162,106281,106282,106285],{},[42,106283,106284],{},"type=\"hinge\"","：只能绕一个轴旋转。",[162,106287,106288,106291],{},[42,106289,106290],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[162,106293,106294,106297],{},[42,106295,106296],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[176,106299,106301],{"id":106300},"motor-actuator","motor actuator",[35,106303,106305],{"className":53148,"code":106304,"language":53150,"meta":40,"style":40},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[42,106306,106307],{"__ignoreMap":40},[45,106308,106309,106311,106313,106315,106317,106319,106321,106323,106325,106327,106329,106331,106333,106335,106337,106339,106341,106343],{"class":47,"line":48},[45,106310,1117],{"class":51},[45,106312,106125],{"class":51381},[45,106314,15003],{"class":2046},[45,106316,254],{"class":51},[45,106318,106132],{"class":313},[45,106320,106135],{"class":2046},[45,106322,254],{"class":51},[45,106324,106070],{"class":313},[45,106326,106142],{"class":2046},[45,106328,254],{"class":51},[45,106330,3761],{"class":313},[45,106332,106149],{"class":2046},[45,106334,254],{"class":51},[45,106336,106154],{"class":313},[45,106338,106157],{"class":2046},[45,106340,254],{"class":51},[45,106342,106162],{"class":313},[45,106344,101195],{"class":51},[10,106346,106277],{},[159,106348,106349,106358,106364,106370],{},[162,106350,106351,106354,106355,106357],{},[42,106352,106353],{},"joint=\"hinge\"","：这个电机作用在名为 ",[42,106356,105891],{}," 的关节上。",[162,106359,106360,106363],{},[42,106361,106362],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[162,106365,106366,106369],{},[42,106367,106368],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[162,106371,106372,106375],{},[42,106373,106374],{},"ctrllimited=\"true\"","：启用控制范围限制。",[10,106377,106378],{},"简单理解：",[35,106380,106383],{"className":106381,"code":106382,"language":5270,"meta":40},[5268],"实际施加效果 ≈ data.ctrl[0] * gear\n",[42,106384,106382],{"__ignoreMap":40},[10,106386,106387],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[30,106389,101304],{"id":101303},[35,106391,106393],{"className":37,"code":106392,"language":39,"meta":40,"style":40},"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",[42,106394,106395,106402,106406,106412,106422,106426,106430,106438,106443,106448,106452,106456,106461,106466,106470,106475,106480,106485,106490,106494,106498,106502,106507,106512,106517,106521,106525,106529,106533,106545,106557,106565,106569,106579,106589,106599,106603,106616,106629,106633,106650,106664,106699,106703,106707,106718,106733,106748,106760,106764,106768,106780],{"__ignoreMap":40},[45,106396,106397,106399],{"class":47,"line":48},[45,106398,30473],{"class":93},[45,106400,106401],{"class":51}," math\n",[45,106403,106404],{"class":47,"line":125},[45,106405,2483],{"emptyLinePlaceholder":133},[45,106407,106408,106410],{"class":47,"line":1262},[45,106409,30473],{"class":93},[45,106411,101352],{"class":51},[45,106413,106414,106416,106418,106420],{"class":47,"line":1277},[45,106415,30473],{"class":93},[45,106417,31461],{"class":51},[45,106419,31464],{"class":93},[45,106421,31467],{"class":51},[45,106423,106424],{"class":47,"line":1283},[45,106425,2483],{"emptyLinePlaceholder":133},[45,106427,106428],{"class":47,"line":1297},[45,106429,2483],{"emptyLinePlaceholder":133},[45,106431,106432,106434,106436],{"class":47,"line":1303},[45,106433,101365],{"class":257},[45,106435,13647],{"class":93},[45,106437,101370],{"class":313},[45,106439,106440],{"class":47,"line":1394},[45,106441,106442],{"class":313},"\u003Cmujoco model=\"one_link_motor\">\n",[45,106444,106445],{"class":47,"line":1400},[45,106446,106447],{"class":313},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[45,106449,106450],{"class":47,"line":1412},[45,106451,2483],{"emptyLinePlaceholder":133},[45,106453,106454],{"class":47,"line":1695},[45,106455,101389],{"class":313},[45,106457,106458],{"class":47,"line":1700},[45,106459,106460],{"class":313},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[45,106462,106463],{"class":47,"line":1706},[45,106464,106465],{"class":313},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[45,106467,106468],{"class":47,"line":1711},[45,106469,2483],{"emptyLinePlaceholder":133},[45,106471,106472],{"class":47,"line":1725},[45,106473,106474],{"class":313},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[45,106476,106477],{"class":47,"line":1730},[45,106478,106479],{"class":313},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[45,106481,106482],{"class":47,"line":1736},[45,106483,106484],{"class":313},"        \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",[45,106486,106487],{"class":47,"line":1757},[45,106488,106489],{"class":313},"      \u003C\u002Fbody>\n",[45,106491,106492],{"class":47,"line":1762},[45,106493,101418],{"class":313},[45,106495,106496],{"class":47,"line":1776},[45,106497,101423],{"class":313},[45,106499,106500],{"class":47,"line":1781},[45,106501,2483],{"emptyLinePlaceholder":133},[45,106503,106504],{"class":47,"line":1810},[45,106505,106506],{"class":313},"  \u003Cactuator>\n",[45,106508,106509],{"class":47,"line":1815},[45,106510,106511],{"class":313},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[45,106513,106514],{"class":47,"line":1832},[45,106515,106516],{"class":313},"  \u003C\u002Factuator>\n",[45,106518,106519],{"class":47,"line":1837},[45,106520,101428],{"class":313},[45,106522,106523],{"class":47,"line":1842},[45,106524,95749],{"class":313},[45,106526,106527],{"class":47,"line":1847},[45,106528,2483],{"emptyLinePlaceholder":133},[45,106530,106531],{"class":47,"line":1861},[45,106532,2483],{"emptyLinePlaceholder":133},[45,106534,106535,106537,106539,106541,106543],{"class":47,"line":1866},[45,106536,32028],{"class":93},[45,106538,2056],{"class":2046},[45,106540,101449],{"class":51},[45,106542,95737],{"class":257},[45,106544,3822],{"class":51},[45,106546,106547,106549,106551,106553,106555],{"class":47,"line":2660},[45,106548,101458],{"class":51},[45,106550,254],{"class":93},[45,106552,101463],{"class":51},[45,106554,101365],{"class":257},[45,106556,215],{"class":51},[45,106558,106559,106561,106563],{"class":47,"line":2674},[45,106560,101472],{"class":51},[45,106562,254],{"class":93},[45,106564,101477],{"class":51},[45,106566,106567],{"class":47,"line":2682},[45,106568,2483],{"emptyLinePlaceholder":133},[45,106570,106571,106573,106575,106577],{"class":47,"line":2687},[45,106572,31380],{"class":257},[45,106574,209],{"class":51},[45,106576,101490],{"class":313},[45,106578,101493],{"class":51},[45,106580,106581,106583,106585,106587],{"class":47,"line":2693},[45,106582,31380],{"class":257},[45,106584,209],{"class":51},[45,106586,101502],{"class":313},[45,106588,101505],{"class":51},[45,106590,106591,106593,106595,106597],{"class":47,"line":2699},[45,106592,31380],{"class":257},[45,106594,209],{"class":51},[45,106596,101514],{"class":313},[45,106598,101517],{"class":51},[45,106600,106601],{"class":47,"line":2704},[45,106602,2483],{"emptyLinePlaceholder":133},[45,106604,106605,106607,106610,106612,106614],{"class":47,"line":8031},[45,106606,3184],{"class":93},[45,106608,106609],{"class":51}," model.nu ",[45,106611,21031],{"class":93},[45,106613,25201],{"class":257},[45,106615,3822],{"class":51},[45,106617,106618,106620,106622,106624,106627],{"class":47,"line":8055},[45,106619,103483],{"class":93},[45,106621,103486],{"class":257},[45,106623,209],{"class":51},[45,106625,106626],{"class":313},"\"expected exactly one actuator\"",[45,106628,215],{"class":51},[45,106630,106631],{"class":47,"line":8060},[45,106632,2483],{"emptyLinePlaceholder":133},[45,106634,106635,106637,106639,106641,106643,106645,106648],{"class":47,"line":8066},[45,106636,3284],{"class":93},[45,106638,31697],{"class":51},[45,106640,26126],{"class":93},[45,106642,32524],{"class":257},[45,106644,209],{"class":51},[45,106646,106647],{"class":257},"2000",[45,106649,30867],{"class":51},[45,106651,106652,106655,106657,106659,106661],{"class":47,"line":8093},[45,106653,106654],{"class":51},"        t ",[45,106656,254],{"class":93},[45,106658,31697],{"class":51},[45,106660,663],{"class":93},[45,106662,106663],{"class":51}," model.opt.timestep\n",[45,106665,106666,106669,106671,106673,106675,106678,106680,106683,106685,106687,106690,106692,106694,106696],{"class":47,"line":8098},[45,106667,106668],{"class":51},"        data.ctrl[",[45,106670,400],{"class":257},[45,106672,4526],{"class":51},[45,106674,254],{"class":93},[45,106676,106677],{"class":257}," 1.5",[45,106679,6601],{"class":93},[45,106681,106682],{"class":51}," math.sin(",[45,106684,105311],{"class":257},[45,106686,6601],{"class":93},[45,106688,106689],{"class":51}," math.pi ",[45,106691,663],{"class":93},[45,106693,61948],{"class":257},[45,106695,6601],{"class":93},[45,106697,106698],{"class":51}," t)\n",[45,106700,106701],{"class":47,"line":8104},[45,106702,101567],{"class":51},[45,106704,106705],{"class":47,"line":8116},[45,106706,2483],{"emptyLinePlaceholder":133},[45,106708,106709,106711,106713,106716],{"class":47,"line":8128},[45,106710,31380],{"class":257},[45,106712,209],{"class":51},[45,106714,106715],{"class":313},"\"time:\"",[45,106717,101529],{"class":51},[45,106719,106720,106722,106724,106727,106729,106731],{"class":47,"line":8140},[45,106721,31380],{"class":257},[45,106723,209],{"class":51},[45,106725,106726],{"class":313},"\"joint qpos:\"",[45,106728,104981],{"class":51},[45,106730,501],{"class":257},[45,106732,30578],{"class":51},[45,106734,106735,106737,106739,106742,106744,106746],{"class":47,"line":9799},[45,106736,31380],{"class":257},[45,106738,209],{"class":51},[45,106740,106741],{"class":313},"\"joint qvel:\"",[45,106743,104997],{"class":51},[45,106745,501],{"class":257},[45,106747,30578],{"class":51},[45,106749,106750,106752,106754,106757],{"class":47,"line":9824},[45,106751,31380],{"class":257},[45,106753,209],{"class":51},[45,106755,106756],{"class":313},"\"last ctrl:\"",[45,106758,106759],{"class":51},", data.ctrl.copy())\n",[45,106761,106762],{"class":47,"line":9847},[45,106763,2483],{"emptyLinePlaceholder":133},[45,106765,106766],{"class":47,"line":9871},[45,106767,2483],{"emptyLinePlaceholder":133},[45,106769,106770,106772,106774,106776,106778],{"class":47,"line":9876},[45,106771,1614],{"class":93},[45,106773,31301],{"class":257},[45,106775,101610],{"class":93},[45,106777,101613],{"class":313},[45,106779,3822],{"class":51},[45,106781,106782],{"class":47,"line":9881},[45,106783,101620],{"class":51},[10,106785,103621],{},[35,106787,106789],{"className":23905,"code":106788,"language":23907,"meta":40,"style":40},"touch ch4_joint_motor.py\n",[42,106790,106791],{"__ignoreMap":40},[45,106792,106793,106795],{"class":47,"line":48},[45,106794,101334],{"class":2046},[45,106796,106797],{"class":313}," ch4_joint_motor.py\n",[10,106799,102352],{},[35,106801,106803],{"className":23905,"code":106802,"language":23907,"meta":40,"style":40},"python ch4_joint_motor.py\n",[42,106804,106805],{"__ignoreMap":40},[45,106806,106807,106809],{"class":47,"line":48},[45,106808,39],{"class":2046},[45,106810,106797],{"class":313},[176,106812,101623],{"id":101623},[10,106814,106815],{},"检查 actuator 数量：",[35,106817,106819],{"className":37,"code":106818,"language":39,"meta":40,"style":40},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[42,106820,106821,106833],{"__ignoreMap":40},[45,106822,106823,106825,106827,106829,106831],{"class":47,"line":48},[45,106824,1614],{"class":93},[45,106826,106609],{"class":51},[45,106828,21031],{"class":93},[45,106830,25201],{"class":257},[45,106832,3822],{"class":51},[45,106834,106835,106837,106839,106841,106843],{"class":47,"line":125},[45,106836,103946],{"class":93},[45,106838,103486],{"class":257},[45,106840,209],{"class":51},[45,106842,106626],{"class":313},[45,106844,215],{"class":51},[10,106846,106847,106849,106850,106852],{},[42,106848,102209],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[42,106851,101127],{}," 长度应该是 1。",[10,106854,106855],{},"产生正弦控制信号：",[35,106857,106859],{"className":37,"code":106858,"language":39,"meta":40,"style":40},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[42,106860,106861],{"__ignoreMap":40},[45,106862,106863,106865,106867,106869,106871,106873,106875,106877,106879,106881,106883,106885,106887,106889],{"class":47,"line":48},[45,106864,105922],{"class":51},[45,106866,400],{"class":257},[45,106868,4526],{"class":51},[45,106870,254],{"class":93},[45,106872,106677],{"class":257},[45,106874,6601],{"class":93},[45,106876,106682],{"class":51},[45,106878,105311],{"class":257},[45,106880,6601],{"class":93},[45,106882,106689],{"class":51},[45,106884,663],{"class":93},[45,106886,61948],{"class":257},[45,106888,6601],{"class":93},[45,106890,106698],{"class":51},[10,106892,106893],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[10,106895,101724],{},[35,106897,106898],{"className":37,"code":104556,"language":39,"meta":40,"style":40},[42,106899,106900],{"__ignoreMap":40},[45,106901,106902],{"class":47,"line":48},[45,106903,104556],{"class":51},[10,106905,106906],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[176,106908,101759],{"id":101759},[35,106910,106912],{"className":37,"code":106911,"language":39,"meta":40,"style":40},"import math\n",[42,106913,106914],{"__ignoreMap":40},[45,106915,106916,106918],{"class":47,"line":48},[45,106917,30473],{"class":93},[45,106919,106401],{"class":51},[10,106921,106922,106923,101069,106926,106929],{},"导入 Python 标准库里的数学模块。后面要用 ",[42,106924,106925],{},"math.sin",[42,106927,106928],{},"math.pi"," 生成周期变化的控制信号。",[35,106931,106932],{"className":37,"code":103737,"language":39,"meta":40,"style":40},[42,106933,106934,106940],{"__ignoreMap":40},[45,106935,106936,106938],{"class":47,"line":48},[45,106937,30473],{"class":93},[45,106939,101352],{"class":51},[45,106941,106942,106944,106946,106948],{"class":47,"line":125},[45,106943,30473],{"class":93},[45,106945,31461],{"class":51},[45,106947,31464],{"class":93},[45,106949,31467],{"class":51},[10,106951,106952],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[35,106954,106955],{"className":53148,"code":106238,"language":53150,"meta":40,"style":40},[42,106956,106957],{"__ignoreMap":40},[45,106958,106959,106961,106963,106965,106967,106969,106971,106973,106975,106977,106979,106981,106983,106985,106987],{"class":47,"line":48},[45,106960,1117],{"class":51},[45,106962,103007],{"class":51381},[45,106964,15003],{"class":2046},[45,106966,254],{"class":51},[45,106968,106070],{"class":313},[45,106970,53905],{"class":2046},[45,106972,254],{"class":51},[45,106974,106070],{"class":313},[45,106976,106079],{"class":2046},[45,106978,254],{"class":51},[45,106980,106084],{"class":313},[45,106982,106267],{"class":2046},[45,106984,254],{"class":51},[45,106986,106272],{"class":313},[45,106988,101195],{"class":51},[10,106990,106991,106992,106994,106995,106997,106998,107000],{},"这行定义关节。",[42,106993,105891],{}," 表示旋转关节。",[42,106996,106290],{}," 表示绕 y 轴旋转。",[42,106999,106296],{}," 表示有一点阻尼，运动不会完全无损耗。",[35,107002,107004],{"className":53148,"code":107003,"language":53150,"meta":40,"style":40},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[42,107005,107006],{"__ignoreMap":40},[45,107007,107008,107010,107012,107014,107016,107019,107021,107023,107026,107029,107031,107034,107036,107038,107040,107042,107044,107047],{"class":47,"line":48},[45,107009,1117],{"class":51},[45,107011,101171],{"class":51381},[45,107013,15003],{"class":2046},[45,107015,254],{"class":51},[45,107017,107018],{"class":313},"\"link_geom\"",[45,107020,53905],{"class":2046},[45,107022,254],{"class":51},[45,107024,107025],{"class":313},"\"capsule\"",[45,107027,107028],{"class":2046}," fromto",[45,107030,254],{"class":51},[45,107032,107033],{"class":313},"\"0 0 0 0 0 0.5\"",[45,107035,101187],{"class":2046},[45,107037,254],{"class":51},[45,107039,103829],{"class":313},[45,107041,102052],{"class":2046},[45,107043,254],{"class":51},[45,107045,107046],{"class":313},"\"0.5\"",[45,107048,101195],{"class":51},[10,107050,107051,107052,107054,107055,107057,107058,107061,107062,28468,107065,107067],{},"这行定义摆杆的形状。",[42,107053,103216],{}," 是胶囊体，适合表示杆子。",[42,107056,103227],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[42,107059,107060],{},"(0,0,0)"," 延伸到 ",[42,107063,107064],{},"(0,0,0.5)",[42,107066,103221],{}," 是半径。",[35,107069,107070],{"className":53148,"code":106304,"language":53150,"meta":40,"style":40},[42,107071,107072],{"__ignoreMap":40},[45,107073,107074,107076,107078,107080,107082,107084,107086,107088,107090,107092,107094,107096,107098,107100,107102,107104,107106,107108],{"class":47,"line":48},[45,107075,1117],{"class":51},[45,107077,106125],{"class":51381},[45,107079,15003],{"class":2046},[45,107081,254],{"class":51},[45,107083,106132],{"class":313},[45,107085,106135],{"class":2046},[45,107087,254],{"class":51},[45,107089,106070],{"class":313},[45,107091,106142],{"class":2046},[45,107093,254],{"class":51},[45,107095,3761],{"class":313},[45,107097,106149],{"class":2046},[45,107099,254],{"class":51},[45,107101,106154],{"class":313},[45,107103,106157],{"class":2046},[45,107105,254],{"class":51},[45,107107,106162],{"class":313},[45,107109,101195],{"class":51},[10,107111,107112,107113,107115,107116,107119,107120,107122],{},"这行定义电机。它作用在 ",[42,107114,105891],{}," 关节上。",[42,107117,107118],{},"gear"," 可以理解成放大倍数。",[42,107121,105906],{}," 限制控制输入范围。",[35,107124,107125],{"className":37,"code":106818,"language":39,"meta":40,"style":40},[42,107126,107127,107139],{"__ignoreMap":40},[45,107128,107129,107131,107133,107135,107137],{"class":47,"line":48},[45,107130,1614],{"class":93},[45,107132,106609],{"class":51},[45,107134,21031],{"class":93},[45,107136,25201],{"class":257},[45,107138,3822],{"class":51},[45,107140,107141,107143,107145,107147,107149],{"class":47,"line":125},[45,107142,103946],{"class":93},[45,107144,103486],{"class":257},[45,107146,209],{"class":51},[45,107148,106626],{"class":313},[45,107150,215],{"class":51},[10,107152,107153,107155],{},[42,107154,102209],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[35,107157,107159],{"className":37,"code":107158,"language":39,"meta":40,"style":40},"for step in range(2000):\n",[42,107160,107161],{"__ignoreMap":40},[45,107162,107163,107165,107167,107169,107171,107173,107175],{"class":47,"line":48},[45,107164,3108],{"class":93},[45,107166,31697],{"class":51},[45,107168,26126],{"class":93},[45,107170,32524],{"class":257},[45,107172,209],{"class":51},[45,107174,106647],{"class":257},[45,107176,30867],{"class":51},[10,107178,107179,107180,107182,107183,107186],{},"循环 2000 步。这里没有用 ",[42,107181,1199],{},"，而是用 ",[42,107184,107185],{},"step","，因为后面要用当前步数计算时间。",[35,107188,107190],{"className":37,"code":107189,"language":39,"meta":40,"style":40},"t = step * model.opt.timestep\n",[42,107191,107192],{"__ignoreMap":40},[45,107193,107194,107197,107199,107201,107203],{"class":47,"line":48},[45,107195,107196],{"class":51},"t ",[45,107198,254],{"class":93},[45,107200,31697],{"class":51},[45,107202,663],{"class":93},[45,107204,106663],{"class":51},[10,107206,107207],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[35,107209,107210],{"className":37,"code":106858,"language":39,"meta":40,"style":40},[42,107211,107212],{"__ignoreMap":40},[45,107213,107214,107216,107218,107220,107222,107224,107226,107228,107230,107232,107234,107236,107238,107240],{"class":47,"line":48},[45,107215,105922],{"class":51},[45,107217,400],{"class":257},[45,107219,4526],{"class":51},[45,107221,254],{"class":93},[45,107223,106677],{"class":257},[45,107225,6601],{"class":93},[45,107227,106682],{"class":51},[45,107229,105311],{"class":257},[45,107231,6601],{"class":93},[45,107233,106689],{"class":51},[45,107235,663],{"class":93},[45,107237,61948],{"class":257},[45,107239,6601],{"class":93},[45,107241,106698],{"class":51},[10,107243,107244],{},"这行给电机输入一个正弦波。拆开看：",[159,107246,107247,107253,107259],{},[162,107248,107249,107252],{},[42,107250,107251],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[162,107254,107255,107258],{},[42,107256,107257],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[162,107260,107261,107264],{},[42,107262,107263],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[10,107266,107267],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[35,107269,107271],{"className":37,"code":107270,"language":39,"meta":40,"style":40},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[42,107272,107273],{"__ignoreMap":40},[45,107274,107275,107277,107279,107281,107283,107285],{"class":47,"line":48},[45,107276,30496],{"class":257},[45,107278,209],{"class":51},[45,107280,106726],{"class":313},[45,107282,104981],{"class":51},[45,107284,501],{"class":257},[45,107286,30578],{"class":51},[10,107288,107289,107290,107292],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[42,107291,101121],{}," 只有一个数。",[30,107294,102367],{"id":102366},[10,107296,107297],{},"输出类似:",[35,107299,107302],{"className":107300,"code":107301,"language":5270,"meta":40},[5268],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[42,107303,107301],{"__ignoreMap":40},[10,107305,107306,107307,107309],{},"这里 ",[42,107308,106177],{}," 是电机输入。",[10,107311,107312,107315,107316,107319],{},[42,107313,107314],{},"joint qpos"," 是关节角度，单位通常是弧度。",[42,107317,107318],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[10,107321,107322],{},"角度单位提示：",[35,107324,107327],{"className":107325,"code":107326,"language":5270,"meta":40},[5268],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[42,107328,107326],{"__ignoreMap":40},[10,107330,107331,107332,107334,107335,107337],{},"如果你看到 ",[42,107333,104081],{}," 是 ",[42,107336,35410],{},"，大约就是 28.6 度。",[30,107339,102399],{"id":102398},[159,107341,107342,107349,107352,107359,107362,107370,107378],{},[162,107343,102462,107344,102465,107346,28468],{},[42,107345,106362],{},[42,107347,107348],{},"gear=\"5\"",[162,107350,107351],{},"重新运行，观察关节运动是否更剧烈。",[162,107353,102462,107354,102465,107356,28468],{},[42,107355,105906],{},[42,107357,107358],{},"-0.2 0.2",[162,107360,107361],{},"重新运行，观察控制能力是否变弱。",[162,107363,107364,107365,107367,107368,28468],{},"去掉 actuator，确认 ",[42,107366,102209],{}," 变成 ",[42,107369,400],{},[162,107371,102462,107372,102465,107374,107377],{},[42,107373,106296],{},[42,107375,107376],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[162,107379,102462,107380,102465,107382,107385],{},[42,107381,106290],{},[42,107383,107384],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[30,107387,102504],{"id":102503},[176,107389,107391],{"id":107390},"indexerror-index-0-is-out-of-bounds",[42,107392,107393],{},"IndexError: index 0 is out of bounds",[10,107395,107396,107397,107399],{},"原因是 ",[42,107398,106043],{},"，没有 actuator。",[176,107401,107402],{"id":107402},"关节几乎不动",[10,107404,107405],{},"可能原因:",[159,107407,107408,107413,107417,107423],{},[162,107409,107410,107412],{},[42,107411,107118],{}," 太小",[162,107414,107415,107412],{},[42,107416,105906],{},[162,107418,107419,107422],{},[42,107420,107421],{},"damping"," 太大",[162,107424,107425],{},"重力方向导致运动不明显",[176,107427,107428],{"id":107428},"模型编译失败",[10,107430,107431,107432,107434],{},"检查 actuator 引用的 ",[42,107433,106353],{}," 是否存在，joint 名称是否拼写一致。",[176,107436,107438,107440],{"id":107437},"datactrl0-写了但没有效果",[42,107439,106177],{}," 写了但没有效果",[10,107442,102626],{},[159,107444,107445,107450,107453,107458,107463],{},[162,107446,107447,107449],{},[42,107448,102209],{}," 是否大于 0。",[162,107451,107452],{},"motor 是否引用了正确 joint。",[162,107454,107455,107457],{},[42,107456,107118],{}," 是否太小。",[162,107459,107460,107462],{},[42,107461,105906],{}," 是否把输入限制得太小。",[162,107464,107465],{},"body 是否真的有可动 joint。",[176,107467,107468],{"id":107468},"控制输入超过范围会怎样",[10,107470,107471],{},"如果设置了：",[35,107473,107475],{"className":53148,"code":107474,"language":53150,"meta":40,"style":40},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[42,107476,107477],{"__ignoreMap":40},[45,107478,107479],{"class":47,"line":48},[45,107480,107474],{"class":51},[10,107482,107483],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[35,107485,107487],{"className":37,"code":107486,"language":39,"meta":40,"style":40},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[42,107488,107489,107509],{"__ignoreMap":40},[45,107490,107491,107494,107496,107499,107501,107503,107505,107507],{"class":47,"line":48},[45,107492,107493],{"class":51},"action ",[45,107495,254],{"class":93},[45,107497,107498],{"class":51}," np.clip(action, ",[45,107500,94],{"class":93},[45,107502,105311],{"class":257},[45,107504,12518],{"class":51},[45,107506,105311],{"class":257},[45,107508,215],{"class":51},[45,107510,107511,107513,107515,107517,107519],{"class":47,"line":125},[45,107512,105922],{"class":51},[45,107514,400],{"class":257},[45,107516,4526],{"class":51},[45,107518,254],{"class":93},[45,107520,107521],{"class":51}," action\n",[30,107523,102658],{"id":102657},[10,107525,107526],{},"这一章建立了控制任务的基本形式：",[35,107528,107531],{"className":107529,"code":107530,"language":5270,"meta":40},[5268],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[42,107532,107530],{"__ignoreMap":40},[10,107534,107535],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[121,107537,107538],{},"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":40,"searchDepth":125,"depth":125,"links":107540},[107541,107542,107543,107548,107552,107553,107554,107562],{"id":100697,"depth":125,"text":100698},{"id":100820,"depth":125,"text":100821},{"id":101095,"depth":125,"text":101096,"children":107544},[107545,107546,107547],{"id":106184,"depth":1262,"text":106185},{"id":106234,"depth":1262,"text":106235},{"id":106300,"depth":1262,"text":106301},{"id":101303,"depth":125,"text":101304,"children":107549},[107550,107551],{"id":101623,"depth":1262,"text":101623},{"id":101759,"depth":1262,"text":101759},{"id":102366,"depth":125,"text":102367},{"id":102398,"depth":125,"text":102399},{"id":102503,"depth":125,"text":102504,"children":107555},[107556,107557,107558,107559,107561],{"id":107390,"depth":1262,"text":107393},{"id":107402,"depth":1262,"text":107402},{"id":107428,"depth":1262,"text":107428},{"id":107437,"depth":1262,"text":107560},"data.ctrl[0] 写了但没有效果",{"id":107468,"depth":1262,"text":107468},{"id":102657,"depth":125,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105872,"description":40},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107569,"title":107570,"body":107571,"description":40,"extension":131,"meta":109480,"navigation":133,"path":109481,"seo":109482,"stem":109483,"__hash__":109484},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107572,"toc":109456},[107573,107576,107578,107581,107589,107592,107609,107612,107637,107640,107686,107688,107690,107745,107747,107766,107768,107811,107814,107831,107834,107850,107860,107867,107869,107872,107875,107909,107912,107960,107964,107967,107981,107990,107994,107997,108022,108025,108029,108042,108045,108051,108054,108069,108071,108074,108334,108336,108348,108351,108663,108665,108677,108679,108682,108697,108702,108705,108727,108730,108733,108767,108770,108774,108785,108788,108805,108808,108822,108829,108849,108856,108870,108873,108885,108900,108920,108923,108945,108948,108952,108967,108978,108993,108996,109026,109042,109071,109079,109103,109106,109124,109134,109146,109153,109162,109168,109177,109180,109182,109191,109194,109209,109211,109214,109225,109228,109239,109242,109260,109262,109279,109282,109310,109312,109316,109319,109349,109355,109358,109362,109370,109373,109375,109396,109399,109402,109418,109421,109437,109439,109442,109453],[20,107574,107570],{"id":107575},"_5viewer-可视化与-renderer-离屏渲染",[30,107577,100698],{"id":100697},[10,107579,107580],{},"本章掌握两类可视化方式:",[159,107582,107583,107586],{},[162,107584,107585],{},"交互式 viewer: 适合人工观察仿真",[162,107587,107588],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[10,107590,107591],{},"使用官方接口:",[35,107593,107595],{"className":37,"code":107594,"language":39,"meta":40,"style":40},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[42,107596,107597,107604],{"__ignoreMap":40},[45,107598,107599,107601],{"class":47,"line":48},[45,107600,30473],{"class":93},[45,107602,107603],{"class":51}," mujoco.viewer\n",[45,107605,107606],{"class":47,"line":125},[45,107607,107608],{"class":51},"mujoco.viewer.launch_passive(model, data)\n",[10,107610,107611],{},"以及:",[35,107613,107615],{"className":37,"code":107614,"language":39,"meta":40,"style":40},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[42,107616,107617,107627],{"__ignoreMap":40},[45,107618,107619,107622,107624],{"class":47,"line":48},[45,107620,107621],{"class":51},"renderer ",[45,107623,254],{"class":93},[45,107625,107626],{"class":51}," mujoco.Renderer(model)\n",[45,107628,107629,107632,107634],{"class":47,"line":125},[45,107630,107631],{"class":51},"image ",[45,107633,254],{"class":93},[45,107635,107636],{"class":51}," renderer.render()\n",[10,107638,107639],{},"新手建议先理解二者区别：",[346,107641,107642,107658],{},[349,107643,107644],{},[352,107645,107646,107649,107652,107655],{},[355,107647,107648],{"align":23819},"工具",[355,107650,107651],{"align":23819},"用途",[355,107653,107654],{"align":23819},"是否打开窗口",[355,107656,107657],{"align":23819},"常见场景",[393,107659,107660,107673],{},[352,107661,107662,107665,107668,107670],{},[398,107663,107664],{"align":23819},"Viewer",[398,107666,107667],{"align":23819},"人眼实时观察仿真",[398,107669,104716],{"align":23819},[398,107671,107672],{"align":23819},"调试模型、看控制效果",[352,107674,107675,107678,107681,107683],{},[398,107676,107677],{"align":23819},"Renderer",[398,107679,107680],{"align":23819},"生成图像数组",[398,107682,104729],{"align":23819},[398,107684,107685],{"align":23819},"保存图片、训练视觉策略、服务器批量采集",[30,107687,100821],{"id":100820},[10,107689,100824],{},[35,107691,107693],{"className":23905,"code":107692,"language":23907,"meta":40,"style":40},"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",[42,107694,107695,107707,107717,107725,107733],{"__ignoreMap":40},[45,107696,107697,107699,107701,107703,107705],{"class":47,"line":48},[45,107698,24659],{"class":2046},[45,107700,26398],{"class":313},[45,107702,23917],{"class":313},[45,107704,26483],{"class":257},[45,107706,24761],{"class":257},[45,107708,107709,107711,107713,107715],{"class":47,"line":125},[45,107710,100859],{"class":313},[45,107712,100862],{"class":313},[45,107714,100865],{"class":313},[45,107716,24761],{"class":257},[45,107718,107719,107721,107723],{"class":47,"line":1262},[45,107720,100872],{"class":313},[45,107722,100875],{"class":313},[45,107724,24761],{"class":257},[45,107726,107727,107729,107731],{"class":47,"line":1277},[45,107728,100882],{"class":313},[45,107730,100885],{"class":313},[45,107732,24761],{"class":257},[45,107734,107735,107737,107739,107741,107743],{"class":47,"line":1283},[45,107736,100892],{"class":313},[45,107738,100895],{"class":313},[45,107740,100898],{"class":313},[45,107742,100901],{"class":313},[45,107744,102567],{"class":313},[10,107746,102870],{},[35,107748,107750],{"className":23905,"code":107749,"language":23907,"meta":40,"style":40},"pip install \"mujoco>=2.3\" numpy pillow\n",[42,107751,107752],{"__ignoreMap":40},[45,107753,107754,107756,107758,107760,107763],{"class":47,"line":48},[45,107755,23914],{"class":2046},[45,107757,23917],{"class":313},[45,107759,100981],{"class":313},[45,107761,107762],{"class":313}," numpy",[45,107764,107765],{"class":313}," pillow\n",[10,107767,102887],{},[35,107769,107771],{"className":23905,"code":107770,"language":23907,"meta":40,"style":40},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[42,107772,107773,107790,107799],{"__ignoreMap":40},[45,107774,107775,107777,107779,107781,107784,107786,107788],{"class":47,"line":48},[45,107776,30413],{"class":2046},[45,107778,29259],{"class":313},[45,107780,25198],{"class":257},[45,107782,107783],{"class":313}," mujoco-render",[45,107785,101026],{"class":313},[45,107787,101029],{"class":257},[45,107789,101032],{"class":257},[45,107791,107792,107794,107796],{"class":47,"line":125},[45,107793,30413],{"class":2046},[45,107795,101039],{"class":313},[45,107797,107798],{"class":313}," mujoco-render\n",[45,107800,107801,107803,107805,107807,107809],{"class":47,"line":1262},[45,107802,23914],{"class":2046},[45,107804,23917],{"class":313},[45,107806,100981],{"class":313},[45,107808,107762],{"class":313},[45,107810,107765],{"class":313},[10,107812,107813],{},"离屏渲染后端:",[35,107815,107817],{"className":23905,"code":107816,"language":23907,"meta":40,"style":40},"export MUJOCO_GL=egl\n",[42,107818,107819],{"__ignoreMap":40},[45,107820,107821,107823,107826,107828],{"class":47,"line":48},[45,107822,25125],{"class":93},[45,107824,107825],{"class":51}," MUJOCO_GL",[45,107827,254],{"class":93},[45,107829,107830],{"class":51},"egl\n",[10,107832,107833],{},"或:",[35,107835,107837],{"className":23905,"code":107836,"language":23907,"meta":40,"style":40},"export MUJOCO_GL=osmesa\n",[42,107838,107839],{"__ignoreMap":40},[45,107840,107841,107843,107845,107847],{"class":47,"line":48},[45,107842,25125],{"class":93},[45,107844,107825],{"class":51},[45,107846,254],{"class":93},[45,107848,107849],{"class":51},"osmesa\n",[10,107851,107852,107853,107856,107857,28468],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[42,107854,107855],{},"egl"," 失败，再尝试 ",[42,107858,107859],{},"osmesa",[10,107861,107862,107863,107866],{},"如果你在本机桌面环境运行，通常先不要设置 ",[42,107864,107865],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[30,107868,101096],{"id":101095},[10,107870,107871],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[10,107873,107874],{},"典型 viewer 流程:",[35,107876,107878],{"className":37,"code":107877,"language":39,"meta":40,"style":40},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[42,107879,107880,107893,107900,107904],{"__ignoreMap":40},[45,107881,107882,107885,107888,107890],{"class":47,"line":48},[45,107883,107884],{"class":93},"with",[45,107886,107887],{"class":51}," mujoco.viewer.launch_passive(model, data) ",[45,107889,31464],{"class":93},[45,107891,107892],{"class":51}," viewer:\n",[45,107894,107895,107897],{"class":47,"line":125},[45,107896,2334],{"class":93},[45,107898,107899],{"class":51}," viewer.is_running():\n",[45,107901,107902],{"class":47,"line":1262},[45,107903,101567],{"class":51},[45,107905,107906],{"class":47,"line":1277},[45,107907,107908],{"class":51},"        viewer.sync()\n",[10,107910,107911],{},"典型 renderer 流程:",[35,107913,107915],{"className":37,"code":107914,"language":39,"meta":40,"style":40},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[42,107916,107917,107943,107947,107952],{"__ignoreMap":40},[45,107918,107919,107921,107923,107926,107928,107930,107932,107934,107936,107938,107941],{"class":47,"line":48},[45,107920,107621],{"class":51},[45,107922,254],{"class":93},[45,107924,107925],{"class":51}," mujoco.Renderer(model, ",[45,107927,25064],{"class":5299},[45,107929,254],{"class":93},[45,107931,42423],{"class":257},[45,107933,12518],{"class":51},[45,107935,25060],{"class":5299},[45,107937,254],{"class":93},[45,107939,107940],{"class":257},"640",[45,107942,215],{"class":51},[45,107944,107945],{"class":47,"line":125},[45,107946,104556],{"class":51},[45,107948,107949],{"class":47,"line":1262},[45,107950,107951],{"class":51},"renderer.update_scene(data)\n",[45,107953,107954,107956,107958],{"class":47,"line":1277},[45,107955,107631],{"class":51},[45,107957,254],{"class":93},[45,107959,107636],{"class":51},[176,107961,107963],{"id":107962},"viewer-的同步逻辑","viewer 的同步逻辑",[10,107965,107966],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[35,107968,107970],{"className":37,"code":107969,"language":39,"meta":40,"style":40},"mujoco.mj_step(model, data)\nviewer.sync()\n",[42,107971,107972,107976],{"__ignoreMap":40},[45,107973,107974],{"class":47,"line":48},[45,107975,104556],{"class":51},[45,107977,107978],{"class":47,"line":125},[45,107979,107980],{"class":51},"viewer.sync()\n",[10,107982,107983,107985,107986,107989],{},[42,107984,101266],{}," 负责算物理，",[42,107987,107988],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[176,107991,107993],{"id":107992},"为什么要-sleep","为什么要 sleep",[10,107995,107996],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[35,107998,108000],{"className":37,"code":107999,"language":39,"meta":40,"style":40},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[42,108001,108002],{"__ignoreMap":40},[45,108003,108004,108007,108009,108012,108014,108017,108019],{"class":47,"line":48},[45,108005,108006],{"class":51},"sleep_time ",[45,108008,254],{"class":93},[45,108010,108011],{"class":51}," model.opt.timestep ",[45,108013,94],{"class":93},[45,108015,108016],{"class":51}," (time.time() ",[45,108018,94],{"class":93},[45,108020,108021],{"class":51}," step_start)\n",[10,108023,108024],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[176,108026,108028],{"id":108027},"renderer-输出是什么","renderer 输出是什么",[35,108030,108032],{"className":37,"code":108031,"language":39,"meta":40,"style":40},"image = renderer.render()\n",[42,108033,108034],{"__ignoreMap":40},[45,108035,108036,108038,108040],{"class":47,"line":48},[45,108037,107631],{"class":51},[45,108039,254],{"class":93},[45,108041,107636],{"class":51},[10,108043,108044],{},"得到的是 NumPy 数组，形状通常是：",[35,108046,108049],{"className":108047,"code":108048,"language":5270,"meta":40},[5268],"(height, width, 3)\n",[42,108050,108048],{"__ignoreMap":40},[10,108052,108053],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[35,108055,108057],{"className":37,"code":108056,"language":39,"meta":40,"style":40},"Image.fromarray(image).save(\"render_output.png\")\n",[42,108058,108059],{"__ignoreMap":40},[45,108060,108061,108064,108067],{"class":47,"line":48},[45,108062,108063],{"class":51},"Image.fromarray(image).save(",[45,108065,108066],{"class":313},"\"render_output.png\"",[45,108068,215],{"class":51},[30,108070,101304],{"id":101303},[10,108072,108073],{},"交互式 Viewer:",[35,108075,108077],{"className":37,"code":108076,"language":39,"meta":40,"style":40},"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",[42,108078,108079,108085,108089,108095,108101,108105,108109,108117,108122,108126,108130,108134,108139,108144,108148,108152,108156,108161,108165,108169,108173,108177,108181,108185,108197,108209,108217,108221,108231,108251,108261,108266,108271,108275,108292,108305,108310,108314,108318,108330],{"__ignoreMap":40},[45,108080,108081,108083],{"class":47,"line":48},[45,108082,30473],{"class":93},[45,108084,31910],{"class":51},[45,108086,108087],{"class":47,"line":125},[45,108088,2483],{"emptyLinePlaceholder":133},[45,108090,108091,108093],{"class":47,"line":1262},[45,108092,30473],{"class":93},[45,108094,101352],{"class":51},[45,108096,108097,108099],{"class":47,"line":1277},[45,108098,30473],{"class":93},[45,108100,107603],{"class":51},[45,108102,108103],{"class":47,"line":1283},[45,108104,2483],{"emptyLinePlaceholder":133},[45,108106,108107],{"class":47,"line":1297},[45,108108,2483],{"emptyLinePlaceholder":133},[45,108110,108111,108113,108115],{"class":47,"line":1303},[45,108112,101365],{"class":257},[45,108114,13647],{"class":93},[45,108116,101370],{"class":313},[45,108118,108119],{"class":47,"line":1394},[45,108120,108121],{"class":313},"\u003Cmujoco model=\"viewer_demo\">\n",[45,108123,108124],{"class":47,"line":1400},[45,108125,101380],{"class":313},[45,108127,108128],{"class":47,"line":1412},[45,108129,2483],{"emptyLinePlaceholder":133},[45,108131,108132],{"class":47,"line":1695},[45,108133,101389],{"class":313},[45,108135,108136],{"class":47,"line":1700},[45,108137,108138],{"class":313},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[45,108140,108141],{"class":47,"line":1706},[45,108142,108143],{"class":313},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[45,108145,108146],{"class":47,"line":1711},[45,108147,2483],{"emptyLinePlaceholder":133},[45,108149,108150],{"class":47,"line":1725},[45,108151,101403],{"class":313},[45,108153,108154],{"class":47,"line":1730},[45,108155,101408],{"class":313},[45,108157,108158],{"class":47,"line":1736},[45,108159,108160],{"class":313},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[45,108162,108163],{"class":47,"line":1757},[45,108164,101418],{"class":313},[45,108166,108167],{"class":47,"line":1762},[45,108168,101423],{"class":313},[45,108170,108171],{"class":47,"line":1776},[45,108172,101428],{"class":313},[45,108174,108175],{"class":47,"line":1781},[45,108176,95749],{"class":313},[45,108178,108179],{"class":47,"line":1810},[45,108180,2483],{"emptyLinePlaceholder":133},[45,108182,108183],{"class":47,"line":1815},[45,108184,2483],{"emptyLinePlaceholder":133},[45,108186,108187,108189,108191,108193,108195],{"class":47,"line":1832},[45,108188,32028],{"class":93},[45,108190,2056],{"class":2046},[45,108192,101449],{"class":51},[45,108194,95737],{"class":257},[45,108196,3822],{"class":51},[45,108198,108199,108201,108203,108205,108207],{"class":47,"line":1837},[45,108200,101458],{"class":51},[45,108202,254],{"class":93},[45,108204,101463],{"class":51},[45,108206,101365],{"class":257},[45,108208,215],{"class":51},[45,108210,108211,108213,108215],{"class":47,"line":1842},[45,108212,101472],{"class":51},[45,108214,254],{"class":93},[45,108216,101477],{"class":51},[45,108218,108219],{"class":47,"line":1847},[45,108220,2483],{"emptyLinePlaceholder":133},[45,108222,108223,108225,108227,108229],{"class":47,"line":1861},[45,108224,34259],{"class":93},[45,108226,107887],{"class":51},[45,108228,31464],{"class":93},[45,108230,107892],{"class":51},[45,108232,108233,108236,108239,108241,108244,108246,108249],{"class":47,"line":1866},[45,108234,108235],{"class":93},"        while",[45,108237,108238],{"class":51}," viewer.is_running() ",[45,108240,30543],{"class":93},[45,108242,108243],{"class":51}," data.time ",[45,108245,1117],{"class":93},[45,108247,108248],{"class":257}," 5.0",[45,108250,3822],{"class":51},[45,108252,108253,108256,108258],{"class":47,"line":2660},[45,108254,108255],{"class":51},"            step_start ",[45,108257,254],{"class":93},[45,108259,108260],{"class":51}," time.time()\n",[45,108262,108263],{"class":47,"line":2674},[45,108264,108265],{"class":51},"            mujoco.mj_step(model, data)\n",[45,108267,108268],{"class":47,"line":2682},[45,108269,108270],{"class":51},"            viewer.sync()\n",[45,108272,108273],{"class":47,"line":2687},[45,108274,2483],{"emptyLinePlaceholder":133},[45,108276,108277,108280,108282,108284,108286,108288,108290],{"class":47,"line":2693},[45,108278,108279],{"class":51},"            sleep_time ",[45,108281,254],{"class":93},[45,108283,108011],{"class":51},[45,108285,94],{"class":93},[45,108287,108016],{"class":51},[45,108289,94],{"class":93},[45,108291,108021],{"class":51},[45,108293,108294,108296,108299,108301,108303],{"class":47,"line":2699},[45,108295,4725],{"class":93},[45,108297,108298],{"class":51}," sleep_time ",[45,108300,1167],{"class":93},[45,108302,4176],{"class":257},[45,108304,3822],{"class":51},[45,108306,108307],{"class":47,"line":2704},[45,108308,108309],{"class":51},"                time.sleep(sleep_time)\n",[45,108311,108312],{"class":47,"line":8031},[45,108313,2483],{"emptyLinePlaceholder":133},[45,108315,108316],{"class":47,"line":8055},[45,108317,2483],{"emptyLinePlaceholder":133},[45,108319,108320,108322,108324,108326,108328],{"class":47,"line":8060},[45,108321,1614],{"class":93},[45,108323,31301],{"class":257},[45,108325,101610],{"class":93},[45,108327,101613],{"class":313},[45,108329,3822],{"class":51},[45,108331,108332],{"class":47,"line":8066},[45,108333,101620],{"class":51},[10,108335,103621],{},[35,108337,108339],{"className":23905,"code":108338,"language":23907,"meta":40,"style":40},"touch ch5_viewer.py\n",[42,108340,108341],{"__ignoreMap":40},[45,108342,108343,108345],{"class":47,"line":48},[45,108344,101334],{"class":2046},[45,108346,108347],{"class":313}," ch5_viewer.py\n",[10,108349,108350],{},"离屏 Renderer 保存图片:",[35,108352,108354],{"className":37,"code":108353,"language":39,"meta":40,"style":40},"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",[42,108355,108356,108368,108372,108378,108388,108392,108396,108404,108409,108413,108417,108421,108425,108430,108434,108438,108442,108446,108450,108454,108458,108462,108466,108470,108474,108486,108498,108506,108531,108535,108551,108555,108559,108574,108583,108587,108601,108606,108611,108615,108627,108639,108643,108647,108659],{"__ignoreMap":40},[45,108357,108358,108360,108363,108365],{"class":47,"line":48},[45,108359,30818],{"class":93},[45,108361,108362],{"class":51}," pathlib ",[45,108364,30473],{"class":93},[45,108366,108367],{"class":51}," Path\n",[45,108369,108370],{"class":47,"line":125},[45,108371,2483],{"emptyLinePlaceholder":133},[45,108373,108374,108376],{"class":47,"line":1262},[45,108375,30473],{"class":93},[45,108377,101352],{"class":51},[45,108379,108380,108382,108384,108386],{"class":47,"line":1277},[45,108381,30818],{"class":93},[45,108383,47344],{"class":257},[45,108385,47347],{"class":93},[45,108387,47350],{"class":51},[45,108389,108390],{"class":47,"line":1283},[45,108391,2483],{"emptyLinePlaceholder":133},[45,108393,108394],{"class":47,"line":1297},[45,108395,2483],{"emptyLinePlaceholder":133},[45,108397,108398,108400,108402],{"class":47,"line":1303},[45,108399,101365],{"class":257},[45,108401,13647],{"class":93},[45,108403,101370],{"class":313},[45,108405,108406],{"class":47,"line":1394},[45,108407,108408],{"class":313},"\u003Cmujoco model=\"renderer_demo\">\n",[45,108410,108411],{"class":47,"line":1400},[45,108412,101380],{"class":313},[45,108414,108415],{"class":47,"line":1412},[45,108416,2483],{"emptyLinePlaceholder":133},[45,108418,108419],{"class":47,"line":1695},[45,108420,101389],{"class":313},[45,108422,108423],{"class":47,"line":1700},[45,108424,108138],{"class":313},[45,108426,108427],{"class":47,"line":1706},[45,108428,108429],{"class":313},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[45,108431,108432],{"class":47,"line":1711},[45,108433,108143],{"class":313},[45,108435,108436],{"class":47,"line":1725},[45,108437,2483],{"emptyLinePlaceholder":133},[45,108439,108440],{"class":47,"line":1730},[45,108441,101403],{"class":313},[45,108443,108444],{"class":47,"line":1736},[45,108445,101408],{"class":313},[45,108447,108448],{"class":47,"line":1757},[45,108449,108160],{"class":313},[45,108451,108452],{"class":47,"line":1762},[45,108453,101418],{"class":313},[45,108455,108456],{"class":47,"line":1776},[45,108457,101423],{"class":313},[45,108459,108460],{"class":47,"line":1781},[45,108461,101428],{"class":313},[45,108463,108464],{"class":47,"line":1810},[45,108465,95749],{"class":313},[45,108467,108468],{"class":47,"line":1815},[45,108469,2483],{"emptyLinePlaceholder":133},[45,108471,108472],{"class":47,"line":1832},[45,108473,2483],{"emptyLinePlaceholder":133},[45,108475,108476,108478,108480,108482,108484],{"class":47,"line":1837},[45,108477,32028],{"class":93},[45,108479,2056],{"class":2046},[45,108481,101449],{"class":51},[45,108483,95737],{"class":257},[45,108485,3822],{"class":51},[45,108487,108488,108490,108492,108494,108496],{"class":47,"line":1842},[45,108489,101458],{"class":51},[45,108491,254],{"class":93},[45,108493,101463],{"class":51},[45,108495,101365],{"class":257},[45,108497,215],{"class":51},[45,108499,108500,108502,108504],{"class":47,"line":1847},[45,108501,101472],{"class":51},[45,108503,254],{"class":93},[45,108505,101477],{"class":51},[45,108507,108508,108511,108513,108515,108517,108519,108521,108523,108525,108527,108529],{"class":47,"line":1861},[45,108509,108510],{"class":51},"    renderer ",[45,108512,254],{"class":93},[45,108514,107925],{"class":51},[45,108516,25064],{"class":5299},[45,108518,254],{"class":93},[45,108520,42423],{"class":257},[45,108522,12518],{"class":51},[45,108524,25060],{"class":5299},[45,108526,254],{"class":93},[45,108528,107940],{"class":257},[45,108530,215],{"class":51},[45,108532,108533],{"class":47,"line":1866},[45,108534,2483],{"emptyLinePlaceholder":133},[45,108536,108537,108539,108541,108543,108545,108547,108549],{"class":47,"line":2660},[45,108538,3284],{"class":93},[45,108540,101552],{"class":51},[45,108542,26126],{"class":93},[45,108544,32524],{"class":257},[45,108546,209],{"class":51},[45,108548,519],{"class":257},[45,108550,30867],{"class":51},[45,108552,108553],{"class":47,"line":2674},[45,108554,101567],{"class":51},[45,108556,108557],{"class":47,"line":2682},[45,108558,2483],{"emptyLinePlaceholder":133},[45,108560,108561,108564,108567,108569,108572],{"class":47,"line":2687},[45,108562,108563],{"class":51},"    renderer.update_scene(data, ",[45,108565,108566],{"class":5299},"camera",[45,108568,254],{"class":93},[45,108570,108571],{"class":313},"\"fixed_camera\"",[45,108573,215],{"class":51},[45,108575,108576,108579,108581],{"class":47,"line":2693},[45,108577,108578],{"class":51},"    image ",[45,108580,254],{"class":93},[45,108582,107636],{"class":51},[45,108584,108585],{"class":47,"line":2699},[45,108586,2483],{"emptyLinePlaceholder":133},[45,108588,108589,108592,108594,108597,108599],{"class":47,"line":2704},[45,108590,108591],{"class":51},"    output_path ",[45,108593,254],{"class":93},[45,108595,108596],{"class":51}," Path(",[45,108598,108066],{"class":313},[45,108600,215],{"class":51},[45,108602,108603],{"class":47,"line":8031},[45,108604,108605],{"class":51},"    Image.fromarray(image).save(output_path)\n",[45,108607,108608],{"class":47,"line":8055},[45,108609,108610],{"class":51},"    renderer.close()\n",[45,108612,108613],{"class":47,"line":8060},[45,108614,2483],{"emptyLinePlaceholder":133},[45,108616,108617,108619,108621,108624],{"class":47,"line":8066},[45,108618,31380],{"class":257},[45,108620,209],{"class":51},[45,108622,108623],{"class":313},"\"saved:\"",[45,108625,108626],{"class":51},", output_path.resolve())\n",[45,108628,108629,108631,108633,108636],{"class":47,"line":8093},[45,108630,31380],{"class":257},[45,108632,209],{"class":51},[45,108634,108635],{"class":313},"\"image shape:\"",[45,108637,108638],{"class":51},", image.shape)\n",[45,108640,108641],{"class":47,"line":8098},[45,108642,2483],{"emptyLinePlaceholder":133},[45,108644,108645],{"class":47,"line":8104},[45,108646,2483],{"emptyLinePlaceholder":133},[45,108648,108649,108651,108653,108655,108657],{"class":47,"line":8116},[45,108650,1614],{"class":93},[45,108652,31301],{"class":257},[45,108654,101610],{"class":93},[45,108656,101613],{"class":313},[45,108658,3822],{"class":51},[45,108660,108661],{"class":47,"line":8128},[45,108662,101620],{"class":51},[10,108664,103621],{},[35,108666,108668],{"className":23905,"code":108667,"language":23907,"meta":40,"style":40},"touch ch5_renderer.py\n",[42,108669,108670],{"__ignoreMap":40},[45,108671,108672,108674],{"class":47,"line":48},[45,108673,101334],{"class":2046},[45,108675,108676],{"class":313}," ch5_renderer.py\n",[176,108678,101623],{"id":101623},[10,108680,108681],{},"viewer 上下文：",[35,108683,108685],{"className":37,"code":108684,"language":39,"meta":40,"style":40},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[42,108686,108687],{"__ignoreMap":40},[45,108688,108689,108691,108693,108695],{"class":47,"line":48},[45,108690,107884],{"class":93},[45,108692,107887],{"class":51},[45,108694,31464],{"class":93},[45,108696,107892],{"class":51},[10,108698,108699,108701],{},[42,108700,107884],{}," 语句会创建窗口，并在退出时自动清理资源。",[10,108703,108704],{},"窗口循环：",[35,108706,108708],{"className":37,"code":108707,"language":39,"meta":40,"style":40},"while viewer.is_running() and data.time \u003C 5.0:\n",[42,108709,108710],{"__ignoreMap":40},[45,108711,108712,108715,108717,108719,108721,108723,108725],{"class":47,"line":48},[45,108713,108714],{"class":93},"while",[45,108716,108238],{"class":51},[45,108718,30543],{"class":93},[45,108720,108243],{"class":51},[45,108722,1117],{"class":93},[45,108724,108248],{"class":257},[45,108726,3822],{"class":51},[10,108728,108729],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[10,108731,108732],{},"固定相机：",[35,108734,108736],{"className":53148,"code":108735,"language":53150,"meta":40,"style":40},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[42,108737,108738],{"__ignoreMap":40},[45,108739,108740,108742,108744,108746,108748,108750,108752,108754,108757,108760,108762,108765],{"class":47,"line":48},[45,108741,1117],{"class":51},[45,108743,108566],{"class":51381},[45,108745,15003],{"class":2046},[45,108747,254],{"class":51},[45,108749,108571],{"class":313},[45,108751,101157],{"class":2046},[45,108753,254],{"class":51},[45,108755,108756],{"class":313},"\"1.5 -2.0 1.2\"",[45,108758,108759],{"class":2046}," xyaxes",[45,108761,254],{"class":51},[45,108763,108764],{"class":313},"\"1 0.75 0 0 0 1\"",[45,108766,101195],{"class":51},[10,108768,108769],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[176,108771,108773],{"id":108772},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[35,108775,108777],{"className":37,"code":108776,"language":39,"meta":40,"style":40},"import time\n",[42,108778,108779],{"__ignoreMap":40},[45,108780,108781,108783],{"class":47,"line":48},[45,108782,30473],{"class":93},[45,108784,31910],{"class":51},[10,108786,108787],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[35,108789,108791],{"className":37,"code":108790,"language":39,"meta":40,"style":40},"import mujoco\nimport mujoco.viewer\n",[42,108792,108793,108799],{"__ignoreMap":40},[45,108794,108795,108797],{"class":47,"line":48},[45,108796,30473],{"class":93},[45,108798,101352],{"class":51},[45,108800,108801,108803],{"class":47,"line":125},[45,108802,30473],{"class":93},[45,108804,107603],{"class":51},[10,108806,108807],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[35,108809,108810],{"className":37,"code":108684,"language":39,"meta":40,"style":40},[42,108811,108812],{"__ignoreMap":40},[45,108813,108814,108816,108818,108820],{"class":47,"line":48},[45,108815,107884],{"class":93},[45,108817,107887],{"class":51},[45,108819,31464],{"class":93},[45,108821,107892],{"class":51},[10,108823,108824,108825,108828],{},"打开一个 viewer 窗口。",[42,108826,108827],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[35,108830,108831],{"className":37,"code":108707,"language":39,"meta":40,"style":40},[42,108832,108833],{"__ignoreMap":40},[45,108834,108835,108837,108839,108841,108843,108845,108847],{"class":47,"line":48},[45,108836,108714],{"class":93},[45,108838,108238],{"class":51},[45,108840,30543],{"class":93},[45,108842,108243],{"class":51},[45,108844,1117],{"class":93},[45,108846,108248],{"class":257},[45,108848,3822],{"class":51},[10,108850,108851,108852,108855],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[42,108853,108854],{},"viewer.is_running()"," 会变成 false，循环结束。",[35,108857,108859],{"className":37,"code":108858,"language":39,"meta":40,"style":40},"step_start = time.time()\n",[42,108860,108861],{"__ignoreMap":40},[45,108862,108863,108866,108868],{"class":47,"line":48},[45,108864,108865],{"class":51},"step_start ",[45,108867,254],{"class":93},[45,108869,108260],{"class":51},[10,108871,108872],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[35,108874,108875],{"className":37,"code":107969,"language":39,"meta":40,"style":40},[42,108876,108877,108881],{"__ignoreMap":40},[45,108878,108879],{"class":47,"line":48},[45,108880,104556],{"class":51},[45,108882,108883],{"class":47,"line":125},[45,108884,107980],{"class":51},[10,108886,108887,108889,108890,108892,108893,108895,108896,108899],{},[42,108888,101266],{}," 推进物理仿真。",[42,108891,107988],{}," 把最新的 ",[42,108894,33482],{}," 同步到窗口里显示。没有 ",[42,108897,108898],{},"sync()","，窗口可能看不到最新状态。",[35,108901,108902],{"className":37,"code":107999,"language":39,"meta":40,"style":40},[42,108903,108904],{"__ignoreMap":40},[45,108905,108906,108908,108910,108912,108914,108916,108918],{"class":47,"line":48},[45,108907,108006],{"class":51},[45,108909,254],{"class":93},[45,108911,108011],{"class":51},[45,108913,94],{"class":93},[45,108915,108016],{"class":51},[45,108917,94],{"class":93},[45,108919,108021],{"class":51},[10,108921,108922],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[35,108924,108926],{"className":37,"code":108925,"language":39,"meta":40,"style":40},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[42,108927,108928,108940],{"__ignoreMap":40},[45,108929,108930,108932,108934,108936,108938],{"class":47,"line":48},[45,108931,1614],{"class":93},[45,108933,108298],{"class":51},[45,108935,1167],{"class":93},[45,108937,4176],{"class":257},[45,108939,3822],{"class":51},[45,108941,108942],{"class":47,"line":125},[45,108943,108944],{"class":51},"    time.sleep(sleep_time)\n",[10,108946,108947],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[176,108949,108951],{"id":108950},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[35,108953,108955],{"className":37,"code":108954,"language":39,"meta":40,"style":40},"from pathlib import Path\n",[42,108956,108957],{"__ignoreMap":40},[45,108958,108959,108961,108963,108965],{"class":47,"line":48},[45,108960,30818],{"class":93},[45,108962,108362],{"class":51},[45,108964,30473],{"class":93},[45,108966,108367],{"class":51},[10,108968,108969,108970,108973,108974,108977],{},"导入 ",[42,108971,108972],{},"Path","，用来处理文件路径。相比直接写字符串，",[42,108975,108976],{},"Path(\"render_output.png\")"," 更清晰。",[35,108979,108981],{"className":37,"code":108980,"language":39,"meta":40,"style":40},"from PIL import Image\n",[42,108982,108983],{"__ignoreMap":40},[45,108984,108985,108987,108989,108991],{"class":47,"line":48},[45,108986,30818],{"class":93},[45,108988,47344],{"class":257},[45,108990,47347],{"class":93},[45,108992,47350],{"class":51},[10,108994,108995],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[35,108997,108998],{"className":53148,"code":108735,"language":53150,"meta":40,"style":40},[42,108999,109000],{"__ignoreMap":40},[45,109001,109002,109004,109006,109008,109010,109012,109014,109016,109018,109020,109022,109024],{"class":47,"line":48},[45,109003,1117],{"class":51},[45,109005,108566],{"class":51381},[45,109007,15003],{"class":2046},[45,109009,254],{"class":51},[45,109011,108571],{"class":313},[45,109013,101157],{"class":2046},[45,109015,254],{"class":51},[45,109017,108756],{"class":313},[45,109019,108759],{"class":2046},[45,109021,254],{"class":51},[45,109023,108764],{"class":313},[45,109025,101195],{"class":51},[10,109027,109028,109029,109031,109032,109034,109035,109038,109039,109041],{},"定义一个相机。",[42,109030,79891],{}," 是相机名字。",[42,109033,104197],{}," 是相机在世界里的位置。",[42,109036,109037],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[42,109040,104197],{}," 来调视角。",[35,109043,109045],{"className":37,"code":109044,"language":39,"meta":40,"style":40},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[42,109046,109047],{"__ignoreMap":40},[45,109048,109049,109051,109053,109055,109057,109059,109061,109063,109065,109067,109069],{"class":47,"line":48},[45,109050,107621],{"class":51},[45,109052,254],{"class":93},[45,109054,107925],{"class":51},[45,109056,25064],{"class":5299},[45,109058,254],{"class":93},[45,109060,42423],{"class":257},[45,109062,12518],{"class":51},[45,109064,25060],{"class":5299},[45,109066,254],{"class":93},[45,109068,107940],{"class":257},[45,109070,215],{"class":51},[10,109072,109073,109074,101069,109076,109078],{},"创建离屏渲染器。",[42,109075,25064],{},[42,109077,25060],{}," 决定输出图片大小。",[35,109080,109081],{"className":37,"code":101727,"language":39,"meta":40,"style":40},[42,109082,109083,109099],{"__ignoreMap":40},[45,109084,109085,109087,109089,109091,109093,109095,109097],{"class":47,"line":48},[45,109086,3108],{"class":93},[45,109088,101552],{"class":51},[45,109090,26126],{"class":93},[45,109092,32524],{"class":257},[45,109094,209],{"class":51},[45,109096,519],{"class":257},[45,109098,30867],{"class":51},[45,109100,109101],{"class":47,"line":125},[45,109102,101750],{"class":51},[10,109104,109105],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[35,109107,109109],{"className":37,"code":109108,"language":39,"meta":40,"style":40},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[42,109110,109111],{"__ignoreMap":40},[45,109112,109113,109116,109118,109120,109122],{"class":47,"line":48},[45,109114,109115],{"class":51},"renderer.update_scene(data, ",[45,109117,108566],{"class":5299},[45,109119,254],{"class":93},[45,109121,108571],{"class":313},[45,109123,215],{"class":51},[10,109125,109126,109127,109129,109130,109133],{},"告诉 renderer：用当前 ",[42,109128,33482],{}," 的状态更新画面，并使用名为 ",[42,109131,109132],{},"fixed_camera"," 的相机视角。",[35,109135,109136],{"className":37,"code":108031,"language":39,"meta":40,"style":40},[42,109137,109138],{"__ignoreMap":40},[45,109139,109140,109142,109144],{"class":47,"line":48},[45,109141,107631],{"class":51},[45,109143,254],{"class":93},[45,109145,107636],{"class":51},[10,109147,109148,109149,109152],{},"真正渲染出图像。",[42,109150,109151],{},"image"," 是一个 NumPy 数组，不是文件。",[35,109154,109156],{"className":37,"code":109155,"language":39,"meta":40,"style":40},"Image.fromarray(image).save(output_path)\n",[42,109157,109158],{"__ignoreMap":40},[45,109159,109160],{"class":47,"line":48},[45,109161,109155],{"class":51},[10,109163,109164,109165,28468],{},"把数组转换成图片，并保存到 ",[42,109166,109167],{},"render_output.png",[35,109169,109171],{"className":37,"code":109170,"language":39,"meta":40,"style":40},"renderer.close()\n",[42,109172,109173],{"__ignoreMap":40},[45,109174,109175],{"class":47,"line":48},[45,109176,109170],{"class":51},[10,109178,109179],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[30,109181,102367],{"id":102366},[10,109183,109184,109185,109187,109188,28468],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[42,109186,109167],{},"，并输出图像数组形状，例如 ",[42,109189,109190],{},"(480, 640, 3)",[10,109192,109193],{},"如果图片里看不到方块，先检查：",[159,109195,109196,109199,109202],{},[162,109197,109198],{},"方块是否掉到相机视野外。",[162,109200,109201],{},"camera 位置是否合理。",[162,109203,109204,109205,109208],{},"是否在 ",[42,109206,109207],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[30,109210,102399],{"id":102398},[10,109212,109213],{},"运行 viewer:",[35,109215,109217],{"className":23905,"code":109216,"language":23907,"meta":40,"style":40},"python ch5_viewer.py\n",[42,109218,109219],{"__ignoreMap":40},[45,109220,109221,109223],{"class":47,"line":48},[45,109222,39],{"class":2046},[45,109224,108347],{"class":313},[10,109226,109227],{},"运行 renderer:",[35,109229,109231],{"className":23905,"code":109230,"language":23907,"meta":40,"style":40},"python ch5_renderer.py\n",[42,109232,109233],{"__ignoreMap":40},[45,109234,109235,109237],{"class":47,"line":48},[45,109236,39],{"class":2046},[45,109238,108676],{"class":313},[10,109240,109241],{},"如果在服务器上运行:",[35,109243,109245],{"className":23905,"code":109244,"language":23907,"meta":40,"style":40},"MUJOCO_GL=egl python ch5_renderer.py\n",[42,109246,109247],{"__ignoreMap":40},[45,109248,109249,109251,109253,109255,109258],{"class":47,"line":48},[45,109250,107865],{"class":51},[45,109252,254],{"class":93},[45,109254,107855],{"class":313},[45,109256,109257],{"class":2046}," python",[45,109259,108676],{"class":313},[10,109261,107833],{},[35,109263,109265],{"className":23905,"code":109264,"language":23907,"meta":40,"style":40},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[42,109266,109267],{"__ignoreMap":40},[45,109268,109269,109271,109273,109275,109277],{"class":47,"line":48},[45,109270,107865],{"class":51},[45,109272,254],{"class":93},[45,109274,107859],{"class":313},[45,109276,109257],{"class":2046},[45,109278,108676],{"class":313},[10,109280,109281],{},"再做几个练习：",[159,109283,109284,109291,109294,109300],{},[162,109285,109286,109287,109290],{},"把 renderer 分辨率改成 ",[42,109288,109289],{},"height=240, width=320","，观察输出 shape。",[162,109292,109293],{},"把方块颜色改成蓝色，重新保存图片。",[162,109295,109296,109297,109299],{},"把相机 ",[42,109298,104197],{}," 改远一点，观察画面中物体是否变小。",[162,109301,109302,109303,102465,109306,109309],{},"把 viewer 示例中的 ",[42,109304,109305],{},"data.time \u003C 5.0",[42,109307,109308],{},"data.time \u003C 20.0","，观察更长时间。",[30,109311,102504],{"id":102503},[176,109313,109315],{"id":109314},"viewer-窗口打不开","viewer 窗口打不开",[10,109317,109318],{},"安装:",[35,109320,109322],{"className":23905,"code":109321,"language":23907,"meta":40,"style":40},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[42,109323,109324],{"__ignoreMap":40},[45,109325,109326,109328,109330,109332,109334,109336,109338,109340,109342,109344,109346],{"class":47,"line":48},[45,109327,24659],{"class":2046},[45,109329,26398],{"class":313},[45,109331,23917],{"class":313},[45,109333,26483],{"class":257},[45,109335,102557],{"class":313},[45,109337,100885],{"class":313},[45,109339,102562],{"class":313},[45,109341,100898],{"class":313},[45,109343,100904],{"class":313},[45,109345,100895],{"class":313},[45,109347,109348],{"class":313}," libXinerama\n",[176,109350,109352],{"id":109351},"glfwerror",[42,109353,109354],{},"GLFWError",[10,109356,109357],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[176,109359,109361],{"id":109360},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[10,109363,109364,109365,82620,109367,109369],{},"尝试 ",[42,109366,101088],{},[42,109368,101091],{},"。可能存在版本差异。",[176,109371,109372],{"id":109372},"保存图片是黑的",[10,109374,102626],{},[159,109376,109377,109380,109383,109393],{},[162,109378,109379],{},"XML 里是否有 light。",[162,109381,109382],{},"相机是否对着模型。",[162,109384,109385,109386,109389,109390,28468],{},"是否先 ",[42,109387,109388],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[42,109391,109392],{},"renderer.render()",[162,109394,109395],{},"物体是否已经掉出视野。",[176,109397,109398],{"id":109398},"远程服务器没有显示器",[10,109400,109401],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[35,109403,109404],{"className":23905,"code":109244,"language":23907,"meta":40,"style":40},[42,109405,109406],{"__ignoreMap":40},[45,109407,109408,109410,109412,109414,109416],{"class":47,"line":48},[45,109409,107865],{"class":51},[45,109411,254],{"class":93},[45,109413,107855],{"class":313},[45,109415,109257],{"class":2046},[45,109417,108676],{"class":313},[10,109419,109420],{},"如果 EGL 不可用，再尝试：",[35,109422,109423],{"className":23905,"code":109264,"language":23907,"meta":40,"style":40},[42,109424,109425],{"__ignoreMap":40},[45,109426,109427,109429,109431,109433,109435],{"class":47,"line":48},[45,109428,107865],{"class":51},[45,109430,254],{"class":93},[45,109432,107859],{"class":313},[45,109434,109257],{"class":2046},[45,109436,108676],{"class":313},[30,109438,102658],{"id":102657},[10,109440,109441],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[159,109443,109444,109447,109450],{},[162,109445,109446],{},"先用 viewer 看模型和控制是否正常。",[162,109448,109449],{},"再用 renderer 保存图片或构造视觉观测。",[162,109451,109452],{},"最后把状态、动作、图像、奖励组织成训练数据。",[121,109454,109455],{},"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":40,"searchDepth":125,"depth":125,"links":109457},[109458,109459,109460,109465,109470,109471,109472,109479],{"id":100697,"depth":125,"text":100698},{"id":100820,"depth":125,"text":100821},{"id":101095,"depth":125,"text":101096,"children":109461},[109462,109463,109464],{"id":107962,"depth":1262,"text":107963},{"id":107992,"depth":1262,"text":107993},{"id":108027,"depth":1262,"text":108028},{"id":101303,"depth":125,"text":101304,"children":109466},[109467,109468,109469],{"id":101623,"depth":1262,"text":101623},{"id":108772,"depth":1262,"text":108773},{"id":108950,"depth":1262,"text":108951},{"id":102366,"depth":125,"text":102367},{"id":102398,"depth":125,"text":102399},{"id":102503,"depth":125,"text":102504,"children":109473},[109474,109475,109476,109477,109478],{"id":109314,"depth":1262,"text":109315},{"id":109351,"depth":1262,"text":109354},{"id":109360,"depth":1262,"text":109361},{"id":109372,"depth":1262,"text":109372},{"id":109398,"depth":1262,"text":109398},{"id":102657,"depth":125,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107570,"description":40},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109486,"title":109487,"body":109488,"description":40,"extension":131,"meta":111399,"navigation":133,"path":111400,"seo":111401,"stem":111402,"__hash__":111403},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109489,"toc":111375},[109490,109493,109495,109498,109500,109519,109522,109528,109531,109533,109535,109559,109561,109575,109577,109618,109620,109631,109633,109636,109642,109645,109679,109682,109714,109717,109749,109753,109756,109796,109799,109805,109808,109814,109818,109821,109827,109830,109834,109837,109877,109879,109892,109895,109897,110479,110481,110493,110496,110507,110509,110512,110531,110543,110546,110567,110570,110573,110616,110619,110622,110642,110649,110651,110669,110684,110687,110693,110696,110702,110719,110726,110757,110768,110802,110813,110830,110839,110847,110852,110866,110869,110890,110896,110910,110915,110945,110955,110980,110988,111011,111014,111030,111033,111041,111047,111069,111082,111103,111112,111151,111162,111164,111167,111173,111176,111179,111185,111188,111208,111211,111213,111252,111254,111257,111265,111268,111271,111298,111301,111311,111317,111320,111326,111328,111334,111338,111341,111343,111346,111370,111373],[20,109491,109487],{"id":109492},"_6控制任务cartpole",[30,109494,100698],{"id":100697},[10,109496,109497],{},"本章搭建一个最小 Cartpole 控制任务。",[10,109499,104382],{},[159,109501,109502,109505,109507,109510,109513,109516],{},[162,109503,109504],{},"slide joint",[162,109506,106235],{},[162,109508,109509],{},"cart force actuator",[162,109511,109512],{},"状态观测",[162,109514,109515],{},"简单控制循环",[162,109517,109518],{},"reward 设计雏形",[10,109520,109521],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[35,109523,109526],{"className":109524,"code":109525,"language":5270,"meta":40},[5268],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[42,109527,109525],{"__ignoreMap":40},[10,109529,109530],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[30,109532,100821],{"id":100820},[10,109534,100824],{},[35,109536,109537],{"className":23905,"code":104439,"language":23907,"meta":40,"style":40},[42,109538,109539],{"__ignoreMap":40},[45,109540,109541,109543,109545,109547,109549,109551,109553,109555,109557],{"class":47,"line":48},[45,109542,24659],{"class":2046},[45,109544,26398],{"class":313},[45,109546,23917],{"class":313},[45,109548,26483],{"class":257},[45,109550,104454],{"class":313},[45,109552,100849],{"class":313},[45,109554,102552],{"class":313},[45,109556,100865],{"class":313},[45,109558,104463],{"class":313},[10,109560,102870],{},[35,109562,109563],{"className":23905,"code":100970,"language":23907,"meta":40,"style":40},[42,109564,109565],{"__ignoreMap":40},[45,109566,109567,109569,109571,109573],{"class":47,"line":48},[45,109568,23914],{"class":2046},[45,109570,23917],{"class":313},[45,109572,100981],{"class":313},[45,109574,100984],{"class":313},[10,109576,102887],{},[35,109578,109580],{"className":23905,"code":109579,"language":23907,"meta":40,"style":40},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[42,109581,109582,109599,109608],{"__ignoreMap":40},[45,109583,109584,109586,109588,109590,109593,109595,109597],{"class":47,"line":48},[45,109585,30413],{"class":2046},[45,109587,29259],{"class":313},[45,109589,25198],{"class":257},[45,109591,109592],{"class":313}," mujoco-cartpole",[45,109594,101026],{"class":313},[45,109596,101029],{"class":257},[45,109598,101032],{"class":257},[45,109600,109601,109603,109605],{"class":47,"line":125},[45,109602,30413],{"class":2046},[45,109604,101039],{"class":313},[45,109606,109607],{"class":313}," mujoco-cartpole\n",[45,109609,109610,109612,109614,109616],{"class":47,"line":1262},[45,109611,23914],{"class":2046},[45,109613,23917],{"class":313},[45,109615,100981],{"class":313},[45,109617,100984],{"class":313},[10,109619,101055],{},[159,109621,109622,109625,109628],{},[162,109623,109624],{},"本章不依赖 Gymnasium。",[162,109626,109627],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[162,109629,109630],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[30,109632,101096],{"id":101095},[10,109634,109635],{},"Cartpole 的模型结构:",[35,109637,109640],{"className":109638,"code":109639,"language":5270,"meta":40},[5268],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[42,109641,109639],{"__ignoreMap":40},[10,109643,109644],{},"小车通过 slide joint 左右移动:",[35,109646,109648],{"className":53148,"code":109647,"language":53150,"meta":40,"style":40},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[42,109649,109650],{"__ignoreMap":40},[45,109651,109652,109654,109656,109658,109660,109663,109665,109667,109670,109672,109674,109677],{"class":47,"line":48},[45,109653,1117],{"class":51},[45,109655,103007],{"class":51381},[45,109657,15003],{"class":2046},[45,109659,254],{"class":51},[45,109661,109662],{"class":313},"\"cart_x\"",[45,109664,53905],{"class":2046},[45,109666,254],{"class":51},[45,109668,109669],{"class":313},"\"slide\"",[45,109671,106079],{"class":2046},[45,109673,254],{"class":51},[45,109675,109676],{"class":313},"\"1 0 0\"",[45,109678,101195],{"class":51},[10,109680,109681],{},"杆子通过 hinge joint 旋转:",[35,109683,109685],{"className":53148,"code":109684,"language":53150,"meta":40,"style":40},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[42,109686,109687],{"__ignoreMap":40},[45,109688,109689,109691,109693,109695,109697,109700,109702,109704,109706,109708,109710,109712],{"class":47,"line":48},[45,109690,1117],{"class":51},[45,109692,103007],{"class":51381},[45,109694,15003],{"class":2046},[45,109696,254],{"class":51},[45,109698,109699],{"class":313},"\"pole_hinge\"",[45,109701,53905],{"class":2046},[45,109703,254],{"class":51},[45,109705,106070],{"class":313},[45,109707,106079],{"class":2046},[45,109709,254],{"class":51},[45,109711,106084],{"class":313},[45,109713,101195],{"class":51},[10,109715,109716],{},"控制力作用在小车 slide joint 上:",[35,109718,109720],{"className":53148,"code":109719,"language":53150,"meta":40,"style":40},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[42,109721,109722],{"__ignoreMap":40},[45,109723,109724,109726,109728,109730,109732,109735,109737,109739,109741,109743,109745,109747],{"class":47,"line":48},[45,109725,1117],{"class":51},[45,109727,106125],{"class":51381},[45,109729,15003],{"class":2046},[45,109731,254],{"class":51},[45,109733,109734],{"class":313},"\"cart_motor\"",[45,109736,106135],{"class":2046},[45,109738,254],{"class":51},[45,109740,109662],{"class":313},[45,109742,106142],{"class":2046},[45,109744,254],{"class":51},[45,109746,54397],{"class":313},[45,109748,101195],{"class":51},[176,109750,109752],{"id":109751},"cartpole-的状态是什么","Cartpole 的状态是什么",[10,109754,109755],{},"这个简化模型有两个关节：",[346,109757,109758,109769],{},[349,109759,109760],{},[352,109761,109762,109764,109766],{},[355,109763,102810],{"align":23819},[355,109765,23820],{"align":23819},[355,109767,109768],{"align":23819},"对应状态",[393,109770,109771,109784],{},[352,109772,109773,109778,109781],{},[398,109774,109775],{"align":23819},[42,109776,109777],{},"cart_x",[398,109779,109780],{"align":23819},"slide",[398,109782,109783],{"align":23819},"小车 x 位置",[352,109785,109786,109791,109793],{},[398,109787,109788],{"align":23819},[42,109789,109790],{},"pole_hinge",[398,109792,105891],{"align":23819},[398,109794,109795],{"align":23819},"杆子角度",[10,109797,109798],{},"所以：",[35,109800,109803],{"className":109801,"code":109802,"language":5270,"meta":40},[5268],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[42,109804,109802],{"__ignoreMap":40},[10,109806,109807],{},"把它们拼起来就是观测：",[35,109809,109812],{"className":109810,"code":109811,"language":5270,"meta":40},[5268],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[42,109813,109811],{"__ignoreMap":40},[176,109815,109817],{"id":109816},"action-是什么","action 是什么",[10,109819,109820],{},"本章只有一个 actuator：",[35,109822,109825],{"className":109823,"code":109824,"language":5270,"meta":40},[5268],"data.ctrl[0] = action\n",[42,109826,109824],{"__ignoreMap":40},[10,109828,109829],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[176,109831,109833],{"id":109832},"reward-是什么","reward 是什么",[10,109835,109836],{},"奖励函数：",[35,109838,109840],{"className":37,"code":109839,"language":39,"meta":40,"style":40},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[42,109841,109842],{"__ignoreMap":40},[45,109843,109844,109846,109849,109851,109853,109855,109858,109860,109863,109865,109867,109869,109872,109874],{"class":47,"line":48},[45,109845,17129],{"class":93},[45,109847,109848],{"class":257}," float",[45,109850,209],{"class":51},[45,109852,102454],{"class":257},[45,109854,52352],{"class":93},[45,109856,109857],{"class":257}," 0.1",[45,109859,6601],{"class":93},[45,109861,109862],{"class":51}," cart_x ",[45,109864,663],{"class":93},[45,109866,109862],{"class":51},[45,109868,94],{"class":93},[45,109870,109871],{"class":51}," pole_angle ",[45,109873,663],{"class":93},[45,109875,109876],{"class":51}," pole_angle)\n",[10,109878,106277],{},[159,109880,109881,109886,109889],{},[162,109882,109883,109884,28468],{},"基础奖励是 ",[42,109885,102454],{},[162,109887,109888],{},"小车离中心越远，扣分越多。",[162,109890,109891],{},"杆子角度越大，扣分越多。",[10,109893,109894],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[30,109896,101304],{"id":101303},[35,109898,109900],{"className":37,"code":109899,"language":39,"meta":40,"style":40},"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",[42,109901,109902,109908,109918,109922,109926,109934,109939,109943,109947,109951,109956,109960,109965,109970,109975,109979,109984,109989,109994,109998,110002,110006,110010,110014,110019,110023,110027,110031,110035,110039,110049,110056,110060,110064,110078,110092,110105,110135,110139,110143,110155,110167,110175,110179,110192,110196,110200,110209,110213,110229,110239,110252,110265,110269,110292,110310,110314,110326,110330,110334,110344,110354,110358,110374,110415,110419,110439,110455,110459,110463,110475],{"__ignoreMap":40},[45,109903,109904,109906],{"class":47,"line":48},[45,109905,30473],{"class":93},[45,109907,101352],{"class":51},[45,109909,109910,109912,109914,109916],{"class":47,"line":125},[45,109911,30473],{"class":93},[45,109913,31461],{"class":51},[45,109915,31464],{"class":93},[45,109917,31467],{"class":51},[45,109919,109920],{"class":47,"line":1262},[45,109921,2483],{"emptyLinePlaceholder":133},[45,109923,109924],{"class":47,"line":1277},[45,109925,2483],{"emptyLinePlaceholder":133},[45,109927,109928,109930,109932],{"class":47,"line":1283},[45,109929,101365],{"class":257},[45,109931,13647],{"class":93},[45,109933,101370],{"class":313},[45,109935,109936],{"class":47,"line":1297},[45,109937,109938],{"class":313},"\u003Cmujoco model=\"cartpole\">\n",[45,109940,109941],{"class":47,"line":1303},[45,109942,101380],{"class":313},[45,109944,109945],{"class":47,"line":1394},[45,109946,2483],{"emptyLinePlaceholder":133},[45,109948,109949],{"class":47,"line":1400},[45,109950,101389],{"class":313},[45,109952,109953],{"class":47,"line":1412},[45,109954,109955],{"class":313},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[45,109957,109958],{"class":47,"line":1695},[45,109959,2483],{"emptyLinePlaceholder":133},[45,109961,109962],{"class":47,"line":1700},[45,109963,109964],{"class":313},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[45,109966,109967],{"class":47,"line":1706},[45,109968,109969],{"class":313},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[45,109971,109972],{"class":47,"line":1711},[45,109973,109974],{"class":313},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[45,109976,109977],{"class":47,"line":1725},[45,109978,2483],{"emptyLinePlaceholder":133},[45,109980,109981],{"class":47,"line":1730},[45,109982,109983],{"class":313},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[45,109985,109986],{"class":47,"line":1736},[45,109987,109988],{"class":313},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[45,109990,109991],{"class":47,"line":1757},[45,109992,109993],{"class":313},"        \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",[45,109995,109996],{"class":47,"line":1762},[45,109997,106489],{"class":313},[45,109999,110000],{"class":47,"line":1776},[45,110001,101418],{"class":313},[45,110003,110004],{"class":47,"line":1781},[45,110005,101423],{"class":313},[45,110007,110008],{"class":47,"line":1810},[45,110009,2483],{"emptyLinePlaceholder":133},[45,110011,110012],{"class":47,"line":1815},[45,110013,106506],{"class":313},[45,110015,110016],{"class":47,"line":1832},[45,110017,110018],{"class":313},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[45,110020,110021],{"class":47,"line":1837},[45,110022,106516],{"class":313},[45,110024,110025],{"class":47,"line":1842},[45,110026,101428],{"class":313},[45,110028,110029],{"class":47,"line":1847},[45,110030,95749],{"class":313},[45,110032,110033],{"class":47,"line":1861},[45,110034,2483],{"emptyLinePlaceholder":133},[45,110036,110037],{"class":47,"line":1866},[45,110038,2483],{"emptyLinePlaceholder":133},[45,110040,110041,110043,110046],{"class":47,"line":2660},[45,110042,32028],{"class":93},[45,110044,110045],{"class":2046}," get_observation",[45,110047,110048],{"class":51},"(data: mujoco.MjData) -> np.ndarray:\n",[45,110050,110051,110053],{"class":47,"line":2674},[45,110052,4173],{"class":93},[45,110054,110055],{"class":51}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[45,110057,110058],{"class":47,"line":2682},[45,110059,2483],{"emptyLinePlaceholder":133},[45,110061,110062],{"class":47,"line":2687},[45,110063,2483],{"emptyLinePlaceholder":133},[45,110065,110066,110068,110071,110074,110076],{"class":47,"line":2693},[45,110067,32028],{"class":93},[45,110069,110070],{"class":2046}," compute_reward",[45,110072,110073],{"class":51},"(obs: np.ndarray) -> ",[45,110075,248],{"class":257},[45,110077,3822],{"class":51},[45,110079,110080,110083,110085,110088,110090],{"class":47,"line":2699},[45,110081,110082],{"class":51},"    cart_x ",[45,110084,254],{"class":93},[45,110086,110087],{"class":51}," obs[",[45,110089,400],{"class":257},[45,110091,33327],{"class":51},[45,110093,110094,110097,110099,110101,110103],{"class":47,"line":2704},[45,110095,110096],{"class":51},"    pole_angle ",[45,110098,254],{"class":93},[45,110100,110087],{"class":51},[45,110102,426],{"class":257},[45,110104,33327],{"class":51},[45,110106,110107,110109,110111,110113,110115,110117,110119,110121,110123,110125,110127,110129,110131,110133],{"class":47,"line":8031},[45,110108,4173],{"class":93},[45,110110,109848],{"class":257},[45,110112,209],{"class":51},[45,110114,102454],{"class":257},[45,110116,52352],{"class":93},[45,110118,109857],{"class":257},[45,110120,6601],{"class":93},[45,110122,109862],{"class":51},[45,110124,663],{"class":93},[45,110126,109862],{"class":51},[45,110128,94],{"class":93},[45,110130,109871],{"class":51},[45,110132,663],{"class":93},[45,110134,109876],{"class":51},[45,110136,110137],{"class":47,"line":8055},[45,110138,2483],{"emptyLinePlaceholder":133},[45,110140,110141],{"class":47,"line":8060},[45,110142,2483],{"emptyLinePlaceholder":133},[45,110144,110145,110147,110149,110151,110153],{"class":47,"line":8066},[45,110146,32028],{"class":93},[45,110148,2056],{"class":2046},[45,110150,101449],{"class":51},[45,110152,95737],{"class":257},[45,110154,3822],{"class":51},[45,110156,110157,110159,110161,110163,110165],{"class":47,"line":8093},[45,110158,101458],{"class":51},[45,110160,254],{"class":93},[45,110162,101463],{"class":51},[45,110164,101365],{"class":257},[45,110166,215],{"class":51},[45,110168,110169,110171,110173],{"class":47,"line":8098},[45,110170,101472],{"class":51},[45,110172,254],{"class":93},[45,110174,101477],{"class":51},[45,110176,110177],{"class":47,"line":8104},[45,110178,2483],{"emptyLinePlaceholder":133},[45,110180,110181,110183,110185,110187,110189],{"class":47,"line":8116},[45,110182,105120],{"class":51},[45,110184,426],{"class":257},[45,110186,4526],{"class":51},[45,110188,254],{"class":93},[45,110190,110191],{"class":257}," 0.1\n",[45,110193,110194],{"class":47,"line":8128},[45,110195,105133],{"class":51},[45,110197,110198],{"class":47,"line":8140},[45,110199,2483],{"emptyLinePlaceholder":133},[45,110201,110202,110205,110207],{"class":47,"line":9799},[45,110203,110204],{"class":51},"    total_reward ",[45,110206,254],{"class":93},[45,110208,104812],{"class":257},[45,110210,110211],{"class":47,"line":9824},[45,110212,2483],{"emptyLinePlaceholder":133},[45,110214,110215,110217,110219,110221,110223,110225,110227],{"class":47,"line":9847},[45,110216,3284],{"class":93},[45,110218,31697],{"class":51},[45,110220,26126],{"class":93},[45,110222,32524],{"class":257},[45,110224,209],{"class":51},[45,110226,6493],{"class":257},[45,110228,30867],{"class":51},[45,110230,110231,110234,110236],{"class":47,"line":9871},[45,110232,110233],{"class":51},"        obs ",[45,110235,254],{"class":93},[45,110237,110238],{"class":51}," get_observation(data)\n",[45,110240,110241,110244,110246,110248,110250],{"class":47,"line":9876},[45,110242,110243],{"class":51},"        pole_angle ",[45,110245,254],{"class":93},[45,110247,110087],{"class":51},[45,110249,426],{"class":257},[45,110251,33327],{"class":51},[45,110253,110254,110257,110259,110261,110263],{"class":47,"line":9881},[45,110255,110256],{"class":51},"        pole_angular_velocity ",[45,110258,254],{"class":93},[45,110260,110087],{"class":51},[45,110262,280],{"class":257},[45,110264,33327],{"class":51},[45,110266,110267],{"class":47,"line":9886},[45,110268,2483],{"emptyLinePlaceholder":133},[45,110270,110271,110274,110276,110279,110281,110283,110285,110287,110289],{"class":47,"line":9895},[45,110272,110273],{"class":51},"        action ",[45,110275,254],{"class":93},[45,110277,110278],{"class":257}," 2.0",[45,110280,6601],{"class":93},[45,110282,109871],{"class":51},[45,110284,689],{"class":93},[45,110286,61948],{"class":257},[45,110288,6601],{"class":93},[45,110290,110291],{"class":51}," pole_angular_velocity\n",[45,110293,110294,110296,110298,110300,110302,110304,110306,110308],{"class":47,"line":9900},[45,110295,110273],{"class":51},[45,110297,254],{"class":93},[45,110299,107498],{"class":51},[45,110301,94],{"class":93},[45,110303,102454],{"class":257},[45,110305,12518],{"class":51},[45,110307,102454],{"class":257},[45,110309,215],{"class":51},[45,110311,110312],{"class":47,"line":9906},[45,110313,2483],{"emptyLinePlaceholder":133},[45,110315,110316,110318,110320,110322,110324],{"class":47,"line":9927},[45,110317,106668],{"class":51},[45,110319,400],{"class":257},[45,110321,4526],{"class":51},[45,110323,254],{"class":93},[45,110325,107521],{"class":51},[45,110327,110328],{"class":47,"line":9933},[45,110329,101567],{"class":51},[45,110331,110332],{"class":47,"line":9947},[45,110333,2483],{"emptyLinePlaceholder":133},[45,110335,110336,110339,110341],{"class":47,"line":9953},[45,110337,110338],{"class":51},"        reward ",[45,110340,254],{"class":93},[45,110342,110343],{"class":51}," compute_reward(get_observation(data))\n",[45,110345,110346,110349,110351],{"class":47,"line":9980},[45,110347,110348],{"class":51},"        total_reward ",[45,110350,9560],{"class":93},[45,110352,110353],{"class":51}," reward\n",[45,110355,110356],{"class":47,"line":9989},[45,110357,2483],{"emptyLinePlaceholder":133},[45,110359,110360,110362,110364,110366,110368,110370,110372],{"class":47,"line":9995},[45,110361,2580],{"class":93},[45,110363,31697],{"class":51},[45,110365,536],{"class":93},[45,110367,5837],{"class":257},[45,110369,101610],{"class":93},[45,110371,4176],{"class":257},[45,110373,3822],{"class":51},[45,110375,110376,110378,110380,110383,110386,110389,110392,110394,110397,110400,110402,110404,110406,110408,110411,110413],{"class":47,"line":10003},[45,110377,34731],{"class":257},[45,110379,209],{"class":51},[45,110381,110382],{"class":313},"\"step:\"",[45,110384,110385],{"class":51},", step, ",[45,110387,110388],{"class":313},"\"obs:\"",[45,110390,110391],{"class":51},", np.round(obs, ",[45,110393,280],{"class":257},[45,110395,110396],{"class":51},"), ",[45,110398,110399],{"class":313},"\"action:\"",[45,110401,12518],{"class":51},[45,110403,32099],{"class":257},[45,110405,209],{"class":51},[45,110407,248],{"class":257},[45,110409,110410],{"class":51},"(action), ",[45,110412,280],{"class":257},[45,110414,30578],{"class":51},[45,110416,110417],{"class":47,"line":10008},[45,110418,2483],{"emptyLinePlaceholder":133},[45,110420,110421,110423,110425,110428,110430,110432,110435,110437],{"class":47,"line":16687},[45,110422,31380],{"class":257},[45,110424,209],{"class":51},[45,110426,110427],{"class":313},"\"total_reward:\"",[45,110429,12518],{"class":51},[45,110431,32099],{"class":257},[45,110433,110434],{"class":51},"(total_reward, ",[45,110436,280],{"class":257},[45,110438,30578],{"class":51},[45,110440,110441,110443,110445,110448,110451,110453],{"class":47,"line":16693},[45,110442,31380],{"class":257},[45,110444,209],{"class":51},[45,110446,110447],{"class":313},"\"final obs:\"",[45,110449,110450],{"class":51},", np.round(get_observation(data), ",[45,110452,280],{"class":257},[45,110454,30578],{"class":51},[45,110456,110457],{"class":47,"line":16716},[45,110458,2483],{"emptyLinePlaceholder":133},[45,110460,110461],{"class":47,"line":16722},[45,110462,2483],{"emptyLinePlaceholder":133},[45,110464,110465,110467,110469,110471,110473],{"class":47,"line":16745},[45,110466,1614],{"class":93},[45,110468,31301],{"class":257},[45,110470,101610],{"class":93},[45,110472,101613],{"class":313},[45,110474,3822],{"class":51},[45,110476,110477],{"class":47,"line":16759},[45,110478,101620],{"class":51},[10,110480,103621],{},[35,110482,110484],{"className":23905,"code":110483,"language":23907,"meta":40,"style":40},"touch ch6_cartpole.py\n",[42,110485,110486],{"__ignoreMap":40},[45,110487,110488,110490],{"class":47,"line":48},[45,110489,101334],{"class":2046},[45,110491,110492],{"class":313}," ch6_cartpole.py\n",[10,110494,110495],{},"运行：",[35,110497,110499],{"className":23905,"code":110498,"language":23907,"meta":40,"style":40},"python ch6_cartpole.py\n",[42,110500,110501],{"__ignoreMap":40},[45,110502,110503,110505],{"class":47,"line":48},[45,110504,39],{"class":2046},[45,110506,110492],{"class":313},[176,110508,101623],{"id":101623},[10,110510,110511],{},"构造观测：",[35,110513,110515],{"className":37,"code":110514,"language":39,"meta":40,"style":40},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[42,110516,110517,110525],{"__ignoreMap":40},[45,110518,110519,110521,110523],{"class":47,"line":48},[45,110520,32028],{"class":93},[45,110522,110045],{"class":2046},[45,110524,110048],{"class":51},[45,110526,110527,110529],{"class":47,"line":125},[45,110528,4173],{"class":93},[45,110530,110055],{"class":51},[10,110532,110533,110536,110537,110539,110540,110542],{},[42,110534,110535],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[42,110538,104081],{}," 2 维，",[42,110541,104411],{}," 2 维，所以 obs 是 4 维。",[10,110544,110545],{},"设置初始角度：",[35,110547,110549],{"className":37,"code":110548,"language":39,"meta":40,"style":40},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[42,110550,110551,110563],{"__ignoreMap":40},[45,110552,110553,110555,110557,110559,110561],{"class":47,"line":48},[45,110554,104750],{"class":51},[45,110556,426],{"class":257},[45,110558,4526],{"class":51},[45,110560,254],{"class":93},[45,110562,110191],{"class":257},[45,110564,110565],{"class":47,"line":125},[45,110566,104594],{"class":51},[10,110568,110569],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[10,110571,110572],{},"简单反馈控制：",[35,110574,110576],{"className":37,"code":110575,"language":39,"meta":40,"style":40},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[42,110577,110578,110598],{"__ignoreMap":40},[45,110579,110580,110582,110584,110586,110588,110590,110592,110594,110596],{"class":47,"line":48},[45,110581,107493],{"class":51},[45,110583,254],{"class":93},[45,110585,110278],{"class":257},[45,110587,6601],{"class":93},[45,110589,109871],{"class":51},[45,110591,689],{"class":93},[45,110593,61948],{"class":257},[45,110595,6601],{"class":93},[45,110597,110291],{"class":51},[45,110599,110600,110602,110604,110606,110608,110610,110612,110614],{"class":47,"line":125},[45,110601,107493],{"class":51},[45,110603,254],{"class":93},[45,110605,107498],{"class":51},[45,110607,94],{"class":93},[45,110609,102454],{"class":257},[45,110611,12518],{"class":51},[45,110613,102454],{"class":257},[45,110615,215],{"class":51},[10,110617,110618],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[10,110620,110621],{},"限制动作：",[35,110623,110625],{"className":37,"code":110624,"language":39,"meta":40,"style":40},"np.clip(action, -1.0, 1.0)\n",[42,110626,110627],{"__ignoreMap":40},[45,110628,110629,110632,110634,110636,110638,110640],{"class":47,"line":48},[45,110630,110631],{"class":51},"np.clip(action, ",[45,110633,94],{"class":93},[45,110635,102454],{"class":257},[45,110637,12518],{"class":51},[45,110639,102454],{"class":257},[45,110641,215],{"class":51},[10,110643,110644,110645,110648],{},"因为 XML 里 ",[42,110646,110647],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[176,110650,101759],{"id":101759},[35,110652,110653],{"className":37,"code":110514,"language":39,"meta":40,"style":40},[42,110654,110655,110663],{"__ignoreMap":40},[45,110656,110657,110659,110661],{"class":47,"line":48},[45,110658,32028],{"class":93},[45,110660,110045],{"class":2046},[45,110662,110048],{"class":51},[45,110664,110665,110667],{"class":47,"line":125},[45,110666,4173],{"class":93},[45,110668,110055],{"class":51},[10,110670,110671,110672,110675,110676,110679,110680,110683],{},"这段定义了一个函数，用来获取当前观测。",[42,110673,110674],{},"data.qpos.copy()"," 是位置数组副本，",[42,110677,110678],{},"data.qvel.copy()"," 是速度数组副本。",[42,110681,110682],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[10,110685,110686],{},"在本章模型里：",[35,110688,110691],{"className":110689,"code":110690,"language":5270,"meta":40},[5268],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[42,110692,110690],{"__ignoreMap":40},[10,110694,110695],{},"所以返回的 obs 是：",[35,110697,110700],{"className":110698,"code":110699,"language":5270,"meta":40},[5268],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[42,110701,110699],{"__ignoreMap":40},[35,110703,110705],{"className":37,"code":110704,"language":39,"meta":40,"style":40},"def compute_reward(obs: np.ndarray) -> float:\n",[42,110706,110707],{"__ignoreMap":40},[45,110708,110709,110711,110713,110715,110717],{"class":47,"line":48},[45,110710,32028],{"class":93},[45,110712,110070],{"class":2046},[45,110714,110073],{"class":51},[45,110716,248],{"class":257},[45,110718,3822],{"class":51},[10,110720,110721,110722,110725],{},"这行定义奖励函数。输入是观测 ",[42,110723,110724],{},"obs","，输出是一个浮点数奖励。",[35,110727,110729],{"className":37,"code":110728,"language":39,"meta":40,"style":40},"cart_x = obs[0]\npole_angle = obs[1]\n",[42,110730,110731,110744],{"__ignoreMap":40},[45,110732,110733,110736,110738,110740,110742],{"class":47,"line":48},[45,110734,110735],{"class":51},"cart_x ",[45,110737,254],{"class":93},[45,110739,110087],{"class":51},[45,110741,400],{"class":257},[45,110743,33327],{"class":51},[45,110745,110746,110749,110751,110753,110755],{"class":47,"line":125},[45,110747,110748],{"class":51},"pole_angle ",[45,110750,254],{"class":93},[45,110752,110087],{"class":51},[45,110754,426],{"class":257},[45,110756,33327],{"class":51},[10,110758,110759,110760,110763,110764,110767],{},"数组索引从 0 开始。",[42,110761,110762],{},"obs[0]"," 是第一个元素，也就是小车位置。",[42,110765,110766],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[35,110769,110770],{"className":37,"code":109839,"language":39,"meta":40,"style":40},[42,110771,110772],{"__ignoreMap":40},[45,110773,110774,110776,110778,110780,110782,110784,110786,110788,110790,110792,110794,110796,110798,110800],{"class":47,"line":48},[45,110775,17129],{"class":93},[45,110777,109848],{"class":257},[45,110779,209],{"class":51},[45,110781,102454],{"class":257},[45,110783,52352],{"class":93},[45,110785,109857],{"class":257},[45,110787,6601],{"class":93},[45,110789,109862],{"class":51},[45,110791,663],{"class":93},[45,110793,109862],{"class":51},[45,110795,94],{"class":93},[45,110797,109871],{"class":51},[45,110799,663],{"class":93},[45,110801,109876],{"class":51},[10,110803,110804,110805,110808,110809,110812],{},"这行计算奖励。",[42,110806,110807],{},"cart_x * cart_x"," 是小车位置的平方，",[42,110810,110811],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[35,110814,110816],{"className":37,"code":110815,"language":39,"meta":40,"style":40},"data.qpos[1] = 0.1\n",[42,110817,110818],{"__ignoreMap":40},[45,110819,110820,110822,110824,110826,110828],{"class":47,"line":48},[45,110821,104750],{"class":51},[45,110823,426],{"class":257},[45,110825,4526],{"class":51},[45,110827,254],{"class":93},[45,110829,110191],{"class":257},[10,110831,110832,110833,110835,110836,110838],{},"手动设置杆子的初始角度。因为 ",[42,110834,105507],{}," 是小车位置，",[42,110837,105510],{}," 是杆子角度，所以这里改的是杆子。",[35,110840,110841],{"className":37,"code":104594,"language":39,"meta":40,"style":40},[42,110842,110843],{"__ignoreMap":40},[45,110844,110845],{"class":47,"line":48},[45,110846,104594],{"class":51},[10,110848,105553,110849,110851],{},[42,110850,104081],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[35,110853,110855],{"className":37,"code":110854,"language":39,"meta":40,"style":40},"total_reward = 0.0\n",[42,110856,110857],{"__ignoreMap":40},[45,110858,110859,110862,110864],{"class":47,"line":48},[45,110860,110861],{"class":51},"total_reward ",[45,110863,254],{"class":93},[45,110865,104812],{"class":257},[10,110867,110868],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[35,110870,110872],{"className":37,"code":110871,"language":39,"meta":40,"style":40},"for step in range(1000):\n",[42,110873,110874],{"__ignoreMap":40},[45,110875,110876,110878,110880,110882,110884,110886,110888],{"class":47,"line":48},[45,110877,3108],{"class":93},[45,110879,31697],{"class":51},[45,110881,26126],{"class":93},[45,110883,32524],{"class":257},[45,110885,209],{"class":51},[45,110887,6493],{"class":257},[45,110889,30867],{"class":51},[10,110891,110892,110893,110895],{},"循环 1000 步。",[42,110894,107185],{}," 是当前步数，从 0 到 999。",[35,110897,110899],{"className":37,"code":110898,"language":39,"meta":40,"style":40},"obs = get_observation(data)\n",[42,110900,110901],{"__ignoreMap":40},[45,110902,110903,110906,110908],{"class":47,"line":48},[45,110904,110905],{"class":51},"obs ",[45,110907,254],{"class":93},[45,110909,110238],{"class":51},[10,110911,110912,110913,28468],{},"读取当前状态，保存到 ",[42,110914,110724],{},[35,110916,110918],{"className":37,"code":110917,"language":39,"meta":40,"style":40},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[42,110919,110920,110932],{"__ignoreMap":40},[45,110921,110922,110924,110926,110928,110930],{"class":47,"line":48},[45,110923,110748],{"class":51},[45,110925,254],{"class":93},[45,110927,110087],{"class":51},[45,110929,426],{"class":257},[45,110931,33327],{"class":51},[45,110933,110934,110937,110939,110941,110943],{"class":47,"line":125},[45,110935,110936],{"class":51},"pole_angular_velocity ",[45,110938,254],{"class":93},[45,110940,110087],{"class":51},[45,110942,280],{"class":257},[45,110944,33327],{"class":51},[10,110946,110947,110948,110951,110952,28468],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[42,110949,110950],{},"obs[3]","？因为 obs 的顺序是 ",[42,110953,110954],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[35,110956,110958],{"className":37,"code":110957,"language":39,"meta":40,"style":40},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[42,110959,110960],{"__ignoreMap":40},[45,110961,110962,110964,110966,110968,110970,110972,110974,110976,110978],{"class":47,"line":48},[45,110963,107493],{"class":51},[45,110965,254],{"class":93},[45,110967,110278],{"class":257},[45,110969,6601],{"class":93},[45,110971,109871],{"class":51},[45,110973,689],{"class":93},[45,110975,61948],{"class":257},[45,110977,6601],{"class":93},[45,110979,110291],{"class":51},[10,110981,110982,110983,101069,110985,110987],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[42,110984,105311],{},[42,110986,35410],{}," 是人为设置的系数，不是固定公式。",[35,110989,110991],{"className":37,"code":110990,"language":39,"meta":40,"style":40},"action = np.clip(action, -1.0, 1.0)\n",[42,110992,110993],{"__ignoreMap":40},[45,110994,110995,110997,110999,111001,111003,111005,111007,111009],{"class":47,"line":48},[45,110996,107493],{"class":51},[45,110998,254],{"class":93},[45,111000,107498],{"class":51},[45,111002,94],{"class":93},[45,111004,102454],{"class":257},[45,111006,12518],{"class":51},[45,111008,102454],{"class":257},[45,111010,215],{"class":51},[10,111012,111013],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[35,111015,111016],{"className":37,"code":109824,"language":39,"meta":40,"style":40},[42,111017,111018],{"__ignoreMap":40},[45,111019,111020,111022,111024,111026,111028],{"class":47,"line":48},[45,111021,105922],{"class":51},[45,111023,400],{"class":257},[45,111025,4526],{"class":51},[45,111027,254],{"class":93},[45,111029,107521],{"class":51},[10,111031,111032],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[35,111034,111035],{"className":37,"code":104556,"language":39,"meta":40,"style":40},[42,111036,111037],{"__ignoreMap":40},[45,111038,111039],{"class":47,"line":48},[45,111040,104556],{"class":51},[10,111042,111043,111044,111046],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[42,111045,106177],{}," 计算小车和杆子的下一刻状态。",[35,111048,111050],{"className":37,"code":111049,"language":39,"meta":40,"style":40},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[42,111051,111052,111061],{"__ignoreMap":40},[45,111053,111054,111057,111059],{"class":47,"line":48},[45,111055,111056],{"class":51},"reward ",[45,111058,254],{"class":93},[45,111060,110343],{"class":51},[45,111062,111063,111065,111067],{"class":47,"line":125},[45,111064,110861],{"class":51},[45,111066,9560],{"class":93},[45,111068,110353],{"class":51},[10,111070,111071,111072,111074,111075,111078,111079,28468],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[42,111073,9560],{}," 是简写，",[42,111076,111077],{},"total_reward += reward"," 等价于 ",[42,111080,111081],{},"total_reward = total_reward + reward",[35,111083,111085],{"className":37,"code":111084,"language":39,"meta":40,"style":40},"if step % 100 == 0:\n",[42,111086,111087],{"__ignoreMap":40},[45,111088,111089,111091,111093,111095,111097,111099,111101],{"class":47,"line":48},[45,111090,1614],{"class":93},[45,111092,31697],{"class":51},[45,111094,536],{"class":93},[45,111096,5837],{"class":257},[45,111098,101610],{"class":93},[45,111100,4176],{"class":257},[45,111102,3822],{"class":51},[10,111104,111105,111107,111108,111111],{},[42,111106,536],{}," 是取余数。",[42,111109,111110],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[35,111113,111115],{"className":37,"code":111114,"language":39,"meta":40,"style":40},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[42,111116,111117],{"__ignoreMap":40},[45,111118,111119,111121,111123,111125,111127,111129,111131,111133,111135,111137,111139,111141,111143,111145,111147,111149],{"class":47,"line":48},[45,111120,30496],{"class":257},[45,111122,209],{"class":51},[45,111124,110382],{"class":313},[45,111126,110385],{"class":51},[45,111128,110388],{"class":313},[45,111130,110391],{"class":51},[45,111132,280],{"class":257},[45,111134,110396],{"class":51},[45,111136,110399],{"class":313},[45,111138,12518],{"class":51},[45,111140,32099],{"class":257},[45,111142,209],{"class":51},[45,111144,248],{"class":257},[45,111146,110410],{"class":51},[45,111148,280],{"class":257},[45,111150,30578],{"class":51},[10,111152,111153,111154,111157,111158,111161],{},"打印当前步数、观测和动作。",[42,111155,111156],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[42,111159,111160],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[30,111163,102367],{"id":102366},[10,111165,111166],{},"观测向量:",[35,111168,111171],{"className":111169,"code":111170,"language":5270,"meta":40},[5268],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[42,111172,111170],{"__ignoreMap":40},[10,111174,111175],{},"控制器是教学用的简单线性反馈，不保证最优。",[10,111177,111178],{},"每隔 100 步会打印一次：",[35,111180,111183],{"className":111181,"code":111182,"language":5270,"meta":40},[5268],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[42,111184,111182],{"__ignoreMap":40},[10,111186,111187],{},"重点观察：",[159,111189,111190,111196,111201],{},[162,111191,111192,111195],{},[42,111193,111194],{},"pole_angle"," 是否越来越大。",[162,111197,111198,111200],{},[42,111199,109777],{}," 是否跑得太远。",[162,111202,111203,111204,82620,111206,28468],{},"action 是否经常被 clip 到 ",[42,111205,103966],{},[42,111207,426],{},[10,111209,111210],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[30,111212,102399],{"id":102398},[159,111214,111215,111221,111224,111230,111240,111246,111249],{},[162,111216,111217,111218,28468],{},"把初始角度改为 ",[42,111219,111220],{},"data.qpos[1] = 0.3",[162,111222,111223],{},"重新运行，观察控制是否变差。",[162,111225,111226,111227,111229],{},"把 actuator ",[42,111228,107118],{}," 改小。",[162,111231,111232,111233,111236,111237,28468],{},"打印 ",[42,111234,111235],{},"model.nq, model.nv, model.nu","，应为 ",[42,111238,111239],{},"2 2 1",[162,111241,111242,111243,111245],{},"把 reward 里的 ",[42,111244,110811],{}," 系数改大，观察总奖励变化。",[162,111247,111248],{},"把控制器改成反号，观察杆子是否更容易倒。",[162,111250,111251],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[30,111253,102504],{"id":102503},[176,111255,111256],{"id":111256},"杆子方向和预期不一致",[10,111258,102447,111259,111261,111262,111264],{},[42,111260,106290],{}," 和 capsule 的 ",[42,111263,103227],{},"，必要时用 viewer 可视化确认。",[176,111266,111267],{"id":111267},"控制器越控越倒",[10,111269,111270],{},"说明反馈符号可能反了，尝试:",[35,111272,111274],{"className":37,"code":111273,"language":39,"meta":40,"style":40},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[42,111275,111276],{"__ignoreMap":40},[45,111277,111278,111280,111282,111284,111286,111288,111290,111292,111294,111296],{"class":47,"line":48},[45,111279,107493],{"class":51},[45,111281,254],{"class":93},[45,111283,52352],{"class":93},[45,111285,105311],{"class":257},[45,111287,6601],{"class":93},[45,111289,109871],{"class":51},[45,111291,94],{"class":93},[45,111293,61948],{"class":257},[45,111295,6601],{"class":93},[45,111297,110291],{"class":51},[176,111299,111300],{"id":111300},"小车飞走",[10,111302,111303,111304,111306,111307,111310],{},"降低 ",[42,111305,107118],{}," 或缩小 ",[42,111308,111309],{},"action"," 的 clip 范围。",[176,111312,111314,111316],{"id":111313},"obs3-为什么是杆子角速度",[42,111315,110950],{}," 为什么是杆子角速度",[10,111318,111319],{},"因为这个模型里：",[35,111321,111324],{"className":111322,"code":111323,"language":5270,"meta":40},[5268],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[42,111325,111323],{"__ignoreMap":40},[10,111327,109798],{},[35,111329,111332],{"className":111330,"code":111331,"language":5270,"meta":40},[5268],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[42,111333,111331],{"__ignoreMap":40},[176,111335,111337],{"id":111336},"reward-变成负数是否错误","reward 变成负数是否错误",[10,111339,111340],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[30,111342,102658],{"id":102657},[10,111344,111345],{},"一个控制任务通常包含：",[159,111347,111348,111351,111359,111364,111367],{},[162,111349,111350],{},"模型：Cartpole 的 body、joint、actuator。",[162,111352,111353,111354,421,111356,111358],{},"观测：从 ",[42,111355,104081],{},[42,111357,104411],{}," 里取状态。",[162,111360,111361,111362,28468],{},"动作：写入 ",[42,111363,101127],{},[162,111365,111366],{},"奖励：根据任务目标打分。",[162,111368,111369],{},"循环：obs -> action -> step -> reward。",[10,111371,111372],{},"这就是后面 Gymnasium 环境的基本骨架。",[121,111374,104337],{},{"title":40,"searchDepth":125,"depth":125,"links":111376},[111377,111378,111379,111384,111388,111389,111390,111398],{"id":100697,"depth":125,"text":100698},{"id":100820,"depth":125,"text":100821},{"id":101095,"depth":125,"text":101096,"children":111380},[111381,111382,111383],{"id":109751,"depth":1262,"text":109752},{"id":109816,"depth":1262,"text":109817},{"id":109832,"depth":1262,"text":109833},{"id":101303,"depth":125,"text":101304,"children":111385},[111386,111387],{"id":101623,"depth":1262,"text":101623},{"id":101759,"depth":1262,"text":101759},{"id":102366,"depth":125,"text":102367},{"id":102398,"depth":125,"text":102399},{"id":102503,"depth":125,"text":102504,"children":111391},[111392,111393,111394,111395,111397],{"id":111256,"depth":1262,"text":111256},{"id":111267,"depth":1262,"text":111267},{"id":111300,"depth":1262,"text":111300},{"id":111313,"depth":1262,"text":111396},"obs[3] 为什么是杆子角速度",{"id":111336,"depth":1262,"text":111337},{"id":102657,"depth":125,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109487,"description":40},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111405,"title":111406,"body":111407,"description":40,"extension":131,"meta":113421,"navigation":133,"path":113422,"seo":113423,"stem":113424,"__hash__":113425},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111408,"toc":113397},[111409,111412,111414,111417,111419,111436,111439,111442,111448,111451,111453,111455,111479,111481,111495,111497,111538,111540,111558,111560,111563,111569,111572,111600,111604,111610,111635,111638,111669,111676,111679,111682,111688,111691,111697,111700,111706,111710,111713,111738,111741,111743,112503,112505,112517,112519,112530,112532,112535,112552,112555,112557,112568,112571,112573,112619,112622,112635,112638,112720,112723,112725,112741,112751,112764,112767,112806,112816,112827,112837,112850,112853,112882,112885,112895,112898,112904,112921,112932,112934,112940,112957,112968,112989,112992,113004,113007,113028,113031,113039,113047,113064,113067,113136,113143,113151,113154,113167,113174,113176,113179,113185,113188,113191,113197,113203,113205,113245,113247,113253,113262,113265,113267,113287,113290,113293,113299,113303,113305,113332,113335,113338,113365,113371,113374,113377,113379,113382,113385,113391,113394],[20,111410,111406],{"id":111411},"_7控制任务reacher-机械臂到达目标",[30,111413,100698],{"id":100697},[10,111415,111416],{},"本章搭建一个二维两关节 reacher 任务。",[10,111418,104382],{},[159,111420,111421,111424,111427,111430,111433],{},[162,111422,111423],{},"两个 hinge joint",[162,111425,111426],{},"两个 motor actuator",[162,111428,111429],{},"site 作为末端点和目标点",[162,111431,111432],{},"根据末端和目标距离设计 reward",[162,111434,111435],{},"构造机械臂任务的基本形式",[10,111437,111438],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[10,111440,111441],{},"Reacher 任务可以理解为：",[35,111443,111446],{"className":111444,"code":111445,"language":5270,"meta":40},[5268],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[42,111447,111445],{"__ignoreMap":40},[10,111449,111450],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[30,111452,100821],{"id":100820},[10,111454,100824],{},[35,111456,111457],{"className":23905,"code":104439,"language":23907,"meta":40,"style":40},[42,111458,111459],{"__ignoreMap":40},[45,111460,111461,111463,111465,111467,111469,111471,111473,111475,111477],{"class":47,"line":48},[45,111462,24659],{"class":2046},[45,111464,26398],{"class":313},[45,111466,23917],{"class":313},[45,111468,26483],{"class":257},[45,111470,104454],{"class":313},[45,111472,100849],{"class":313},[45,111474,102552],{"class":313},[45,111476,100865],{"class":313},[45,111478,104463],{"class":313},[10,111480,102870],{},[35,111482,111483],{"className":23905,"code":100970,"language":23907,"meta":40,"style":40},[42,111484,111485],{"__ignoreMap":40},[45,111486,111487,111489,111491,111493],{"class":47,"line":48},[45,111488,23914],{"class":2046},[45,111490,23917],{"class":313},[45,111492,100981],{"class":313},[45,111494,100984],{"class":313},[10,111496,102887],{},[35,111498,111500],{"className":23905,"code":111499,"language":23907,"meta":40,"style":40},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[42,111501,111502,111519,111528],{"__ignoreMap":40},[45,111503,111504,111506,111508,111510,111513,111515,111517],{"class":47,"line":48},[45,111505,30413],{"class":2046},[45,111507,29259],{"class":313},[45,111509,25198],{"class":257},[45,111511,111512],{"class":313}," mujoco-reacher",[45,111514,101026],{"class":313},[45,111516,101029],{"class":257},[45,111518,101032],{"class":257},[45,111520,111521,111523,111525],{"class":47,"line":125},[45,111522,30413],{"class":2046},[45,111524,101039],{"class":313},[45,111526,111527],{"class":313}," mujoco-reacher\n",[45,111529,111530,111532,111534,111536],{"class":47,"line":1262},[45,111531,23914],{"class":2046},[45,111533,23917],{"class":313},[45,111535,100981],{"class":313},[45,111537,100984],{"class":313},[10,111539,101055],{},[159,111541,111542,111545,111548],{},[162,111543,111544],{},"本章使用低维状态，不使用图像输入。",[162,111546,111547],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[162,111549,111550,111551,421,111553,421,111555,111557],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[42,111552,104081],{},[42,111554,104411],{},[42,111556,103731],{}," 的方法一致。",[30,111559,101096],{"id":101095},[10,111561,111562],{},"Reacher 任务核心:",[35,111564,111567],{"className":111565,"code":111566,"language":5270,"meta":40},[5268],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[42,111568,111566],{"__ignoreMap":40},[10,111570,111571],{},"读取 site 世界坐标:",[35,111573,111575],{"className":37,"code":111574,"language":39,"meta":40,"style":40},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[42,111576,111577,111590],{"__ignoreMap":40},[45,111578,111579,111581,111583,111585,111588],{"class":47,"line":48},[45,111580,103685],{"class":51},[45,111582,254],{"class":93},[45,111584,103456],{"class":51},[45,111586,111587],{"class":313},"\"tip\"",[45,111589,215],{"class":51},[45,111591,111592,111595,111597],{"class":47,"line":125},[45,111593,111594],{"class":51},"tip_pos ",[45,111596,254],{"class":93},[45,111598,111599],{"class":51}," data.site_xpos[site_id]\n",[176,111601,111603],{"id":111602},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[10,111605,111606,111607,111609],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[42,111608,104081],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[35,111611,111613],{"className":37,"code":111612,"language":39,"meta":40,"style":40},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[42,111614,111615,111625],{"__ignoreMap":40},[45,111616,111617,111620,111622],{"class":47,"line":48},[45,111618,111619],{"class":51},"tip ",[45,111621,254],{"class":93},[45,111623,111624],{"class":51}," data.site_xpos[tip_site_id]\n",[45,111626,111627,111630,111632],{"class":47,"line":125},[45,111628,111629],{"class":51},"target ",[45,111631,254],{"class":93},[45,111633,111634],{"class":51}," data.site_xpos[target_site_id]\n",[10,111636,111637],{},"这样 reward 就很容易写：",[35,111639,111641],{"className":37,"code":111640,"language":39,"meta":40,"style":40},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[42,111642,111643,111658],{"__ignoreMap":40},[45,111644,111645,111648,111650,111653,111655],{"class":47,"line":48},[45,111646,111647],{"class":51},"dist ",[45,111649,254],{"class":93},[45,111651,111652],{"class":51}," np.linalg.norm(tip ",[45,111654,94],{"class":93},[45,111656,111657],{"class":51}," target)\n",[45,111659,111660,111662,111664,111666],{"class":47,"line":125},[45,111661,111056],{"class":51},[45,111663,254],{"class":93},[45,111665,52352],{"class":93},[45,111667,111668],{"class":51},"dist\n",[10,111670,111671,111672,111675],{},"距离越小，",[42,111673,111674],{},"-dist"," 越接近 0，奖励越高。",[176,111677,111678],{"id":111678},"两关节机械臂的状态",[10,111680,111681],{},"这个模型有两个 hinge joint：",[35,111683,111686],{"className":111684,"code":111685,"language":5270,"meta":40},[5268],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[42,111687,111685],{"__ignoreMap":40},[10,111689,111690],{},"再加上末端和目标位置：",[35,111692,111695],{"className":111693,"code":111694,"language":5270,"meta":40},[5268],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[42,111696,111694],{"__ignoreMap":40},[10,111698,111699],{},"总维度：",[35,111701,111704],{"className":111702,"code":111703,"language":5270,"meta":40},[5268],"2 + 2 + 3 + 3 = 10\n",[42,111705,111703],{"__ignoreMap":40},[176,111707,111709],{"id":111708},"为什么-gravity-是-0","为什么 gravity 是 0",[10,111711,111712],{},"本章把重力设为：",[35,111714,111716],{"className":53148,"code":111715,"language":53150,"meta":40,"style":40},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[42,111717,111718],{"__ignoreMap":40},[45,111719,111720,111722,111724,111726,111728,111730,111732,111734,111736],{"class":47,"line":48},[45,111721,1117],{"class":51},[45,111723,69247],{"class":51381},[45,111725,101245],{"class":2046},[45,111727,254],{"class":51},[45,111729,101250],{"class":313},[45,111731,101253],{"class":2046},[45,111733,254],{"class":51},[45,111735,103822],{"class":313},[45,111737,101195],{"class":51},[10,111739,111740],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[30,111742,101304],{"id":101303},[35,111744,111746],{"className":37,"code":111745,"language":39,"meta":40,"style":40},"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",[42,111747,111748,111754,111764,111768,111772,111780,111785,111790,111794,111798,111803,111808,111812,111817,111822,111827,111831,111836,111841,111846,111851,111855,111859,111863,111867,111871,111876,111881,111885,111889,111893,111897,111901,111916,111925,111937,111960,111967,111971,111975,111985,111999,112013,112020,112024,112028,112042,112054,112066,112079,112094,112111,112115,112119,112131,112143,112151,112159,112163,112179,112184,112197,112210,112225,112229,112264,112296,112300,112304,112313,112317,112333,112343,112354,112370,112386,112402,112418,112422,112440,112460,112479,112483,112487,112499],{"__ignoreMap":40},[45,111749,111750,111752],{"class":47,"line":48},[45,111751,30473],{"class":93},[45,111753,101352],{"class":51},[45,111755,111756,111758,111760,111762],{"class":47,"line":125},[45,111757,30473],{"class":93},[45,111759,31461],{"class":51},[45,111761,31464],{"class":93},[45,111763,31467],{"class":51},[45,111765,111766],{"class":47,"line":1262},[45,111767,2483],{"emptyLinePlaceholder":133},[45,111769,111770],{"class":47,"line":1277},[45,111771,2483],{"emptyLinePlaceholder":133},[45,111773,111774,111776,111778],{"class":47,"line":1283},[45,111775,101365],{"class":257},[45,111777,13647],{"class":93},[45,111779,101370],{"class":313},[45,111781,111782],{"class":47,"line":1297},[45,111783,111784],{"class":313},"\u003Cmujoco model=\"two_link_reacher\">\n",[45,111786,111787],{"class":47,"line":1303},[45,111788,111789],{"class":313},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[45,111791,111792],{"class":47,"line":1394},[45,111793,2483],{"emptyLinePlaceholder":133},[45,111795,111796],{"class":47,"line":1400},[45,111797,101389],{"class":313},[45,111799,111800],{"class":47,"line":1412},[45,111801,111802],{"class":313},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[45,111804,111805],{"class":47,"line":1695},[45,111806,111807],{"class":313},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[45,111809,111810],{"class":47,"line":1700},[45,111811,2483],{"emptyLinePlaceholder":133},[45,111813,111814],{"class":47,"line":1706},[45,111815,111816],{"class":313},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[45,111818,111819],{"class":47,"line":1711},[45,111820,111821],{"class":313},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[45,111823,111824],{"class":47,"line":1725},[45,111825,111826],{"class":313},"      \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",[45,111828,111829],{"class":47,"line":1730},[45,111830,2483],{"emptyLinePlaceholder":133},[45,111832,111833],{"class":47,"line":1736},[45,111834,111835],{"class":313},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[45,111837,111838],{"class":47,"line":1757},[45,111839,111840],{"class":313},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[45,111842,111843],{"class":47,"line":1762},[45,111844,111845],{"class":313},"        \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",[45,111847,111848],{"class":47,"line":1776},[45,111849,111850],{"class":313},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[45,111852,111853],{"class":47,"line":1781},[45,111854,106489],{"class":313},[45,111856,111857],{"class":47,"line":1810},[45,111858,101418],{"class":313},[45,111860,111861],{"class":47,"line":1815},[45,111862,101423],{"class":313},[45,111864,111865],{"class":47,"line":1832},[45,111866,2483],{"emptyLinePlaceholder":133},[45,111868,111869],{"class":47,"line":1837},[45,111870,106506],{"class":313},[45,111872,111873],{"class":47,"line":1842},[45,111874,111875],{"class":313},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[45,111877,111878],{"class":47,"line":1847},[45,111879,111880],{"class":313},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[45,111882,111883],{"class":47,"line":1861},[45,111884,106516],{"class":313},[45,111886,111887],{"class":47,"line":1866},[45,111888,101428],{"class":313},[45,111890,111891],{"class":47,"line":2660},[45,111892,95749],{"class":313},[45,111894,111895],{"class":47,"line":2674},[45,111896,2483],{"emptyLinePlaceholder":133},[45,111898,111899],{"class":47,"line":2682},[45,111900,2483],{"emptyLinePlaceholder":133},[45,111902,111903,111905,111908,111911,111913],{"class":47,"line":2687},[45,111904,32028],{"class":93},[45,111906,111907],{"class":2046}," site_position",[45,111909,111910],{"class":51},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[45,111912,1382],{"class":257},[45,111914,111915],{"class":51},") -> np.ndarray:\n",[45,111917,111918,111920,111922],{"class":47,"line":2693},[45,111919,103451],{"class":51},[45,111921,254],{"class":93},[45,111923,111924],{"class":51}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[45,111926,111927,111929,111931,111933,111935],{"class":47,"line":2699},[45,111928,3184],{"class":93},[45,111930,103500],{"class":51},[45,111932,1117],{"class":93},[45,111934,4176],{"class":257},[45,111936,3822],{"class":51},[45,111938,111939,111941,111943,111945,111947,111950,111952,111954,111956,111958],{"class":47,"line":2704},[45,111940,103483],{"class":93},[45,111942,103486],{"class":257},[45,111944,209],{"class":51},[45,111946,261],{"class":93},[45,111948,111949],{"class":313},"\"site not found: ",[45,111951,1103],{"class":257},[45,111953,79891],{"class":51},[45,111955,1153],{"class":257},[45,111957,459],{"class":313},[45,111959,215],{"class":51},[45,111961,111962,111964],{"class":47,"line":8031},[45,111963,4173],{"class":93},[45,111965,111966],{"class":51}," data.site_xpos[site_id].copy()\n",[45,111968,111969],{"class":47,"line":8055},[45,111970,2483],{"emptyLinePlaceholder":133},[45,111972,111973],{"class":47,"line":8060},[45,111974,2483],{"emptyLinePlaceholder":133},[45,111976,111977,111979,111982],{"class":47,"line":8066},[45,111978,32028],{"class":93},[45,111980,111981],{"class":2046}," get_obs",[45,111983,111984],{"class":51},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[45,111986,111987,111990,111992,111995,111997],{"class":47,"line":8093},[45,111988,111989],{"class":51},"    tip ",[45,111991,254],{"class":93},[45,111993,111994],{"class":51}," site_position(model, data, ",[45,111996,111587],{"class":313},[45,111998,215],{"class":51},[45,112000,112001,112004,112006,112008,112011],{"class":47,"line":8098},[45,112002,112003],{"class":51},"    target ",[45,112005,254],{"class":93},[45,112007,111994],{"class":51},[45,112009,112010],{"class":313},"\"target\"",[45,112012,215],{"class":51},[45,112014,112015,112017],{"class":47,"line":8104},[45,112016,4173],{"class":93},[45,112018,112019],{"class":51}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[45,112021,112022],{"class":47,"line":8116},[45,112023,2483],{"emptyLinePlaceholder":133},[45,112025,112026],{"class":47,"line":8128},[45,112027,2483],{"emptyLinePlaceholder":133},[45,112029,112030,112032,112035,112038,112040],{"class":47,"line":8140},[45,112031,32028],{"class":93},[45,112033,112034],{"class":2046}," reward",[45,112036,112037],{"class":51},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[45,112039,248],{"class":257},[45,112041,3822],{"class":51},[45,112043,112044,112046,112048,112050,112052],{"class":47,"line":9799},[45,112045,111989],{"class":51},[45,112047,254],{"class":93},[45,112049,111994],{"class":51},[45,112051,111587],{"class":313},[45,112053,215],{"class":51},[45,112055,112056,112058,112060,112062,112064],{"class":47,"line":9824},[45,112057,112003],{"class":51},[45,112059,254],{"class":93},[45,112061,111994],{"class":51},[45,112063,112010],{"class":313},[45,112065,215],{"class":51},[45,112067,112068,112071,112073,112075,112077],{"class":47,"line":9847},[45,112069,112070],{"class":51},"    dist ",[45,112072,254],{"class":93},[45,112074,111652],{"class":51},[45,112076,94],{"class":93},[45,112078,111657],{"class":51},[45,112080,112081,112084,112086,112089,112091],{"class":47,"line":9871},[45,112082,112083],{"class":51},"    control_cost ",[45,112085,254],{"class":93},[45,112087,112088],{"class":257}," 0.01",[45,112090,6601],{"class":93},[45,112092,112093],{"class":51}," np.sum(np.square(data.ctrl))\n",[45,112095,112096,112098,112100,112102,112104,112106,112108],{"class":47,"line":9876},[45,112097,4173],{"class":93},[45,112099,109848],{"class":257},[45,112101,209],{"class":51},[45,112103,94],{"class":93},[45,112105,111647],{"class":51},[45,112107,94],{"class":93},[45,112109,112110],{"class":51}," control_cost)\n",[45,112112,112113],{"class":47,"line":9881},[45,112114,2483],{"emptyLinePlaceholder":133},[45,112116,112117],{"class":47,"line":9886},[45,112118,2483],{"emptyLinePlaceholder":133},[45,112120,112121,112123,112125,112127,112129],{"class":47,"line":9895},[45,112122,32028],{"class":93},[45,112124,2056],{"class":2046},[45,112126,101449],{"class":51},[45,112128,95737],{"class":257},[45,112130,3822],{"class":51},[45,112132,112133,112135,112137,112139,112141],{"class":47,"line":9900},[45,112134,101458],{"class":51},[45,112136,254],{"class":93},[45,112138,101463],{"class":51},[45,112140,101365],{"class":257},[45,112142,215],{"class":51},[45,112144,112145,112147,112149],{"class":47,"line":9906},[45,112146,101472],{"class":51},[45,112148,254],{"class":93},[45,112150,101477],{"class":51},[45,112152,112153,112155,112157],{"class":47,"line":9927},[45,112154,110204],{"class":51},[45,112156,254],{"class":93},[45,112158,104812],{"class":257},[45,112160,112161],{"class":47,"line":9933},[45,112162,2483],{"emptyLinePlaceholder":133},[45,112164,112165,112167,112169,112171,112173,112175,112177],{"class":47,"line":9947},[45,112166,3284],{"class":93},[45,112168,31697],{"class":51},[45,112170,26126],{"class":93},[45,112172,32524],{"class":257},[45,112174,209],{"class":51},[45,112176,65155],{"class":257},[45,112178,30867],{"class":51},[45,112180,112181],{"class":47,"line":9953},[45,112182,112183],{"class":51},"        mujoco.mj_forward(model, data)\n",[45,112185,112186,112189,112191,112193,112195],{"class":47,"line":9980},[45,112187,112188],{"class":51},"        tip ",[45,112190,254],{"class":93},[45,112192,111994],{"class":51},[45,112194,111587],{"class":313},[45,112196,215],{"class":51},[45,112198,112199,112202,112204,112206,112208],{"class":47,"line":9989},[45,112200,112201],{"class":51},"        target ",[45,112203,254],{"class":93},[45,112205,111994],{"class":51},[45,112207,112010],{"class":313},[45,112209,215],{"class":51},[45,112211,112212,112215,112217,112220,112222],{"class":47,"line":9995},[45,112213,112214],{"class":51},"        error ",[45,112216,254],{"class":93},[45,112218,112219],{"class":51}," target ",[45,112221,94],{"class":93},[45,112223,112224],{"class":51}," tip\n",[45,112226,112227],{"class":47,"line":10003},[45,112228,2483],{"emptyLinePlaceholder":133},[45,112230,112231,112233,112235,112237,112239,112242,112244,112246,112249,112251,112254,112256,112258,112260,112262],{"class":47,"line":10008},[45,112232,106668],{"class":51},[45,112234,400],{"class":257},[45,112236,4526],{"class":51},[45,112238,254],{"class":93},[45,112240,112241],{"class":51}," np.clip(",[45,112243,105311],{"class":257},[45,112245,6601],{"class":93},[45,112247,112248],{"class":51}," error[",[45,112250,286],{"class":257},[45,112252,112253],{"class":51},"], ",[45,112255,94],{"class":93},[45,112257,102454],{"class":257},[45,112259,12518],{"class":51},[45,112261,102454],{"class":257},[45,112263,215],{"class":51},[45,112265,112266,112268,112270,112272,112274,112276,112278,112280,112282,112284,112286,112288,112290,112292,112294],{"class":47,"line":16687},[45,112267,106668],{"class":51},[45,112269,426],{"class":257},[45,112271,4526],{"class":51},[45,112273,254],{"class":93},[45,112275,112241],{"class":51},[45,112277,105311],{"class":257},[45,112279,6601],{"class":93},[45,112281,112248],{"class":51},[45,112283,400],{"class":257},[45,112285,112253],{"class":51},[45,112287,94],{"class":93},[45,112289,102454],{"class":257},[45,112291,12518],{"class":51},[45,112293,102454],{"class":257},[45,112295,215],{"class":51},[45,112297,112298],{"class":47,"line":16693},[45,112299,2483],{"emptyLinePlaceholder":133},[45,112301,112302],{"class":47,"line":16716},[45,112303,101567],{"class":51},[45,112305,112306,112308,112310],{"class":47,"line":16722},[45,112307,110348],{"class":51},[45,112309,9560],{"class":93},[45,112311,112312],{"class":51}," reward(model, data)\n",[45,112314,112315],{"class":47,"line":16745},[45,112316,2483],{"emptyLinePlaceholder":133},[45,112318,112319,112321,112323,112325,112327,112329,112331],{"class":47,"line":16759},[45,112320,2580],{"class":93},[45,112322,31697],{"class":51},[45,112324,536],{"class":93},[45,112326,5837],{"class":257},[45,112328,101610],{"class":93},[45,112330,4176],{"class":257},[45,112332,3822],{"class":51},[45,112334,112335,112338,112340],{"class":47,"line":16779},[45,112336,112337],{"class":51},"            obs ",[45,112339,254],{"class":93},[45,112341,112342],{"class":51}," get_obs(model, data)\n",[45,112344,112345,112347,112349,112351],{"class":47,"line":16785},[45,112346,34731],{"class":257},[45,112348,209],{"class":51},[45,112350,110382],{"class":313},[45,112352,112353],{"class":51},", step)\n",[45,112355,112356,112358,112360,112363,112366,112368],{"class":47,"line":16796},[45,112357,34731],{"class":257},[45,112359,209],{"class":51},[45,112361,112362],{"class":313},"\"  tip:\"",[45,112364,112365],{"class":51},", np.round(tip, ",[45,112367,280],{"class":257},[45,112369,30578],{"class":51},[45,112371,112372,112374,112376,112379,112382,112384],{"class":47,"line":16819},[45,112373,34731],{"class":257},[45,112375,209],{"class":51},[45,112377,112378],{"class":313},"\"  target:\"",[45,112380,112381],{"class":51},", np.round(target, ",[45,112383,280],{"class":257},[45,112385,30578],{"class":51},[45,112387,112388,112390,112392,112395,112398,112400],{"class":47,"line":16841},[45,112389,34731],{"class":257},[45,112391,209],{"class":51},[45,112393,112394],{"class":313},"\"  ctrl:\"",[45,112396,112397],{"class":51},", np.round(data.ctrl.copy(), ",[45,112399,280],{"class":257},[45,112401,30578],{"class":51},[45,112403,112404,112406,112408,112411,112414,112416],{"class":47,"line":16846},[45,112405,34731],{"class":257},[45,112407,209],{"class":51},[45,112409,112410],{"class":313},"\"  obs_dim:\"",[45,112412,112413],{"class":51},", obs.shape[",[45,112415,400],{"class":257},[45,112417,4740],{"class":51},[45,112419,112420],{"class":47,"line":16852},[45,112421,2483],{"emptyLinePlaceholder":133},[45,112423,112424,112426,112428,112430,112432,112434,112436,112438],{"class":47,"line":16866},[45,112425,31380],{"class":257},[45,112427,209],{"class":51},[45,112429,110427],{"class":313},[45,112431,12518],{"class":51},[45,112433,32099],{"class":257},[45,112435,110434],{"class":51},[45,112437,280],{"class":257},[45,112439,30578],{"class":51},[45,112441,112442,112444,112446,112449,112452,112454,112456,112458],{"class":47,"line":16879},[45,112443,31380],{"class":257},[45,112445,209],{"class":51},[45,112447,112448],{"class":313},"\"final tip:\"",[45,112450,112451],{"class":51},", np.round(site_position(model, data, ",[45,112453,111587],{"class":313},[45,112455,110396],{"class":51},[45,112457,280],{"class":257},[45,112459,30578],{"class":51},[45,112461,112462,112464,112466,112469,112471,112473,112475,112477],{"class":47,"line":16884},[45,112463,31380],{"class":257},[45,112465,209],{"class":51},[45,112467,112468],{"class":313},"\"target:\"",[45,112470,112451],{"class":51},[45,112472,112010],{"class":313},[45,112474,110396],{"class":51},[45,112476,280],{"class":257},[45,112478,30578],{"class":51},[45,112480,112481],{"class":47,"line":16898},[45,112482,2483],{"emptyLinePlaceholder":133},[45,112484,112485],{"class":47,"line":16903},[45,112486,2483],{"emptyLinePlaceholder":133},[45,112488,112489,112491,112493,112495,112497],{"class":47,"line":16909},[45,112490,1614],{"class":93},[45,112492,31301],{"class":257},[45,112494,101610],{"class":93},[45,112496,101613],{"class":313},[45,112498,3822],{"class":51},[45,112500,112501],{"class":47,"line":16914},[45,112502,101620],{"class":51},[10,112504,103621],{},[35,112506,112508],{"className":23905,"code":112507,"language":23907,"meta":40,"style":40},"touch ch7_reacher.py\n",[42,112509,112510],{"__ignoreMap":40},[45,112511,112512,112514],{"class":47,"line":48},[45,112513,101334],{"class":2046},[45,112515,112516],{"class":313}," ch7_reacher.py\n",[10,112518,110495],{},[35,112520,112522],{"className":23905,"code":112521,"language":23907,"meta":40,"style":40},"python ch7_reacher.py\n",[42,112523,112524],{"__ignoreMap":40},[45,112525,112526,112528],{"class":47,"line":48},[45,112527,39],{"class":2046},[45,112529,112516],{"class":313},[176,112531,101623],{"id":101623},[10,112533,112534],{},"读取 site 坐标：",[35,112536,112538],{"className":37,"code":112537,"language":39,"meta":40,"style":40},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[42,112539,112540],{"__ignoreMap":40},[45,112541,112542,112544,112546,112548,112550],{"class":47,"line":48},[45,112543,32028],{"class":93},[45,112545,111907],{"class":2046},[45,112547,111910],{"class":51},[45,112549,1382],{"class":257},[45,112551,111915],{"class":51},[10,112553,112554],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[10,112556,110511],{},[35,112558,112560],{"className":37,"code":112559,"language":39,"meta":40,"style":40},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[42,112561,112562],{"__ignoreMap":40},[45,112563,112564,112566],{"class":47,"line":48},[45,112565,17129],{"class":93},[45,112567,112019],{"class":51},[10,112569,112570],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[10,112572,109836],{},[35,112574,112576],{"className":37,"code":112575,"language":39,"meta":40,"style":40},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[42,112577,112578,112590,112603],{"__ignoreMap":40},[45,112579,112580,112582,112584,112586,112588],{"class":47,"line":48},[45,112581,111647],{"class":51},[45,112583,254],{"class":93},[45,112585,111652],{"class":51},[45,112587,94],{"class":93},[45,112589,111657],{"class":51},[45,112591,112592,112595,112597,112599,112601],{"class":47,"line":125},[45,112593,112594],{"class":51},"control_cost ",[45,112596,254],{"class":93},[45,112598,112088],{"class":257},[45,112600,6601],{"class":93},[45,112602,112093],{"class":51},[45,112604,112605,112607,112609,112611,112613,112615,112617],{"class":47,"line":1262},[45,112606,17129],{"class":93},[45,112608,109848],{"class":257},[45,112610,209],{"class":51},[45,112612,94],{"class":93},[45,112614,111647],{"class":51},[45,112616,94],{"class":93},[45,112618,112110],{"class":51},[10,112620,112621],{},"奖励由两部分组成：",[159,112623,112624,112629],{},[162,112625,112626,112628],{},[42,112627,111674],{},"：末端离目标越远，奖励越低。",[162,112630,112631,112634],{},[42,112632,112633],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[10,112636,112637],{},"简单控制器：",[35,112639,112641],{"className":37,"code":112640,"language":39,"meta":40,"style":40},"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",[42,112642,112643,112656,112688],{"__ignoreMap":40},[45,112644,112645,112648,112650,112652,112654],{"class":47,"line":48},[45,112646,112647],{"class":51},"error ",[45,112649,254],{"class":93},[45,112651,112219],{"class":51},[45,112653,94],{"class":93},[45,112655,112224],{"class":51},[45,112657,112658,112660,112662,112664,112666,112668,112670,112672,112674,112676,112678,112680,112682,112684,112686],{"class":47,"line":125},[45,112659,105922],{"class":51},[45,112661,400],{"class":257},[45,112663,4526],{"class":51},[45,112665,254],{"class":93},[45,112667,112241],{"class":51},[45,112669,105311],{"class":257},[45,112671,6601],{"class":93},[45,112673,112248],{"class":51},[45,112675,286],{"class":257},[45,112677,112253],{"class":51},[45,112679,94],{"class":93},[45,112681,102454],{"class":257},[45,112683,12518],{"class":51},[45,112685,102454],{"class":257},[45,112687,215],{"class":51},[45,112689,112690,112692,112694,112696,112698,112700,112702,112704,112706,112708,112710,112712,112714,112716,112718],{"class":47,"line":1262},[45,112691,105922],{"class":51},[45,112693,426],{"class":257},[45,112695,4526],{"class":51},[45,112697,254],{"class":93},[45,112699,112241],{"class":51},[45,112701,105311],{"class":257},[45,112703,6601],{"class":93},[45,112705,112248],{"class":51},[45,112707,400],{"class":257},[45,112709,112253],{"class":51},[45,112711,94],{"class":93},[45,112713,102454],{"class":257},[45,112715,12518],{"class":51},[45,112717,102454],{"class":257},[45,112719,215],{"class":51},[10,112721,112722],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[176,112724,101759],{"id":101759},[35,112726,112727],{"className":37,"code":112537,"language":39,"meta":40,"style":40},[42,112728,112729],{"__ignoreMap":40},[45,112730,112731,112733,112735,112737,112739],{"class":47,"line":48},[45,112732,32028],{"class":93},[45,112734,111907],{"class":2046},[45,112736,111910],{"class":51},[45,112738,1382],{"class":257},[45,112740,111915],{"class":51},[10,112742,112743,112744,112746,112747,82620,112749,28468],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[42,112745,79891],{}," 是 site 的名字，比如 ",[42,112748,111587],{},[42,112750,112010],{},[35,112752,112754],{"className":37,"code":112753,"language":39,"meta":40,"style":40},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[42,112755,112756],{"__ignoreMap":40},[45,112757,112758,112760,112762],{"class":47,"line":48},[45,112759,103685],{"class":51},[45,112761,254],{"class":93},[45,112763,111924],{"class":51},[10,112765,112766],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[35,112768,112770],{"className":37,"code":112769,"language":39,"meta":40,"style":40},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[42,112771,112772,112784],{"__ignoreMap":40},[45,112773,112774,112776,112778,112780,112782],{"class":47,"line":48},[45,112775,1614],{"class":93},[45,112777,103500],{"class":51},[45,112779,1117],{"class":93},[45,112781,4176],{"class":257},[45,112783,3822],{"class":51},[45,112785,112786,112788,112790,112792,112794,112796,112798,112800,112802,112804],{"class":47,"line":125},[45,112787,103946],{"class":93},[45,112789,103486],{"class":257},[45,112791,209],{"class":51},[45,112793,261],{"class":93},[45,112795,111949],{"class":313},[45,112797,1103],{"class":257},[45,112799,79891],{"class":51},[45,112801,1153],{"class":257},[45,112803,459],{"class":313},[45,112805,215],{"class":51},[10,112807,112808,112809,112812,112813,112815],{},"如果 site 没找到，就主动报错。",[42,112810,112811],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[42,112814,79891],{}," 的值放进字符串里。",[35,112817,112819],{"className":37,"code":112818,"language":39,"meta":40,"style":40},"return data.site_xpos[site_id].copy()\n",[42,112820,112821],{"__ignoreMap":40},[45,112822,112823,112825],{"class":47,"line":48},[45,112824,17129],{"class":93},[45,112826,111966],{"class":51},[10,112828,112829,112830,112832,112833,112836],{},"返回这个 site 的世界坐标。",[42,112831,103731],{}," 里的每一行都是一个 site 的 ",[42,112834,112835],{},"(x, y, z)"," 坐标。",[35,112838,112840],{"className":37,"code":112839,"language":39,"meta":40,"style":40},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[42,112841,112842],{"__ignoreMap":40},[45,112843,112844,112846,112848],{"class":47,"line":48},[45,112845,32028],{"class":93},[45,112847,111981],{"class":2046},[45,112849,111984],{"class":51},[10,112851,112852],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[35,112854,112856],{"className":37,"code":112855,"language":39,"meta":40,"style":40},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[42,112857,112858,112870],{"__ignoreMap":40},[45,112859,112860,112862,112864,112866,112868],{"class":47,"line":48},[45,112861,111619],{"class":51},[45,112863,254],{"class":93},[45,112865,111994],{"class":51},[45,112867,111587],{"class":313},[45,112869,215],{"class":51},[45,112871,112872,112874,112876,112878,112880],{"class":47,"line":125},[45,112873,111629],{"class":51},[45,112875,254],{"class":93},[45,112877,111994],{"class":51},[45,112879,112010],{"class":313},[45,112881,215],{"class":51},[10,112883,112884],{},"分别读取末端点和目标点的世界坐标。",[35,112886,112887],{"className":37,"code":112559,"language":39,"meta":40,"style":40},[42,112888,112889],{"__ignoreMap":40},[45,112890,112891,112893],{"class":47,"line":48},[45,112892,17129],{"class":93},[45,112894,112019],{"class":51},[10,112896,112897],{},"把四部分拼成一个观测数组：",[35,112899,112902],{"className":112900,"code":112901,"language":5270,"meta":40},[5268],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[42,112903,112901],{"__ignoreMap":40},[35,112905,112907],{"className":37,"code":112906,"language":39,"meta":40,"style":40},"dist = np.linalg.norm(tip - target)\n",[42,112908,112909],{"__ignoreMap":40},[45,112910,112911,112913,112915,112917,112919],{"class":47,"line":48},[45,112912,111647],{"class":51},[45,112914,254],{"class":93},[45,112916,111652],{"class":51},[45,112918,94],{"class":93},[45,112920,111657],{"class":51},[10,112922,112923,112924,112927,112928,112931],{},"计算 tip 到 target 的距离。",[42,112925,112926],{},"tip - target"," 得到一个三维向量，",[42,112929,112930],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[10,112933,14716],{},[35,112935,112938],{"className":112936,"code":112937,"language":5270,"meta":40},[5268],"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",[42,112939,112937],{"__ignoreMap":40},[35,112941,112943],{"className":37,"code":112942,"language":39,"meta":40,"style":40},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[42,112944,112945],{"__ignoreMap":40},[45,112946,112947,112949,112951,112953,112955],{"class":47,"line":48},[45,112948,112594],{"class":51},[45,112950,254],{"class":93},[45,112952,112088],{"class":257},[45,112954,6601],{"class":93},[45,112956,112093],{"class":51},[10,112958,112959,112960,112963,112964,112967],{},"计算动作惩罚。",[42,112961,112962],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[42,112965,112966],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[35,112969,112971],{"className":37,"code":112970,"language":39,"meta":40,"style":40},"return float(-dist - control_cost)\n",[42,112972,112973],{"__ignoreMap":40},[45,112974,112975,112977,112979,112981,112983,112985,112987],{"class":47,"line":48},[45,112976,17129],{"class":93},[45,112978,109848],{"class":257},[45,112980,209],{"class":51},[45,112982,94],{"class":93},[45,112984,111647],{"class":51},[45,112986,94],{"class":93},[45,112988,112110],{"class":51},[10,112990,112991],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[35,112993,112994],{"className":37,"code":110854,"language":39,"meta":40,"style":40},[42,112995,112996],{"__ignoreMap":40},[45,112997,112998,113000,113002],{"class":47,"line":48},[45,112999,110861],{"class":51},[45,113001,254],{"class":93},[45,113003,104812],{"class":257},[10,113005,113006],{},"累计奖励变量，记录整个运行过程的总分。",[35,113008,113010],{"className":37,"code":113009,"language":39,"meta":40,"style":40},"for step in range(500):\n",[42,113011,113012],{"__ignoreMap":40},[45,113013,113014,113016,113018,113020,113022,113024,113026],{"class":47,"line":48},[45,113015,3108],{"class":93},[45,113017,31697],{"class":51},[45,113019,26126],{"class":93},[45,113021,32524],{"class":257},[45,113023,209],{"class":51},[45,113025,65155],{"class":257},[45,113027,30867],{"class":51},[10,113029,113030],{},"运行 500 个控制步。",[35,113032,113033],{"className":37,"code":104594,"language":39,"meta":40,"style":40},[42,113034,113035],{"__ignoreMap":40},[45,113036,113037],{"class":47,"line":48},[45,113038,104594],{"class":51},[10,113040,113041,113042,101069,113044,113046],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[42,113043,103282],{},[42,113045,103285],{}," 是当前状态下的坐标。",[35,113048,113050],{"className":37,"code":113049,"language":39,"meta":40,"style":40},"error = target - tip\n",[42,113051,113052],{"__ignoreMap":40},[45,113053,113054,113056,113058,113060,113062],{"class":47,"line":48},[45,113055,112647],{"class":51},[45,113057,254],{"class":93},[45,113059,112219],{"class":51},[45,113061,94],{"class":93},[45,113063,112224],{"class":51},[10,113065,113066],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[35,113068,113070],{"className":37,"code":113069,"language":39,"meta":40,"style":40},"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",[42,113071,113072,113104],{"__ignoreMap":40},[45,113073,113074,113076,113078,113080,113082,113084,113086,113088,113090,113092,113094,113096,113098,113100,113102],{"class":47,"line":48},[45,113075,105922],{"class":51},[45,113077,400],{"class":257},[45,113079,4526],{"class":51},[45,113081,254],{"class":93},[45,113083,112241],{"class":51},[45,113085,105311],{"class":257},[45,113087,6601],{"class":93},[45,113089,112248],{"class":51},[45,113091,286],{"class":257},[45,113093,112253],{"class":51},[45,113095,94],{"class":93},[45,113097,102454],{"class":257},[45,113099,12518],{"class":51},[45,113101,102454],{"class":257},[45,113103,215],{"class":51},[45,113105,113106,113108,113110,113112,113114,113116,113118,113120,113122,113124,113126,113128,113130,113132,113134],{"class":47,"line":125},[45,113107,105922],{"class":51},[45,113109,426],{"class":257},[45,113111,4526],{"class":51},[45,113113,254],{"class":93},[45,113115,112241],{"class":51},[45,113117,105311],{"class":257},[45,113119,6601],{"class":93},[45,113121,112248],{"class":51},[45,113123,400],{"class":257},[45,113125,112253],{"class":51},[45,113127,94],{"class":93},[45,113129,102454],{"class":257},[45,113131,12518],{"class":51},[45,113133,102454],{"class":257},[45,113135,215],{"class":51},[10,113137,113138,113139,113142],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[42,113140,113141],{},"error -> ctrl -> step"," 的流程。",[35,113144,113145],{"className":37,"code":104556,"language":39,"meta":40,"style":40},[42,113146,113147],{"__ignoreMap":40},[45,113148,113149],{"class":47,"line":48},[45,113150,104556],{"class":51},[10,113152,113153],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[35,113155,113157],{"className":37,"code":113156,"language":39,"meta":40,"style":40},"obs = get_obs(model, data)\n",[42,113158,113159],{"__ignoreMap":40},[45,113160,113161,113163,113165],{"class":47,"line":48},[45,113162,110905],{"class":51},[45,113164,254],{"class":93},[45,113166,112342],{"class":51},[10,113168,113169,113170,113173],{},"读取最新观测。后面打印 ",[42,113171,113172],{},"obs.shape[0]","，用来确认观测维度是 10。",[30,113175,102367],{"id":102366},[10,113177,113178],{},"观测维度为:",[35,113180,113183],{"className":113181,"code":113182,"language":5270,"meta":40},[5268],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[42,113184,113182],{"__ignoreMap":40},[10,113186,113187],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[10,113189,113190],{},"程序每 100 步打印：",[35,113192,113195],{"className":113193,"code":113194,"language":5270,"meta":40},[5268],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[42,113196,113194],{"__ignoreMap":40},[10,113198,113199,113200,113202],{},"如果控制有效，你应该看到最终 ",[42,113201,103282],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[30,113204,102399],{"id":102398},[159,113206,113207,113210,113213,113219,113225,113232,113242],{},[162,113208,113209],{},"修改目标点位置。",[162,113211,113212],{},"重新运行，观察最终 tip 是否变化。",[162,113214,113215,113216,113218],{},"把 gravity 改成 ",[42,113217,102640],{},"，观察控制是否变差。",[162,113220,111232,113221,111236,113223,28468],{},[42,113222,102209],{},[42,113224,286],{},[162,113226,102462,113227,102465,113229,113231],{},[42,113228,110647],{},[42,113230,107358],{},"，观察机械臂是否更难移动。",[162,113233,102462,113234,82611,113236,102465,113238,113241],{},[42,113235,103285],{},[42,113237,104197],{},[42,113239,113240],{},"0.2 0 0.6","，观察 reward 和 final tip。",[162,113243,113244],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[30,113246,102504],{"id":102503},[176,113248,113250],{"id":113249},"site-not-found",[42,113251,113252],{},"site not found",[10,113254,113255,113256,101069,113259,28468],{},"检查 XML 中是否有 ",[42,113257,113258],{},"site name=\"tip\"",[42,113260,113261],{},"site name=\"target\"",[176,113263,113264],{"id":113264},"机械臂完全不动",[10,113266,102574],{},[159,113268,113269,113274,113277,113282],{},[162,113270,113271,113273],{},[42,113272,102209],{}," 是否为 2",[162,113275,113276],{},"actuator 是否引用正确 joint",[162,113278,113279,113281],{},[42,113280,101127],{}," 是否被赋值",[162,113283,113284,113285],{},"是否执行了 ",[42,113286,100736],{},[176,113288,113289],{"id":113289},"控制效果不好",[10,113291,113292],{},"正常。本章重点不是控制器最优，而是任务结构:",[35,113294,113297],{"className":113295,"code":113296,"language":5270,"meta":40},[5268],"obs → action → mj_step → reward → next_obs\n",[42,113298,113296],{"__ignoreMap":40},[176,113300,113302],{"id":113301},"tip-坐标不变化","tip 坐标不变化",[10,113304,102626],{},[159,113306,113307,113312,113320,113329],{},[162,113308,113309,113310,28468],{},"是否每步调用了 ",[42,113311,100736],{},[162,113313,113314,113315,101069,113317,28468],{},"是否写入了 ",[42,113316,106177],{},[42,113318,113319],{},"data.ctrl[1]",[162,113321,113322,113323,421,113326,28468],{},"actuator 是否正确引用 ",[42,113324,113325],{},"joint1",[42,113327,113328],{},"joint2",[162,113330,113331],{},"控制输入是否太小。",[176,113333,113334],{"id":113334},"目标点不会动",[10,113336,113337],{},"本章的 target 是固定 site：",[35,113339,113341],{"className":53148,"code":113340,"language":53150,"meta":40,"style":40},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[42,113342,113343],{"__ignoreMap":40},[45,113344,113345,113347,113349,113351,113353,113355,113357,113359,113362],{"class":47,"line":48},[45,113346,1117],{"class":51},[45,113348,103261],{"class":51381},[45,113350,15003],{"class":2046},[45,113352,254],{"class":51},[45,113354,112010],{"class":313},[45,113356,101157],{"class":2046},[45,113358,254],{"class":51},[45,113360,113361],{"class":313},"\"0.5 0 0.4\"",[45,113363,113364],{"class":51}," ...\u002F>\n",[10,113366,113367,113368,113370],{},"它直接挂在 ",[42,113369,101892],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[176,113372,113373],{"id":113373},"机械臂不像真实机械臂",[10,113375,113376],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[30,113378,102658],{"id":102657},[10,113380,113381],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[10,113383,113384],{},"核心公式：",[35,113386,113389],{"className":113387,"code":113388,"language":5270,"meta":40},[5268],"distance = ||tip - target||\nreward = -distance - action_cost\n",[42,113390,113388],{"__ignoreMap":40},[10,113392,113393],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[121,113395,113396],{},"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":40,"searchDepth":125,"depth":125,"links":113398},[113399,113400,113401,113406,113410,113411,113412,113420],{"id":100697,"depth":125,"text":100698},{"id":100820,"depth":125,"text":100821},{"id":101095,"depth":125,"text":101096,"children":113402},[113403,113404,113405],{"id":111602,"depth":1262,"text":111603},{"id":111678,"depth":1262,"text":111678},{"id":111708,"depth":1262,"text":111709},{"id":101303,"depth":125,"text":101304,"children":113407},[113408,113409],{"id":101623,"depth":1262,"text":101623},{"id":101759,"depth":1262,"text":101759},{"id":102366,"depth":125,"text":102367},{"id":102398,"depth":125,"text":102399},{"id":102503,"depth":125,"text":102504,"children":113413},[113414,113415,113416,113417,113418,113419],{"id":113249,"depth":1262,"text":113252},{"id":113264,"depth":1262,"text":113264},{"id":113289,"depth":1262,"text":113289},{"id":113301,"depth":1262,"text":113302},{"id":113334,"depth":1262,"text":113334},{"id":113373,"depth":1262,"text":113373},{"id":102657,"depth":125,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111406,"description":40},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113427,"title":113428,"body":113429,"description":40,"extension":131,"meta":116891,"navigation":133,"path":116892,"seo":116893,"stem":116894,"__hash__":116895},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113430,"toc":116862},[113431,113434,113436,113439,113442,113467,113470,113476,113479,113485,113487,113489,113513,113515,113533,113535,113578,113580,113607,113609,113612,113664,113667,113673,113682,113685,113723,113726,113765,113768,113776,113783,113786,113792,113794,113848,113855,113900,113903,113907,113923,113933,113935,115196,115198,115210,115212,115223,115225,115228,115249,115252,115255,115288,115294,115297,115330,115333,115336,115377,115382,115396,115399,115412,115417,115440,115442,115457,115467,115482,115489,115509,115524,115542,115545,115562,115570,115586,115592,115624,115637,115669,115679,115714,115728,115774,115788,115830,115841,115854,115860,115893,115896,115923,115933,115973,115983,116000,116007,116025,116028,116069,116082,116097,116100,116123,116126,116138,116141,116160,116165,116186,116189,116204,116207,116241,116253,116268,116271,116296,116299,116318,116321,116353,116356,116380,116386,116416,116423,116436,116439,116441,116443,116449,116452,116455,116467,116470,116472,116526,116528,116532,116538,116547,116550,116557,116559,116582,116585,116589,116591,116609,116615,116617,116650,116653,116659,116663,116666,116686,116691,116695,116702,116722,116727,116731,116734,116754,116757,116843,116847,116850,116856,116859],[20,113432,113428],{"id":113433},"_8gymnasium-风格强化学习接口基础",[30,113435,100698],{"id":100697},[10,113437,113438],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[10,113440,113441],{},"你将实现:",[35,113443,113445],{"className":37,"code":113444,"language":39,"meta":40,"style":40},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[42,113446,113447,113457],{"__ignoreMap":40},[45,113448,113449,113452,113454],{"class":47,"line":48},[45,113450,113451],{"class":51},"obs, info ",[45,113453,254],{"class":93},[45,113455,113456],{"class":51}," env.reset()\n",[45,113458,113459,113462,113464],{"class":47,"line":125},[45,113460,113461],{"class":51},"obs, reward, terminated, truncated, info ",[45,113463,254],{"class":93},[45,113465,113466],{"class":51}," env.step(action)\n",[10,113468,113469],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[10,113471,113472,113473,113475],{},"前面章节的代码都是“脚本式”的：在 ",[42,113474,102346],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[10,113477,113478],{},"可以先记住 Gymnasium 环境的核心交互：",[35,113480,113483],{"className":113481,"code":113482,"language":5270,"meta":40},[5268],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[42,113484,113482],{"__ignoreMap":40},[30,113486,100821],{"id":100820},[10,113488,100824],{},[35,113490,113491],{"className":23905,"code":104439,"language":23907,"meta":40,"style":40},[42,113492,113493],{"__ignoreMap":40},[45,113494,113495,113497,113499,113501,113503,113505,113507,113509,113511],{"class":47,"line":48},[45,113496,24659],{"class":2046},[45,113498,26398],{"class":313},[45,113500,23917],{"class":313},[45,113502,26483],{"class":257},[45,113504,104454],{"class":313},[45,113506,100849],{"class":313},[45,113508,102552],{"class":313},[45,113510,100865],{"class":313},[45,113512,104463],{"class":313},[10,113514,102870],{},[35,113516,113518],{"className":23905,"code":113517,"language":23907,"meta":40,"style":40},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[42,113519,113520],{"__ignoreMap":40},[45,113521,113522,113524,113526,113528,113530],{"class":47,"line":48},[45,113523,23914],{"class":2046},[45,113525,23917],{"class":313},[45,113527,100981],{"class":313},[45,113529,107762],{"class":313},[45,113531,113532],{"class":313}," gymnasium\n",[10,113534,102887],{},[35,113536,113538],{"className":23905,"code":113537,"language":23907,"meta":40,"style":40},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[42,113539,113540,113557,113566],{"__ignoreMap":40},[45,113541,113542,113544,113546,113548,113551,113553,113555],{"class":47,"line":48},[45,113543,30413],{"class":2046},[45,113545,29259],{"class":313},[45,113547,25198],{"class":257},[45,113549,113550],{"class":313}," mujoco-gym-api",[45,113552,101026],{"class":313},[45,113554,101029],{"class":257},[45,113556,101032],{"class":257},[45,113558,113559,113561,113563],{"class":47,"line":125},[45,113560,30413],{"class":2046},[45,113562,101039],{"class":313},[45,113564,113565],{"class":313}," mujoco-gym-api\n",[45,113567,113568,113570,113572,113574,113576],{"class":47,"line":1262},[45,113569,23914],{"class":2046},[45,113571,23917],{"class":313},[45,113573,100981],{"class":313},[45,113575,107762],{"class":313},[45,113577,113532],{"class":313},[10,113579,101055],{},[159,113581,113582,113592,113595,113601],{},[162,113583,113584,113585,113588,113589,28468],{},"本章使用 ",[42,113586,113587],{},"gymnasium","，不是旧版 ",[42,113590,113591],{},"gym",[162,113593,113594],{},"Gymnasium API 与旧 Gym API 有差异。",[162,113596,113597,113598,28468],{},"旧 Gym 常见返回值是 4 个: ",[42,113599,113600],{},"obs, reward, done, info",[162,113602,113603,113604,28468],{},"Gymnasium 返回值是 5 个: ",[42,113605,113606],{},"obs, reward, terminated, truncated, info",[30,113608,101096],{"id":101095},[10,113610,113611],{},"强化学习环境接口包含:",[346,113613,113614,113623],{},[349,113615,113616],{},[352,113617,113618,113621],{},[355,113619,113620],{"align":23819},"方法",[355,113622,102747],{"align":23819},[393,113624,113625,113635,113645,113655],{},[352,113626,113627,113632],{},[398,113628,113629],{"align":23819},[42,113630,113631],{},"reset()",[398,113633,113634],{"align":23819},"重置环境",[352,113636,113637,113642],{},[398,113638,113639],{"align":23819},[42,113640,113641],{},"step(action)",[398,113643,113644],{"align":23819},"执行动作",[352,113646,113647,113652],{},[398,113648,113649],{"align":23819},[42,113650,113651],{},"observation_space",[398,113653,113654],{"align":23819},"观测空间",[352,113656,113657,113662],{},[398,113658,113659],{"align":23819},[42,113660,113661],{},"action_space",[398,113663,23737],{"align":23819},[10,113665,113666],{},"一个最小环境需要完成:",[35,113668,113671],{"className":113669,"code":113670,"language":5270,"meta":40},[5268],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[42,113672,113670],{"__ignoreMap":40},[176,113674,113676,101069,113679,104689],{"id":113675},"terminated-和-truncated-的区别",[42,113677,113678],{},"terminated",[42,113680,113681],{},"truncated",[10,113683,113684],{},"Gymnasium 把“结束”拆成两个概念：",[346,113686,113687,113697],{},[349,113688,113689],{},[352,113690,113691,113693,113695],{},[355,113692,104625],{"align":23819},[355,113694,100751],{"align":23819},[355,113696,21270],{"align":23819},[393,113698,113699,113711],{},[352,113700,113701,113705,113708],{},[398,113702,113703],{"align":23819},[42,113704,113678],{},[398,113706,113707],{"align":23819},"任务自然结束",[398,113709,113710],{"align":23819},"机械臂到达目标、机器人摔倒",[352,113712,113713,113717,113720],{},[398,113714,113715],{"align":23819},[42,113716,113681],{},[398,113718,113719],{"align":23819},"因外部限制截断",[398,113721,113722],{"align":23819},"达到最大步数、时间限制",[10,113724,113725],{},"本章中：",[35,113727,113729],{"className":37,"code":113728,"language":39,"meta":40,"style":40},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[42,113730,113731,113746],{"__ignoreMap":40},[45,113732,113733,113736,113738,113741,113743],{"class":47,"line":48},[45,113734,113735],{"class":51},"terminated ",[45,113737,254],{"class":93},[45,113739,113740],{"class":51}," dist ",[45,113742,1117],{"class":93},[45,113744,113745],{"class":257}," 0.05\n",[45,113747,113748,113751,113753,113755,113758,113760,113762],{"class":47,"line":125},[45,113749,113750],{"class":51},"truncated ",[45,113752,254],{"class":93},[45,113754,38954],{"class":257},[45,113756,113757],{"class":51},".steps ",[45,113759,1793],{"class":93},[45,113761,38954],{"class":257},[45,113763,113764],{"class":51},".max_steps\n",[10,113766,113767],{},"也就是：",[159,113769,113770,113773],{},[162,113771,113772],{},"末端距离目标小于 0.05，任务成功结束。",[162,113774,113775],{},"步数超过上限，episode 被截断。",[176,113777,113779,101069,113781],{"id":113778},"observation_space-和-action_space",[42,113780,113651],{},[42,113782,113661],{},[10,113784,113785],{},"这两个对象告诉算法：",[35,113787,113790],{"className":113788,"code":113789,"language":5270,"meta":40},[5268],"观测长什么样\n动作允许多大\n",[42,113791,113789],{"__ignoreMap":40},[10,113793,14716],{},[35,113795,113797],{"className":37,"code":113796,"language":39,"meta":40,"style":40},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[42,113798,113799],{"__ignoreMap":40},[45,113800,113801,113803,113806,113808,113811,113814,113817,113819,113821,113824,113826,113828,113830,113832,113834,113836,113838,113841,113843,113845],{"class":47,"line":48},[45,113802,30904],{"class":257},[45,113804,113805],{"class":51},".action_space ",[45,113807,254],{"class":93},[45,113809,113810],{"class":51}," spaces.Box(",[45,113812,113813],{"class":5299},"low",[45,113815,113816],{"class":93},"=-",[45,113818,102454],{"class":257},[45,113820,12518],{"class":51},[45,113822,113823],{"class":5299},"high",[45,113825,254],{"class":93},[45,113827,102454],{"class":257},[45,113829,12518],{"class":51},[45,113831,96014],{"class":5299},[45,113833,254],{"class":93},[45,113835,209],{"class":51},[45,113837,286],{"class":257},[45,113839,113840],{"class":51},",), ",[45,113842,93551],{"class":5299},[45,113844,254],{"class":93},[45,113846,113847],{"class":51},"np.float32)\n",[10,113849,113850,113851,113854],{},"表示动作是 2 维数组，每个值都在 ",[42,113852,113853],{},"[-1, 1]"," 范围内。",[35,113856,113858],{"className":37,"code":113857,"language":39,"meta":40,"style":40},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[42,113859,113860],{"__ignoreMap":40},[45,113861,113862,113864,113867,113869,113871,113873,113875,113878,113880,113882,113884,113886,113888,113890,113892,113894,113896,113898],{"class":47,"line":48},[45,113863,30904],{"class":257},[45,113865,113866],{"class":51},".observation_space ",[45,113868,254],{"class":93},[45,113870,113810],{"class":51},[45,113872,113813],{"class":5299},[45,113874,113816],{"class":93},[45,113876,113877],{"class":51},"np.inf, ",[45,113879,113823],{"class":5299},[45,113881,254],{"class":93},[45,113883,113877],{"class":51},[45,113885,96014],{"class":5299},[45,113887,254],{"class":93},[45,113889,209],{"class":51},[45,113891,654],{"class":257},[45,113893,113840],{"class":51},[45,113895,93551],{"class":5299},[45,113897,254],{"class":93},[45,113899,113847],{"class":51},[10,113901,113902],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[176,113904,113906],{"id":113905},"frame_skip-是什么","frame_skip 是什么",[35,113908,113910],{"className":37,"code":113909,"language":39,"meta":40,"style":40},"self.frame_skip = 5\n",[42,113911,113912],{"__ignoreMap":40},[45,113913,113914,113916,113919,113921],{"class":47,"line":48},[45,113915,30904],{"class":257},[45,113917,113918],{"class":51},".frame_skip ",[45,113920,254],{"class":93},[45,113922,54508],{"class":257},[10,113924,113925,113926,113929,113930,113932],{},"表示外部调用一次 ",[42,113927,113928],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[42,113931,101266],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[30,113934,101304],{"id":101303},[35,113936,113938],{"className":37,"code":113937,"language":39,"meta":40,"style":40},"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",[42,113939,113940,113952,113958,113968,113979,113983,113987,113995,114000,114004,114008,114012,114016,114020,114024,114028,114033,114037,114041,114045,114050,114054,114058,114062,114066,114070,114074,114078,114082,114086,114090,114094,114098,114102,114120,114135,114139,114152,114162,114177,114194,114198,114219,114238,114263,114277,114281,114291,114303,114313,114317,114359,114397,114401,114411,114427,114442,114461,114468,114472,114485,114500,114515,114528,114547,114563,114567,114608,114623,114638,114642,114681,114692,114705,114709,114719,114728,114732,114742,114757,114775,114779,114790,114807,114820,114824,114834,114838,114849,114860,114864,114878,114892,114908,114912,114925,114942,114957,114964,114968,114972,114984,114994,115012,115024,115036,115040,115048,115064,115073,115082,115090,115132,115145,115150,115154,115172,115176,115180,115192],{"__ignoreMap":40},[45,113941,113942,113944,113947,113949],{"class":47,"line":48},[45,113943,30473],{"class":93},[45,113945,113946],{"class":51}," gymnasium ",[45,113948,31464],{"class":93},[45,113950,113951],{"class":51}," gym\n",[45,113953,113954,113956],{"class":47,"line":125},[45,113955,30473],{"class":93},[45,113957,101352],{"class":51},[45,113959,113960,113962,113964,113966],{"class":47,"line":1262},[45,113961,30473],{"class":93},[45,113963,31461],{"class":51},[45,113965,31464],{"class":93},[45,113967,31467],{"class":51},[45,113969,113970,113972,113974,113976],{"class":47,"line":1277},[45,113971,30818],{"class":93},[45,113973,113946],{"class":51},[45,113975,30473],{"class":93},[45,113977,113978],{"class":51}," spaces\n",[45,113980,113981],{"class":47,"line":1283},[45,113982,2483],{"emptyLinePlaceholder":133},[45,113984,113985],{"class":47,"line":1297},[45,113986,2483],{"emptyLinePlaceholder":133},[45,113988,113989,113991,113993],{"class":47,"line":1303},[45,113990,101365],{"class":257},[45,113992,13647],{"class":93},[45,113994,101370],{"class":313},[45,113996,113997],{"class":47,"line":1394},[45,113998,113999],{"class":313},"\u003Cmujoco model=\"gym_reacher\">\n",[45,114001,114002],{"class":47,"line":1400},[45,114003,111789],{"class":313},[45,114005,114006],{"class":47,"line":1412},[45,114007,2483],{"emptyLinePlaceholder":133},[45,114009,114010],{"class":47,"line":1695},[45,114011,101389],{"class":313},[45,114013,114014],{"class":47,"line":1700},[45,114015,111807],{"class":313},[45,114017,114018],{"class":47,"line":1706},[45,114019,2483],{"emptyLinePlaceholder":133},[45,114021,114022],{"class":47,"line":1711},[45,114023,111816],{"class":313},[45,114025,114026],{"class":47,"line":1725},[45,114027,111821],{"class":313},[45,114029,114030],{"class":47,"line":1730},[45,114031,114032],{"class":313},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[45,114034,114035],{"class":47,"line":1736},[45,114036,2483],{"emptyLinePlaceholder":133},[45,114038,114039],{"class":47,"line":1757},[45,114040,111835],{"class":313},[45,114042,114043],{"class":47,"line":1762},[45,114044,111840],{"class":313},[45,114046,114047],{"class":47,"line":1776},[45,114048,114049],{"class":313},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[45,114051,114052],{"class":47,"line":1781},[45,114053,111850],{"class":313},[45,114055,114056],{"class":47,"line":1810},[45,114057,106489],{"class":313},[45,114059,114060],{"class":47,"line":1815},[45,114061,101418],{"class":313},[45,114063,114064],{"class":47,"line":1832},[45,114065,101423],{"class":313},[45,114067,114068],{"class":47,"line":1837},[45,114069,2483],{"emptyLinePlaceholder":133},[45,114071,114072],{"class":47,"line":1842},[45,114073,106506],{"class":313},[45,114075,114076],{"class":47,"line":1847},[45,114077,111875],{"class":313},[45,114079,114080],{"class":47,"line":1861},[45,114081,111880],{"class":313},[45,114083,114084],{"class":47,"line":1866},[45,114085,106516],{"class":313},[45,114087,114088],{"class":47,"line":2660},[45,114089,101428],{"class":313},[45,114091,114092],{"class":47,"line":2674},[45,114093,95749],{"class":313},[45,114095,114096],{"class":47,"line":2682},[45,114097,2483],{"emptyLinePlaceholder":133},[45,114099,114100],{"class":47,"line":2687},[45,114101,2483],{"emptyLinePlaceholder":133},[45,114103,114104,114106,114109,114111,114113,114115,114118],{"class":47,"line":2693},[45,114105,14777],{"class":93},[45,114107,114108],{"class":2046}," ReacherEnv",[45,114110,209],{"class":51},[45,114112,113591],{"class":2046},[45,114114,765],{"class":51},[45,114116,114117],{"class":2046},"Env",[45,114119,30867],{"class":51},[45,114121,114122,114125,114127,114129,114132],{"class":47,"line":2699},[45,114123,114124],{"class":51},"    metadata ",[45,114126,254],{"class":93},[45,114128,4531],{"class":51},[45,114130,114131],{"class":313},"\"render_modes\"",[45,114133,114134],{"class":51},": []}\n",[45,114136,114137],{"class":47,"line":2704},[45,114138,2483],{"emptyLinePlaceholder":133},[45,114140,114141,114143,114145,114148,114150],{"class":47,"line":8031},[45,114142,30882],{"class":93},[45,114144,30885],{"class":257},[45,114146,114147],{"class":51},"(self) -> ",[45,114149,95737],{"class":257},[45,114151,3822],{"class":51},[45,114153,114154,114156,114158,114160],{"class":47,"line":8055},[45,114155,30898],{"class":257},[45,114157,17344],{"class":51},[45,114159,30910],{"class":257},[45,114161,2059],{"class":51},[45,114163,114164,114166,114169,114171,114173,114175],{"class":47,"line":8060},[45,114165,30926],{"class":257},[45,114167,114168],{"class":51},".model ",[45,114170,254],{"class":93},[45,114172,101463],{"class":51},[45,114174,101365],{"class":257},[45,114176,215],{"class":51},[45,114178,114179,114181,114184,114186,114189,114191],{"class":47,"line":8066},[45,114180,30926],{"class":257},[45,114182,114183],{"class":51},".data ",[45,114185,254],{"class":93},[45,114187,114188],{"class":51}," mujoco.MjData(",[45,114190,30904],{"class":257},[45,114192,114193],{"class":51},".model)\n",[45,114195,114196],{"class":47,"line":8093},[45,114197,2483],{"emptyLinePlaceholder":133},[45,114199,114200,114202,114205,114207,114210,114212,114215,114217],{"class":47,"line":8098},[45,114201,30926],{"class":257},[45,114203,114204],{"class":51},".tip_site_id ",[45,114206,254],{"class":93},[45,114208,114209],{"class":51}," mujoco.mj_name2id(",[45,114211,30904],{"class":257},[45,114213,114214],{"class":51},".model, mujoco.mjtObj.mjOBJ_SITE, ",[45,114216,111587],{"class":313},[45,114218,215],{"class":51},[45,114220,114221,114223,114226,114228,114230,114232,114234,114236],{"class":47,"line":8104},[45,114222,30926],{"class":257},[45,114224,114225],{"class":51},".target_site_id ",[45,114227,254],{"class":93},[45,114229,114209],{"class":51},[45,114231,30904],{"class":257},[45,114233,114214],{"class":51},[45,114235,112010],{"class":313},[45,114237,215],{"class":51},[45,114239,114240,114242,114244,114246,114248,114250,114253,114255,114257,114259,114261],{"class":47,"line":8116},[45,114241,2580],{"class":93},[45,114243,38954],{"class":257},[45,114245,114204],{"class":51},[45,114247,1117],{"class":93},[45,114249,4176],{"class":257},[45,114251,114252],{"class":93}," or",[45,114254,38954],{"class":257},[45,114256,114225],{"class":51},[45,114258,1117],{"class":93},[45,114260,4176],{"class":257},[45,114262,3822],{"class":51},[45,114264,114265,114268,114270,114272,114275],{"class":47,"line":8128},[45,114266,114267],{"class":93},"            raise",[45,114269,103486],{"class":257},[45,114271,209],{"class":51},[45,114273,114274],{"class":313},"\"required sites not found\"",[45,114276,215],{"class":51},[45,114278,114279],{"class":47,"line":8140},[45,114280,2483],{"emptyLinePlaceholder":133},[45,114282,114283,114285,114287,114289],{"class":47,"line":9799},[45,114284,30926],{"class":257},[45,114286,113918],{"class":51},[45,114288,254],{"class":93},[45,114290,54508],{"class":257},[45,114292,114293,114295,114298,114300],{"class":47,"line":9824},[45,114294,30926],{"class":257},[45,114296,114297],{"class":51},".max_steps ",[45,114299,254],{"class":93},[45,114301,114302],{"class":257}," 200\n",[45,114304,114305,114307,114309,114311],{"class":47,"line":9847},[45,114306,30926],{"class":257},[45,114308,113757],{"class":51},[45,114310,254],{"class":93},[45,114312,47414],{"class":257},[45,114314,114315],{"class":47,"line":9871},[45,114316,2483],{"emptyLinePlaceholder":133},[45,114318,114319,114321,114323,114325,114327,114329,114331,114333,114335,114337,114339,114341,114343,114345,114347,114349,114351,114353,114355,114357],{"class":47,"line":9876},[45,114320,30926],{"class":257},[45,114322,113805],{"class":51},[45,114324,254],{"class":93},[45,114326,113810],{"class":51},[45,114328,113813],{"class":5299},[45,114330,113816],{"class":93},[45,114332,102454],{"class":257},[45,114334,12518],{"class":51},[45,114336,113823],{"class":5299},[45,114338,254],{"class":93},[45,114340,102454],{"class":257},[45,114342,12518],{"class":51},[45,114344,96014],{"class":5299},[45,114346,254],{"class":93},[45,114348,209],{"class":51},[45,114350,286],{"class":257},[45,114352,113840],{"class":51},[45,114354,93551],{"class":5299},[45,114356,254],{"class":93},[45,114358,113847],{"class":51},[45,114360,114361,114363,114365,114367,114369,114371,114373,114375,114377,114379,114381,114383,114385,114387,114389,114391,114393,114395],{"class":47,"line":9881},[45,114362,30926],{"class":257},[45,114364,113866],{"class":51},[45,114366,254],{"class":93},[45,114368,113810],{"class":51},[45,114370,113813],{"class":5299},[45,114372,113816],{"class":93},[45,114374,113877],{"class":51},[45,114376,113823],{"class":5299},[45,114378,254],{"class":93},[45,114380,113877],{"class":51},[45,114382,96014],{"class":5299},[45,114384,254],{"class":93},[45,114386,209],{"class":51},[45,114388,654],{"class":257},[45,114390,113840],{"class":51},[45,114392,93551],{"class":5299},[45,114394,254],{"class":93},[45,114396,113847],{"class":51},[45,114398,114399],{"class":47,"line":9886},[45,114400,2483],{"emptyLinePlaceholder":133},[45,114402,114403,114405,114408],{"class":47,"line":9895},[45,114404,30882],{"class":93},[45,114406,114407],{"class":2046}," _get_obs",[45,114409,114410],{"class":51},"(self) -> np.ndarray:\n",[45,114412,114413,114415,114417,114419,114422,114424],{"class":47,"line":9900},[45,114414,112188],{"class":51},[45,114416,254],{"class":93},[45,114418,38954],{"class":257},[45,114420,114421],{"class":51},".data.site_xpos[",[45,114423,30904],{"class":257},[45,114425,114426],{"class":51},".tip_site_id].copy()\n",[45,114428,114429,114431,114433,114435,114437,114439],{"class":47,"line":9906},[45,114430,112201],{"class":51},[45,114432,254],{"class":93},[45,114434,38954],{"class":257},[45,114436,114421],{"class":51},[45,114438,30904],{"class":257},[45,114440,114441],{"class":51},".target_site_id].copy()\n",[45,114443,114444,114446,114448,114451,114453,114456,114458],{"class":47,"line":9927},[45,114445,110233],{"class":51},[45,114447,254],{"class":93},[45,114449,114450],{"class":51}," np.concatenate([",[45,114452,30904],{"class":257},[45,114454,114455],{"class":51},".data.qpos.copy(), ",[45,114457,30904],{"class":257},[45,114459,114460],{"class":51},".data.qvel.copy(), tip, target])\n",[45,114462,114463,114465],{"class":47,"line":9933},[45,114464,14835],{"class":93},[45,114466,114467],{"class":51}," obs.astype(np.float32)\n",[45,114469,114470],{"class":47,"line":9947},[45,114471,2483],{"emptyLinePlaceholder":133},[45,114473,114474,114476,114479,114481,114483],{"class":47,"line":9953},[45,114475,30882],{"class":93},[45,114477,114478],{"class":2046}," _get_reward",[45,114480,114147],{"class":51},[45,114482,248],{"class":257},[45,114484,3822],{"class":51},[45,114486,114487,114489,114491,114493,114495,114497],{"class":47,"line":9980},[45,114488,112188],{"class":51},[45,114490,254],{"class":93},[45,114492,38954],{"class":257},[45,114494,114421],{"class":51},[45,114496,30904],{"class":257},[45,114498,114499],{"class":51},".tip_site_id]\n",[45,114501,114502,114504,114506,114508,114510,114512],{"class":47,"line":9989},[45,114503,112201],{"class":51},[45,114505,254],{"class":93},[45,114507,38954],{"class":257},[45,114509,114421],{"class":51},[45,114511,30904],{"class":257},[45,114513,114514],{"class":51},".target_site_id]\n",[45,114516,114517,114520,114522,114524,114526],{"class":47,"line":9995},[45,114518,114519],{"class":51},"        dist ",[45,114521,254],{"class":93},[45,114523,111652],{"class":51},[45,114525,94],{"class":93},[45,114527,111657],{"class":51},[45,114529,114530,114533,114535,114537,114539,114542,114544],{"class":47,"line":10003},[45,114531,114532],{"class":51},"        control_cost ",[45,114534,254],{"class":93},[45,114536,112088],{"class":257},[45,114538,6601],{"class":93},[45,114540,114541],{"class":51}," np.sum(np.square(",[45,114543,30904],{"class":257},[45,114545,114546],{"class":51},".data.ctrl))\n",[45,114548,114549,114551,114553,114555,114557,114559,114561],{"class":47,"line":10008},[45,114550,14835],{"class":93},[45,114552,109848],{"class":257},[45,114554,209],{"class":51},[45,114556,94],{"class":93},[45,114558,111647],{"class":51},[45,114560,94],{"class":93},[45,114562,112110],{"class":51},[45,114564,114565],{"class":47,"line":16687},[45,114566,2483],{"emptyLinePlaceholder":133},[45,114568,114569,114571,114574,114577,114579,114582,114584,114586,114588,114590,114592,114595,114598,114600,114602,114604,114606],{"class":47,"line":16693},[45,114570,30882],{"class":93},[45,114572,114573],{"class":2046}," reset",[45,114575,114576],{"class":51},"(self, ",[45,114578,663],{"class":93},[45,114580,114581],{"class":51},", seed: ",[45,114583,212],{"class":257},[45,114585,25192],{"class":93},[45,114587,39014],{"class":257},[45,114589,13647],{"class":93},[45,114591,39014],{"class":257},[45,114593,114594],{"class":51},", options: ",[45,114596,114597],{"class":257},"dict",[45,114599,25192],{"class":93},[45,114601,39014],{"class":257},[45,114603,13647],{"class":93},[45,114605,39014],{"class":257},[45,114607,30867],{"class":51},[45,114609,114610,114612,114615,114618,114620],{"class":47,"line":16716},[45,114611,30898],{"class":257},[45,114613,114614],{"class":51},"().reset(",[45,114616,114617],{"class":5299},"seed",[45,114619,254],{"class":93},[45,114621,114622],{"class":51},"seed)\n",[45,114624,114625,114628,114630,114633,114635],{"class":47,"line":16722},[45,114626,114627],{"class":51},"        mujoco.mj_resetData(",[45,114629,30904],{"class":257},[45,114631,114632],{"class":51},".model, ",[45,114634,30904],{"class":257},[45,114636,114637],{"class":51},".data)\n",[45,114639,114640],{"class":47,"line":16745},[45,114641,2483],{"emptyLinePlaceholder":133},[45,114643,114644,114646,114649,114651,114653,114656,114658,114660,114662,114664,114666,114668,114670,114672,114674,114676,114678],{"class":47,"line":16759},[45,114645,30926],{"class":257},[45,114647,114648],{"class":51},".data.qpos[:] ",[45,114650,254],{"class":93},[45,114652,38954],{"class":257},[45,114654,114655],{"class":51},".np_random.uniform(",[45,114657,113813],{"class":5299},[45,114659,113816],{"class":93},[45,114661,86291],{"class":257},[45,114663,12518],{"class":51},[45,114665,113823],{"class":5299},[45,114667,254],{"class":93},[45,114669,86291],{"class":257},[45,114671,12518],{"class":51},[45,114673,31577],{"class":5299},[45,114675,254],{"class":93},[45,114677,30904],{"class":257},[45,114679,114680],{"class":51},".model.nq)\n",[45,114682,114683,114685,114688,114690],{"class":47,"line":16779},[45,114684,30926],{"class":257},[45,114686,114687],{"class":51},".data.qvel[:] ",[45,114689,254],{"class":93},[45,114691,104812],{"class":257},[45,114693,114694,114697,114699,114701,114703],{"class":47,"line":16785},[45,114695,114696],{"class":51},"        mujoco.mj_forward(",[45,114698,30904],{"class":257},[45,114700,114632],{"class":51},[45,114702,30904],{"class":257},[45,114704,114637],{"class":51},[45,114706,114707],{"class":47,"line":16796},[45,114708,2483],{"emptyLinePlaceholder":133},[45,114710,114711,114713,114715,114717],{"class":47,"line":16819},[45,114712,30926],{"class":257},[45,114714,113757],{"class":51},[45,114716,254],{"class":93},[45,114718,47414],{"class":257},[45,114720,114721,114723,114725],{"class":47,"line":16841},[45,114722,14835],{"class":93},[45,114724,38954],{"class":257},[45,114726,114727],{"class":51},"._get_obs(), {}\n",[45,114729,114730],{"class":47,"line":16846},[45,114731,2483],{"emptyLinePlaceholder":133},[45,114733,114734,114736,114739],{"class":47,"line":16852},[45,114735,30882],{"class":93},[45,114737,114738],{"class":2046}," step",[45,114740,114741],{"class":51},"(self, action):\n",[45,114743,114744,114746,114748,114751,114753,114755],{"class":47,"line":16866},[45,114745,110273],{"class":51},[45,114747,254],{"class":93},[45,114749,114750],{"class":51}," np.asarray(action, ",[45,114752,93551],{"class":5299},[45,114754,254],{"class":93},[45,114756,113847],{"class":51},[45,114758,114759,114761,114763,114765,114767,114770,114772],{"class":47,"line":16879},[45,114760,110273],{"class":51},[45,114762,254],{"class":93},[45,114764,107498],{"class":51},[45,114766,30904],{"class":257},[45,114768,114769],{"class":51},".action_space.low, ",[45,114771,30904],{"class":257},[45,114773,114774],{"class":51},".action_space.high)\n",[45,114776,114777],{"class":47,"line":16884},[45,114778,2483],{"emptyLinePlaceholder":133},[45,114780,114781,114783,114786,114788],{"class":47,"line":16898},[45,114782,30926],{"class":257},[45,114784,114785],{"class":51},".data.ctrl[:] ",[45,114787,254],{"class":93},[45,114789,107521],{"class":51},[45,114791,114792,114794,114796,114798,114800,114802,114804],{"class":47,"line":16903},[45,114793,3486],{"class":93},[45,114795,101552],{"class":51},[45,114797,26126],{"class":93},[45,114799,32524],{"class":257},[45,114801,209],{"class":51},[45,114803,30904],{"class":257},[45,114805,114806],{"class":51},".frame_skip):\n",[45,114808,114809,114812,114814,114816,114818],{"class":47,"line":16909},[45,114810,114811],{"class":51},"            mujoco.mj_step(",[45,114813,30904],{"class":257},[45,114815,114632],{"class":51},[45,114817,30904],{"class":257},[45,114819,114637],{"class":51},[45,114821,114822],{"class":47,"line":16914},[45,114823,2483],{"emptyLinePlaceholder":133},[45,114825,114826,114828,114830,114832],{"class":47,"line":16928},[45,114827,30926],{"class":257},[45,114829,113757],{"class":51},[45,114831,9560],{"class":93},[45,114833,55780],{"class":257},[45,114835,114836],{"class":47,"line":16933},[45,114837,2483],{"emptyLinePlaceholder":133},[45,114839,114840,114842,114844,114846],{"class":47,"line":16938},[45,114841,110233],{"class":51},[45,114843,254],{"class":93},[45,114845,38954],{"class":257},[45,114847,114848],{"class":51},"._get_obs()\n",[45,114850,114851,114853,114855,114857],{"class":47,"line":16952},[45,114852,110338],{"class":51},[45,114854,254],{"class":93},[45,114856,38954],{"class":257},[45,114858,114859],{"class":51},"._get_reward()\n",[45,114861,114862],{"class":47,"line":16964},[45,114863,2483],{"emptyLinePlaceholder":133},[45,114865,114866,114868,114870,114872,114874,114876],{"class":47,"line":16969},[45,114867,112188],{"class":51},[45,114869,254],{"class":93},[45,114871,38954],{"class":257},[45,114873,114421],{"class":51},[45,114875,30904],{"class":257},[45,114877,114499],{"class":51},[45,114879,114880,114882,114884,114886,114888,114890],{"class":47,"line":16982},[45,114881,112201],{"class":51},[45,114883,254],{"class":93},[45,114885,38954],{"class":257},[45,114887,114421],{"class":51},[45,114889,30904],{"class":257},[45,114891,114514],{"class":51},[45,114893,114894,114896,114898,114900,114903,114905],{"class":47,"line":16987},[45,114895,114519],{"class":51},[45,114897,254],{"class":93},[45,114899,109848],{"class":257},[45,114901,114902],{"class":51},"(np.linalg.norm(tip ",[45,114904,94],{"class":93},[45,114906,114907],{"class":51}," target))\n",[45,114909,114910],{"class":47,"line":16992},[45,114911,2483],{"emptyLinePlaceholder":133},[45,114913,114914,114917,114919,114921,114923],{"class":47,"line":16997},[45,114915,114916],{"class":51},"        terminated ",[45,114918,254],{"class":93},[45,114920,113740],{"class":51},[45,114922,1117],{"class":93},[45,114924,113745],{"class":257},[45,114926,114927,114930,114932,114934,114936,114938,114940],{"class":47,"line":17010},[45,114928,114929],{"class":51},"        truncated ",[45,114931,254],{"class":93},[45,114933,38954],{"class":257},[45,114935,113757],{"class":51},[45,114937,1793],{"class":93},[45,114939,38954],{"class":257},[45,114941,113764],{"class":51},[45,114943,114944,114947,114949,114951,114954],{"class":47,"line":17015},[45,114945,114946],{"class":51},"        info ",[45,114948,254],{"class":93},[45,114950,4531],{"class":51},[45,114952,114953],{"class":313},"\"distance\"",[45,114955,114956],{"class":51},": dist}\n",[45,114958,114959,114961],{"class":47,"line":32714},[45,114960,14835],{"class":93},[45,114962,114963],{"class":51}," obs, reward, terminated, truncated, info\n",[45,114965,114966],{"class":47,"line":32720},[45,114967,2483],{"emptyLinePlaceholder":133},[45,114969,114970],{"class":47,"line":32726},[45,114971,2483],{"emptyLinePlaceholder":133},[45,114973,114974,114976,114978,114980,114982],{"class":47,"line":32732},[45,114975,32028],{"class":93},[45,114977,2056],{"class":2046},[45,114979,101449],{"class":51},[45,114981,95737],{"class":257},[45,114983,3822],{"class":51},[45,114985,114986,114989,114991],{"class":47,"line":32738},[45,114987,114988],{"class":51},"    env ",[45,114990,254],{"class":93},[45,114992,114993],{"class":51}," ReacherEnv()\n",[45,114995,114996,114999,115001,115004,115006,115008,115010],{"class":47,"line":32749},[45,114997,114998],{"class":51},"    obs, info ",[45,115000,254],{"class":93},[45,115002,115003],{"class":51}," env.reset(",[45,115005,114617],{"class":5299},[45,115007,254],{"class":93},[45,115009,400],{"class":257},[45,115011,215],{"class":51},[45,115013,115014,115016,115018,115021],{"class":47,"line":32755},[45,115015,31380],{"class":257},[45,115017,209],{"class":51},[45,115019,115020],{"class":313},"\"initial obs shape:\"",[45,115022,115023],{"class":51},", obs.shape)\n",[45,115025,115026,115028,115030,115033],{"class":47,"line":32775},[45,115027,31380],{"class":257},[45,115029,209],{"class":51},[45,115031,115032],{"class":313},"\"initial info:\"",[45,115034,115035],{"class":51},", info)\n",[45,115037,115038],{"class":47,"line":32781},[45,115039,2483],{"emptyLinePlaceholder":133},[45,115041,115042,115044,115046],{"class":47,"line":32792},[45,115043,110204],{"class":51},[45,115045,254],{"class":93},[45,115047,104812],{"class":257},[45,115049,115050,115052,115054,115056,115058,115060,115062],{"class":47,"line":32798},[45,115051,3284],{"class":93},[45,115053,31697],{"class":51},[45,115055,26126],{"class":93},[45,115057,32524],{"class":257},[45,115059,209],{"class":51},[45,115061,907],{"class":257},[45,115063,30867],{"class":51},[45,115065,115066,115068,115070],{"class":47,"line":32804},[45,115067,110273],{"class":51},[45,115069,254],{"class":93},[45,115071,115072],{"class":51}," env.action_space.sample()\n",[45,115074,115075,115078,115080],{"class":47,"line":32810},[45,115076,115077],{"class":51},"        obs, reward, terminated, truncated, info ",[45,115079,254],{"class":93},[45,115081,113466],{"class":51},[45,115083,115084,115086,115088],{"class":47,"line":32816},[45,115085,110348],{"class":51},[45,115087,9560],{"class":93},[45,115089,110353],{"class":51},[45,115091,115092,115094,115096,115098,115100,115103,115105,115107,115110,115112,115114,115117,115119,115121,115124,115126,115128,115130],{"class":47,"line":32822},[45,115093,32532],{"class":257},[45,115095,209],{"class":51},[45,115097,110382],{"class":313},[45,115099,110385],{"class":51},[45,115101,115102],{"class":313},"\"reward:\"",[45,115104,12518],{"class":51},[45,115106,32099],{"class":257},[45,115108,115109],{"class":51},"(reward, ",[45,115111,280],{"class":257},[45,115113,110396],{"class":51},[45,115115,115116],{"class":313},"\"distance:\"",[45,115118,12518],{"class":51},[45,115120,32099],{"class":257},[45,115122,115123],{"class":51},"(info[",[45,115125,114953],{"class":313},[45,115127,112253],{"class":51},[45,115129,280],{"class":257},[45,115131,30578],{"class":51},[45,115133,115134,115136,115139,115142],{"class":47,"line":32828},[45,115135,2580],{"class":93},[45,115137,115138],{"class":51}," terminated ",[45,115140,115141],{"class":93},"or",[45,115143,115144],{"class":51}," truncated:\n",[45,115146,115147],{"class":47,"line":32834},[45,115148,115149],{"class":93},"            break\n",[45,115151,115152],{"class":47,"line":32854},[45,115153,2483],{"emptyLinePlaceholder":133},[45,115155,115156,115158,115160,115162,115164,115166,115168,115170],{"class":47,"line":32860},[45,115157,31380],{"class":257},[45,115159,209],{"class":51},[45,115161,110427],{"class":313},[45,115163,12518],{"class":51},[45,115165,32099],{"class":257},[45,115167,110434],{"class":51},[45,115169,280],{"class":257},[45,115171,30578],{"class":51},[45,115173,115174],{"class":47,"line":32876},[45,115175,2483],{"emptyLinePlaceholder":133},[45,115177,115178],{"class":47,"line":32882},[45,115179,2483],{"emptyLinePlaceholder":133},[45,115181,115182,115184,115186,115188,115190],{"class":47,"line":32896},[45,115183,1614],{"class":93},[45,115185,31301],{"class":257},[45,115187,101610],{"class":93},[45,115189,101613],{"class":313},[45,115191,3822],{"class":51},[45,115193,115194],{"class":47,"line":32902},[45,115195,101620],{"class":51},[10,115197,103621],{},[35,115199,115201],{"className":23905,"code":115200,"language":23907,"meta":40,"style":40},"touch ch8_gym_env.py\n",[42,115202,115203],{"__ignoreMap":40},[45,115204,115205,115207],{"class":47,"line":48},[45,115206,101334],{"class":2046},[45,115208,115209],{"class":313}," ch8_gym_env.py\n",[10,115211,110495],{},[35,115213,115215],{"className":23905,"code":115214,"language":23907,"meta":40,"style":40},"python ch8_gym_env.py\n",[42,115216,115217],{"__ignoreMap":40},[45,115218,115219,115221],{"class":47,"line":48},[45,115220,39],{"class":2046},[45,115222,115209],{"class":313},[176,115224,101623],{"id":101623},[10,115226,115227],{},"继承 Gymnasium 环境：",[35,115229,115231],{"className":37,"code":115230,"language":39,"meta":40,"style":40},"class ReacherEnv(gym.Env):\n",[42,115232,115233],{"__ignoreMap":40},[45,115234,115235,115237,115239,115241,115243,115245,115247],{"class":47,"line":48},[45,115236,14777],{"class":93},[45,115238,114108],{"class":2046},[45,115240,209],{"class":51},[45,115242,113591],{"class":2046},[45,115244,765],{"class":51},[45,115246,114117],{"class":2046},[45,115248,30867],{"class":51},[10,115250,115251],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[10,115253,115254],{},"初始化模型：",[35,115256,115258],{"className":37,"code":115257,"language":39,"meta":40,"style":40},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[42,115259,115260,115274],{"__ignoreMap":40},[45,115261,115262,115264,115266,115268,115270,115272],{"class":47,"line":48},[45,115263,30904],{"class":257},[45,115265,114168],{"class":51},[45,115267,254],{"class":93},[45,115269,101463],{"class":51},[45,115271,101365],{"class":257},[45,115273,215],{"class":51},[45,115275,115276,115278,115280,115282,115284,115286],{"class":47,"line":125},[45,115277,30904],{"class":257},[45,115279,114183],{"class":51},[45,115281,254],{"class":93},[45,115283,114188],{"class":51},[45,115285,30904],{"class":257},[45,115287,114193],{"class":51},[10,115289,115290,115291,115293],{},"这和前面章节一样，只是现在放到了类的 ",[42,115292,30910],{}," 里。",[10,115295,115296],{},"缓存 site ID：",[35,115298,115300],{"className":37,"code":115299,"language":39,"meta":40,"style":40},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[42,115301,115302,115316],{"__ignoreMap":40},[45,115303,115304,115306,115308,115310,115312,115314],{"class":47,"line":48},[45,115305,30904],{"class":257},[45,115307,114204],{"class":51},[45,115309,254],{"class":93},[45,115311,114209],{"class":51},[45,115313,89635],{"class":257},[45,115315,215],{"class":51},[45,115317,115318,115320,115322,115324,115326,115328],{"class":47,"line":125},[45,115319,30904],{"class":257},[45,115321,114225],{"class":51},[45,115323,254],{"class":93},[45,115325,114209],{"class":51},[45,115327,89635],{"class":257},[45,115329,215],{"class":51},[10,115331,115332],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[10,115334,115335],{},"reset：",[35,115337,115339],{"className":37,"code":115338,"language":39,"meta":40,"style":40},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[42,115340,115341],{"__ignoreMap":40},[45,115342,115343,115345,115347,115349,115351,115353,115355,115357,115359,115361,115363,115365,115367,115369,115371,115373,115375],{"class":47,"line":48},[45,115344,32028],{"class":93},[45,115346,114573],{"class":2046},[45,115348,114576],{"class":51},[45,115350,663],{"class":93},[45,115352,114581],{"class":51},[45,115354,212],{"class":257},[45,115356,25192],{"class":93},[45,115358,39014],{"class":257},[45,115360,13647],{"class":93},[45,115362,39014],{"class":257},[45,115364,114594],{"class":51},[45,115366,114597],{"class":257},[45,115368,25192],{"class":93},[45,115370,39014],{"class":257},[45,115372,13647],{"class":93},[45,115374,39014],{"class":257},[45,115376,30867],{"class":51},[10,115378,115379,115381],{},[42,115380,70137],{}," 做四件事：",[159,115383,115384,115387,115390,115393],{},[162,115385,115386],{},"设置随机种子。",[162,115388,115389],{},"重置 MuJoCo data。",[162,115391,115392],{},"随机初始化关节角。",[162,115394,115395],{},"返回初始观测和 info。",[10,115397,115398],{},"step：",[35,115400,115402],{"className":37,"code":115401,"language":39,"meta":40,"style":40},"def step(self, action):\n",[42,115403,115404],{"__ignoreMap":40},[45,115405,115406,115408,115410],{"class":47,"line":48},[45,115407,32028],{"class":93},[45,115409,114738],{"class":2046},[45,115411,114741],{"class":51},[10,115413,115414,115416],{},[42,115415,107185],{}," 做六件事：",[159,115418,115419,115422,115428,115431,115434,115437],{},[162,115420,115421],{},"检查并裁剪 action。",[162,115423,115424,115425,28468],{},"写入 ",[42,115426,115427],{},"self.data.ctrl",[162,115429,115430],{},"连续推进若干个 MuJoCo 物理步。",[162,115432,115433],{},"计算新观测。",[162,115435,115436],{},"计算奖励和结束条件。",[162,115438,115439],{},"返回 Gymnasium 标准五元组。",[176,115441,101759],{"id":101759},[35,115443,115445],{"className":37,"code":115444,"language":39,"meta":40,"style":40},"import gymnasium as gym\n",[42,115446,115447],{"__ignoreMap":40},[45,115448,115449,115451,115453,115455],{"class":47,"line":48},[45,115450,30473],{"class":93},[45,115452,113946],{"class":51},[45,115454,31464],{"class":93},[45,115456,113951],{"class":51},[10,115458,115459,115460,115462,115463,115466],{},"导入 Gymnasium，并起别名 ",[42,115461,113591],{},"。后面写 ",[42,115464,115465],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[35,115468,115470],{"className":37,"code":115469,"language":39,"meta":40,"style":40},"from gymnasium import spaces\n",[42,115471,115472],{"__ignoreMap":40},[45,115473,115474,115476,115478,115480],{"class":47,"line":48},[45,115475,30818],{"class":93},[45,115477,113946],{"class":51},[45,115479,30473],{"class":93},[45,115481,113978],{"class":51},[10,115483,115484,115485,115488],{},"导入空间定义工具。",[42,115486,115487],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[35,115490,115491],{"className":37,"code":115230,"language":39,"meta":40,"style":40},[42,115492,115493],{"__ignoreMap":40},[45,115494,115495,115497,115499,115501,115503,115505,115507],{"class":47,"line":48},[45,115496,14777],{"class":93},[45,115498,114108],{"class":2046},[45,115500,209],{"class":51},[45,115502,113591],{"class":2046},[45,115504,765],{"class":51},[45,115506,114117],{"class":2046},[45,115508,30867],{"class":51},[10,115510,115511,115512,115515,115516,115518,115519,101069,115521,115523],{},"定义一个类，名字叫 ",[42,115513,115514],{},"ReacherEnv","。括号里的 ",[42,115517,115465],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[42,115520,70137],{},[42,115522,107185],{}," 这两个核心方法。",[35,115525,115527],{"className":37,"code":115526,"language":39,"meta":40,"style":40},"metadata = {\"render_modes\": []}\n",[42,115528,115529],{"__ignoreMap":40},[45,115530,115531,115534,115536,115538,115540],{"class":47,"line":48},[45,115532,115533],{"class":51},"metadata ",[45,115535,254],{"class":93},[45,115537,4531],{"class":51},[45,115539,114131],{"class":313},[45,115541,114134],{"class":51},[10,115543,115544],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[35,115546,115548],{"className":37,"code":115547,"language":39,"meta":40,"style":40},"def __init__(self) -> None:\n",[42,115549,115550],{"__ignoreMap":40},[45,115551,115552,115554,115556,115558,115560],{"class":47,"line":48},[45,115553,32028],{"class":93},[45,115555,30885],{"class":257},[45,115557,114147],{"class":51},[45,115559,95737],{"class":257},[45,115561,3822],{"class":51},[10,115563,115564,115566,115567,28468],{},[42,115565,30910],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[42,115568,115569],{},"env = ReacherEnv()",[35,115571,115573],{"className":37,"code":115572,"language":39,"meta":40,"style":40},"super().__init__()\n",[42,115574,115575],{"__ignoreMap":40},[45,115576,115577,115580,115582,115584],{"class":47,"line":48},[45,115578,115579],{"class":257},"super",[45,115581,17344],{"class":51},[45,115583,30910],{"class":257},[45,115585,2059],{"class":51},[10,115587,115588,115589,115591],{},"调用父类 ",[42,115590,115465],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[35,115593,115594],{"className":37,"code":115257,"language":39,"meta":40,"style":40},[42,115595,115596,115610],{"__ignoreMap":40},[45,115597,115598,115600,115602,115604,115606,115608],{"class":47,"line":48},[45,115599,30904],{"class":257},[45,115601,114168],{"class":51},[45,115603,254],{"class":93},[45,115605,101463],{"class":51},[45,115607,101365],{"class":257},[45,115609,215],{"class":51},[45,115611,115612,115614,115616,115618,115620,115622],{"class":47,"line":125},[45,115613,30904],{"class":257},[45,115615,114183],{"class":51},[45,115617,254],{"class":93},[45,115619,114188],{"class":51},[45,115621,30904],{"class":257},[45,115623,114193],{"class":51},[10,115625,115626,115627,115629,115630,101069,115633,115636],{},"把 MuJoCo 模型和状态保存到 ",[42,115628,30904],{}," 上。",[42,115631,115632],{},"self.model",[42,115634,115635],{},"self.data"," 表示这个环境对象自己的模型和状态。",[35,115638,115639],{"className":37,"code":115299,"language":39,"meta":40,"style":40},[42,115640,115641,115655],{"__ignoreMap":40},[45,115642,115643,115645,115647,115649,115651,115653],{"class":47,"line":48},[45,115644,30904],{"class":257},[45,115646,114204],{"class":51},[45,115648,254],{"class":93},[45,115650,114209],{"class":51},[45,115652,89635],{"class":257},[45,115654,215],{"class":51},[45,115656,115657,115659,115661,115663,115665,115667],{"class":47,"line":125},[45,115658,30904],{"class":257},[45,115660,114225],{"class":51},[45,115662,254],{"class":93},[45,115664,114209],{"class":51},[45,115666,89635],{"class":257},[45,115668,215],{"class":51},[10,115670,115671,115672,101069,115675,115678],{},"提前查好 tip 和 target 的 site ID。这样 ",[42,115673,115674],{},"_get_obs",[42,115676,115677],{},"_get_reward"," 里就不用每次按名字查找。",[35,115680,115682],{"className":37,"code":115681,"language":39,"meta":40,"style":40},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[42,115683,115684,115694,115704],{"__ignoreMap":40},[45,115685,115686,115688,115690,115692],{"class":47,"line":48},[45,115687,30904],{"class":257},[45,115689,113918],{"class":51},[45,115691,254],{"class":93},[45,115693,54508],{"class":257},[45,115695,115696,115698,115700,115702],{"class":47,"line":125},[45,115697,30904],{"class":257},[45,115699,114297],{"class":51},[45,115701,254],{"class":93},[45,115703,114302],{"class":257},[45,115705,115706,115708,115710,115712],{"class":47,"line":1262},[45,115707,30904],{"class":257},[45,115709,113757],{"class":51},[45,115711,254],{"class":93},[45,115713,47414],{"class":257},[10,115715,115716,115719,115720,115723,115724,115727],{},[42,115717,115718],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[42,115721,115722],{},"max_steps"," 是一个 episode 最多运行多少步。",[42,115725,115726],{},"steps"," 记录当前 episode 已经走了多少步。",[35,115729,115730],{"className":37,"code":113796,"language":39,"meta":40,"style":40},[42,115731,115732],{"__ignoreMap":40},[45,115733,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772],{"class":47,"line":48},[45,115735,30904],{"class":257},[45,115737,113805],{"class":51},[45,115739,254],{"class":93},[45,115741,113810],{"class":51},[45,115743,113813],{"class":5299},[45,115745,113816],{"class":93},[45,115747,102454],{"class":257},[45,115749,12518],{"class":51},[45,115751,113823],{"class":5299},[45,115753,254],{"class":93},[45,115755,102454],{"class":257},[45,115757,12518],{"class":51},[45,115759,96014],{"class":5299},[45,115761,254],{"class":93},[45,115763,209],{"class":51},[45,115765,286],{"class":257},[45,115767,113840],{"class":51},[45,115769,93551],{"class":5299},[45,115771,254],{"class":93},[45,115773,113847],{"class":51},[10,115775,115776,115777,115780,115781,101069,115784,115787],{},"定义动作空间。",[42,115778,115779],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[42,115782,115783],{},"low=-1.0",[42,115785,115786],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[35,115789,115790],{"className":37,"code":113857,"language":39,"meta":40,"style":40},[42,115791,115792],{"__ignoreMap":40},[45,115793,115794,115796,115798,115800,115802,115804,115806,115808,115810,115812,115814,115816,115818,115820,115822,115824,115826,115828],{"class":47,"line":48},[45,115795,30904],{"class":257},[45,115797,113866],{"class":51},[45,115799,254],{"class":93},[45,115801,113810],{"class":51},[45,115803,113813],{"class":5299},[45,115805,113816],{"class":93},[45,115807,113877],{"class":51},[45,115809,113823],{"class":5299},[45,115811,254],{"class":93},[45,115813,113877],{"class":51},[45,115815,96014],{"class":5299},[45,115817,254],{"class":93},[45,115819,209],{"class":51},[45,115821,654],{"class":257},[45,115823,113840],{"class":51},[45,115825,93551],{"class":5299},[45,115827,254],{"class":93},[45,115829,113847],{"class":51},[10,115831,115832,115833,115836,115837,115840],{},"定义观测空间。",[42,115834,115835],{},"shape=(10,)"," 表示观测是 10 个数。",[42,115838,115839],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[35,115842,115844],{"className":37,"code":115843,"language":39,"meta":40,"style":40},"def _get_obs(self) -> np.ndarray:\n",[42,115845,115846],{"__ignoreMap":40},[45,115847,115848,115850,115852],{"class":47,"line":48},[45,115849,32028],{"class":93},[45,115851,114407],{"class":2046},[45,115853,114410],{"class":51},[10,115855,115856,115857,115859],{},"定义内部函数，用来生成观测。函数名前面的 ",[42,115858,1199],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[35,115861,115863],{"className":37,"code":115862,"language":39,"meta":40,"style":40},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[42,115864,115865,115879],{"__ignoreMap":40},[45,115866,115867,115869,115871,115873,115875,115877],{"class":47,"line":48},[45,115868,111619],{"class":51},[45,115870,254],{"class":93},[45,115872,38954],{"class":257},[45,115874,114421],{"class":51},[45,115876,30904],{"class":257},[45,115878,114426],{"class":51},[45,115880,115881,115883,115885,115887,115889,115891],{"class":47,"line":125},[45,115882,111629],{"class":51},[45,115884,254],{"class":93},[45,115886,38954],{"class":257},[45,115888,114421],{"class":51},[45,115890,30904],{"class":257},[45,115892,114441],{"class":51},[10,115894,115895],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[35,115897,115899],{"className":37,"code":115898,"language":39,"meta":40,"style":40},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[42,115900,115901,115917],{"__ignoreMap":40},[45,115902,115903,115905,115907,115909,115911,115913,115915],{"class":47,"line":48},[45,115904,110905],{"class":51},[45,115906,254],{"class":93},[45,115908,114450],{"class":51},[45,115910,30904],{"class":257},[45,115912,114455],{"class":51},[45,115914,30904],{"class":257},[45,115916,114460],{"class":51},[45,115918,115919,115921],{"class":47,"line":125},[45,115920,17129],{"class":93},[45,115922,114467],{"class":51},[10,115924,115925,115926,115929,115930,115932],{},"拼接观测，并转换成 ",[42,115927,115928],{},"float32","。很多强化学习库默认使用 ",[42,115931,115928],{},"，所以这里主动转换。",[35,115934,115935],{"className":37,"code":115338,"language":39,"meta":40,"style":40},[42,115936,115937],{"__ignoreMap":40},[45,115938,115939,115941,115943,115945,115947,115949,115951,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971],{"class":47,"line":48},[45,115940,32028],{"class":93},[45,115942,114573],{"class":2046},[45,115944,114576],{"class":51},[45,115946,663],{"class":93},[45,115948,114581],{"class":51},[45,115950,212],{"class":257},[45,115952,25192],{"class":93},[45,115954,39014],{"class":257},[45,115956,13647],{"class":93},[45,115958,39014],{"class":257},[45,115960,114594],{"class":51},[45,115962,114597],{"class":257},[45,115964,25192],{"class":93},[45,115966,39014],{"class":257},[45,115968,13647],{"class":93},[45,115970,39014],{"class":257},[45,115972,30867],{"class":51},[10,115974,115975,115976,115978,115979,115982],{},"定义 reset。",[42,115977,114617],{}," 用来控制随机数，保证实验可以复现。",[42,115980,115981],{},"options"," 用来接收额外配置，本章暂时不用。",[35,115984,115986],{"className":37,"code":115985,"language":39,"meta":40,"style":40},"super().reset(seed=seed)\n",[42,115987,115988],{"__ignoreMap":40},[45,115989,115990,115992,115994,115996,115998],{"class":47,"line":48},[45,115991,115579],{"class":257},[45,115993,114614],{"class":51},[45,115995,114617],{"class":5299},[45,115997,254],{"class":93},[45,115999,114622],{"class":51},[10,116001,116002,116003,116006],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[42,116004,116005],{},"self.np_random"," 生成可复现的随机数。",[35,116008,116010],{"className":37,"code":116009,"language":39,"meta":40,"style":40},"mujoco.mj_resetData(self.model, self.data)\n",[42,116011,116012],{"__ignoreMap":40},[45,116013,116014,116017,116019,116021,116023],{"class":47,"line":48},[45,116015,116016],{"class":51},"mujoco.mj_resetData(",[45,116018,30904],{"class":257},[45,116020,114632],{"class":51},[45,116022,30904],{"class":257},[45,116024,114637],{"class":51},[10,116026,116027],{},"把 MuJoCo 状态重置到默认状态。",[35,116029,116031],{"className":37,"code":116030,"language":39,"meta":40,"style":40},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[42,116032,116033],{"__ignoreMap":40},[45,116034,116035,116037,116039,116041,116043,116045,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065,116067],{"class":47,"line":48},[45,116036,30904],{"class":257},[45,116038,114648],{"class":51},[45,116040,254],{"class":93},[45,116042,38954],{"class":257},[45,116044,114655],{"class":51},[45,116046,113813],{"class":5299},[45,116048,113816],{"class":93},[45,116050,86291],{"class":257},[45,116052,12518],{"class":51},[45,116054,113823],{"class":5299},[45,116056,254],{"class":93},[45,116058,86291],{"class":257},[45,116060,12518],{"class":51},[45,116062,31577],{"class":5299},[45,116064,254],{"class":93},[45,116066,30904],{"class":257},[45,116068,114680],{"class":51},[10,116070,115392,116071,116074,116075,116078,116079,116081],{},[42,116072,116073],{},"[:]"," 表示修改整个数组。",[42,116076,116077],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[42,116080,102201],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[35,116083,116085],{"className":37,"code":116084,"language":39,"meta":40,"style":40},"self.data.qvel[:] = 0.0\n",[42,116086,116087],{"__ignoreMap":40},[45,116088,116089,116091,116093,116095],{"class":47,"line":48},[45,116090,30904],{"class":257},[45,116092,114687],{"class":51},[45,116094,254],{"class":93},[45,116096,104812],{"class":257},[10,116098,116099],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[35,116101,116103],{"className":37,"code":116102,"language":39,"meta":40,"style":40},"self.steps = 0\nreturn self._get_obs(), {}\n",[42,116104,116105,116115],{"__ignoreMap":40},[45,116106,116107,116109,116111,116113],{"class":47,"line":48},[45,116108,30904],{"class":257},[45,116110,113757],{"class":51},[45,116112,254],{"class":93},[45,116114,47414],{"class":257},[45,116116,116117,116119,116121],{"class":47,"line":125},[45,116118,17129],{"class":93},[45,116120,38954],{"class":257},[45,116122,114727],{"class":51},[10,116124,116125],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[35,116127,116128],{"className":37,"code":115401,"language":39,"meta":40,"style":40},[42,116129,116130],{"__ignoreMap":40},[45,116131,116132,116134,116136],{"class":47,"line":48},[45,116133,32028],{"class":93},[45,116135,114738],{"class":2046},[45,116137,114741],{"class":51},[10,116139,116140],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[35,116142,116144],{"className":37,"code":116143,"language":39,"meta":40,"style":40},"action = np.asarray(action, dtype=np.float32)\n",[42,116145,116146],{"__ignoreMap":40},[45,116147,116148,116150,116152,116154,116156,116158],{"class":47,"line":48},[45,116149,107493],{"class":51},[45,116151,254],{"class":93},[45,116153,114750],{"class":51},[45,116155,93551],{"class":5299},[45,116157,254],{"class":93},[45,116159,113847],{"class":51},[10,116161,116162,116163,28468],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[42,116164,115928],{},[35,116166,116168],{"className":37,"code":116167,"language":39,"meta":40,"style":40},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[42,116169,116170],{"__ignoreMap":40},[45,116171,116172,116174,116176,116178,116180,116182,116184],{"class":47,"line":48},[45,116173,107493],{"class":51},[45,116175,254],{"class":93},[45,116177,107498],{"class":51},[45,116179,30904],{"class":257},[45,116181,114769],{"class":51},[45,116183,30904],{"class":257},[45,116185,114774],{"class":51},[10,116187,116188],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[35,116190,116192],{"className":37,"code":116191,"language":39,"meta":40,"style":40},"self.data.ctrl[:] = action\n",[42,116193,116194],{"__ignoreMap":40},[45,116195,116196,116198,116200,116202],{"class":47,"line":48},[45,116197,30904],{"class":257},[45,116199,114785],{"class":51},[45,116201,254],{"class":93},[45,116203,107521],{"class":51},[10,116205,116206],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[35,116208,116210],{"className":37,"code":116209,"language":39,"meta":40,"style":40},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[42,116211,116212,116228],{"__ignoreMap":40},[45,116213,116214,116216,116218,116220,116222,116224,116226],{"class":47,"line":48},[45,116215,3108],{"class":93},[45,116217,101552],{"class":51},[45,116219,26126],{"class":93},[45,116221,32524],{"class":257},[45,116223,209],{"class":51},[45,116225,30904],{"class":257},[45,116227,114806],{"class":51},[45,116229,116230,116233,116235,116237,116239],{"class":47,"line":125},[45,116231,116232],{"class":51},"    mujoco.mj_step(",[45,116234,30904],{"class":257},[45,116236,114632],{"class":51},[45,116238,30904],{"class":257},[45,116240,114637],{"class":51},[10,116242,116243,116244,116247,116248,116250,116251,28468],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[42,116245,116246],{},"frame_skip=5","，所以外部调用一次 ",[42,116249,113928],{},"，内部实际执行 5 次 ",[42,116252,101266],{},[35,116254,116256],{"className":37,"code":116255,"language":39,"meta":40,"style":40},"self.steps += 1\n",[42,116257,116258],{"__ignoreMap":40},[45,116259,116260,116262,116264,116266],{"class":47,"line":48},[45,116261,30904],{"class":257},[45,116263,113757],{"class":51},[45,116265,9560],{"class":93},[45,116267,55780],{"class":257},[10,116269,116270],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[35,116272,116274],{"className":37,"code":116273,"language":39,"meta":40,"style":40},"obs = self._get_obs()\nreward = self._get_reward()\n",[42,116275,116276,116286],{"__ignoreMap":40},[45,116277,116278,116280,116282,116284],{"class":47,"line":48},[45,116279,110905],{"class":51},[45,116281,254],{"class":93},[45,116283,38954],{"class":257},[45,116285,114848],{"class":51},[45,116287,116288,116290,116292,116294],{"class":47,"line":125},[45,116289,111056],{"class":51},[45,116291,254],{"class":93},[45,116293,38954],{"class":257},[45,116295,114859],{"class":51},[10,116297,116298],{},"计算新的观测和奖励。",[35,116300,116302],{"className":37,"code":116301,"language":39,"meta":40,"style":40},"dist = float(np.linalg.norm(tip - target))\n",[42,116303,116304],{"__ignoreMap":40},[45,116305,116306,116308,116310,116312,116314,116316],{"class":47,"line":48},[45,116307,111647],{"class":51},[45,116309,254],{"class":93},[45,116311,109848],{"class":257},[45,116313,114902],{"class":51},[45,116315,94],{"class":93},[45,116317,114907],{"class":51},[10,116319,116320],{},"计算末端到目标的距离，并转换成 Python float。",[35,116322,116323],{"className":37,"code":113728,"language":39,"meta":40,"style":40},[42,116324,116325,116337],{"__ignoreMap":40},[45,116326,116327,116329,116331,116333,116335],{"class":47,"line":48},[45,116328,113735],{"class":51},[45,116330,254],{"class":93},[45,116332,113740],{"class":51},[45,116334,1117],{"class":93},[45,116336,113745],{"class":257},[45,116338,116339,116341,116343,116345,116347,116349,116351],{"class":47,"line":125},[45,116340,113750],{"class":51},[45,116342,254],{"class":93},[45,116344,38954],{"class":257},[45,116346,113757],{"class":51},[45,116348,1793],{"class":93},[45,116350,38954],{"class":257},[45,116352,113764],{"class":51},[10,116354,116355],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[35,116357,116359],{"className":37,"code":116358,"language":39,"meta":40,"style":40},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[42,116360,116361,116374],{"__ignoreMap":40},[45,116362,116363,116366,116368,116370,116372],{"class":47,"line":48},[45,116364,116365],{"class":51},"info ",[45,116367,254],{"class":93},[45,116369,4531],{"class":51},[45,116371,114953],{"class":313},[45,116373,114956],{"class":51},[45,116375,116376,116378],{"class":47,"line":125},[45,116377,17129],{"class":93},[45,116379,114963],{"class":51},[10,116381,116382,116385],{},[42,116383,116384],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[35,116387,116389],{"className":37,"code":116388,"language":39,"meta":40,"style":40},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[42,116390,116391,116400],{"__ignoreMap":40},[45,116392,116393,116396,116398],{"class":47,"line":48},[45,116394,116395],{"class":51},"env ",[45,116397,254],{"class":93},[45,116399,114993],{"class":51},[45,116401,116402,116404,116406,116408,116410,116412,116414],{"class":47,"line":125},[45,116403,113451],{"class":51},[45,116405,254],{"class":93},[45,116407,115003],{"class":51},[45,116409,114617],{"class":5299},[45,116411,254],{"class":93},[45,116413,400],{"class":257},[45,116415,215],{"class":51},[10,116417,116418,116419,116422],{},"创建环境并重置。",[42,116420,116421],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[35,116424,116426],{"className":37,"code":116425,"language":39,"meta":40,"style":40},"action = env.action_space.sample()\n",[42,116427,116428],{"__ignoreMap":40},[45,116429,116430,116432,116434],{"class":47,"line":48},[45,116431,107493],{"class":51},[45,116433,254],{"class":93},[45,116435,115072],{"class":51},[10,116437,116438],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[30,116440,102367],{"id":102366},[10,116442,105535],{},[35,116444,116447],{"className":116445,"code":116446,"language":5270,"meta":40},[5268],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[42,116448,116446],{"__ignoreMap":40},[10,116450,116451],{},"这个环境已经具备强化学习环境的基本结构。",[10,116453,116454],{},"主函数里使用随机动作：",[35,116456,116457],{"className":37,"code":116425,"language":39,"meta":40,"style":40},[42,116458,116459],{"__ignoreMap":40},[45,116460,116461,116463,116465],{"class":47,"line":48},[45,116462,107493],{"class":51},[45,116464,254],{"class":93},[45,116466,115072],{"class":51},[10,116468,116469],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[30,116471,102399],{"id":102398},[159,116473,116474,116477,116483,116492,116501,116510,116516],{},[162,116475,116476],{},"运行程序。",[162,116478,116479,116480,28468],{},"确认 ",[42,116481,116482],{},"obs.shape == (10,)",[162,116484,111232,116485,116488,116489,28468],{},[42,116486,116487],{},"env.action_space","，应类似 ",[42,116490,116491],{},"Box(-1.0, 1.0, (2,), float32)",[162,116493,105636,116494,116497,116498,28468],{},[42,116495,116496],{},"self.max_steps = 10","，确认环境会更快 ",[42,116499,116500],{},"truncated=True",[162,116502,102462,116503,102465,116506,116509],{},[42,116504,116505],{},"terminated = dist \u003C 0.05",[42,116507,116508],{},"dist \u003C 0.2","，观察是否更容易结束。",[162,116511,102462,116512,116515],{},[42,116513,116514],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[162,116517,116518,116519,116521,116522,116525],{},"在 ",[42,116520,116384],{}," 里加入 ",[42,116523,116524],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[30,116527,102504],{"id":102503},[176,116529,116531],{"id":116530},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[10,116533,116534,116535,116537],{},"Gymnasium 的 ",[42,116536,107185],{}," 返回 5 个值:",[35,116539,116541],{"className":37,"code":116540,"language":39,"meta":40,"style":40},"obs, reward, terminated, truncated, info\n",[42,116542,116543],{"__ignoreMap":40},[45,116544,116545],{"class":47,"line":48},[45,116546,116540],{"class":51},[10,116548,116549],{},"不是旧 Gym 的 4 个值。",[176,116551,116553,116556],{"id":116552},"datactrl-action-维度错误",[42,116554,116555],{},"data.ctrl[:] = action"," 维度错误",[10,116558,102574],{},[35,116560,116562],{"className":37,"code":116561,"language":39,"meta":40,"style":40},"print(self.model.nu)\nprint(action.shape)\n",[42,116563,116564,116575],{"__ignoreMap":40},[45,116565,116566,116568,116570,116572],{"class":47,"line":48},[45,116567,30496],{"class":257},[45,116569,209],{"class":51},[45,116571,30904],{"class":257},[45,116573,116574],{"class":51},".model.nu)\n",[45,116576,116577,116579],{"class":47,"line":125},[45,116578,30496],{"class":257},[45,116580,116581],{"class":51},"(action.shape)\n",[10,116583,116584],{},"两者必须匹配。",[176,116586,116588],{"id":116587},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[10,116590,102513],{},[35,116592,116594],{"className":37,"code":116593,"language":39,"meta":40,"style":40},"mujoco.mj_forward(self.model, self.data)\n",[42,116595,116596],{"__ignoreMap":40},[45,116597,116598,116601,116603,116605,116607],{"class":47,"line":48},[45,116599,116600],{"class":51},"mujoco.mj_forward(",[45,116602,30904],{"class":257},[45,116604,114632],{"class":51},[45,116606,30904],{"class":257},[45,116608,114637],{"class":51},[176,116610,116612,116614],{"id":116611},"observation_space-维度和-obs-不一致",[42,116613,113651],{}," 维度和 obs 不一致",[10,116616,102626],{},[35,116618,116620],{"className":37,"code":116619,"language":39,"meta":40,"style":40},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[42,116621,116622,116632,116639],{"__ignoreMap":40},[45,116623,116624,116626,116628,116630],{"class":47,"line":48},[45,116625,110905],{"class":51},[45,116627,254],{"class":93},[45,116629,38954],{"class":257},[45,116631,114848],{"class":51},[45,116633,116634,116636],{"class":47,"line":125},[45,116635,30496],{"class":257},[45,116637,116638],{"class":51},"(obs.shape)\n",[45,116640,116641,116643,116645,116647],{"class":47,"line":1262},[45,116642,30496],{"class":257},[45,116644,209],{"class":51},[45,116646,30904],{"class":257},[45,116648,116649],{"class":51},".observation_space.shape)\n",[10,116651,116652],{},"两者必须一致。本章观测是：",[35,116654,116657],{"className":116655,"code":116656,"language":5270,"meta":40},[5268],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[42,116658,116656],{"__ignoreMap":40},[176,116660,116662],{"id":116661},"action-超过范围","action 超过范围",[10,116664,116665],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[35,116667,116668],{"className":37,"code":116167,"language":39,"meta":40,"style":40},[42,116669,116670],{"__ignoreMap":40},[45,116671,116672,116674,116676,116678,116680,116682,116684],{"class":47,"line":48},[45,116673,107493],{"class":51},[45,116675,254],{"class":93},[45,116677,107498],{"class":51},[45,116679,30904],{"class":257},[45,116681,114769],{"class":51},[45,116683,30904],{"class":257},[45,116685,114774],{"class":51},[10,116687,116688,116689,28468],{},"这能避免无效动作直接写入 ",[42,116690,101127],{},[176,116692,116694],{"id":116693},"忘记返回-info","忘记返回 info",[10,116696,116534,116697,101069,116699,116701],{},[42,116698,70137],{},[42,116700,107185],{}," 都会返回 info：",[35,116703,116704],{"className":37,"code":113444,"language":39,"meta":40,"style":40},[42,116705,116706,116714],{"__ignoreMap":40},[45,116707,116708,116710,116712],{"class":47,"line":48},[45,116709,113451],{"class":51},[45,116711,254],{"class":93},[45,116713,113456],{"class":51},[45,116715,116716,116718,116720],{"class":47,"line":125},[45,116717,113461],{"class":51},[45,116719,254],{"class":93},[45,116721,113466],{"class":51},[10,116723,116724,116725,28468],{},"即使暂时没有额外信息，也返回 ",[42,116726,32540],{},[30,116728,116730],{"id":116729},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[10,116732,116733],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[159,116735,116736,116739,116742,116745,116748,116751],{},[162,116737,116738],{},"更稳定的 reward。",[162,116740,116741],{},"合理的 episode 长度。",[162,116743,116744],{},"可重复的随机目标采样。",[162,116746,116747],{},"render 接口。",[162,116749,116750],{},"环境注册代码。",[162,116752,116753],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[10,116755,116756],{},"如果只是自己写训练循环，最小形式是：",[35,116758,116760],{"className":37,"code":116759,"language":39,"meta":40,"style":40},"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",[42,116761,116762,116770,116786,116790,116806,116815,116824,116834],{"__ignoreMap":40},[45,116763,116764,116766,116768],{"class":47,"line":48},[45,116765,116395],{"class":51},[45,116767,254],{"class":93},[45,116769,114993],{"class":51},[45,116771,116772,116774,116776,116778,116780,116782,116784],{"class":47,"line":125},[45,116773,113451],{"class":51},[45,116775,254],{"class":93},[45,116777,115003],{"class":51},[45,116779,114617],{"class":5299},[45,116781,254],{"class":93},[45,116783,400],{"class":257},[45,116785,215],{"class":51},[45,116787,116788],{"class":47,"line":1262},[45,116789,2483],{"emptyLinePlaceholder":133},[45,116791,116792,116794,116796,116798,116800,116802,116804],{"class":47,"line":1277},[45,116793,3108],{"class":93},[45,116795,101552],{"class":51},[45,116797,26126],{"class":93},[45,116799,32524],{"class":257},[45,116801,209],{"class":51},[45,116803,6493],{"class":257},[45,116805,30867],{"class":51},[45,116807,116808,116811,116813],{"class":47,"line":1283},[45,116809,116810],{"class":51},"    action ",[45,116812,254],{"class":93},[45,116814,115072],{"class":51},[45,116816,116817,116820,116822],{"class":47,"line":1297},[45,116818,116819],{"class":51},"    obs, reward, terminated, truncated, info ",[45,116821,254],{"class":93},[45,116823,113466],{"class":51},[45,116825,116826,116828,116830,116832],{"class":47,"line":1303},[45,116827,3184],{"class":93},[45,116829,115138],{"class":51},[45,116831,115141],{"class":93},[45,116833,115144],{"class":51},[45,116835,116836,116839,116841],{"class":47,"line":1394},[45,116837,116838],{"class":51},"        obs, info ",[45,116840,254],{"class":93},[45,116842,113456],{"class":51},[30,116844,116846],{"id":116845},"_9本章小结","9.本章小结",[10,116848,116849],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[35,116851,116854],{"className":116852,"code":116853,"language":5270,"meta":40},[5268],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[42,116855,116853],{"__ignoreMap":40},[10,116857,116858],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[121,116860,116861],{},"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":40,"searchDepth":125,"depth":125,"links":116863},[116864,116865,116866,116873,116877,116878,116879,116889,116890],{"id":100697,"depth":125,"text":100698},{"id":100820,"depth":125,"text":100821},{"id":101095,"depth":125,"text":101096,"children":116867},[116868,116870,116872],{"id":113675,"depth":1262,"text":116869},"terminated 和 truncated 的区别",{"id":113778,"depth":1262,"text":116871},"observation_space 和 action_space",{"id":113905,"depth":1262,"text":113906},{"id":101303,"depth":125,"text":101304,"children":116874},[116875,116876],{"id":101623,"depth":1262,"text":101623},{"id":101759,"depth":1262,"text":101759},{"id":102366,"depth":125,"text":102367},{"id":102398,"depth":125,"text":102399},{"id":102503,"depth":125,"text":102504,"children":116880},[116881,116882,116884,116885,116887,116888],{"id":116530,"depth":1262,"text":116531},{"id":116552,"depth":1262,"text":116883},"data.ctrl[:] = action 维度错误",{"id":116587,"depth":1262,"text":116588},{"id":116611,"depth":1262,"text":116886},"observation_space 维度和 obs 不一致",{"id":116661,"depth":1262,"text":116662},{"id":116693,"depth":1262,"text":116694},{"id":116729,"depth":125,"text":116730},{"id":116845,"depth":125,"text":116846},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113428,"description":40},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116897,"title":116898,"body":116899,"description":117322,"extension":131,"meta":117323,"navigation":133,"path":117324,"seo":117325,"stem":117326,"__hash__":117327},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116900,"toc":117312},[116901,116905,116908,116911,116931,116937,116943,116953,116956,116959,116979,116982,116986,116989,116995,116998,117012,117015,117018,117092,117095,117101,117104,117127,117130,117180,117183,117189,117192,117195,117198,117217,117220,117226,117229,117232,117235,117255,117258,117261,117264,117309],[20,116902,116904],{"id":116903},"mujoco-学习","MuJoCo 学习",[10,116906,116907],{},"初版",[10,116909,116910],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[159,116912,116913,116916,116919,116928],{},[162,116914,116915],{},"MuJoCo 模型文件在描述什么。",[162,116917,116918],{},"Python 代码怎样读取和推进仿真。",[162,116920,116921,421,116923,421,116925,116927],{},[42,116922,104081],{},[42,116924,104411],{},[42,116926,104414],{}," 这些数组为什么重要。",[162,116929,116930],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[10,116932,116933,116934,116936],{},"默认环境为 Fedora 44、Python >= 3.10、",[42,116935,101078],{}," 官方 Python bindings。",[10,116938,116939,116940,116942],{},"注意：本文禁止使用 ",[42,116941,101063],{},"。所有示例均使用：",[35,116944,116945],{"className":37,"code":101629,"language":39,"meta":40,"style":40},[42,116946,116947],{"__ignoreMap":40},[45,116948,116949,116951],{"class":47,"line":48},[45,116950,30473],{"class":93},[45,116952,101352],{"class":51},[30,116954,116955],{"id":116955},"适合谁阅读",[10,116957,116958],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[159,116960,116961,116964,116967,116970],{},[162,116962,116963],{},"没学过 MuJoCo，只会一点 Python。",[162,116965,116966],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[162,116968,116969],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[162,116971,116972,116973,116975,116976,116978],{},"以前接触过 ",[42,116974,101063],{},"，现在想迁移到官方 ",[42,116977,101072],{}," Python bindings。",[10,116980,116981],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[30,116983,116985],{"id":116984},"mujoco-到底是什么","MuJoCo 到底是什么",[10,116987,116988],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[35,116990,116993],{"className":116991,"code":116992,"language":5270,"meta":40},[5268],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[42,116994,116992],{"__ignoreMap":40},[10,116996,116997],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[159,116999,117000,117003,117006,117009],{},[162,117001,117002],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[162,117004,117005],{},"快速测试控制算法，不必一开始就上真实机器人。",[162,117007,117008],{},"生成强化学习环境。",[162,117010,117011],{},"采集状态、动作、图像、奖励等训练数据。",[30,117013,117014],{"id":117014},"学习前的心智模型",[10,117016,117017],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[346,117019,117020,117032],{},[349,117021,117022],{},[352,117023,117024,117027,117030],{},[355,117025,117026],{"align":23819},"部分",[355,117028,117029],{"align":23819},"负责什么",[355,117031,21270],{"align":23819},[393,117033,117034,117045,117057,117069,117081],{},[352,117035,117036,117039,117042],{},[398,117037,117038],{"align":23819},"MJCF XML",[398,117040,117041],{"align":23819},"定义世界和机器人结构",[398,117043,117044],{"align":23819},"地面、盒子、关节、电机、摄像头",[352,117046,117047,117051,117054],{},[398,117048,117049],{"align":23819},[42,117050,100760],{},[398,117052,117053],{"align":23819},"编译后的静态模型",[398,117055,117056],{"align":23819},"有几个关节、有几个电机、时间步长是多少",[352,117058,117059,117063,117066],{},[398,117060,117061],{"align":23819},[42,117062,100770],{},[398,117064,117065],{"align":23819},"运行中的动态状态",[398,117067,117068],{"align":23819},"当前时间、位置、速度、电机输入",[352,117070,117071,117075,117078],{},[398,117072,117073],{"align":23819},[42,117074,101266],{},[398,117076,117077],{"align":23819},"推进一步物理仿真",[398,117079,117080],{"align":23819},"根据重力、力、碰撞更新状态",[352,117082,117083,117086,117089],{},[398,117084,117085],{"align":23819},"Viewer \u002F Renderer",[398,117087,117088],{"align":23819},"把仿真显示出来",[398,117090,117091],{"align":23819},"打开窗口或保存图片",[10,117093,117094],{},"一句话总结：",[35,117096,117099],{"className":117097,"code":117098,"language":5270,"meta":40},[5268],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[42,117100,117098],{"__ignoreMap":40},[10,117102,117103],{},"参考来源：",[1214,117105,117106,117113,117120],{},[162,117107,117108,117109],{},"MuJoCo Python 官方文档：",[13,117110,117111],{"href":117111,"rel":117112},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[17],[162,117114,117115,117116],{},"MuJoCo XML Reference：",[13,117117,117118],{"href":117118,"rel":117119},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[17],[162,117121,117122,117123],{},"MuJoCo Overview：",[13,117124,117125],{"href":117125,"rel":117126},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[17],[30,117128,117129],{"id":117129},"章节目录",[159,117131,117132,117138,117144,117150,117156,117162,117168,117174],{},[162,117133,117134],{},[13,117135,117137],{"href":117136},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[162,117139,117140],{},[13,117141,117143],{"href":117142},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[162,117145,117146],{},[13,117147,117149],{"href":117148},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[162,117151,117152],{},[13,117153,117155],{"href":117154},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[162,117157,117158],{},[13,117159,117161],{"href":117160},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[162,117163,117164],{},[13,117165,117167],{"href":117166},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[162,117169,117170],{},[13,117171,117173],{"href":117172},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[162,117175,117176],{},[13,117177,117179],{"href":117178},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[30,117181,117182],{"id":117182},"推荐学习路线",[35,117184,117187],{"className":117185,"code":117186,"language":5270,"meta":40},[5268],"环境安装\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",[42,117188,117186],{"__ignoreMap":40},[10,117190,117191],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[30,117193,117194],{"id":117194},"建议的目录结构",[10,117196,117197],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[35,117199,117201],{"className":23905,"code":117200,"language":23907,"meta":40,"style":40},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[42,117202,117203,117211],{"__ignoreMap":40},[45,117204,117205,117207,117209],{"class":47,"line":48},[45,117206,101317],{"class":2046},[45,117208,29299],{"class":257},[45,117210,101322],{"class":313},[45,117212,117213,117215],{"class":47,"line":125},[45,117214,101327],{"class":257},[45,117216,101322],{"class":313},[10,117218,117219],{},"每一章的代码都单独保存：",[35,117221,117224],{"className":117222,"code":117223,"language":5270,"meta":40},[5268],"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",[42,117225,117223],{"__ignoreMap":40},[10,117227,117228],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[30,117230,117231],{"id":117231},"学习方法",[10,117233,117234],{},"每章建议按这个顺序操作：",[159,117236,117237,117240,117243,117246,117249,117252],{},[162,117238,117239],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[162,117241,117242],{},"复制最小可运行代码，保存成指定文件。",[162,117244,117245],{},"运行代码，确认没有报错。",[162,117247,117248],{},"对照“运行结果说明”理解输出。",[162,117250,117251],{},"做“验证步骤”，主动改一两个参数。",[162,117253,117254],{},"遇到报错先看“常见错误与解决方案”。",[10,117256,117257],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[30,117259,117260],{"id":117260},"全局排错顺序",[10,117262,117263],{},"遇到问题时，按下面顺序查：",[159,117265,117266,117272,117278,117283,117286,117289,117296,117306],{},[162,117267,117268,117269],{},"Python 环境是否激活：",[42,117270,117271],{},"which python",[162,117273,117274,117275],{},"MuJoCo 是否能导入：",[42,117276,117277],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[162,117279,117280,117281],{},"是否误装了 ",[42,117282,101063],{},[162,117284,117285],{},"XML 标签是否闭合、属性是否拼写正确",[162,117287,117288],{},"actuator 引用的 joint 名字是否存在",[162,117290,117291,117293,117294],{},[42,117292,101127],{}," 的长度是否等于 ",[42,117295,102209],{},[162,117297,105636,117298,82620,117300,117302,117303],{},[42,117299,104081],{},[42,117301,104411],{}," 后是否调用了 ",[42,117304,117305],{},"mujoco.mj_forward",[162,117307,117308],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[121,117310,117311],{},"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":40,"searchDepth":125,"depth":125,"links":117313},[117314,117315,117316,117317,117318,117319,117320,117321],{"id":116955,"depth":125,"text":116955},{"id":116984,"depth":125,"text":116985},{"id":117014,"depth":125,"text":117014},{"id":117129,"depth":125,"text":117129},{"id":117182,"depth":125,"text":117182},{"id":117194,"depth":125,"text":117194},{"id":117231,"depth":125,"text":117231},{"id":117260,"depth":125,"text":117260},"仿真搭建。",{"category":23461},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116898,"description":117322},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117329,"title":117330,"body":117331,"description":130,"extension":131,"meta":117786,"navigation":133,"path":117787,"seo":117788,"stem":117789,"__hash__":117790},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117332,"toc":117784},[117333,117336,117339,117345,117781],[20,117334,117330],{"id":117335},"_1-最常用的基本操作更新",[10,117337,117338],{},"装linux系统教程：",[10,117340,117341],{},[13,117342,117343],{"href":117343,"rel":117344},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[17],[35,117346,117350],{"className":117347,"code":117348,"language":117349,"meta":40,"style":40},"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",[42,117351,117352,117357,117362,117371,117376,117385,117390,117410,117415,117426,117431,117440,117445,117473,117478,117497,117502,117521,117525,117530,117546,117550,117555,117585,117589,117594,117610,117614,117619,117634,117638,117643,117659,117663,117668,117680,117692,117696,117701,117718,117722,117727,117745,117749,117754,117763,117767,117772],{"__ignoreMap":40},[45,117353,117354],{"class":47,"line":48},[45,117355,117356],{"class":267},"#更新相关的知识\n",[45,117358,117359],{"class":47,"line":125},[45,117360,117361],{"class":267},"# 更新软件包列表（从服务器获取最新软件信息）\n",[45,117363,117364,117366,117369],{"class":47,"line":1262},[45,117365,24659],{"class":2046},[45,117367,117368],{"class":313}," apt",[45,117370,26325],{"class":313},[45,117372,117373],{"class":47,"line":1277},[45,117374,117375],{"class":267},"# 升级所有可更新的软件包（不删除旧包）\n",[45,117377,117378,117380,117382],{"class":47,"line":1283},[45,117379,24659],{"class":2046},[45,117381,117368],{"class":313},[45,117383,117384],{"class":313}," upgrade\n",[45,117386,117387],{"class":47,"line":1297},[45,117388,117389],{"class":267},"#更新和升级软件包\n",[45,117391,117392,117394,117396,117399,117401,117403,117405,117408],{"class":47,"line":1303},[45,117393,24659],{"class":2046},[45,117395,117368],{"class":313},[45,117397,117398],{"class":313}," update",[45,117400,26273],{"class":51},[45,117402,24659],{"class":2046},[45,117404,117368],{"class":313},[45,117406,117407],{"class":313}," upgrade",[45,117409,101032],{"class":257},[45,117411,117412],{"class":47,"line":1394},[45,117413,117414],{"class":267},"#列出可更新的软件包及版本信息\n",[45,117416,117417,117420,117423],{"class":47,"line":1400},[45,117418,117419],{"class":2046},"apt",[45,117421,117422],{"class":313}," list",[45,117424,117425],{"class":257}," --upgradable\n",[45,117427,117428],{"class":47,"line":1412},[45,117429,117430],{"class":267},"#彻底升级（处理依赖关系，可能删除旧包）\n",[45,117432,117433,117435,117437],{"class":47,"line":1695},[45,117434,24659],{"class":2046},[45,117436,117368],{"class":313},[45,117438,117439],{"class":313}," full-upgrade\n",[45,117441,117442],{"class":47,"line":1700},[45,117443,117444],{"class":267},"#设置指定版本\n",[45,117446,117447,117449,117451,117453,117455,117458,117460,117462,117464,117466,117469,117471],{"class":47,"line":1706},[45,117448,24659],{"class":2046},[45,117450,117368],{"class":313},[45,117452,23917],{"class":313},[45,117454,28985],{"class":93},[45,117456,117457],{"class":313},"package_nam",[45,117459,283],{"class":51},[45,117461,1167],{"class":93},[45,117463,254],{"class":313},[45,117465,1117],{"class":93},[45,117467,117468],{"class":313},"version_numbe",[45,117470,877],{"class":51},[45,117472,51388],{"class":93},[45,117474,117475],{"class":47,"line":1711},[45,117476,117477],{"class":267},"#只安装软件包不升级\n",[45,117479,117480,117482,117484,117486,117488,117490,117492,117494],{"class":47,"line":1725},[45,117481,24659],{"class":2046},[45,117483,117368],{"class":313},[45,117485,23917],{"class":313},[45,117487,28985],{"class":93},[45,117489,117457],{"class":313},[45,117491,283],{"class":51},[45,117493,1167],{"class":93},[45,117495,117496],{"class":257}," --no-upgrade\n",[45,117498,117499],{"class":47,"line":1730},[45,117500,117501],{"class":267},"#只升级，不存在就不安装\n",[45,117503,117504,117506,117508,117510,117512,117514,117516,117518],{"class":47,"line":1736},[45,117505,24659],{"class":2046},[45,117507,117368],{"class":313},[45,117509,23917],{"class":313},[45,117511,28985],{"class":93},[45,117513,117457],{"class":313},[45,117515,283],{"class":51},[45,117517,1167],{"class":93},[45,117519,117520],{"class":257}," --only-upgrade\n",[45,117522,117523],{"class":47,"line":1757},[45,117524,2483],{"emptyLinePlaceholder":133},[45,117526,117527],{"class":47,"line":1762},[45,117528,117529],{"class":267},"#安装指定的软件命令\n",[45,117531,117532,117534,117536,117538,117540,117542,117544],{"class":47,"line":1776},[45,117533,24659],{"class":2046},[45,117535,117368],{"class":313},[45,117537,23917],{"class":313},[45,117539,28985],{"class":93},[45,117541,117457],{"class":313},[45,117543,283],{"class":51},[45,117545,51388],{"class":93},[45,117547,117548],{"class":47,"line":1781},[45,117549,2483],{"emptyLinePlaceholder":133},[45,117551,117552],{"class":47,"line":1810},[45,117553,117554],{"class":267},"#安装多个软件包\n",[45,117556,117557,117559,117561,117563,117565,117568,117571,117573,117575,117578,117580,117582],{"class":47,"line":1815},[45,117558,24659],{"class":2046},[45,117560,117368],{"class":313},[45,117562,23917],{"class":313},[45,117564,28985],{"class":93},[45,117566,117567],{"class":313},"package_",[45,117569,117570],{"class":93},"1>",[45,117572,28985],{"class":93},[45,117574,117567],{"class":313},[45,117576,117577],{"class":93},"2>",[45,117579,28985],{"class":93},[45,117581,117567],{"class":313},[45,117583,117584],{"class":93},"3>\n",[45,117586,117587],{"class":47,"line":1832},[45,117588,2483],{"emptyLinePlaceholder":133},[45,117590,117591],{"class":47,"line":1837},[45,117592,117593],{"class":267},"#更新指定的软件命令\n",[45,117595,117596,117598,117600,117602,117604,117606,117608],{"class":47,"line":1842},[45,117597,24659],{"class":2046},[45,117599,117368],{"class":313},[45,117601,117398],{"class":313},[45,117603,28985],{"class":93},[45,117605,117457],{"class":313},[45,117607,283],{"class":51},[45,117609,51388],{"class":93},[45,117611,117612],{"class":47,"line":1847},[45,117613,2483],{"emptyLinePlaceholder":133},[45,117615,117616],{"class":47,"line":1861},[45,117617,117618],{"class":267},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[45,117620,117621,117623,117626,117628,117630,117632],{"class":47,"line":1866},[45,117622,117419],{"class":2046},[45,117624,117625],{"class":313}," show",[45,117627,28985],{"class":93},[45,117629,117457],{"class":313},[45,117631,283],{"class":51},[45,117633,51388],{"class":93},[45,117635,117636],{"class":47,"line":2660},[45,117637,2483],{"emptyLinePlaceholder":133},[45,117639,117640],{"class":47,"line":2674},[45,117641,117642],{"class":267},"#删除软件包命令\n",[45,117644,117645,117647,117649,117651,117653,117655,117657],{"class":47,"line":2682},[45,117646,24659],{"class":2046},[45,117648,117368],{"class":313},[45,117650,26162],{"class":313},[45,117652,28985],{"class":93},[45,117654,117457],{"class":313},[45,117656,283],{"class":51},[45,117658,51388],{"class":93},[45,117660,117661],{"class":47,"line":2687},[45,117662,2483],{"emptyLinePlaceholder":133},[45,117664,117665],{"class":47,"line":2693},[45,117666,117667],{"class":267},"# 清理旧版本和缓存（释放磁盘空间）\n",[45,117669,117670,117672,117674,117677],{"class":47,"line":2699},[45,117671,24659],{"class":2046},[45,117673,117368],{"class":313},[45,117675,117676],{"class":313}," autoremove",[45,117678,117679],{"class":267},"  # 删除不再需要的依赖和库文件\n",[45,117681,117682,117684,117686,117689],{"class":47,"line":2704},[45,117683,24659],{"class":2046},[45,117685,117368],{"class":313},[45,117687,117688],{"class":313}," clean",[45,117690,117691],{"class":267},"       # 清理下载的缓存包\n",[45,117693,117694],{"class":47,"line":8031},[45,117695,2483],{"emptyLinePlaceholder":133},[45,117697,117698],{"class":47,"line":8055},[45,117699,117700],{"class":267},"#移除软件包及配置文件\n",[45,117702,117703,117705,117707,117710,117712,117714,117716],{"class":47,"line":8060},[45,117704,24659],{"class":2046},[45,117706,117368],{"class":313},[45,117708,117709],{"class":313}," purge",[45,117711,28985],{"class":93},[45,117713,117457],{"class":313},[45,117715,283],{"class":51},[45,117717,51388],{"class":93},[45,117719,117720],{"class":47,"line":8066},[45,117721,2483],{"emptyLinePlaceholder":133},[45,117723,117724],{"class":47,"line":8093},[45,117725,117726],{"class":267},"#查找软件包命令\n",[45,117728,117729,117731,117733,117736,117738,117741,117743],{"class":47,"line":8098},[45,117730,24659],{"class":2046},[45,117732,117368],{"class":313},[45,117734,117735],{"class":313}," search",[45,117737,28985],{"class":93},[45,117739,117740],{"class":313},"keywor",[45,117742,522],{"class":51},[45,117744,51388],{"class":93},[45,117746,117747],{"class":47,"line":8104},[45,117748,2483],{"emptyLinePlaceholder":133},[45,117750,117751],{"class":47,"line":8116},[45,117752,117753],{"class":267},"#列出所有已安装的包\n",[45,117755,117756,117758,117760],{"class":47,"line":8128},[45,117757,117419],{"class":2046},[45,117759,117422],{"class":313},[45,117761,117762],{"class":257}," --installed\n",[45,117764,117765],{"class":47,"line":8140},[45,117766,2483],{"emptyLinePlaceholder":133},[45,117768,117769],{"class":47,"line":9799},[45,117770,117771],{"class":267},"#列出所有已安装的包的版本信息\n",[45,117773,117774,117776,117778],{"class":47,"line":9824},[45,117775,117419],{"class":2046},[45,117777,117422],{"class":313},[45,117779,117780],{"class":257}," --all-versions\n",[121,117782,117783],{},"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":40,"searchDepth":125,"depth":125,"links":117785},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117330,"description":130},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117792,"title":117793,"body":117794,"description":130,"extension":131,"meta":118535,"navigation":133,"path":118536,"seo":118537,"stem":118538,"__hash__":118539},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117795,"toc":118522},[117796,117799,117803,117806,117812,117816,117820,117826,117831,117836,117841,117846,117851,117854,117857,117860,117863,117867,117870,117875,117878,117883,117886,117891,117898,117901,117904,117907,117910,117913,117924,117928,117932,117937,117942,117946,117951,117955,117960,117964,117968,117973,117976,118021,118026,118030,118034,118039,118045,118050,118060,118065,118075,118080,118085,118112,118116,118119,118124,118127,118152,118156,118161,118164,118169,118174,118194,118199,118202,118217,118221,118274,118277,118282,118286,118289,118304,118307,118310,118315,118319,118323,118326,118330,118334,118337,118342,118347,118351,118358,118366,118369,118376,118381,118386,118389,118394,118401,118406,118413,118417,118419,118424,118428,118431,118434,118439,118442,118447,118450,118455,118460,118465,118469,118474,118478,118519],[20,117797,117793],{"id":117798},"_2-linux装机教程",[30,117800,117802],{"id":117801},"_21-实体机","2.1 实体机",[10,117804,117805],{},"使用清华源：（Ubuntu24.04）",[10,117807,117808],{},[13,117809,117810],{"href":117810,"rel":117811},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[17],[30,117813,117815],{"id":117814},"_22-普通虚拟机","2.2 普通虚拟机",[176,117817,117819],{"id":117818},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[10,117821,117822],{},[13,117823,117824],{"href":117824,"rel":117825},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[17],[10,117827,117828],{},[1545,117829],{"alt":40,"src":117830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[10,117832,117833],{},[1545,117834],{"alt":40,"src":117835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[10,117837,117838],{},[1545,117839],{"alt":40,"src":117840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[10,117842,117843],{},[1545,117844],{"alt":40,"src":117845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[10,117847,117848],{},[1545,117849],{"alt":40,"src":117850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[10,117852,117853],{},"内存4G（4096MB）；",[10,117855,117856],{},"CPU给4个核；",[10,117858,117859],{},"硬盘动态分配60G；",[10,117861,117862],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[176,117864,117866],{"id":117865},"_222-安装ubuntu","2.2.2 安装Ubuntu",[10,117868,117869],{},"按照1.1的步骤下载Ubuntu",[10,117871,117872],{},[1545,117873],{"alt":40,"src":117874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[10,117876,117877],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[10,117879,117880],{},[1545,117881],{"alt":40,"src":117882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[10,117884,117885],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[10,117887,117888],{},[1545,117889],{"alt":40,"src":117890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[10,117892,117893,117894,117897],{},"选择“正常安装”(找不到都用Alt+F7)， ",[358,117895,117896],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[10,117899,117900],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[10,117902,117903],{},"将改动写入磁盘吗 继续",[10,117905,117906],{},"选择东八区（shanghai，大致在地图上点一下），继续",[10,117908,117909],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[10,117911,117912],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[10,117914,117915,117916,117919,117920,117923],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[358,117917,117918],{},"除了"," 选不发送系统信息与不升级之外， ",[358,117921,117922],{},"其它"," 都跳过或前进）",[176,117925,117927],{"id":117926},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22081,117929,117931],{"id":117930},"_2231-全屏","2.2.3.1 全屏",[10,117933,117934],{},[1545,117935],{"alt":40,"src":117936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[10,117938,117939],{},[1545,117940],{"alt":40,"src":117941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22081,117943,117945],{"id":117944},"_2232-文件交换","2.2.3.2 文件交换",[10,117947,117948],{},[1545,117949],{"alt":40,"src":117950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22081,117952,117954],{"id":117953},"_2233-新建文本文档","2.2.3.3 新建文本文档",[10,117956,117957],{},[1545,117958],{"alt":40,"src":117959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[30,117961,117963],{"id":117962},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[176,117965,117967],{"id":117966},"_231-简介与优缺点","2.3.1 简介与优缺点",[159,117969,117970],{},[162,117971,117972],{},"什么情况下推荐？",[10,117974,117975],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[159,117977,117978],{"start":125},[162,117979,117980,117981],{},"优缺点：",[159,117982,117983,118013],{},[162,117984,117985,117986],{},"优点：",[159,117987,117988,117991,117998,118001,118004,118007,118010],{},[162,117989,117990],{},"WSL2是最好的Linux发行版;(bushi)",[162,117992,117993,117994,117997],{},"性能损耗极低。且比在Windows上跑深度性能 ",[358,117995,117996],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[162,117999,118000],{},"非常方便调用USB设备，可以USB直通;",[162,118002,118003],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[162,118005,118006],{},"非常方便Win与WSL2互相传文件等协同操作;",[162,118008,118009],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[162,118011,118012],{},"非常方便使用Windows的VScode远程开发;",[162,118014,118015,118016],{},"缺点：",[159,118017,118018],{},[162,118019,118020],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[10,118022,118023],{},[1545,118024],{"alt":40,"src":118025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[176,118027,118029],{"id":118028},"_232-安装教程","2.3.2 安装教程",[22081,118031,118033],{"id":118032},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[159,118035,118036],{},[162,118037,118038],{},"方法一(图形界面)",[10,118040,118041,118042,24701],{},"用Win+R输入",[42,118043,118044],{},"appwiz.cpl",[10,118046,118047],{},[1545,118048],{"alt":40,"src":118049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[10,118051,118052,118053,118056,118057,26556],{},"点击OK进入 ",[358,118054,118055],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[358,118058,118059],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[10,118061,118062],{},[1545,118063],{"alt":40,"src":118064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[10,118066,118067,118068,101069,118071,118074],{},"选择 ",[358,118069,118070],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[358,118072,118073],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[10,118076,118077],{},[1545,118078],{"alt":40,"src":118079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[159,118081,118082],{"start":125},[162,118083,118084],{},"方法二(命令行)",[35,118086,118090],{"className":118087,"code":118088,"language":118089,"meta":40,"style":40},"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",[42,118091,118092,118097,118102,118107],{"__ignoreMap":40},[45,118093,118094],{"class":47,"line":48},[45,118095,118096],{},"# 开启 Linux 子系统\n",[45,118098,118099],{"class":47,"line":125},[45,118100,118101],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[45,118103,118104],{"class":47,"line":1262},[45,118105,118106],{},"# 开启虚拟机平台\n",[45,118108,118109],{"class":47,"line":1277},[45,118110,118111],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22081,118113,118115],{"id":118114},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[10,118117,118118],{},"用管理员权限打开powershell",[10,118120,118121],{},[1545,118122],{"alt":40,"src":118123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[10,118125,118126],{},"升级WSL并设置默认版本为WSL2",[35,118128,118130],{"className":118087,"code":118129,"language":118089,"meta":40,"style":40},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[42,118131,118132,118137,118142,118147],{"__ignoreMap":40},[45,118133,118134],{"class":47,"line":48},[45,118135,118136],{},"# 更新 wsl\n",[45,118138,118139],{"class":47,"line":125},[45,118140,118141],{},"wsl --update\n",[45,118143,118144],{"class":47,"line":1262},[45,118145,118146],{},"# 将 wsl 版本设置为 wsl2\n",[45,118148,118149],{"class":47,"line":1277},[45,118150,118151],{},"wsl --set-default-version 2\n",[22081,118153,118155],{"id":118154},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[159,118157,118158],{},[162,118159,118160],{},"方式一(商店下载)",[10,118162,118163],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[10,118165,118166],{},[1545,118167],{"alt":40,"src":118168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[159,118170,118171],{"start":125},[162,118172,118173],{},"方式二(命令行安装)",[35,118175,118177],{"className":118087,"code":118176,"language":118089,"meta":40,"style":40},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[42,118178,118179,118184,118189],{"__ignoreMap":40},[45,118180,118181],{"class":47,"line":48},[45,118182,118183],{},"# 列出可安装的 Linux 版本\n",[45,118185,118186],{"class":47,"line":125},[45,118187,118188],{},"#（需要科学手段）\n",[45,118190,118191],{"class":47,"line":1262},[45,118192,118193],{},"wsl --list --online\n",[10,118195,118196],{},[1545,118197],{"alt":40,"src":118198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[10,118200,118201],{},"选择对应发行版并安装",[35,118203,118205],{"className":118087,"code":118204,"language":118089,"meta":40,"style":40},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[42,118206,118207,118212],{"__ignoreMap":40},[45,118208,118209],{"class":47,"line":48},[45,118210,118211],{},"# Ubuntu安装完毕后需要重启系统\n",[45,118213,118214],{"class":47,"line":125},[45,118215,118216],{},"wsl --install -d Ubuntu-24.04\n",[22081,118218,118220],{"id":118219},"_2324-查看系统状态","2.3.2.4 查看系统状态",[35,118222,118224],{"className":118087,"code":118223,"language":118089,"meta":40,"style":40},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[42,118225,118226,118231,118236,118241,118246,118250,118254,118259,118264,118269],{"__ignoreMap":40},[45,118227,118228],{"class":47,"line":48},[45,118229,118230],{},"# 查看 wsl\n",[45,118232,118233],{"class":47,"line":125},[45,118234,118235],{},"wsl -l\n",[45,118237,118238],{"class":47,"line":1262},[45,118239,118240],{},"# 查看 wsl 运行版本或模式\n",[45,118242,118243],{"class":47,"line":1277},[45,118244,118245],{},"wsl -l -v\n",[45,118247,118248],{"class":47,"line":1283},[45,118249,2483],{"emptyLinePlaceholder":133},[45,118251,118252],{"class":47,"line":1297},[45,118253,2483],{"emptyLinePlaceholder":133},[45,118255,118256],{"class":47,"line":1303},[45,118257,118258],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[45,118260,118261],{"class":47,"line":1394},[45,118262,118263],{},"wsl --set-version \u003Cdistro> 2\n",[45,118265,118266],{"class":47,"line":1400},[45,118267,118268],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[45,118270,118271],{"class":47,"line":1412},[45,118272,118273],{},"wsl --unregister \u003Cdistro>\n",[10,118275,118276],{},"输出Version为2即正常",[10,118278,118279],{},[1545,118280],{"alt":40,"src":118281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22081,118283,118285],{"id":118284},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[10,118287,118288],{},"直接在Powershell里输入wsl命令进入子系统",[35,118290,118292],{"className":118087,"code":118291,"language":118089,"meta":40,"style":40},"# 进入子系统\nwsl\n",[42,118293,118294,118299],{"__ignoreMap":40},[45,118295,118296],{"class":47,"line":48},[45,118297,118298],{},"# 进入子系统\n",[45,118300,118301],{"class":47,"line":125},[45,118302,118303],{},"wsl\n",[10,118305,118306],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[10,118308,118309],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[10,118311,118312],{},[1545,118313],{"alt":40,"src":118314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[176,118316,118318],{"id":118317},"_233-配置各种环境","2.3.3 配置各种环境",[22081,118320,118322],{"id":118321},"_2331-换源","2.3.3.1 换源",[10,118324,118325],{},"(同实体机LINUX，往下找教程)",[22081,118327,118329],{"id":118328},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22993,118331,118333],{"id":118332},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[10,118335,118336],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[10,118338,118339],{},[1545,118340],{"alt":40,"src":118341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[10,118343,118344],{},[1545,118345],{"alt":40,"src":118346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22993,118348,118350],{"id":118349},"_23322-cuda","2.3.3.2.2 CUDA",[10,118352,118353,118354],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[13,118355,118356],{"href":118356,"rel":118357},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[17],[10,118359,118360,118363],{},[1545,118361],{"alt":40,"src":118362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1545,118364],{"alt":40,"src":118365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[10,118367,118368],{},"在下方的网站，选择合适的版本。",[10,118370,118371,118372],{},"WSL2 专属 CUDA 指南：",[13,118373,118374],{"href":118374,"rel":118375},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[17],[10,118377,118378],{},[358,118379,118380],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[10,118382,118383],{},[1545,118384],{"alt":40,"src":118385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[10,118387,118388],{},"挨行敲一遍",[10,118390,118391],{},[1545,118392],{"alt":40,"src":118393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[10,118395,118396,118397,118400],{},"敲完后，输入",[42,118398,118399],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[10,118402,118403],{},[1545,118404],{"alt":40,"src":118405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[10,118407,118408,118409,118412],{},"（请详看下方教程的",[358,118410,118411],{},"安装CUDA的配置环境来看","如何配置环境）",[22993,118414,118416],{"id":118415},"_23323-cudnn","2.3.3.2.3 cuDNN",[10,118418,118325],{},[10,118420,118421],{},[1545,118422],{"alt":40,"src":118423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22081,118425,118427],{"id":118426},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[10,118429,118430],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[10,118432,118433],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[10,118435,118436],{},[1545,118437],{"alt":40,"src":118438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[10,118440,118441],{},"连接WSL2",[10,118443,118444],{},[1545,118445],{"alt":40,"src":118446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[10,118448,118449],{},"远程开发成功。",[10,118451,118452],{},[1545,118453],{"alt":40,"src":118454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[10,118456,118457],{},[1545,118458],{"alt":40,"src":118459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[10,118461,118462],{},[1545,118463],{"alt":40,"src":118464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22081,118466,118468],{"id":118467},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[10,118470,118471],{},[1545,118472],{"alt":40,"src":118473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22081,118475,118477],{"id":118476},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[35,118479,118481],{"className":117347,"code":118480,"language":117349,"meta":40,"style":40},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[42,118482,118483,118491,118499,118510,118514],{"__ignoreMap":40},[45,118484,118485,118487,118489],{"class":47,"line":48},[45,118486,24659],{"class":2046},[45,118488,117368],{"class":313},[45,118490,26325],{"class":313},[45,118492,118493,118495,118497],{"class":47,"line":125},[45,118494,24659],{"class":2046},[45,118496,117368],{"class":313},[45,118498,117384],{"class":313},[45,118500,118501,118503,118505,118507],{"class":47,"line":1262},[45,118502,24659],{"class":2046},[45,118504,117368],{"class":313},[45,118506,23917],{"class":313},[45,118508,118509],{"class":313}," mesa-utils\n",[45,118511,118512],{"class":47,"line":1277},[45,118513,2483],{"emptyLinePlaceholder":133},[45,118515,118516],{"class":47,"line":1283},[45,118517,118518],{"class":267},"#然后重启wsl2即可\n",[121,118520,118521],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":40,"searchDepth":125,"depth":125,"links":118523},[118524,118525,118530],{"id":117801,"depth":125,"text":117802},{"id":117814,"depth":125,"text":117815,"children":118526},[118527,118528,118529],{"id":117818,"depth":1262,"text":117819},{"id":117865,"depth":1262,"text":117866},{"id":117926,"depth":1262,"text":117927},{"id":117962,"depth":125,"text":117963,"children":118531},[118532,118533,118534],{"id":117966,"depth":1262,"text":117967},{"id":118028,"depth":1262,"text":118029},{"id":118317,"depth":1262,"text":118318},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117793,"description":130},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118541,"title":118542,"body":118543,"description":130,"extension":131,"meta":121479,"navigation":133,"path":121480,"seo":121481,"stem":121482,"__hash__":121483},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118544,"toc":121451},[118545,118548,118552,118558,118562,118568,118572,118760,118763,118768,118772,118776,118779,118782,118788,118793,118796,118799,118804,118837,118842,118846,118923,118926,118931,118935,118938,118977,118980,118989,119007,119012,119019,119136,119141,119144,119171,119176,119180,119189,119239,119246,119250,119253,119267,119274,119308,119313,119317,119340,119343,119348,119352,119355,119358,119361,119403,119407,119410,119413,119454,119458,119462,119465,119470,119475,119478,119501,119504,119512,119517,119520,119525,119530,119533,119538,119542,119547,119570,119575,119637,119645,119650,119655,119658,119663,119666,119671,119676,119694,119699,119705,119710,119724,119728,119731,119734,119737,119780,119783,119788,119889,119892,119897,119901,119905,119942,119946,119950,119954,120000,120004,120049,120053,120060,120068,120123,120126,120203,120206,120229,120233,120236,120241,120246,120254,120257,120262,120267,120272,120275,120280,120289,120292,120297,120300,120371,120376,120379,120384,120387,120392,120395,120400,120403,120408,120413,120416,120491,120494,120507,120512,120515,120529,120532,120561,120566,120595,120598,120603,120607,120612,120621,120624,120629,120632,120637,120640,120643,120648,120651,120656,120661,120664,120669,120672,120797,120802,120832,120835,120840,120845,120862,120865,120908,120911,120938,120943,120956,121099,121103,121108,121122,121125,121176,121179,121209,121212,121228,121233,121247,121250,121317,121322,121331,121336,121339,121351,121356,121363,121387,121390,121395,121398,121417,121422,121429,121441,121448],[20,118546,118542],{"id":118547},"_3-安装必备配置",[30,118549,118551],{"id":118550},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[35,118553,118556],{"className":118554,"code":118555,"language":5270},[5268],"  打开下方网站（注意，该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",[42,118557,118555],{"__ignoreMap":40},[176,118559,118561],{"id":118560},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[35,118563,118566],{"className":118564,"code":118565,"language":5270},[5268],"  输入以下命令\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",[42,118567,118565],{"__ignoreMap":40},[176,118569,118571],{"id":118570},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[35,118573,118577],{"className":118574,"code":118575,"language":118576,"meta":40,"style":40},"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",[42,118578,118579,118587,118598,118610,118624,118628,118638,118643,118647,118651,118656,118660,118672,118676,118681,118685,118696,118700,118716,118720,118731,118735,118740,118744,118752],{"__ignoreMap":40},[45,118580,118581,118583,118585],{"class":47,"line":48},[45,118582,24659],{"class":2046},[45,118584,117368],{"class":313},[45,118586,26325],{"class":313},[45,118588,118589,118591,118593,118595],{"class":47,"line":125},[45,118590,24659],{"class":2046},[45,118592,117368],{"class":313},[45,118594,23917],{"class":313},[45,118596,118597],{"class":313}," vim\n",[45,118599,118600,118602,118605,118607],{"class":47,"line":1262},[45,118601,24659],{"class":2046},[45,118603,118604],{"class":313}," rm",[45,118606,25408],{"class":257},[45,118608,118609],{"class":313}," \u002Fetc\u002Fapt\u002Fsources.list\n",[45,118611,118612,118614,118616,118618,118621],{"class":47,"line":1277},[45,118613,24659],{"class":2046},[45,118615,118604],{"class":313},[45,118617,25408],{"class":257},[45,118619,118620],{"class":313}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[45,118622,118623],{"class":257},"**\n",[45,118625,118626],{"class":47,"line":1283},[45,118627,2483],{"emptyLinePlaceholder":133},[45,118629,118630,118632,118635],{"class":47,"line":1297},[45,118631,24659],{"class":2046},[45,118633,118634],{"class":313}," vim",[45,118636,118637],{"class":313}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[45,118639,118640],{"class":47,"line":1303},[45,118641,118642],{"class":313},"```\n",[45,118644,118645],{"class":47,"line":1394},[45,118646,2483],{"emptyLinePlaceholder":133},[45,118648,118649],{"class":47,"line":1400},[45,118650,2483],{"emptyLinePlaceholder":133},[45,118652,118653],{"class":47,"line":1412},[45,118654,118655],{"class":2046},"选择好Ubuntu版本后，复制下方的内容。\n",[45,118657,118658],{"class":47,"line":1695},[45,118659,2483],{"emptyLinePlaceholder":133},[45,118661,118662,118664,118667,118670],{"class":47,"line":1700},[45,118663,435],{"class":93},[45,118665,118666],{"class":313},"[](",[45,118668,118669],{"class":2046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[45,118671,215],{"class":313},[45,118673,118674],{"class":47,"line":1706},[45,118675,2483],{"emptyLinePlaceholder":133},[45,118677,118678],{"class":47,"line":1711},[45,118679,118680],{"class":2046},"粘贴进去\n",[45,118682,118683],{"class":47,"line":1725},[45,118684,2483],{"emptyLinePlaceholder":133},[45,118686,118687,118689,118691,118694],{"class":47,"line":1730},[45,118688,435],{"class":93},[45,118690,118666],{"class":313},[45,118692,118693],{"class":2046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[45,118695,215],{"class":313},[45,118697,118698],{"class":47,"line":1736},[45,118699,2483],{"emptyLinePlaceholder":133},[45,118701,118702,118705,118708,118711,118713],{"class":47,"line":1757},[45,118703,118704],{"class":2046},"按一下ESC，然后英文冒号，输入",[45,118706,118707],{"class":313}," `",[45,118709,118710],{"class":2046},":wq!",[45,118712,1179],{"class":313},[45,118714,118715],{"class":2046},"然后回车\n",[45,118717,118718],{"class":47,"line":1762},[45,118719,2483],{"emptyLinePlaceholder":133},[45,118721,118722,118724,118726,118729],{"class":47,"line":1776},[45,118723,435],{"class":93},[45,118725,118666],{"class":313},[45,118727,118728],{"class":2046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[45,118730,215],{"class":313},[45,118732,118733],{"class":47,"line":1781},[45,118734,2483],{"emptyLinePlaceholder":133},[45,118736,118737],{"class":47,"line":1810},[45,118738,118739],{"class":2046},"输入以下命令\n",[45,118741,118742],{"class":47,"line":1815},[45,118743,2483],{"emptyLinePlaceholder":133},[45,118745,118746,118749],{"class":47,"line":1832},[45,118747,118748],{"class":313},"```",[45,118750,118751],{"class":2046},"Bash\n",[45,118753,118754,118756,118758],{"class":47,"line":1837},[45,118755,24659],{"class":2046},[45,118757,117368],{"class":313},[45,118759,26325],{"class":313},[10,118761,118762],{},"这里被替换成对应学校则成功",[10,118764,118765],{},[1545,118766],{"alt":40,"src":118767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[30,118769,118771],{"id":118770},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[176,118773,118775],{"id":118774},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[10,118777,118778],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[10,118780,118781],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[10,118783,118784],{},[13,118785,118786],{"href":118786,"rel":118787},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[17],[10,118789,118790],{},[1545,118791],{"alt":40,"src":118792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[10,118794,118795],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[10,118797,118798],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[10,118800,118801],{},[1545,118802],{"alt":40,"src":118803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[35,118805,118807],{"className":117347,"code":118806,"language":117349,"meta":40,"style":40},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[42,118808,118809,118814,118821,118826],{"__ignoreMap":40},[45,118810,118811],{"class":47,"line":48},[45,118812,118813],{"class":267},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[45,118815,118816,118818],{"class":47,"line":125},[45,118817,101327],{"class":257},[45,118819,118820],{"class":313}," ~\u002FDownloads\n",[45,118822,118823],{"class":47,"line":1262},[45,118824,118825],{"class":267},"#下方chrome安装包名不一定是这个，根据名字来看\n",[45,118827,118828,118830,118832,118834],{"class":47,"line":1277},[45,118829,24659],{"class":2046},[45,118831,117368],{"class":313},[45,118833,23917],{"class":313},[45,118835,118836],{"class":313}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[10,118838,118839],{},[1545,118840],{"alt":40,"src":118841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[176,118843,118845],{"id":118844},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[35,118847,118849],{"className":117347,"code":118848,"language":117349,"meta":40,"style":40},"# 老版\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",[42,118850,118851,118856,118864,118875,118880,118884,118889,118899,118907,118918],{"__ignoreMap":40},[45,118852,118853],{"class":47,"line":48},[45,118854,118855],{"class":267},"# 老版\n",[45,118857,118858,118860,118862],{"class":47,"line":125},[45,118859,24659],{"class":2046},[45,118861,117368],{"class":313},[45,118863,26325],{"class":313},[45,118865,118866,118868,118870,118872],{"class":47,"line":1262},[45,118867,24659],{"class":2046},[45,118869,117368],{"class":313},[45,118871,23917],{"class":313},[45,118873,118874],{"class":313}," neofetch\n",[45,118876,118877],{"class":47,"line":1277},[45,118878,118879],{"class":2046},"neofetch\n",[45,118881,118882],{"class":47,"line":1283},[45,118883,2483],{"emptyLinePlaceholder":133},[45,118885,118886],{"class":47,"line":1297},[45,118887,118888],{"class":267},"# 新版\n",[45,118890,118891,118893,118896],{"class":47,"line":1303},[45,118892,24659],{"class":2046},[45,118894,118895],{"class":313}," add-apt-repository",[45,118897,118898],{"class":313}," ppa:zhangsongcui3371\u002Ffastfetch\n",[45,118900,118901,118903,118905],{"class":47,"line":1394},[45,118902,24659],{"class":2046},[45,118904,117368],{"class":313},[45,118906,26325],{"class":313},[45,118908,118909,118911,118913,118915],{"class":47,"line":1400},[45,118910,24659],{"class":2046},[45,118912,117368],{"class":313},[45,118914,23917],{"class":313},[45,118916,118917],{"class":313}," fastfetch\n",[45,118919,118920],{"class":47,"line":1412},[45,118921,118922],{"class":2046},"fastfetch\n",[10,118924,118925],{},"这里显示，一共有3162个debian的程序，7个snap程序",[10,118927,118928],{},[1545,118929],{"alt":40,"src":118930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[176,118932,118934],{"id":118933},"_323-移除snap应用","3.2.3 移除snap应用",[10,118936,118937],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[35,118939,118941],{"className":117347,"code":118940,"language":117349,"meta":40,"style":40},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[42,118942,118943,118955,118966],{"__ignoreMap":40},[45,118944,118945,118947,118949,118952],{"class":47,"line":48},[45,118946,24659],{"class":2046},[45,118948,26596],{"class":313},[45,118950,118951],{"class":313}," disable",[45,118953,118954],{"class":313}," snapd.service\n",[45,118956,118957,118959,118961,118963],{"class":47,"line":125},[45,118958,24659],{"class":2046},[45,118960,26596],{"class":313},[45,118962,118951],{"class":313},[45,118964,118965],{"class":313}," snapd.socket\n",[45,118967,118968,118970,118972,118974],{"class":47,"line":1262},[45,118969,24659],{"class":2046},[45,118971,26596],{"class":313},[45,118973,118951],{"class":313},[45,118975,118976],{"class":313}," snapd.seeded.service\n",[10,118978,118979],{},"然后查看snap应用列表",[10,118981,118982,118983,118988],{},"根据你安装的选择不同（最小安装或普通安装），有",[13,118984,118987],{"href":118985,"rel":118986},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[17],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[35,118990,118992],{"className":117347,"code":118991,"language":117349,"meta":40,"style":40},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[42,118993,118994,118999],{"__ignoreMap":40},[45,118995,118996],{"class":47,"line":48},[45,118997,118998],{"class":267},"# 查询当前系统上snap安装了哪些app\n",[45,119000,119001,119004],{"class":47,"line":125},[45,119002,119003],{"class":2046},"snap",[45,119005,119006],{"class":313}," list\n",[10,119008,119009],{},[1545,119010],{"alt":40,"src":119011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[10,119013,119014,119015,119018],{},"卸载掉图中所有应用，按照 ",[358,119016,119017],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[35,119020,119022],{"className":117347,"code":119021,"language":117349,"meta":40,"style":40},"#移除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",[42,119023,119024,119029,119041,119046,119057,119062,119073,119078,119089,119094,119098,119103,119114,119125],{"__ignoreMap":40},[45,119025,119026],{"class":47,"line":48},[45,119027,119028],{"class":267},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[45,119030,119031,119033,119036,119038],{"class":47,"line":125},[45,119032,24659],{"class":2046},[45,119034,119035],{"class":313}," snap",[45,119037,26162],{"class":313},[45,119039,119040],{"class":313}," snap-store\n",[45,119042,119043],{"class":47,"line":1262},[45,119044,119045],{"class":267},"#移除firefox浏览器\n",[45,119047,119048,119050,119052,119054],{"class":47,"line":1277},[45,119049,24659],{"class":2046},[45,119051,119035],{"class":313},[45,119053,26162],{"class":313},[45,119055,119056],{"class":313}," firefox\n",[45,119058,119059],{"class":47,"line":1283},[45,119060,119061],{"class":267},"#移除gnome-42-2204\n",[45,119063,119064,119066,119068,119070],{"class":47,"line":1297},[45,119065,24659],{"class":2046},[45,119067,119035],{"class":313},[45,119069,26162],{"class":313},[45,119071,119072],{"class":313}," gnome-42-2204\n",[45,119074,119075],{"class":47,"line":1303},[45,119076,119077],{"class":267},"#移除gtk-common-themes\n",[45,119079,119080,119082,119084,119086],{"class":47,"line":1394},[45,119081,24659],{"class":2046},[45,119083,119035],{"class":313},[45,119085,26162],{"class":313},[45,119087,119088],{"class":313}," gtk-common-themes\n",[45,119090,119091],{"class":47,"line":1400},[45,119092,119093],{"class":267},"#移除其它...\n",[45,119095,119096],{"class":47,"line":1412},[45,119097,2757],{"class":51},[45,119099,119100],{"class":47,"line":1695},[45,119101,119102],{"class":267},"#移除core22,bare以及snapd\n",[45,119104,119105,119107,119109,119111],{"class":47,"line":1700},[45,119106,24659],{"class":2046},[45,119108,119035],{"class":313},[45,119110,26162],{"class":313},[45,119112,119113],{"class":313}," core22\n",[45,119115,119116,119118,119120,119122],{"class":47,"line":1706},[45,119117,24659],{"class":2046},[45,119119,119035],{"class":313},[45,119121,26162],{"class":313},[45,119123,119124],{"class":313}," bare\n",[45,119126,119127,119129,119131,119133],{"class":47,"line":1711},[45,119128,24659],{"class":2046},[45,119130,119035],{"class":313},[45,119132,26162],{"class":313},[45,119134,119135],{"class":313}," snapd\n",[10,119137,119138],{},[1545,119139],{"alt":40,"src":119140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[10,119142,119143],{},"输入以下命令查看是否还有snap包",[35,119145,119147],{"className":117347,"code":119146,"language":117349,"meta":40,"style":40},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[42,119148,119149,119155,119159,119163,119167],{"__ignoreMap":40},[45,119150,119151,119153],{"class":47,"line":48},[45,119152,119003],{"class":2046},[45,119154,119006],{"class":313},[45,119156,119157],{"class":47,"line":125},[45,119158,118855],{"class":267},[45,119160,119161],{"class":47,"line":1262},[45,119162,118879],{"class":2046},[45,119164,119165],{"class":47,"line":1277},[45,119166,118888],{"class":267},[45,119168,119169],{"class":47,"line":1283},[45,119170,118922],{"class":2046},[10,119172,119173],{},[1545,119174],{"alt":40,"src":119175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[176,119177,119179],{"id":119178},"_324-移除snap","3.2.4 移除snap",[10,119181,119182,119183,119188],{},"在删除掉",[13,119184,119187],{"href":119185,"rel":119186},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[17],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[35,119190,119192],{"className":117347,"code":119191,"language":117349,"meta":40,"style":40}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[42,119193,119194,119199,119212,119217,119228],{"__ignoreMap":40},[45,119195,119196],{"class":47,"line":48},[45,119197,119198],{"class":267}," #使用apt移除掉snap\n",[45,119200,119201,119203,119205,119207,119210],{"class":47,"line":125},[45,119202,24659],{"class":2046},[45,119204,117368],{"class":313},[45,119206,117676],{"class":313},[45,119208,119209],{"class":257}," --purge",[45,119211,119135],{"class":313},[45,119213,119214],{"class":47,"line":1262},[45,119215,119216],{"class":267},"#移除snapd的一些目录\n",[45,119218,119219,119221,119223,119225],{"class":47,"line":1277},[45,119220,24659],{"class":2046},[45,119222,118604],{"class":313},[45,119224,25408],{"class":257},[45,119226,119227],{"class":313}," \u002Fvar\u002Fcache\u002Fsnapd\n",[45,119229,119230,119232,119234,119236],{"class":47,"line":1283},[45,119231,24659],{"class":2046},[45,119233,118604],{"class":313},[45,119235,25408],{"class":257},[45,119237,119238],{"class":313}," ~\u002Fsnap\n",[10,119240,119241,119242,119245],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[42,119243,119244],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[176,119247,119249],{"id":119248},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[10,119251,119252],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[35,119254,119256],{"className":117347,"code":119255,"language":117349,"meta":40,"style":40},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[42,119257,119258],{"__ignoreMap":40},[45,119259,119260,119262,119264],{"class":47,"line":48},[45,119261,24659],{"class":2046},[45,119263,118634],{"class":313},[45,119265,119266],{"class":313}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[10,119268,119269,119270,119273],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[42,119271,119272],{},":wq"," 回车",[35,119275,119277],{"className":117347,"code":119276,"language":117349,"meta":40,"style":40},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[42,119278,119279,119286,119300],{"__ignoreMap":40},[45,119280,119281,119284],{"class":47,"line":48},[45,119282,119283],{"class":2046},"Package:",[45,119285,119135],{"class":313},[45,119287,119288,119291,119294,119297],{"class":47,"line":125},[45,119289,119290],{"class":2046},"Pin:",[45,119292,119293],{"class":313}," release",[45,119295,119296],{"class":313}," a=",[45,119298,119299],{"class":257},"*\n",[45,119301,119302,119305],{"class":47,"line":1262},[45,119303,119304],{"class":2046},"Pin-Priority:",[45,119306,119307],{"class":257}," -10\n",[10,119309,119310],{},[1545,119311],{"alt":40,"src":119312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[176,119314,119316],{"id":119315},"_326-测试是否成功","3.2.6 测试是否成功",[35,119318,119320],{"className":117347,"code":119319,"language":117349,"meta":40,"style":40},"sudo apt update\nsudo apt install firefox\n",[42,119321,119322,119330],{"__ignoreMap":40},[45,119323,119324,119326,119328],{"class":47,"line":48},[45,119325,24659],{"class":2046},[45,119327,117368],{"class":313},[45,119329,26325],{"class":313},[45,119331,119332,119334,119336,119338],{"class":47,"line":125},[45,119333,24659],{"class":2046},[45,119335,117368],{"class":313},[45,119337,23917],{"class":313},[45,119339,119056],{"class":313},[10,119341,119342],{},"这里提示snapd无法被安装，就证明成功了",[10,119344,119345],{},[1545,119346],{"alt":40,"src":119347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[176,119349,119351],{"id":119350},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[10,119353,119354],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[10,119356,119357],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[10,119359,119360],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[35,119362,119364],{"className":117347,"code":119363,"language":117349,"meta":40,"style":40},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[42,119365,119366,119371,119380,119385,119393],{"__ignoreMap":40},[45,119367,119368],{"class":47,"line":48},[45,119369,119370],{"class":267},"# 添加Mozilla提供的源\n",[45,119372,119373,119375,119377],{"class":47,"line":125},[45,119374,24659],{"class":2046},[45,119376,118895],{"class":313},[45,119378,119379],{"class":313}," ppa:mozillateam\u002Fppa\n",[45,119381,119382],{"class":47,"line":1262},[45,119383,119384],{"class":267},"# 安装Firefox\n",[45,119386,119387,119389,119391],{"class":47,"line":1277},[45,119388,24659],{"class":2046},[45,119390,117368],{"class":313},[45,119392,26325],{"class":313},[45,119394,119395,119397,119399,119401],{"class":47,"line":1283},[45,119396,24659],{"class":2046},[45,119398,117368],{"class":313},[45,119400,23917],{"class":313},[45,119402,119056],{"class":313},[176,119404,119406],{"id":119405},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[10,119408,119409],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[10,119411,119412],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[35,119414,119416],{"className":117347,"code":119415,"language":117349,"meta":40,"style":40},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[42,119417,119418,119423,119433,119441,119445],{"__ignoreMap":40},[45,119419,119420],{"class":47,"line":48},[45,119421,119422],{"class":267},"#删掉禁止安装snap的配置文件\n",[45,119424,119425,119427,119429,119431],{"class":47,"line":125},[45,119426,24659],{"class":2046},[45,119428,118604],{"class":313},[45,119430,25408],{"class":257},[45,119432,119266],{"class":313},[45,119434,119435,119437,119439],{"class":47,"line":1262},[45,119436,24659],{"class":2046},[45,119438,117368],{"class":313},[45,119440,26325],{"class":313},[45,119442,119443],{"class":47,"line":1277},[45,119444,2483],{"emptyLinePlaceholder":133},[45,119446,119447,119449,119451],{"class":47,"line":1283},[45,119448,24659],{"class":2046},[45,119450,117368],{"class":313},[45,119452,119453],{"class":313}," dist-update\n",[30,119455,119457],{"id":119456},"_33-中文输入法","3.3 中文输入法",[176,119459,119461],{"id":119460},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[10,119463,119464],{},"官网下载搜狗输入法",[10,119466,119467],{},[1545,119468],{"alt":40,"src":119469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[10,119471,119472],{},[1545,119473],{"alt":40,"src":119474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[10,119476,119477],{},"打开终端输入如下",[35,119479,119481],{"className":117347,"code":119480,"language":117349,"meta":40,"style":40},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[42,119482,119483,119490],{"__ignoreMap":40},[45,119484,119485,119487],{"class":47,"line":48},[45,119486,101327],{"class":257},[45,119488,119489],{"class":313}," ~\u002FDownloads\u002F\n",[45,119491,119492,119494,119496,119498],{"class":47,"line":125},[45,119493,24659],{"class":2046},[45,119495,117368],{"class":313},[45,119497,23917],{"class":313},[45,119499,119500],{"class":313}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[10,119502,119503],{},"打开Fcitx",[10,119505,119506,119509],{},[1545,119507],{"alt":40,"src":119508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1545,119510],{"alt":40,"src":119511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[10,119513,119514],{},[1545,119515],{"alt":40,"src":119516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[10,119518,119519],{},"添加搜狗输入法",[10,119521,119522],{},[1545,119523],{"alt":40,"src":119524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[10,119526,119527],{},[1545,119528],{"alt":40,"src":119529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[10,119531,119532],{},"将搜狗输入法设置为唯一输入法",[10,119534,119535],{},[1545,119536],{"alt":40,"src":119537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[176,119539,119541],{"id":119540},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[159,119543,119544],{},[162,119545,119546],{},"卸载旧输入法",[35,119548,119550],{"className":118574,"code":119549,"language":118576,"meta":40,"style":40},"sudo apt purge fcitx* ibus*\n",[42,119551,119552],{"__ignoreMap":40},[45,119553,119554,119556,119558,119560,119563,119565,119568],{"class":47,"line":48},[45,119555,24659],{"class":2046},[45,119557,117368],{"class":313},[45,119559,117709],{"class":313},[45,119561,119562],{"class":313}," fcitx",[45,119564,663],{"class":257},[45,119566,119567],{"class":313}," ibus",[45,119569,119299],{"class":257},[159,119571,119572],{"start":125},[162,119573,119574],{},"安装Fcitx5",[35,119576,119578],{"className":117347,"code":119577,"language":117349,"meta":40,"style":40},"# 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",[42,119579,119580,119585,119599,119603,119608,119617,119625],{"__ignoreMap":40},[45,119581,119582],{"class":47,"line":48},[45,119583,119584],{"class":267},"# Ubuntu22.04及以上、Debian12及以上\n",[45,119586,119587,119589,119591,119593,119596],{"class":47,"line":125},[45,119588,24659],{"class":2046},[45,119590,117368],{"class":313},[45,119592,23917],{"class":313},[45,119594,119595],{"class":313}," fcitx5",[45,119597,119598],{"class":313}," fcitx5-chinese-addons\n",[45,119600,119601],{"class":47,"line":1262},[45,119602,2483],{"emptyLinePlaceholder":133},[45,119604,119605],{"class":47,"line":1277},[45,119606,119607],{"class":267},"# Ubuntu20.04\n",[45,119609,119610,119612,119614],{"class":47,"line":1283},[45,119611,24659],{"class":2046},[45,119613,118895],{"class":313},[45,119615,119616],{"class":313}," ppa:zhsj\u002Ffcitx5\n",[45,119618,119619,119621,119623],{"class":47,"line":1297},[45,119620,24659],{"class":2046},[45,119622,117368],{"class":313},[45,119624,26325],{"class":313},[45,119626,119627,119629,119631,119633,119635],{"class":47,"line":1303},[45,119628,24659],{"class":2046},[45,119630,117368],{"class":313},[45,119632,23917],{"class":313},[45,119634,119595],{"class":313},[45,119636,119598],{"class":313},[159,119638,119639,119642],{"start":1262},[162,119640,119641],{},"Reboot System",[162,119643,119644],{},"启动Fcitx5",[10,119646,119647],{},[1545,119648],{"alt":40,"src":119649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[159,119651,119652],{"start":1283},[162,119653,119654],{},"修改一些设置",[10,119656,119657],{},"将Pinyin和Keyboard - English US加入到左边。",[10,119659,119660],{},[1545,119661],{"alt":40,"src":119662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[10,119664,119665],{},"添加快捷键以便于更好切换中英文",[10,119667,119668],{},[1545,119669],{"alt":40,"src":119670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[159,119672,119673],{"start":1297},[162,119674,119675],{},"重启",[35,119677,119679],{"className":118574,"code":119678,"language":118576,"meta":40,"style":40},"sudo shutdown -r now\n",[42,119680,119681],{"__ignoreMap":40},[45,119682,119683,119685,119688,119691],{"class":47,"line":48},[45,119684,24659],{"class":2046},[45,119686,119687],{"class":313}," shutdown",[45,119689,119690],{"class":257}," -r",[45,119692,119693],{"class":313}," now\n",[159,119695,119696],{"start":1303},[162,119697,119698],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[10,119700,119701],{},[13,119702,119703],{"href":119703,"rel":119704},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[17],[159,119706,119707],{"start":1394},[162,119708,119709],{},"再重启",[35,119711,119712],{"className":118574,"code":119678,"language":118576,"meta":40,"style":40},[42,119713,119714],{"__ignoreMap":40},[45,119715,119716,119718,119720,119722],{"class":47,"line":48},[45,119717,24659],{"class":2046},[45,119719,119687],{"class":313},[45,119721,119690],{"class":257},[45,119723,119693],{"class":313},[30,119725,119727],{"id":119726},"_34-pip3源替换","3.4 pip3源替换",[10,119729,119730],{},"非Debian系发行版需要做。",[10,119732,119733],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[10,119735,119736],{},"使用dnf的系统也可能不用做。",[35,119738,119740],{"className":117347,"code":119739,"language":117349,"meta":40,"style":40},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[42,119741,119742,119747,119754,119759,119764],{"__ignoreMap":40},[45,119743,119744],{"class":47,"line":48},[45,119745,119746],{"class":267},"# 检查是否已安装 pip\n",[45,119748,119749,119752],{"class":47,"line":125},[45,119750,119751],{"class":2046},"pip3",[45,119753,26376],{"class":257},[45,119755,119756],{"class":47,"line":1262},[45,119757,119758],{"class":267},"# 如果未安装，先安装 pip3（见下方）\n",[45,119760,119761],{"class":47,"line":1277},[45,119762,119763],{"class":267},"# 配置 pip 使用清华源\n",[45,119765,119766,119768,119771,119774,119777],{"class":47,"line":1283},[45,119767,119751],{"class":2046},[45,119769,119770],{"class":313}," config",[45,119772,119773],{"class":313}," set",[45,119775,119776],{"class":313}," global.index-url",[45,119778,119779],{"class":313}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[10,119781,119782],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[10,119784,119785],{},[1545,119786],{"alt":40,"src":119787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[35,119789,119791],{"className":117347,"code":119790,"language":117349,"meta":40,"style":40},"#安装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",[42,119792,119793,119798,119806,119817,119821,119826,119845,119849,119854,119866,119870,119875],{"__ignoreMap":40},[45,119794,119795],{"class":47,"line":48},[45,119796,119797],{"class":267},"#安装pip3\n",[45,119799,119800,119802,119804],{"class":47,"line":125},[45,119801,24659],{"class":2046},[45,119803,117368],{"class":313},[45,119805,26325],{"class":313},[45,119807,119808,119810,119812,119814],{"class":47,"line":1262},[45,119809,24659],{"class":2046},[45,119811,26159],{"class":313},[45,119813,23917],{"class":313},[45,119815,119816],{"class":313}," python3-pip\n",[45,119818,119819],{"class":47,"line":1277},[45,119820,2483],{"emptyLinePlaceholder":133},[45,119822,119823],{"class":47,"line":1283},[45,119824,119825],{"class":267},"#更新pip3\n",[45,119827,119828,119830,119832,119834,119836,119838,119841,119843],{"class":47,"line":1297},[45,119829,100930],{"class":2046},[45,119831,100933],{"class":257},[45,119833,100956],{"class":313},[45,119835,23917],{"class":313},[45,119837,26513],{"class":257},[45,119839,119840],{"class":313}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[45,119842,100961],{"class":257},[45,119844,100964],{"class":313},[45,119846,119847],{"class":47,"line":1303},[45,119848,2483],{"emptyLinePlaceholder":133},[45,119850,119851],{"class":47,"line":1394},[45,119852,119853],{"class":267},"#设置pip源为清华源\n",[45,119855,119856,119858,119860,119862,119864],{"class":47,"line":1400},[45,119857,119751],{"class":2046},[45,119859,119770],{"class":313},[45,119861,119773],{"class":313},[45,119863,119776],{"class":313},[45,119865,119779],{"class":313},[45,119867,119868],{"class":47,"line":1412},[45,119869,2483],{"emptyLinePlaceholder":133},[45,119871,119872],{"class":47,"line":1695},[45,119873,119874],{"class":267},"#测试\n",[45,119876,119877,119879,119881,119883,119885,119887],{"class":47,"line":1700},[45,119878,100930],{"class":2046},[45,119880,100933],{"class":257},[45,119882,100956],{"class":313},[45,119884,23917],{"class":313},[45,119886,100961],{"class":257},[45,119888,100964],{"class":313},[10,119890,119891],{},"成功的话，会看到Looking后面是tsinghua字样。",[10,119893,119894],{},[1545,119895],{"alt":40,"src":119896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[30,119898,119900],{"id":119899},"_35-显卡驱动安装","3.5 显卡驱动安装",[176,119902,119904],{"id":119903},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[35,119906,119908],{"className":118574,"code":119907,"language":118576,"meta":40,"style":40},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[42,119909,119910,119915,119930,119935],{"__ignoreMap":40},[45,119911,119912],{"class":47,"line":48},[45,119913,119914],{"class":267},"# 如果是使用apt安装的驱动\n",[45,119916,119917,119919,119921,119923,119925,119928],{"class":47,"line":125},[45,119918,24659],{"class":2046},[45,119920,26159],{"class":313},[45,119922,26162],{"class":313},[45,119924,119209],{"class":257},[45,119926,119927],{"class":313}," nvidia",[45,119929,119299],{"class":257},[45,119931,119932],{"class":47,"line":1262},[45,119933,119934],{"class":267},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[45,119936,119937,119939],{"class":47,"line":1277},[45,119938,24659],{"class":2046},[45,119940,119941],{"class":313}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[176,119943,119945],{"id":119944},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22081,119947,119949],{"id":119948},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22993,119951,119953],{"id":119952},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[35,119955,119957],{"className":118574,"code":119956,"language":118576,"meta":40,"style":40},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[42,119958,119959,119964,119975,119980,119990,119995],{"__ignoreMap":40},[45,119960,119961],{"class":47,"line":48},[45,119962,119963],{"class":267},"# 安装英伟达驱动\n",[45,119965,119966,119968,119970,119972],{"class":47,"line":125},[45,119967,24659],{"class":2046},[45,119969,117368],{"class":313},[45,119971,23917],{"class":313},[45,119973,119974],{"class":313}," nvidia-driver-版本号\n",[45,119976,119977],{"class":47,"line":1262},[45,119978,119979],{"class":267},"# 重启 \n",[45,119981,119982,119984,119986,119988],{"class":47,"line":1277},[45,119983,24659],{"class":2046},[45,119985,119687],{"class":313},[45,119987,119690],{"class":257},[45,119989,119693],{"class":313},[45,119991,119992],{"class":47,"line":1283},[45,119993,119994],{"class":267},"# 检查驱动是否安装成功\n",[45,119996,119997],{"class":47,"line":1297},[45,119998,119999],{"class":2046},"nvidia-smi\n",[22993,120001,120003],{"id":120002},"_35212-debian","3.5.2.1.2 Debian",[35,120005,120007],{"className":118574,"code":120006,"language":118576,"meta":40,"style":40},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[42,120008,120009,120013,120027,120031,120041,120045],{"__ignoreMap":40},[45,120010,120011],{"class":47,"line":48},[45,120012,119963],{"class":267},[45,120014,120015,120017,120019,120021,120024],{"class":47,"line":125},[45,120016,24659],{"class":2046},[45,120018,117368],{"class":313},[45,120020,23917],{"class":313},[45,120022,120023],{"class":313}," nvidia-driver",[45,120025,120026],{"class":313}," nvidia-settings\n",[45,120028,120029],{"class":47,"line":1262},[45,120030,119979],{"class":267},[45,120032,120033,120035,120037,120039],{"class":47,"line":1277},[45,120034,24659],{"class":2046},[45,120036,119687],{"class":313},[45,120038,119690],{"class":257},[45,120040,119693],{"class":313},[45,120042,120043],{"class":47,"line":1283},[45,120044,119994],{"class":267},[45,120046,120047],{"class":47,"line":1297},[45,120048,119999],{"class":2046},[22081,120050,120052],{"id":120051},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[10,120054,120055,120056,120059],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[358,120057,120058],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[10,120061,120062,120063],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23636,120064,120065],{},[358,120066,120067],{},"（也可以不禁用桌面环境，直接进行下一步。）",[35,120069,120071],{"className":118574,"code":120070,"language":118576,"meta":40,"style":40},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[42,120072,120073,120078,120088,120093,120106,120111],{"__ignoreMap":40},[45,120074,120075],{"class":47,"line":48},[45,120076,120077],{"class":267},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[45,120079,120080,120082,120085],{"class":47,"line":125},[45,120081,24659],{"class":2046},[45,120083,120084],{"class":313}," telinit",[45,120086,120087],{"class":257}," 3\n",[45,120089,120090],{"class":47,"line":1262},[45,120091,120092],{"class":267},"# ubuntu 使用下方命令\n",[45,120094,120095,120097,120100,120103],{"class":47,"line":1277},[45,120096,24659],{"class":2046},[45,120098,120099],{"class":313}," service",[45,120101,120102],{"class":313}," lightdm",[45,120104,120105],{"class":313}," stop\n",[45,120107,120108],{"class":47,"line":1283},[45,120109,120110],{"class":267},"# Fedora 使用下方命令\n",[45,120112,120113,120115,120117,120120],{"class":47,"line":1297},[45,120114,24659],{"class":2046},[45,120116,26596],{"class":313},[45,120118,120119],{"class":313}," isolate",[45,120121,120122],{"class":313}," multi-user.target\n",[10,120124,120125],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[35,120127,120129],{"className":118574,"code":120128,"language":118576,"meta":40,"style":40},"# 编译环境+准备工作\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",[42,120130,120131,120136,120147,120152,120159,120164,120176,120181,120188,120193],{"__ignoreMap":40},[45,120132,120133],{"class":47,"line":48},[45,120134,120135],{"class":267},"# 编译环境+准备工作\n",[45,120137,120138,120140,120142,120144],{"class":47,"line":125},[45,120139,24659],{"class":2046},[45,120141,117368],{"class":313},[45,120143,23917],{"class":313},[45,120145,120146],{"class":313}," build-essential\n",[45,120148,120149],{"class":47,"line":1262},[45,120150,120151],{"class":267},"# 进入到.run目录中\n",[45,120153,120154,120156],{"class":47,"line":1277},[45,120155,101327],{"class":257},[45,120157,120158],{"class":313}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[45,120160,120161],{"class":47,"line":1283},[45,120162,120163],{"class":267},"# 给驱动文件增加可执行权限：\n",[45,120165,120166,120168,120170,120173],{"class":47,"line":1297},[45,120167,24659],{"class":2046},[45,120169,24662],{"class":313},[45,120171,120172],{"class":313}," a+x",[45,120174,120175],{"class":313}," NVIDIA-Linux-x86_64-550.107.02.run\n",[45,120177,120178],{"class":47,"line":1303},[45,120179,120180],{"class":267},"# 然后执行安装：\n",[45,120182,120183,120185],{"class":47,"line":1394},[45,120184,24659],{"class":2046},[45,120186,120187],{"class":313}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[45,120189,120190],{"class":47,"line":1400},[45,120191,120192],{"class":267},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[45,120194,120195,120197,120200],{"class":47,"line":1412},[45,120196,24659],{"class":2046},[45,120198,120199],{"class":313}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[45,120201,120202],{"class":257},"  --no-opengl-files\n",[10,120204,120205],{},"安装完毕重启即可",[35,120207,120209],{"className":118574,"code":120208,"language":118576,"meta":40,"style":40},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[42,120210,120211,120215,120221,120225],{"__ignoreMap":40},[45,120212,120213],{"class":47,"line":48},[45,120214,119979],{"class":267},[45,120216,120217,120219],{"class":47,"line":125},[45,120218,24659],{"class":2046},[45,120220,26730],{"class":313},[45,120222,120223],{"class":47,"line":1262},[45,120224,119994],{"class":267},[45,120226,120227],{"class":47,"line":1277},[45,120228,119999],{"class":2046},[176,120230,120232],{"id":120231},"_353-安装cuda","3.5.3 安装CUDA",[10,120234,120235],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[10,120237,120238],{},[1545,120239],{"alt":40,"src":120240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[159,120242,120243],{},[162,120244,120245],{},"先查看显卡驱动所支持的最高CUDA版本",[35,120247,120248],{"className":118574,"code":119999,"language":118576,"meta":40,"style":40},[42,120249,120250],{"__ignoreMap":40},[45,120251,120252],{"class":47,"line":48},[45,120253,119999],{"class":2046},[10,120255,120256],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[10,120258,120259],{},[1545,120260],{"alt":40,"src":120261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[159,120263,120264],{"start":125},[162,120265,120266],{},"下载CUDA并安装CUDA",[10,120268,118353,120269],{},[13,120270,118356],{"href":118356,"rel":120271},[17],[10,120273,120274],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[10,120276,120277],{},[1545,120278],{"alt":40,"src":120279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[10,120281,120282,120283,120288],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[13,120284,120287],{"href":120285,"rel":120286},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[17],"Vinci机器人队单片机教程","）",[10,120290,120291],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[10,120293,120294],{},[1545,120295],{"alt":40,"src":120296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[10,120298,120299],{},"将最下方框框里的命令敲入终端",[35,120301,120303],{"className":118574,"code":120302,"language":118576,"meta":40,"style":40},"# 在当前文件夹下创建一个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",[42,120304,120305,120310,120319,120324,120331,120336,120344,120349,120360,120365],{"__ignoreMap":40},[45,120306,120307],{"class":47,"line":48},[45,120308,120309],{"class":267},"# 在当前文件夹下创建一个ttt的子文件夹\n",[45,120311,120312,120314,120316],{"class":47,"line":125},[45,120313,101317],{"class":2046},[45,120315,29299],{"class":257},[45,120317,120318],{"class":313}," .\u002Fttt\n",[45,120320,120321],{"class":47,"line":1262},[45,120322,120323],{"class":267},"# 进入ttt文件夹\n",[45,120325,120326,120328],{"class":47,"line":1277},[45,120327,101327],{"class":257},[45,120329,120330],{"class":313}," ttt\n",[45,120332,120333],{"class":47,"line":1283},[45,120334,120335],{"class":267},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[45,120337,120338,120341],{"class":47,"line":1297},[45,120339,120340],{"class":2046},"wget",[45,120342,120343],{"class":313}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[45,120345,120346],{"class":47,"line":1303},[45,120347,120348],{"class":267},"# 给予权限\n",[45,120350,120351,120353,120355,120357],{"class":47,"line":1394},[45,120352,24659],{"class":2046},[45,120354,24662],{"class":313},[45,120356,120172],{"class":313},[45,120358,120359],{"class":313}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[45,120361,120362],{"class":47,"line":1400},[45,120363,120364],{"class":267},"# 运行脚本\n",[45,120366,120367,120369],{"class":47,"line":1412},[45,120368,24659],{"class":2046},[45,120370,120359],{"class":313},[10,120372,120373],{},[1545,120374],{"alt":40,"src":120375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[10,120377,120378],{},"正在安装中：",[10,120380,120381],{},[1545,120382],{"alt":40,"src":120383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[10,120385,120386],{},"输入accept接受即可",[10,120388,120389],{},[1545,120390],{"alt":40,"src":120391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[10,120393,120394],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[10,120396,120397],{},[1545,120398],{"alt":40,"src":120399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[10,120401,120402],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[10,120404,120405],{},[1545,120406],{"alt":40,"src":120407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[159,120409,120410],{"start":1262},[162,120411,120412],{},"配置环境",[10,120414,120415],{},"根据上方确认一下路径，比如我上面红色框起来的为",[35,120417,120419],{"className":118574,"code":120418,"language":118576,"meta":40,"style":40},"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",[42,120420,120421,120437,120452],{"__ignoreMap":40},[45,120422,120423,120426,120429,120432,120435],{"class":47,"line":48},[45,120424,120425],{"class":2046},"Please",[45,120427,120428],{"class":313}," make",[45,120430,120431],{"class":313}," sure",[45,120433,120434],{"class":313}," that",[45,120436,2757],{"class":51},[45,120438,120439,120441,120444,120447,120450],{"class":47,"line":125},[45,120440,52352],{"class":2046},[45,120442,120443],{"class":313},"   PATH",[45,120445,120446],{"class":313}," includes",[45,120448,120449],{"class":313}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[45,120451,2757],{"class":51},[45,120453,120454,120456,120459,120461,120464,120467,120469,120472,120475,120478,120481,120483,120486,120488],{"class":47,"line":1262},[45,120455,52352],{"class":2046},[45,120457,120458],{"class":313},"   LD_LIBRARY_PATH",[45,120460,120446],{"class":313},[45,120462,120463],{"class":313}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[45,120465,120466],{"class":313}," or,",[45,120468,5292],{"class":313},[45,120470,120471],{"class":313}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[45,120473,120474],{"class":313}," to",[45,120476,120477],{"class":313}," \u002Fetc\u002Fld.so.conf",[45,120479,120480],{"class":313}," and",[45,120482,27313],{"class":313},[45,120484,120485],{"class":313}," ldconfig",[45,120487,64685],{"class":313},[45,120489,120490],{"class":313}," root\n",[10,120492,120493],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[35,120495,120497],{"className":118574,"code":120496,"language":118576,"meta":40,"style":40},"which nvcc\n",[42,120498,120499],{"__ignoreMap":40},[45,120500,120501,120504],{"class":47,"line":48},[45,120502,120503],{"class":257},"which",[45,120505,120506],{"class":313}," nvcc\n",[10,120508,120509],{},[1545,120510],{"alt":40,"src":120511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[10,120513,120514],{},"所以我进行以下操作：",[35,120516,120518],{"className":118574,"code":120517,"language":118576,"meta":40,"style":40},"sudo vim ~\u002F.bashrc\n",[42,120519,120520],{"__ignoreMap":40},[45,120521,120522,120524,120526],{"class":47,"line":48},[45,120523,24659],{"class":2046},[45,120525,118634],{"class":313},[45,120527,120528],{"class":313}," ~\u002F.bashrc\n",[10,120530,120531],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[35,120533,120535],{"className":118574,"code":120534,"language":118576,"meta":40,"style":40},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[42,120536,120537,120549],{"__ignoreMap":40},[45,120538,120539,120541,120544,120546],{"class":47,"line":48},[45,120540,25125],{"class":93},[45,120542,120543],{"class":51}," PATH",[45,120545,254],{"class":93},[45,120547,120548],{"class":51},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[45,120550,120551,120553,120556,120558],{"class":47,"line":125},[45,120552,25125],{"class":93},[45,120554,120555],{"class":51}," LD_LIBRARY_PATH",[45,120557,254],{"class":93},[45,120559,120560],{"class":51},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[10,120562,120563],{},[1545,120564],{"alt":40,"src":120565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[35,120567,120569],{"className":118574,"code":120568,"language":118576,"meta":40,"style":40},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[42,120570,120571,120576,120582,120587],{"__ignoreMap":40},[45,120572,120573],{"class":47,"line":48},[45,120574,120575],{"class":267},"# 刷新当前终端的环境变量\n",[45,120577,120578,120580],{"class":47,"line":125},[45,120579,100944],{"class":257},[45,120581,120528],{"class":313},[45,120583,120584],{"class":47,"line":1262},[45,120585,120586],{"class":267},"# 验证CUDA是否安装成功\n",[45,120588,120589,120592],{"class":47,"line":1277},[45,120590,120591],{"class":2046},"nvcc",[45,120593,120594],{"class":257}," -V\n",[10,120596,120597],{},"出现下图这种则安装成功。",[10,120599,120600],{},[1545,120601],{"alt":40,"src":120602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[176,120604,120606],{"id":120605},"_354-安装cudnn","3.5.4 安装cuDNN",[159,120608,120609],{},[162,120610,120611],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[10,120613,120614,120615,120620],{},"前往 NVIDIA cuDNN 下载页面：",[13,120616,120619],{"href":120617,"rel":120618},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[17],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[10,120622,120623],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[10,120625,120626],{},[1545,120627],{"alt":40,"src":120628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[10,120630,120631],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[10,120633,120634],{},[1545,120635],{"alt":40,"src":120636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[10,120638,120639],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[10,120641,120642],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[10,120644,120645],{},[358,120646,120647],{},"我这里选择所有Linux X86_64最通用的办法：",[10,120649,120650],{},"下载好的：",[10,120652,120653],{},[1545,120654],{"alt":40,"src":120655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[159,120657,120658],{"start":125},[162,120659,120660],{},"安装cuDNN",[10,120662,120663],{},"找到该文件所在目录，并打开终端，cd到该目录。",[10,120665,120666],{},[1545,120667],{"alt":40,"src":120668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[10,120670,120671],{},"解压文件，并复制到对应位置完成安装",[35,120673,120675],{"className":118574,"code":120674,"language":118576,"meta":40,"style":40},"# 解压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",[42,120676,120677,120682,120693,120698,120705,120710,120726,120740,120745,120756,120765,120769,120785],{"__ignoreMap":40},[45,120678,120679],{"class":47,"line":48},[45,120680,120681],{"class":267},"# 解压cuDNN文件\n",[45,120683,120684,120687,120690],{"class":47,"line":125},[45,120685,120686],{"class":2046},"tar",[45,120688,120689],{"class":257}," -xvf",[45,120691,120692],{"class":313}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[45,120694,120695],{"class":47,"line":1262},[45,120696,120697],{"class":267},"# cd进文件夹\n",[45,120699,120700,120702],{"class":47,"line":1277},[45,120701,101327],{"class":257},[45,120703,120704],{"class":313}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[45,120706,120707],{"class":47,"line":1283},[45,120708,120709],{"class":267},"# 复制cuDNN文件到CUDA目录\n",[45,120711,120712,120714,120716,120719,120721,120724],{"class":47,"line":1297},[45,120713,24659],{"class":2046},[45,120715,27944],{"class":313},[45,120717,120718],{"class":313}," include\u002Fcudnn",[45,120720,663],{"class":257},[45,120722,120723],{"class":313},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[45,120725,2757],{"class":51},[45,120727,120728,120730,120732,120735,120737],{"class":47,"line":1303},[45,120729,24659],{"class":2046},[45,120731,27944],{"class":313},[45,120733,120734],{"class":313}," lib\u002Flibcudnn",[45,120736,663],{"class":257},[45,120738,120739],{"class":313},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[45,120741,120742],{"class":47,"line":1394},[45,120743,120744],{"class":267},"# 对比一下有没有缺文件\n",[45,120746,120747,120749,120752,120754],{"class":47,"line":1400},[45,120748,26844],{"class":2046},[45,120750,120751],{"class":313}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[45,120753,663],{"class":257},[45,120755,2757],{"class":51},[45,120757,120758,120760,120763],{"class":47,"line":1412},[45,120759,26844],{"class":2046},[45,120761,120762],{"class":313}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[45,120764,119299],{"class":257},[45,120766,120767],{"class":47,"line":1695},[45,120768,120348],{"class":267},[45,120770,120771,120773,120775,120778,120780,120782],{"class":47,"line":1700},[45,120772,24659],{"class":2046},[45,120774,24662],{"class":313},[45,120776,120777],{"class":313}," a+r",[45,120779,120751],{"class":313},[45,120781,663],{"class":257},[45,120783,120784],{"class":51},"   \n",[45,120786,120787,120789,120791,120793,120795],{"class":47,"line":1706},[45,120788,24659],{"class":2046},[45,120790,24662],{"class":313},[45,120792,120777],{"class":313},[45,120794,120762],{"class":313},[45,120796,119299],{"class":257},[159,120798,120799],{"start":1262},[162,120800,120801],{},"检查是否安装成功",[35,120803,120805],{"className":118574,"code":120804,"language":118576,"meta":40,"style":40},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[42,120806,120807,120812],{"__ignoreMap":40},[45,120808,120809],{"class":47,"line":48},[45,120810,120811],{"class":267},"# 检查cuDNN版本命令\n",[45,120813,120814,120817,120820,120822,120824,120827,120830],{"class":47,"line":125},[45,120815,120816],{"class":2046},"cat",[45,120818,120819],{"class":313}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[45,120821,25192],{"class":93},[45,120823,30319],{"class":2046},[45,120825,120826],{"class":313}," CUDNN_MAJOR",[45,120828,120829],{"class":257}," -A",[45,120831,47804],{"class":257},[10,120833,120834],{},"出现下图这样的就是安装成功了",[10,120836,120837],{},[1545,120838],{"alt":40,"src":120839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[159,120841,120842],{"start":1277},[162,120843,120844],{},"软链接(一般不需要)",[35,120846,120848],{"className":118574,"code":120847,"language":118576,"meta":40,"style":40},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[42,120849,120850,120855],{"__ignoreMap":40},[45,120851,120852],{"class":47,"line":48},[45,120853,120854],{"class":267},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[45,120856,120857,120859],{"class":47,"line":125},[45,120858,24659],{"class":2046},[45,120860,120861],{"class":313}," ldconfig\n",[10,120863,120864],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[35,120866,120871],{"className":120867,"code":120868,"language":120869,"meta":120870,"style":40},"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",[42,120872,120873,120878,120883,120888,120893,120898,120903],{"__ignoreMap":40},[45,120874,120875],{"class":47,"line":48},[45,120876,120877],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[45,120879,120880],{"class":47,"line":125},[45,120881,120882],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[45,120884,120885],{"class":47,"line":1262},[45,120886,120887],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[45,120889,120890],{"class":47,"line":1277},[45,120891,120892],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[45,120894,120895],{"class":47,"line":1283},[45,120896,120897],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[45,120899,120900],{"class":47,"line":1297},[45,120901,120902],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[45,120904,120905],{"class":47,"line":1303},[45,120906,120907],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[10,120909,120910],{},"运行下方的命令",[35,120912,120914],{"className":118574,"code":120913,"language":118576,"meta":40,"style":40},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[42,120915,120916,120921,120928,120933],{"__ignoreMap":40},[45,120917,120918],{"class":47,"line":48},[45,120919,120920],{"class":267},"# cd进入CUDA路径\n",[45,120922,120923,120925],{"class":47,"line":125},[45,120924,101327],{"class":257},[45,120926,120927],{"class":313}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[45,120929,120930],{"class":47,"line":1262},[45,120931,120932],{"class":267}," # 查看本路径下的需要软链接的文件名\n",[45,120934,120935],{"class":47,"line":1277},[45,120936,120937],{"class":2046}," ls\n",[10,120939,120940],{},[1545,120941],{"alt":40,"src":120942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[10,120944,120945,120946,18493,120949,18493,120952,120955],{},"如上图，我需要将",[42,120947,120948],{},"libcudnn_xxx_xxxxx.so.8.9.7",[42,120950,120951],{},"libcudnn_xxx_xxxxx.so.8",[42,120953,120954],{},"libcudnn_xxx_xxxxx.so","软链接",[35,120957,120959],{"className":118574,"code":120958,"language":118576,"meta":40,"style":40},"# 创建符号链接。对于每个 .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",[42,120960,120961,120966,120982,120996,121010,121024,121038,121052,121066,121071,121077,121082],{"__ignoreMap":40},[45,120962,120963],{"class":47,"line":48},[45,120964,120965],{"class":267},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[45,120967,120968,120970,120973,120976,120979],{"class":47,"line":125},[45,120969,24659],{"class":2046},[45,120971,120972],{"class":313}," ln",[45,120974,120975],{"class":257}," -sf",[45,120977,120978],{"class":313}," libcudnn_cnn_train.so.8.9.7",[45,120980,120981],{"class":313}," libcudnn_cnn_train.so.8\n",[45,120983,120984,120986,120988,120990,120993],{"class":47,"line":1262},[45,120985,24659],{"class":2046},[45,120987,120972],{"class":313},[45,120989,120975],{"class":257},[45,120991,120992],{"class":313}," libcudnn_adv_infer.so.8.9.7",[45,120994,120995],{"class":313}," libcudnn_adv_infer.so.8\n",[45,120997,120998,121000,121002,121004,121007],{"class":47,"line":1277},[45,120999,24659],{"class":2046},[45,121001,120972],{"class":313},[45,121003,120975],{"class":257},[45,121005,121006],{"class":313}," libcudnn_adv_train.so.8.9.7",[45,121008,121009],{"class":313}," libcudnn_adv_train.so.8\n",[45,121011,121012,121014,121016,121018,121021],{"class":47,"line":1283},[45,121013,24659],{"class":2046},[45,121015,120972],{"class":313},[45,121017,120975],{"class":257},[45,121019,121020],{"class":313}," libcudnn_cnn_infer.so.8.9.7",[45,121022,121023],{"class":313}," libcudnn_cnn_infer.so.8\n",[45,121025,121026,121028,121030,121032,121035],{"class":47,"line":1297},[45,121027,24659],{"class":2046},[45,121029,120972],{"class":313},[45,121031,120975],{"class":257},[45,121033,121034],{"class":313}," libcudnn.so.8.9.7",[45,121036,121037],{"class":313}," libcudnn.so.8\n",[45,121039,121040,121042,121044,121046,121049],{"class":47,"line":1303},[45,121041,24659],{"class":2046},[45,121043,120972],{"class":313},[45,121045,120975],{"class":257},[45,121047,121048],{"class":313}," libcudnn_ops_infer.so.8.9.7",[45,121050,121051],{"class":313}," libcudnn_ops_infer.so.8\n",[45,121053,121054,121056,121058,121060,121063],{"class":47,"line":1394},[45,121055,24659],{"class":2046},[45,121057,120972],{"class":313},[45,121059,120975],{"class":257},[45,121061,121062],{"class":313}," libcudnn_ops_train.so.8.9.7",[45,121064,121065],{"class":313}," libcudnn_ops_train.so.8\n",[45,121067,121068],{"class":47,"line":1400},[45,121069,121070],{"class":267},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[45,121072,121073,121075],{"class":47,"line":1412},[45,121074,24659],{"class":2046},[45,121076,120861],{"class":313},[45,121078,121079],{"class":47,"line":1695},[45,121080,121081],{"class":267},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[45,121083,121084,121086,121089,121092,121094,121097],{"class":47,"line":1700},[45,121085,26844],{"class":2046},[45,121087,121088],{"class":257}," -l",[45,121090,121091],{"class":313}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[45,121093,663],{"class":257},[45,121095,121096],{"class":313},".so",[45,121098,119299],{"class":257},[176,121100,121102],{"id":121101},"_355-常见问题","3.5.5 常见问题",[159,121104,121105],{},[162,121106,121107],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[35,121109,121111],{"className":118574,"code":121110,"language":118576,"meta":40,"style":40},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[42,121112,121113],{"__ignoreMap":40},[45,121114,121115,121117,121119],{"class":47,"line":48},[45,121116,24659],{"class":2046},[45,121118,118634],{"class":313},[45,121120,121121],{"class":313}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[10,121123,121124],{},"blacklist-nouveau.conf文件内容如下：",[35,121126,121128],{"className":118574,"code":121127,"language":118576,"meta":40,"style":40},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[42,121129,121130,121138,121145,121157,121167],{"__ignoreMap":40},[45,121131,121132,121135],{"class":47,"line":48},[45,121133,121134],{"class":2046},"blacklist",[45,121136,121137],{"class":313}," nouveau\n",[45,121139,121140,121142],{"class":47,"line":125},[45,121141,121134],{"class":2046},[45,121143,121144],{"class":313}," lbm-nouveau\n",[45,121146,121147,121149,121152,121155],{"class":47,"line":1262},[45,121148,115981],{"class":2046},[45,121150,121151],{"class":313}," nouveau",[45,121153,121154],{"class":313}," modeset=",[45,121156,3168],{"class":257},[45,121158,121159,121162,121164],{"class":47,"line":1277},[45,121160,121161],{"class":257},"alias",[45,121163,121151],{"class":313},[45,121165,121166],{"class":313}," off\n",[45,121168,121169,121171,121174],{"class":47,"line":1283},[45,121170,121161],{"class":257},[45,121172,121173],{"class":313}," lbm-nouveau",[45,121175,121166],{"class":313},[10,121177,121178],{},"接着运行下方命令",[35,121180,121182],{"className":118574,"code":121181,"language":118576,"meta":40,"style":40},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[42,121183,121184,121194,121199],{"__ignoreMap":40},[45,121185,121186,121188,121191],{"class":47,"line":48},[45,121187,24659],{"class":2046},[45,121189,121190],{"class":313}," update-initramfs",[45,121192,121193],{"class":257}," -u\n",[45,121195,121196],{"class":47,"line":125},[45,121197,121198],{"class":2046},"或者\n",[45,121200,121201,121203,121206],{"class":47,"line":1262},[45,121202,24659],{"class":2046},[45,121204,121205],{"class":313}," dracut",[45,121207,121208],{"class":257}," --force\n",[10,121210,121211],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[35,121213,121215],{"className":118574,"code":121214,"language":118576,"meta":40,"style":40},"lsmod | grep nouveau\n",[42,121216,121217],{"__ignoreMap":40},[45,121218,121219,121222,121224,121226],{"class":47,"line":48},[45,121220,121221],{"class":2046},"lsmod",[45,121223,25192],{"class":93},[45,121225,30319],{"class":2046},[45,121227,121137],{"class":313},[159,121229,121230],{"start":125},[162,121231,121232],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[35,121234,121236],{"className":118574,"code":121235,"language":118576,"meta":40,"style":40},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[42,121237,121238],{"__ignoreMap":40},[45,121239,121240,121242,121244],{"class":47,"line":48},[45,121241,24659],{"class":2046},[45,121243,118634],{"class":313},[45,121245,121246],{"class":313}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[10,121248,121249],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[35,121251,121253],{"className":118574,"code":121252,"language":118576,"meta":40,"style":40},"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",[42,121254,121255,121263,121271,121279,121286,121294,121304,121312],{"__ignoreMap":40},[45,121256,121257,121260],{"class":47,"line":48},[45,121258,121259],{"class":2046},"Section",[45,121261,121262],{"class":313}," \"OutputClass\"\n",[45,121264,121265,121268],{"class":47,"line":125},[45,121266,121267],{"class":2046},"   Identifier",[45,121269,121270],{"class":313}," \"nvidia\"\n",[45,121272,121273,121276],{"class":47,"line":1262},[45,121274,121275],{"class":2046},"   MatchDriver",[45,121277,121278],{"class":313}," \"nvidia-drm\"\n",[45,121280,121281,121284],{"class":47,"line":1277},[45,121282,121283],{"class":2046},"   Driver",[45,121285,121270],{"class":313},[45,121287,121288,121291],{"class":47,"line":1283},[45,121289,121290],{"class":2046},"   Option",[45,121292,121293],{"class":313}," \"AllowEmptyInitialConfiguration\"\n",[45,121295,121296,121298,121301],{"class":47,"line":1297},[45,121297,121290],{"class":2046},[45,121299,121300],{"class":313}," \"PrimaryGPU\"",[45,121302,121303],{"class":313}," \"yes\"\n",[45,121305,121306,121309],{"class":47,"line":1303},[45,121307,121308],{"class":2046},"   ModulePath",[45,121310,121311],{"class":313}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[45,121313,121314],{"class":47,"line":1394},[45,121315,121316],{"class":2046},"EndSection\n",[159,121318,121319],{"start":1262},[162,121320,121321],{},"安装N卡驱动提示错误",[35,121323,121325],{"className":120867,"code":121324,"language":120869,"meta":120870,"style":40},"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",[42,121326,121327],{"__ignoreMap":40},[45,121328,121329],{"class":47,"line":48},[45,121330,121324],{},[159,121332,121333],{},[162,121334,121335],{},"检查当前运行的内核版本：",[10,121337,121338],{},"运行以下命令以查看你当前正在使用的内核版本：",[35,121340,121342],{"className":117347,"code":121341,"language":117349,"meta":40,"style":40},"uname -r\n",[42,121343,121344],{"__ignoreMap":40},[45,121345,121346,121348],{"class":47,"line":48},[45,121347,70285],{"class":2046},[45,121349,121350],{"class":257}," -r\n",[159,121352,121353],{"start":125},[162,121354,121355],{},"安装内核开发文件：",[10,121357,121358,121359,121362],{},"确保你已经安装了与当前内核版本相匹配的 ",[42,121360,121361],{},"kernel-devel"," 包。运行以下命令来安装：",[35,121364,121366],{"className":117347,"code":121365,"language":117349,"meta":40,"style":40},"sudo dnf install kernel-devel-$(uname -r)\n",[42,121367,121368],{"__ignoreMap":40},[45,121369,121370,121372,121374,121376,121379,121381,121383,121385],{"class":47,"line":48},[45,121371,24659],{"class":2046},[45,121373,26398],{"class":313},[45,121375,23917],{"class":313},[45,121377,121378],{"class":313}," kernel-devel-",[45,121380,25182],{"class":51},[45,121382,70285],{"class":2046},[45,121384,119690],{"class":257},[45,121386,215],{"class":51},[10,121388,121389],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[159,121391,121392],{"start":1262},[162,121393,121394],{},"安装内核源代码（如果需要）：",[10,121396,121397],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[35,121399,121401],{"className":117347,"code":121400,"language":117349,"meta":40,"style":40},"sudo dnf install kernel-headers kernel-source\n",[42,121402,121403],{"__ignoreMap":40},[45,121404,121405,121407,121409,121411,121414],{"class":47,"line":48},[45,121406,24659],{"class":2046},[45,121408,26398],{"class":313},[45,121410,23917],{"class":313},[45,121412,121413],{"class":313}," kernel-headers",[45,121415,121416],{"class":313}," kernel-source\n",[159,121418,121419],{"start":1277},[162,121420,121421],{},"检查安装：",[10,121423,121424,121425,121428],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[42,121426,121427],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[35,121430,121432],{"className":117347,"code":121431,"language":117349,"meta":40,"style":40},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[42,121433,121434],{"__ignoreMap":40},[45,121435,121436,121438],{"class":47,"line":48},[45,121437,26844],{"class":2046},[45,121439,121440],{"class":313}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[10,121442,121443,121444,121447],{},"如果仍然遇到问题，可以通过 ",[42,121445,121446],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[121,121449,121450],{},"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":40,"searchDepth":125,"depth":125,"links":121452},[121453,121457,121467,121471,121472],{"id":118550,"depth":125,"text":118551,"children":121454},[121455,121456],{"id":118560,"depth":1262,"text":118561},{"id":118570,"depth":1262,"text":118571},{"id":118770,"depth":125,"text":118771,"children":121458},[121459,121460,121461,121462,121463,121464,121465,121466],{"id":118774,"depth":1262,"text":118775},{"id":118844,"depth":1262,"text":118845},{"id":118933,"depth":1262,"text":118934},{"id":119178,"depth":1262,"text":119179},{"id":119248,"depth":1262,"text":119249},{"id":119315,"depth":1262,"text":119316},{"id":119350,"depth":1262,"text":119351},{"id":119405,"depth":1262,"text":119406},{"id":119456,"depth":125,"text":119457,"children":121468},[121469,121470],{"id":119460,"depth":1262,"text":119461},{"id":119540,"depth":1262,"text":119541},{"id":119726,"depth":125,"text":119727},{"id":119899,"depth":125,"text":119900,"children":121473},[121474,121475,121476,121477,121478],{"id":119903,"depth":1262,"text":119904},{"id":119944,"depth":1262,"text":119945},{"id":120231,"depth":1262,"text":120232},{"id":120605,"depth":1262,"text":120606},{"id":121101,"depth":1262,"text":121102},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118542,"description":130},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121485,"title":121486,"body":121487,"description":130,"extension":131,"meta":121827,"navigation":133,"path":121828,"seo":121829,"stem":121830,"__hash__":121831},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121488,"toc":121825},[121489,121492,121497,121500,121746,121751,121754,121790,121793,121822],[20,121490,121486],{"id":121491},"_4-命令教程长期积累",[159,121493,121494],{},[162,121495,121496],{},"大多数命令",[10,121498,121499],{},"常用 Linux 命令速查：",[35,121501,121503],{"className":117347,"code":121502,"language":117349,"meta":40,"style":40},"# 文件与目录\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",[42,121504,121505,121510,121517,121524,121532,121539,121546,121554,121562,121569,121576,121584,121588,121593,121600,121608,121615,121619,121624,121631,121639,121647,121655,121663,121667,121672,121680,121687,121694,121702,121710,121714,121719,121728,121737],{"__ignoreMap":40},[45,121506,121507],{"class":47,"line":48},[45,121508,121509],{"class":267},"# 文件与目录\n",[45,121511,121512,121514],{"class":47,"line":125},[45,121513,26844],{"class":2046},[45,121515,121516],{"class":267},"        # 列出目录内容\n",[45,121518,121519,121521],{"class":47,"line":1262},[45,121520,101327],{"class":257},[45,121522,121523],{"class":267},"        # 切换目录\n",[45,121525,121526,121529],{"class":47,"line":1277},[45,121527,121528],{"class":257},"pwd",[45,121530,121531],{"class":267},"       # 显示当前路径\n",[45,121533,121534,121536],{"class":47,"line":1283},[45,121535,101317],{"class":2046},[45,121537,121538],{"class":267},"     # 创建目录\n",[45,121540,121541,121543],{"class":47,"line":1297},[45,121542,25405],{"class":2046},[45,121544,121545],{"class":267},"        # 删除文件或目录\n",[45,121547,121548,121551],{"class":47,"line":1303},[45,121549,121550],{"class":2046},"cp",[45,121552,121553],{"class":267},"        # 复制文件或目录\n",[45,121555,121556,121559],{"class":47,"line":1394},[45,121557,121558],{"class":2046},"mv",[45,121560,121561],{"class":267},"        # 移动\u002F重命名文件或目录\n",[45,121563,121564,121566],{"class":47,"line":1400},[45,121565,101334],{"class":2046},[45,121567,121568],{"class":267},"     # 创建空文件\n",[45,121570,121571,121573],{"class":47,"line":1412},[45,121572,120816],{"class":2046},[45,121574,121575],{"class":267},"       # 查看文件内容\n",[45,121577,121578,121581],{"class":47,"line":1695},[45,121579,121580],{"class":2046},"head\u002Ftail",[45,121582,121583],{"class":267}," # 查看文件头部\u002F尾部\n",[45,121585,121586],{"class":47,"line":1700},[45,121587,2483],{"emptyLinePlaceholder":133},[45,121589,121590],{"class":47,"line":1706},[45,121591,121592],{"class":267},"# 权限管理\n",[45,121594,121595,121597],{"class":47,"line":1711},[45,121596,24694],{"class":2046},[45,121598,121599],{"class":267},"     # 修改文件权限\n",[45,121601,121602,121605],{"class":47,"line":1725},[45,121603,121604],{"class":2046},"chown",[45,121606,121607],{"class":267},"     # 修改文件所有者\n",[45,121609,121610,121612],{"class":47,"line":1730},[45,121611,24659],{"class":2046},[45,121613,121614],{"class":267},"      # 以管理员身份执行\n",[45,121616,121617],{"class":47,"line":1736},[45,121618,2483],{"emptyLinePlaceholder":133},[45,121620,121621],{"class":47,"line":1757},[45,121622,121623],{"class":267},"# 系统信息\n",[45,121625,121626,121628],{"class":47,"line":1762},[45,121627,70285],{"class":2046},[45,121629,121630],{"class":267},"     # 系统信息\n",[45,121632,121633,121636],{"class":47,"line":1776},[45,121634,121635],{"class":2046},"df",[45,121637,121638],{"class":267},"        # 磁盘使用情况\n",[45,121640,121641,121644],{"class":47,"line":1781},[45,121642,121643],{"class":2046},"free",[45,121645,121646],{"class":267},"      # 内存使用情况\n",[45,121648,121649,121652],{"class":47,"line":1810},[45,121650,121651],{"class":2046},"top\u002Fhtop",[45,121653,121654],{"class":267},"  # 进程监控\n",[45,121656,121657,121660],{"class":47,"line":1815},[45,121658,121659],{"class":2046},"ps",[45,121661,121662],{"class":267},"        # 查看进程\n",[45,121664,121665],{"class":47,"line":1832},[45,121666,2483],{"emptyLinePlaceholder":133},[45,121668,121669],{"class":47,"line":1837},[45,121670,121671],{"class":267},"# 网络\n",[45,121673,121674,121677],{"class":47,"line":1842},[45,121675,121676],{"class":2046},"ping",[45,121678,121679],{"class":267},"      # 测试网络连通性\n",[45,121681,121682,121684],{"class":47,"line":1847},[45,121683,26932],{"class":2046},[45,121685,121686],{"class":267},"      # 发送 HTTP 请求\n",[45,121688,121689,121691],{"class":47,"line":1861},[45,121690,120340],{"class":2046},[45,121692,121693],{"class":267},"      # 下载文件\n",[45,121695,121696,121699],{"class":47,"line":1866},[45,121697,121698],{"class":2046},"ssh",[45,121700,121701],{"class":267},"       # 远程登录\n",[45,121703,121704,121707],{"class":47,"line":2660},[45,121705,121706],{"class":2046},"scp",[45,121708,121709],{"class":267},"       # 远程文件传输\n",[45,121711,121712],{"class":47,"line":2674},[45,121713,2483],{"emptyLinePlaceholder":133},[45,121715,121716],{"class":47,"line":2682},[45,121717,121718],{"class":267},"# 包管理（Debian\u002FUbuntu）\n",[45,121720,121721,121723,121725],{"class":47,"line":2687},[45,121722,117419],{"class":2046},[45,121724,117398],{"class":313},[45,121726,121727],{"class":267},"   # 更新软件源\n",[45,121729,121730,121732,121734],{"class":47,"line":2693},[45,121731,117419],{"class":2046},[45,121733,23917],{"class":313},[45,121735,121736],{"class":267},"  # 安装软件包\n",[45,121738,121739,121741,121743],{"class":47,"line":2699},[45,121740,117419],{"class":2046},[45,121742,26162],{"class":313},[45,121744,121745],{"class":267},"   # 卸载软件包\n",[159,121747,121748],{"start":125},[162,121749,121750],{},"KDE Dolphin 以root打开",[10,121752,121753],{},"kde5",[35,121755,121757],{"className":117347,"code":121756,"language":117349,"meta":40,"style":40},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[42,121758,121759],{"__ignoreMap":40},[45,121760,121761,121764,121767,121770,121772,121774,121777,121780,121782,121785,121787],{"class":47,"line":48},[45,121762,121763],{"class":2046},"pkexec",[45,121765,121766],{"class":313}," env",[45,121768,121769],{"class":313}," DISPLAY=",[45,121771,28226],{"class":51},[45,121773,28284],{"class":313},[45,121775,121776],{"class":51},"$XAUTHORITY ",[45,121778,121779],{"class":313},"KDE_SESSION_VERSION=",[45,121781,527],{"class":257},[45,121783,121784],{"class":313}," KDE_FULL_SESSION=",[45,121786,1445],{"class":257},[45,121788,121789],{"class":313}," dolphin\n",[10,121791,121792],{},"kde6",[35,121794,121796],{"className":117347,"code":121795,"language":117349,"meta":40,"style":40},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[42,121797,121798],{"__ignoreMap":40},[45,121799,121800,121802,121804,121806,121808,121810,121812,121814,121816,121818,121820],{"class":47,"line":48},[45,121801,121763],{"class":2046},[45,121803,121766],{"class":313},[45,121805,121769],{"class":313},[45,121807,28226],{"class":51},[45,121809,28284],{"class":313},[45,121811,121776],{"class":51},[45,121813,121779],{"class":313},[45,121815,552],{"class":257},[45,121817,121784],{"class":313},[45,121819,1445],{"class":257},[45,121821,121789],{"class":313},[121,121823,121824],{},"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":40,"searchDepth":125,"depth":125,"links":121826},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121486,"description":130},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121833,"title":121834,"body":121835,"description":130,"extension":131,"meta":121849,"navigation":133,"path":121850,"seo":121851,"stem":121852,"__hash__":121853},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121836,"toc":121847},[121837,121840],[20,121838,121834],{"id":121839},"_5-各种环境配置",[10,121841,121842],{},[13,121843,121846],{"href":121844,"rel":121845},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[17],"电控组环境搭建大全",{"title":40,"searchDepth":125,"depth":125,"links":121848},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121834,"description":130},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121855,"title":121856,"body":121857,"description":130,"extension":131,"meta":122205,"navigation":133,"path":122206,"seo":122207,"stem":122208,"__hash__":122209},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121858,"toc":122197},[121859,121862,121866,121870,121874,121879,121886,121890,122183,122187,122194],[20,121860,121856],{"id":121861},"_6-拓展功能",[30,121863,121865],{"id":121864},"_61-wine","6.1 Wine",[30,121867,121869],{"id":121868},"_62-android","6.2 Android",[176,121871,121873],{"id":121872},"_621-i卡a卡","6.2.1 I卡、A卡",[159,121875,121876],{},[162,121877,121878],{},"Wayland-Waydroid(体验超级好)",[10,121880,121881,121882],{},"Waydroid 官网与安装指南：",[13,121883,121884],{"href":121884,"rel":121885},"https:\u002F\u002Fwaydro.id\u002F",[17],[176,121887,121889],{"id":121888},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[159,121891,121892],{},[162,121893,121894,121895,121897,121898,121902,121904,121907,121912,122109],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53797,121896],{},"BlissOS 官网下载：",[13,121899,121900],{"href":121900,"rel":121901},"https:\u002F\u002Fblissos.org\u002F",[17],[53797,121903],{},[1545,121905],{"alt":40,"src":121906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[159,121908,121909],{"start":1262},[162,121910,121911],{},"比较推荐的配置",[35,121913,121915],{"className":117347,"code":121914,"language":117349,"meta":40,"style":40},"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",[42,121916,121917,121924,121934,121944,121954,121966,121976,121983,121993,122002,122011,122021,122031,122040,122050,122060,122072,122082,122091,122101],{"__ignoreMap":40},[45,121918,121919,121922],{"class":47,"line":48},[45,121920,121921],{"class":2046},"qemu-system-x86_64",[45,121923,24761],{"class":257},[45,121925,121926,121929,121932],{"class":47,"line":125},[45,121927,121928],{"class":257},"        -M",[45,121930,121931],{"class":313}," q35,vmport=off",[45,121933,24761],{"class":257},[45,121935,121936,121939,121942],{"class":47,"line":1262},[45,121937,121938],{"class":257},"        -accel",[45,121940,121941],{"class":313}," kvm",[45,121943,24761],{"class":257},[45,121945,121946,121949,121952],{"class":47,"line":1277},[45,121947,121948],{"class":257},"        -cpu",[45,121950,121951],{"class":313}," qemu64,+sse3,+sse4.2",[45,121953,24761],{"class":257},[45,121955,121956,121959,121962,121964],{"class":47,"line":1283},[45,121957,121958],{"class":257},"        -smp",[45,121960,121961],{"class":313}," 8,cores=",[45,121963,501],{"class":257},[45,121965,24761],{"class":257},[45,121967,121968,121971,121974],{"class":47,"line":1297},[45,121969,121970],{"class":257},"        -m",[45,121972,121973],{"class":313}," 6G",[45,121975,24761],{"class":257},[45,121977,121978,121981],{"class":47,"line":1303},[45,121979,121980],{"class":257},"        -usb",[45,121982,24761],{"class":257},[45,121984,121985,121988,121991],{"class":47,"line":1394},[45,121986,121987],{"class":257},"        -device",[45,121989,121990],{"class":313}," virtio-tablet",[45,121992,24761],{"class":257},[45,121994,121995,121997,122000],{"class":47,"line":1400},[45,121996,121987],{"class":257},[45,121998,121999],{"class":313}," virtio-keyboard",[45,122001,24761],{"class":257},[45,122003,122004,122006,122009],{"class":47,"line":1412},[45,122005,121987],{"class":257},[45,122007,122008],{"class":313}," usb-tablet",[45,122010,24761],{"class":257},[45,122012,122013,122016,122019],{"class":47,"line":1695},[45,122014,122015],{"class":257},"        -bios",[45,122017,122018],{"class":313}," OVMF-pure-efi64.fd",[45,122020,24761],{"class":257},[45,122022,122023,122026,122029],{"class":47,"line":1700},[45,122024,122025],{"class":257},"        -net",[45,122027,122028],{"class":313}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[45,122030,24761],{"class":257},[45,122032,122033,122035,122038],{"class":47,"line":1706},[45,122034,122025],{"class":257},[45,122036,122037],{"class":313}," nic,model=virtio",[45,122039,24761],{"class":257},[45,122041,122042,122045,122048],{"class":47,"line":1711},[45,122043,122044],{"class":257},"        -audio",[45,122046,122047],{"class":313}," sdl,model=hda",[45,122049,24761],{"class":257},[45,122051,122052,122055,122058],{"class":47,"line":1725},[45,122053,122054],{"class":257},"        -display",[45,122056,122057],{"class":313}," sdl,gl=on,show-cursor=on",[45,122059,24761],{"class":257},[45,122061,122062,122064,122067,122070],{"class":47,"line":1730},[45,122063,121987],{"class":257},[45,122065,122066],{"class":313}," virtio-vga-gl,xres=1920,yres=",[45,122068,122069],{"class":257},"1080",[45,122071,24761],{"class":257},[45,122073,122074,122077,122080],{"class":47,"line":1736},[45,122075,122076],{"class":257},"        -drive",[45,122078,122079],{"class":313}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[45,122081,24761],{"class":257},[45,122083,122084,122086,122089],{"class":47,"line":1757},[45,122085,122076],{"class":257},[45,122087,122088],{"class":313}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[45,122090,24761],{"class":257},[45,122092,122093,122096,122099],{"class":47,"line":1762},[45,122094,122095],{"class":257},"        -monitor",[45,122097,122098],{"class":313}," stdio",[45,122100,24761],{"class":257},[45,122102,122103,122106],{"class":47,"line":1776},[45,122104,122105],{"class":257},"        -serial",[45,122107,122108],{"class":313}," none\n",[159,122110,122111],{"start":1283},[162,122112,122113,122114],{},"常用操作：",[159,122115,122116,122119,122175],{},[162,122117,122118],{},"全屏：Ctrl+Alt+F",[162,122120,122121,122122,122127],{},"adb调试",[159,122123,122124],{},[162,122125,122126],{},"使Linux与Android用ADB连接。",[35,122128,122130],{"className":117347,"code":122129,"language":117349,"meta":40,"style":40},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[42,122131,122132,122137,122148,122153,122165,122170],{"__ignoreMap":40},[45,122133,122134],{"class":47,"line":48},[45,122135,122136],{"class":267},"# 连接安卓\n",[45,122138,122139,122142,122145],{"class":47,"line":125},[45,122140,122141],{"class":2046},"adb",[45,122143,122144],{"class":313}," connect",[45,122146,122147],{"class":257}," 127.0.0.1\n",[45,122149,122150],{"class":47,"line":1262},[45,122151,122152],{"class":267},"# 打开shell\n",[45,122154,122155,122157,122159,122162],{"class":47,"line":1277},[45,122156,122141],{"class":2046},[45,122158,26966],{"class":257},[45,122160,122161],{"class":313}," 127.0.0.1:5555",[45,122163,122164],{"class":313}," shell\n",[45,122166,122167],{"class":47,"line":1283},[45,122168,122169],{"class":267},"# 使用root权限\n",[45,122171,122172],{"class":47,"line":1297},[45,122173,122174],{"class":2046},"su\n",[162,122176,122177,122178],{},"中文输入法",[159,122179,122180],{},[162,122181,122182],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[30,122184,122186],{"id":122185},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[10,122188,122189,122190],{},"rEFInd 官网与文档：",[13,122191,122192],{"href":122192,"rel":122193},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[17],[121,122195,122196],{},"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":40,"searchDepth":125,"depth":125,"links":122198},[122199,122200,122204],{"id":121864,"depth":125,"text":121865},{"id":121868,"depth":125,"text":121869,"children":122201},[122202,122203],{"id":121872,"depth":1262,"text":121873},{"id":121888,"depth":1262,"text":121889},{"id":122185,"depth":125,"text":122186},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121856,"description":130},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122211,"title":122212,"body":122213,"description":130,"extension":131,"meta":125512,"navigation":133,"path":125513,"seo":125514,"stem":125515,"__hash__":125516},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122214,"toc":125486},[122215,122218,122222,122225,122232,122482,122485,122557,122560,122564,122568,122573,122576,122579,122582,122587,122590,122593,122596,122601,122604,122609,122612,122615,122620,122623,122628,122631,122635,122639,122642,122647,122650,122664,122667,122670,122679,122682,122691,122694,122697,122706,122709,122718,122721,122724,122733,122736,122739,122754,122757,122760,122769,122774,122777,122780,122789,122792,122801,122804,122813,122816,122825,122830,122833,122841,122846,122849,122858,122861,122869,122874,122877,122886,122889,122892,122896,122899,122904,122907,122912,122926,122931,122936,122947,122952,122958,122963,122978,122983,122986,122991,122996,123001,123009,123014,123021,123026,123037,123042,123045,123049,123052,123055,123060,123063,123082,123087,123090,123099,123104,123107,123129,123132,123162,123165,123170,123173,123187,123192,123211,123214,123217,123222,123234,123239,123244,123247,123252,123255,123270,123273,123278,123283,123287,123292,123332,123335,123339,123345,123351,123356,123359,123366,123371,123378,123381,123384,123391,123405,123408,123468,123471,123485,123497,123500,123503,123506,123570,123573,123576,123579,123599,123602,123607,123614,123618,123621,123625,123630,123635,123639,123642,123645,123687,123692,123695,123717,123732,123734,123739,123751,123811,123813,123815,123869,123871,123873,123879,123884,123887,123892,123896,123899,123961,123966,123969,123971,123975,123987,124069,124071,124073,124127,124133,124135,124139,124144,124146,124151,124155,124175,124210,124214,124217,124220,124223,124230,124233,124245,124248,124263,124266,124285,124333,124336,124353,124356,124370,124375,124378,124387,124402,124414,124452,124457,124466,124471,124476,124502,124511,124515,124519,124524,124527,124531,124535,124540,124543,124548,124551,124556,124559,124564,124567,124571,124576,124579,124584,124587,124591,124596,124599,124604,124607,124612,124615,124619,124624,124627,124632,124635,124640,124643,124647,124652,124655,124660,124663,124668,124671,124676,124679,124684,124687,124692,124695,124699,124704,124707,124712,124719,124723,124728,124731,124736,124739,124743,124748,124751,124754,124757,124760,124763,124767,124770,124780,124785,124790,124812,124817,124822,124829,124833,124838,124841,124844,124849,124852,124855,124858,124861,124864,124867,124870,124873,124876,124879,124882,124885,124890,124895,124900,124905,124910,124915,124920,124923,124927,124930,124934,124939,124944,124949,124954,124958,124964,124972,124977,124980,124985,125000,125003,125008,125042,125057,125060,125115,125141,125153,125156,125165,125168,125183,125188,125191,125197,125202,125205,125210,125213,125218,125223,125230,125233,125248,125251,125286,125291,125299,125337,125340,125343,125348,125351,125356,125367,125401,125406,125409,125418,125423,125429,125432,125437,125446,125451,125454,125457,125462,125470,125473,125478,125483],[20,122216,122212],{"id":122217},"_7-其他操作",[30,122219,122221],{"id":122220},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[10,122223,122224],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[10,122226,122227,122228,122231],{},"进入工控机的硬盘目录，进入",[42,122229,122230],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[35,122233,122237],{"className":122234,"code":122235,"language":122236,"meta":40,"style":40},"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",[42,122238,122239,122247,122258,122265,122272,122284,122291,122303,122314,122325,122332,122339,122346,122358,122370,122377,122389,122401,122408,122420,122432,122444,122455,122462,122473],{"__ignoreMap":40},[45,122240,122241,122244],{"class":47,"line":48},[45,122242,122243],{"class":51381},"network",[45,122245,122246],{"class":51},": \n",[45,122248,122249,122252,122254,122256],{"class":47,"line":125},[45,122250,122251],{"class":51381},"  version",[45,122253,51518],{"class":51},[45,122255,286],{"class":257},[45,122257,2757],{"class":51},[45,122259,122260,122263],{"class":47,"line":1262},[45,122261,122262],{"class":51381},"  wifis",[45,122264,122246],{"class":51},[45,122266,122267,122270],{"class":47,"line":1277},[45,122268,122269],{"class":51381},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[45,122271,122246],{"class":51},[45,122273,122274,122277,122279,122282],{"class":47,"line":1283},[45,122275,122276],{"class":51381},"      renderer",[45,122278,51518],{"class":51},[45,122280,122281],{"class":313},"NetworkManager",[45,122283,2757],{"class":51},[45,122285,122286,122289],{"class":47,"line":1297},[45,122287,122288],{"class":51381},"      match",[45,122290,122246],{"class":51},[45,122292,122293,122296,122298,122301],{"class":47,"line":1303},[45,122294,122295],{"class":51381},"        name",[45,122297,51518],{"class":51},[45,122299,122300],{"class":313},"\"wlan0\"",[45,122302,2757],{"class":51},[45,122304,122305,122308,122310,122312],{"class":47,"line":1394},[45,122306,122307],{"class":51381},"      dhcp4",[45,122309,51518],{"class":51},[45,122311,1445],{"class":257},[45,122313,2757],{"class":51},[45,122315,122316,122319,122321,122323],{"class":47,"line":1400},[45,122317,122318],{"class":51381},"      dhcp6",[45,122320,51518],{"class":51},[45,122322,1445],{"class":257},[45,122324,2757],{"class":51},[45,122326,122327,122330],{"class":47,"line":1412},[45,122328,122329],{"class":51381},"      access-points",[45,122331,122246],{"class":51},[45,122333,122334,122337],{"class":47,"line":1695},[45,122335,122336],{"class":313},"        \"EMIS_Vinci_Robocon_5G\"",[45,122338,122246],{"class":51},[45,122340,122341,122344],{"class":47,"line":1700},[45,122342,122343],{"class":51381},"          auth",[45,122345,122246],{"class":51},[45,122347,122348,122351,122353,122356],{"class":47,"line":1706},[45,122349,122350],{"class":51381},"            key-management",[45,122352,51518],{"class":51},[45,122354,122355],{"class":313},"\"psk\"",[45,122357,2757],{"class":51},[45,122359,122360,122363,122365,122368],{"class":47,"line":1711},[45,122361,122362],{"class":51381},"            password",[45,122364,51518],{"class":51},[45,122366,122367],{"class":313},"\"vinci666\"",[45,122369,2757],{"class":51},[45,122371,122372,122375],{"class":47,"line":1725},[45,122373,122374],{"class":51381},"          networkmanager",[45,122376,122246],{"class":51},[45,122378,122379,122382,122384,122387],{"class":47,"line":1730},[45,122380,122381],{"class":51381},"            uuid",[45,122383,51518],{"class":51},[45,122385,122386],{"class":313},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[45,122388,2757],{"class":51},[45,122390,122391,122394,122396,122399],{"class":47,"line":1736},[45,122392,122393],{"class":51381},"            name",[45,122395,51518],{"class":51},[45,122397,122398],{"class":313},"\"EMIS_Vinci_Robocon_5G\"",[45,122400,2757],{"class":51},[45,122402,122403,122406],{"class":47,"line":1757},[45,122404,122405],{"class":51381},"            passthrough",[45,122407,122246],{"class":51},[45,122409,122410,122413,122415,122418],{"class":47,"line":1762},[45,122411,122412],{"class":51381},"              wifi-security.auth-alg",[45,122414,51518],{"class":51},[45,122416,122417],{"class":313},"\"open\"",[45,122419,2757],{"class":51},[45,122421,122422,122425,122427,122430],{"class":47,"line":1776},[45,122423,122424],{"class":51381},"              ipv6.addr-gen-mode",[45,122426,51518],{"class":51},[45,122428,122429],{"class":313},"\"default\"",[45,122431,2757],{"class":51},[45,122433,122434,122437,122439,122442],{"class":47,"line":1781},[45,122435,122436],{"class":51381},"              ipv6.ip6-privacy",[45,122438,51518],{"class":51},[45,122440,122441],{"class":313},"\"-1\"",[45,122443,2757],{"class":51},[45,122445,122446,122449,122451,122453],{"class":47,"line":1810},[45,122447,122448],{"class":51381},"              proxy._",[45,122450,51518],{"class":51},[45,122452,7735],{"class":313},[45,122454,2757],{"class":51},[45,122456,122457,122460],{"class":47,"line":1815},[45,122458,122459],{"class":51381},"      networkmanager",[45,122461,122246],{"class":51},[45,122463,122464,122467,122469,122471],{"class":47,"line":1832},[45,122465,122466],{"class":51381},"        uuid",[45,122468,51518],{"class":51},[45,122470,122386],{"class":313},[45,122472,2757],{"class":51},[45,122474,122475,122477,122479],{"class":47,"line":1837},[45,122476,122295],{"class":51381},[45,122478,51518],{"class":51},[45,122480,122481],{"class":313},"\"EMIS_Vinci_Robocon_5G\"\n",[10,122483,122484],{},"将其改为新wifi的名和密码：",[35,122486,122488],{"className":122234,"code":122487,"language":122236,"meta":40,"style":40},"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",[42,122489,122490,122496,122505,122511,122518,122527,122535,122541,122547],{"__ignoreMap":40},[45,122491,122492,122494],{"class":47,"line":48},[45,122493,122243],{"class":51381},[45,122495,3822],{"class":51},[45,122497,122498,122500,122502],{"class":47,"line":125},[45,122499,122251],{"class":51381},[45,122501,51518],{"class":51},[45,122503,122504],{"class":257},"2\n",[45,122506,122507,122509],{"class":47,"line":1262},[45,122508,122262],{"class":51381},[45,122510,3822],{"class":51},[45,122512,122513,122516],{"class":47,"line":1277},[45,122514,122515],{"class":51381},"    wlan0",[45,122517,3822],{"class":51},[45,122519,122520,122522,122524],{"class":47,"line":1283},[45,122521,122307],{"class":51381},[45,122523,51518],{"class":51},[45,122525,122526],{"class":257},"true\n",[45,122528,122529,122531,122533],{"class":47,"line":1297},[45,122530,122318],{"class":51381},[45,122532,51518],{"class":51},[45,122534,122526],{"class":257},[45,122536,122537,122539],{"class":47,"line":1303},[45,122538,122329],{"class":51381},[45,122540,3822],{"class":51},[45,122542,122543,122545],{"class":47,"line":1394},[45,122544,122336],{"class":313},[45,122546,3822],{"class":51},[45,122548,122549,122552,122554],{"class":47,"line":1400},[45,122550,122551],{"class":51381},"          password",[45,122553,51518],{"class":51},[45,122555,122556],{"class":313},"\"vinci666\"\n",[10,122558,122559],{},"工控机开机即可连上网。",[30,122561,122563],{"id":122562},"_72-ssh远程开发","7.2 SSH远程开发",[176,122565,122567],{"id":122566},"_721-环境准备","7.2.1 环境准备",[10,122569,122570],{},[358,122571,122572],{},"1.硬件准备",[10,122574,122575],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[10,122577,122578],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[10,122580,122581],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[10,122583,122584],{},[358,122585,122586],{},"2.设置固定IP",[10,122588,122589],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[10,122591,122592],{},"1.进入设置界面",[10,122594,122595],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[10,122597,122598],{},[1545,122599],{"alt":40,"src":122600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[10,122602,122603],{},"2.配置所连接的网络",[10,122605,122606],{},[1545,122607],{"alt":40,"src":122608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[10,122610,122611],{},"3.设置固定IP",[10,122613,122614],{},"查看当前IP地址。",[10,122616,122617],{},[1545,122618],{"alt":40,"src":122619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[10,122621,122622],{},"设置固定IP。",[10,122624,122625],{},[1545,122626],{"alt":40,"src":122627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[10,122629,122630],{},"至此，IP配置完毕。",[176,122632,122634],{"id":122633},"_722-环境搭建","7.2.2 环境搭建",[10,122636,122637],{},[358,122638,25836],{},[10,122640,122641],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[10,122643,122644],{},[358,122645,122646],{},"实现",[10,122648,122649],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[159,122651,122652,122655,122658,122661],{},[162,122653,122654],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[162,122656,122657],{},"远程主机启动SSH服务；",[162,122659,122660],{},"本地主机登陆远程主机；",[162,122662,122663],{},"实现数据传输。",[10,122665,122666],{},"1.安装SSH客户端与服务端",[10,122668,122669],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[35,122671,122673],{"className":120867,"code":122672,"language":120869,"meta":120870,"style":40}," sudo apt install openssh-server\n",[42,122674,122675],{"__ignoreMap":40},[45,122676,122677],{"class":47,"line":48},[45,122678,122672],{},[10,122680,122681],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[35,122683,122685],{"className":120867,"code":122684,"language":120869,"meta":120870,"style":40},"sudo apt install openssh-client\n",[42,122686,122687],{"__ignoreMap":40},[45,122688,122689],{"class":47,"line":48},[45,122690,122684],{},[10,122692,122693],{},"2.远程主机启动SSH服务",[10,122695,122696],{},"远程主机启动 ssh 服务命令如下：",[35,122698,122700],{"className":120867,"code":122699,"language":120869,"meta":120870,"style":40},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[42,122701,122702],{"__ignoreMap":40},[45,122703,122704],{"class":47,"line":48},[45,122705,122699],{},[10,122707,122708],{},"启动后可使用如下命令查看服务是否正常运行：",[35,122710,122712],{"className":120867,"code":122711,"language":120869,"meta":120870,"style":40},"ps -e | grep ssh\n",[42,122713,122714],{"__ignoreMap":40},[45,122715,122716],{"class":47,"line":48},[45,122717,122711],{},[10,122719,122720],{},"如果启动成功，会包含 sshd 程序。",[10,122722,122723],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[35,122725,122727],{"className":120867,"code":122726,"language":120869,"meta":120870,"style":40},"sudo systemctl enable ssh\n",[42,122728,122729],{"__ignoreMap":40},[45,122730,122731],{"class":47,"line":48},[45,122732,122726],{},[10,122734,122735],{},"3.本地远程登录",[10,122737,122738],{},"登录远程主机可以调用如下命令:",[35,122740,122742],{"className":117347,"code":122741,"language":117349,"meta":40,"style":40},"ssh -X 用户名@ip地址\n",[42,122743,122744],{"__ignoreMap":40},[45,122745,122746,122748,122751],{"class":47,"line":48},[45,122747,121698],{"class":2046},[45,122749,122750],{"class":257}," -X",[45,122752,122753],{"class":313}," 用户名@ip地址\n",[10,122755,122756],{},"然后根据提示，录入登陆密码，即可成功登录。",[10,122758,122759],{},"如果退出，可以调用exit命令：",[35,122761,122763],{"className":120867,"code":122762,"language":120869,"meta":120870,"style":40},"exit\n",[42,122764,122765],{"__ignoreMap":40},[45,122766,122767],{"class":47,"line":48},[45,122768,122762],{},[10,122770,122771],{},[358,122772,122773],{},"4.实现数据传输",[10,122775,122776],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[10,122778,122779],{},"上传文件指令格式如下：",[35,122781,122783],{"className":120867,"code":122782,"language":120869,"meta":120870,"style":40},"scp 本地文件路径 账号@ip:路径\n",[42,122784,122785],{"__ignoreMap":40},[45,122786,122787],{"class":47,"line":48},[45,122788,122782],{},[10,122790,122791],{},"上传文件夹指令格式如下：",[35,122793,122795],{"className":120867,"code":122794,"language":120869,"meta":120870,"style":40},"scp -r 本地文件夹路径 账号@ip:路径\n",[42,122796,122797],{"__ignoreMap":40},[45,122798,122799],{"class":47,"line":48},[45,122800,122794],{},[10,122802,122803],{},"下载文件指令格式如下：",[35,122805,122807],{"className":120867,"code":122806,"language":120869,"meta":120870,"style":40},"scp 账号@ip:路径 本地文件夹路径\n",[42,122808,122809],{"__ignoreMap":40},[45,122810,122811],{"class":47,"line":48},[45,122812,122806],{},[10,122814,122815],{},"下载文件夹指令格式如下：",[35,122817,122819],{"className":120867,"code":122818,"language":120869,"meta":120870,"style":40},"scp -r 账号@ip:路径 本地文件夹路径\n",[42,122820,122821],{"__ignoreMap":40},[45,122822,122823],{"class":47,"line":48},[45,122824,122818],{},[10,122826,122827],{},[358,122828,122829],{},"优化",[10,122831,122832],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[159,122834,122835,122838],{},[162,122836,122837],{},"本地生成密钥对；",[162,122839,122840],{},"将公钥上传至远程主机。",[10,122842,122843],{},[358,122844,122845],{},"1.生成密钥对",[10,122847,122848],{},"本地客户端生成公私钥：（一路回车默认即可）",[35,122850,122852],{"className":120867,"code":122851,"language":120869,"meta":120870,"style":40},"ssh-keygen\n",[42,122853,122854],{"__ignoreMap":40},[45,122855,122856],{"class":47,"line":48},[45,122857,122851],{},[10,122859,122860],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[159,122862,122863,122866],{},[162,122864,122865],{},"id_rsa （私钥）；",[162,122867,122868],{},"id_rsa.pub (公钥)。",[10,122870,122871],{},[358,122872,122873],{},"2.公钥上传",[10,122875,122876],{},"上传指令如下：",[35,122878,122880],{"className":120867,"code":122879,"language":120869,"meta":120870,"style":40},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[42,122881,122882],{"__ignoreMap":40},[45,122883,122884],{"class":47,"line":48},[45,122885,122879],{},[10,122887,122888],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[10,122890,122891],{},"以后再远程登录就无需录入密码了。",[176,122893,122895],{"id":122894},"_723-使用vscode优化","7.2.3 使用VScode优化",[10,122897,122898],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[10,122900,122901],{},[358,122902,122903],{},"1.准备工作",[10,122905,122906],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[10,122908,122909],{},[358,122910,122911],{},"2.为VScode安装远程开发插件",[10,122913,122914,122915,122918,122919,122922,122923,28468],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[42,122916,122917],{},"扩展：商店","的搜索栏输入",[42,122920,122921],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[42,122924,122925],{},"安装",[10,122927,122928],{},[1545,122929],{"alt":40,"src":122930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[10,122932,122933],{},[358,122934,122935],{},"3.配置远程连接",[10,122937,122938,122939,122942,122943,122946],{},"步骤1：使用快捷键",[42,122940,122941],{},"ctrl + shift + p","打开命令输入窗口，并输入",[42,122944,122945],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[10,122948,122949],{},[1545,122950],{"alt":40,"src":122951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[10,122953,122954,122955,28468],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[42,122956,122957],{},"Add New SSH Host",[10,122959,122960],{},[1545,122961],{"alt":40,"src":122962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[10,122964,122965,122966,122969,122970,122973,122974,122977],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[42,122967,122968],{},"ssh +X ubuntu@192.168.43.164","，其中，",[42,122971,122972],{},"ubuntu","需要替换为你的登录用户名，",[42,122975,122976],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[10,122979,122980],{},[1545,122981],{"alt":40,"src":122982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[10,122984,122985],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[10,122987,122988],{},[1545,122989],{"alt":40,"src":122990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[10,122992,122993],{},[1545,122994],{"alt":40,"src":122995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[10,122997,122998],{},[358,122999,123000],{},"4.使用",[10,123002,123003,123004,122942,123006,123008],{},"步骤1：继续使用快捷键",[42,123005,122941],{},[42,123007,122945],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[10,123010,123011],{},[1545,123012],{"alt":40,"src":123013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[10,123015,123016,123017,123020],{},"或者，也可以点击侧边栏的",[42,123018,123019],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[10,123022,123023],{},[1545,123024],{"alt":40,"src":123025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[10,123027,123028,123029,123032,123033,123036],{},"步骤2：选择菜单栏的",[42,123030,123031],{},"文件","下的",[42,123034,123035],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[10,123038,123039],{},[1545,123040],{"alt":40,"src":123041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[10,123043,123044],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[30,123046,123048],{"id":123047},"_73-远程桌面","7.3 远程桌面",[10,123050,123051],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[10,123053,123054],{},"我们选择使用VNC来看。",[159,123056,123057],{},[162,123058,123059],{},"安装VNC服务器：",[10,123061,123062],{},"这里以TigerVNC为例进行安装：",[35,123064,123066],{"className":117347,"code":123065,"language":117349,"meta":40,"style":40},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[42,123067,123068],{"__ignoreMap":40},[45,123069,123070,123072,123074,123076,123079],{"class":47,"line":48},[45,123071,24659],{"class":2046},[45,123073,117368],{"class":313},[45,123075,23917],{"class":313},[45,123077,123078],{"class":313}," tigervnc-standalone-server",[45,123080,123081],{"class":313}," tigervnc-common\n",[159,123083,123084],{"start":125},[162,123085,123086],{},"设置VNC密码：",[10,123088,123089],{},"为VNC用户设置密码，运行以下命令：",[35,123091,123093],{"className":117347,"code":123092,"language":117349,"meta":40,"style":40},"vncpasswd\n",[42,123094,123095],{"__ignoreMap":40},[45,123096,123097],{"class":47,"line":48},[45,123098,123092],{"class":2046},[159,123100,123101],{"start":1262},[162,123102,123103],{},"配置VNC启动脚本:",[10,123105,123106],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[35,123108,123110],{"className":117347,"code":123109,"language":117349,"meta":40,"style":40},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[42,123111,123112,123121],{"__ignoreMap":40},[45,123113,123114,123116,123118],{"class":47,"line":48},[45,123115,101317],{"class":2046},[45,123117,29299],{"class":257},[45,123119,123120],{"class":313}," ~\u002F.vnc\n",[45,123122,123123,123126],{"class":47,"line":125},[45,123124,123125],{"class":2046},"nano",[45,123127,123128],{"class":313}," ~\u002F.vnc\u002Fxstartup\n",[10,123130,123131],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[35,123133,123135],{"className":117347,"code":123134,"language":117349,"meta":40,"style":40},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[42,123136,123137,123142,123150,123157],{"__ignoreMap":40},[45,123138,123139],{"class":47,"line":48},[45,123140,123141],{"class":267},"#!\u002Fbin\u002Fsh\n",[45,123143,123144,123147],{"class":47,"line":125},[45,123145,123146],{"class":257},"unset",[45,123148,123149],{"class":313}," SESSION_MANAGER\n",[45,123151,123152,123154],{"class":47,"line":1262},[45,123153,123146],{"class":257},[45,123155,123156],{"class":313}," DBUS_SESSION_BUS_ADDRESS\n",[45,123158,123159],{"class":47,"line":1277},[45,123160,123161],{"class":2046},"gnome-session\n",[10,123163,123164],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[159,123166,123167],{"start":1277},[162,123168,123169],{},"给予执行权限：",[10,123171,123172],{},"为xstartup文件设置执行权限：",[35,123174,123176],{"className":117347,"code":123175,"language":117349,"meta":40,"style":40},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[42,123177,123178],{"__ignoreMap":40},[45,123179,123180,123182,123185],{"class":47,"line":48},[45,123181,24694],{"class":2046},[45,123183,123184],{"class":313}," +x",[45,123186,123128],{"class":313},[159,123188,123189],{"start":1283},[162,123190,123191],{},"启动VNC服务器：",[35,123193,123195],{"className":117347,"code":123194,"language":117349,"meta":40,"style":40},"vncserver -geometry 1920x1080 -localhost=0\n",[42,123196,123197],{"__ignoreMap":40},[45,123198,123199,123202,123205,123208],{"class":47,"line":48},[45,123200,123201],{"class":2046},"vncserver",[45,123203,123204],{"class":257}," -geometry",[45,123206,123207],{"class":313}," 1920x1080",[45,123209,123210],{"class":257}," -localhost=0\n",[10,123212,123213],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[10,123215,123216],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[159,123218,123219],{"start":1297},[162,123220,123221],{},"查看已开启的VNC服务器：",[35,123223,123225],{"className":117347,"code":123224,"language":117349,"meta":40,"style":40},"vncserver -list\n",[42,123226,123227],{"__ignoreMap":40},[45,123228,123229,123231],{"class":47,"line":48},[45,123230,123201],{"class":2046},[45,123232,123233],{"class":257}," -list\n",[10,123235,123236],{},[1545,123237],{"alt":40,"src":123238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[159,123240,123241],{"start":1303},[162,123242,123243],{},"连接到VNC服务器：",[10,123245,123246],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[159,123248,123249],{"start":1394},[162,123250,123251],{},"停止VNC服务器：",[10,123253,123254],{},"如果需要停止VNC服务器，可以使用以下命令：",[35,123256,123258],{"className":117347,"code":123257,"language":117349,"meta":40,"style":40},"vncserver -kill :1\n",[42,123259,123260],{"__ignoreMap":40},[45,123261,123262,123264,123267],{"class":47,"line":48},[45,123263,123201],{"class":2046},[45,123265,123266],{"class":257}," -kill",[45,123268,123269],{"class":313}," :1\n",[10,123271,123272],{},"将:1替换为你实际使用的显示编号。",[10,123274,123275],{},[1545,123276],{"alt":40,"src":123277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[10,123279,123280],{},[1545,123281],{"alt":40,"src":123282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[30,123284,123286],{"id":123285},"_74-usb端口设置","7.4 USB端口设置",[10,123288,123289],{},[358,123290,123291],{},"首先先配置好权限",[35,123293,123295],{"className":117347,"code":123294,"language":117349,"meta":40,"style":40},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[42,123296,123297,123302,123315,123322,123327],{"__ignoreMap":40},[45,123298,123299],{"class":47,"line":48},[45,123300,123301],{"class":267},"# 将用户权限提高\n",[45,123303,123304,123306,123308,123310,123313],{"class":47,"line":125},[45,123305,24659],{"class":2046},[45,123307,26657],{"class":313},[45,123309,26660],{"class":257},[45,123311,123312],{"class":313}," dialout",[45,123314,26665],{"class":51},[45,123316,123317,123319],{"class":47,"line":1262},[45,123318,26684],{"class":2046},[45,123320,123321],{"class":313}," dialout\n",[45,123323,123324],{"class":47,"line":1277},[45,123325,123326],{"class":267},"# 查看下面命令是否输出dialout（若输出才正常）\n",[45,123328,123329],{"class":47,"line":1283},[45,123330,123331],{"class":2046},"groups\n",[10,123333,123334],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[176,123336,123338],{"id":123337},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[10,123340,123341,123344],{},[358,123342,123343],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[10,123346,123347,123350],{},[358,123348,123349],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[10,123352,123353],{},[358,123354,123355],{},"流程如下：",[10,123357,123358],{},"（1）.查找设备idVendor和idProduct",[10,123360,123361,123362,123365],{},"接入两个USB设备，在终端调用指令",[42,123363,123364],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[10,123367,123368],{},[1545,123369],{"alt":40,"src":123370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[10,123372,123373,123374,123377],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[42,123375,123376],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[10,123379,123380],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[10,123382,123383],{},"（2）.编写映射规则",[10,123385,123386,123387,123390],{},"在",[42,123388,123389],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[35,123392,123394],{"className":117347,"code":123393,"language":117349,"meta":40,"style":40},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[42,123395,123396],{"__ignoreMap":40},[45,123397,123398,123400,123402],{"class":47,"line":48},[45,123399,24659],{"class":2046},[45,123401,118634],{"class":313},[45,123403,123404],{"class":313}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[10,123406,123407],{},"输入如下内容：",[35,123409,123411],{"className":117347,"code":123410,"language":117349,"meta":40,"style":40},"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",[42,123412,123413,123443],{"__ignoreMap":40},[45,123414,123415,123418,123420,123423,123426,123429,123432,123434,123437,123440],{"class":47,"line":48},[45,123416,123417],{"class":51},"KERNEL",[45,123419,254],{"class":93},[45,123421,123422],{"class":313},"=\"ttyUSB*\",",[45,123424,123425],{"class":2046}," ATTRS",[45,123427,123428],{"class":313},"{idVendor}==",[45,123430,123431],{"class":2046},"\"10c4\"",[45,123433,586],{"class":2046},[45,123435,123436],{"class":313}," ATTRS{idProduct}==\"ea60\",",[45,123438,123439],{"class":313}," MODE:=\"0777\",",[45,123441,123442],{"class":313}," SYMLINK+=\"mylidar\"\n",[45,123444,123445,123447,123449,123451,123453,123455,123458,123460,123463,123465],{"class":47,"line":125},[45,123446,123417],{"class":51},[45,123448,254],{"class":93},[45,123450,123422],{"class":313},[45,123452,123425],{"class":2046},[45,123454,123428],{"class":313},[45,123456,123457],{"class":2046},"\"1a86\"",[45,123459,586],{"class":2046},[45,123461,123462],{"class":313}," ATTRS{idProduct}==\"7523\",",[45,123464,123439],{"class":313},[45,123466,123467],{"class":313}," SYMLINK+=\"mycar\"\n",[10,123469,123470],{},"代码解释：",[1214,123472,123473,123476,123479,123482],{},[162,123474,123475],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[162,123477,123478],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[162,123480,123481],{},"SYMLINK是符号连接，即绑定的别名；",[162,123483,123484],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[10,123486,123487,123488,123491,123494],{},"***小提示：***",[23636,123489,123490],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[42,123492,123493],{},"\u002Fetc\u002Fudev\u002Frule.d",[23636,123495,123496],{},"目录即可。",[10,123498,123499],{},"表格 还在加载中，请等待加载完成后再尝试复制",[10,123501,123502],{},"（3）.使规则生效",[10,123504,123505],{},"在终端下输入如下指令：",[35,123507,123509],{"className":117347,"code":123508,"language":117349,"meta":40,"style":40},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[42,123510,123511,123516,123528,123539,123543,123548,123561],{"__ignoreMap":40},[45,123512,123513],{"class":47,"line":48},[45,123514,123515],{"class":267},"# Ubuntu用下方命令\n",[45,123517,123518,123520,123522,123525],{"class":47,"line":125},[45,123519,24659],{"class":2046},[45,123521,120099],{"class":313},[45,123523,123524],{"class":313}," udev",[45,123526,123527],{"class":313}," reload\n",[45,123529,123530,123532,123534,123536],{"class":47,"line":1262},[45,123531,24659],{"class":2046},[45,123533,120099],{"class":313},[45,123535,123524],{"class":313},[45,123537,123538],{"class":313}," restart\n",[45,123540,123541],{"class":47,"line":1277},[45,123542,2483],{"emptyLinePlaceholder":133},[45,123544,123545],{"class":47,"line":1283},[45,123546,123547],{"class":267},"#Fedora用下方命令\n",[45,123549,123550,123552,123555,123558],{"class":47,"line":1297},[45,123551,24659],{"class":2046},[45,123553,123554],{"class":313}," udevadm",[45,123556,123557],{"class":313}," control",[45,123559,123560],{"class":257}," --reload\n",[45,123562,123563,123565,123567],{"class":47,"line":1303},[45,123564,24659],{"class":2046},[45,123566,123554],{"class":313},[45,123568,123569],{"class":313}," trigger\n",[10,123571,123572],{},"再重新插拔设备即可。",[10,123574,123575],{},"（4）.测试",[10,123577,123578],{},"终端下输入如下指令",[35,123580,123582],{"className":117347,"code":123581,"language":117349,"meta":40,"style":40},"ll \u002Fdev | grep ttyUSB\n",[42,123583,123584],{"__ignoreMap":40},[45,123585,123586,123589,123592,123594,123596],{"class":47,"line":48},[45,123587,123588],{"class":2046},"ll",[45,123590,123591],{"class":313}," \u002Fdev",[45,123593,25192],{"class":93},[45,123595,30319],{"class":2046},[45,123597,123598],{"class":313}," ttyUSB\n",[10,123600,123601],{},"运行结果如下：",[10,123603,123604],{},[1545,123605],{"alt":40,"src":123606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[10,123608,123609,123610,123613],{},"也可以多次插拔USB设备，会发现设备端口",[42,123611,123612],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[10,123615,123616],{},[358,123617,118015],{},[10,123619,123620],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[176,123622,123624],{"id":123623},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[10,123626,123627,123629],{},[358,123628,123343],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[10,123631,123632,123634],{},[358,123633,123349],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[10,123636,123637],{},[358,123638,123355],{},[10,123640,123641],{},"（1）.查看所连接的主机USB接口的KERNELS",[10,123643,123644],{},"调用如下指令查看第一台雷达的USB信息：",[35,123646,123648],{"className":117347,"code":123647,"language":117349,"meta":40,"style":40},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[42,123649,123650,123670],{"__ignoreMap":40},[45,123651,123652,123655,123657,123660,123663,123665,123667],{"class":47,"line":48},[45,123653,123654],{"class":2046},"udevadm",[45,123656,69902],{"class":313},[45,123658,123659],{"class":257}," --attribute-walk",[45,123661,123662],{"class":257}," --name=\u002Fdev\u002FttyUSB0",[45,123664,25192],{"class":93},[45,123666,30319],{"class":2046},[45,123668,123669],{"class":313}," KERNELS\n",[45,123671,123672,123674,123676,123678,123681,123683,123685],{"class":47,"line":125},[45,123673,123654],{"class":2046},[45,123675,69902],{"class":313},[45,123677,123659],{"class":257},[45,123679,123680],{"class":257}," --name=\u002Fdev\u002FttyACM0",[45,123682,25192],{"class":93},[45,123684,30319],{"class":2046},[45,123686,123669],{"class":313},[10,123688,123689],{},[1545,123690],{"alt":40,"src":123691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[10,123693,123694],{},"调用如下指令查看第二台雷达的USB信息：",[35,123696,123698],{"className":117347,"code":123697,"language":117349,"meta":40,"style":40},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[42,123699,123700],{"__ignoreMap":40},[45,123701,123702,123704,123706,123708,123711,123713,123715],{"class":47,"line":48},[45,123703,123654],{"class":2046},[45,123705,69902],{"class":313},[45,123707,123659],{"class":257},[45,123709,123710],{"class":257}," --name=\u002Fdev\u002FttyUSB1",[45,123712,25192],{"class":93},[45,123714,30319],{"class":2046},[45,123716,123669],{"class":313},[10,123718,123719,123720,123723,123724,123727,123728,123731],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[42,123721,123722],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[42,123725,123726],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[358,123729,123730],{},"唯一性标识","”。",[10,123733,123383],{},[10,123735,123386,123736,123738],{},[42,123737,123389],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[35,123740,123741],{"className":117347,"code":123393,"language":117349,"meta":40,"style":40},[42,123742,123743],{"__ignoreMap":40},[45,123744,123745,123747,123749],{"class":47,"line":48},[45,123746,24659],{"class":2046},[45,123748,118634],{"class":313},[45,123750,123404],{"class":313},[35,123752,123754],{"className":117347,"code":123753,"language":117349,"meta":40,"style":40},"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",[42,123755,123756,123785],{"__ignoreMap":40},[45,123757,123758,123760,123762,123764,123767,123769,123772,123775,123777,123780,123782],{"class":47,"line":48},[45,123759,123417],{"class":51},[45,123761,254],{"class":93},[45,123763,123422],{"class":313},[45,123765,123766],{"class":51}," KERNELS",[45,123768,254],{"class":93},[45,123770,123771],{"class":313},"=\"1-1.3:1.0\",",[45,123773,123774],{"class":2046}," MODE:",[45,123776,254],{"class":313},[45,123778,123779],{"class":2046},"\"0777\"",[45,123781,586],{"class":2046},[45,123783,123784],{"class":313}," SYMLINK+=\"rplidar_front\"\n",[45,123786,123787,123789,123791,123793,123795,123797,123800,123802,123804,123806,123808],{"class":47,"line":125},[45,123788,123417],{"class":51},[45,123790,254],{"class":93},[45,123792,123422],{"class":313},[45,123794,123766],{"class":51},[45,123796,254],{"class":93},[45,123798,123799],{"class":313},"=\"1-1.4:1.0\",",[45,123801,123774],{"class":2046},[45,123803,254],{"class":313},[45,123805,123779],{"class":2046},[45,123807,586],{"class":2046},[45,123809,123810],{"class":313}," SYMLINK+=\"rplidar_back\"\n",[10,123812,123502],{},[10,123814,123505],{},[35,123816,123817],{"className":117347,"code":123508,"language":117349,"meta":40,"style":40},[42,123818,123819,123823,123833,123843,123847,123851,123861],{"__ignoreMap":40},[45,123820,123821],{"class":47,"line":48},[45,123822,123515],{"class":267},[45,123824,123825,123827,123829,123831],{"class":47,"line":125},[45,123826,24659],{"class":2046},[45,123828,120099],{"class":313},[45,123830,123524],{"class":313},[45,123832,123527],{"class":313},[45,123834,123835,123837,123839,123841],{"class":47,"line":1262},[45,123836,24659],{"class":2046},[45,123838,120099],{"class":313},[45,123840,123524],{"class":313},[45,123842,123538],{"class":313},[45,123844,123845],{"class":47,"line":1277},[45,123846,2483],{"emptyLinePlaceholder":133},[45,123848,123849],{"class":47,"line":1283},[45,123850,123547],{"class":267},[45,123852,123853,123855,123857,123859],{"class":47,"line":1297},[45,123854,24659],{"class":2046},[45,123856,123554],{"class":313},[45,123858,123557],{"class":313},[45,123860,123560],{"class":257},[45,123862,123863,123865,123867],{"class":47,"line":1303},[45,123864,24659],{"class":2046},[45,123866,123554],{"class":313},[45,123868,123569],{"class":313},[10,123870,123572],{},[10,123872,123575],{},[10,123874,123578,123875,123878],{},[42,123876,123877],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[10,123880,123881],{},[1545,123882],{"alt":40,"src":123883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[10,123885,123886],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[10,123888,123889,123891],{},[358,123890,118015],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[176,123893,123895],{"id":123894},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[10,123897,123898],{},"（1）.查看所连接的主机USB接口的信息",[35,123900,123902],{"className":117347,"code":123901,"language":117349,"meta":40,"style":40},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[42,123903,123904,123934],{"__ignoreMap":40},[45,123905,123906,123908,123910,123913,123915,123917,123919,123921,123924,123927,123929,123932],{"class":47,"line":48},[45,123907,123654],{"class":2046},[45,123909,69902],{"class":313},[45,123911,123912],{"class":257}," -a",[45,123914,29299],{"class":257},[45,123916,28505],{"class":51},[45,123918,123654],{"class":2046},[45,123920,69902],{"class":313},[45,123922,123923],{"class":257}," -q",[45,123925,123926],{"class":313}," path",[45,123928,25198],{"class":257},[45,123930,123931],{"class":313}," \u002Fdev\u002FttyACM0",[45,123933,215],{"class":51},[45,123935,123936,123938,123940,123942,123944,123946,123948,123950,123952,123954,123956,123959],{"class":47,"line":125},[45,123937,123654],{"class":2046},[45,123939,69902],{"class":313},[45,123941,123912],{"class":257},[45,123943,29299],{"class":257},[45,123945,28505],{"class":51},[45,123947,123654],{"class":2046},[45,123949,69902],{"class":313},[45,123951,123923],{"class":257},[45,123953,123926],{"class":313},[45,123955,25198],{"class":257},[45,123957,123958],{"class":313}," \u002Fdev\u002FttyUSB0",[45,123960,215],{"class":51},[10,123962,123963],{},[1545,123964],{"alt":40,"src":123965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[10,123967,123968],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[10,123970,123383],{},[10,123972,123386,123973,123738],{},[42,123974,123389],{},[35,123976,123977],{"className":117347,"code":123393,"language":117349,"meta":40,"style":40},[42,123978,123979],{"__ignoreMap":40},[45,123980,123981,123983,123985],{"class":47,"line":48},[45,123982,24659],{"class":2046},[45,123984,118634],{"class":313},[45,123986,123404],{"class":313},[35,123988,123990],{"className":117347,"code":123989,"language":117349,"meta":40,"style":40},"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",[42,123991,123992,124020,124046],{"__ignoreMap":40},[45,123993,123994,123996,123998,124001,124003,124005,124007,124009,124012,124015,124017],{"class":47,"line":48},[45,123995,123417],{"class":51},[45,123997,254],{"class":93},[45,123999,124000],{"class":313},"=\"ttyACM*\",",[45,124002,123425],{"class":2046},[45,124004,123428],{"class":313},[45,124006,123457],{"class":2046},[45,124008,586],{"class":2046},[45,124010,124011],{"class":313}," ATTRS{idProduct}==\"55d4\",",[45,124013,124014],{"class":313}," ATTRS{serial}==\"0001\",",[45,124016,123439],{"class":313},[45,124018,124019],{"class":313}," SYMLINK+=\"ttyACM_MCU\"\n",[45,124021,124022,124024,124026,124028,124030,124032,124034,124036,124038,124041,124043],{"class":47,"line":125},[45,124023,123417],{"class":51},[45,124025,254],{"class":93},[45,124027,124000],{"class":313},[45,124029,123425],{"class":2046},[45,124031,123428],{"class":313},[45,124033,123457],{"class":2046},[45,124035,586],{"class":2046},[45,124037,124011],{"class":313},[45,124039,124040],{"class":313}," ATTRS{serial}==\"0002\",",[45,124042,123439],{"class":313},[45,124044,124045],{"class":313}," SYMLINK+=\"ttyACM_Lidar\"\n",[45,124047,124048,124050,124052,124054,124056,124058,124060,124062,124064,124066],{"class":47,"line":1262},[45,124049,123417],{"class":51},[45,124051,254],{"class":93},[45,124053,123422],{"class":313},[45,124055,123425],{"class":2046},[45,124057,123428],{"class":313},[45,124059,123457],{"class":2046},[45,124061,586],{"class":2046},[45,124063,123462],{"class":313},[45,124065,123439],{"class":313},[45,124067,124068],{"class":313}," SYMLINK+=\"ttyUSB_IMU\"\n",[10,124070,123502],{},[10,124072,123505],{},[35,124074,124075],{"className":117347,"code":123508,"language":117349,"meta":40,"style":40},[42,124076,124077,124081,124091,124101,124105,124109,124119],{"__ignoreMap":40},[45,124078,124079],{"class":47,"line":48},[45,124080,123515],{"class":267},[45,124082,124083,124085,124087,124089],{"class":47,"line":125},[45,124084,24659],{"class":2046},[45,124086,120099],{"class":313},[45,124088,123524],{"class":313},[45,124090,123527],{"class":313},[45,124092,124093,124095,124097,124099],{"class":47,"line":1262},[45,124094,24659],{"class":2046},[45,124096,120099],{"class":313},[45,124098,123524],{"class":313},[45,124100,123538],{"class":313},[45,124102,124103],{"class":47,"line":1277},[45,124104,2483],{"emptyLinePlaceholder":133},[45,124106,124107],{"class":47,"line":1283},[45,124108,123547],{"class":267},[45,124110,124111,124113,124115,124117],{"class":47,"line":1297},[45,124112,24659],{"class":2046},[45,124114,123554],{"class":313},[45,124116,123557],{"class":313},[45,124118,123560],{"class":257},[45,124120,124121,124123,124125],{"class":47,"line":1303},[45,124122,24659],{"class":2046},[45,124124,123554],{"class":313},[45,124126,123569],{"class":313},[10,124128,124129,124130],{},"再重新插拔设备即可，或者 ",[358,124131,124132],{},"直接重启系统。",[10,124134,123575],{},[10,124136,123578,124137,123878],{},[42,124138,123877],{},[10,124140,124141],{},[1545,124142],{"alt":40,"src":124143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[10,124145,123886],{},[10,124147,124148,124150],{},[358,124149,118015],{}," 一些设备可能没有串口号等。",[176,124152,124154],{"id":124153},"_744-其他注意事项","7.4.4 其他注意事项",[10,124156,124157,124158,124160,124161,124164,124165,18493,124168,124171,124172,124174],{},"并非所有的USB设备端口号都是",[42,124159,123612],{},"的格式，比如Arduino的端口号可能是",[42,124162,124163],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[42,124166,124167],{},"videon",[42,124169,124170],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[42,124173,124167],{},"端口，绑定时需要关联的也是该接口。",[10,124176,124177,124178,124181,124182,124185,124186,124188,124189,124192,124193,124196,124197,124200,124201,124200,124204,124200,124207,28468],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[42,124179,124180],{},"KERNEL==\"ttyUSB*\"","修改为",[42,124183,124184],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[42,124187,124180],{},"修改为类似于",[42,124190,124191],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[42,124194,124195],{},"video[0,2,4,6]","表示可以绑定的端口为",[42,124198,124199],{},"video0","或",[42,124202,124203],{},"video2",[42,124205,124206],{},"video4",[42,124208,124209],{},"video6",[30,124211,124213],{"id":124212},"_75-挂载内网网页","7.5 挂载内网网页",[10,124215,124216],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[10,124218,124219],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[10,124221,124222],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[10,124224,124225,124226],{},"Termux 下载地址（F-Droid）：",[13,124227,124228],{"href":124228,"rel":124229},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[17],[10,124231,124232],{},"首先打开app后，先更新软件缓存：",[35,124234,124236],{"className":117347,"code":124235,"language":117349,"meta":40,"style":40},"pkg update\n",[42,124237,124238],{"__ignoreMap":40},[45,124239,124240,124243],{"class":47,"line":48},[45,124241,124242],{"class":2046},"pkg",[45,124244,26325],{"class":313},[10,124246,124247],{},"然后换源",[35,124249,124251],{"className":117347,"code":124250,"language":117349,"meta":40,"style":40},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[42,124252,124253],{"__ignoreMap":40},[45,124254,124255,124257,124260],{"class":47,"line":48},[45,124256,123125],{"class":2046},[45,124258,124259],{"class":51}," $PREFIX",[45,124261,124262],{"class":313},"\u002Fetc\u002Fapt\u002Fsources.list\n",[10,124264,124265],{},"将该文件内容替换为下面：",[35,124267,124269],{"className":117347,"code":124268,"language":117349,"meta":40,"style":40},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[42,124270,124271],{"__ignoreMap":40},[45,124272,124273,124276,124279,124282],{"class":47,"line":48},[45,124274,124275],{"class":2046},"deb",[45,124277,124278],{"class":313}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[45,124280,124281],{"class":313}," stable",[45,124283,124284],{"class":313}," main\n",[1214,124286,124287,124314],{},[162,124288,124289,124290,124292,124293],{},"如果你使用的是",[42,124291,123125],{},"编辑器：",[1214,124294,124295,124302,124308],{},[162,124296,124297,124298,124301],{},"按 ",[42,124299,124300],{},"Ctrl+O"," 保存文件。",[162,124303,124297,124304,124307],{},[42,124305,124306],{},"Enter"," 确认文件名。",[162,124309,124297,124310,124313],{},[42,124311,124312],{},"Ctrl+X"," 退出编辑器。",[162,124315,124289,124316,124292,124319],{},[42,124317,124318],{},"vim",[1214,124320,124321,124327],{},[162,124322,124297,124323,124326],{},[42,124324,124325],{},"Esc"," 退出编辑模式。",[162,124328,124329,124330,124332],{},"输入 ",[42,124331,119272],{}," 保存并退出。",[10,124334,124335],{},"接下来重新更新软件源：",[35,124337,124339],{"className":117347,"code":124338,"language":117349,"meta":40,"style":40},"pkg update && pkg upgrade\n",[42,124340,124341],{"__ignoreMap":40},[45,124342,124343,124345,124347,124349,124351],{"class":47,"line":48},[45,124344,124242],{"class":2046},[45,124346,117398],{"class":313},[45,124348,26273],{"class":51},[45,124350,124242],{"class":2046},[45,124352,117384],{"class":313},[10,124354,124355],{},"安装python：",[35,124357,124359],{"className":117347,"code":124358,"language":117349,"meta":40,"style":40},"pkg install python\n",[42,124360,124361],{"__ignoreMap":40},[45,124362,124363,124365,124367],{"class":47,"line":48},[45,124364,124242],{"class":2046},[45,124366,23917],{"class":313},[45,124368,124369],{"class":313}," python\n",[10,124371,124372,26556],{},[358,124373,124374],{},"通过Termux访问设备存储",[10,124376,124377],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[35,124379,124381],{"className":117347,"code":124380,"language":117349,"meta":40,"style":40},"termux-setup-storage\n",[42,124382,124383],{"__ignoreMap":40},[45,124384,124385],{"class":47,"line":48},[45,124386,124380],{"class":2046},[159,124388,124389],{},[162,124390,124391,26556,124394],{},[358,124392,124393],{},"进入HTML文件所在的目录",[159,124395,124396],{},[162,124397,124398,124399,124401],{},"使用",[42,124400,101327],{},"命令进入HTML文件所在的目录：",[35,124403,124405],{"className":117347,"code":124404,"language":117349,"meta":40,"style":40},"cd ~\u002Fyour_html_folder\n",[42,124406,124407],{"__ignoreMap":40},[45,124408,124409,124411],{"class":47,"line":48},[45,124410,101327],{"class":257},[45,124412,124413],{"class":313}," ~\u002Fyour_html_folder\n",[159,124415,124416],{"start":125},[162,124417,124418,26556,124421,124426,124443],{},[358,124419,124420],{},"启动Python HTTP服务器",[159,124422,124423],{},[162,124424,124425],{},"运行以下命令启动一个简单的HTTP服务器：",[35,124427,124429],{"className":117347,"code":124428,"language":117349,"meta":40,"style":40},"python -m http.server 8000\n",[42,124430,124431],{"__ignoreMap":40},[45,124432,124433,124435,124437,124440],{"class":47,"line":48},[45,124434,39],{"class":2046},[45,124436,100933],{"class":257},[45,124438,124439],{"class":313}," http.server",[45,124441,124442],{"class":257}," 8000\n",[159,124444,124445],{"start":1262},[162,124446,124447,124448,124451],{},"这会在端口",[42,124449,124450],{},"8000","上启动一个Web服务器。",[1214,124453,124454],{},[162,124455,124456],{},"启动服务器后，Termux会显示日志信息，例如：",[35,124458,124460],{"className":120867,"code":124459,"language":120869,"meta":120870,"style":40},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[42,124461,124462],{"__ignoreMap":40},[45,124463,124464],{"class":47,"line":48},[45,124465,124459],{},[1214,124467,124468],{},[162,124469,124470],{},"这表示服务器已成功启动。",[10,124472,124473],{},[358,124474,124475],{},"在浏览器中访问HTML文件",[159,124477,124478],{},[162,124479,124480,26556,124483,124488],{},[358,124481,124482],{},"在同一设备上访问",[159,124484,124485],{},[162,124486,124487],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[35,124489,124492],{"className":124490,"code":124491,"language":71745,"meta":40,"style":40},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[42,124493,124494],{"__ignoreMap":40},[45,124495,124496,124499],{"class":47,"line":48},[45,124497,124498],{"class":51},"http:",[45,124500,124501],{"class":267},"\u002F\u002Flocalhost:8000\n",[1214,124503,124504],{},[162,124505,124506,124507,124510],{},"如果HTML文件中有",[42,124508,124509],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[30,124512,124514],{"id":124513},"_76-linux重点知识","7.6 Linux重点知识",[176,124516,124518],{"id":124517},"_761-关于点的说明","7.6.1 关于点的说明",[10,124520,124521],{},[1545,124522],{"alt":40,"src":124523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[10,124525,124526],{},"一点本目录，两点上目录",[176,124528,124530],{"id":124529},"_762-目录","7.6.2 目录",[22081,124532,124534],{"id":124533},"_7621-系统启动必须","7.6.2.1 系统启动必须",[10,124536,124537],{},[358,124538,124539],{},"\u002Fboot:",[10,124541,124542],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[10,124544,124545],{},[358,124546,124547],{},"\u002Fetc:",[10,124549,124550],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[10,124552,124553],{},[358,124554,124555],{},"\u002Flib：",[10,124557,124558],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[10,124560,124561],{},[358,124562,124563],{},"\u002Fsys:",[10,124565,124566],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22081,124568,124570],{"id":124569},"_7622-指令集合","7.6.2.2 指令集合",[10,124572,124573],{},[358,124574,124575],{},"\u002Fbin:",[10,124577,124578],{},"为二进制文件的缩写，存放最经常使用的命令",[10,124580,124581],{},[358,124582,124583],{},"\u002Fsbin:",[10,124585,124586],{},"只有系统管理员才能使用的程序和指令",[22081,124588,124590],{"id":124589},"_7623-外部文件管理","7.6.2.3 外部文件管理",[10,124592,124593],{},[358,124594,124595],{},"\u002Fdev:",[10,124597,124598],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[10,124600,124601],{},[358,124602,124603],{},"\u002Fmedia:",[10,124605,124606],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[10,124608,124609],{},[358,124610,124611],{},"\u002Fmnt:",[10,124613,124614],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22081,124616,124618],{"id":124617},"_7624-临时文件","7.6.2.4 临时文件",[10,124620,124621],{},[358,124622,124623],{},"\u002Frun:",[10,124625,124626],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[10,124628,124629],{},[358,124630,124631],{},"\u002Flost+found:",[10,124633,124634],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[10,124636,124637],{},[358,124638,124639],{},"\u002Ftmp:",[10,124641,124642],{},"这个目录是用来存放一些临时文件的",[22081,124644,124646],{"id":124645},"_7625-账户","7.6.2.5 账户",[10,124648,124649],{},[358,124650,124651],{},"\u002Froot：",[10,124653,124654],{},"系统管理员的用户主目录",[10,124656,124657,26556],{},[358,124658,124659],{},"\u002Fhome",[10,124661,124662],{},"用户的主目录，以用户的账号命名的",[10,124664,124665,26556],{},[358,124666,124667],{},"\u002Fusr",[10,124669,124670],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[10,124672,124673],{},[358,124674,124675],{},"\u002Fusr\u002Fbin：",[10,124677,124678],{},"系统用户使用的应用程序与指令",[10,124680,124681],{},[358,124682,124683],{},"\u002Fusr\u002Fsbin：",[10,124685,124686],{},"超级用户使用的比较高级的管理程序和系统守护程序",[10,124688,124689],{},[358,124690,124691],{},"\u002Fusr\u002Fsrc：",[10,124693,124694],{},"内核源代码默认的放置目录",[22081,124696,124698],{"id":124697},"_7626-运行过程要用","7.6.2.6 运行过程要用",[10,124700,124701],{},[358,124702,124703],{},"\u002Fvar：",[10,124705,124706],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[10,124708,124709],{},[358,124710,124711],{},"\u002Fproc:",[10,124713,124714,124715,124718],{},"管理 ",[358,124716,124717],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22081,124720,124722],{"id":124721},"_7627-扩展用的","7.6.2.7 扩展用的",[10,124724,124725],{},[358,124726,124727],{},"\u002Fopt:",[10,124729,124730],{},"默认是空的，我们安装额外软件可以放在这个里面",[10,124732,124733],{},[358,124734,124735],{},"\u002Fsrv:",[10,124737,124738],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[176,124740,124742],{"id":124741},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[10,124744,124745],{},[1545,124746],{"alt":40,"src":124747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[10,124749,124750],{},"windows-->linux:",[10,124752,124753],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[10,124755,124756],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[10,124758,124759],{},"linux传输文件到windows",[10,124761,124762],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[176,124764,124766],{"id":124765},"_764-易忘知识","7.6.4 易忘知识",[10,124768,124769],{},"操作系统内核查看",[35,124771,124772],{"className":117347,"code":121341,"language":117349,"meta":40,"style":40},[42,124773,124774],{"__ignoreMap":40},[45,124775,124776,124778],{"class":47,"line":48},[45,124777,70285],{"class":2046},[45,124779,121350],{"class":257},[10,124781,124782],{},[1545,124783],{"alt":40,"src":124784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[10,124786,124787],{},[1545,124788],{"alt":40,"src":124789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[35,124791,124793],{"className":117347,"code":124792,"language":117349,"meta":40,"style":40},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[42,124794,124795,124807],{"__ignoreMap":40},[45,124796,124797,124799,124802,124805],{"class":47,"line":48},[45,124798,121558],{"class":2046},[45,124800,124801],{"class":313}," mvtest",[45,124803,124804],{"class":313}," mvtest2",[45,124806,2757],{"class":51},[45,124808,124809],{"class":47,"line":125},[45,124810,124811],{"class":2046},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[10,124813,124814],{},[1545,124815],{"alt":40,"src":124816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[10,124818,124819],{},[1545,124820],{"alt":40,"src":124821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[10,124823,124824,124825,124828],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[42,124826,124827],{},"du -a"," 可以快速查看磁盘使用细节。",[176,124830,124832],{"id":124831},"_765-vim","7.6.5 Vim",[10,124834,124835],{},[1545,124836],{"alt":40,"src":124837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[10,124839,124840],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[10,124842,124843],{},"一开始进去为命令模式，此时点击输入的字母为命令",[10,124845,124846],{},[358,124847,124848],{},"1.命令模式：",[10,124850,124851],{},"i 切换到输入模式，在光标当前位置开始输入文本",[10,124853,124854],{},"x 删除当前光标所在处的字符",[10,124856,124857],{},"：切换到底线命令模式，以在最底一行输入命令",[10,124859,124860],{},"a 进行插入模式，在光标下一个位置输入文本",[10,124862,124863],{},"o 在当前的下方插入一个新行，并进入插入模式",[10,124865,124866],{},"0 在当前行的上方插入一个新行，并进入插入模式",[10,124868,124869],{},"dd 剪切当前行",[10,124871,124872],{},"yy 复制当前行",[10,124874,124875],{},"p 粘贴剪贴板内容到光标下方",[10,124877,124878],{},"P 粘贴剪贴板内容到光标上方",[10,124880,124881],{},"u 撤销上一次操作",[10,124883,124884],{},"ctrl+r 重做上一次操作",[10,124886,124887,124889],{},[1002,124888],{}," 保存文件",[10,124891,124892,124894],{},[852,124893],{}," 退出Vim编辑器",[10,124896,124897,124899],{},[852,124898],{},"! 强制退出Vim编辑器，不保存修改",[10,124901,124902],{},[358,124903,124904],{},"2.输入模式：",[10,124906,124907],{},[1545,124908],{"alt":40,"src":124909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[10,124911,124912],{},[358,124913,124914],{},"3.底线命令模式：",[10,124916,124917],{},[1545,124918],{"alt":40,"src":124919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[10,124921,124922],{},"按下esc可以退出底线命令模式",[176,124924,124926],{"id":124925},"_766-apt","7.6.6 apt",[10,124928,124929],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[176,124931,124933],{"id":124932},"_767-home与root的区别","7.6.7 home与root的区别",[10,124935,124936],{},[1545,124937],{"alt":40,"src":124938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[10,124940,124941],{},[1545,124942],{"alt":40,"src":124943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[10,124945,124946],{},[1545,124947],{"alt":40,"src":124948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[10,124950,124951],{},[1545,124952],{"alt":40,"src":124953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[176,124955,124957],{"id":124956},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[10,124959,124960],{},[13,124961,124962],{"href":124962,"rel":124963},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[17],[159,124965,124966,124969],{},[162,124967,124968],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[162,124970,124971],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[10,124973,124974],{},[1545,124975],{"alt":40,"src":124976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[10,124978,124979],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[10,124981,124982],{},[1545,124983],{"alt":40,"src":124984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[35,124986,124988],{"className":120867,"code":124987,"language":120869,"meta":120870,"style":40},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[42,124989,124990,124995],{"__ignoreMap":40},[45,124991,124992],{"class":47,"line":48},[45,124993,124994],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[45,124996,124997],{"class":47,"line":125},[45,124998,124999],{},".\u002Fpycharm.sh\n",[10,125001,125002],{},"3️⃣创建.desktop文件",[10,125004,125005],{},[358,125006,125007],{},"原理：",[1214,125009,125010,125020],{},[162,125011,125012,125013,125019],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[358,125014,125015,125018],{},[42,125016,125017],{},".desktop"," 文件"," 来识别应用。",[162,125021,125022,125024,125025],{},[42,125023,125017],{}," 文件相当于一个“应用注册表”，告诉系统：",[1214,125026,125027,125030,125033,125036,125039],{},[162,125028,125029],{},"应用名字（Name）",[162,125031,125032],{},"图标（Icon）",[162,125034,125035],{},"执行命令（Exec）",[162,125037,125038],{},"分类（Categories）",[162,125040,125041],{},"是否需要终端（Terminal）",[35,125043,125045],{"className":120867,"code":125044,"language":120869,"meta":120870,"style":40},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[42,125046,125047,125052],{"__ignoreMap":40},[45,125048,125049],{"class":47,"line":48},[45,125050,125051],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[45,125053,125054],{"class":47,"line":125},[45,125055,125056],{},"nano pycharm.desktop\n",[10,125058,125059],{},"nano是一个命令行下的编辑器，也可以使用vim",[35,125061,125063],{"className":120867,"code":125062,"language":120869,"meta":120870,"style":40},"[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",[42,125064,125065,125070,125075,125080,125085,125090,125095,125100,125105,125110],{"__ignoreMap":40},[45,125066,125067],{"class":47,"line":48},[45,125068,125069],{},"[Desktop Entry]\n",[45,125071,125072],{"class":47,"line":125},[45,125073,125074],{},"Version=1.0\n",[45,125076,125077],{"class":47,"line":1262},[45,125078,125079],{},"Type=Application\n",[45,125081,125082],{"class":47,"line":1277},[45,125083,125084],{},"Name=PyCharm\n",[45,125086,125087],{"class":47,"line":1283},[45,125088,125089],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[45,125091,125092],{"class":47,"line":1297},[45,125093,125094],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[45,125096,125097],{"class":47,"line":1303},[45,125098,125099],{},"Comment=JetBrains PyCharm IDE\n",[45,125101,125102],{"class":47,"line":1394},[45,125103,125104],{},"Categories=Development;IDE;\n",[45,125106,125107],{"class":47,"line":1400},[45,125108,125109],{},"Terminal=false\n",[45,125111,125112],{"class":47,"line":1412},[45,125113,125114],{},"StartupWMClass=jetbrains-pycharm\n",[1214,125116,125117,125123,125129,125135],{},[162,125118,125119,125122],{},[42,125120,125121],{},"Exec"," → 点击图标时执行的命令",[162,125124,125125,125128],{},[42,125126,125127],{},"Icon"," → 显示在菜单和桌面上的图标",[162,125130,125131,125134],{},[42,125132,125133],{},"Terminal=false"," → 不打开终端",[162,125136,125137,125140],{},[42,125138,125139],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125142,125143,125144],"blockquote",{},[10,125145,125146,125147,125149,125150],{},"可以理解成 ",[42,125148,125017],{}," 文件是 Linux 的 ",[358,125151,125152],{},"快捷方式配置文件",[10,125154,125155],{},"4️⃣设置可执行权限",[35,125157,125159],{"className":120867,"code":125158,"language":120869,"meta":120870,"style":40},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[42,125160,125161],{"__ignoreMap":40},[45,125162,125163],{"class":47,"line":48},[45,125164,125158],{},[10,125166,125167],{},"5️⃣桌面图标启动的话如下：",[35,125169,125171],{"className":120867,"code":125170,"language":120869,"meta":120870,"style":40},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[42,125172,125173,125178],{"__ignoreMap":40},[45,125174,125175],{"class":47,"line":48},[45,125176,125177],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[45,125179,125180],{"class":47,"line":125},[45,125181,125182],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[159,125184,125185],{"start":1262},[162,125186,125187],{},"下载Appimage文件实现软件的安装",[10,125189,125190],{},"1️⃣先下载appimage",[10,125192,125193],{},[13,125194,125195],{"href":125195,"rel":125196},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[17],[10,125198,125199],{},[1545,125200],{"alt":40,"src":125201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[10,125203,125204],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[10,125206,125207],{},[1545,125208],{"alt":40,"src":125209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[10,125211,125212],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[10,125214,125215],{},[1545,125216],{"alt":40,"src":125217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[10,125219,125220],{},[1545,125221],{"alt":40,"src":125222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[10,125224,125225,125226,125229],{},"3️⃣给他们放在",[42,125227,125228],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[10,125231,125232],{},"4️⃣给软件执行权限",[35,125234,125236],{"className":120867,"code":125235,"language":120869,"meta":120870,"style":40},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[42,125237,125238,125243],{"__ignoreMap":40},[45,125239,125240],{"class":47,"line":48},[45,125241,125242],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[45,125244,125245],{"class":47,"line":125},[45,125246,125247],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[10,125249,125250],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[35,125252,125254],{"className":117347,"code":125253,"language":117349,"meta":40,"style":40},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[42,125255,125256,125263,125270,125276],{"__ignoreMap":40},[45,125257,125258,125260],{"class":47,"line":48},[45,125259,101327],{"class":257},[45,125261,125262],{"class":313}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[45,125264,125265,125267],{"class":47,"line":125},[45,125266,101334],{"class":2046},[45,125268,125269],{"class":313}," .\u002Fqqmusic.desktop\n",[45,125271,125272,125274],{"class":47,"line":1262},[45,125273,124318],{"class":2046},[45,125275,125269],{"class":313},[45,125277,125278,125280,125282,125284],{"class":47,"line":1277},[45,125279,24659],{"class":2046},[45,125281,24662],{"class":313},[45,125283,123184],{"class":313},[45,125285,125269],{"class":313},[10,125287,125288,125290],{},[42,125289,101334],{},"：一个 Linux 命令，主要功能是：",[1214,125292,125293,125296],{},[162,125294,125295],{},"如果文件不存在，就创建一个新的空文件",[162,125297,125298],{},"如果文件已存在，就更新该文件的最后修改时间",[35,125300,125302],{"className":120867,"code":125301,"language":120869,"meta":120870,"style":40},"[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",[42,125303,125304,125308,125313,125318,125323,125327,125332],{"__ignoreMap":40},[45,125305,125306],{"class":47,"line":48},[45,125307,125069],{},[45,125309,125310],{"class":47,"line":125},[45,125311,125312],{},"Name=QQ音乐\n",[45,125314,125315],{"class":47,"line":1262},[45,125316,125317],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[45,125319,125320],{"class":47,"line":1277},[45,125321,125322],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[45,125324,125325],{"class":47,"line":1283},[45,125326,125079],{},[45,125328,125329],{"class":47,"line":1297},[45,125330,125331],{},"Categories=Audio;Music;Player;\n",[45,125333,125334],{"class":47,"line":1303},[45,125335,125336],{},"Comment=QQ Music Client for Linux\n",[10,125338,125339],{},"将文件复制进去",[10,125341,125342],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[10,125344,125345],{},[1545,125346],{"alt":40,"src":125347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[10,125349,125350],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[10,125352,125353],{},[1545,125354],{"alt":40,"src":125355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[10,125357,125358,125359,125362,125363,125366],{},"如果你用的不是KDE，那么也可以直接修改",[42,125360,125361],{},"qqmuic.desktop","：在exec的末尾加上",[42,125364,125365],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[35,125368,125370],{"className":120867,"code":125369,"language":120869,"meta":120870,"style":40},"[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",[42,125371,125372,125376,125380,125385,125389,125393,125397],{"__ignoreMap":40},[45,125373,125374],{"class":47,"line":48},[45,125375,125069],{},[45,125377,125378],{"class":47,"line":125},[45,125379,125312],{},[45,125381,125382],{"class":47,"line":1262},[45,125383,125384],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[45,125386,125387],{"class":47,"line":1277},[45,125388,125322],{},[45,125390,125391],{"class":47,"line":1283},[45,125392,125079],{},[45,125394,125395],{"class":47,"line":1297},[45,125396,125331],{},[45,125398,125399],{"class":47,"line":1303},[45,125400,125336],{},[10,125402,125403],{},[1545,125404],{"alt":40,"src":125405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[10,125407,125408],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[35,125410,125412],{"className":120867,"code":125411,"language":120869,"meta":120870,"style":40},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[42,125413,125414],{"__ignoreMap":40},[45,125415,125416],{"class":47,"line":48},[45,125417,125411],{},[159,125419,125420],{"start":1277},[162,125421,125422],{},"去Flathub上安装软件",[10,125424,125425],{},[13,125426,125427],{"href":125427,"rel":125428},"https:\u002F\u002Fflathub.org\u002F",[17],[10,125430,125431],{},"1️⃣去上面的官网搜索软件+下载软件",[10,125433,125434],{},[1545,125435],{"alt":40,"src":125436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[35,125438,125440],{"className":120867,"code":125439,"language":120869,"meta":120870,"style":40},"flatpak install flathub com.obsproject.Studio\n",[42,125441,125442],{"__ignoreMap":40},[45,125443,125444],{"class":47,"line":48},[45,125445,125439],{},[10,125447,125448],{},[1545,125449],{"alt":40,"src":125450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[10,125452,125453],{},"2️⃣运行软件",[10,125455,125456],{},"a.官方方式：",[10,125458,125459],{},[1545,125460],{"alt":40,"src":125461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[35,125463,125464],{"className":120867,"code":125439,"language":120869,"meta":120870,"style":40},[42,125465,125466],{"__ignoreMap":40},[45,125467,125468],{"class":47,"line":48},[45,125469,125439],{},[10,125471,125472],{},"b.当普通软件运行：",[10,125474,125475],{},[1545,125476],{"alt":40,"src":125477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[10,125479,125480],{},[1545,125481],{"alt":40,"src":125482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[121,125484,125485],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":40,"searchDepth":125,"depth":125,"links":125487},[125488,125489,125494,125495,125501,125502],{"id":122220,"depth":125,"text":122221},{"id":122562,"depth":125,"text":122563,"children":125490},[125491,125492,125493],{"id":122566,"depth":1262,"text":122567},{"id":122633,"depth":1262,"text":122634},{"id":122894,"depth":1262,"text":122895},{"id":123047,"depth":125,"text":123048},{"id":123285,"depth":125,"text":123286,"children":125496},[125497,125498,125499,125500],{"id":123337,"depth":1262,"text":123338},{"id":123623,"depth":1262,"text":123624},{"id":123894,"depth":1262,"text":123895},{"id":124153,"depth":1262,"text":124154},{"id":124212,"depth":125,"text":124213},{"id":124513,"depth":125,"text":124514,"children":125503},[125504,125505,125506,125507,125508,125509,125510,125511],{"id":124517,"depth":1262,"text":124518},{"id":124529,"depth":1262,"text":124530},{"id":124741,"depth":1262,"text":124742},{"id":124765,"depth":1262,"text":124766},{"id":124831,"depth":1262,"text":124832},{"id":124925,"depth":1262,"text":124926},{"id":124932,"depth":1262,"text":124933},{"id":124956,"depth":1262,"text":124957},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122212,"description":130},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125518,"title":125519,"body":125520,"description":130,"extension":131,"meta":125524,"navigation":133,"path":125525,"seo":125526,"stem":125527,"__hash__":125528},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125521,"toc":125522},[],{"title":40,"searchDepth":125,"depth":125,"links":125523},[],{"category":30346},"\u002Fwiki\u002F2025-01-27-linux",{"title":125519,"description":130},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125530,"title":125531,"body":125532,"description":125536,"extension":131,"meta":125927,"navigation":133,"path":125928,"seo":125929,"stem":125930,"__hash__":125931},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125533,"toc":125925},[125534,125537,125541,125558,125561,125614,125618,125620,125660,125669,125673,125676,125917,125922],[10,125535,125536],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[20,125538,125540],{"id":125539},"_1ubuntu环境配置","1.Ubuntu环境配置",[159,125542,125543,125546,125549,125552,125555],{},[162,125544,125545],{},"ubuntu环境换源",[162,125547,125548],{},"安装cuda",[162,125550,125551],{},"安装miniconda",[162,125553,125554],{},"安装pytorch",[162,125556,125557],{},"安装genesis",[10,125559,125560],{},"参考链接：",[35,125562,125564],{"className":23905,"code":125563,"language":23907,"meta":40,"style":40},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[42,125565,125566],{"__ignoreMap":40},[45,125567,125568,125571,125574,125577,125579,125582,125585,125587,125590,125593,125595,125598,125601,125603,125606,125609,125611],{"class":47,"line":48},[45,125569,125570],{"class":2046},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[45,125572,125573],{"class":313},"=blogdetail",[45,125575,125576],{"class":51},"&sharetype",[45,125578,254],{"class":93},[45,125580,125581],{"class":313},"blogdetail",[45,125583,125584],{"class":51},"&sharerId",[45,125586,254],{"class":93},[45,125588,125589],{"class":313},"144728092",[45,125591,125592],{"class":51},"&sharerefer",[45,125594,254],{"class":93},[45,125596,125597],{"class":313},"PC",[45,125599,125600],{"class":51},"&sharesource",[45,125602,254],{"class":93},[45,125604,125605],{"class":313},"qq_69379513",[45,125607,125608],{"class":51},"&sharefrom",[45,125610,254],{"class":93},[45,125612,125613],{"class":313},"from_link\n",[20,125615,125617],{"id":125616},"_2genesis-报错issue","2.Genesis 报错issue",[10,125619,125560],{},[35,125621,125622],{"className":23905,"code":125563,"language":23907,"meta":40,"style":40},[42,125623,125624],{"__ignoreMap":40},[45,125625,125626,125628,125630,125632,125634,125636,125638,125640,125642,125644,125646,125648,125650,125652,125654,125656,125658],{"class":47,"line":48},[45,125627,125570],{"class":2046},[45,125629,125573],{"class":313},[45,125631,125576],{"class":51},[45,125633,254],{"class":93},[45,125635,125581],{"class":313},[45,125637,125584],{"class":51},[45,125639,254],{"class":93},[45,125641,125589],{"class":313},[45,125643,125592],{"class":51},[45,125645,254],{"class":93},[45,125647,125597],{"class":313},[45,125649,125600],{"class":51},[45,125651,254],{"class":93},[45,125653,125605],{"class":313},[45,125655,125608],{"class":51},[45,125657,254],{"class":93},[45,125659,125613],{"class":313},[35,125661,125663],{"className":23905,"code":125662,"language":23907,"meta":40,"style":40},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[42,125664,125665],{"__ignoreMap":40},[45,125666,125667],{"class":47,"line":48},[45,125668,125662],{"class":2046},[20,125670,125672],{"id":125671},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[10,125674,125675],{},"hello_robot.py",[35,125677,125679],{"className":37,"code":125678,"language":39,"meta":40,"style":40},"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",[42,125680,125681,125687,125702,125706,125718,125730,125734,125747,125751,125770,125780,125790,125804,125808,125812,125817,125821,125831,125838,125852,125859,125869,125874,125878,125896,125901,125905,125912],{"__ignoreMap":40},[45,125682,125683,125685],{"class":47,"line":48},[45,125684,30473],{"class":93},[45,125686,45386],{"class":51},[45,125688,125689,125692,125695,125697,125699],{"class":47,"line":125},[45,125690,125691],{"class":51},"os.environ[",[45,125693,125694],{"class":313},"'PYOPENGL_PLATFORM'",[45,125696,4526],{"class":51},[45,125698,254],{"class":93},[45,125700,125701],{"class":313}," 'glx'\n",[45,125703,125704],{"class":47,"line":1262},[45,125705,2483],{"emptyLinePlaceholder":133},[45,125707,125708,125710,125713,125715],{"class":47,"line":1277},[45,125709,30473],{"class":93},[45,125711,125712],{"class":51}," genesis ",[45,125714,31464],{"class":93},[45,125716,125717],{"class":51}," gs\n",[45,125719,125720,125722,125725,125727],{"class":47,"line":1283},[45,125721,30818],{"class":93},[45,125723,125724],{"class":51}," pynput ",[45,125726,30473],{"class":93},[45,125728,125729],{"class":51}," keyboard\n",[45,125731,125732],{"class":47,"line":1297},[45,125733,2483],{"emptyLinePlaceholder":133},[45,125735,125736,125739,125742,125744],{"class":47,"line":1303},[45,125737,125738],{"class":51},"gs.init(",[45,125740,125741],{"class":5299},"backend",[45,125743,254],{"class":93},[45,125745,125746],{"class":51},"gs.gpu)\n",[45,125748,125749],{"class":47,"line":1394},[45,125750,2483],{"emptyLinePlaceholder":133},[45,125752,125753,125756,125758,125761,125764,125766,125768],{"class":47,"line":1400},[45,125754,125755],{"class":51},"scene ",[45,125757,254],{"class":93},[45,125759,125760],{"class":51}," gs.Scene(",[45,125762,125763],{"class":5299},"show_viewer",[45,125765,254],{"class":93},[45,125767,31557],{"class":257},[45,125769,215],{"class":51},[45,125771,125772,125775,125777],{"class":47,"line":1412},[45,125773,125774],{"class":51},"plane ",[45,125776,254],{"class":93},[45,125778,125779],{"class":51}," scene.add_entity(gs.morphs.Plane())\n",[45,125781,125782,125785,125787],{"class":47,"line":1695},[45,125783,125784],{"class":51},"franka ",[45,125786,254],{"class":93},[45,125788,125789],{"class":51}," scene.add_entity(\n",[45,125791,125792,125795,125797,125799,125802],{"class":47,"line":1700},[45,125793,125794],{"class":51},"    gs.morphs.MJCF(",[45,125796,45435],{"class":5299},[45,125798,254],{"class":93},[45,125800,125801],{"class":313},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[45,125803,38128],{"class":51},[45,125805,125806],{"class":47,"line":1706},[45,125807,215],{"class":51},[45,125809,125810],{"class":47,"line":1711},[45,125811,2483],{"emptyLinePlaceholder":133},[45,125813,125814],{"class":47,"line":1725},[45,125815,125816],{"class":51},"scene.build()\n",[45,125818,125819],{"class":47,"line":1730},[45,125820,2483],{"emptyLinePlaceholder":133},[45,125822,125823,125825,125828],{"class":47,"line":1736},[45,125824,32028],{"class":93},[45,125826,125827],{"class":2046}," on_press",[45,125829,125830],{"class":51},"(key):\n",[45,125832,125833,125836],{"class":47,"line":1757},[45,125834,125835],{"class":93},"    try",[45,125837,3822],{"class":51},[45,125839,125840,125842,125845,125847,125850],{"class":47,"line":1762},[45,125841,2580],{"class":93},[45,125843,125844],{"class":51}," key.char ",[45,125846,3032],{"class":93},[45,125848,125849],{"class":313}," 'q'",[45,125851,3822],{"class":51},[45,125853,125854,125856],{"class":47,"line":1776},[45,125855,15815],{"class":93},[45,125857,125858],{"class":257}," False\n",[45,125860,125861,125864,125867],{"class":47,"line":1781},[45,125862,125863],{"class":93},"    except",[45,125865,125866],{"class":257}," AttributeError",[45,125868,3822],{"class":51},[45,125870,125871],{"class":47,"line":1810},[45,125872,125873],{"class":93},"        pass\n",[45,125875,125876],{"class":47,"line":1815},[45,125877,2483],{"emptyLinePlaceholder":133},[45,125879,125880,125883,125885,125888,125891,125893],{"class":47,"line":1832},[45,125881,125882],{"class":51},"listener ",[45,125884,254],{"class":93},[45,125886,125887],{"class":51}," keyboard.Listener(",[45,125889,125890],{"class":5299},"on_press",[45,125892,254],{"class":93},[45,125894,125895],{"class":51},"on_press)\n",[45,125897,125898],{"class":47,"line":1837},[45,125899,125900],{"class":51},"listener.start()\n",[45,125902,125903],{"class":47,"line":1842},[45,125904,2483],{"emptyLinePlaceholder":133},[45,125906,125907,125909],{"class":47,"line":1847},[45,125908,108714],{"class":93},[45,125910,125911],{"class":51}," listener.running:\n",[45,125913,125914],{"class":47,"line":1861},[45,125915,125916],{"class":51},"    scene.step()\n",[10,125918,125919],{},[1545,125920],{"alt":40,"src":125921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[121,125923,125924],{},"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":40,"searchDepth":125,"depth":125,"links":125926},[],{"category":23461},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125531,"description":125536},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125933,"title":125934,"body":125935,"description":130,"extension":131,"meta":125950,"navigation":133,"path":125951,"seo":125952,"stem":125953,"__hash__":125954},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125936,"toc":125947},[125937,125940,125944],[20,125938,125934],{"id":125939},"_1-基础知识",[30,125941,125943],{"id":125942},"_11-js的组成","1.1 js的组成",[10,125945,125946],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":40,"searchDepth":125,"depth":125,"links":125948},[125949],{"id":125942,"depth":125,"text":125943},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125934,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125956,"title":125957,"body":125958,"description":130,"extension":131,"meta":126097,"navigation":133,"path":126098,"seo":126099,"stem":126100,"__hash__":126101},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125959,"toc":126085},[125960,125963,125967,125970,125974,125984,125988,125991,125994,125997,126001,126008,126014,126018,126024,126035,126039,126042,126046,126049,126053,126056,126060,126063,126067,126070,126073,126076,126079,126082],[20,125961,125957],{"id":125962},"_2-vscode必备内容",[30,125964,125966],{"id":125965},"_21-标签分类","2.1 标签分类",[10,125968,125969],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[30,125971,125973],{"id":125972},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[10,125975,125976,125977,125979,125980,125983],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[42,125978,435],{}," 然后按 ",[42,125981,125982],{},"Tab","，快速自动生成基本结构。",[30,125985,125987],{"id":125986},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[10,125989,125990],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[10,125992,125993],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[10,125995,125996],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[30,125998,126000],{"id":125999},"_24-视图缩放","2.4 视图缩放",[10,126002,126003,126004,126007],{},"缩放视图 ",[42,126005,126006],{},"ctrl+"," 可实现代码增大。",[10,126009,126010,126013],{},[42,126011,126012],{},"ctrl-"," 可实现代码减小。",[30,126015,126017],{"id":126016},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[10,126019,126020,126021,28468],{},"VSCode 新建文件快捷键为 ",[42,126022,126023],{},"ctrl+N",[10,126025,126026,126027,126030,126031,126034],{},"保存快捷键为 ",[42,126028,126029],{},"ctrl+S","，将文本保存为 ",[42,126032,126033],{},".html"," 文件。",[30,126036,126038],{"id":126037},"_26-auto-rename-tag","2.6 Auto Rename Tag",[10,126040,126041],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[30,126043,126045],{"id":126044},"_27-vscode-icons","2.7 vscode-icons",[10,126047,126048],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[30,126050,126052],{"id":126051},"_28-easy-less","2.8 Easy LESS",[10,126054,126055],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[30,126057,126059],{"id":126058},"_29-会了吧插件","2.9 会了吧插件",[10,126061,126062],{},"会了吧插件可以展示代码中英语单词的意思。",[30,126064,126066],{"id":126065},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[10,126068,126069],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[10,126071,126072],{},"②选定多个相同的单词:ctrl+D",[10,126074,126075],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[10,126077,126078],{},"④全局替换某些单词:ctrl+h",[10,126080,126081],{},"⑤快速定位到某一行:ctrl+g",[10,126083,126084],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":40,"searchDepth":125,"depth":125,"links":126086},[126087,126088,126089,126090,126091,126092,126093,126094,126095,126096],{"id":125965,"depth":125,"text":125966},{"id":125972,"depth":125,"text":125973},{"id":125986,"depth":125,"text":125987},{"id":125999,"depth":125,"text":126000},{"id":126016,"depth":125,"text":126017},{"id":126037,"depth":125,"text":126038},{"id":126044,"depth":125,"text":126045},{"id":126051,"depth":125,"text":126052},{"id":126058,"depth":125,"text":126059},{"id":126065,"depth":125,"text":126066},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125957,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126103,"title":126104,"body":126105,"description":130,"extension":131,"meta":126264,"navigation":133,"path":126265,"seo":126266,"stem":126267,"__hash__":126268},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126106,"toc":126256},[126107,126110,126114,126124,126130,126136,126140,126149,126153,126158,126161,126164,126168,126171,126181,126190,126199,126208,126218,126225,126230,126235,126248],[20,126108,126104],{"id":126109},"_3-html文本与容器标签",[30,126111,126113],{"id":126112},"_31-标题标签","3.1 标题标签",[10,126115,126116,126119,126120,126123],{},[42,126117,126118],{},"\u003Ch1>","我是一级标签",[42,126121,126122],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[10,126125,126126,126119,126128],{},[42,126127,126118],{},[42,126129,126122],{},[10,126131,123386,126132,126135],{},[42,126133,126134],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[30,126137,126139],{"id":126138},"_32-段落标签","3.2 段落标签",[10,126141,126142,126145,126146],{},[42,126143,126144],{},"\u003Cp>","....",[42,126147,126148],{},"\u003C\u002Fp>",[30,126150,126152],{"id":126151},"_33-换行标签","3.3 换行标签",[10,126154,126155],{},[42,126156,126157],{},"\u003Cbr \u002F>",[10,126159,126160],{},"具有强制换行的作用",[10,126162,126163],{},"单标签",[30,126165,126167],{"id":126166},"_34-文本格式化标签","3.4 文本格式化标签",[10,126169,126170],{},"提供粗体、斜体和下划线等效果",[10,126172,126173,126174,82620,126177,126180],{},"加粗：",[42,126175,126176],{},"\u003Cstrong>...\u003C\u002Fstrong>",[42,126178,126179],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[10,126182,126183,126184,82620,126187,126180],{},"斜体：",[42,126185,126186],{},"\u003Cem>...\u003C\u002Fem>",[42,126188,126189],{},"\u003Ci>...\u003C\u002Fi>",[10,126191,126192,126193,82620,126196,126180],{},"删除线：",[42,126194,126195],{},"\u003Cdel>...\u003C\u002Fdel>",[42,126197,126198],{},"\u003Cs>...\u003C\u002Fs>",[10,126200,126201,126202,82620,126205,126180],{},"下划线：",[42,126203,126204],{},"\u003Cins>...\u003C\u002Fins>",[42,126206,126207],{},"\u003Cu>...\u003C\u002Fu>",[30,126209,126211,126212,18493,126215,102744],{"id":126210},"_35-div和span标签","3.5 ",[42,126213,126214],{},"\u003Cdiv>",[42,126216,126217],{},"\u003Cspan>",[10,126219,126220,101069,126222,126224],{},[42,126221,126214],{},[42,126223,126217],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[10,126226,126227],{},[42,126228,126229],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[10,126231,126232],{},[42,126233,126234],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[10,126236,126237,126238,126240,126241,126243,126244,126247],{},"两者特点：①",[42,126239,126214],{}," 标签用来布局，但一行通常只放一个 ",[42,126242,126214],{},"。可以理解为一个大盒子，独占一行，在 ",[42,126245,126246],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[10,126249,77330,126250,126252,126253,126255],{},[42,126251,126217],{}," 标签也可用于布局，一行可以放多个 ",[42,126254,126217],{},"，可理解为小盒子。",{"title":40,"searchDepth":125,"depth":125,"links":126257},[126258,126259,126260,126261,126262],{"id":126112,"depth":125,"text":126113},{"id":126138,"depth":125,"text":126139},{"id":126151,"depth":125,"text":126152},{"id":126166,"depth":125,"text":126167},{"id":126210,"depth":125,"text":126263},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126104,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126270,"title":126271,"body":126272,"description":130,"extension":131,"meta":126469,"navigation":133,"path":126470,"seo":126471,"stem":126472,"__hash__":126473},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126273,"toc":126461},[126274,126277,126281,126284,126290,126297,126303,126309,126312,126315,126318,126321,126324,126327,126330,126334,126337,126340,126343,126349,126355,126361,126368,126372,126378,126384,126387,126390,126396,126402,126408,126411,126414,126418,126421,126431,126437,126441,126450,126454,126457],[20,126275,126271],{"id":126276},"_4-html图像与链接",[30,126278,126280],{"id":126279},"_41-图像标签","4.1 图像标签",[10,126282,126283],{},"（1）标签",[10,126285,126286,126289],{},[42,126287,126288],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[10,126291,126292,126293,126296],{},"src是",[42,126294,126295],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[10,126298,126299,126300],{},"alt:文本，替换文本。图像不能显示的文字 ",[42,126301,126302],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[10,126304,126305,126306],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[42,126307,126308],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[10,126310,126311],{},"width:像素，设置图像的宽度",[10,126313,126314],{},"height:像素，设置图像的高度",[10,126316,126317],{},"border：像素，设置图像的边框粗细",[10,126319,126320],{},"（2）图像标签属性的注意点：",[10,126322,126323],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[10,126325,126326],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[10,126328,126329],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[30,126331,126333],{"id":126332},"_42-路径注意要点","4.2 路径注意要点：",[10,126335,126336],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[10,126338,126339],{},"（2）根目录：就是打开文件夹的第一层根目录",[10,126341,126342],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[10,126344,126345,126346],{},"①同一级路径：图像文件位于HTML文件同一级，如",[42,126347,126348],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[10,126350,126351,126352],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[42,126353,126354],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[10,126356,126357,126358],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[42,126359,126360],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[10,126362,126363,126364,459],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[13,126365,126366],{"href":126366,"rel":126367},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[17],[30,126369,126371],{"id":126370},"_43-超链接标签","4.3 超链接标签",[10,126373,126374,126377],{},[42,126375,126376],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[10,126379,126380,126381],{},"①语法格式：",[42,126382,126383],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[10,126385,126386],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[10,126388,126389],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[10,126391,126392,126393],{},"③链接分类：外部链接：",[42,126394,126395],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[10,126397,126398,126399],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[42,126400,126401],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[10,126403,126404,126405],{},"空链接：如果当时没有确定链接目标时，",[42,126406,126407],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[10,126409,126410],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[10,126412,126413],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[30,126415,126417],{"id":126416},"_44-锚点链接","4.4 锚点链接",[10,126419,126420],{},"点我们点击链接，可以快速定位到页面中的某个位置",[10,126422,126423,126424,126427,126428],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[42,126425,126426],{},"\u003Ca href=\"#two\">","第二级",[42,126429,126430],{},"\u003C\u002Fa>",[10,126432,126433,126434],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[42,126435,126436],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[30,126438,126440],{"id":126439},"_45-注释标签","4.5 注释标签",[10,126442,126443,126446,126447],{},[42,126444,126445],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[42,126448,126449],{},"ctrl+\u002F",[30,126451,126453],{"id":126452},"_46-特殊字符","4.6 特殊字符",[10,126455,126456],{},"可以实现添加多个空格",[1545,126458],{"style":126459,"src":126460},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":40,"searchDepth":125,"depth":125,"links":126462},[126463,126464,126465,126466,126467,126468],{"id":126279,"depth":125,"text":126280},{"id":126332,"depth":125,"text":126333},{"id":126370,"depth":125,"text":126371},{"id":126416,"depth":125,"text":126417},{"id":126439,"depth":125,"text":126440},{"id":126452,"depth":125,"text":126453},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126271,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126475,"title":126476,"body":126477,"description":130,"extension":131,"meta":126770,"navigation":133,"path":126771,"seo":126772,"stem":126773,"__hash__":126774},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126478,"toc":126761},[126479,126482,126486,126489,126492,126495,126498,126501,126504,126507,126510,126513,126533,126539,126543,126546,126549,126552,126555,126558,126561,126565,126568,126571,126574,126577,126590,126595,126598,126601,126616,126619,126622,126625,126628,126631,126635,126638,126645,126648,126651,126654,126657,126660,126666,126669,126672,126678,126681,126684,126687,126693,126696,126699,126713,126720,126723,126726,126733,126742,126745,126748,126751,126755,126758],[20,126480,126476],{"id":126481},"_5-html表格列表与表单",[30,126483,126485],{"id":126484},"_51-表格标签","5.1 表格标签",[10,126487,126488],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[10,126490,126491],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[10,126493,126494],{},"②表格基本语法：",[1545,126496],{"style":126459,"src":126497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[10,126499,126500],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1545,126502],{"style":126459,"src":126503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[10,126505,126506],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1545,126508],{"style":126459,"src":126509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[10,126511,126512],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[10,126514,126515,126518,126519,126521,126522,126525,126526,126528,126529,126532],{},[42,126516,126517],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[42,126520,126517],{},"内部必须拥有",[42,126523,126524],{},"\u003Ctr>","标签，一般位于第一行，",[42,126527,126517],{},"比",[42,126530,126531],{},"\u003Cth>","范围广",[10,126534,126535,126538],{},[42,126536,126537],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[30,126540,126542],{"id":126541},"_52-合并单元格","5.2 合并单元格",[10,126544,126545],{},"（1）合并单元格方式：",[10,126547,126548],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[10,126550,126551],{},"②跨列合并：colspan=\"合并单元格的个数\"",[10,126553,126554],{},"（2）目标单元格：",[10,126556,126557],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[10,126559,126560],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[30,126562,126564],{"id":126563},"_53-列表标签","5.3 列表标签",[10,126566,126567],{},"（1）分类：无序列表、有序列表、自定义列表",[10,126569,126570],{},"①无序列表：",[1545,126572],{"style":126459,"src":126573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[10,126575,126576],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[10,126578,126579,126582,126583,126586,126587,126589],{},[42,126580,126581],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[42,126584,126585],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[42,126588,126581],{},"中输入其他标签或文字是不对的",[10,126591,126592,126594],{},[42,126593,126585],{},"之间相当于一个容器，可以容纳所有元素",[10,126596,126597],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[10,126599,126600],{},"在css中去除前边的小圆点采用如下代码:",[35,126602,126606],{"className":126603,"code":126604,"language":126605,"meta":40,"style":40},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[42,126607,126608],{"__ignoreMap":40},[45,126609,126610,126613],{"class":47,"line":48},[45,126611,126612],{"class":51381},"list-style",[45,126614,126615],{"class":51},": none;\n",[10,126617,126618],{},"②有序列表：",[1545,126620],{"style":126459,"src":126621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[10,126623,126624],{},"③自定义列表：",[1545,126626],{"style":126459,"src":126627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1545,126629],{"style":126459,"src":126630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[30,126632,126634],{"id":126633},"_54-表单标签","5.4 表单标签",[10,126636,126637],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[10,126639,126640,126641,126644],{},"（1）表单域：包含单元素的区域，",[42,126642,126643],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1545,126646],{"style":126459,"src":126647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[10,126649,126650],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[10,126652,126653],{},"表单元素提交必须有name属性",[10,126655,126656],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[10,126658,126659],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[10,126661,77307,126662,126665],{},[42,126663,126664],{},"\u003Cinput>","输入表单元素",[1545,126667],{"style":126459,"src":126668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1545,126670],{"style":126459,"src":126671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[10,126673,126674,126675],{},"单选按钮：",[42,126676,126677],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1545,126679],{"style":126459,"src":126680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[10,126682,126683],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1545,126685],{"style":126459,"src":126686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[10,126688,126689,126692],{},[358,126690,126691],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[10,126694,126695],{},"②select下拉表单元素：可以节约页面控件",[1545,126697],{"style":126459,"src":126698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[10,126700,126701,13878,126703,126706,126707,126709,126710,126712],{},[358,126702,238],{},[42,126704,126705],{},"\u003Cselect>","中至少包含一对",[42,126708,102765],{},"；在",[42,126711,102765],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[10,126714,126715,126716,126719],{},"③",[42,126717,126718],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1545,126721],{"style":126459,"src":126722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[10,126724,126725],{},"3行20列",[30,126727,126729,126730,102744],{"id":126728},"_55-lable标签","5.5 ",[42,126731,126732],{},"\u003Clable>",[10,126734,126735,126736,126738,126739,126741],{},"它不是表单标签，但常常与表单标签搭配使用，",[42,126737,126732],{},"标签用于绑定一个表单标签，当点击",[42,126740,126732],{},"标签内的文本",[10,126743,126744],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1545,126746],{"style":126459,"src":126747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1545,126749],{"style":126459,"src":126750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[30,126752,126754],{"id":126753},"_56-实例","5.6 实例",[1545,126756],{"style":126459,"src":126757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[121,126759,126760],{},"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":40,"searchDepth":125,"depth":125,"links":126762},[126763,126764,126765,126766,126767,126769],{"id":126484,"depth":125,"text":126485},{"id":126541,"depth":125,"text":126542},{"id":126563,"depth":125,"text":126564},{"id":126633,"depth":125,"text":126634},{"id":126728,"depth":125,"text":126768},"5.5 \u003Clable>标签",{"id":126753,"depth":125,"text":126754},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126476,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126776,"title":126777,"body":126778,"description":130,"extension":131,"meta":127327,"navigation":133,"path":127328,"seo":127329,"stem":127330,"__hash__":127331},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126779,"toc":127302},[126780,126783,126787,126790,126793,126797,126800,126803,126806,126809,126812,126815,126818,126822,126825,126829,126832,126835,126838,126842,126845,126848,126851,126857,126860,126863,126866,126869,126872,126875,126878,126911,126915,126918,126921,126924,126928,126931,126934,126937,126940,126943,126947,126950,126953,126956,126960,126963,126967,126970,126974,126977,126982,126986,126989,126993,126996,126999,127002,127005,127032,127035,127039,127042,127045,127050,127053,127056,127060,127063,127068,127071,127074,127077,127081,127084,127087,127090,127094,127097,127100,127103,127107,127111,127114,127154,127157,127161,127168,127171,127175,127178,127224,127228,127231,127234,127237,127265,127269,127272,127299],[20,126781,126777],{"id":126782},"_6-css语法与文本样式",[30,126784,126786],{"id":126785},"_61-css语法规范","6.1 css语法规范",[10,126788,126789],{},"由两部分组成，选择器及一条或多条声明",[1545,126791],{"style":126459,"src":126792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[10,126794,126795],{},[358,126796,238],{},[10,126798,126799],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[10,126801,126802],{},"②属性与属性值以“键值对”的形式出现",[10,126804,126805],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[10,126807,126808],{},"④属性和属性值之间用英文“;”分开",[1545,126810],{"style":126459,"src":126811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1545,126813],{"style":126459,"src":126814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1545,126816],{"style":126459,"src":126817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[30,126819,126821],{"id":126820},"_62-css选择器","6.2 css选择器",[10,126823,126824],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[176,126826,126828],{"id":126827},"_621-标签选择器","6.2.1 标签选择器",[10,126830,126831],{},"①优点：能快速为页面中同类型的标签统一设置样式",[10,126833,126834],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1545,126836],{"style":126459,"src":126837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[176,126839,126841],{"id":126840},"_622-类选择器","6.2.2 类选择器",[10,126843,126844],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[10,126846,126847],{},"②样例",[1545,126849],{"style":126459,"src":126850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[10,126852,126853,126854,126856],{},"③ ",[358,126855,126691],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[10,126858,126859],{},"可以理解为给这个标签起了个名字，来表示；",[10,126861,126862],{},"长名称或词组可以使用横线来为选择器命名；",[10,126864,126865],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[10,126867,126868],{},"命名要有意义；",[1545,126870],{"style":126459,"src":126871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[10,126873,126874],{},"类选择器也可以指定特殊的元素p.center{}",[10,126876,126877],{},"p.center和.center都对",[35,126879,126881],{"className":126603,"code":126880,"language":126605,"meta":40,"style":40},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[42,126882,126883,126888,126897,126907],{"__ignoreMap":40},[45,126884,126885],{"class":47,"line":48},[45,126886,126887],{"class":267},"\u002F* 类选择器指定特殊元素 *\u002F\n",[45,126889,126890,126892,126895],{"class":47,"line":125},[45,126891,10],{"class":51381},[45,126893,126894],{"class":2046},".center",[45,126896,15655],{"class":51},[45,126898,126899,126901,126903,126905],{"class":47,"line":1262},[45,126900,70607],{"class":257},[45,126902,51518],{"class":51},[45,126904,51673],{"class":257},[45,126906,1373],{"class":51},[45,126908,126909],{"class":47,"line":1277},[45,126910,1648],{"class":51},[176,126912,126914],{"id":126913},"_623-多类名使用","6.2.3 多类名使用",[10,126916,126917],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1545,126919],{"style":126459,"src":126920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[10,126922,126923],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[176,126925,126927],{"id":126926},"_624-id选择器","6.2.4 id选择器",[10,126929,126930],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[10,126932,126933],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1545,126935],{"style":126459,"src":126936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[10,126938,126939],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[10,126941,126942],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[176,126944,126946],{"id":126945},"_625-通配符选择器","6.2.5 通配符选择器",[10,126948,126949],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[10,126951,126952],{},"* {",[10,126954,126955],{},"color=\"red\"}",[176,126957,126959],{"id":126958},"_626-总结","6.2.6 总结",[1545,126961],{"style":126459,"src":126962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[30,126964,126966],{"id":126965},"_63-css字体属性","6.3 css字体属性",[10,126968,126969],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[176,126971,126973],{"id":126972},"_631-字体系列","6.3.1 字体系列",[10,126975,126976],{},"font-family: '宋体';",[10,126978,126979,126981],{},[358,126980,238],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[176,126983,126985],{"id":126984},"_632-字体大小","6.3.2 字体大小",[10,126987,126988],{},"font-size: 20px",[10,126990,126991,26556],{},[358,126992,126691],{},[10,126994,126995],{},"①px（像素）大小是网页的最常用单位",[10,126997,126998],{},"②谷歌浏览器默认为16px",[10,127000,127001],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[10,127003,127004],{},"④可以给body指定整个页面的大小：会自动引用",[35,127006,127008],{"className":126603,"code":127007,"language":126605,"meta":40,"style":40},"body {\n  font-size: 16px;\n}\n",[42,127009,127010,127016,127028],{"__ignoreMap":40},[45,127011,127012,127014],{"class":47,"line":48},[45,127013,51881],{"class":51381},[45,127015,15655],{"class":51},[45,127017,127018,127020,127022,127024,127026],{"class":47,"line":125},[45,127019,70707],{"class":257},[45,127021,51518],{"class":51},[45,127023,808],{"class":257},[45,127025,51573],{"class":93},[45,127027,1373],{"class":51},[45,127029,127030],{"class":47,"line":1262},[45,127031,1648],{"class":51},[10,127033,127034],{},"⑤标题标签比较特殊，需要单独指定大小",[176,127036,127038],{"id":127037},"_633-字体粗细","6.3.3 字体粗细",[10,127040,127041],{},"font-weight: bold;",[10,127043,127044],{},"font-weight: 100；",[10,127046,127047,127049],{},[358,127048,238],{}," ①粗体文字变细：尽量别用normal，多用数字",[10,127051,127052],{},"font-weight= 400;",[10,127054,127055],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[176,127057,127059],{"id":127058},"_634-文字样式","6.3.4 文字样式",[10,127061,127062],{},"font-style: normal；",[10,127064,127065,26556],{},[358,127066,127067],{},"属性值",[10,127069,127070],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[10,127072,127073],{},"②italic：浏览器会显示斜体的字体样式",[1545,127075],{"style":126459,"src":127076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[176,127078,127080],{"id":127079},"_635-字体符合属性","6.3.5 字体符合属性",[1545,127082],{"style":126459,"src":127083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1545,127085],{"style":126459,"src":127086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[10,127088,127089],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[10,127091,127092,26556],{},[358,127093,126691],{},[10,127095,127096],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[10,127098,127099],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[10,127101,127102],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[30,127104,127106],{"id":127105},"_64-css-test文本属性","6.4 css test文本属性",[176,127108,127110],{"id":127109},"_641-文本颜色","6.4.1 文本颜色",[10,127112,127113],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[35,127115,127117],{"className":126603,"code":127116,"language":126605,"meta":40,"style":40},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[42,127118,127119,127124,127130,127140,127145,127150],{"__ignoreMap":40},[45,127120,127121],{"class":47,"line":48},[45,127122,127123],{"class":267},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[45,127125,127126,127128],{"class":47,"line":125},[45,127127,10],{"class":51381},[45,127129,15655],{"class":51},[45,127131,127132,127134,127136,127138],{"class":47,"line":1262},[45,127133,70986],{"class":257},[45,127135,51518],{"class":51},[45,127137,57502],{"class":257},[45,127139,1373],{"class":51},[45,127141,127142],{"class":47,"line":1277},[45,127143,127144],{"class":267},"  \u002F* color: #ff0000; *\u002F\n",[45,127146,127147],{"class":47,"line":1283},[45,127148,127149],{"class":267},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[45,127151,127152],{"class":47,"line":1297},[45,127153,1648],{"class":51},[1545,127155],{"style":126459,"src":127156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[176,127158,127160],{"id":127159},"_642-对齐文本","6.4.2 对齐文本",[10,127162,127163,127164,127167],{},"text-align属于用于设置元素内文本内容的 ",[358,127165,127166],{},"水平对齐"," 方式",[10,127169,127170],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[176,127172,127174],{"id":127173},"_643-装饰文本","6.4.3 装饰文本",[10,127176,127177],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[35,127179,127181],{"className":126603,"code":127180,"language":126605,"meta":40,"style":40},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[42,127182,127183,127189,127199,127203,127209,127220],{"__ignoreMap":40},[45,127184,127185,127187],{"class":47,"line":48},[45,127186,13],{"class":51381},[45,127188,15655],{"class":51},[45,127190,127191,127193,127195,127197],{"class":47,"line":125},[45,127192,70583],{"class":257},[45,127194,51518],{"class":51},[45,127196,54818],{"class":257},[45,127198,1373],{"class":51},[45,127200,127201],{"class":47,"line":1262},[45,127202,1648],{"class":51},[45,127204,127205,127207],{"class":47,"line":1277},[45,127206,10],{"class":51381},[45,127208,15655],{"class":51},[45,127210,127211,127213,127215,127218],{"class":47,"line":1283},[45,127212,70583],{"class":257},[45,127214,51518],{"class":51},[45,127216,127217],{"class":257},"underline",[45,127219,1373],{"class":51},[45,127221,127222],{"class":47,"line":1297},[45,127223,1648],{"class":51},[176,127225,127227],{"id":127226},"_644-文本缩进","6.4.4 文本缩进",[10,127229,127230],{},"实现文本的第一行首行缩进自己指定的距离",[10,127232,127233],{},"20px往右边走；-20px往左边走",[10,127235,127236],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[35,127238,127240],{"className":126603,"code":127239,"language":126605,"meta":40,"style":40},"p {\n  text-indent: 2em;\n}\n",[42,127241,127242,127248,127261],{"__ignoreMap":40},[45,127243,127244,127246],{"class":47,"line":48},[45,127245,10],{"class":51381},[45,127247,15655],{"class":51},[45,127249,127250,127253,127255,127257,127259],{"class":47,"line":125},[45,127251,127252],{"class":257},"  text-indent",[45,127254,51518],{"class":51},[45,127256,286],{"class":257},[45,127258,23636],{"class":93},[45,127260,1373],{"class":51},[45,127262,127263],{"class":47,"line":1262},[45,127264,1648],{"class":51},[176,127266,127268],{"id":127267},"_645-行间距","6.4.5 行间距",[10,127270,127271],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[35,127273,127275],{"className":126603,"code":127274,"language":126605,"meta":40,"style":40},"p {\n  line-height: 1.6;\n}\n",[42,127276,127277,127283,127295],{"__ignoreMap":40},[45,127278,127279,127281],{"class":47,"line":48},[45,127280,10],{"class":51381},[45,127282,15655],{"class":51},[45,127284,127285,127288,127290,127293],{"class":47,"line":125},[45,127286,127287],{"class":257},"  line-height",[45,127289,51518],{"class":51},[45,127291,127292],{"class":257},"1.6",[45,127294,1373],{"class":51},[45,127296,127297],{"class":47,"line":1262},[45,127298,1648],{"class":51},[121,127300,127301],{},"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":40,"searchDepth":125,"depth":125,"links":127303},[127304,127305,127313,127320],{"id":126785,"depth":125,"text":126786},{"id":126820,"depth":125,"text":126821,"children":127306},[127307,127308,127309,127310,127311,127312],{"id":126827,"depth":1262,"text":126828},{"id":126840,"depth":1262,"text":126841},{"id":126913,"depth":1262,"text":126914},{"id":126926,"depth":1262,"text":126927},{"id":126945,"depth":1262,"text":126946},{"id":126958,"depth":1262,"text":126959},{"id":126965,"depth":125,"text":126966,"children":127314},[127315,127316,127317,127318,127319],{"id":126972,"depth":1262,"text":126973},{"id":126984,"depth":1262,"text":126985},{"id":127037,"depth":1262,"text":127038},{"id":127058,"depth":1262,"text":127059},{"id":127079,"depth":1262,"text":127080},{"id":127105,"depth":125,"text":127106,"children":127321},[127322,127323,127324,127325,127326],{"id":127109,"depth":1262,"text":127110},{"id":127159,"depth":1262,"text":127160},{"id":127173,"depth":1262,"text":127174},{"id":127226,"depth":1262,"text":127227},{"id":127267,"depth":1262,"text":127268},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126777,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127333,"title":127334,"body":127335,"description":130,"extension":131,"meta":127984,"navigation":133,"path":127985,"seo":127986,"stem":127987,"__hash__":127988},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127336,"toc":127965},[127337,127340,127344,127348,127408,127412,127422,127425,127428,127432,127457,127461,127464,127467,127470,127473,127476,127480,127483,127486,127528,127531,127557,127563,127566,127570,127574,127580,127583,127586,127589,127592,127595,127598,127643,127647,127650,127653,127657,127661,127690,127693,127698,127701,127704,127707,127710,127714,127718,127721,127723,127726,127730,127733,127737,127740,127743,127746,127750,127754,127760,127770,127773,127776,127779,127782,127785,127908,127916,127924,127962],[20,127338,127334],{"id":127339},"_7-css引入方式与选择器进阶",[30,127341,127343],{"id":127342},"_71-css引入方式","7.1 css引入方式",[176,127345,127347],{"id":127346},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[35,127349,127353],{"className":127350,"code":127351,"language":127352,"meta":40,"style":40},"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",[42,127354,127355,127363,127370,127382,127395,127400],{"__ignoreMap":40},[45,127356,127357,127359,127361],{"class":47,"line":48},[45,127358,1117],{"class":51},[45,127360,121],{"class":51381},[45,127362,51388],{"class":51},[45,127364,127365,127368],{"class":47,"line":125},[45,127366,127367],{"class":51381},"  h1",[45,127369,15655],{"class":51},[45,127371,127372,127375,127377,127380],{"class":47,"line":1262},[45,127373,127374],{"class":257},"    color",[45,127376,51518],{"class":51},[45,127378,127379],{"class":257},"blue",[45,127381,1373],{"class":51},[45,127383,127384,127387,127389,127391,127393],{"class":47,"line":1277},[45,127385,127386],{"class":257},"    font-size",[45,127388,51518],{"class":51},[45,127390,1007],{"class":257},[45,127392,51573],{"class":93},[45,127394,1373],{"class":51},[45,127396,127397],{"class":47,"line":1283},[45,127398,127399],{"class":51},"  }\n",[45,127401,127402,127404,127406],{"class":47,"line":1297},[45,127403,51866],{"class":51},[45,127405,121],{"class":51381},[45,127407,51388],{"class":51},[10,127409,127410,26556],{},[358,127411,126691],{},[10,127413,77307,127414,127417,127418,127421],{},[42,127415,127416],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[42,127419,127420],{},"\u003Chead>","标签中",[10,127423,127424],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[10,127426,127427],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[176,127429,127431],{"id":127430},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[35,127433,127435],{"className":127350,"code":127434,"language":127352,"meta":40,"style":40},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[42,127436,127437],{"__ignoreMap":40},[45,127438,127439,127441,127443,127445,127447,127450,127453,127455],{"class":47,"line":48},[45,127440,1117],{"class":51},[45,127442,10],{"class":51381},[45,127444,62707],{"class":2046},[45,127446,254],{"class":51},[45,127448,127449],{"class":313},"\"color: red; font-size: 16px;\"",[45,127451,127452],{"class":51},">这是一个段落\u003C\u002F",[45,127454,10],{"class":51381},[45,127456,51388],{"class":51},[10,127458,127459,26556],{},[358,127460,126691],{},[10,127462,127463],{},"①style其实就是标签的属性",[10,127465,127466],{},"②在双引号中间，写法要符合css规范",[10,127468,127469],{},"③可以控制当前的标签设置样式",[10,127471,127472],{},"④书写繁琐，简单时才用",[10,127474,127475],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[176,127477,127479],{"id":127478},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[10,127481,127482],{},"使用最多，单独建一个css文件，然后html引用",[10,127484,127485],{},"①css文件部分： style.css",[35,127487,127489],{"className":126603,"code":127488,"language":126605,"meta":40,"style":40},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[42,127490,127491,127496,127502,127512,127524],{"__ignoreMap":40},[45,127492,127493],{"class":47,"line":48},[45,127494,127495],{"class":267},"\u002F* style.css *\u002F\n",[45,127497,127498,127500],{"class":47,"line":125},[45,127499,20],{"class":51381},[45,127501,15655],{"class":51},[45,127503,127504,127506,127508,127510],{"class":47,"line":1262},[45,127505,70986],{"class":257},[45,127507,51518],{"class":51},[45,127509,127379],{"class":257},[45,127511,1373],{"class":51},[45,127513,127514,127516,127518,127520,127522],{"class":47,"line":1277},[45,127515,70707],{"class":257},[45,127517,51518],{"class":51},[45,127519,1007],{"class":257},[45,127521,51573],{"class":93},[45,127523,1373],{"class":51},[45,127525,127526],{"class":47,"line":1283},[45,127527,1648],{"class":51},[10,127529,127530],{},"②html部分",[35,127532,127534],{"className":127350,"code":127533,"language":127352,"meta":40,"style":40},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[42,127535,127536],{"__ignoreMap":40},[45,127537,127538,127540,127542,127544,127546,127548,127550,127552,127555],{"class":47,"line":48},[45,127539,1117],{"class":51},[45,127541,69086],{"class":51381},[45,127543,69089],{"class":2046},[45,127545,254],{"class":51},[45,127547,69094],{"class":313},[45,127549,61138],{"class":2046},[45,127551,254],{"class":51},[45,127553,127554],{"class":313},"\"style.css\"",[45,127556,51388],{"class":51},[10,127558,127559,127562],{},[42,127560,127561],{},"\u003Chr>","水平线标签（但是不常用！）",[10,127564,127565],{},"ctrl+0回到页面原来大小",[30,127567,127569],{"id":127568},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[176,127571,127573],{"id":127572},"_721-快速生成html","7.2.1 快速生成html",[10,127575,127576,127577],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[42,127578,127579],{},"\u003Cdiv>``\u003C\u002Fdiv>",[10,127581,127582],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[10,127584,127585],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[10,127587,127588],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[10,127590,127591],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[10,127593,127594],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[10,127596,127597],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[35,127599,127601],{"className":127350,"code":127600,"language":127352,"meta":40,"style":40},"\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",[42,127602,127603,127608,127613,127618,127623,127628,127633,127638],{"__ignoreMap":40},[45,127604,127605],{"class":47,"line":48},[45,127606,127607],{"class":267},"\u003C!-- Emmet 语法示例 -->\n",[45,127609,127610],{"class":47,"line":125},[45,127611,127612],{"class":267},"\u003C!-- div*3        → 生成3个div -->\n",[45,127614,127615],{"class":47,"line":1262},[45,127616,127617],{"class":267},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[45,127619,127620],{"class":47,"line":1277},[45,127621,127622],{"class":267},"\u003C!-- div+p        → 兄弟div和p -->\n",[45,127624,127625],{"class":47,"line":1283},[45,127626,127627],{"class":267},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[45,127629,127630],{"class":47,"line":1297},[45,127631,127632],{"class":267},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[45,127634,127635],{"class":47,"line":1303},[45,127636,127637],{"class":267},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[45,127639,127640],{"class":47,"line":1394},[45,127641,127642],{"class":267},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[176,127644,127646],{"id":127645},"_722-快速生成css","7.2.2 快速生成css",[10,127648,127649],{},"简写开头",[10,127651,127652],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[30,127654,127656],{"id":127655},"_73-css复合选择器","7.3 css复合选择器",[176,127658,127660],{"id":127659},"_731-后代选择器","7.3.1 后代选择器",[35,127662,127664],{"className":126603,"code":127663,"language":126605,"meta":40,"style":40},".parent .child {\n  color: blue;\n}\n",[42,127665,127666,127676,127686],{"__ignoreMap":40},[45,127667,127668,127671,127674],{"class":47,"line":48},[45,127669,127670],{"class":2046},".parent",[45,127672,127673],{"class":2046}," .child",[45,127675,15655],{"class":51},[45,127677,127678,127680,127682,127684],{"class":47,"line":125},[45,127679,70986],{"class":257},[45,127681,51518],{"class":51},[45,127683,127379],{"class":257},[45,127685,1373],{"class":51},[45,127687,127688],{"class":47,"line":1262},[45,127689,1648],{"class":51},[10,127691,127692],{},"元素1 元素2 {样式声明}",[10,127694,127695],{},[358,127696,127697],{},"注意点:",[10,127699,127700],{},"①元素1和元素2中间用空格隔开",[10,127702,127703],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[10,127705,127706],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[10,127708,127709],{},"④元素1和元素2可以是任意基础选择器",[176,127711,127713],{"id":127712},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[10,127715,127716],{},[358,127717,127697],{},[10,127719,127720],{},"①元素1和元素2中间用大于号隔开",[10,127722,127703],{},[10,127724,127725],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[176,127727,127729],{"id":127728},"_733-并集选择器","7.3.3 并集选择器",[10,127731,127732],{},"元素1，元素2 {样式声明}",[10,127734,127735],{},[358,127736,127697],{},[10,127738,127739],{},"①元素1和元素2中间用逗号隔开",[10,127741,127742],{},"②逗号可以理解为和的意思",[10,127744,127745],{},"③并集选择器通常用于集体声明",[176,127747,127749],{"id":127748},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[10,127751,127752],{},[358,127753,127697],{},[10,127755,127756,127757,127759],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69086,127758],{},"－:visited－:hover－:active。",[10,127761,127762,127763,127766,127767,25823],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127764,127765],"hover",{}," 、 ",[127768,127769],"first-child",{},[10,127771,127772],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[10,127774,127775],{},"link对没访问的进行设置",[10,127777,127778],{},"vistied对已访问的进行改变",[10,127780,127781],{},"hover鼠标经过就会变",[10,127783,127784],{},"active常按(点)就会变",[35,127786,127788],{"className":126603,"code":127787,"language":126605,"meta":40,"style":40},"\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",[42,127789,127790,127795,127804,127814,127824,127828,127837,127848,127852,127860,127870,127880,127884,127893,127904],{"__ignoreMap":40},[45,127791,127792],{"class":47,"line":48},[45,127793,127794],{"class":267},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[45,127796,127797,127799,127802],{"class":47,"line":125},[45,127798,13],{"class":51381},[45,127800,127801],{"class":2046},":link",[45,127803,15655],{"class":51},[45,127805,127806,127808,127810,127812],{"class":47,"line":1262},[45,127807,70986],{"class":257},[45,127809,51518],{"class":51},[45,127811,62450],{"class":257},[45,127813,1373],{"class":51},[45,127815,127816,127818,127820,127822],{"class":47,"line":1277},[45,127817,70583],{"class":257},[45,127819,51518],{"class":51},[45,127821,54818],{"class":257},[45,127823,1373],{"class":51},[45,127825,127826],{"class":47,"line":1283},[45,127827,1648],{"class":51},[45,127829,127830,127832,127835],{"class":47,"line":1297},[45,127831,13],{"class":51381},[45,127833,127834],{"class":2046},":visited",[45,127836,15655],{"class":51},[45,127838,127839,127841,127843,127846],{"class":47,"line":1303},[45,127840,70986],{"class":257},[45,127842,51518],{"class":51},[45,127844,127845],{"class":257},"purple",[45,127847,1373],{"class":51},[45,127849,127850],{"class":47,"line":1394},[45,127851,1648],{"class":51},[45,127853,127854,127856,127858],{"class":47,"line":1400},[45,127855,13],{"class":51381},[45,127857,61021],{"class":2046},[45,127859,15655],{"class":51},[45,127861,127862,127864,127866,127868],{"class":47,"line":1412},[45,127863,70986],{"class":257},[45,127865,51518],{"class":51},[45,127867,54970],{"class":257},[45,127869,1373],{"class":51},[45,127871,127872,127874,127876,127878],{"class":47,"line":1695},[45,127873,70583],{"class":257},[45,127875,51518],{"class":51},[45,127877,127217],{"class":257},[45,127879,1373],{"class":51},[45,127881,127882],{"class":47,"line":1700},[45,127883,1648],{"class":51},[45,127885,127886,127888,127891],{"class":47,"line":1706},[45,127887,13],{"class":51381},[45,127889,127890],{"class":2046},":active",[45,127892,15655],{"class":51},[45,127894,127895,127897,127899,127902],{"class":47,"line":1711},[45,127896,70986],{"class":257},[45,127898,51518],{"class":51},[45,127900,127901],{"class":257},"green",[45,127903,1373],{"class":51},[45,127905,127906],{"class":47,"line":1725},[45,127907,1648],{"class":51},[176,127909,127911,127912,127915],{"id":127910},"_735-伪类选择器","7.3.5 ",[127913,127914],"focus",{},"伪类选择器",[10,127917,127918,127920,127921,127923],{},[127913,127919],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[42,127922,126664],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[35,127925,127927],{"className":126603,"code":127926,"language":126605,"meta":40,"style":40},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[42,127928,127929,127937,127948,127958],{"__ignoreMap":40},[45,127930,127931,127933,127935],{"class":47,"line":48},[45,127932,53902],{"class":51381},[45,127934,61981],{"class":2046},[45,127936,15655],{"class":51},[45,127938,127939,127942,127944,127946],{"class":47,"line":125},[45,127940,127941],{"class":257},"  border-color",[45,127943,51518],{"class":51},[45,127945,54970],{"class":257},[45,127947,1373],{"class":51},[45,127949,127950,127952,127954,127956],{"class":47,"line":1262},[45,127951,70879],{"class":257},[45,127953,51518],{"class":51},[45,127955,54818],{"class":257},[45,127957,1373],{"class":51},[45,127959,127960],{"class":47,"line":1277},[45,127961,1648],{"class":51},[121,127963,127964],{},"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":40,"searchDepth":125,"depth":125,"links":127966},[127967,127972,127976],{"id":127342,"depth":125,"text":127343,"children":127968},[127969,127970,127971],{"id":127346,"depth":1262,"text":127347},{"id":127430,"depth":1262,"text":127431},{"id":127478,"depth":1262,"text":127479},{"id":127568,"depth":125,"text":127569,"children":127973},[127974,127975],{"id":127572,"depth":1262,"text":127573},{"id":127645,"depth":1262,"text":127646},{"id":127655,"depth":125,"text":127656,"children":127977},[127978,127979,127980,127981,127982],{"id":127659,"depth":1262,"text":127660},{"id":127712,"depth":1262,"text":127713},{"id":127728,"depth":1262,"text":127729},{"id":127748,"depth":1262,"text":127749},{"id":127910,"depth":1262,"text":127983},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127334,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127990,"title":127991,"body":127992,"description":130,"extension":131,"meta":129915,"navigation":133,"path":129916,"seo":129917,"stem":129918,"__hash__":129919},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127993,"toc":129889},[127994,127997,128001,128010,128014,128040,128045,128048,128051,128054,128057,128061,128064,128074,128082,128086,128121,128126,128129,128132,128135,128138,128142,128145,128154,128158,128171,128176,128179,128182,128185,128189,128192,128196,128199,128254,128257,128288,128291,128345,128349,128352,128518,128641,128644,128647,128650,128653,128657,128660,128664,128667,128670,128674,128677,128708,128735,128763,128766,128770,128796,128839,128843,128937,128940,128967,128970,128973,128976,128979,128982,128985,128988,128991,128994,128998,129055,129082,129086,129134,129138,129179,129181,129184,129187,129190,129193,129197,129289,129292,129295,129298,129302,129425,129626,129630,129634,129637,129640,129643,129647,129650,129653,129678,129681,129684,129687,129690,129693,129697,129705,129767,129770,129828,129831,129834,129837,129840,129843,129846,129849,129886],[20,127995,127991],{"id":127996},"_8-css显示模式与背景特性",[30,127998,128000],{"id":127999},"_81-css元素显示模式","8.1 css元素显示模式",[10,128002,128003,128004,128006,128007,128009],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[42,128005,126214],{},"自己占一行，比如一行可以放多个",[42,128008,126217],{},"，HTML 元素一般分为块元素和行内元素两种类型",[176,128011,128013],{"id":128012},"_811-块元素","8.1.1 块元素",[10,128015,128016,128017,128019,128020,421,128023,421,128025,421,128027,421,128030,421,128033,128036,128037,128039],{},"常见的块元素有",[42,128018,126118],{},"~",[42,128021,128022],{},"\u003Ch6>",[42,128024,126144],{},[42,128026,126214],{},[42,128028,128029],{},"\u003Cul>",[42,128031,128032],{},"\u003Col>",[42,128034,128035],{},"\u003Cli>","等，其中 ",[42,128038,126214],{}," 标签是最典型的块元素",[10,128041,128042],{},[358,128043,128044],{},"块级元素的特点：",[10,128046,128047],{},"① 比较霸道，自己独占一行。",[10,128049,128050],{},"② 高度，宽度、外边距以及内边距都可以控制。",[10,128052,128053],{},"③ 宽度默认是容器（父级宽度）的100%。",[10,128055,128056],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[10,128058,128059],{},[358,128060,238],{},[10,128062,128063],{},"①文字类的元素内不能使用块级元素",[10,128065,77330,128066,128068,128069,128071,128072],{},[42,128067,126144],{}," 标签主要用于存放文字，因此 ",[42,128070,126144],{}," 里面不能放块级元素，特别是不能放",[42,128073,126214],{},[10,128075,128076,128077,128019,128079,128081],{},"⑥同理， ",[42,128078,126118],{},[42,128080,128022],{},"等都是文字类块级标签，里面也不能放其他块级元素",[176,128083,128085],{"id":128084},"_812-行内元素","8.1.2 行内元素",[10,128087,128088,128089,421,128091,421,128094,421,128097,421,128100,421,128103,421,128106,421,128109,421,128112,421,128115,128117,128118,128120],{},"常见的行内元素有 ",[42,128090,126376],{},[42,128092,128093],{},"\u003Cstrong>",[42,128095,128096],{},"\u003Cb>",[42,128098,128099],{},"\u003Cem>",[42,128101,128102],{},"\u003Ci>",[42,128104,128105],{},"\u003Cdel>",[42,128107,128108],{},"\u003Cs>",[42,128110,128111],{},"\u003Cins>",[42,128113,128114],{},"\u003Cu>",[42,128116,126217],{}," 等，其中 ",[42,128119,126217],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[10,128122,128123],{},[358,128124,128125],{},"特点：",[10,128127,128128],{},"① 相邻行内元素在一行上，一行可以显示多个。",[10,128130,128131],{},"② 高、宽直接设置是无效的。",[10,128133,128134],{},"③ 默认宽度就是它本身内容的宽度。",[10,128136,128137],{},"④ 行内元素只能容纳文本或其他行内元素。",[10,128139,128140],{},[358,128141,238],{},[10,128143,128144],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[10,128146,128147,128148,128150,128151,128153],{},"②特殊情况链接 ",[42,128149,126376],{}," 里面可以放块级元素，但是给 ",[42,128152,126376],{}," 转换一下块级模式最安全",[176,128155,128157],{"id":128156},"_813-行内块元素","8.1.3 行内块元素",[10,128159,128160,128161,421,128164,421,128167,128170],{},"在行内元素中有几个特殊的标签 —— ",[42,128162,128163],{},"\u003Cimg \u002F>",[42,128165,128166],{},"\u003Cinput \u002F>",[42,128168,128169],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[10,128172,128173],{},[358,128174,128175],{},"行内块元素的特点：",[10,128177,128178],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[10,128180,128181],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[10,128183,128184],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[176,128186,128188],{"id":128187},"_814-总结","8.1.4 总结",[1545,128190],{"style":126459,"src":128191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[176,128193,128195],{"id":128194},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[10,128197,128198],{},"①转换为块元素：display:block;",[35,128200,128202],{"className":126603,"code":128201,"language":126605,"meta":40,"style":40},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[42,128203,128204,128209,128215,128226,128238,128250],{"__ignoreMap":40},[45,128205,128206],{"class":47,"line":48},[45,128207,128208],{"class":267},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[45,128210,128211,128213],{"class":47,"line":125},[45,128212,13],{"class":51381},[45,128214,15655],{"class":51},[45,128216,128217,128220,128222,128224],{"class":47,"line":1262},[45,128218,128219],{"class":257},"  display",[45,128221,51518],{"class":51},[45,128223,60950],{"class":257},[45,128225,1373],{"class":51},[45,128227,128228,128230,128232,128234,128236],{"class":47,"line":1277},[45,128229,70649],{"class":257},[45,128231,51518],{"class":51},[45,128233,519],{"class":257},[45,128235,51573],{"class":93},[45,128237,1373],{"class":51},[45,128239,128240,128242,128244,128246,128248],{"class":47,"line":1283},[45,128241,70869],{"class":257},[45,128243,51518],{"class":51},[45,128245,609],{"class":257},[45,128247,51573],{"class":93},[45,128249,1373],{"class":51},[45,128251,128252],{"class":47,"line":1297},[45,128253,1648],{"class":51},[10,128255,128256],{},"②转换为行内元素：display:inline;",[35,128258,128260],{"className":126603,"code":128259,"language":126605,"meta":40,"style":40},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[42,128261,128262,128267,128273,128284],{"__ignoreMap":40},[45,128263,128264],{"class":47,"line":48},[45,128265,128266],{"class":267},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[45,128268,128269,128271],{"class":47,"line":125},[45,128270,51692],{"class":51381},[45,128272,15655],{"class":51},[45,128274,128275,128277,128279,128282],{"class":47,"line":1262},[45,128276,128219],{"class":257},[45,128278,51518],{"class":51},[45,128280,128281],{"class":257},"inline",[45,128283,1373],{"class":51},[45,128285,128286],{"class":47,"line":1277},[45,128287,1648],{"class":51},[10,128289,128290],{},"③转换为行内块：display:inline-block;",[35,128292,128294],{"className":126603,"code":128293,"language":126605,"meta":40,"style":40},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[42,128295,128296,128301,128307,128317,128329,128341],{"__ignoreMap":40},[45,128297,128298],{"class":47,"line":48},[45,128299,128300],{"class":267},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[45,128302,128303,128305],{"class":47,"line":125},[45,128304,45],{"class":51381},[45,128306,15655],{"class":51},[45,128308,128309,128311,128313,128315],{"class":47,"line":1262},[45,128310,128219],{"class":257},[45,128312,51518],{"class":51},[45,128314,72464],{"class":257},[45,128316,1373],{"class":51},[45,128318,128319,128321,128323,128325,128327],{"class":47,"line":1277},[45,128320,70649],{"class":257},[45,128322,51518],{"class":51},[45,128324,819],{"class":257},[45,128326,51573],{"class":93},[45,128328,1373],{"class":51},[45,128330,128331,128333,128335,128337,128339],{"class":47,"line":1283},[45,128332,70869],{"class":257},[45,128334,51518],{"class":51},[45,128336,1158],{"class":257},[45,128338,51573],{"class":93},[45,128340,1373],{"class":51},[45,128342,128343],{"class":47,"line":1297},[45,128344,1648],{"class":51},[176,128346,128348],{"id":128347},"_816-小米侧边栏","8.1.6 小米侧边栏",[1545,128350],{"style":126459,"src":128351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[35,128353,128355],{"className":127350,"code":128354,"language":127352,"meta":40,"style":40},"\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",[42,128356,128357,128362,128377,128396,128415,128434,128453,128472,128491,128510],{"__ignoreMap":40},[45,128358,128359],{"class":47,"line":48},[45,128360,128361],{"class":267},"\u003C!-- 小米侧边栏案例 -->\n",[45,128363,128364,128366,128368,128370,128372,128375],{"class":47,"line":125},[45,128365,1117],{"class":51},[45,128367,51692],{"class":51381},[45,128369,53567],{"class":2046},[45,128371,254],{"class":51},[45,128373,128374],{"class":313},"\"sidebar\"",[45,128376,51388],{"class":51},[45,128378,128379,128381,128383,128385,128387,128389,128392,128394],{"class":47,"line":1262},[45,128380,52225],{"class":51},[45,128382,13],{"class":51381},[45,128384,61138],{"class":2046},[45,128386,254],{"class":51},[45,128388,61143],{"class":313},[45,128390,128391],{"class":51},">手机 电话卡\u003C\u002F",[45,128393,13],{"class":51381},[45,128395,51388],{"class":51},[45,128397,128398,128400,128402,128404,128406,128408,128411,128413],{"class":47,"line":1277},[45,128399,52225],{"class":51},[45,128401,13],{"class":51381},[45,128403,61138],{"class":2046},[45,128405,254],{"class":51},[45,128407,61143],{"class":313},[45,128409,128410],{"class":51},">电视 盒子\u003C\u002F",[45,128412,13],{"class":51381},[45,128414,51388],{"class":51},[45,128416,128417,128419,128421,128423,128425,128427,128430,128432],{"class":47,"line":1283},[45,128418,52225],{"class":51},[45,128420,13],{"class":51381},[45,128422,61138],{"class":2046},[45,128424,254],{"class":51},[45,128426,61143],{"class":313},[45,128428,128429],{"class":51},">笔记本 平板\u003C\u002F",[45,128431,13],{"class":51381},[45,128433,51388],{"class":51},[45,128435,128436,128438,128440,128442,128444,128446,128449,128451],{"class":47,"line":1297},[45,128437,52225],{"class":51},[45,128439,13],{"class":51381},[45,128441,61138],{"class":2046},[45,128443,254],{"class":51},[45,128445,61143],{"class":313},[45,128447,128448],{"class":51},">出行 穿戴\u003C\u002F",[45,128450,13],{"class":51381},[45,128452,51388],{"class":51},[45,128454,128455,128457,128459,128461,128463,128465,128468,128470],{"class":47,"line":1303},[45,128456,52225],{"class":51},[45,128458,13],{"class":51381},[45,128460,61138],{"class":2046},[45,128462,254],{"class":51},[45,128464,61143],{"class":313},[45,128466,128467],{"class":51},">智能 路由器\u003C\u002F",[45,128469,13],{"class":51381},[45,128471,51388],{"class":51},[45,128473,128474,128476,128478,128480,128482,128484,128487,128489],{"class":47,"line":1394},[45,128475,52225],{"class":51},[45,128477,13],{"class":51381},[45,128479,61138],{"class":2046},[45,128481,254],{"class":51},[45,128483,61143],{"class":313},[45,128485,128486],{"class":51},">健康 儿童\u003C\u002F",[45,128488,13],{"class":51381},[45,128490,51388],{"class":51},[45,128492,128493,128495,128497,128499,128501,128503,128506,128508],{"class":47,"line":1400},[45,128494,52225],{"class":51},[45,128496,13],{"class":51381},[45,128498,61138],{"class":2046},[45,128500,254],{"class":51},[45,128502,61143],{"class":313},[45,128504,128505],{"class":51},">耳机 音响\u003C\u002F",[45,128507,13],{"class":51381},[45,128509,51388],{"class":51},[45,128511,128512,128514,128516],{"class":47,"line":1412},[45,128513,51866],{"class":51},[45,128515,51692],{"class":51381},[45,128517,51388],{"class":51},[35,128519,128521],{"className":126603,"code":128520,"language":126605,"meta":40,"style":40},".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",[42,128522,128523,128532,128542,128555,128567,128579,128591,128601,128612,128616,128626,128637],{"__ignoreMap":40},[45,128524,128525,128528,128530],{"class":47,"line":48},[45,128526,128527],{"class":2046},".sidebar",[45,128529,1481],{"class":51381},[45,128531,15655],{"class":51},[45,128533,128534,128536,128538,128540],{"class":47,"line":125},[45,128535,128219],{"class":257},[45,128537,51518],{"class":51},[45,128539,60950],{"class":257},[45,128541,1373],{"class":51},[45,128543,128544,128546,128548,128551,128553],{"class":47,"line":1262},[45,128545,70649],{"class":257},[45,128547,51518],{"class":51},[45,128549,128550],{"class":257},"234",[45,128552,51573],{"class":93},[45,128554,1373],{"class":51},[45,128556,128557,128559,128561,128563,128565],{"class":47,"line":1277},[45,128558,70869],{"class":257},[45,128560,51518],{"class":51},[45,128562,660],{"class":257},[45,128564,51573],{"class":93},[45,128566,1373],{"class":51},[45,128568,128569,128571,128573,128575,128577],{"class":47,"line":1283},[45,128570,127287],{"class":257},[45,128572,51518],{"class":51},[45,128574,660],{"class":257},[45,128576,51573],{"class":93},[45,128578,1373],{"class":51},[45,128580,128581,128583,128585,128587,128589],{"class":47,"line":1297},[45,128582,70904],{"class":257},[45,128584,51518],{"class":51},[45,128586,1158],{"class":257},[45,128588,51573],{"class":93},[45,128590,1373],{"class":51},[45,128592,128593,128595,128597,128599],{"class":47,"line":1303},[45,128594,70986],{"class":257},[45,128596,51518],{"class":51},[45,128598,60923],{"class":257},[45,128600,1373],{"class":51},[45,128602,128603,128605,128607,128610],{"class":47,"line":1394},[45,128604,70959],{"class":257},[45,128606,51518],{"class":51},[45,128608,128609],{"class":257},"#55585a",[45,128611,1373],{"class":51},[45,128613,128614],{"class":47,"line":1400},[45,128615,1648],{"class":51},[45,128617,128618,128620,128622,128624],{"class":47,"line":1412},[45,128619,128527],{"class":2046},[45,128621,1481],{"class":51381},[45,128623,61021],{"class":2046},[45,128625,15655],{"class":51},[45,128627,128628,128630,128632,128635],{"class":47,"line":1695},[45,128629,70959],{"class":257},[45,128631,51518],{"class":51},[45,128633,128634],{"class":257},"#ff6700",[45,128636,1373],{"class":51},[45,128638,128639],{"class":47,"line":1700},[45,128640,1648],{"class":51},[1545,128642],{"style":126459,"src":128643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[10,128645,128646],{},"行高=盒子高度：实现文字的垂直居中",[10,128648,128649],{},"原理讲解：",[1545,128651],{"style":126459,"src":128652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[30,128654,128656],{"id":128655},"_82-css背景","8.2 css背景",[10,128658,128659],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[176,128661,128663],{"id":128662},"_821-背景颜色","8.2.1 背景颜色",[10,128665,128666],{},"background-color:颜色值;",[10,128668,128669],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[176,128671,128673],{"id":128672},"_822-背景图片","8.2.2 背景图片",[10,128675,128676],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[35,128678,128680],{"className":126603,"code":128679,"language":126605,"meta":40,"style":40},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[42,128681,128682,128688,128704],{"__ignoreMap":40},[45,128683,128684,128686],{"class":47,"line":48},[45,128685,51692],{"class":51381},[45,128687,15655],{"class":51},[45,128689,128690,128693,128695,128697,128699,128702],{"class":47,"line":125},[45,128691,128692],{"class":257},"  background-image",[45,128694,51518],{"class":51},[45,128696,61807],{"class":257},[45,128698,209],{"class":51},[45,128700,128701],{"class":5299},"images\u002Fbg.png",[45,128703,2802],{"class":51},[45,128705,128706],{"class":47,"line":1262},[45,128707,1648],{"class":51},[346,128709,128710,128719],{},[349,128711,128712],{},[352,128713,128714,128717],{},[355,128715,128716],{"align":23819},"参数值",[355,128718,102747],{"align":23819},[393,128720,128721,128728],{},[352,128722,128723,128725],{},[398,128724,54818],{"align":23819},[398,128726,128727],{"align":23819},"无背景图（默认的）",[352,128729,128730,128732],{},[398,128731,61807],{"align":23819},[398,128733,128734],{"align":23819},"使用绝对或相对地址指定背景图像",[35,128736,128737],{"className":126603,"code":128679,"language":126605,"meta":40,"style":40},[42,128738,128739,128745,128759],{"__ignoreMap":40},[45,128740,128741,128743],{"class":47,"line":48},[45,128742,51692],{"class":51381},[45,128744,15655],{"class":51},[45,128746,128747,128749,128751,128753,128755,128757],{"class":47,"line":125},[45,128748,128692],{"class":257},[45,128750,51518],{"class":51},[45,128752,61807],{"class":257},[45,128754,209],{"class":51},[45,128756,128701],{"class":5299},[45,128758,2802],{"class":51},[45,128760,128761],{"class":47,"line":1262},[45,128762,1648],{"class":51},[10,128764,128765],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[176,128767,128769],{"id":128768},"_823-背景平铺","8.2.3 背景平铺",[35,128771,128773],{"className":126603,"code":128772,"language":126605,"meta":40,"style":40},"div {\n  background-repeat: no-repeat;\n}\n",[42,128774,128775,128781,128792],{"__ignoreMap":40},[45,128776,128777,128779],{"class":47,"line":48},[45,128778,51692],{"class":51381},[45,128780,15655],{"class":51},[45,128782,128783,128786,128788,128790],{"class":47,"line":125},[45,128784,128785],{"class":257},"  background-repeat",[45,128787,51518],{"class":51},[45,128789,61817],{"class":257},[45,128791,1373],{"class":51},[45,128793,128794],{"class":47,"line":1262},[45,128795,1648],{"class":51},[346,128797,128798,128806],{},[349,128799,128800],{},[352,128801,128802,128804],{},[355,128803,128716],{"align":23819},[355,128805,102747],{"align":23819},[393,128807,128808,128816,128823,128831],{},[352,128809,128810,128813],{},[398,128811,128812],{"align":23819},"repeat",[398,128814,128815],{"align":23819},"背景图像在纵向和横向上平铺（默认的）",[352,128817,128818,128820],{},[398,128819,61817],{"align":23819},[398,128821,128822],{"align":23819},"背景图像不平铺",[352,128824,128825,128828],{},[398,128826,128827],{"align":23819},"repeat-x",[398,128829,128830],{"align":23819},"背景图像在横向上平铺",[352,128832,128833,128836],{},[398,128834,128835],{"align":23819},"repeat-y",[398,128837,128838],{"align":23819},"背景图像在纵向平铺",[176,128840,128842],{"id":128841},"_824-背景图片位置","8.2.4 背景图片位置",[35,128844,128846],{"className":126603,"code":128845,"language":126605,"meta":40,"style":40},"\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",[42,128847,128848,128853,128859,128873,128877,128882,128888,128904,128908,128913,128919,128933],{"__ignoreMap":40},[45,128849,128850],{"class":47,"line":48},[45,128851,128852],{"class":267},"\u002F* 方位名词 *\u002F\n",[45,128854,128855,128857],{"class":47,"line":125},[45,128856,51692],{"class":51381},[45,128858,15655],{"class":51},[45,128860,128861,128864,128866,128868,128871],{"class":47,"line":1262},[45,128862,128863],{"class":257},"  background-position",[45,128865,51518],{"class":51},[45,128867,51673],{"class":257},[45,128869,128870],{"class":257}," top",[45,128872,1373],{"class":51},[45,128874,128875],{"class":47,"line":1277},[45,128876,1648],{"class":51},[45,128878,128879],{"class":47,"line":1283},[45,128880,128881],{"class":267},"\u002F* 精确单位 *\u002F\n",[45,128883,128884,128886],{"class":47,"line":1297},[45,128885,51692],{"class":51381},[45,128887,15655],{"class":51},[45,128889,128890,128892,128894,128896,128898,128900,128902],{"class":47,"line":1303},[45,128891,128863],{"class":257},[45,128893,51518],{"class":51},[45,128895,907],{"class":257},[45,128897,51573],{"class":93},[45,128899,57585],{"class":257},[45,128901,51573],{"class":93},[45,128903,1373],{"class":51},[45,128905,128906],{"class":47,"line":1394},[45,128907,1648],{"class":51},[45,128909,128910],{"class":47,"line":1400},[45,128911,128912],{"class":267},"\u002F* 混合单位 *\u002F\n",[45,128914,128915,128917],{"class":47,"line":1412},[45,128916,51692],{"class":51381},[45,128918,15655],{"class":51},[45,128920,128921,128923,128925,128927,128929,128931],{"class":47,"line":1695},[45,128922,128863],{"class":257},[45,128924,51518],{"class":51},[45,128926,907],{"class":257},[45,128928,51573],{"class":93},[45,128930,17227],{"class":257},[45,128932,1373],{"class":51},[45,128934,128935],{"class":47,"line":1700},[45,128936,1648],{"class":51},[10,128938,128939],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[346,128941,128942,128950],{},[349,128943,128944],{},[352,128945,128946,128948],{},[355,128947,128716],{"align":23819},[355,128949,25952],{"align":23819},[393,128951,128952,128959],{},[352,128953,128954,128956],{},[398,128955,52049],{"align":23819},[398,128957,128958],{"align":23819},"百分数|由浮点数和单位标识符组成的长度值",[352,128960,128961,128964],{},[398,128962,128963],{"align":23819},"position",[398,128965,128966],{"align":23819},"top|center|bottom|left|center|right 方位名词",[10,128968,128969],{},"其他说明：",[10,128971,128972],{},"①参数是方位名词",[10,128974,128975],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[10,128977,128978],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[10,128980,128981],{},"②参数是精确单位",[10,128983,128984],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[10,128986,128987],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[10,128989,128990],{},"③参数是混合单位",[10,128992,128993],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[176,128995,128997],{"id":128996},"_825-背景图片固定","8.2.5 背景图片固定",[35,128999,129001],{"className":126603,"code":129000,"language":126605,"meta":40,"style":40},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[42,129002,129003,129008,129014,129026,129030,129035,129041,129051],{"__ignoreMap":40},[45,129004,129005],{"class":47,"line":48},[45,129006,129007],{"class":267},"\u002F* 背景滚动（默认） *\u002F\n",[45,129009,129010,129012],{"class":47,"line":125},[45,129011,51692],{"class":51381},[45,129013,15655],{"class":51},[45,129015,129016,129019,129021,129024],{"class":47,"line":1262},[45,129017,129018],{"class":257},"  background-attachment",[45,129020,51518],{"class":51},[45,129022,129023],{"class":257},"scroll",[45,129025,1373],{"class":51},[45,129027,129028],{"class":47,"line":1277},[45,129029,1648],{"class":51},[45,129031,129032],{"class":47,"line":1283},[45,129033,129034],{"class":267},"\u002F* 背景固定 *\u002F\n",[45,129036,129037,129039],{"class":47,"line":1297},[45,129038,51692],{"class":51381},[45,129040,15655],{"class":51},[45,129042,129043,129045,129047,129049],{"class":47,"line":1303},[45,129044,129018],{"class":257},[45,129046,51518],{"class":51},[45,129048,86314],{"class":257},[45,129050,1373],{"class":51},[45,129052,129053],{"class":47,"line":1394},[45,129054,1648],{"class":51},[346,129056,129057,129066],{},[349,129058,129059],{},[352,129060,129061,129064],{},[355,129062,129063],{"align":23819},"参数",[355,129065,102747],{"align":23819},[393,129067,129068,129075],{},[352,129069,129070,129072],{},[398,129071,129023],{"align":23819},[398,129073,129074],{"align":23819},"背景图像是随对象内容滚动",[352,129076,129077,129079],{},[398,129078,86314],{"align":23819},[398,129080,129081],{"align":23819},"背景图像固定",[176,129083,129085],{"id":129084},"_826-背景样式合写","8.2.6 背景样式合写",[35,129087,129089],{"className":126603,"code":129088,"language":126605,"meta":40,"style":40},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[42,129090,129091,129096,129102,129130],{"__ignoreMap":40},[45,129092,129093],{"class":47,"line":48},[45,129094,129095],{"class":267},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[45,129097,129098,129100],{"class":47,"line":125},[45,129099,51692],{"class":51381},[45,129101,15655],{"class":51},[45,129103,129104,129106,129108,129110,129113,129115,129117,129119,129121,129124,129126,129128],{"class":47,"line":1262},[45,129105,70692],{"class":257},[45,129107,51518],{"class":51},[45,129109,60923],{"class":257},[45,129111,129112],{"class":257}," url",[45,129114,209],{"class":51},[45,129116,128701],{"class":5299},[45,129118,13797],{"class":51},[45,129120,61817],{"class":257},[45,129122,129123],{"class":257}," fixed",[45,129125,17227],{"class":257},[45,129127,128870],{"class":257},[45,129129,1373],{"class":51},[45,129131,129132],{"class":47,"line":1277},[45,129133,1648],{"class":51},[176,129135,129137],{"id":129136},"_827-背景色半透明","8.2.7 背景色半透明",[35,129139,129141],{"className":126603,"code":129140,"language":126605,"meta":40,"style":40},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[42,129142,129143,129149,129175],{"__ignoreMap":40},[45,129144,129145,129147],{"class":47,"line":48},[45,129146,51692],{"class":51381},[45,129148,15655],{"class":51},[45,129150,129151,129153,129155,129157,129159,129161,129163,129165,129167,129169,129171,129173],{"class":47,"line":125},[45,129152,70692],{"class":257},[45,129154,51518],{"class":51},[45,129156,55191],{"class":257},[45,129158,209],{"class":51},[45,129160,400],{"class":257},[45,129162,12518],{"class":51},[45,129164,400],{"class":257},[45,129166,12518],{"class":51},[45,129168,400],{"class":257},[45,129170,12518],{"class":51},[45,129172,100572],{"class":257},[45,129174,2802],{"class":51},[45,129176,129177],{"class":47,"line":1262},[45,129178,1648],{"class":51},[10,129180,99447],{},[10,129182,129183],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[10,129185,129186],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[10,129188,129189],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[10,129191,129192],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[176,129194,129196],{"id":129195},"_828-总结","8.2.8 总结",[346,129198,129199,129210],{},[349,129200,129201],{},[352,129202,129203,129206,129208],{},[355,129204,129205],{"align":23819},"属性",[355,129207,102747],{"align":23819},[355,129209,361],{"align":23819},[393,129211,129212,129223,129234,129245,129256,129267,129278],{},[352,129213,129214,129217,129220],{},[398,129215,129216],{"align":23819},"background-color",[398,129218,129219],{"align":23819},"背景颜色",[398,129221,129222],{"align":23819},"预定义的颜色值\u002F十六进制\u002FRGB代码",[352,129224,129225,129228,129231],{},[398,129226,129227],{"align":23819},"background-image",[398,129229,129230],{"align":23819},"背景图片",[398,129232,129233],{"align":23819},"url(图片路径)",[352,129235,129236,129239,129242],{},[398,129237,129238],{"align":23819},"background-repeat",[398,129240,129241],{"align":23819},"是否平铺",[398,129243,129244],{"align":23819},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[352,129246,129247,129250,129253],{},[398,129248,129249],{"align":23819},"background-position",[398,129251,129252],{"align":23819},"背景位置",[398,129254,129255],{"align":23819},"length\u002Fposition 分别是x和y坐标",[352,129257,129258,129261,129264],{},[398,129259,129260],{"align":23819},"background-attachment",[398,129262,129263],{"align":23819},"背景附着",[398,129265,129266],{"align":23819},"scroll(背景滚动) \u002Ffixed (背景固定)",[352,129268,129269,129272,129275],{},[398,129270,129271],{"align":23819},"背景简写",[398,129273,129274],{"align":23819},"书写更简单",[398,129276,129277],{"align":23819},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[352,129279,129280,129283,129286],{},[398,129281,129282],{"align":23819},"背景半透明",[398,129284,129285],{"align":23819},"背景颜色半透明",[398,129287,129288],{"align":23819},"background: rgba(0,0,0.3); 后面必须是4个值",[10,129290,129291],{},"颜色渐变：",[1545,129293],{"style":126459,"src":129294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1545,129296],{"style":126459,"src":129297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[176,129299,129301],{"id":129300},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[35,129303,129305],{"className":127350,"code":129304,"language":127352,"meta":40,"style":40},"\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",[42,129306,129307,129322,129341,129360,129379,129398,129417],{"__ignoreMap":40},[45,129308,129309,129311,129313,129315,129317,129320],{"class":47,"line":48},[45,129310,1117],{"class":51},[45,129312,51692],{"class":51381},[45,129314,53567],{"class":2046},[45,129316,254],{"class":51},[45,129318,129319],{"class":313},"\"nav\"",[45,129321,51388],{"class":51},[45,129323,129324,129326,129328,129330,129332,129334,129337,129339],{"class":47,"line":125},[45,129325,52225],{"class":51},[45,129327,13],{"class":51381},[45,129329,61138],{"class":2046},[45,129331,254],{"class":51},[45,129333,61143],{"class":313},[45,129335,129336],{"class":51},">五彩导航1\u003C\u002F",[45,129338,13],{"class":51381},[45,129340,51388],{"class":51},[45,129342,129343,129345,129347,129349,129351,129353,129356,129358],{"class":47,"line":1262},[45,129344,52225],{"class":51},[45,129346,13],{"class":51381},[45,129348,61138],{"class":2046},[45,129350,254],{"class":51},[45,129352,61143],{"class":313},[45,129354,129355],{"class":51},">五彩导航2\u003C\u002F",[45,129357,13],{"class":51381},[45,129359,51388],{"class":51},[45,129361,129362,129364,129366,129368,129370,129372,129375,129377],{"class":47,"line":1277},[45,129363,52225],{"class":51},[45,129365,13],{"class":51381},[45,129367,61138],{"class":2046},[45,129369,254],{"class":51},[45,129371,61143],{"class":313},[45,129373,129374],{"class":51},">五彩导航3\u003C\u002F",[45,129376,13],{"class":51381},[45,129378,51388],{"class":51},[45,129380,129381,129383,129385,129387,129389,129391,129394,129396],{"class":47,"line":1283},[45,129382,52225],{"class":51},[45,129384,13],{"class":51381},[45,129386,61138],{"class":2046},[45,129388,254],{"class":51},[45,129390,61143],{"class":313},[45,129392,129393],{"class":51},">五彩导航4\u003C\u002F",[45,129395,13],{"class":51381},[45,129397,51388],{"class":51},[45,129399,129400,129402,129404,129406,129408,129410,129413,129415],{"class":47,"line":1297},[45,129401,52225],{"class":51},[45,129403,13],{"class":51381},[45,129405,61138],{"class":2046},[45,129407,254],{"class":51},[45,129409,61143],{"class":313},[45,129411,129412],{"class":51},">五彩导航5\u003C\u002F",[45,129414,13],{"class":51381},[45,129416,51388],{"class":51},[45,129418,129419,129421,129423],{"class":47,"line":1303},[45,129420,51866],{"class":51},[45,129422,51692],{"class":51381},[45,129424,51388],{"class":51},[35,129426,129428],{"className":126603,"code":129427,"language":126605,"meta":40,"style":40},".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",[42,129429,129430,129439,129449,129461,129473,129483,129495,129505,129509,129534,129557,129580,129603],{"__ignoreMap":40},[45,129431,129432,129435,129437],{"class":47,"line":48},[45,129433,129434],{"class":2046},".nav",[45,129436,1481],{"class":51381},[45,129438,15655],{"class":51},[45,129440,129441,129443,129445,129447],{"class":47,"line":125},[45,129442,128219],{"class":257},[45,129444,51518],{"class":51},[45,129446,72464],{"class":257},[45,129448,1373],{"class":51},[45,129450,129451,129453,129455,129457,129459],{"class":47,"line":1262},[45,129452,70649],{"class":257},[45,129454,51518],{"class":51},[45,129456,1024],{"class":257},[45,129458,51573],{"class":93},[45,129460,1373],{"class":51},[45,129462,129463,129465,129467,129469,129471],{"class":47,"line":1277},[45,129464,70869],{"class":257},[45,129466,51518],{"class":51},[45,129468,1063],{"class":257},[45,129470,51573],{"class":93},[45,129472,1373],{"class":51},[45,129474,129475,129477,129479,129481],{"class":47,"line":1283},[45,129476,70607],{"class":257},[45,129478,51518],{"class":51},[45,129480,51673],{"class":257},[45,129482,1373],{"class":51},[45,129484,129485,129487,129489,129491,129493],{"class":47,"line":1297},[45,129486,127287],{"class":257},[45,129488,51518],{"class":51},[45,129490,1063],{"class":257},[45,129492,51573],{"class":93},[45,129494,1373],{"class":51},[45,129496,129497,129499,129501,129503],{"class":47,"line":1303},[45,129498,70986],{"class":257},[45,129500,51518],{"class":51},[45,129502,60923],{"class":257},[45,129504,1373],{"class":51},[45,129506,129507],{"class":47,"line":1394},[45,129508,1648],{"class":51},[45,129510,129511,129513,129515,129518,129520,129522,129525,129527,129529,129531],{"class":47,"line":1400},[45,129512,129434],{"class":2046},[45,129514,1481],{"class":51381},[45,129516,129517],{"class":2046},":nth-child",[45,129519,209],{"class":51},[45,129521,426],{"class":257},[45,129523,129524],{"class":51},") { ",[45,129526,129216],{"class":257},[45,129528,51518],{"class":51},[45,129530,128634],{"class":257},[45,129532,129533],{"class":51},"; }\n",[45,129535,129536,129538,129540,129542,129544,129546,129548,129550,129552,129555],{"class":47,"line":1412},[45,129537,129434],{"class":2046},[45,129539,1481],{"class":51381},[45,129541,129517],{"class":2046},[45,129543,209],{"class":51},[45,129545,286],{"class":257},[45,129547,129524],{"class":51},[45,129549,129216],{"class":257},[45,129551,51518],{"class":51},[45,129553,129554],{"class":257},"#ff0000",[45,129556,129533],{"class":51},[45,129558,129559,129561,129563,129565,129567,129569,129571,129573,129575,129578],{"class":47,"line":1695},[45,129560,129434],{"class":2046},[45,129562,1481],{"class":51381},[45,129564,129517],{"class":2046},[45,129566,209],{"class":51},[45,129568,280],{"class":257},[45,129570,129524],{"class":51},[45,129572,129216],{"class":257},[45,129574,51518],{"class":51},[45,129576,129577],{"class":257},"#00a4ff",[45,129579,129533],{"class":51},[45,129581,129582,129584,129586,129588,129590,129592,129594,129596,129598,129601],{"class":47,"line":1700},[45,129583,129434],{"class":2046},[45,129585,1481],{"class":51381},[45,129587,129517],{"class":2046},[45,129589,209],{"class":51},[45,129591,501],{"class":257},[45,129593,129524],{"class":51},[45,129595,129216],{"class":257},[45,129597,51518],{"class":51},[45,129599,129600],{"class":257},"#ff00ff",[45,129602,129533],{"class":51},[45,129604,129605,129607,129609,129611,129613,129615,129617,129619,129621,129624],{"class":47,"line":1706},[45,129606,129434],{"class":2046},[45,129608,1481],{"class":51381},[45,129610,129517],{"class":2046},[45,129612,209],{"class":51},[45,129614,527],{"class":257},[45,129616,129524],{"class":51},[45,129618,129216],{"class":257},[45,129620,51518],{"class":51},[45,129622,129623],{"class":257},"#00ff00",[45,129625,129533],{"class":51},[30,129627,129629],{"id":129628},"_83-css三大特性","8.3 css三大特性",[176,129631,129633],{"id":129632},"_831-层叠性","8.3.1 层叠性",[10,129635,129636],{},"为了解决样式冲突问题",[10,129638,129639],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[10,129641,129642],{},"   ②样式不冲突，不会层叠",[176,129644,129646],{"id":129645},"_832-继承性","8.3.2 继承性",[10,129648,129649],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[10,129651,129652],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[35,129654,129656],{"className":126603,"code":129655,"language":126605,"meta":40,"style":40},"p {\n  color: #333;\n}\n",[42,129657,129658,129664,129674],{"__ignoreMap":40},[45,129659,129660,129662],{"class":47,"line":48},[45,129661,10],{"class":51381},[45,129663,15655],{"class":51},[45,129665,129666,129668,129670,129672],{"class":47,"line":125},[45,129667,70986],{"class":257},[45,129669,51518],{"class":51},[45,129671,62450],{"class":257},[45,129673,1373],{"class":51},[45,129675,129676],{"class":47,"line":1262},[45,129677,1648],{"class":51},[1545,129679],{"style":126459,"src":129680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[10,129682,129683],{},"解释：①行高可以跟单位也可以不跟单位",[10,129685,129686],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[10,129688,129689],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[10,129691,129692],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[176,129694,129696],{"id":129695},"_833-优先级","8.3.3 优先级",[159,129698,129699,129702],{},[162,129700,129701],{},"选择器相同，则执行层叠性",[162,129703,129704],{},"选择器不同，则根据选择器权重执行",[346,129706,129707,129717],{},[349,129708,129709],{},[352,129710,129711,129714],{},[355,129712,129713],{"align":23819},"选择器",[355,129715,129716],{"align":23819},"选择器权重",[393,129718,129719,129727,129735,129743,129751,129759],{},[352,129720,129721,129724],{},[398,129722,129723],{"align":23819},"继承 或者*",[398,129725,129726],{"align":23819},"0，0，0，0",[352,129728,129729,129732],{},[398,129730,129731],{"align":23819},"标签选择器",[398,129733,129734],{"align":23819},"0，0，0，1",[352,129736,129737,129740],{},[398,129738,129739],{"align":23819},"类选择器，伪类选择器",[398,129741,129742],{"align":23819},"0，0，1，0",[352,129744,129745,129748],{},[398,129746,129747],{"align":23819},"ID选择器",[398,129749,129750],{"align":23819},"0，1，0，0",[352,129752,129753,129756],{},[398,129754,129755],{"align":23819},"行内样式",[398,129757,129758],{"align":23819},"1，0，0，0",[352,129760,129761,129764],{},[398,129762,129763],{"align":23819},"！important",[398,129765,129766],{"align":23819},"无穷大",[10,129768,129769],{},"! important用法：",[35,129771,129773],{"className":126603,"code":129772,"language":126605,"meta":40,"style":40},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[42,129774,129775,129780,129786,129799,129803,129808,129814,129824],{"__ignoreMap":40},[45,129776,129777],{"class":47,"line":48},[45,129778,129779],{"class":267},"\u002F* !important 拥有最高优先级 *\u002F\n",[45,129781,129782,129784],{"class":47,"line":125},[45,129783,51692],{"class":51381},[45,129785,15655],{"class":51},[45,129787,129788,129790,129792,129794,129797],{"class":47,"line":1262},[45,129789,70986],{"class":257},[45,129791,51518],{"class":51},[45,129793,51726],{"class":257},[45,129795,129796],{"class":93}," !important",[45,129798,1373],{"class":51},[45,129800,129801],{"class":47,"line":1277},[45,129802,1648],{"class":51},[45,129804,129805],{"class":47,"line":1283},[45,129806,129807],{"class":267},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[45,129809,129810,129812],{"class":47,"line":1297},[45,129811,51692],{"class":51381},[45,129813,15655],{"class":51},[45,129815,129816,129818,129820,129822],{"class":47,"line":1303},[45,129817,70986],{"class":257},[45,129819,51518],{"class":51},[45,129821,57502],{"class":257},[45,129823,1373],{"class":51},[45,129825,129826],{"class":47,"line":1394},[45,129827,1648],{"class":51},[10,129829,129830],{},"优先级注意点：",[10,129832,129833],{},"①权重是有4组数字组成,但是不会有进位",[10,129835,129836],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[10,129838,129839],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[10,129841,129842],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[10,129844,129845],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[10,129847,129848],{},"⑥复合选择器",[346,129850,129851,129861],{},[349,129852,129853],{},[352,129854,129855,129858],{},[355,129856,129857],{"align":23819},"div ul li",[355,129859,129860],{"align":23819},"0,0,0,3",[393,129862,129863,129871,129879],{},[352,129864,129865,129868],{},[398,129866,129867],{"align":23819},".nav ul li",[398,129869,129870],{"align":23819},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[352,129872,129873,129876],{},[398,129874,129875],{"align":23819},"a:hover",[398,129877,129878],{"align":23819},"0,0,1,1",[352,129880,129881,129884],{},[398,129882,129883],{"align":23819},".nav a",[398,129885,129878],{"align":23819},[121,129887,129888],{},"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":40,"searchDepth":125,"depth":125,"links":129890},[129891,129899,129910],{"id":127999,"depth":125,"text":128000,"children":129892},[129893,129894,129895,129896,129897,129898],{"id":128012,"depth":1262,"text":128013},{"id":128084,"depth":1262,"text":128085},{"id":128156,"depth":1262,"text":128157},{"id":128187,"depth":1262,"text":128188},{"id":128194,"depth":1262,"text":128195},{"id":128347,"depth":1262,"text":128348},{"id":128655,"depth":125,"text":128656,"children":129900},[129901,129902,129903,129904,129905,129906,129907,129908,129909],{"id":128662,"depth":1262,"text":128663},{"id":128672,"depth":1262,"text":128673},{"id":128768,"depth":1262,"text":128769},{"id":128841,"depth":1262,"text":128842},{"id":128996,"depth":1262,"text":128997},{"id":129084,"depth":1262,"text":129085},{"id":129136,"depth":1262,"text":129137},{"id":129195,"depth":1262,"text":129196},{"id":129300,"depth":1262,"text":129301},{"id":129628,"depth":125,"text":129629,"children":129911},[129912,129913,129914],{"id":129632,"depth":1262,"text":129633},{"id":129645,"depth":1262,"text":129646},{"id":129695,"depth":1262,"text":129696},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127991,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129921,"title":129922,"body":129923,"description":130,"extension":131,"meta":131513,"navigation":133,"path":131514,"seo":131515,"stem":131516,"__hash__":131517},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129924,"toc":131492},[129925,129928,129932,129935,129938,129941,129944,129947,129950,129953,129957,129965,130002,130038,130041,130055,130060,130094,130097,130190,130195,130198,130228,130231,130236,130244,130248,130255,130301,130345,130350,130353,130356,130359,130362,130365,130368,130370,130373,130377,130382,130426,130431,130434,130437,130474,130479,130482,130485,130488,130491,130523,130526,130529,130532,130564,130567,130570,130573,130577,130580,130612,130615,130619,130639,130642,130650,130653,130657,130662,130665,130697,130702,130705,130743,130747,130752,130755,130758,130789,130792,130809,130814,130866,130926,130931,130985,131023,131027,131031,131034,131038,131046,131049,131051,131062,131067,131115,131149,131152,131155,131158,131161,131205,131208,131211,131214,131217,131220,131223,131267,131270,131273,131276,131279,131282,131285,131291,131294,131338,131341,131344,131347,131350,131353,131397,131400,131402,131405,131409,131413,131451,131455,131458,131461,131465,131473,131477,131480,131483,131486,131489],[20,129926,129922],{"id":129927},"_9-css盒模型浮动与切图",[30,129929,129931],{"id":129930},"_91-盒子模型","9.1 盒子模型",[10,129933,129934],{},"利用盒子来设计网页",[10,129936,129937],{},"盒子包含：边框、外边距、内边距、实际内容",[10,129939,129940],{},"网页布局设置：",[10,129942,129943],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[10,129945,129946],{},"②利用css设置好盒子样式，然后摆放到相应位置",[10,129948,129949],{},"③往盒子里装内容",[1545,129951],{"style":126459,"src":129952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[176,129954,129956],{"id":129955},"_911-边框border","9.1.1 边框（border）",[159,129958,129959,129962],{},[162,129960,129961],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[162,129963,129964],{},"语法",[35,129966,129968],{"className":126603,"code":129967,"language":126605,"meta":40,"style":40},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[42,129969,129970,129975,129981,129998],{"__ignoreMap":40},[45,129971,129972],{"class":47,"line":48},[45,129973,129974],{"class":267},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[45,129976,129977,129979],{"class":47,"line":125},[45,129978,51692],{"class":51381},[45,129980,15655],{"class":51},[45,129982,129983,129985,129987,129989,129991,129993,129996],{"class":47,"line":1262},[45,129984,70977],{"class":257},[45,129986,51518],{"class":51},[45,129988,426],{"class":257},[45,129990,51573],{"class":93},[45,129992,51602],{"class":257},[45,129994,129995],{"class":257}," #ccc",[45,129997,1373],{"class":51},[45,129999,130000],{"class":47,"line":1277},[45,130001,1648],{"class":51},[346,130003,130004,130012],{},[349,130005,130006],{},[352,130007,130008,130010],{},[355,130009,129205],{"align":23819},[355,130011,102747],{"align":23819},[393,130013,130014,130022,130030],{},[352,130015,130016,130019],{},[398,130017,130018],{"align":23819},"border-width",[398,130020,130021],{"align":23819},"定义边框粗细，单位是px",[352,130023,130024,130027],{},[398,130025,130026],{"align":23819},"border-style",[398,130028,130029],{"align":23819},"边框的样式",[352,130031,130032,130035],{},[398,130033,130034],{"align":23819},"border-color",[398,130036,130037],{"align":23819},"边框的颜色",[10,130039,130040],{},"边框样式 border-style 可以设置如下值：",[1214,130042,130043,130046,130049,130052],{},[162,130044,130045],{},"none：没有边框即忽略所有边框的宽度（默认值）",[162,130047,130048],{},"solid：边框为单实线(最为常用的)",[162,130050,130051],{},"dashed：边框为虚线",[162,130053,130054],{},"dotted：边框为点线",[159,130056,130057],{"start":1262},[162,130058,130059],{},"边框的合写分写",[35,130061,130062],{"className":126603,"code":129967,"language":126605,"meta":40,"style":40},[42,130063,130064,130068,130074,130090],{"__ignoreMap":40},[45,130065,130066],{"class":47,"line":48},[45,130067,129974],{"class":267},[45,130069,130070,130072],{"class":47,"line":125},[45,130071,51692],{"class":51381},[45,130073,15655],{"class":51},[45,130075,130076,130078,130080,130082,130084,130086,130088],{"class":47,"line":1262},[45,130077,70977],{"class":257},[45,130079,51518],{"class":51},[45,130081,426],{"class":257},[45,130083,51573],{"class":93},[45,130085,51602],{"class":257},[45,130087,129995],{"class":257},[45,130089,1373],{"class":51},[45,130091,130092],{"class":47,"line":1277},[45,130093,1648],{"class":51},[10,130095,130096],{},"边框分开写法：",[35,130098,130100],{"className":126603,"code":130099,"language":126605,"meta":40,"style":40},"\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",[42,130101,130102,130107,130113,130131,130149,130168,130186],{"__ignoreMap":40},[45,130103,130104],{"class":47,"line":48},[45,130105,130106],{"class":267},"\u002F* 边框分开写法 *\u002F\n",[45,130108,130109,130111],{"class":47,"line":125},[45,130110,51692],{"class":51381},[45,130112,15655],{"class":51},[45,130114,130115,130118,130120,130122,130124,130126,130129],{"class":47,"line":1262},[45,130116,130117],{"class":257},"  border-top",[45,130119,51518],{"class":51},[45,130121,426],{"class":257},[45,130123,51573],{"class":93},[45,130125,51602],{"class":257},[45,130127,130128],{"class":257}," #000",[45,130130,1373],{"class":51},[45,130132,130133,130136,130138,130140,130142,130144,130147],{"class":47,"line":1277},[45,130134,130135],{"class":257},"  border-right",[45,130137,51518],{"class":51},[45,130139,286],{"class":257},[45,130141,51573],{"class":93},[45,130143,62322],{"class":257},[45,130145,130146],{"class":257}," #333",[45,130148,1373],{"class":51},[45,130150,130151,130154,130156,130158,130160,130163,130166],{"class":47,"line":1283},[45,130152,130153],{"class":257},"  border-bottom",[45,130155,51518],{"class":51},[45,130157,280],{"class":257},[45,130159,51573],{"class":93},[45,130161,130162],{"class":257}," dotted",[45,130164,130165],{"class":257}," #666",[45,130167,1373],{"class":51},[45,130169,130170,130173,130175,130177,130179,130181,130184],{"class":47,"line":1297},[45,130171,130172],{"class":257},"  border-left",[45,130174,51518],{"class":51},[45,130176,426],{"class":257},[45,130178,51573],{"class":93},[45,130180,51602],{"class":257},[45,130182,130183],{"class":257}," #999",[45,130185,1373],{"class":51},[45,130187,130188],{"class":47,"line":1303},[45,130189,1648],{"class":51},[159,130191,130192],{"start":1277},[162,130193,130194],{},"表格的细线边框",[10,130196,130197],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[35,130199,130201],{"className":126603,"code":130200,"language":126605,"meta":40,"style":40},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[42,130202,130203,130208,130214,130224],{"__ignoreMap":40},[45,130204,130205],{"class":47,"line":48},[45,130206,130207],{"class":267},"\u002F* 表格细线边框合并 *\u002F\n",[45,130209,130210,130212],{"class":47,"line":125},[45,130211,346],{"class":51381},[45,130213,15655],{"class":51},[45,130215,130216,130218,130220,130222],{"class":47,"line":1262},[45,130217,70659],{"class":257},[45,130219,51518],{"class":51},[45,130221,65116],{"class":257},[45,130223,1373],{"class":51},[45,130225,130226],{"class":47,"line":1277},[45,130227,1648],{"class":51},[10,130229,130230],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[159,130232,130233],{"start":1283},[162,130234,130235],{},"解决边框额外增加盒子的实际大小的方法：",[1214,130237,130238,130241],{},[162,130239,130240],{},"测量盒子大小的时候,不量边框",[162,130242,130243],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[176,130245,130247],{"id":130246},"_912-内边距","9.1.2 内边距",[159,130249,130250,130253],{},[162,130251,130252],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[162,130254,129964],{},[346,130256,130257,130267],{},[349,130258,130259],{},[352,130260,130261,130264],{},[355,130262,130263],{"align":23819},"值的个数",[355,130265,130266],{"align":23819},"表达意思",[393,130268,130269,130277,130285,130293],{},[352,130270,130271,130274],{},[398,130272,130273],{"align":23819},"padding: 5px;",[398,130275,130276],{"align":23819},"1个值，代表上下左右都有5个元素",[352,130278,130279,130282],{},[398,130280,130281],{"align":23819},"padding: 5px 10px;",[398,130283,130284],{"align":23819},"2个值，代表上下内边距为5像素，左右内边距为10像素",[352,130286,130287,130290],{},[398,130288,130289],{"align":23819},"padding: 5px 10px 20px;",[398,130291,130292],{"align":23819},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[352,130294,130295,130298],{},[398,130296,130297],{"align":23819},"padding: 5px 10px 20px 30px;",[398,130299,130300],{"align":23819},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[346,130302,130303,130311],{},[349,130304,130305],{},[352,130306,130307,130309],{},[355,130308,129205],{"align":23819},[355,130310,102747],{"align":23819},[393,130312,130313,130321,130329,130337],{},[352,130314,130315,130318],{},[398,130316,130317],{"align":23819},"padding-left",[398,130319,130320],{"align":23819},"左内边距",[352,130322,130323,130326],{},[398,130324,130325],{"align":23819},"padding-right",[398,130327,130328],{"align":23819},"右内边距",[352,130330,130331,130334],{},[398,130332,130333],{"align":23819},"padding-top",[398,130335,130336],{"align":23819},"上内边距",[352,130338,130339,130342],{},[398,130340,130341],{"align":23819},"padding-bottom",[398,130343,130344],{"align":23819},"下内边距",[159,130346,130347],{"start":1262},[162,130348,130349],{},"内边距会影响盒子的实际大小",[10,130351,130352],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[10,130354,130355],{},"①内容和边框有了距离，添加了内边距",[10,130357,130358],{},"②padding影响了盒子实际大小",[10,130360,130361],{},"内边距对盒子大小的影响：",[10,130363,130364],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[10,130366,130367],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[10,130369,95271],{},[10,130371,130372],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[176,130374,130376],{"id":130375},"_913-外边距","9.1.3 外边距",[159,130378,130379],{},[162,130380,130381],{},"控制盒子与盒子之间的距离",[346,130383,130384,130392],{},[349,130385,130386],{},[352,130387,130388,130390],{},[355,130389,129205],{"align":23819},[355,130391,102747],{"align":23819},[393,130393,130394,130402,130410,130418],{},[352,130395,130396,130399],{},[398,130397,130398],{"align":23819},"margin-left",[398,130400,130401],{"align":23819},"左外边距",[352,130403,130404,130407],{},[398,130405,130406],{"align":23819},"margin-right",[398,130408,130409],{"align":23819},"右外边距",[352,130411,130412,130415],{},[398,130413,130414],{"align":23819},"margin-top",[398,130416,130417],{"align":23819},"上外边距",[352,130419,130420,130423],{},[398,130421,130422],{"align":23819},"margin-bottom",[398,130424,130425],{"align":23819},"下外边距",[159,130427,130428],{"start":125},[162,130429,130430],{},"外边距可以让块级盒子水平居中的两个条件：",[10,130432,130433],{},"①盒子必须指定了宽度（width）",[10,130435,130436],{},"②盒子左右的外边距都设置为 auto",[35,130438,130440],{"className":126603,"code":130439,"language":126605,"meta":40,"style":40},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[42,130441,130442,130447,130454,130470],{"__ignoreMap":40},[45,130443,130444],{"class":47,"line":48},[45,130445,130446],{"class":267},"\u002F* margin 复合写法（同上） *\u002F\n",[45,130448,130449,130452],{"class":47,"line":125},[45,130450,130451],{"class":2046},".box",[45,130453,15655],{"class":51},[45,130455,130456,130458,130460,130462,130464,130467],{"class":47,"line":1262},[45,130457,70551],{"class":257},[45,130459,51518],{"class":51},[45,130461,400],{"class":257},[45,130463,51637],{"class":257},[45,130465,130466],{"class":51},";  ",[45,130468,130469],{"class":267},"\u002F* 块级盒子水平居中 *\u002F\n",[45,130471,130472],{"class":47,"line":1277},[45,130473,1648],{"class":51},[159,130475,130476],{"start":1262},[162,130477,130478],{},"外边距塌陷问题",[10,130480,130481],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1545,130483],{"style":126459,"src":130484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[10,130486,130487],{},"解决方案：",[10,130489,130490],{},"①可以为父亲元素定义上边距",[35,130492,130493],{"className":126603,"code":130439,"language":126605,"meta":40,"style":40},[42,130494,130495,130499,130505,130519],{"__ignoreMap":40},[45,130496,130497],{"class":47,"line":48},[45,130498,130446],{"class":267},[45,130500,130501,130503],{"class":47,"line":125},[45,130502,130451],{"class":2046},[45,130504,15655],{"class":51},[45,130506,130507,130509,130511,130513,130515,130517],{"class":47,"line":1262},[45,130508,70551],{"class":257},[45,130510,51518],{"class":51},[45,130512,400],{"class":257},[45,130514,51637],{"class":257},[45,130516,130466],{"class":51},[45,130518,130469],{"class":267},[45,130520,130521],{"class":47,"line":1277},[45,130522,1648],{"class":51},[10,130524,130525],{},"②可以为父亲元素定义上内边距",[10,130527,130528],{},"③可以为父亲元素添加overflow:hidden",[1545,130530],{"style":126459,"src":130531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[35,130533,130534],{"className":126603,"code":130439,"language":126605,"meta":40,"style":40},[42,130535,130536,130540,130546,130560],{"__ignoreMap":40},[45,130537,130538],{"class":47,"line":48},[45,130539,130446],{"class":267},[45,130541,130542,130544],{"class":47,"line":125},[45,130543,130451],{"class":2046},[45,130545,15655],{"class":51},[45,130547,130548,130550,130552,130554,130556,130558],{"class":47,"line":1262},[45,130549,70551],{"class":257},[45,130551,51518],{"class":51},[45,130553,400],{"class":257},[45,130555,51637],{"class":257},[45,130557,130466],{"class":51},[45,130559,130469],{"class":267},[45,130561,130562],{"class":47,"line":1277},[45,130563,1648],{"class":51},[1545,130565],{"style":126459,"src":130566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[10,130568,130569],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[10,130571,130572],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[176,130574,130576],{"id":130575},"_914-清除内外边距","9.1.4 清除内外边距",[10,130578,130579],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[35,130581,130582],{"className":126603,"code":130439,"language":126605,"meta":40,"style":40},[42,130583,130584,130588,130594,130608],{"__ignoreMap":40},[45,130585,130586],{"class":47,"line":48},[45,130587,130446],{"class":267},[45,130589,130590,130592],{"class":47,"line":125},[45,130591,130451],{"class":2046},[45,130593,15655],{"class":51},[45,130595,130596,130598,130600,130602,130604,130606],{"class":47,"line":1262},[45,130597,70551],{"class":257},[45,130599,51518],{"class":51},[45,130601,400],{"class":257},[45,130603,51637],{"class":257},[45,130605,130466],{"class":51},[45,130607,130469],{"class":267},[45,130609,130610],{"class":47,"line":1277},[45,130611,1648],{"class":51},[10,130613,130614],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[176,130616,130618],{"id":130617},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1214,130620,130621,130624,130627,130630,130633,130636],{},[162,130622,130623],{},"文件→打开 ：可以打开我们要测量的图片",[162,130625,130626],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[162,130628,130629],{},"右击标尺，把里面的单位改为像素",[162,130631,130632],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[162,130634,130635],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[162,130637,130638],{},"用选区拖动 可以测量大小",[1545,130640],{"style":126459,"src":130641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1214,130643,130644,130647],{},[162,130645,130646],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[162,130648,130649],{},"吸管取色工具",[1545,130651],{"style":126459,"src":130652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[176,130654,130656],{"id":130655},"_916-案例","9.1.6 案例",[159,130658,130659],{},[162,130660,130661],{},"小米商品",[1545,130663],{"style":126459,"src":130664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[35,130666,130667],{"className":126603,"code":130439,"language":126605,"meta":40,"style":40},[42,130668,130669,130673,130679,130693],{"__ignoreMap":40},[45,130670,130671],{"class":47,"line":48},[45,130672,130446],{"class":267},[45,130674,130675,130677],{"class":47,"line":125},[45,130676,130451],{"class":2046},[45,130678,15655],{"class":51},[45,130680,130681,130683,130685,130687,130689,130691],{"class":47,"line":1262},[45,130682,70551],{"class":257},[45,130684,51518],{"class":51},[45,130686,400],{"class":257},[45,130688,51637],{"class":257},[45,130690,130466],{"class":51},[45,130692,130469],{"class":267},[45,130694,130695],{"class":47,"line":1277},[45,130696,1648],{"class":51},[159,130698,130699],{"start":125},[162,130700,130701],{},"快报模块",[1545,130703],{"style":126459,"src":130704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[35,130706,130708],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[42,130709,130710,130715,130730,130735],{"__ignoreMap":40},[45,130711,130712],{"class":47,"line":48},[45,130713,130714],{"class":267},"\u003C!-- HTML 代码示例 -->\n",[45,130716,130717,130719,130721,130723,130725,130728],{"class":47,"line":125},[45,130718,1117],{"class":51},[45,130720,51692],{"class":51381},[45,130722,53567],{"class":2046},[45,130724,254],{"class":51},[45,130726,130727],{"class":313},"\"example\"",[45,130729,51388],{"class":51},[45,130731,130732],{"class":47,"line":1262},[45,130733,130734],{"class":51},"  示例内容\n",[45,130736,130737,130739,130741],{"class":47,"line":1277},[45,130738,51866],{"class":51},[45,130740,51692],{"class":51381},[45,130742,51388],{"class":51},[176,130744,130746],{"id":130745},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[159,130748,130749],{},[162,130750,130751],{},"圆角边框",[10,130753,130754],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1545,130756],{"style":126459,"src":130757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[35,130759,130761],{"className":126603,"code":130760,"language":126605,"meta":40,"style":40},"div {\n  border: 1px solid #ccc;\n}\n",[42,130762,130763,130769,130785],{"__ignoreMap":40},[45,130764,130765,130767],{"class":47,"line":48},[45,130766,51692],{"class":51381},[45,130768,15655],{"class":51},[45,130770,130771,130773,130775,130777,130779,130781,130783],{"class":47,"line":125},[45,130772,70977],{"class":257},[45,130774,51518],{"class":51},[45,130776,426],{"class":257},[45,130778,51573],{"class":93},[45,130780,51602],{"class":257},[45,130782,129995],{"class":257},[45,130784,1373],{"class":51},[45,130786,130787],{"class":47,"line":1262},[45,130788,1648],{"class":51},[10,130790,130791],{},"解释:",[1214,130793,130794,130797,130800,130803,130806],{},[162,130795,130796],{},"参数值可以为数值或百分比的形式",[162,130798,130799],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[162,130801,130802],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[162,130804,130805],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[162,130807,130808],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[159,130810,130811],{"start":125},[162,130812,130813],{},"盒子阴影",[35,130815,130817],{"className":126603,"code":130816,"language":126605,"meta":40,"style":40},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[42,130818,130819,130825,130862],{"__ignoreMap":40},[45,130820,130821,130823],{"class":47,"line":48},[45,130822,51692],{"class":51381},[45,130824,15655],{"class":51},[45,130826,130827,130830,130832,130834,130836,130838,130840,130842,130844,130846,130848,130850,130852,130854,130856,130858,130860],{"class":47,"line":125},[45,130828,130829],{"class":257},"  box-shadow",[45,130831,51518],{"class":51},[45,130833,400],{"class":257},[45,130835,14838],{"class":257},[45,130837,51573],{"class":93},[45,130839,2121],{"class":257},[45,130841,51573],{"class":93},[45,130843,78848],{"class":257},[45,130845,209],{"class":51},[45,130847,400],{"class":257},[45,130849,12518],{"class":51},[45,130851,400],{"class":257},[45,130853,12518],{"class":51},[45,130855,400],{"class":257},[45,130857,12518],{"class":51},[45,130859,86291],{"class":257},[45,130861,2802],{"class":51},[45,130863,130864],{"class":47,"line":1262},[45,130865,1648],{"class":51},[346,130867,130868,130876],{},[349,130869,130870],{},[352,130871,130872,130874],{},[355,130873,361],{"align":23819},[355,130875,27572],{"align":23819},[393,130877,130878,130886,130894,130902,130910,130918],{},[352,130879,130880,130883],{},[398,130881,130882],{"align":23819},"h-shadow",[398,130884,130885],{"align":23819},"必需,水平阴影的位置,允许负值",[352,130887,130888,130891],{},[398,130889,130890],{"align":23819},"v-shadow",[398,130892,130893],{"align":23819},"必需,垂直阴影的位置,允许负值",[352,130895,130896,130899],{},[398,130897,130898],{"align":23819},"blur",[398,130900,130901],{"align":23819},"可选,模糊距离,就是影子的虚实",[352,130903,130904,130907],{},[398,130905,130906],{"align":23819},"spread",[398,130908,130909],{"align":23819},"可选,阴影尺寸",[352,130911,130912,130915],{},[398,130913,130914],{"align":23819},"color",[398,130916,130917],{"align":23819},"可选,阴影的颜色",[352,130919,130920,130923],{},[398,130921,130922],{"align":23819},"inset",[398,130924,130925],{"align":23819},"可选,将外部阴影(outset)改为内部阴影",[159,130927,130928],{"start":1262},[162,130929,130930],{},"文字阴影",[35,130932,130934],{"className":126603,"code":130933,"language":126605,"meta":40,"style":40},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[42,130935,130936,130942,130981],{"__ignoreMap":40},[45,130937,130938,130940],{"class":47,"line":48},[45,130939,10],{"class":51381},[45,130941,15655],{"class":51},[45,130943,130944,130947,130949,130951,130953,130955,130957,130959,130961,130963,130965,130967,130969,130971,130973,130975,130977,130979],{"class":47,"line":125},[45,130945,130946],{"class":257},"  text-shadow",[45,130948,51518],{"class":51},[45,130950,426],{"class":257},[45,130952,51573],{"class":93},[45,130954,25201],{"class":257},[45,130956,51573],{"class":93},[45,130958,14838],{"class":257},[45,130960,51573],{"class":93},[45,130962,78848],{"class":257},[45,130964,209],{"class":51},[45,130966,400],{"class":257},[45,130968,12518],{"class":51},[45,130970,400],{"class":257},[45,130972,12518],{"class":51},[45,130974,400],{"class":257},[45,130976,12518],{"class":51},[45,130978,100572],{"class":257},[45,130980,2802],{"class":51},[45,130982,130983],{"class":47,"line":1262},[45,130984,1648],{"class":51},[346,130986,130987,130995],{},[349,130988,130989],{},[352,130990,130991,130993],{},[355,130992,361],{"align":23819},[355,130994,27572],{"align":23819},[393,130996,130997,131003,131010,131017],{},[352,130998,130999,131001],{},[398,131000,130882],{"align":23819},[398,131002,130885],{"align":23819},[352,131004,131005,131007],{},[398,131006,130890],{"align":23819},[398,131008,131009],{"align":23819},"必需,垂直阴影位置,允许负值",[352,131011,131012,131014],{},[398,131013,130898],{"align":23819},[398,131015,131016],{"align":23819},"可选,模糊的距离",[352,131018,131019,131021],{},[398,131020,130914],{"align":23819},[398,131022,130917],{"align":23819},[30,131024,131026],{"id":131025},"_92-浮动","9.2 浮动",[176,131028,131030],{"id":131029},"_921-浮动介绍","9.2.1 浮动介绍",[10,131032,131033],{},"在16.2中详细介绍",[176,131035,131037],{"id":131036},"_922-清除浮动","9.2.2 清除浮动",[159,131039,131040,131043],{},[162,131041,131042],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[162,131044,131045],{},"清除浮动的本质",[10,131047,131048],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[10,131050,9108],{},[1214,131052,131053,131056,131059],{},[162,131054,131055],{},"如果父盒子本身有高度，则不需要清除浮动",[162,131057,131058],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[162,131060,131061],{},"父级有了高度，就不会影响下面的标准流了",[159,131063,131064],{"start":1262},[162,131065,131066],{},"清除浮动样式",[35,131068,131070],{"className":126603,"code":131069,"language":126605,"meta":40,"style":40},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[42,131071,131072,131079,131090,131094,131101,131111],{"__ignoreMap":40},[45,131073,131074,131077],{"class":47,"line":48},[45,131075,131076],{"class":2046},".left",[45,131078,15655],{"class":51},[45,131080,131081,131084,131086,131088],{"class":47,"line":125},[45,131082,131083],{"class":257},"  float",[45,131085,51518],{"class":51},[45,131087,23819],{"class":257},[45,131089,1373],{"class":51},[45,131091,131092],{"class":47,"line":1262},[45,131093,1648],{"class":51},[45,131095,131096,131099],{"class":47,"line":1277},[45,131097,131098],{"class":2046},".right",[45,131100,15655],{"class":51},[45,131102,131103,131105,131107,131109],{"class":47,"line":1283},[45,131104,131083],{"class":257},[45,131106,51518],{"class":51},[45,131108,72603],{"class":257},[45,131110,1373],{"class":51},[45,131112,131113],{"class":47,"line":1297},[45,131114,1648],{"class":51},[346,131116,131117,131125],{},[349,131118,131119],{},[352,131120,131121,131123],{},[355,131122,127067],{"align":23819},[355,131124,27572],{"align":23819},[393,131126,131127,131134,131141],{},[352,131128,131129,131131],{},[398,131130,23819],{"align":23819},[398,131132,131133],{"align":23819},"不允许左侧有浮动元素（清除左侧浮动的影响）",[352,131135,131136,131138],{},[398,131137,72603],{"align":23819},[398,131139,131140],{"align":23819},"不允许右侧有浮动元素（清除右侧浮动的影响）",[352,131142,131143,131146],{},[398,131144,131145],{"align":23819},"both",[398,131147,131148],{"align":23819},"同时清除左右侧浮动的影响",[10,131150,131151],{},"法一",[10,131153,131154],{},"额外标签法也称为隔墙法",[10,131156,131157],{},"使用方式：",[10,131159,131160],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[35,131162,131163],{"className":126603,"code":131069,"language":126605,"meta":40,"style":40},[42,131164,131165,131171,131181,131185,131191,131201],{"__ignoreMap":40},[45,131166,131167,131169],{"class":47,"line":48},[45,131168,131076],{"class":2046},[45,131170,15655],{"class":51},[45,131172,131173,131175,131177,131179],{"class":47,"line":125},[45,131174,131083],{"class":257},[45,131176,51518],{"class":51},[45,131178,23819],{"class":257},[45,131180,1373],{"class":51},[45,131182,131183],{"class":47,"line":1262},[45,131184,1648],{"class":51},[45,131186,131187,131189],{"class":47,"line":1277},[45,131188,131098],{"class":2046},[45,131190,15655],{"class":51},[45,131192,131193,131195,131197,131199],{"class":47,"line":1283},[45,131194,131083],{"class":257},[45,131196,51518],{"class":51},[45,131198,72603],{"class":257},[45,131200,1373],{"class":51},[45,131202,131203],{"class":47,"line":1297},[45,131204,1648],{"class":51},[10,131206,131207],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[10,131209,131210],{},"优点： 通俗易懂，书写方便",[10,131212,131213],{},"缺点： 添加许多无意义的标签，结构化较差",[10,131215,131216],{},"注意： 要求这个新的空标签必须是块级元素。",[10,131218,131219],{},"法二",[10,131221,131222],{},"父级添加overflow属性",[35,131224,131225],{"className":126603,"code":131069,"language":126605,"meta":40,"style":40},[42,131226,131227,131233,131243,131247,131253,131263],{"__ignoreMap":40},[45,131228,131229,131231],{"class":47,"line":48},[45,131230,131076],{"class":2046},[45,131232,15655],{"class":51},[45,131234,131235,131237,131239,131241],{"class":47,"line":125},[45,131236,131083],{"class":257},[45,131238,51518],{"class":51},[45,131240,23819],{"class":257},[45,131242,1373],{"class":51},[45,131244,131245],{"class":47,"line":1262},[45,131246,1648],{"class":51},[45,131248,131249,131251],{"class":47,"line":1277},[45,131250,131098],{"class":2046},[45,131252,15655],{"class":51},[45,131254,131255,131257,131259,131261],{"class":47,"line":1283},[45,131256,131083],{"class":257},[45,131258,51518],{"class":51},[45,131260,72603],{"class":257},[45,131262,1373],{"class":51},[45,131264,131265],{"class":47,"line":1297},[45,131266,1648],{"class":51},[10,131268,131269],{},"overflow: hidden;",[10,131271,131272],{},"优点：代码简洁",[10,131274,131275],{},"缺点：无法显示溢出的部分",[10,131277,131278],{},"注意：是给父元素添加代码",[10,131280,131281],{},"法三",[10,131283,131284],{},"父级添加after伪元素",[10,131286,131287,131290],{},[131288,131289],"after",{}," 方式是额外标签法的升级版",[10,131292,131293],{},"使用的时候复制就可以",[35,131295,131296],{"className":126603,"code":131069,"language":126605,"meta":40,"style":40},[42,131297,131298,131304,131314,131318,131324,131334],{"__ignoreMap":40},[45,131299,131300,131302],{"class":47,"line":48},[45,131301,131076],{"class":2046},[45,131303,15655],{"class":51},[45,131305,131306,131308,131310,131312],{"class":47,"line":125},[45,131307,131083],{"class":257},[45,131309,51518],{"class":51},[45,131311,23819],{"class":257},[45,131313,1373],{"class":51},[45,131315,131316],{"class":47,"line":1262},[45,131317,1648],{"class":51},[45,131319,131320,131322],{"class":47,"line":1277},[45,131321,131098],{"class":2046},[45,131323,15655],{"class":51},[45,131325,131326,131328,131330,131332],{"class":47,"line":1283},[45,131327,131083],{"class":257},[45,131329,51518],{"class":51},[45,131331,72603],{"class":257},[45,131333,1373],{"class":51},[45,131335,131336],{"class":47,"line":1297},[45,131337,1648],{"class":51},[10,131339,131340],{},"优点：没有增加标签，结构更简单",[10,131342,131343],{},"缺点：照顾低版本浏览器",[10,131345,131346],{},"代表网站： 百度、淘宝网、网易等",[10,131348,131349],{},"法四",[10,131351,131352],{},"父级添加双伪元素",[35,131354,131355],{"className":126603,"code":131069,"language":126605,"meta":40,"style":40},[42,131356,131357,131363,131373,131377,131383,131393],{"__ignoreMap":40},[45,131358,131359,131361],{"class":47,"line":48},[45,131360,131076],{"class":2046},[45,131362,15655],{"class":51},[45,131364,131365,131367,131369,131371],{"class":47,"line":125},[45,131366,131083],{"class":257},[45,131368,51518],{"class":51},[45,131370,23819],{"class":257},[45,131372,1373],{"class":51},[45,131374,131375],{"class":47,"line":1262},[45,131376,1648],{"class":51},[45,131378,131379,131381],{"class":47,"line":1277},[45,131380,131098],{"class":2046},[45,131382,15655],{"class":51},[45,131384,131385,131387,131389,131391],{"class":47,"line":1283},[45,131386,131083],{"class":257},[45,131388,51518],{"class":51},[45,131390,72603],{"class":257},[45,131392,1373],{"class":51},[45,131394,131395],{"class":47,"line":1297},[45,131396,1648],{"class":51},[10,131398,131399],{},"优点：代码更简洁",[10,131401,131343],{},[10,131403,131404],{},"代表网站：小米、腾讯等",[30,131406,131408],{"id":131407},"_93-ps切图","9.3 PS切图",[176,131410,131412],{"id":131411},"_931-常见图片格式","9.3.1 常见图片格式",[346,131414,131415,131425],{},[349,131416,131417],{},[352,131418,131419,131422],{},[355,131420,131421],{"align":23819},"jpg图像格式",[355,131423,131424],{"align":23819},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[393,131426,131427,131435,131443],{},[352,131428,131429,131432],{},[398,131430,131431],{"align":23819},"gif图像格式",[398,131433,131434],{"align":23819},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[352,131436,131437,131440],{},[398,131438,131439],{"align":23819},"png图像格式",[398,131441,131442],{"align":23819},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[352,131444,131445,131448],{},[398,131446,131447],{"align":23819},"PSD图像格式",[398,131449,131450],{"align":23819},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[176,131452,131454],{"id":131453},"_932-图层切图","9.3.2 图层切图",[10,131456,131457],{},"最简单的切图方式：右击图层 → 导出 → 切片",[10,131459,131460],{},"按住shift选中两个图层->图层菜单->合并图层",[176,131462,131464],{"id":131463},"_933-切片切图","9.3.3 切片切图",[1214,131466,131467,131470],{},[162,131468,131469],{},"利用切片工具手动划出",[162,131471,131472],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[176,131474,131476],{"id":131475},"_934-切图步骤","9.3.4 切图步骤",[10,131478,131479],{},"用切片工具选中：",[1545,131481],{"style":126459,"src":131482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[10,131484,131485],{},"文件 -> 导出",[1545,131487],{"style":126459,"src":131488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[121,131490,131491],{},"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":40,"searchDepth":125,"depth":125,"links":131493},[131494,131503,131507],{"id":129930,"depth":125,"text":129931,"children":131495},[131496,131497,131498,131499,131500,131501,131502],{"id":129955,"depth":1262,"text":129956},{"id":130246,"depth":1262,"text":130247},{"id":130375,"depth":1262,"text":130376},{"id":130575,"depth":1262,"text":130576},{"id":130617,"depth":1262,"text":130618},{"id":130655,"depth":1262,"text":130656},{"id":130745,"depth":1262,"text":130746},{"id":131025,"depth":125,"text":131026,"children":131504},[131505,131506],{"id":131029,"depth":1262,"text":131030},{"id":131036,"depth":1262,"text":131037},{"id":131407,"depth":125,"text":131408,"children":131508},[131509,131510,131511,131512],{"id":131411,"depth":1262,"text":131412},{"id":131453,"depth":1262,"text":131454},{"id":131463,"depth":1262,"text":131464},{"id":131475,"depth":1262,"text":131476},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129922,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131519,"title":131520,"body":131521,"description":130,"extension":131,"meta":132162,"navigation":133,"path":132163,"seo":132164,"stem":132165,"__hash__":132166},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131522,"toc":132150},[131523,131526,131530,131556,131590,131594,131598,131601,131643,131650,131660,131668,131670,131673,131676,131679,131686,131700,131704,131707,131736,131740,131743,131757,131761,131764,131792,131796,131799,131825,131829,131834,131867,131872,131900,131904,131921,131967,131972,132016,132033,132140,132148],[20,131524,131520],{"id":131525},"_10-css规范与学成在线案例",[30,131527,131529],{"id":131528},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[159,131531,131532,131538,131544,131550],{},[162,131533,131534,131537],{},[358,131535,131536],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[162,131539,131540,131543],{},[358,131541,131542],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[162,131545,131546,131549],{},[358,131547,131548],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[162,131551,131552,131555],{},[358,131553,131554],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[35,131557,131558],{"className":126603,"code":129967,"language":126605,"meta":40,"style":40},[42,131559,131560,131564,131570,131586],{"__ignoreMap":40},[45,131561,131562],{"class":47,"line":48},[45,131563,129974],{"class":267},[45,131565,131566,131568],{"class":47,"line":125},[45,131567,51692],{"class":51381},[45,131569,15655],{"class":51},[45,131571,131572,131574,131576,131578,131580,131582,131584],{"class":47,"line":1262},[45,131573,70977],{"class":257},[45,131575,51518],{"class":51},[45,131577,426],{"class":257},[45,131579,51573],{"class":93},[45,131581,51602],{"class":257},[45,131583,129995],{"class":257},[45,131585,1373],{"class":51},[45,131587,131588],{"class":47,"line":1277},[45,131589,1648],{"class":51},[30,131591,131593],{"id":131592},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[176,131595,131597],{"id":131596},"_1021-header头部制作","10.2.1 header头部制作",[1545,131599],{"style":126459,"src":131600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1214,131602,131603,131610,131617,131623,131630,131637],{},[162,131604,131605,131606,131609],{},"1号是版心盒子 ",[358,131607,131608],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[162,131611,131612,131613,131616],{},"版心盒子 里面包含 2号盒子 ",[358,131614,131615],{},"logo"," 图标",[162,131618,131619,131620,131622],{},"版心盒子 里面包含 3号盒子 ",[358,131621,53794],{}," 导航栏",[162,131624,131625,131626,131629],{},"版心盒子 里面包含 4号盒子 ",[358,131627,131628],{},"search"," 搜索框",[162,131631,131632,131633,131636],{},"版心盒子 里面包含 5号盒子 ",[358,131634,131635],{},"user"," 个人信息",[162,131638,131639,131640],{},"注意，要求里面的 ",[358,131641,131642],{},"4个子盒子 必须都浮动",[159,131644,131645],{},[162,131646,131647],{},[358,131648,131649],{},"导航栏注意点:",[10,131651,131652,131653,131656,131657],{},"实际开发中， ",[358,131654,131655],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[358,131658,131659],{},"用 li 包含链接(li+a)的做法",[1214,131661,131662,131665],{},[162,131663,131664],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[162,131666,131667],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[10,131669,9108],{},[10,131671,131672],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[10,131674,131675],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[10,131677,131678],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[159,131680,131681],{"start":125},[162,131682,131683],{},[358,131684,131685],{},"4号盒子search的细节：",[1214,131687,131688,131691,131694],{},[162,131689,131690],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[162,131692,131693],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[162,131695,131696,131699],{},[42,131697,131698],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[176,131701,131703],{"id":131702},"_1022-banner制作","10.2.2 banner制作",[1545,131705],{"style":126459,"src":131706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1214,131708,131709,131716,131722,131729],{},[162,131710,131711,131712,131715],{},"1号盒子是通栏的大盒子 ",[358,131713,131714],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[162,131717,131718,131719,131721],{},"2号盒子是版心 ",[358,131720,1002],{}," ， 要水平居中对齐",[162,131723,131724,131725,131728],{},"3号盒子版心内，左对齐 ",[358,131726,131727],{},"subnav"," 侧导航栏",[162,131730,131731,131732,131735],{},"4号盒子版心内，右对齐 ",[358,131733,131734],{},"course"," 课程",[176,131737,131739],{"id":131738},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1545,131741],{"style":126459,"src":131742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1214,131744,131745,131748,131751,131754],{},[162,131746,131747],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[162,131749,131750],{},"1号盒子是标题 H3 左侧浮动",[162,131752,131753],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[162,131755,131756],{},"3号盒子 右浮动 mod 修改",[176,131758,131760],{"id":131759},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1545,131762],{"style":126459,"src":131763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1214,131765,131766,131772,131779,131786,131789],{},[162,131767,131768,131769,131771],{},"1号盒子为最大的盒子 ",[358,131770,53795],{}," 版心水平居中对齐",[162,131773,131774,131775,131778],{},"2号盒子为上面部分 ",[358,131776,131777],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[162,131780,131781,131782,131785],{},"3号盒子为底下部分 ",[358,131783,131784],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[162,131787,131788],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[162,131790,131791],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[176,131793,131795],{"id":131794},"_1025-底部模块制作","10.2.5 底部模块制作",[1545,131797],{"style":126459,"src":131798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1214,131800,131801,131808,131811,131818],{},[162,131802,131803,131804,131807],{},"1号盒子通栏大盒子 底部 ",[358,131805,131806],{},"footer"," 给高度 底色是白色",[162,131809,131810],{},"2号盒子版心水平居中",[162,131812,131813,131814,131817],{},"3号盒子版权 ",[358,131815,131816],{},"copyright"," 左对齐",[162,131819,131820,131821,131824],{},"4号盒子 链接组 ",[358,131822,131823],{},"links"," 右对齐",[176,131826,131828],{"id":131827},"_1026-代码模块","10.2.6 代码模块",[159,131830,131831],{},[162,131832,131833],{},"html部分",[35,131835,131837],{"className":127350,"code":131836,"language":127352,"meta":40,"style":40},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[42,131838,131839],{"__ignoreMap":40},[45,131840,131841,131843,131845,131847,131849,131852,131855,131857,131860,131863,131865],{"class":47,"line":48},[45,131842,1117],{"class":51},[45,131844,13],{"class":51381},[45,131846,61138],{"class":2046},[45,131848,254],{"class":51},[45,131850,131851],{"class":313},"\"https:\u002F\u002Fexample.com\"",[45,131853,131854],{"class":2046}," target",[45,131856,254],{"class":51},[45,131858,131859],{"class":313},"\"_blank\"",[45,131861,131862],{"class":51},">链接文字\u003C\u002F",[45,131864,13],{"class":51381},[45,131866,51388],{"class":51},[159,131868,131869],{"start":125},[162,131870,131871],{},"css部分",[35,131873,131874],{"className":127350,"code":131836,"language":127352,"meta":40,"style":40},[42,131875,131876],{"__ignoreMap":40},[45,131877,131878,131880,131882,131884,131886,131888,131890,131892,131894,131896,131898],{"class":47,"line":48},[45,131879,1117],{"class":51},[45,131881,13],{"class":51381},[45,131883,61138],{"class":2046},[45,131885,254],{"class":51},[45,131887,131851],{"class":313},[45,131889,131854],{"class":2046},[45,131891,254],{"class":51},[45,131893,131859],{"class":313},[45,131895,131862],{"class":51},[45,131897,13],{"class":51381},[45,131899,51388],{"class":51},[176,131901,131903],{"id":131902},"_1027-收获","10.2.7 收获",[159,131905,131906,131909,131912,131915,131918],{},[162,131907,131908],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[162,131910,131911],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[162,131913,131914],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[162,131916,131917],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[162,131919,131920],{},"遗忘代码",[35,131922,131924],{"className":126603,"code":131923,"language":126605,"meta":40,"style":40},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[42,131925,131926,131948,131953,131963],{"__ignoreMap":40},[45,131927,131928,131930,131932,131934,131936,131938,131940,131942,131944,131946],{"class":47,"line":48},[45,131929,51692],{"class":51381},[45,131931,12518],{"class":51},[45,131933,10],{"class":51381},[45,131935,12518],{"class":51},[45,131937,20],{"class":51381},[45,131939,12518],{"class":51},[45,131941,1214],{"class":51381},[45,131943,12518],{"class":51},[45,131945,162],{"class":51381},[45,131947,15655],{"class":51},[45,131949,131950],{"class":47,"line":125},[45,131951,131952],{"class":267},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[45,131954,131955,131957,131959,131961],{"class":47,"line":1262},[45,131956,128219],{"class":257},[45,131958,51518],{"class":51},[45,131960,60950],{"class":257},[45,131962,1373],{"class":51},[45,131964,131965],{"class":47,"line":1277},[45,131966,1648],{"class":51},[159,131968,131969],{"start":1297},[162,131970,131971],{},"html引css的程序",[35,131973,131974],{"className":126603,"code":131923,"language":126605,"meta":40,"style":40},[42,131975,131976,131998,132002,132012],{"__ignoreMap":40},[45,131977,131978,131980,131982,131984,131986,131988,131990,131992,131994,131996],{"class":47,"line":48},[45,131979,51692],{"class":51381},[45,131981,12518],{"class":51},[45,131983,10],{"class":51381},[45,131985,12518],{"class":51},[45,131987,20],{"class":51381},[45,131989,12518],{"class":51},[45,131991,1214],{"class":51381},[45,131993,12518],{"class":51},[45,131995,162],{"class":51381},[45,131997,15655],{"class":51},[45,131999,132000],{"class":47,"line":125},[45,132001,131952],{"class":267},[45,132003,132004,132006,132008,132010],{"class":47,"line":1262},[45,132005,128219],{"class":257},[45,132007,51518],{"class":51},[45,132009,60950],{"class":257},[45,132011,1373],{"class":51},[45,132013,132014],{"class":47,"line":1277},[45,132015,1648],{"class":51},[159,132017,132018,132021,132024,132027,132030],{"start":1303},[162,132019,132020],{},"浮动的盒子不会有外边距合并问题",[162,132022,132023],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[162,132025,132026],{},"ctrl+g快速定位行；shift+alt多个光标",[162,132028,132029],{},"学习上方各个模块的选择器起名方法，以后就这样用",[162,132031,132032],{},"在写选择器时尽量写全一些，例如",[35,132034,132036],{"className":126603,"code":132035,"language":126605,"meta":40,"style":40},"\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",[42,132037,132038,132043,132059,132064,132079,132084,132099,132104,132119,132124],{"__ignoreMap":40},[45,132039,132040],{"class":47,"line":48},[45,132041,132042],{"class":267},"\u002F* 静态定位（默认） *\u002F\n",[45,132044,132045,132048,132050,132052,132054,132057],{"class":47,"line":125},[45,132046,132047],{"class":2046},".static",[45,132049,79888],{"class":51},[45,132051,128963],{"class":257},[45,132053,51518],{"class":51},[45,132055,132056],{"class":257},"static",[45,132058,129533],{"class":51},[45,132060,132061],{"class":47,"line":1262},[45,132062,132063],{"class":267},"\u002F* 相对定位 *\u002F\n",[45,132065,132066,132069,132071,132073,132075,132077],{"class":47,"line":1277},[45,132067,132068],{"class":2046},".relative",[45,132070,79888],{"class":51},[45,132072,128963],{"class":257},[45,132074,51518],{"class":51},[45,132076,54845],{"class":257},[45,132078,129533],{"class":51},[45,132080,132081],{"class":47,"line":1283},[45,132082,132083],{"class":267},"\u002F* 绝对定位 *\u002F\n",[45,132085,132086,132089,132091,132093,132095,132097],{"class":47,"line":1297},[45,132087,132088],{"class":2046},".absolute",[45,132090,79888],{"class":51},[45,132092,128963],{"class":257},[45,132094,51518],{"class":51},[45,132096,54912],{"class":257},[45,132098,129533],{"class":51},[45,132100,132101],{"class":47,"line":1303},[45,132102,132103],{"class":267},"\u002F* 固定定位 *\u002F\n",[45,132105,132106,132109,132111,132113,132115,132117],{"class":47,"line":1394},[45,132107,132108],{"class":2046},".fixed",[45,132110,79888],{"class":51},[45,132112,128963],{"class":257},[45,132114,51518],{"class":51},[45,132116,86314],{"class":257},[45,132118,129533],{"class":51},[45,132120,132121],{"class":47,"line":1400},[45,132122,132123],{"class":267},"\u002F* 粘性定位 *\u002F\n",[45,132125,132126,132129,132131,132133,132135,132138],{"class":47,"line":1412},[45,132127,132128],{"class":2046},".sticky",[45,132130,79888],{"class":51},[45,132132,128963],{"class":257},[45,132134,51518],{"class":51},[45,132136,132137],{"class":257},"sticky",[45,132139,129533],{"class":51},[159,132141,132142,132145],{"start":1700},[162,132143,132144],{},"一定要用好注释",[162,132146,132147],{},"浮动的盒子不会有外边距合并的问题",[121,132149,131491],{},{"title":40,"searchDepth":125,"depth":125,"links":132151},[132152,132153],{"id":131528,"depth":125,"text":131529},{"id":131592,"depth":125,"text":131593,"children":132154},[132155,132156,132157,132158,132159,132160,132161],{"id":131596,"depth":1262,"text":131597},{"id":131702,"depth":1262,"text":131703},{"id":131738,"depth":1262,"text":131739},{"id":131759,"depth":1262,"text":131760},{"id":131794,"depth":1262,"text":131795},{"id":131827,"depth":1262,"text":131828},{"id":131902,"depth":1262,"text":131903},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131520,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132168,"title":132169,"body":132170,"description":130,"extension":131,"meta":133656,"navigation":133,"path":133657,"seo":133658,"stem":133659,"__hash__":133660},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132171,"toc":133648},[132172,132175,132179,132183,132194,132198,132215,132259,132292,132295,132312,132315,132318,132362,132366,132370,132373,132376,132380,132383,132394,132457,132498,132501,132516,132570,132578,132581,132592,132646,132672,132675,132688,132742,132774,132828,132851,132905,132908,132911,132918,132972,132993,133047,133050,133053,133138,133146,133203,133226,133230,133233,133251,133255,133274,133328,133366,133370,133373,133376,133398,133402,133410,133413,133418,133429,133432,133436,133450,133494,133497,133501,133504,133509,133535,133540,133617,133620,133624,133627,133630,133633,133636,133639,133642,133645],[20,132173,132169],{"id":132174},"_11-传统布局与定位体系",[30,132176,132178],{"id":132177},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[176,132180,132182],{"id":132181},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1214,132184,132185,132188,132191],{},[162,132186,132187],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[162,132189,132190],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[162,132192,132193],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[176,132195,132197],{"id":132196},"_1112-浮动","11.1.2 浮动",[1214,132199,132200,132203,132206,132209,132212],{},[162,132201,132202],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[162,132204,132205],{},"浮动可以改变元素标签默认的排列方式",[162,132207,132208],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[162,132210,132211],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[162,132213,132214],{},"在使用行内块转换时盒子之间是有空隙的",[35,132216,132217],{"className":126603,"code":131069,"language":126605,"meta":40,"style":40},[42,132218,132219,132225,132235,132239,132245,132255],{"__ignoreMap":40},[45,132220,132221,132223],{"class":47,"line":48},[45,132222,131076],{"class":2046},[45,132224,15655],{"class":51},[45,132226,132227,132229,132231,132233],{"class":47,"line":125},[45,132228,131083],{"class":257},[45,132230,51518],{"class":51},[45,132232,23819],{"class":257},[45,132234,1373],{"class":51},[45,132236,132237],{"class":47,"line":1262},[45,132238,1648],{"class":51},[45,132240,132241,132243],{"class":47,"line":1277},[45,132242,131098],{"class":2046},[45,132244,15655],{"class":51},[45,132246,132247,132249,132251,132253],{"class":47,"line":1283},[45,132248,131083],{"class":257},[45,132250,51518],{"class":51},[45,132252,72603],{"class":257},[45,132254,1373],{"class":51},[45,132256,132257],{"class":47,"line":1297},[45,132258,1648],{"class":51},[346,132260,132261,132269],{},[349,132262,132263],{},[352,132264,132265,132267],{},[355,132266,127067],{"align":23819},[355,132268,27572],{"align":23819},[393,132270,132271,132278,132285],{},[352,132272,132273,132275],{},[398,132274,54818],{"align":23819},[398,132276,132277],{"align":23819},"元素不浮动（默认值）",[352,132279,132280,132282],{},[398,132281,23819],{"align":23819},[398,132283,132284],{"align":23819},"元素向左浮动",[352,132286,132287,132289],{},[398,132288,72603],{"align":23819},[398,132290,132291],{"align":23819},"元素向右浮动",[10,132293,132294],{},"浮动重点：",[1214,132296,132297,132300,132303,132306,132309],{},[162,132298,132299],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[162,132301,132302],{},"浮动的元素会一行内显示并且元素顶部对齐",[162,132304,132305],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[162,132307,132308],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[162,132310,132311],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[10,132313,132314],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[10,132316,132317],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[35,132319,132320],{"className":126603,"code":131069,"language":126605,"meta":40,"style":40},[42,132321,132322,132328,132338,132342,132348,132358],{"__ignoreMap":40},[45,132323,132324,132326],{"class":47,"line":48},[45,132325,131076],{"class":2046},[45,132327,15655],{"class":51},[45,132329,132330,132332,132334,132336],{"class":47,"line":125},[45,132331,131083],{"class":257},[45,132333,51518],{"class":51},[45,132335,23819],{"class":257},[45,132337,1373],{"class":51},[45,132339,132340],{"class":47,"line":1262},[45,132341,1648],{"class":51},[45,132343,132344,132346],{"class":47,"line":1277},[45,132345,131098],{"class":2046},[45,132347,15655],{"class":51},[45,132349,132350,132352,132354,132356],{"class":47,"line":1283},[45,132351,131083],{"class":257},[45,132353,51518],{"class":51},[45,132355,72603],{"class":257},[45,132357,1373],{"class":51},[45,132359,132360],{"class":47,"line":1297},[45,132361,1648],{"class":51},[176,132363,132365],{"id":132364},"_1113-定位","11.1.3 定位",[22081,132367,132369],{"id":132368},"_11131-使用场景","11.1.3.1 使用场景",[10,132371,132372],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[10,132374,132375],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22081,132377,132379],{"id":132378},"_11132-定位组成","11.1.3.2 定位组成",[10,132381,132382],{},"定位 = 定位模式 + 边偏移",[159,132384,132385],{},[162,132386,132387,132390,132391],{},[358,132388,132389],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[358,132392,132393],{},"定位模式",[35,132395,132397],{"className":126603,"code":132396,"language":126605,"meta":40,"style":40},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[42,132398,132399,132405,132419,132436,132453],{"__ignoreMap":40},[45,132400,132401,132403],{"class":47,"line":48},[45,132402,130451],{"class":2046},[45,132404,15655],{"class":51},[45,132406,132407,132410,132412,132414,132416],{"class":47,"line":125},[45,132408,132409],{"class":257},"  position",[45,132411,51518],{"class":51},[45,132413,54845],{"class":257},[45,132415,130466],{"class":51},[45,132417,132418],{"class":267},"\u002F* 定位模式 *\u002F\n",[45,132420,132421,132424,132426,132428,132430,132433],{"class":47,"line":1262},[45,132422,132423],{"class":257},"  top",[45,132425,51518],{"class":51},[45,132427,654],{"class":257},[45,132429,51573],{"class":93},[45,132431,132432],{"class":51},";           ",[45,132434,132435],{"class":267},"\u002F* 边偏移：上 *\u002F\n",[45,132437,132438,132441,132443,132445,132447,132450],{"class":47,"line":1277},[45,132439,132440],{"class":257},"  left",[45,132442,51518],{"class":51},[45,132444,907],{"class":257},[45,132446,51573],{"class":93},[45,132448,132449],{"class":51},";          ",[45,132451,132452],{"class":267},"\u002F* 边偏移：左 *\u002F\n",[45,132454,132455],{"class":47,"line":1283},[45,132456,1648],{"class":51},[346,132458,132459,132468],{},[349,132460,132461],{},[352,132462,132463,132465],{},[355,132464,361],{"align":23819},[355,132466,132467],{"align":23819},"语义",[393,132469,132470,132477,132484,132491],{},[352,132471,132472,132474],{},[398,132473,132056],{"align":23819},[398,132475,132476],{"align":23819},"静态定位",[352,132478,132479,132481],{},[398,132480,54845],{"align":23819},[398,132482,132483],{"align":23819},"相对定位",[352,132485,132486,132488],{},[398,132487,54912],{"align":23819},[398,132489,132490],{"align":23819},"绝对定位",[352,132492,132493,132495],{},[398,132494,86314],{"align":23819},[398,132496,132497],{"align":23819},"固定定位",[10,132499,132500],{},"（1）静态定位：",[1214,132502,132503,132514],{},[162,132504,132505,132506,132509,132510,132513],{},"静态定位是元素的 ",[358,132507,132508],{},"默认定位方式"," ， ",[358,132511,132512],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[162,132515,5264],{},[35,132517,132518],{"className":126603,"code":132396,"language":126605,"meta":40,"style":40},[42,132519,132520,132526,132538,132552,132566],{"__ignoreMap":40},[45,132521,132522,132524],{"class":47,"line":48},[45,132523,130451],{"class":2046},[45,132525,15655],{"class":51},[45,132527,132528,132530,132532,132534,132536],{"class":47,"line":125},[45,132529,132409],{"class":257},[45,132531,51518],{"class":51},[45,132533,54845],{"class":257},[45,132535,130466],{"class":51},[45,132537,132418],{"class":267},[45,132539,132540,132542,132544,132546,132548,132550],{"class":47,"line":1262},[45,132541,132423],{"class":257},[45,132543,51518],{"class":51},[45,132545,654],{"class":257},[45,132547,51573],{"class":93},[45,132549,132432],{"class":51},[45,132551,132435],{"class":267},[45,132553,132554,132556,132558,132560,132562,132564],{"class":47,"line":1277},[45,132555,132440],{"class":257},[45,132557,51518],{"class":51},[45,132559,907],{"class":257},[45,132561,51573],{"class":93},[45,132563,132449],{"class":51},[45,132565,132452],{"class":267},[45,132567,132568],{"class":47,"line":1283},[45,132569,1648],{"class":51},[1214,132571,132572,132575],{},[162,132573,132574],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[162,132576,132577],{},"静态定位在布局时我们几乎不用的",[10,132579,132580],{},"（2）相对定位",[1214,132582,132583,132590],{},[162,132584,132585,132586,132589],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[358,132587,132588],{},"原来的位置"," 来说的（自恋型）",[162,132591,5264],{},[35,132593,132594],{"className":126603,"code":132396,"language":126605,"meta":40,"style":40},[42,132595,132596,132602,132614,132628,132642],{"__ignoreMap":40},[45,132597,132598,132600],{"class":47,"line":48},[45,132599,130451],{"class":2046},[45,132601,15655],{"class":51},[45,132603,132604,132606,132608,132610,132612],{"class":47,"line":125},[45,132605,132409],{"class":257},[45,132607,51518],{"class":51},[45,132609,54845],{"class":257},[45,132611,130466],{"class":51},[45,132613,132418],{"class":267},[45,132615,132616,132618,132620,132622,132624,132626],{"class":47,"line":1262},[45,132617,132423],{"class":257},[45,132619,51518],{"class":51},[45,132621,654],{"class":257},[45,132623,51573],{"class":93},[45,132625,132432],{"class":51},[45,132627,132435],{"class":267},[45,132629,132630,132632,132634,132636,132638,132640],{"class":47,"line":1277},[45,132631,132440],{"class":257},[45,132633,51518],{"class":51},[45,132635,907],{"class":257},[45,132637,51573],{"class":93},[45,132639,132449],{"class":51},[45,132641,132452],{"class":267},[45,132643,132644],{"class":47,"line":1283},[45,132645,1648],{"class":51},[1214,132647,132648],{},[162,132649,132650,132651,132653,132654,132656,132657,132660,132661,132664,132665,132667,132668,132671],{},"相对定位的特点：",[53797,132652],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53797,132655],{},"  ② ",[358,132658,132659],{},"原来"," 在标准流的 ",[358,132662,132663],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53797,132666],{},"  ③因此， ",[358,132669,132670],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[10,132673,132674],{},"（3）绝对定位",[1214,132676,132677,132686],{},[162,132678,132679,132681,132682,132685],{},[358,132680,132490],{}," 是元素在移动位置的时候，是相对于它 ",[358,132683,132684],{},"祖先元素"," 来说的（拼爹型）",[162,132687,5264],{},[35,132689,132690],{"className":126603,"code":132396,"language":126605,"meta":40,"style":40},[42,132691,132692,132698,132710,132724,132738],{"__ignoreMap":40},[45,132693,132694,132696],{"class":47,"line":48},[45,132695,130451],{"class":2046},[45,132697,15655],{"class":51},[45,132699,132700,132702,132704,132706,132708],{"class":47,"line":125},[45,132701,132409],{"class":257},[45,132703,51518],{"class":51},[45,132705,54845],{"class":257},[45,132707,130466],{"class":51},[45,132709,132418],{"class":267},[45,132711,132712,132714,132716,132718,132720,132722],{"class":47,"line":1262},[45,132713,132423],{"class":257},[45,132715,51518],{"class":51},[45,132717,654],{"class":257},[45,132719,51573],{"class":93},[45,132721,132432],{"class":51},[45,132723,132435],{"class":267},[45,132725,132726,132728,132730,132732,132734,132736],{"class":47,"line":1277},[45,132727,132440],{"class":257},[45,132729,51518],{"class":51},[45,132731,907],{"class":257},[45,132733,51573],{"class":93},[45,132735,132449],{"class":51},[45,132737,132452],{"class":267},[45,132739,132740],{"class":47,"line":1283},[45,132741,1648],{"class":51},[1214,132743,132744,132759,132768,132771],{},[162,132745,132746,132747,132749,132750,132752,132753,132755,132756,132758],{},"绝对定位的特点：",[53797,132748],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53797,132751],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53797,132754],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53797,132757],{},"  (4)固定定位",[162,132760,132761,132763,132764,132767],{},[358,132762,132497],{}," 是元素 ",[358,132765,132766],{},"固定于浏览器可视区的位置"," 。（认死理型）",[162,132769,132770],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[162,132772,132773],{},"语法:",[35,132775,132776],{"className":126603,"code":132396,"language":126605,"meta":40,"style":40},[42,132777,132778,132784,132796,132810,132824],{"__ignoreMap":40},[45,132779,132780,132782],{"class":47,"line":48},[45,132781,130451],{"class":2046},[45,132783,15655],{"class":51},[45,132785,132786,132788,132790,132792,132794],{"class":47,"line":125},[45,132787,132409],{"class":257},[45,132789,51518],{"class":51},[45,132791,54845],{"class":257},[45,132793,130466],{"class":51},[45,132795,132418],{"class":267},[45,132797,132798,132800,132802,132804,132806,132808],{"class":47,"line":1262},[45,132799,132423],{"class":257},[45,132801,51518],{"class":51},[45,132803,654],{"class":257},[45,132805,51573],{"class":93},[45,132807,132432],{"class":51},[45,132809,132435],{"class":267},[45,132811,132812,132814,132816,132818,132820,132822],{"class":47,"line":1277},[45,132813,132440],{"class":257},[45,132815,51518],{"class":51},[45,132817,907],{"class":257},[45,132819,51573],{"class":93},[45,132821,132449],{"class":51},[45,132823,132452],{"class":267},[45,132825,132826],{"class":47,"line":1283},[45,132827,1648],{"class":51},[1214,132829,132830,132839],{},[162,132831,132832,132833,132835,132836,132838],{},"特点:",[53797,132834],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53797,132837],{},"  ②固定定位不再占有原先的位置,完全脱标",[162,132840,132841,132842,132844,132845,132847,132848,132850],{},"固定在版心位置的方法:",[53797,132843],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53797,132846],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53797,132849],{},"  实例：",[35,132852,132853],{"className":126603,"code":132396,"language":126605,"meta":40,"style":40},[42,132854,132855,132861,132873,132887,132901],{"__ignoreMap":40},[45,132856,132857,132859],{"class":47,"line":48},[45,132858,130451],{"class":2046},[45,132860,15655],{"class":51},[45,132862,132863,132865,132867,132869,132871],{"class":47,"line":125},[45,132864,132409],{"class":257},[45,132866,51518],{"class":51},[45,132868,54845],{"class":257},[45,132870,130466],{"class":51},[45,132872,132418],{"class":267},[45,132874,132875,132877,132879,132881,132883,132885],{"class":47,"line":1262},[45,132876,132423],{"class":257},[45,132878,51518],{"class":51},[45,132880,654],{"class":257},[45,132882,51573],{"class":93},[45,132884,132432],{"class":51},[45,132886,132435],{"class":267},[45,132888,132889,132891,132893,132895,132897,132899],{"class":47,"line":1277},[45,132890,132440],{"class":257},[45,132892,51518],{"class":51},[45,132894,907],{"class":257},[45,132896,51573],{"class":93},[45,132898,132449],{"class":51},[45,132900,132452],{"class":267},[45,132902,132903],{"class":47,"line":1283},[45,132904,1648],{"class":51},[1545,132906],{"style":126459,"src":132907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[10,132909,132910],{},"(5)粘性定位",[1214,132912,132913,132916],{},[162,132914,132915],{},"粘性定位可以被认为是相对定位和固定定位的混合",[162,132917,5264],{},[35,132919,132920],{"className":126603,"code":132396,"language":126605,"meta":40,"style":40},[42,132921,132922,132928,132940,132954,132968],{"__ignoreMap":40},[45,132923,132924,132926],{"class":47,"line":48},[45,132925,130451],{"class":2046},[45,132927,15655],{"class":51},[45,132929,132930,132932,132934,132936,132938],{"class":47,"line":125},[45,132931,132409],{"class":257},[45,132933,51518],{"class":51},[45,132935,54845],{"class":257},[45,132937,130466],{"class":51},[45,132939,132418],{"class":267},[45,132941,132942,132944,132946,132948,132950,132952],{"class":47,"line":1262},[45,132943,132423],{"class":257},[45,132945,51518],{"class":51},[45,132947,654],{"class":257},[45,132949,51573],{"class":93},[45,132951,132432],{"class":51},[45,132953,132435],{"class":267},[45,132955,132956,132958,132960,132962,132964,132966],{"class":47,"line":1277},[45,132957,132440],{"class":257},[45,132959,51518],{"class":51},[45,132961,907],{"class":257},[45,132963,51573],{"class":93},[45,132965,132449],{"class":51},[45,132967,132452],{"class":267},[45,132969,132970],{"class":47,"line":1283},[45,132971,1648],{"class":51},[1214,132973,132974],{},[162,132975,132976,132977,132979,132980,132982,132983,132985,132986,132989,132990,132992],{},"粘性定位的特点：",[53797,132978],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53797,132981],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53797,132984],{},"  ③必须添加 top 、left、right、bottom ",[358,132987,132988],{},"其中一个"," 才有效",[53797,132991],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[35,132994,132995],{"className":126603,"code":132396,"language":126605,"meta":40,"style":40},[42,132996,132997,133003,133015,133029,133043],{"__ignoreMap":40},[45,132998,132999,133001],{"class":47,"line":48},[45,133000,130451],{"class":2046},[45,133002,15655],{"class":51},[45,133004,133005,133007,133009,133011,133013],{"class":47,"line":125},[45,133006,132409],{"class":257},[45,133008,51518],{"class":51},[45,133010,54845],{"class":257},[45,133012,130466],{"class":51},[45,133014,132418],{"class":267},[45,133016,133017,133019,133021,133023,133025,133027],{"class":47,"line":1262},[45,133018,132423],{"class":257},[45,133020,51518],{"class":51},[45,133022,654],{"class":257},[45,133024,51573],{"class":93},[45,133026,132432],{"class":51},[45,133028,132435],{"class":267},[45,133030,133031,133033,133035,133037,133039,133041],{"class":47,"line":1277},[45,133032,132440],{"class":257},[45,133034,51518],{"class":51},[45,133036,907],{"class":257},[45,133038,51573],{"class":93},[45,133040,132449],{"class":51},[45,133042,132452],{"class":267},[45,133044,133045],{"class":47,"line":1283},[45,133046,1648],{"class":51},[1545,133048],{"style":126459,"src":133049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[10,133051,133052],{},"(6)总结",[346,133054,133055,133070],{},[349,133056,133057],{},[352,133058,133059,133061,133064,133067],{},[355,133060,132393],{"align":23819},[355,133062,133063],{"align":23819},"是否脱标",[355,133065,133066],{"align":23819},"移动位置",[355,133068,133069],{"align":23819},"是否常用",[393,133071,133072,133085,133099,133113,133126],{},[352,133073,133074,133077,133079,133082],{},[398,133075,133076],{"align":23819},"Static 静态定位",[398,133078,104729],{"align":23819},[398,133080,133081],{"align":23819},"不能使用边偏移",[398,133083,133084],{"align":23819},"很少",[352,133086,133087,133090,133093,133096],{},[398,133088,133089],{"align":23819},"Relative 相对定位",[398,133091,133092],{"align":23819},"否(占有位置)",[398,133094,133095],{"align":23819},"相对于自身位置移动",[398,133097,133098],{"align":23819},"基本单独使用",[352,133100,133101,133104,133107,133110],{},[398,133102,133103],{"align":23819},"Absolute 绝对定位",[398,133105,133106],{"align":23819},"是(不占有位置)",[398,133108,133109],{"align":23819},"带有定位的父级",[398,133111,133112],{"align":23819},"要和定位父级元素搭配使用",[352,133114,133115,133118,133120,133123],{},[398,133116,133117],{"align":23819},"Fixed 固定定位",[398,133119,133106],{"align":23819},[398,133121,133122],{"align":23819},"浏览器可视区",[398,133124,133125],{"align":23819},"单独使用,不需要父级",[352,133127,133128,133131,133133,133135],{},[398,133129,133130],{"align":23819},"Sticky 粘性定位",[398,133132,133092],{"align":23819},[398,133134,133122],{"align":23819},[398,133136,133137],{"align":23819},"当前阶段少",[159,133139,133140],{"start":125},[162,133141,133142,133145],{},[358,133143,133144],{},"边偏移"," 则决定了该元素的最终位置",[346,133147,133148,133159],{},[349,133149,133150],{},[352,133151,133152,133155,133157],{},[355,133153,133154],{"align":23819},"边偏移属性",[355,133156,27575],{"align":23819},[355,133158,27572],{"align":23819},[393,133160,133161,133172,133183,133193],{},[352,133162,133163,133166,133169],{},[398,133164,133165],{"align":23819},"top",[398,133167,133168],{"align":23819},"top: 80px;",[398,133170,133171],{"align":23819},"顶端偏移量，定义元素相对于父元素上边线的距离",[352,133173,133174,133177,133180],{},[398,133175,133176],{"align":23819},"bottom",[398,133178,133179],{"align":23819},"bottom: 80px ;",[398,133181,133182],{"align":23819},"底部偏移量，定义元素相对于其父元素下边线的距离",[352,133184,133185,133187,133190],{},[398,133186,23819],{"align":23819},[398,133188,133189],{"align":23819},"left: 80px ;",[398,133191,133192],{"align":23819},"左侧偏移量，定义元素相对于其父元素左边线的距离",[352,133194,133195,133197,133200],{},[398,133196,72603],{"align":23819},[398,133198,133199],{"align":23819},"right: 80px ;",[398,133201,133202],{"align":23819},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1214,133204,133205],{},[162,133206,9108,133207,133209,133210,133212,133213,133215,133216,133219,133220,133222,133223,133225],{},[53797,133208],{},"  ① ",[358,133211,133144],{}," 需要和 ",[358,133214,132393],{}," 联合使用， ",[358,133217,133218],{},"单独使用无效"," ；",[53797,133221],{},"  ②top和bottom不要同时使用",[53797,133224],{},"  ③left和right不要同时使用",[22081,133227,133229],{"id":133228},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[10,133231,133232],{},"子级是绝对定位的话，父级要用相对定位",[1214,133234,133235,133238,133241,133244],{},[162,133236,133237],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[162,133239,133240],{},"父盒子需要加定位限制子盒子在父盒子内显示",[162,133242,133243],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[162,133245,133246,133247,133250],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[358,133248,133249],{},"子绝父绝"," 也会遇到",[22081,133252,133254],{"id":133253},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1214,133256,133257,133272],{},[162,133258,133259,133260,133263,133264,133267,133268,133271],{},"在使用 ",[358,133261,133262],{},"定位"," 布局时，可能会 ",[358,133265,133266],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[358,133269,133270],{},"z-index"," 来控制盒子的前后次序 (z轴)",[162,133273,5264],{},[35,133275,133276],{"className":126603,"code":132396,"language":126605,"meta":40,"style":40},[42,133277,133278,133284,133296,133310,133324],{"__ignoreMap":40},[45,133279,133280,133282],{"class":47,"line":48},[45,133281,130451],{"class":2046},[45,133283,15655],{"class":51},[45,133285,133286,133288,133290,133292,133294],{"class":47,"line":125},[45,133287,132409],{"class":257},[45,133289,51518],{"class":51},[45,133291,54845],{"class":257},[45,133293,130466],{"class":51},[45,133295,132418],{"class":267},[45,133297,133298,133300,133302,133304,133306,133308],{"class":47,"line":1262},[45,133299,132423],{"class":257},[45,133301,51518],{"class":51},[45,133303,654],{"class":257},[45,133305,51573],{"class":93},[45,133307,132432],{"class":51},[45,133309,132435],{"class":267},[45,133311,133312,133314,133316,133318,133320,133322],{"class":47,"line":1277},[45,133313,132440],{"class":257},[45,133315,51518],{"class":51},[45,133317,907],{"class":257},[45,133319,51573],{"class":93},[45,133321,132449],{"class":51},[45,133323,132452],{"class":267},[45,133325,133326],{"class":47,"line":1283},[45,133327,1648],{"class":51},[1214,133329,133330],{},[162,133331,133332,133333,133209,133335,133337,133338,127766,133341,82620,133344,133346,133347,133349,133350,133353,133354,133219,133357,133359,133360,133363,133365],{},"z-index的特性",[53797,133334],{},[358,133336,127067],{}," ： ",[358,133339,133340],{},"正整数",[358,133342,133343],{},"负整数",[358,133345,400],{}," ，默认值是 0，数值越大，盒子越靠上；",[53797,133348],{},"  ②如果 ",[358,133351,133352],{},"属性值相同"," ，则按照书写顺序， ",[358,133355,133356],{},"后来居上",[53797,133358],{},"  ③数字后面 ",[358,133361,133362],{},"不能加单位",[53797,133364],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22081,133367,133369],{"id":133368},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[10,133371,133372],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[10,133374,133375],{},"方法:",[1214,133377,133378,133388],{},[162,133379,133380,133381,133384,133385],{},"left: 50%; 让 ",[358,133382,133383],{},"盒子的左侧"," 移动到 ",[358,133386,133387],{},"父级元素的水平中心位置",[162,133389,133390,133391,133394,133395],{},"margin-left: -100px; 让盒子 ",[358,133392,133393],{},"向左"," 移动 ",[358,133396,133397],{},"自身宽度的一半",[22081,133399,133401],{"id":133400},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[159,133403,133404,133407],{},[162,133405,133406],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[162,133408,133409],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[10,133411,133412],{},"也就是说绝对定位和固定定位和浮动类似",[159,133414,133415],{"start":1262},[162,133416,133417],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1214,133419,133420,133423,133426],{},[162,133421,133422],{},"可以用inline-block 转换为行内块",[162,133424,133425],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[162,133427,133428],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[10,133430,133431],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22081,133433,133435],{"id":133434},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[159,133437,133438,133441,133444,133447],{},[162,133439,133440],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[162,133442,133443],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[162,133445,133446],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[162,133448,133449],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[35,133451,133452],{"className":126603,"code":131069,"language":126605,"meta":40,"style":40},[42,133453,133454,133460,133470,133474,133480,133490],{"__ignoreMap":40},[45,133455,133456,133458],{"class":47,"line":48},[45,133457,131076],{"class":2046},[45,133459,15655],{"class":51},[45,133461,133462,133464,133466,133468],{"class":47,"line":125},[45,133463,131083],{"class":257},[45,133465,51518],{"class":51},[45,133467,23819],{"class":257},[45,133469,1373],{"class":51},[45,133471,133472],{"class":47,"line":1262},[45,133473,1648],{"class":51},[45,133475,133476,133478],{"class":47,"line":1277},[45,133477,131098],{"class":2046},[45,133479,15655],{"class":51},[45,133481,133482,133484,133486,133488],{"class":47,"line":1283},[45,133483,131083],{"class":257},[45,133485,51518],{"class":51},[45,133487,72603],{"class":257},[45,133489,1373],{"class":51},[45,133491,133492],{"class":47,"line":1297},[45,133493,1648],{"class":51},[1545,133495],{"style":126459,"src":133496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22081,133498,133500],{"id":133499},"_11138-轮播图","11.1.3.8 轮播图",[1545,133502],{"style":126459,"src":133503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[159,133505,133506],{},[162,133507,133508],{},"制作顺序:",[1214,133510,133511,133514,133517,133526],{},[162,133512,133513],{},"大盒子我们类名为： tb-promo 淘宝广告",[162,133515,133516],{},"里面先放一张图片",[162,133518,133519,133520,133522,133523,133525],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53797,133521],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53797,133524],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[162,133527,133528,133529,133531,133532,133534],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53797,133530],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53797,133533],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[159,133536,133537],{"start":125},[162,133538,133539],{},"代码模块",[35,133541,133543],{"className":126603,"code":133542,"language":126605,"meta":40,"style":40},"\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",[42,133544,133545,133550,133557,133567,133577,133587,133591,133596,133603,133613],{"__ignoreMap":40},[45,133546,133547],{"class":47,"line":48},[45,133548,133549],{"class":267},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[45,133551,133552,133555],{"class":47,"line":125},[45,133553,133554],{"class":2046},".son",[45,133556,15655],{"class":51},[45,133558,133559,133561,133563,133565],{"class":47,"line":1262},[45,133560,132409],{"class":257},[45,133562,51518],{"class":51},[45,133564,54912],{"class":257},[45,133566,1373],{"class":51},[45,133568,133569,133571,133573,133575],{"class":47,"line":1277},[45,133570,132423],{"class":257},[45,133572,51518],{"class":51},[45,133574,400],{"class":257},[45,133576,1373],{"class":51},[45,133578,133579,133581,133583,133585],{"class":47,"line":1283},[45,133580,132440],{"class":257},[45,133582,51518],{"class":51},[45,133584,400],{"class":257},[45,133586,1373],{"class":51},[45,133588,133589],{"class":47,"line":1297},[45,133590,1648],{"class":51},[45,133592,133593],{"class":47,"line":1303},[45,133594,133595],{"class":267},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[45,133597,133598,133601],{"class":47,"line":1394},[45,133599,133600],{"class":2046},".father",[45,133602,15655],{"class":51},[45,133604,133605,133607,133609,133611],{"class":47,"line":1400},[45,133606,132409],{"class":257},[45,133608,51518],{"class":51},[45,133610,54845],{"class":257},[45,133612,1373],{"class":51},[45,133614,133615],{"class":47,"line":1412},[45,133616,1648],{"class":51},[10,133618,133619],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[176,133621,133623],{"id":133622},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1545,133625],{"style":126459,"src":133626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[10,133628,133629],{},"✨ 黄金口诀：",[10,133631,133632],{},"\"TOP正下负上，LEFT正右负左\"",[10,133634,133635],{},"\"RIGHT正左负右，BOTTOM正上负下",[10,133637,133638],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[10,133640,133641],{},"✨ 简单记：",[10,133643,133644],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[121,133646,133647],{},"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":40,"searchDepth":125,"depth":125,"links":133649},[133650],{"id":132177,"depth":125,"text":132178,"children":133651},[133652,133653,133654,133655],{"id":132181,"depth":1262,"text":132182},{"id":132196,"depth":1262,"text":132197},{"id":132364,"depth":1262,"text":132365},{"id":133622,"depth":1262,"text":133623},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132169,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133662,"title":133663,"body":133664,"description":130,"extension":131,"meta":135087,"navigation":133,"path":135088,"seo":135089,"stem":135090,"__hash__":135091},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133665,"toc":135066},[133666,133669,133673,133681,133685,133690,133698,133710,133714,133719,133727,133738,133742,133747,133788,133796,133800,133803,133806,133809,133903,133906,134000,134003,134097,134100,134103,134138,134141,134144,134174,134177,134180,134183,134186,134189,134192,134195,134265,134268,134272,134276,134317,134321,134327,134330,134333,134337,134340,134343,134346,134427,134430,134433,134437,134441,134444,134447,134450,134453,134456,134462,134471,134475,134494,134498,134508,134511,134514,134517,134520,134523,134526,134529,134532,134541,134545,134554,134557,134562,134615,134620,134786,134789,134792,134797,134800,134803,134806,134809,134814,134962,134965,134968,134973,134976,134981,135015,135018,135021,135025,135028,135035,135038,135041,135044,135047,135050,135053,135056,135060,135063],[20,133667,133663],{"id":133668},"_12-显示隐藏与图形资源",[30,133670,133672],{"id":133671},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1214,133674,133675,133678],{},[162,133676,133677],{},"目的:让一个元素在页面中消失或者显示出来",[162,133679,133680],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[176,133682,133684],{"id":133683},"_1211-display-显示","12.1.1 display 显示",[159,133686,133687],{},[162,133688,133689],{},"display 设置或检索对象是否及如何显示",[1214,133691,133692,133695],{},[162,133693,133694],{},"display: none;隐藏对象",[162,133696,133697],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[159,133699,133700,133707],{"start":125},[162,133701,133702,133703,133706],{},"特点： display 隐藏元素后， ",[358,133704,133705],{},"不再占"," 有原来的位置",[162,133708,133709],{},"在js中使用非常的广泛",[176,133711,133713],{"id":133712},"_1212-visibility可见性","12.1.2 visibility可见性",[159,133715,133716],{},[162,133717,133718],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1214,133720,133721,133724],{},[162,133722,133723],{},"visibility： visible；元素可见",[162,133725,133726],{},"visibility：hidden；元素隐藏",[159,133728,133729,133732,133735],{"start":125},[162,133730,133731],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[162,133733,133734],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[162,133736,133737],{},"隐藏后继续占有原有位置",[176,133739,133741],{"id":133740},"_1213-overflow溢出","12.1.3 overflow溢出",[1214,133743,133744],{},[162,133745,133746],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[346,133748,133749,133757],{},[349,133750,133751],{},[352,133752,133753,133755],{},[355,133754,127067],{"align":23819},[355,133756,27572],{"align":23819},[393,133758,133759,133767,133774,133781],{},[352,133760,133761,133764],{},[398,133762,133763],{"align":23819},"visible",[398,133765,133766],{"align":23819},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[352,133768,133769,133771],{},[398,133770,61795],{"align":23819},[398,133772,133773],{"align":23819},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[352,133775,133776,133778],{},[398,133777,129023],{"align":23819},[398,133779,133780],{"align":23819},"不管超出内容否，总是显示滚动条",[352,133782,133783,133785],{},[398,133784,72744],{"align":23819},[398,133786,133787],{"align":23819},"超出自动显示滚动条，不超出不显示滚动条",[1214,133789,133790,133793],{},[162,133791,133792],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[162,133794,133795],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[176,133797,133799],{"id":133798},"_1214-案例收获","12.1.4 案例收获",[1545,133801],{"style":126459,"src":133802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[10,133804,133805],{},"问题：没做出来动态效果，使用hover没实现",[10,133807,133808],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[35,133810,133811],{"className":126603,"code":132035,"language":126605,"meta":40,"style":40},[42,133812,133813,133817,133831,133835,133849,133853,133867,133871,133885,133889],{"__ignoreMap":40},[45,133814,133815],{"class":47,"line":48},[45,133816,132042],{"class":267},[45,133818,133819,133821,133823,133825,133827,133829],{"class":47,"line":125},[45,133820,132047],{"class":2046},[45,133822,79888],{"class":51},[45,133824,128963],{"class":257},[45,133826,51518],{"class":51},[45,133828,132056],{"class":257},[45,133830,129533],{"class":51},[45,133832,133833],{"class":47,"line":1262},[45,133834,132063],{"class":267},[45,133836,133837,133839,133841,133843,133845,133847],{"class":47,"line":1277},[45,133838,132068],{"class":2046},[45,133840,79888],{"class":51},[45,133842,128963],{"class":257},[45,133844,51518],{"class":51},[45,133846,54845],{"class":257},[45,133848,129533],{"class":51},[45,133850,133851],{"class":47,"line":1283},[45,133852,132083],{"class":267},[45,133854,133855,133857,133859,133861,133863,133865],{"class":47,"line":1297},[45,133856,132088],{"class":2046},[45,133858,79888],{"class":51},[45,133860,128963],{"class":257},[45,133862,51518],{"class":51},[45,133864,54912],{"class":257},[45,133866,129533],{"class":51},[45,133868,133869],{"class":47,"line":1303},[45,133870,132103],{"class":267},[45,133872,133873,133875,133877,133879,133881,133883],{"class":47,"line":1394},[45,133874,132108],{"class":2046},[45,133876,79888],{"class":51},[45,133878,128963],{"class":257},[45,133880,51518],{"class":51},[45,133882,86314],{"class":257},[45,133884,129533],{"class":51},[45,133886,133887],{"class":47,"line":1400},[45,133888,132123],{"class":267},[45,133890,133891,133893,133895,133897,133899,133901],{"class":47,"line":1412},[45,133892,132128],{"class":2046},[45,133894,79888],{"class":51},[45,133896,128963],{"class":257},[45,133898,51518],{"class":51},[45,133900,132137],{"class":257},[45,133902,129533],{"class":51},[10,133904,133905],{},"完整代码：",[35,133907,133908],{"className":126603,"code":132035,"language":126605,"meta":40,"style":40},[42,133909,133910,133914,133928,133932,133946,133950,133964,133968,133982,133986],{"__ignoreMap":40},[45,133911,133912],{"class":47,"line":48},[45,133913,132042],{"class":267},[45,133915,133916,133918,133920,133922,133924,133926],{"class":47,"line":125},[45,133917,132047],{"class":2046},[45,133919,79888],{"class":51},[45,133921,128963],{"class":257},[45,133923,51518],{"class":51},[45,133925,132056],{"class":257},[45,133927,129533],{"class":51},[45,133929,133930],{"class":47,"line":1262},[45,133931,132063],{"class":267},[45,133933,133934,133936,133938,133940,133942,133944],{"class":47,"line":1277},[45,133935,132068],{"class":2046},[45,133937,79888],{"class":51},[45,133939,128963],{"class":257},[45,133941,51518],{"class":51},[45,133943,54845],{"class":257},[45,133945,129533],{"class":51},[45,133947,133948],{"class":47,"line":1283},[45,133949,132083],{"class":267},[45,133951,133952,133954,133956,133958,133960,133962],{"class":47,"line":1297},[45,133953,132088],{"class":2046},[45,133955,79888],{"class":51},[45,133957,128963],{"class":257},[45,133959,51518],{"class":51},[45,133961,54912],{"class":257},[45,133963,129533],{"class":51},[45,133965,133966],{"class":47,"line":1303},[45,133967,132103],{"class":267},[45,133969,133970,133972,133974,133976,133978,133980],{"class":47,"line":1394},[45,133971,132108],{"class":2046},[45,133973,79888],{"class":51},[45,133975,128963],{"class":257},[45,133977,51518],{"class":51},[45,133979,86314],{"class":257},[45,133981,129533],{"class":51},[45,133983,133984],{"class":47,"line":1400},[45,133985,132123],{"class":267},[45,133987,133988,133990,133992,133994,133996,133998],{"class":47,"line":1412},[45,133989,132128],{"class":2046},[45,133991,79888],{"class":51},[45,133993,128963],{"class":257},[45,133995,51518],{"class":51},[45,133997,132137],{"class":257},[45,133999,129533],{"class":51},[10,134001,134002],{},"分布思路重点详解：",[35,134004,134005],{"className":126603,"code":132035,"language":126605,"meta":40,"style":40},[42,134006,134007,134011,134025,134029,134043,134047,134061,134065,134079,134083],{"__ignoreMap":40},[45,134008,134009],{"class":47,"line":48},[45,134010,132042],{"class":267},[45,134012,134013,134015,134017,134019,134021,134023],{"class":47,"line":125},[45,134014,132047],{"class":2046},[45,134016,79888],{"class":51},[45,134018,128963],{"class":257},[45,134020,51518],{"class":51},[45,134022,132056],{"class":257},[45,134024,129533],{"class":51},[45,134026,134027],{"class":47,"line":1262},[45,134028,132063],{"class":267},[45,134030,134031,134033,134035,134037,134039,134041],{"class":47,"line":1277},[45,134032,132068],{"class":2046},[45,134034,79888],{"class":51},[45,134036,128963],{"class":257},[45,134038,51518],{"class":51},[45,134040,54845],{"class":257},[45,134042,129533],{"class":51},[45,134044,134045],{"class":47,"line":1283},[45,134046,132083],{"class":267},[45,134048,134049,134051,134053,134055,134057,134059],{"class":47,"line":1297},[45,134050,132088],{"class":2046},[45,134052,79888],{"class":51},[45,134054,128963],{"class":257},[45,134056,51518],{"class":51},[45,134058,54912],{"class":257},[45,134060,129533],{"class":51},[45,134062,134063],{"class":47,"line":1303},[45,134064,132103],{"class":267},[45,134066,134067,134069,134071,134073,134075,134077],{"class":47,"line":1394},[45,134068,132108],{"class":2046},[45,134070,79888],{"class":51},[45,134072,128963],{"class":257},[45,134074,51518],{"class":51},[45,134076,86314],{"class":257},[45,134078,129533],{"class":51},[45,134080,134081],{"class":47,"line":1400},[45,134082,132123],{"class":267},[45,134084,134085,134087,134089,134091,134093,134095],{"class":47,"line":1412},[45,134086,132128],{"class":2046},[45,134088,79888],{"class":51},[45,134090,128963],{"class":257},[45,134092,51518],{"class":51},[45,134094,132137],{"class":257},[45,134096,129533],{"class":51},[1545,134098],{"style":126459,"src":134099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[10,134101,134102],{},"图片太大，盒子太小，此时需要修改图片的大小",[35,134104,134106],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[42,134107,134108],{"__ignoreMap":40},[45,134109,134110,134112,134114,134116,134118,134121,134123,134125,134128,134131,134133,134136],{"class":47,"line":48},[45,134111,1117],{"class":51},[45,134113,1545],{"class":51381},[45,134115,55320],{"class":2046},[45,134117,254],{"class":51},[45,134119,134120],{"class":313},"\"images\u002Fpic.jpg\"",[45,134122,55328],{"class":2046},[45,134124,254],{"class":51},[45,134126,134127],{"class":313},"\"描述文字\"",[45,134129,134130],{"class":2046}," title",[45,134132,254],{"class":51},[45,134134,134135],{"class":313},"\"悬停提示\"",[45,134137,51388],{"class":51},[1545,134139],{"style":126459,"src":134140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[10,134142,134143],{},"制造遮罩层",[35,134145,134146],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,134147,134148],{"__ignoreMap":40},[45,134149,134150,134152,134154,134156,134158,134160,134162,134164,134166,134168,134170,134172],{"class":47,"line":48},[45,134151,1117],{"class":51},[45,134153,1545],{"class":51381},[45,134155,55320],{"class":2046},[45,134157,254],{"class":51},[45,134159,134120],{"class":313},[45,134161,55328],{"class":2046},[45,134163,254],{"class":51},[45,134165,134127],{"class":313},[45,134167,134130],{"class":2046},[45,134169,254],{"class":51},[45,134171,134135],{"class":313},[45,134173,51388],{"class":51},[10,134175,134176],{},"此时是这样的为标准流",[1545,134178],{"style":126459,"src":134179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[10,134181,134182],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[10,134184,134185],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[10,134187,134188],{},"让他在中间，用center(background-position)",[10,134190,134191],{},"将需要变的尽可能放到一个盒子中",[10,134193,134194],{},"放大盒子上内部盒子发生变化",[35,134196,134198],{"className":126603,"code":134197,"language":126605,"meta":40,"style":40},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[42,134199,134200,134206,134216,134220,134227,134237,134249,134261],{"__ignoreMap":40},[45,134201,134202,134204],{"class":47,"line":48},[45,134203,127670],{"class":2046},[45,134205,15655],{"class":51},[45,134207,134208,134210,134212,134214],{"class":47,"line":125},[45,134209,132409],{"class":257},[45,134211,51518],{"class":51},[45,134213,54845],{"class":257},[45,134215,1373],{"class":51},[45,134217,134218],{"class":47,"line":1262},[45,134219,1648],{"class":51},[45,134221,134222,134225],{"class":47,"line":1277},[45,134223,134224],{"class":2046},".child",[45,134226,15655],{"class":51},[45,134228,134229,134231,134233,134235],{"class":47,"line":1283},[45,134230,132409],{"class":257},[45,134232,51518],{"class":51},[45,134234,54912],{"class":257},[45,134236,1373],{"class":51},[45,134238,134239,134241,134243,134245,134247],{"class":47,"line":1297},[45,134240,132423],{"class":257},[45,134242,51518],{"class":51},[45,134244,863],{"class":257},[45,134246,536],{"class":93},[45,134248,1373],{"class":51},[45,134250,134251,134253,134255,134257,134259],{"class":47,"line":1303},[45,134252,132440],{"class":257},[45,134254,51518],{"class":51},[45,134256,863],{"class":257},[45,134258,536],{"class":93},[45,134260,1373],{"class":51},[45,134262,134263],{"class":47,"line":1394},[45,134264,1648],{"class":51},[10,134266,134267],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[30,134269,134271],{"id":134270},"_122-精灵图","12.2 精灵图",[176,134273,134275],{"id":134274},"_1221-理解","12.2.1 理解",[159,134277,134278,134296],{},[162,134279,134280,134281,132509,134284,134287,134288,134291,134292,134295],{},"目的： ",[358,134282,134283],{},"为了有效地减少服务器接收和发送请求的次数",[358,134285,134286],{},"提高"," 页面的 ",[358,134289,134290],{},"加载速度"," ，出现了 ",[358,134293,134294],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[162,134297,134298,134299,134301,134302,134304,134305,134307,134308,134310,134311,134313,134314,134316],{},"使用精灵图核心：",[53797,134300],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53797,134303],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53797,134306],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53797,134309],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53797,134312],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53797,134315],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[176,134318,134320],{"id":134319},"_1222-扒图","12.2.2 扒图",[35,134322,134325],{"className":134323,"code":134324,"language":5270},[5268],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[42,134326,134324],{"__ignoreMap":40},[1545,134328],{"style":126459,"src":134329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1545,134331],{"style":126459,"src":134332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[176,134334,134336],{"id":134335},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1545,134338],{"style":126459,"src":134339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[10,134341,134342],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1545,134344],{"style":126459,"src":134345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[35,134347,134349],{"className":126603,"code":134348,"language":126605,"meta":40,"style":40},"\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",[42,134350,134351,134356,134363,134375,134387,134406,134423],{"__ignoreMap":40},[45,134352,134353],{"class":47,"line":48},[45,134354,134355],{"class":267},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[45,134357,134358,134361],{"class":47,"line":125},[45,134359,134360],{"class":2046},".icon",[45,134362,15655],{"class":51},[45,134364,134365,134367,134369,134371,134373],{"class":47,"line":1262},[45,134366,70649],{"class":257},[45,134368,51518],{"class":51},[45,134370,907],{"class":257},[45,134372,51573],{"class":93},[45,134374,1373],{"class":51},[45,134376,134377,134379,134381,134383,134385],{"class":47,"line":1277},[45,134378,70869],{"class":257},[45,134380,51518],{"class":51},[45,134382,907],{"class":257},[45,134384,51573],{"class":93},[45,134386,1373],{"class":51},[45,134388,134389,134391,134393,134395,134397,134400,134402,134404],{"class":47,"line":1283},[45,134390,70692],{"class":257},[45,134392,51518],{"class":51},[45,134394,61807],{"class":257},[45,134396,209],{"class":51},[45,134398,134399],{"class":5299},"sprites.png",[45,134401,13797],{"class":51},[45,134403,61817],{"class":257},[45,134405,1373],{"class":51},[45,134407,134408,134410,134412,134414,134416,134419,134421],{"class":47,"line":1297},[45,134409,128863],{"class":257},[45,134411,51518],{"class":51},[45,134413,51844],{"class":257},[45,134415,51573],{"class":93},[45,134417,134418],{"class":257}," -20",[45,134420,51573],{"class":93},[45,134422,1373],{"class":51},[45,134424,134425],{"class":47,"line":1303},[45,134426,1648],{"class":51},[1545,134428],{"style":126459,"src":134429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[10,134431,134432],{},"在前端中坐标轴的正方向是右和下",[30,134434,134436],{"id":134435},"_123-字体图标","12.3 字体图标",[176,134438,134440],{"id":134439},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[10,134442,134443],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[10,134445,134446],{},"精灵图是有诸多优点的，但是缺点很明显。",[10,134448,134449],{},"1.图片文件还是比较大的。",[10,134451,134452],{},"2.图片本身放大和缩小会失真。",[10,134454,134455],{},"3.一旦图片制作完毕想要更换非常复杂。",[10,134457,134458,134459,25823],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[358,134460,134461],{},"字体图标 iconfont",[10,134463,134464,134467,134468,28468],{},[358,134465,134466],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[358,134469,134470],{},"展示的是图标，本质属于字体",[176,134472,134474],{"id":134473},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1214,134476,134477,134482,134485,134488,134491],{},[162,134478,134479,134481],{},[358,134480,25959],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[162,134483,134484],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[162,134486,134487],{},"兼容性：几乎支持所有的浏览器，请放心使用",[162,134489,134490],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[162,134492,134493],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[176,134495,134497],{"id":134496},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1214,134499,134500],{},[162,134501,134502,134503],{},"icomoon字体库：",[13,134504,134507],{"href":134505,"rel":134506},"http:\u002F\u002Ficomoon.io\u002F",[17],"http:\u002F\u002Ficomoon.io",[10,134509,134510],{},"进去之后点icomoon app",[1545,134512],{"style":126459,"src":134513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[10,134515,134516],{},"可以对其编辑：",[1545,134518],{"style":126459,"src":134519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[10,134521,134522],{},"生成字体：",[1545,134524],{"style":126459,"src":134525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[10,134527,134528],{},"下载：",[1545,134530],{"style":126459,"src":134531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1214,134533,134534],{},[162,134535,134536,134537],{},"阿里iconfont字体库： ",[13,134538,134539],{"href":134539,"rel":134540},"http:\u002F\u002Fwww.iconfont.cn\u002F",[17],[176,134542,134544],{"id":134543},"_1234-字体图标的引入","12.3.4 字体图标的引入",[159,134546,134547],{},[162,134548,134549,134550,134553],{},"把下载包里面的 ",[358,134551,134552],{},"fonts"," 文件夹放入页面根目录下",[1545,134555],{"style":126459,"src":134556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[159,134558,134559],{"start":125},[162,134560,134561],{},"字体文件格式",[346,134563,134564,134573],{},[349,134565,134566],{},[352,134567,134568,134571],{},[355,134569,134570],{"align":23819},"格式",[355,134572,23823],{"align":23819},[393,134574,134575,134585,134595,134605],{},[352,134576,134577,134582],{},[398,134578,134579],{"align":23819},[358,134580,134581],{},".ttf",[398,134583,134584],{"align":23819},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[352,134586,134587,134592],{},[398,134588,134589],{"align":23819},[358,134590,134591],{},".woff",[398,134593,134594],{"align":23819},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[352,134596,134597,134602],{},[398,134598,134599],{"align":23819},[358,134600,134601],{},".eot",[398,134603,134604],{"align":23819},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[352,134606,134607,134612],{},[398,134608,134609],{"align":23819},[358,134610,134611],{},"svg",[398,134613,134614],{"align":23819},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[159,134616,134617],{"start":1262},[162,134618,134619],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[35,134621,134623],{"className":126603,"code":134622,"language":126605,"meta":40,"style":40},"\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",[42,134624,134625,134630,134637,134649,134665,134690,134711,134731,134751,134755,134761,134771,134782],{"__ignoreMap":40},[45,134626,134627],{"class":47,"line":48},[45,134628,134629],{"class":267},"\u002F* 引入字体图标 *\u002F\n",[45,134631,134632,134635],{"class":47,"line":125},[45,134633,134634],{"class":93},"@font-face",[45,134636,15655],{"class":51},[45,134638,134639,134642,134644,134647],{"class":47,"line":1262},[45,134640,134641],{"class":257},"  font-family",[45,134643,51518],{"class":51},[45,134645,134646],{"class":313},"'icomoon'",[45,134648,1373],{"class":51},[45,134650,134651,134654,134656,134658,134660,134663],{"class":47,"line":1277},[45,134652,134653],{"class":257},"  src",[45,134655,51518],{"class":51},[45,134657,61807],{"class":257},[45,134659,209],{"class":51},[45,134661,134662],{"class":313},"'fonts\u002Ficomoon.eot'",[45,134664,2802],{"class":51},[45,134666,134667,134669,134671,134673,134675,134678,134680,134683,134685,134688],{"class":47,"line":1283},[45,134668,134653],{"class":257},[45,134670,51518],{"class":51},[45,134672,61807],{"class":257},[45,134674,209],{"class":51},[45,134676,134677],{"class":313},"'fonts\u002Ficomoon.eot?#iefix'",[45,134679,13797],{"class":51},[45,134681,134682],{"class":257},"format",[45,134684,209],{"class":51},[45,134686,134687],{"class":313},"'embedded-opentype'",[45,134689,38128],{"class":51},[45,134691,134692,134695,134697,134700,134702,134704,134706,134709],{"class":47,"line":1297},[45,134693,134694],{"class":257},"       url",[45,134696,209],{"class":51},[45,134698,134699],{"class":313},"'fonts\u002Ficomoon.woff'",[45,134701,13797],{"class":51},[45,134703,134682],{"class":257},[45,134705,209],{"class":51},[45,134707,134708],{"class":313},"'woff'",[45,134710,38128],{"class":51},[45,134712,134713,134715,134717,134720,134722,134724,134726,134729],{"class":47,"line":1303},[45,134714,134694],{"class":257},[45,134716,209],{"class":51},[45,134718,134719],{"class":313},"'fonts\u002Ficomoon.ttf'",[45,134721,13797],{"class":51},[45,134723,134682],{"class":257},[45,134725,209],{"class":51},[45,134727,134728],{"class":313},"'truetype'",[45,134730,38128],{"class":51},[45,134732,134733,134735,134737,134740,134742,134744,134746,134749],{"class":47,"line":1394},[45,134734,134694],{"class":257},[45,134736,209],{"class":51},[45,134738,134739],{"class":313},"'fonts\u002Ficomoon.svg#icomoon'",[45,134741,13797],{"class":51},[45,134743,134682],{"class":257},[45,134745,209],{"class":51},[45,134747,134748],{"class":313},"'svg'",[45,134750,2802],{"class":51},[45,134752,134753],{"class":47,"line":1400},[45,134754,1648],{"class":51},[45,134756,134757,134759],{"class":47,"line":1412},[45,134758,134360],{"class":2046},[45,134760,15655],{"class":51},[45,134762,134763,134765,134767,134769],{"class":47,"line":1695},[45,134764,134641],{"class":257},[45,134766,51518],{"class":51},[45,134768,134646],{"class":313},[45,134770,1373],{"class":51},[45,134772,134773,134776,134778,134780],{"class":47,"line":1700},[45,134774,134775],{"class":257},"  font-style",[45,134777,51518],{"class":51},[45,134779,63922],{"class":257},[45,134781,1373],{"class":51},[45,134783,134784],{"class":47,"line":1706},[45,134785,1648],{"class":51},[10,134787,134788],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1545,134790],{"style":126459,"src":134791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[159,134793,134794],{"start":1277},[162,134795,134796],{},"添加字体",[1545,134798],{"style":126459,"src":134799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[10,134801,134802],{},"复制：",[1545,134804],{"style":126459,"src":134805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[10,134807,134808],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[159,134810,134811],{"start":1283},[162,134812,134813],{},"代码展示：",[35,134815,134816],{"className":126603,"code":134622,"language":126605,"meta":40,"style":40},[42,134817,134818,134822,134828,134838,134852,134874,134892,134910,134928,134932,134938,134948,134958],{"__ignoreMap":40},[45,134819,134820],{"class":47,"line":48},[45,134821,134629],{"class":267},[45,134823,134824,134826],{"class":47,"line":125},[45,134825,134634],{"class":93},[45,134827,15655],{"class":51},[45,134829,134830,134832,134834,134836],{"class":47,"line":1262},[45,134831,134641],{"class":257},[45,134833,51518],{"class":51},[45,134835,134646],{"class":313},[45,134837,1373],{"class":51},[45,134839,134840,134842,134844,134846,134848,134850],{"class":47,"line":1277},[45,134841,134653],{"class":257},[45,134843,51518],{"class":51},[45,134845,61807],{"class":257},[45,134847,209],{"class":51},[45,134849,134662],{"class":313},[45,134851,2802],{"class":51},[45,134853,134854,134856,134858,134860,134862,134864,134866,134868,134870,134872],{"class":47,"line":1283},[45,134855,134653],{"class":257},[45,134857,51518],{"class":51},[45,134859,61807],{"class":257},[45,134861,209],{"class":51},[45,134863,134677],{"class":313},[45,134865,13797],{"class":51},[45,134867,134682],{"class":257},[45,134869,209],{"class":51},[45,134871,134687],{"class":313},[45,134873,38128],{"class":51},[45,134875,134876,134878,134880,134882,134884,134886,134888,134890],{"class":47,"line":1297},[45,134877,134694],{"class":257},[45,134879,209],{"class":51},[45,134881,134699],{"class":313},[45,134883,13797],{"class":51},[45,134885,134682],{"class":257},[45,134887,209],{"class":51},[45,134889,134708],{"class":313},[45,134891,38128],{"class":51},[45,134893,134894,134896,134898,134900,134902,134904,134906,134908],{"class":47,"line":1303},[45,134895,134694],{"class":257},[45,134897,209],{"class":51},[45,134899,134719],{"class":313},[45,134901,13797],{"class":51},[45,134903,134682],{"class":257},[45,134905,209],{"class":51},[45,134907,134728],{"class":313},[45,134909,38128],{"class":51},[45,134911,134912,134914,134916,134918,134920,134922,134924,134926],{"class":47,"line":1394},[45,134913,134694],{"class":257},[45,134915,209],{"class":51},[45,134917,134739],{"class":313},[45,134919,13797],{"class":51},[45,134921,134682],{"class":257},[45,134923,209],{"class":51},[45,134925,134748],{"class":313},[45,134927,2802],{"class":51},[45,134929,134930],{"class":47,"line":1400},[45,134931,1648],{"class":51},[45,134933,134934,134936],{"class":47,"line":1412},[45,134935,134360],{"class":2046},[45,134937,15655],{"class":51},[45,134939,134940,134942,134944,134946],{"class":47,"line":1695},[45,134941,134641],{"class":257},[45,134943,51518],{"class":51},[45,134945,134646],{"class":313},[45,134947,1373],{"class":51},[45,134949,134950,134952,134954,134956],{"class":47,"line":1700},[45,134951,134775],{"class":257},[45,134953,51518],{"class":51},[45,134955,63922],{"class":257},[45,134957,1373],{"class":51},[45,134959,134960],{"class":47,"line":1706},[45,134961,1648],{"class":51},[1545,134963],{"style":126459,"src":134964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[10,134966,134967],{},"更加细节展示：",[159,134969,134970],{},[162,134971,134972],{},"html 标签内添加小图标",[1545,134974],{"style":126459,"src":134975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[159,134977,134978],{"start":125},[162,134979,134980],{},"给标签定义字体",[35,134982,134983],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},[42,134984,134985,134989,135003,135007],{"__ignoreMap":40},[45,134986,134987],{"class":47,"line":48},[45,134988,130714],{"class":267},[45,134990,134991,134993,134995,134997,134999,135001],{"class":47,"line":125},[45,134992,1117],{"class":51},[45,134994,51692],{"class":51381},[45,134996,53567],{"class":2046},[45,134998,254],{"class":51},[45,135000,130727],{"class":313},[45,135002,51388],{"class":51},[45,135004,135005],{"class":47,"line":1262},[45,135006,130734],{"class":51},[45,135008,135009,135011,135013],{"class":47,"line":1277},[45,135010,51866],{"class":51},[45,135012,51692],{"class":51381},[45,135014,51388],{"class":51},[10,135016,135017],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1545,135019],{"style":126459,"src":135020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[176,135022,135024],{"id":135023},"_1235-字体图标的追加","12.3.5 字体图标的追加",[10,135026,135027],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[10,135029,135030,135031,135034],{},"把压缩包里面的 ",[358,135032,135033],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[10,135036,135037],{},"打开网站，点下方：",[1545,135039],{"style":126459,"src":135040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1545,135042],{"style":126459,"src":135043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1545,135045],{"style":126459,"src":135046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[10,135048,135049],{},"点yes重新加载",[10,135051,135052],{},"然后重复之前的操作就可以实现了",[10,135054,135055],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[176,135057,135059],{"id":135058},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1545,135061],{"style":126459,"src":135062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[121,135064,135065],{},"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":40,"searchDepth":125,"depth":125,"links":135067},[135068,135074,135079],{"id":133671,"depth":125,"text":133672,"children":135069},[135070,135071,135072,135073],{"id":133683,"depth":1262,"text":133684},{"id":133712,"depth":1262,"text":133713},{"id":133740,"depth":1262,"text":133741},{"id":133798,"depth":1262,"text":133799},{"id":134270,"depth":125,"text":134271,"children":135075},[135076,135077,135078],{"id":134274,"depth":1262,"text":134275},{"id":134319,"depth":1262,"text":134320},{"id":134335,"depth":1262,"text":134336},{"id":134435,"depth":125,"text":134436,"children":135080},[135081,135082,135083,135084,135085,135086],{"id":134439,"depth":1262,"text":134440},{"id":134473,"depth":1262,"text":134474},{"id":134496,"depth":1262,"text":134497},{"id":134543,"depth":1262,"text":134544},{"id":135023,"depth":1262,"text":135024},{"id":135058,"depth":1262,"text":135059},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133663,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135093,"title":135094,"body":135095,"description":130,"extension":131,"meta":136322,"navigation":133,"path":136323,"seo":136324,"stem":136325,"__hash__":136326},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135096,"toc":136303},[135097,135100,135104,135107,135121,135189,135219,135222,135226,135230,135332,135379,135383,135386,135389,135423,135426,135429,135432,135435,135438,135441,135444,135446,135449,135452,135455,135458,135461,135464,135467,135495,135498,135502,135505,135512,135515,135518,135544,135547,135551,135554,135557,135564,135568,135571,135573,135605,135608,135611,135623,135629,135632,135635,135638,135640,135644,135647,135650,135653,135698,135702,135704,135707,135714,135756,135759,135763,135768,135782,135786,135789,135792,135795,135798,135801,135835,135838,135841,135895,135898,135901,135904,135907,135959,135962,135965,136014,136018,136020,136023,136026,136029,136032,136035,136093,136096,136102,136105,136108,136140,136143,136147,136151,136154,136186,136190,136193,136237,136241,136244,136247,136250,136253,136256,136259,136262,136264,136267,136269,136272,136275,136278,136281,136286,136289,136291,136294,136297,136300],[20,135098,135094],{"id":135099},"_13-界面样式与布局技巧",[30,135101,135103],{"id":135102},"_131-css三角","13.1 css三角",[10,135105,135106],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1214,135108,135109,135112,135115,135118],{},[162,135110,135111],{},"用css 边框可以模拟三角效果",[162,135113,135114],{},"宽度高度为0",[162,135116,135117],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[162,135119,135120],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[35,135122,135124],{"className":126603,"code":135123,"language":126605,"meta":40,"style":40},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[42,135125,135126,135131,135138,135148,135158,135174,135185],{"__ignoreMap":40},[45,135127,135128],{"class":47,"line":48},[45,135129,135130],{"class":267},"\u002F* CSS 实现三角形 *\u002F\n",[45,135132,135133,135136],{"class":47,"line":125},[45,135134,135135],{"class":2046},".triangle",[45,135137,15655],{"class":51},[45,135139,135140,135142,135144,135146],{"class":47,"line":1262},[45,135141,70649],{"class":257},[45,135143,51518],{"class":51},[45,135145,400],{"class":257},[45,135147,1373],{"class":51},[45,135149,135150,135152,135154,135156],{"class":47,"line":1277},[45,135151,70869],{"class":257},[45,135153,51518],{"class":51},[45,135155,400],{"class":257},[45,135157,1373],{"class":51},[45,135159,135160,135162,135164,135166,135168,135170,135172],{"class":47,"line":1283},[45,135161,70977],{"class":257},[45,135163,51518],{"class":51},[45,135165,654],{"class":257},[45,135167,51573],{"class":93},[45,135169,51602],{"class":257},[45,135171,64072],{"class":257},[45,135173,1373],{"class":51},[45,135175,135176,135179,135181,135183],{"class":47,"line":1297},[45,135177,135178],{"class":257},"  border-bottom-color",[45,135180,51518],{"class":51},[45,135182,62450],{"class":257},[45,135184,1373],{"class":51},[45,135186,135187],{"class":47,"line":1303},[45,135188,1648],{"class":51},[35,135190,135191],{"className":126603,"code":130760,"language":126605,"meta":40,"style":40},[42,135192,135193,135199,135215],{"__ignoreMap":40},[45,135194,135195,135197],{"class":47,"line":48},[45,135196,51692],{"class":51381},[45,135198,15655],{"class":51},[45,135200,135201,135203,135205,135207,135209,135211,135213],{"class":47,"line":125},[45,135202,70977],{"class":257},[45,135204,51518],{"class":51},[45,135206,426],{"class":257},[45,135208,51573],{"class":93},[45,135210,51602],{"class":257},[45,135212,129995],{"class":257},[45,135214,1373],{"class":51},[45,135216,135217],{"class":47,"line":1262},[45,135218,1648],{"class":51},[1545,135220],{"style":126459,"src":135221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[30,135223,135225],{"id":135224},"_132-css用户界面样式","13.2 css用户界面样式",[176,135227,135229],{"id":135228},"_1321-鼠标样式","13.2.1 鼠标样式",[35,135231,135233],{"className":126603,"code":135232,"language":126605,"meta":40,"style":40},"\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",[42,135234,135235,135240,135259,135277,135296,135313],{"__ignoreMap":40},[45,135236,135237],{"class":47,"line":48},[45,135238,135239],{"class":267},"\u002F* 鼠标样式 *\u002F\n",[45,135241,135242,135244,135246,135249,135251,135253,135256],{"class":47,"line":125},[45,135243,51692],{"class":51381},[45,135245,79888],{"class":51},[45,135247,135248],{"class":257},"cursor",[45,135250,51518],{"class":51},[45,135252,62111],{"class":257},[45,135254,135255],{"class":51},"; }   ",[45,135257,135258],{"class":267},"\u002F* 手型 *\u002F\n",[45,135260,135261,135263,135265,135267,135269,135272,135274],{"class":47,"line":1262},[45,135262,51692],{"class":51381},[45,135264,79888],{"class":51},[45,135266,135248],{"class":257},[45,135268,51518],{"class":51},[45,135270,135271],{"class":257},"default",[45,135273,135255],{"class":51},[45,135275,135276],{"class":267},"\u002F* 默认 *\u002F\n",[45,135278,135279,135281,135283,135285,135287,135290,135293],{"class":47,"line":1277},[45,135280,51692],{"class":51381},[45,135282,79888],{"class":51},[45,135284,135248],{"class":257},[45,135286,51518],{"class":51},[45,135288,135289],{"class":257},"move",[45,135291,135292],{"class":51},"; }      ",[45,135294,135295],{"class":267},"\u002F* 移动 *\u002F\n",[45,135297,135298,135300,135302,135304,135306,135308,135310],{"class":47,"line":1283},[45,135299,51692],{"class":51381},[45,135301,79888],{"class":51},[45,135303,135248],{"class":257},[45,135305,51518],{"class":51},[45,135307,5270],{"class":257},[45,135309,135292],{"class":51},[45,135311,135312],{"class":267},"\u002F* 文本 *\u002F\n",[45,135314,135315,135317,135319,135321,135323,135326,135329],{"class":47,"line":1297},[45,135316,51692],{"class":51381},[45,135318,79888],{"class":51},[45,135320,135248],{"class":257},[45,135322,51518],{"class":51},[45,135324,135325],{"class":257},"not-allowed",[45,135327,135328],{"class":51},"; } ",[45,135330,135331],{"class":267},"\u002F* 禁止 *\u002F\n",[346,135333,135334,135342],{},[349,135335,135336],{},[352,135337,135338,135340],{},[355,135339,127067],{"align":23819},[355,135341,27572],{"align":23819},[393,135343,135344,135351,135358,135365,135372],{},[352,135345,135346,135348],{},[398,135347,135271],{"align":23819},[398,135349,135350],{"align":23819},"小白 默认",[352,135352,135353,135355],{},[398,135354,62111],{"align":23819},[398,135356,135357],{"align":23819},"小手",[352,135359,135360,135362],{},[398,135361,135289],{"align":23819},[398,135363,135364],{"align":23819},"移动",[352,135366,135367,135369],{},[398,135368,5270],{"align":23819},[398,135370,135371],{"align":23819},"文本",[352,135373,135374,135376],{},[398,135375,135325],{"align":23819},[398,135377,135378],{"align":23819},"禁止",[176,135380,135382],{"id":135381},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[10,135384,135385],{},"去除表单轮廓线",[10,135387,135388],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[35,135390,135391],{"className":126603,"code":129967,"language":126605,"meta":40,"style":40},[42,135392,135393,135397,135403,135419],{"__ignoreMap":40},[45,135394,135395],{"class":47,"line":48},[45,135396,129974],{"class":267},[45,135398,135399,135401],{"class":47,"line":125},[45,135400,51692],{"class":51381},[45,135402,15655],{"class":51},[45,135404,135405,135407,135409,135411,135413,135415,135417],{"class":47,"line":1262},[45,135406,70977],{"class":257},[45,135408,51518],{"class":51},[45,135410,426],{"class":257},[45,135412,51573],{"class":93},[45,135414,51602],{"class":257},[45,135416,129995],{"class":257},[45,135418,1373],{"class":51},[45,135420,135421],{"class":47,"line":1277},[45,135422,1648],{"class":51},[10,135424,135425],{},"文本域：",[1545,135427],{"style":126459,"src":135428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[10,135430,135431],{},"此时会有一个空白区域",[1545,135433],{"style":126459,"src":135434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[10,135436,135437],{},"写在同一行就不会出现这个问题",[1545,135439],{"style":126459,"src":135440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[10,135442,135443],{},"文本域是行内块元素，一定记住！！！",[10,135445,98284],{},[1545,135447],{"style":126459,"src":135448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[10,135450,135451],{},"文本域尽量放在一行",[10,135453,135454],{},"知识回顾：cols是列，rols是行",[1545,135456],{"style":126459,"src":135457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[10,135459,135460],{},"它可以进行拖动，显然这是我们不愿意看到的",[1545,135462],{"style":126459,"src":135463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[10,135465,135466],{},"使用resize进行解决",[35,135468,135470],{"className":126603,"code":135469,"language":126605,"meta":40,"style":40},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[42,135471,135472,135478,135491],{"__ignoreMap":40},[45,135473,135474,135476],{"class":47,"line":48},[45,135475,53902],{"class":51381},[45,135477,15655],{"class":51},[45,135479,135480,135482,135484,135486,135488],{"class":47,"line":125},[45,135481,70879],{"class":257},[45,135483,51518],{"class":51},[45,135485,54818],{"class":257},[45,135487,130466],{"class":51},[45,135489,135490],{"class":267},"\u002F* 取消表单轮廓线 *\u002F\n",[45,135492,135493],{"class":47,"line":1262},[45,135494,1648],{"class":51},[10,135496,135497],{},"此时就无法通过右下方实现拖动了",[176,135499,135501],{"id":135500},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[10,135503,135504],{},"实现一个盒子中的文字和图片对齐",[10,135506,135507,135508,135511],{},"用于设置一个元素的 ",[358,135509,135510],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[10,135513,135514],{},"图片和文字默认是基线对齐",[1545,135516],{"style":126459,"src":135517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[35,135519,135520],{"className":126603,"code":135469,"language":126605,"meta":40,"style":40},[42,135521,135522,135528,135540],{"__ignoreMap":40},[45,135523,135524,135526],{"class":47,"line":48},[45,135525,53902],{"class":51381},[45,135527,15655],{"class":51},[45,135529,135530,135532,135534,135536,135538],{"class":47,"line":125},[45,135531,70879],{"class":257},[45,135533,51518],{"class":51},[45,135535,54818],{"class":257},[45,135537,130466],{"class":51},[45,135539,135490],{"class":267},[45,135541,135542],{"class":47,"line":1262},[45,135543,1648],{"class":51},[1545,135545],{"style":126459,"src":135546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22081,135548,135550],{"id":135549},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[10,135552,135553],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1545,135555],{"style":126459,"src":135556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[10,135558,135559,135560,135563],{},"此时可以给图片、表单这些行内块元素的 ",[358,135561,135562],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22081,135565,135567],{"id":135566},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[10,135569,135570],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[10,135572,14716],{},[35,135574,135576],{"className":126603,"code":135575,"language":126605,"meta":40,"style":40},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[42,135577,135578,135583,135589,135601],{"__ignoreMap":40},[45,135579,135580],{"class":47,"line":48},[45,135581,135582],{"class":267},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[45,135584,135585,135587],{"class":47,"line":125},[45,135586,1545],{"class":51381},[45,135588,15655],{"class":51},[45,135590,135591,135594,135596,135599],{"class":47,"line":1262},[45,135592,135593],{"class":257},"  vertical-align",[45,135595,51518],{"class":51},[45,135597,135598],{"class":257},"middle",[45,135600,1373],{"class":51},[45,135602,135603],{"class":47,"line":1277},[45,135604,1648],{"class":51},[1545,135606],{"style":126459,"src":135607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[10,135609,135610],{},"主要解决方法有两种：",[159,135612,135613],{},[162,135614,135615,135618,135619,135622],{},[358,135616,135617],{},"给图片"," 添加 ",[358,135620,135621],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[10,135624,135625,135626],{},"2.把图片转换为块级元素 ",[358,135627,135628],{},"display: block",[10,135630,135631],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[10,135633,135634],{},"img {",[10,135636,135637],{},"vertical-align:middle;",[10,135639,1153],{},[176,135641,135643],{"id":135642},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[10,135645,135646],{},"效果：",[1545,135648],{"style":126459,"src":135649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[10,135651,135652],{},"单行文本溢出显示省略号--必须满足三个条件：",[35,135654,135656],{"className":126603,"code":135655,"language":126605,"meta":40,"style":40},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[42,135657,135658,135663,135669,135679,135684,135694],{"__ignoreMap":40},[45,135659,135660],{"class":47,"line":48},[45,135661,135662],{"class":267},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[45,135664,135665,135667],{"class":47,"line":125},[45,135666,1545],{"class":51381},[45,135668,15655],{"class":51},[45,135670,135671,135673,135675,135677],{"class":47,"line":1262},[45,135672,135593],{"class":257},[45,135674,51518],{"class":51},[45,135676,135598],{"class":257},[45,135678,1373],{"class":51},[45,135680,135681],{"class":47,"line":1277},[45,135682,135683],{"class":267},"  \u002F* 或 *\u002F\n",[45,135685,135686,135688,135690,135692],{"class":47,"line":1283},[45,135687,128219],{"class":257},[45,135689,51518],{"class":51},[45,135691,60950],{"class":257},[45,135693,1373],{"class":51},[45,135695,135696],{"class":47,"line":1297},[45,135697,1648],{"class":51},[176,135699,135701],{"id":135700},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[10,135703,135646],{},[1545,135705],{"style":126459,"src":135706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[10,135708,135709,135710,135713],{},"多行文本溢出显示省略号， ",[358,135711,135712],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[35,135715,135716],{"className":126603,"code":135655,"language":126605,"meta":40,"style":40},[42,135717,135718,135722,135728,135738,135742,135752],{"__ignoreMap":40},[45,135719,135720],{"class":47,"line":48},[45,135721,135662],{"class":267},[45,135723,135724,135726],{"class":47,"line":125},[45,135725,1545],{"class":51381},[45,135727,15655],{"class":51},[45,135729,135730,135732,135734,135736],{"class":47,"line":1262},[45,135731,135593],{"class":257},[45,135733,51518],{"class":51},[45,135735,135598],{"class":257},[45,135737,1373],{"class":51},[45,135739,135740],{"class":47,"line":1277},[45,135741,135683],{"class":267},[45,135743,135744,135746,135748,135750],{"class":47,"line":1283},[45,135745,128219],{"class":257},[45,135747,51518],{"class":51},[45,135749,60950],{"class":257},[45,135751,1373],{"class":51},[45,135753,135754],{"class":47,"line":1297},[45,135755,1648],{"class":51},[10,135757,135758],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[30,135760,135762],{"id":135761},"_133-常见布局技巧","13.3 常见布局技巧",[10,135764,135765],{},[358,135766,135767],{},"巧妙利用一个技术更快更好的布局：",[159,135769,135770,135773,135776,135779],{},[162,135771,135772],{},"margin负值的运用",[162,135774,135775],{},"文字围绕浮动元素",[162,135777,135778],{},"行内块的巧妙运用",[162,135780,135781],{},"CSS三角强化",[176,135783,135785],{"id":135784},"_1331-margin负值的运用","13.3.1 margin负值的运用",[10,135787,135788],{},"应用场景：",[1545,135790],{"style":126459,"src":135791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1545,135793],{"style":126459,"src":135794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[10,135796,135797],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[10,135799,135800],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[35,135802,135803],{"className":126603,"code":129967,"language":126605,"meta":40,"style":40},[42,135804,135805,135809,135815,135831],{"__ignoreMap":40},[45,135806,135807],{"class":47,"line":48},[45,135808,129974],{"class":267},[45,135810,135811,135813],{"class":47,"line":125},[45,135812,51692],{"class":51381},[45,135814,15655],{"class":51},[45,135816,135817,135819,135821,135823,135825,135827,135829],{"class":47,"line":1262},[45,135818,70977],{"class":257},[45,135820,51518],{"class":51},[45,135822,426],{"class":257},[45,135824,51573],{"class":93},[45,135826,51602],{"class":257},[45,135828,129995],{"class":257},[45,135830,1373],{"class":51},[45,135832,135833],{"class":47,"line":1277},[45,135834,1648],{"class":51},[1545,135836],{"style":126459,"src":135837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[10,135839,135840],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[35,135842,135844],{"className":126603,"code":135843,"language":126605,"meta":40,"style":40},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[42,135845,135846,135851,135857,135867,135879,135891],{"__ignoreMap":40},[45,135847,135848],{"class":47,"line":48},[45,135849,135850],{"class":267},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[45,135852,135853,135855],{"class":47,"line":125},[45,135854,130451],{"class":2046},[45,135856,15655],{"class":51},[45,135858,135859,135861,135863,135865],{"class":47,"line":1262},[45,135860,132409],{"class":257},[45,135862,51518],{"class":51},[45,135864,54845],{"class":257},[45,135866,1373],{"class":51},[45,135868,135869,135871,135873,135875,135877],{"class":47,"line":1277},[45,135870,132423],{"class":257},[45,135872,51518],{"class":51},[45,135874,654],{"class":257},[45,135876,51573],{"class":93},[45,135878,1373],{"class":51},[45,135880,135881,135883,135885,135887,135889],{"class":47,"line":1283},[45,135882,132440],{"class":257},[45,135884,51518],{"class":51},[45,135886,907],{"class":257},[45,135888,51573],{"class":93},[45,135890,1373],{"class":51},[45,135892,135893],{"class":47,"line":1297},[45,135894,1648],{"class":51},[10,135896,135897],{},"加上上述代码会发现：",[1545,135899],{"style":126459,"src":135900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[10,135902,135903],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[10,135905,135906],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[35,135908,135909],{"className":126603,"code":135843,"language":126605,"meta":40,"style":40},[42,135910,135911,135915,135921,135931,135943,135955],{"__ignoreMap":40},[45,135912,135913],{"class":47,"line":48},[45,135914,135850],{"class":267},[45,135916,135917,135919],{"class":47,"line":125},[45,135918,130451],{"class":2046},[45,135920,15655],{"class":51},[45,135922,135923,135925,135927,135929],{"class":47,"line":1262},[45,135924,132409],{"class":257},[45,135926,51518],{"class":51},[45,135928,54845],{"class":257},[45,135930,1373],{"class":51},[45,135932,135933,135935,135937,135939,135941],{"class":47,"line":1277},[45,135934,132423],{"class":257},[45,135936,51518],{"class":51},[45,135938,654],{"class":257},[45,135940,51573],{"class":93},[45,135942,1373],{"class":51},[45,135944,135945,135947,135949,135951,135953],{"class":47,"line":1283},[45,135946,132440],{"class":257},[45,135948,51518],{"class":51},[45,135950,907],{"class":257},[45,135952,51573],{"class":93},[45,135954,1373],{"class":51},[45,135956,135957],{"class":47,"line":1297},[45,135958,1648],{"class":51},[10,135960,135961],{},"解决方式2：",[10,135963,135964],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[35,135966,135968],{"className":126603,"code":135967,"language":126605,"meta":40,"style":40},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[42,135969,135970,135976,135986,135998,136010],{"__ignoreMap":40},[45,135971,135972,135974],{"class":47,"line":48},[45,135973,51692],{"class":51381},[45,135975,15655],{"class":51},[45,135977,135978,135980,135982,135984],{"class":47,"line":125},[45,135979,132409],{"class":257},[45,135981,51518],{"class":51},[45,135983,54845],{"class":257},[45,135985,1373],{"class":51},[45,135987,135988,135990,135992,135994,135996],{"class":47,"line":1262},[45,135989,132423],{"class":257},[45,135991,51518],{"class":51},[45,135993,654],{"class":257},[45,135995,51573],{"class":93},[45,135997,1373],{"class":51},[45,135999,136000,136002,136004,136006,136008],{"class":47,"line":1277},[45,136001,132440],{"class":257},[45,136003,51518],{"class":51},[45,136005,907],{"class":257},[45,136007,51573],{"class":93},[45,136009,1373],{"class":51},[45,136011,136012],{"class":47,"line":1283},[45,136013,1648],{"class":51},[176,136015,136017],{"id":136016},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[10,136019,135788],{},[1545,136021],{"style":126459,"src":136022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[10,136024,136025],{},"实现结构图：",[1545,136027],{"style":126459,"src":136028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[10,136030,136031],{},"巧妙运用浮动元素不会压住文字的特性",[10,136033,136034],{},"代码显示：",[35,136036,136038],{"className":126603,"code":136037,"language":126605,"meta":40,"style":40},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[42,136039,136040,136046,136056,136060,136065,136069,136075,136089],{"__ignoreMap":40},[45,136041,136042,136044],{"class":47,"line":48},[45,136043,130451],{"class":2046},[45,136045,15655],{"class":51},[45,136047,136048,136050,136052,136054],{"class":47,"line":125},[45,136049,131083],{"class":257},[45,136051,51518],{"class":51},[45,136053,23819],{"class":257},[45,136055,1373],{"class":51},[45,136057,136058],{"class":47,"line":1262},[45,136059,1648],{"class":51},[45,136061,136062],{"class":47,"line":1277},[45,136063,136064],{"class":51},"```Css\n",[45,136066,136067],{"class":47,"line":1283},[45,136068,130446],{"class":267},[45,136070,136071,136073],{"class":47,"line":1297},[45,136072,130451],{"class":2046},[45,136074,15655],{"class":51},[45,136076,136077,136079,136081,136083,136085,136087],{"class":47,"line":1303},[45,136078,70551],{"class":257},[45,136080,51518],{"class":51},[45,136082,400],{"class":257},[45,136084,51637],{"class":257},[45,136086,130466],{"class":51},[45,136088,130469],{"class":267},[45,136090,136091],{"class":47,"line":1394},[45,136092,1648],{"class":51},[10,136094,136095],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[35,136097,136100],{"className":136098,"code":136099,"language":5270},[5268],"\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",[42,136101,136099],{"__ignoreMap":40},[1545,136103],{"style":126459,"src":136104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[10,136106,136107],{},"最终展示结果：",[35,136109,136110],{"className":126603,"code":130439,"language":126605,"meta":40,"style":40},[42,136111,136112,136116,136122,136136],{"__ignoreMap":40},[45,136113,136114],{"class":47,"line":48},[45,136115,130446],{"class":267},[45,136117,136118,136120],{"class":47,"line":125},[45,136119,130451],{"class":2046},[45,136121,15655],{"class":51},[45,136123,136124,136126,136128,136130,136132,136134],{"class":47,"line":1262},[45,136125,70551],{"class":257},[45,136127,51518],{"class":51},[45,136129,400],{"class":257},[45,136131,51637],{"class":257},[45,136133,130466],{"class":51},[45,136135,130469],{"class":267},[45,136137,136138],{"class":47,"line":1277},[45,136139,1648],{"class":51},[1545,136141],{"style":126459,"src":136142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[30,136144,136146],{"id":136145},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[176,136148,136150],{"id":136149},"_1341-原理","13.4.1 原理",[1545,136152],{"style":126459,"src":136153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[35,136155,136156],{"className":126603,"code":130439,"language":126605,"meta":40,"style":40},[42,136157,136158,136162,136168,136182],{"__ignoreMap":40},[45,136159,136160],{"class":47,"line":48},[45,136161,130446],{"class":267},[45,136163,136164,136166],{"class":47,"line":125},[45,136165,130451],{"class":2046},[45,136167,15655],{"class":51},[45,136169,136170,136172,136174,136176,136178,136180],{"class":47,"line":1262},[45,136171,70551],{"class":257},[45,136173,51518],{"class":51},[45,136175,400],{"class":257},[45,136177,51637],{"class":257},[45,136179,130466],{"class":51},[45,136181,130469],{"class":267},[45,136183,136184],{"class":47,"line":1277},[45,136185,1648],{"class":51},[176,136187,136189],{"id":136188},"_1342-实例","13.4.2 实例",[1545,136191],{"style":126459,"src":136192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[35,136194,136195],{"className":126603,"code":131069,"language":126605,"meta":40,"style":40},[42,136196,136197,136203,136213,136217,136223,136233],{"__ignoreMap":40},[45,136198,136199,136201],{"class":47,"line":48},[45,136200,131076],{"class":2046},[45,136202,15655],{"class":51},[45,136204,136205,136207,136209,136211],{"class":47,"line":125},[45,136206,131083],{"class":257},[45,136208,51518],{"class":51},[45,136210,23819],{"class":257},[45,136212,1373],{"class":51},[45,136214,136215],{"class":47,"line":1262},[45,136216,1648],{"class":51},[45,136218,136219,136221],{"class":47,"line":1277},[45,136220,131098],{"class":2046},[45,136222,15655],{"class":51},[45,136224,136225,136227,136229,136231],{"class":47,"line":1283},[45,136226,131083],{"class":257},[45,136228,51518],{"class":51},[45,136230,72603],{"class":257},[45,136232,1373],{"class":51},[45,136234,136235],{"class":47,"line":1297},[45,136236,1648],{"class":51},[30,136238,136240],{"id":136239},"_135-css的初始化","13.5 css的初始化",[10,136242,136243],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[10,136245,136246],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[10,136248,136249],{},"每个网页都必须首先进行 CSS初始化。",[10,136251,136252],{},"这里我们以 京东CSS初始化代码为例。",[10,136254,136255],{},"在网页右键查看网页源代码",[10,136257,136258],{},"找到css的link引入语句",[10,136260,136261],{},"然后ctrl+f 输入body",[10,136263,77307],{},[1545,136265],{"style":126459,"src":136266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[10,136268,77330],{},[1545,136270],{"style":126459,"src":136271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[10,136273,136274],{},"③打开了网页上传压缩的代码",[1545,136276],{"style":126459,"src":136277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[10,136279,136280],{},"④从body前可以查看这个网页的初始化代码",[10,136282,136283],{},[358,136284,136285],{},"Unicode编码字体：",[10,136287,136288],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[10,136290,83288],{},[10,136292,136293],{},"黑体 \\9ED1\\4F53",[10,136295,136296],{},"宋体 \\5B8B\\4F53",[10,136298,136299],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[121,136301,136302],{},"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":40,"searchDepth":125,"depth":125,"links":136304},[136305,136306,136313,136317,136321],{"id":135102,"depth":125,"text":135103},{"id":135224,"depth":125,"text":135225,"children":136307},[136308,136309,136310,136311,136312],{"id":135228,"depth":1262,"text":135229},{"id":135381,"depth":1262,"text":135382},{"id":135500,"depth":1262,"text":135501},{"id":135642,"depth":1262,"text":135643},{"id":135700,"depth":1262,"text":135701},{"id":135761,"depth":125,"text":135762,"children":136314},[136315,136316],{"id":135784,"depth":1262,"text":135785},{"id":136016,"depth":1262,"text":136017},{"id":136145,"depth":125,"text":136146,"children":136318},[136319,136320],{"id":136149,"depth":1262,"text":136150},{"id":136188,"depth":1262,"text":136189},{"id":136239,"depth":125,"text":136240},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135094,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136328,"title":136329,"body":136330,"description":130,"extension":131,"meta":138016,"navigation":133,"path":138017,"seo":138018,"stem":138019,"__hash__":138020},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136331,"toc":138005},[136332,136335,136339,136343,136346,136353,136356,136359,136397,136400,136402,136416,136420,136429,136433,136438,136441,136444,136447,136482,136487,136490,136520,136523,136528,136531,136534,136564,136567,136621,136624,136628,136633,136645,136648,136652,136682,136685,136690,136693,136723,136726,136730,136747,136751,136755,136758,136791,136794,136798,136801,136804,136807,136810,136813,136924,136927,136930,136933,137035,137038,137042,137046,137050,137053,137093,137096,137098,137114,137118,137121,137126,137207,137210,137213,137339,137344,137347,137355,137358,137363,137448,137451,137455,137458,137461,137465,137485,137490,137574,137577,137582,137585,137588,137666,137669,137672,137675,137678,137681,137686,137689,137692,137764,137767,137772,137775,137872,137875,137881,137884,137887,137890,137893,137896,137899,137902,137905,137909,137914,137917,137950,137955,137958,137999,138002],[20,136333,136329],{"id":136334},"_14-html5与css3新特性",[30,136336,136338],{"id":136337},"_141-html5的新特性","14.1 HTML5的新特性",[176,136340,136342],{"id":136341},"_1411-基本标签","14.1.1 基本标签",[10,136344,136345],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[10,136347,136348,136349,136352],{},"这些新特性都有兼容性问题，基本是 ",[358,136350,136351],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[10,136354,136355],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[10,136357,136358],{},"现在使用的是新特性：",[1214,136360,136361,136367,136373,136379,136385,136391],{},[162,136362,136363,136366],{},[42,136364,136365],{},"\u003Cheader>"," 头部标签",[162,136368,136369,136372],{},[42,136370,136371],{},"\u003Cnav>"," 导航标签",[162,136374,136375,136378],{},[42,136376,136377],{},"\u003Carticle>"," 内容标签",[162,136380,136381,136384],{},[42,136382,136383],{},"\u003Csection>"," 定义文档某个区域",[162,136386,136387,136390],{},[42,136388,136389],{},"\u003Caside>"," 侧边栏标签",[162,136392,136393,136396],{},[42,136394,136395],{},"\u003Cfooter>"," 尾部标签",[1545,136398],{"style":126459,"src":136399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[10,136401,238],{},[1214,136403,136404,136407,136410,136413],{},[162,136405,136406],{},"这种语义化标准主要是针对搜索引擎的",[162,136408,136409],{},"这些标签页面中可以经常使用",[162,136411,136412],{},"在IE9中，需要把这些元素转换为块级元素",[162,136414,136415],{},"移动端更喜欢使用这些标签",[176,136417,136419],{"id":136418},"_1412-多媒体标签","14.1.2 多媒体标签",[10,136421,136422,136423,136425,136426,136428],{},"音频 ",[358,136424,28257],{}," 和视频 ",[358,136427,28266],{}," 两个标签",[22081,136430,136432],{"id":136431},"_14121-视频标签-video","14.1.2.1 视频标签- video",[159,136434,136435],{},[162,136436,136437],{},"支持格式：",[1545,136439],{"style":126459,"src":136440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[10,136442,136443],{},"尽量使用MP4，兼容性好",[10,136445,136446],{},"用MP4就可以",[35,136448,136450],{"className":127350,"code":136449,"language":127352,"meta":40,"style":40},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[42,136451,136452],{"__ignoreMap":40},[45,136453,136454,136456,136458,136460,136462,136465,136467,136470,136473,136476,136478,136480],{"class":47,"line":48},[45,136455,1117],{"class":51},[45,136457,28266],{"class":51381},[45,136459,55320],{"class":2046},[45,136461,254],{"class":51},[45,136463,136464],{"class":313},"\"movie.mp4\"",[45,136466,92504],{"class":2046},[45,136468,136469],{"class":2046}," autoplay",[45,136471,136472],{"class":2046}," muted",[45,136474,136475],{"class":2046}," loop",[45,136477,55395],{"class":51},[45,136479,28266],{"class":51381},[45,136481,51388],{"class":51},[159,136483,136484],{"start":125},[162,136485,136486],{},"兼容写法",[10,136488,136489],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[35,136491,136492],{"className":127350,"code":136449,"language":127352,"meta":40,"style":40},[42,136493,136494],{"__ignoreMap":40},[45,136495,136496,136498,136500,136502,136504,136506,136508,136510,136512,136514,136516,136518],{"class":47,"line":48},[45,136497,1117],{"class":51},[45,136499,28266],{"class":51381},[45,136501,55320],{"class":2046},[45,136503,254],{"class":51},[45,136505,136464],{"class":313},[45,136507,92504],{"class":2046},[45,136509,136469],{"class":2046},[45,136511,136472],{"class":2046},[45,136513,136475],{"class":2046},[45,136515,55395],{"class":51},[45,136517,28266],{"class":51381},[45,136519,51388],{"class":51},[10,136521,136522],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[159,136524,136525],{"start":1262},[162,136526,136527],{},"video常用属性",[1545,136529],{"style":126459,"src":136530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[10,136532,136533],{},"poster属性后面是跟的等待加载图片的地址",[35,136535,136536],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,136537,136538],{"__ignoreMap":40},[45,136539,136540,136542,136544,136546,136548,136550,136552,136554,136556,136558,136560,136562],{"class":47,"line":48},[45,136541,1117],{"class":51},[45,136543,1545],{"class":51381},[45,136545,55320],{"class":2046},[45,136547,254],{"class":51},[45,136549,134120],{"class":313},[45,136551,55328],{"class":2046},[45,136553,254],{"class":51},[45,136555,134127],{"class":313},[45,136557,134130],{"class":2046},[45,136559,254],{"class":51},[45,136561,134135],{"class":313},[45,136563,51388],{"class":51},[10,136565,136566],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[35,136568,136570],{"className":126603,"code":136569,"language":126605,"meta":40,"style":40},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[42,136571,136572,136577,136583,136607,136612,136617],{"__ignoreMap":40},[45,136573,136574],{"class":47,"line":48},[45,136575,136576],{"class":267},"\u002F* 2D 位移 *\u002F\n",[45,136578,136579,136581],{"class":47,"line":125},[45,136580,51692],{"class":51381},[45,136582,15655],{"class":51},[45,136584,136585,136588,136590,136593,136595,136597,136599,136601,136603,136605],{"class":47,"line":1262},[45,136586,136587],{"class":257},"  transform",[45,136589,51518],{"class":51},[45,136591,136592],{"class":257},"translate",[45,136594,209],{"class":51},[45,136596,519],{"class":257},[45,136598,51573],{"class":93},[45,136600,12518],{"class":51},[45,136602,863],{"class":257},[45,136604,51573],{"class":93},[45,136606,2802],{"class":51},[45,136608,136609],{"class":47,"line":1277},[45,136610,136611],{"class":267},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[45,136613,136614],{"class":47,"line":1283},[45,136615,136616],{"class":267},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[45,136618,136619],{"class":47,"line":1297},[45,136620,1648],{"class":51},[10,136622,136623],{},"muted:自动静音属性",[22081,136625,136627],{"id":136626},"_14122-音频标签audio","14.1.2.2 音频标签audio",[159,136629,136630],{},[162,136631,136632],{},"基本使用",[10,136634,136635,136636,136641,136642],{},"当前 ",[358,136637,136638],{},[42,136639,136640],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[358,136643,136644],{},"mp3格式",[1545,136646],{"style":126459,"src":136647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[159,136649,136650],{"start":125},[162,136651,136486],{},[35,136653,136654],{"className":127350,"code":136449,"language":127352,"meta":40,"style":40},[42,136655,136656],{"__ignoreMap":40},[45,136657,136658,136660,136662,136664,136666,136668,136670,136672,136674,136676,136678,136680],{"class":47,"line":48},[45,136659,1117],{"class":51},[45,136661,28266],{"class":51381},[45,136663,55320],{"class":2046},[45,136665,254],{"class":51},[45,136667,136464],{"class":313},[45,136669,92504],{"class":2046},[45,136671,136469],{"class":2046},[45,136673,136472],{"class":2046},[45,136675,136475],{"class":2046},[45,136677,55395],{"class":51},[45,136679,28266],{"class":51381},[45,136681,51388],{"class":51},[10,136683,136684],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[159,136686,136687],{"start":1262},[162,136688,136689],{},"常用属性",[1545,136691],{"style":126459,"src":136692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[35,136694,136695],{"className":127350,"code":136449,"language":127352,"meta":40,"style":40},[42,136696,136697],{"__ignoreMap":40},[45,136698,136699,136701,136703,136705,136707,136709,136711,136713,136715,136717,136719,136721],{"class":47,"line":48},[45,136700,1117],{"class":51},[45,136702,28266],{"class":51381},[45,136704,55320],{"class":2046},[45,136706,254],{"class":51},[45,136708,136464],{"class":313},[45,136710,92504],{"class":2046},[45,136712,136469],{"class":2046},[45,136714,136472],{"class":2046},[45,136716,136475],{"class":2046},[45,136718,55395],{"class":51},[45,136720,28266],{"class":51381},[45,136722,51388],{"class":51},[10,136724,136725],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22081,136727,136729],{"id":136728},"_14123-总结","14.1.2.3 总结",[1214,136731,136732,136735,136738,136741,136744],{},[162,136733,136734],{},"音频标签和视频标签使用方式基本一致",[162,136736,136737],{},"浏览器支持情况不同",[162,136739,136740],{},"谷歌浏览器把音频和视频自动播放禁止了",[162,136742,136743],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[162,136745,136746],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[176,136748,136750],{"id":136749},"_1413-表单元素","14.1.3 表单元素",[22081,136752,136754],{"id":136753},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1545,136756],{"style":126459,"src":136757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[35,136759,136761],{"className":127350,"code":136760,"language":127352,"meta":40,"style":40},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[42,136762,136763],{"__ignoreMap":40},[45,136764,136765,136767,136769,136771,136773,136775,136777,136779,136782,136784,136786,136789],{"class":47,"line":48},[45,136766,1117],{"class":51},[45,136768,53902],{"class":51381},[45,136770,53905],{"class":2046},[45,136772,254],{"class":51},[45,136774,62780],{"class":313},[45,136776,15003],{"class":2046},[45,136778,254],{"class":51},[45,136780,136781],{"class":313},"\"username\"",[45,136783,61101],{"class":2046},[45,136785,254],{"class":51},[45,136787,136788],{"class":313},"\"请输入用户名\"",[45,136790,51388],{"class":51},[1545,136792],{"style":126459,"src":136793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22081,136795,136797],{"id":136796},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1545,136799],{"style":126459,"src":136800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[10,136802,136803],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[10,136805,136806],{},"快捷操作：",[1545,136808],{"style":126459,"src":136809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[10,136811,136812],{},"例子1：",[35,136814,136816],{"className":127350,"code":136815,"language":127352,"meta":40,"style":40},"\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",[42,136817,136818,136841,136868,136897,136916],{"__ignoreMap":40},[45,136819,136820,136822,136824,136826,136828,136831,136834,136836,136839],{"class":47,"line":48},[45,136821,1117],{"class":51},[45,136823,66706],{"class":51381},[45,136825,66709],{"class":2046},[45,136827,254],{"class":51},[45,136829,136830],{"class":313},"\"\u002Fsubmit\"",[45,136832,136833],{"class":2046}," method",[45,136835,254],{"class":51},[45,136837,136838],{"class":313},"\"post\"",[45,136840,51388],{"class":51},[45,136842,136843,136845,136847,136849,136851,136853,136855,136857,136859,136861,136863,136866],{"class":47,"line":125},[45,136844,52225],{"class":51},[45,136846,53902],{"class":51381},[45,136848,53905],{"class":2046},[45,136850,254],{"class":51},[45,136852,62780],{"class":313},[45,136854,15003],{"class":2046},[45,136856,254],{"class":51},[45,136858,136781],{"class":313},[45,136860,61101],{"class":2046},[45,136862,254],{"class":51},[45,136864,136865],{"class":313},"\"用户名\"",[45,136867,51388],{"class":51},[45,136869,136870,136872,136874,136876,136878,136881,136883,136885,136888,136890,136892,136895],{"class":47,"line":1262},[45,136871,52225],{"class":51},[45,136873,53902],{"class":51381},[45,136875,53905],{"class":2046},[45,136877,254],{"class":51},[45,136879,136880],{"class":313},"\"password\"",[45,136882,15003],{"class":2046},[45,136884,254],{"class":51},[45,136886,136887],{"class":313},"\"pwd\"",[45,136889,61101],{"class":2046},[45,136891,254],{"class":51},[45,136893,136894],{"class":313},"\"密码\"",[45,136896,51388],{"class":51},[45,136898,136899,136901,136903,136905,136907,136909,136912,136914],{"class":47,"line":1277},[45,136900,52225],{"class":51},[45,136902,53968],{"class":51381},[45,136904,53905],{"class":2046},[45,136906,254],{"class":51},[45,136908,66729],{"class":313},[45,136910,136911],{"class":51},">提交\u003C\u002F",[45,136913,53968],{"class":51381},[45,136915,51388],{"class":51},[45,136917,136918,136920,136922],{"class":47,"line":1283},[45,136919,51866],{"class":51},[45,136921,66706],{"class":51381},[45,136923,51388],{"class":51},[1545,136925],{"style":126459,"src":136926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[10,136928,136929],{},"value是表单域的内容",[10,136931,136932],{},"例子2：",[35,136934,136935],{"className":127350,"code":136815,"language":127352,"meta":40,"style":40},[42,136936,136937,136957,136983,137009,137027],{"__ignoreMap":40},[45,136938,136939,136941,136943,136945,136947,136949,136951,136953,136955],{"class":47,"line":48},[45,136940,1117],{"class":51},[45,136942,66706],{"class":51381},[45,136944,66709],{"class":2046},[45,136946,254],{"class":51},[45,136948,136830],{"class":313},[45,136950,136833],{"class":2046},[45,136952,254],{"class":51},[45,136954,136838],{"class":313},[45,136956,51388],{"class":51},[45,136958,136959,136961,136963,136965,136967,136969,136971,136973,136975,136977,136979,136981],{"class":47,"line":125},[45,136960,52225],{"class":51},[45,136962,53902],{"class":51381},[45,136964,53905],{"class":2046},[45,136966,254],{"class":51},[45,136968,62780],{"class":313},[45,136970,15003],{"class":2046},[45,136972,254],{"class":51},[45,136974,136781],{"class":313},[45,136976,61101],{"class":2046},[45,136978,254],{"class":51},[45,136980,136865],{"class":313},[45,136982,51388],{"class":51},[45,136984,136985,136987,136989,136991,136993,136995,136997,136999,137001,137003,137005,137007],{"class":47,"line":1262},[45,136986,52225],{"class":51},[45,136988,53902],{"class":51381},[45,136990,53905],{"class":2046},[45,136992,254],{"class":51},[45,136994,136880],{"class":313},[45,136996,15003],{"class":2046},[45,136998,254],{"class":51},[45,137000,136887],{"class":313},[45,137002,61101],{"class":2046},[45,137004,254],{"class":51},[45,137006,136894],{"class":313},[45,137008,51388],{"class":51},[45,137010,137011,137013,137015,137017,137019,137021,137023,137025],{"class":47,"line":1277},[45,137012,52225],{"class":51},[45,137014,53968],{"class":51381},[45,137016,53905],{"class":2046},[45,137018,254],{"class":51},[45,137020,66729],{"class":313},[45,137022,136911],{"class":51},[45,137024,53968],{"class":51381},[45,137026,51388],{"class":51},[45,137028,137029,137031,137033],{"class":47,"line":1283},[45,137030,51866],{"class":51},[45,137032,66706],{"class":51381},[45,137034,51388],{"class":51},[1545,137036],{"style":126459,"src":137037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[30,137039,137041],{"id":137040},"_142-css新特性","14.2 CSS新特性",[176,137043,137045],{"id":137044},"_1421-新增选择器","14.2.1 新增选择器",[22081,137047,137049],{"id":137048},"_14211-属性选择器","14.2.1.1 属性选择器",[1545,137051],{"style":126459,"src":137052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[35,137054,137056],{"className":126603,"code":137055,"language":126605,"meta":40,"style":40},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[42,137057,137058,137073,137089],{"__ignoreMap":40},[45,137059,137060,137062,137064,137066,137068,137070],{"class":47,"line":48},[45,137061,53902],{"class":51381},[45,137063,1097],{"class":51},[45,137065,103158],{"class":2046},[45,137067,254],{"class":93},[45,137069,62780],{"class":313},[45,137071,137072],{"class":51},"] {\n",[45,137074,137075,137077,137079,137081,137083,137085,137087],{"class":47,"line":125},[45,137076,70977],{"class":257},[45,137078,51518],{"class":51},[45,137080,426],{"class":257},[45,137082,51573],{"class":93},[45,137084,51602],{"class":257},[45,137086,130183],{"class":257},[45,137088,1373],{"class":51},[45,137090,137091],{"class":47,"line":1262},[45,137092,1648],{"class":51},[1545,137094],{"style":126459,"src":137095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[10,137097,238],{},[1214,137099,137100,137103,137106,137109],{},[162,137101,137102],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[162,137104,137105],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[162,137107,137108],{},"属性选择器也可以选择出来自定义的属性",[162,137110,137111,137113],{},[358,137112,9108],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22081,137115,137117],{"id":137116},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1545,137119],{"style":126459,"src":137120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[159,137122,137123],{},[162,137124,137125],{},"fist-child",[35,137127,137129],{"className":126603,"code":137128,"language":126605,"meta":40,"style":40},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[42,137130,137131,137136,137151,137171,137189],{"__ignoreMap":40},[45,137132,137133],{"class":47,"line":48},[45,137134,137135],{"class":267},"\u002F* 属性选择器 *\u002F\n",[45,137137,137138,137140,137142,137144,137146,137148],{"class":47,"line":125},[45,137139,53902],{"class":51381},[45,137141,1097],{"class":51},[45,137143,103158],{"class":2046},[45,137145,254],{"class":93},[45,137147,62780],{"class":313},[45,137149,137150],{"class":51},"] { }\n",[45,137152,137153,137155,137157,137159,137162,137165,137168],{"class":47,"line":1262},[45,137154,53902],{"class":51381},[45,137156,1097],{"class":51},[45,137158,14777],{"class":2046},[45,137160,137161],{"class":93},"^=",[45,137163,137164],{"class":313},"\"icon\"",[45,137166,137167],{"class":51},"] { }  ",[45,137169,137170],{"class":267},"\u002F* 以 icon 开头 *\u002F\n",[45,137172,137173,137175,137177,137179,137182,137184,137186],{"class":47,"line":1277},[45,137174,53902],{"class":51381},[45,137176,1097],{"class":51},[45,137178,14777],{"class":2046},[45,137180,137181],{"class":93},"$=",[45,137183,137164],{"class":313},[45,137185,137167],{"class":51},[45,137187,137188],{"class":267},"\u002F* 以 icon 结尾 *\u002F\n",[45,137190,137191,137193,137195,137197,137200,137202,137204],{"class":47,"line":1283},[45,137192,53902],{"class":51381},[45,137194,1097],{"class":51},[45,137196,14777],{"class":2046},[45,137198,137199],{"class":93},"*=",[45,137201,137164],{"class":313},[45,137203,137167],{"class":51},[45,137205,137206],{"class":267},"\u002F* 包含 icon *\u002F\n",[10,137208,137209],{},"ul的第一个儿子文本为红色",[10,137211,137212],{},"一定要在冒号前加空格，不然就是选中所有的了",[35,137214,137216],{"className":126603,"code":137215,"language":126605,"meta":40,"style":40},".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",[42,137217,137218,137224,137234,137238,137242,137247,137260,137273,137289,137306,137323],{"__ignoreMap":40},[45,137219,137220,137222],{"class":47,"line":48},[45,137221,126894],{"class":2046},[45,137223,15655],{"class":51},[45,137225,137226,137228,137230,137232],{"class":47,"line":125},[45,137227,70986],{"class":257},[45,137229,51518],{"class":51},[45,137231,57502],{"class":257},[45,137233,1373],{"class":51},[45,137235,137236],{"class":47,"line":1262},[45,137237,1648],{"class":51},[45,137239,137240],{"class":47,"line":1277},[45,137241,136064],{"class":51},[45,137243,137244],{"class":47,"line":1283},[45,137245,137246],{"class":267},"\u002F* 结构伪类选择器 *\u002F\n",[45,137248,137249,137251,137254,137257],{"class":47,"line":1297},[45,137250,162],{"class":51381},[45,137252,137253],{"class":2046},":first-child",[45,137255,137256],{"class":51}," { }           ",[45,137258,137259],{"class":267},"\u002F* 第一个 *\u002F\n",[45,137261,137262,137264,137267,137270],{"class":47,"line":1303},[45,137263,162],{"class":51381},[45,137265,137266],{"class":2046},":last-child",[45,137268,137269],{"class":51}," { }            ",[45,137271,137272],{"class":267},"\u002F* 最后一个 *\u002F\n",[45,137274,137275,137277,137279,137281,137283,137286],{"class":47,"line":1394},[45,137276,162],{"class":51381},[45,137278,129517],{"class":2046},[45,137280,209],{"class":51},[45,137282,286],{"class":257},[45,137284,137285],{"class":51},") { }          ",[45,137287,137288],{"class":267},"\u002F* 第2个 *\u002F\n",[45,137290,137291,137293,137295,137297,137300,137303],{"class":47,"line":1400},[45,137292,162],{"class":51381},[45,137294,129517],{"class":2046},[45,137296,209],{"class":51},[45,137298,137299],{"class":257},"2n",[45,137301,137302],{"class":51},") { }         ",[45,137304,137305],{"class":267},"\u002F* 偶数 *\u002F\n",[45,137307,137308,137310,137312,137314,137317,137320],{"class":47,"line":1412},[45,137309,162],{"class":51381},[45,137311,129517],{"class":2046},[45,137313,209],{"class":51},[45,137315,137316],{"class":257},"2n+1",[45,137318,137319],{"class":51},") { }       ",[45,137321,137322],{"class":267},"\u002F* 奇数 *\u002F\n",[45,137324,137325,137327,137329,137331,137334,137336],{"class":47,"line":1695},[45,137326,162],{"class":51381},[45,137328,129517],{"class":2046},[45,137330,209],{"class":51},[45,137332,137333],{"class":257},"-n+3",[45,137335,137319],{"class":51},[45,137337,137338],{"class":267},"\u002F* 前3个 *\u002F\n",[51692,137340,137343],{"className":137341},[137342],"example","\n  示例内容\n",[10,137345,137346],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1214,137348,137349],{},[162,137350,137351,137354],{},[42,137352,137353],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[10,137356,137357],{},"也就是说它选择的是熊大",[159,137359,137360],{"start":1297},[162,137361,137362],{},"权重",[35,137364,137366],{"className":126603,"code":137365,"language":126605,"meta":40,"style":40},"\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",[42,137367,137368,137372,137382,137392,137406,137420,137434],{"__ignoreMap":40},[45,137369,137370],{"class":47,"line":48},[45,137371,137246],{"class":267},[45,137373,137374,137376,137378,137380],{"class":47,"line":125},[45,137375,162],{"class":51381},[45,137377,137253],{"class":2046},[45,137379,137256],{"class":51},[45,137381,137259],{"class":267},[45,137383,137384,137386,137388,137390],{"class":47,"line":1262},[45,137385,162],{"class":51381},[45,137387,137266],{"class":2046},[45,137389,137269],{"class":51},[45,137391,137272],{"class":267},[45,137393,137394,137396,137398,137400,137402,137404],{"class":47,"line":1277},[45,137395,162],{"class":51381},[45,137397,129517],{"class":2046},[45,137399,209],{"class":51},[45,137401,286],{"class":257},[45,137403,137285],{"class":51},[45,137405,137288],{"class":267},[45,137407,137408,137410,137412,137414,137416,137418],{"class":47,"line":1283},[45,137409,162],{"class":51381},[45,137411,129517],{"class":2046},[45,137413,209],{"class":51},[45,137415,137299],{"class":257},[45,137417,137302],{"class":51},[45,137419,137305],{"class":267},[45,137421,137422,137424,137426,137428,137430,137432],{"class":47,"line":1297},[45,137423,162],{"class":51381},[45,137425,129517],{"class":2046},[45,137427,209],{"class":51},[45,137429,137316],{"class":257},[45,137431,137319],{"class":51},[45,137433,137322],{"class":267},[45,137435,137436,137438,137440,137442,137444,137446],{"class":47,"line":1303},[45,137437,162],{"class":51381},[45,137439,129517],{"class":2046},[45,137441,209],{"class":51},[45,137443,137333],{"class":257},[45,137445,137319],{"class":51},[45,137447,137338],{"class":267},[10,137449,137450],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22081,137452,137454],{"id":137453},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[10,137456,137457],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1545,137459],{"style":126459,"src":137460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[159,137462,137463],{},[162,137464,238],{},[1214,137466,137467,137470,137473,137476,137479,137482],{},[162,137468,137469],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[162,137471,137472],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[162,137474,137475],{},"语法： element::before {}",[162,137477,137478],{},"before 和 after 必须有 content 属性",[162,137480,137481],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[162,137483,137484],{},"伪元素选择器和标签选择器一样，权重为 1",[159,137486,137487],{"start":125},[162,137488,137489],{},"实例",[35,137491,137492],{"className":126603,"code":137365,"language":126605,"meta":40,"style":40},[42,137493,137494,137498,137508,137518,137532,137546,137560],{"__ignoreMap":40},[45,137495,137496],{"class":47,"line":48},[45,137497,137246],{"class":267},[45,137499,137500,137502,137504,137506],{"class":47,"line":125},[45,137501,162],{"class":51381},[45,137503,137253],{"class":2046},[45,137505,137256],{"class":51},[45,137507,137259],{"class":267},[45,137509,137510,137512,137514,137516],{"class":47,"line":1262},[45,137511,162],{"class":51381},[45,137513,137266],{"class":2046},[45,137515,137269],{"class":51},[45,137517,137272],{"class":267},[45,137519,137520,137522,137524,137526,137528,137530],{"class":47,"line":1277},[45,137521,162],{"class":51381},[45,137523,129517],{"class":2046},[45,137525,209],{"class":51},[45,137527,286],{"class":257},[45,137529,137285],{"class":51},[45,137531,137288],{"class":267},[45,137533,137534,137536,137538,137540,137542,137544],{"class":47,"line":1283},[45,137535,162],{"class":51381},[45,137537,129517],{"class":2046},[45,137539,209],{"class":51},[45,137541,137299],{"class":257},[45,137543,137302],{"class":51},[45,137545,137305],{"class":267},[45,137547,137548,137550,137552,137554,137556,137558],{"class":47,"line":1297},[45,137549,162],{"class":51381},[45,137551,129517],{"class":2046},[45,137553,209],{"class":51},[45,137555,137316],{"class":257},[45,137557,137319],{"class":51},[45,137559,137322],{"class":267},[45,137561,137562,137564,137566,137568,137570,137572],{"class":47,"line":1303},[45,137563,162],{"class":51381},[45,137565,129517],{"class":2046},[45,137567,209],{"class":51},[45,137569,137333],{"class":257},[45,137571,137319],{"class":51},[45,137573,137338],{"class":267},[1545,137575],{"style":126459,"src":137576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[159,137578,137579],{"start":1262},[162,137580,137581],{},"使用场景1",[1545,137583],{"style":126459,"src":137584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[10,137586,137587],{},"不需要再加盒子来整红色那部分了",[35,137589,137591],{"className":126603,"code":137590,"language":126605,"meta":40,"style":40},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[42,137592,137593,137598,137607,137618,137628,137632,137641,137652,137662],{"__ignoreMap":40},[45,137594,137595],{"class":47,"line":48},[45,137596,137597],{"class":267},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[45,137599,137600,137602,137605],{"class":47,"line":125},[45,137601,51692],{"class":51381},[45,137603,137604],{"class":2046},"::before",[45,137606,15655],{"class":51},[45,137608,137609,137612,137614,137616],{"class":47,"line":1262},[45,137610,137611],{"class":257},"  content",[45,137613,51518],{"class":51},[45,137615,7735],{"class":313},[45,137617,1373],{"class":51},[45,137619,137620,137622,137624,137626],{"class":47,"line":1277},[45,137621,128219],{"class":257},[45,137623,51518],{"class":51},[45,137625,60950],{"class":257},[45,137627,1373],{"class":51},[45,137629,137630],{"class":47,"line":1283},[45,137631,1648],{"class":51},[45,137633,137634,137636,137639],{"class":47,"line":1297},[45,137635,51692],{"class":51381},[45,137637,137638],{"class":2046},"::after",[45,137640,15655],{"class":51},[45,137642,137643,137645,137647,137650],{"class":47,"line":1303},[45,137644,137611],{"class":257},[45,137646,51518],{"class":51},[45,137648,137649],{"class":313},"\"→\"",[45,137651,1373],{"class":51},[45,137653,137654,137656,137658,137660],{"class":47,"line":1394},[45,137655,70986],{"class":257},[45,137657,51518],{"class":51},[45,137659,62151],{"class":257},[45,137661,1373],{"class":51},[45,137663,137664],{"class":47,"line":1400},[45,137665,1648],{"class":51},[1545,137667],{"style":126459,"src":137668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[10,137670,137671],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1545,137673],{"style":126459,"src":137674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[10,137676,137677],{},"但是在引用时需要先转义一下",[10,137679,137680],{},"content='\\e930'",[159,137682,137683],{"start":1277},[162,137684,137685],{},"使用场景2",[10,137687,137688],{},"仿土豆效果",[10,137690,137691],{},"通过使用伪元素选择器可以减少body中盒子的数量",[35,137693,137694],{"className":126603,"code":137590,"language":126605,"meta":40,"style":40},[42,137695,137696,137700,137708,137718,137728,137732,137740,137750,137760],{"__ignoreMap":40},[45,137697,137698],{"class":47,"line":48},[45,137699,137597],{"class":267},[45,137701,137702,137704,137706],{"class":47,"line":125},[45,137703,51692],{"class":51381},[45,137705,137604],{"class":2046},[45,137707,15655],{"class":51},[45,137709,137710,137712,137714,137716],{"class":47,"line":1262},[45,137711,137611],{"class":257},[45,137713,51518],{"class":51},[45,137715,7735],{"class":313},[45,137717,1373],{"class":51},[45,137719,137720,137722,137724,137726],{"class":47,"line":1277},[45,137721,128219],{"class":257},[45,137723,51518],{"class":51},[45,137725,60950],{"class":257},[45,137727,1373],{"class":51},[45,137729,137730],{"class":47,"line":1283},[45,137731,1648],{"class":51},[45,137733,137734,137736,137738],{"class":47,"line":1297},[45,137735,51692],{"class":51381},[45,137737,137638],{"class":2046},[45,137739,15655],{"class":51},[45,137741,137742,137744,137746,137748],{"class":47,"line":1303},[45,137743,137611],{"class":257},[45,137745,51518],{"class":51},[45,137747,137649],{"class":313},[45,137749,1373],{"class":51},[45,137751,137752,137754,137756,137758],{"class":47,"line":1394},[45,137753,70986],{"class":257},[45,137755,51518],{"class":51},[45,137757,62151],{"class":257},[45,137759,1373],{"class":51},[45,137761,137762],{"class":47,"line":1400},[45,137763,1648],{"class":51},[1545,137765],{"style":126459,"src":137766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[159,137768,137769],{"start":1283},[162,137770,137771],{},"使用场景3",[10,137773,137774],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[35,137776,137778],{"className":126603,"code":137777,"language":126605,"meta":40,"style":40},".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",[42,137779,137780,137786,137796,137800,137804,137808,137816,137826,137836,137840,137848,137858,137868],{"__ignoreMap":40},[45,137781,137782,137784],{"class":47,"line":48},[45,137783,130451],{"class":2046},[45,137785,15655],{"class":51},[45,137787,137788,137790,137792,137794],{"class":47,"line":125},[45,137789,131083],{"class":257},[45,137791,51518],{"class":51},[45,137793,23819],{"class":257},[45,137795,1373],{"class":51},[45,137797,137798],{"class":47,"line":1262},[45,137799,1648],{"class":51},[45,137801,137802],{"class":47,"line":1277},[45,137803,136064],{"class":51},[45,137805,137806],{"class":47,"line":1283},[45,137807,137597],{"class":267},[45,137809,137810,137812,137814],{"class":47,"line":1297},[45,137811,51692],{"class":51381},[45,137813,137604],{"class":2046},[45,137815,15655],{"class":51},[45,137817,137818,137820,137822,137824],{"class":47,"line":1303},[45,137819,137611],{"class":257},[45,137821,51518],{"class":51},[45,137823,7735],{"class":313},[45,137825,1373],{"class":51},[45,137827,137828,137830,137832,137834],{"class":47,"line":1394},[45,137829,128219],{"class":257},[45,137831,51518],{"class":51},[45,137833,60950],{"class":257},[45,137835,1373],{"class":51},[45,137837,137838],{"class":47,"line":1400},[45,137839,1648],{"class":51},[45,137841,137842,137844,137846],{"class":47,"line":1412},[45,137843,51692],{"class":51381},[45,137845,137638],{"class":2046},[45,137847,15655],{"class":51},[45,137849,137850,137852,137854,137856],{"class":47,"line":1695},[45,137851,137611],{"class":257},[45,137853,51518],{"class":51},[45,137855,137649],{"class":313},[45,137857,1373],{"class":51},[45,137859,137860,137862,137864,137866],{"class":47,"line":1700},[45,137861,70986],{"class":257},[45,137863,51518],{"class":51},[45,137865,62151],{"class":257},[45,137867,1373],{"class":51},[45,137869,137870],{"class":47,"line":1706},[45,137871,1648],{"class":51},[10,137873,137874],{},"div {\nmargin: 0 auto;\n}",[35,137876,137879],{"className":137877,"code":137878,"language":5270},[5268],"\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",[42,137880,137878],{"__ignoreMap":40},[10,137882,137883],{},"如果想让多个元素都发生变化",[10,137885,137886],{},"不能如下操作：",[10,137888,137889],{},"transition: width 2s ease 0.5s;",[10,137891,137892],{},"transition: height 2s ease 0.5s;不对！！！",[10,137894,137895],{},"上方会样式冲突，导致不显示任何过渡效果",[10,137897,137898],{},"使用如下：加逗号隔开",[10,137900,137901],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[10,137903,137904],{},"transition all 2s ease;",[176,137906,137908],{"id":137907},"_1426-过渡练习","14.2.6 过渡练习",[159,137910,137911],{},[162,137912,137913],{},"进度条",[1545,137915],{"style":126459,"src":137916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[35,137918,137920],{"className":126603,"code":137919,"language":126605,"meta":40,"style":40},"div {\n  transition: all 0.3s ease;\n}\n",[42,137921,137922,137928,137946],{"__ignoreMap":40},[45,137923,137924,137926],{"class":47,"line":48},[45,137925,51692],{"class":51381},[45,137927,15655],{"class":51},[45,137929,137930,137933,137935,137937,137940,137942,137944],{"class":47,"line":125},[45,137931,137932],{"class":257},"  transition",[45,137934,51518],{"class":51},[45,137936,28204],{"class":257},[45,137938,137939],{"class":257}," 0.3",[45,137941,902],{"class":93},[45,137943,78761],{"class":257},[45,137945,1373],{"class":51},[45,137947,137948],{"class":47,"line":1262},[45,137949,1648],{"class":51},[159,137951,137952],{"start":125},[162,137953,137954],{},"小米logo",[10,137956,137957],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[35,137959,137961],{"className":126603,"code":137960,"language":126605,"meta":40,"style":40},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[42,137962,137963,137968,137974,137990,137995],{"__ignoreMap":40},[45,137964,137965],{"class":47,"line":48},[45,137966,137967],{"class":267},"\u002F* CSS3 过渡 *\u002F\n",[45,137969,137970,137972],{"class":47,"line":125},[45,137971,51692],{"class":51381},[45,137973,15655],{"class":51},[45,137975,137976,137978,137980,137982,137984,137986,137988],{"class":47,"line":1262},[45,137977,137932],{"class":257},[45,137979,51518],{"class":51},[45,137981,28204],{"class":257},[45,137983,137939],{"class":257},[45,137985,902],{"class":93},[45,137987,78761],{"class":257},[45,137989,1373],{"class":51},[45,137991,137992],{"class":47,"line":1277},[45,137993,137994],{"class":267},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[45,137996,137997],{"class":47,"line":1283},[45,137998,1648],{"class":51},[10,138000,138001],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[121,138003,138004],{},"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":40,"searchDepth":125,"depth":125,"links":138006},[138007,138012],{"id":136337,"depth":125,"text":136338,"children":138008},[138009,138010,138011],{"id":136341,"depth":1262,"text":136342},{"id":136418,"depth":1262,"text":136419},{"id":136749,"depth":1262,"text":136750},{"id":137040,"depth":125,"text":137041,"children":138013},[138014,138015],{"id":137044,"depth":1262,"text":137045},{"id":137907,"depth":1262,"text":137908},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136329,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138022,"title":138023,"body":138024,"description":130,"extension":131,"meta":139768,"navigation":133,"path":139769,"seo":139770,"stem":139771,"__hash__":139772},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138025,"toc":139749},[138026,138029,138033,138036,138042,138048,138052,138054,138057,138060,138063,138066,138069,138072,138075,138079,138083,138086,138089,138092,138096,138099,138102,138107,138110,138113,138116,138120,138123,138132,138135,138138,138142,138145,138148,138153,138160,138174,138182,138189,138194,138197,138200,138203,138210,138214,138220,138226,138229,138232,138237,138243,138245,138253,138258,138261,138267,138269,138274,138279,138282,138284,138289,138292,138297,138302,138336,138340,138344,138347,138351,138354,138440,138443,138480,138483,138519,138523,138528,138541,138595,138597,138625,138627,138655,138661,138675,138677,138721,138723,138767,138770,138777,138788,138790,138817,138819,138845,138852,138868,138870,138964,138966,139060,139067,139070,139075,139081,139155,139158,139160,139196,139198,139234,139237,139244,139263,139266,139269,139271,139296,139298,139322,139325,139328,139358,139362,139365,139428,139430,139496,139498,139562,139565,139597,139599,139625,139627,139653,139656,139687,139689,139715,139717,139743,139746],[20,138027,138023],{"id":138028},"_15-品优购项目上篇-搭建与公共模块",[30,138030,138032],{"id":138031},"_151-项目规划","15.1 项目规划",[1545,138034],{"style":126459,"src":138035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[10,138037,138038,138041],{},[358,138039,138040],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[10,138043,138044,138047],{},[358,138045,138046],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[30,138049,138051],{"id":138050},"_152-项目介绍","15.2 项目介绍",[10,138053,138040],{},[1545,138055],{"style":126459,"src":138056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[10,138058,138059],{},"主页：",[1545,138061],{"style":126459,"src":138062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[10,138064,138065],{},"列表页：",[1545,138067],{"style":126459,"src":138068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[10,138070,138071],{},"注册页：",[1545,138073],{"style":126459,"src":138074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[30,138076,138078],{"id":138077},"_153-项目搭建工作","15.3 项目搭建工作",[176,138080,138082],{"id":138081},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1545,138084],{"style":126459,"src":138085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[10,138087,138088],{},"经常更换的图片要放到upload文件夹中",[10,138090,138091],{},"不经常换的放到images文件夹中",[176,138093,138095],{"id":138094},"_1532-创建文件如下","15.3.2 创建文件如下",[1545,138097],{"style":126459,"src":138098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1545,138100],{"style":126459,"src":138101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[10,138103,138104],{},[358,138105,138106],{},"初始化样式：",[10,138108,138109],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[10,138111,138112],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[10,138114,138115],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[176,138117,138119],{"id":138118},"_1533-项目模块化开发","15.3.3 项目模块化开发",[10,138121,138122],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[10,138124,138125,138126,138131],{},"这里最典型的应用就是 ",[358,138127,138128],{},[42,138129,138130],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1545,138133],{"style":126459,"src":138134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[10,138136,138137],{},"通过link方法来引入",[176,138139,138141],{"id":138140},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1545,138143],{"style":126459,"src":138144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[10,138146,138147],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[159,138149,138150],{},[162,138151,138152],{},"制作favicon图标",[10,138154,138155,138156,138159],{},"①把品优购图标切成 ",[42,138157,138158],{},"png"," 图片",[10,138161,138162,138163,138165,138166,138169,138170],{},"②把 ",[42,138164,138158],{}," 图片转换为 ",[42,138167,138168],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[13,138171,138172],{"href":138172,"rel":138173},"http:\u002F\u002Fwww.bitbug.net\u002F",[17],[159,138175,138176,138179],{"start":125},[162,138177,138178],{},"favicon图标放到网站根目录下",[162,138180,138181],{},"HTML页面引入favicon",[10,138183,138184,138185,138188],{},"在html 页面里面的 ",[42,138186,138187],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[10,138190,138191],{},[42,138192,138193],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[10,138195,138196],{},"复制这行代码或者在生成这个的网站进行复制",[1545,138198],{"style":126459,"src":138199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[10,138201,138202],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[10,138204,138205,138206],{},"例如:",[13,138207,138208],{"href":138208,"rel":138209},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[17],[176,138211,138213],{"id":138212},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[10,138215,138216,138219],{},[358,138217,138218],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[10,138221,138222,138225],{},[358,138223,138224],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[10,138227,138228],{},"页面必须有三个标签用来符合 SEO 优化",[1545,138230],{"style":126459,"src":138231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[159,138233,138234],{},[162,138235,138236],{},"title网站标题",[10,138238,138239,138242],{},[358,138240,138241],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[10,138244,68871],{},[1214,138246,138247,138250],{},[162,138248,138249],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[162,138251,138252],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[159,138254,138255],{"start":125},[162,138256,138257],{},"description网站描述",[10,138259,138260],{},"简要说明我们网站主要是做什么的",[10,138262,138263,138266],{},[358,138264,138265],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[10,138268,68871],{},[10,138270,138271],{},[42,138272,138273],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[159,138275,138276],{"start":1262},[162,138277,138278],{},"keywords关键词",[10,138280,138281],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[10,138283,68871],{},[10,138285,138286],{},[42,138287,138288],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[10,138290,138291],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[10,138293,138294],{},[358,138295,138296],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[159,138298,138299],{"start":1277},[162,138300,138301],{},"代码总结",[35,138303,138304],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},[42,138305,138306,138310,138324,138328],{"__ignoreMap":40},[45,138307,138308],{"class":47,"line":48},[45,138309,130714],{"class":267},[45,138311,138312,138314,138316,138318,138320,138322],{"class":47,"line":125},[45,138313,1117],{"class":51},[45,138315,51692],{"class":51381},[45,138317,53567],{"class":2046},[45,138319,254],{"class":51},[45,138321,130727],{"class":313},[45,138323,51388],{"class":51},[45,138325,138326],{"class":47,"line":1262},[45,138327,130734],{"class":51},[45,138329,138330,138332,138334],{"class":47,"line":1277},[45,138331,51866],{"class":51},[45,138333,51692],{"class":51381},[45,138335,51388],{"class":51},[30,138337,138339],{"id":138338},"_154-项目公共部分制作","15.4 项目公共部分制作",[176,138341,138343],{"id":138342},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1545,138345],{"style":126459,"src":138346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[176,138348,138350],{"id":138349},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[10,138352,138353],{},"布局思路：",[1214,138355,138356,138359,138362,138384,138417],{},[162,138357,138358],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[162,138360,138361],{},"里面包含版心的盒子",[162,138363,138364,138365],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1214,138366,138367,138375,138381],{},[162,138368,138369,138370,21583,138372,138374],{},"1 号盒子 里面包含一个",[42,138371,1214],{},[42,138373,1214],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[162,138376,138377,138378,138380],{},"里面的内容是水平排列，所以需要给",[42,138379,162],{},"设置浮动",[162,138382,138383],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[162,138385,138386,138387],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1214,138388,138389,138403,138408],{},[162,138390,138391,138392,21583,138394,138396,138397,138399,138400,138402],{},"2 号盒子 里面包含一个",[42,138393,1214],{},[42,138395,1214],{},"包裹",[42,138398,162],{},"，中间的",[42,138401,1128],{},"可以用样式去设置，也可以用字符 |",[162,138404,138405,138406,138380],{},"里面内容水平排列，给",[42,138407,162],{},[162,138409,138410,138411,138413,138414,138416],{},"找到里面所有偶数的 ",[42,138412,162],{}," 设置样式（偶数的 ",[42,138415,162],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[162,138418,138419,138420],{},"需要用到字体图标",[1214,138421,138422,138428,138431,138434,138437],{},[162,138423,138424,138425],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[42,138426,138427],{},"arrow-icon",[162,138429,138430],{},"先要引入字体图片的资源",[162,138432,138433],{},"在样式里面利用 font-face 来进行声明",[162,138435,138436],{},"在伪元素的 content属性设置 图标的编码",[162,138438,138439],{},"给伪元素设置font-family属性",[10,138441,138442],{},"结构实例代码：",[35,138444,138446],{"className":126603,"code":138445,"language":126605,"meta":40,"style":40},"div::before {\n  content: \"\";\n  display: block;\n}\n",[42,138447,138448,138456,138466,138476],{"__ignoreMap":40},[45,138449,138450,138452,138454],{"class":47,"line":48},[45,138451,51692],{"class":51381},[45,138453,137604],{"class":2046},[45,138455,15655],{"class":51},[45,138457,138458,138460,138462,138464],{"class":47,"line":125},[45,138459,137611],{"class":257},[45,138461,51518],{"class":51},[45,138463,7735],{"class":313},[45,138465,1373],{"class":51},[45,138467,138468,138470,138472,138474],{"class":47,"line":1262},[45,138469,128219],{"class":257},[45,138471,51518],{"class":51},[45,138473,60950],{"class":257},[45,138475,1373],{"class":51},[45,138477,138478],{"class":47,"line":1277},[45,138479,1648],{"class":51},[10,138481,138482],{},"样式实例代码：",[35,138484,138485],{"className":126603,"code":138445,"language":126605,"meta":40,"style":40},[42,138486,138487,138495,138505,138515],{"__ignoreMap":40},[45,138488,138489,138491,138493],{"class":47,"line":48},[45,138490,51692],{"class":51381},[45,138492,137604],{"class":2046},[45,138494,15655],{"class":51},[45,138496,138497,138499,138501,138503],{"class":47,"line":125},[45,138498,137611],{"class":257},[45,138500,51518],{"class":51},[45,138502,7735],{"class":313},[45,138504,1373],{"class":51},[45,138506,138507,138509,138511,138513],{"class":47,"line":1262},[45,138508,128219],{"class":257},[45,138510,51518],{"class":51},[45,138512,60950],{"class":257},[45,138514,1373],{"class":51},[45,138516,138517],{"class":47,"line":1277},[45,138518,1648],{"class":51},[176,138520,138522],{"id":138521},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1214,138524,138525],{},[162,138526,138527],{},"header 盒子必须要有高度",[10,138529,138530,138531,138533,138534],{},"1 号盒子是 ",[42,138532,131615],{}," 标志定位，在正常开发过程中， ",[358,138535,138536,138537,138540],{},"logo的布局其实是有讲究的，需要进行 ",[42,138538,138539],{},"logoSEO","的优化 （★★★）",[1214,138542,138543,138551,138559,138586],{},[162,138544,138545,138547,138548,138550],{},[42,138546,131615],{}," 里面首先放一个 ",[42,138549,20],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[162,138552,138553,138555,138556,138558],{},[42,138554,20],{}," 里面再放一个链接，可以返回首页的，把 ",[42,138557,131615],{}," 的背景图片给链接即可",[162,138560,138561,138562],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1214,138563,138564,138579],{},[162,138565,138566,138567,138570,138571,138574,138575,138578],{},"方法1：",[42,138568,138569],{},"text-indent"," 移到盒子外面（",[42,138572,138573],{},"text-indent: -9999px",") ，然后 ",[42,138576,138577],{},"overflow:hidden"," ，淘宝的做法",[162,138580,138581,138582,138585],{},"方法2：直接给 ",[42,138583,138584],{},"font-size: 0;"," 就看不到文字了，京东的做法",[162,138587,138588,138589,138591,138592,138594],{},"最后给链接一个 ",[42,138590,51488],{}," 属性，这样鼠标放到 ",[42,138593,131615],{}," 上就可以看到提示文字了",[10,138596,138442],{},[35,138598,138599],{"className":127350,"code":131836,"language":127352,"meta":40,"style":40},[42,138600,138601],{"__ignoreMap":40},[45,138602,138603,138605,138607,138609,138611,138613,138615,138617,138619,138621,138623],{"class":47,"line":48},[45,138604,1117],{"class":51},[45,138606,13],{"class":51381},[45,138608,61138],{"class":2046},[45,138610,254],{"class":51},[45,138612,131851],{"class":313},[45,138614,131854],{"class":2046},[45,138616,254],{"class":51},[45,138618,131859],{"class":313},[45,138620,131862],{"class":51},[45,138622,13],{"class":51381},[45,138624,51388],{"class":51},[10,138626,138482],{},[35,138628,138629],{"className":127350,"code":131836,"language":127352,"meta":40,"style":40},[42,138630,138631],{"__ignoreMap":40},[45,138632,138633,138635,138637,138639,138641,138643,138645,138647,138649,138651,138653],{"class":47,"line":48},[45,138634,1117],{"class":51},[45,138636,13],{"class":51381},[45,138638,61138],{"class":2046},[45,138640,254],{"class":51},[45,138642,131851],{"class":313},[45,138644,131854],{"class":2046},[45,138646,254],{"class":51},[45,138648,131859],{"class":313},[45,138650,131862],{"class":51},[45,138652,13],{"class":51381},[45,138654,51388],{"class":51},[10,138656,138657,138658,138660],{},"2 号盒子是 ",[42,138659,131628],{}," 搜索模块定位",[1214,138662,138663,138666,138669,138672],{},[162,138664,138665],{},"search盒子利用定位的方式放在对应的位置",[162,138667,138668],{},"search盒子设置绝对定位，header盒子设置相对定位",[162,138670,138671],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[162,138673,138674],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[10,138676,138442],{},[35,138678,138679],{"className":126603,"code":131923,"language":126605,"meta":40,"style":40},[42,138680,138681,138703,138707,138717],{"__ignoreMap":40},[45,138682,138683,138685,138687,138689,138691,138693,138695,138697,138699,138701],{"class":47,"line":48},[45,138684,51692],{"class":51381},[45,138686,12518],{"class":51},[45,138688,10],{"class":51381},[45,138690,12518],{"class":51},[45,138692,20],{"class":51381},[45,138694,12518],{"class":51},[45,138696,1214],{"class":51381},[45,138698,12518],{"class":51},[45,138700,162],{"class":51381},[45,138702,15655],{"class":51},[45,138704,138705],{"class":47,"line":125},[45,138706,131952],{"class":267},[45,138708,138709,138711,138713,138715],{"class":47,"line":1262},[45,138710,128219],{"class":257},[45,138712,51518],{"class":51},[45,138714,60950],{"class":257},[45,138716,1373],{"class":51},[45,138718,138719],{"class":47,"line":1277},[45,138720,1648],{"class":51},[10,138722,138482],{},[35,138724,138725],{"className":126603,"code":131923,"language":126605,"meta":40,"style":40},[42,138726,138727,138749,138753,138763],{"__ignoreMap":40},[45,138728,138729,138731,138733,138735,138737,138739,138741,138743,138745,138747],{"class":47,"line":48},[45,138730,51692],{"class":51381},[45,138732,12518],{"class":51},[45,138734,10],{"class":51381},[45,138736,12518],{"class":51},[45,138738,20],{"class":51381},[45,138740,12518],{"class":51},[45,138742,1214],{"class":51381},[45,138744,12518],{"class":51},[45,138746,162],{"class":51381},[45,138748,15655],{"class":51},[45,138750,138751],{"class":47,"line":125},[45,138752,131952],{"class":267},[45,138754,138755,138757,138759,138761],{"class":47,"line":1262},[45,138756,128219],{"class":257},[45,138758,51518],{"class":51},[45,138760,60950],{"class":257},[45,138762,1373],{"class":51},[45,138764,138765],{"class":47,"line":1277},[45,138766,1648],{"class":51},[10,138768,138769],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[10,138771,138772,138773,138776],{},"3 号盒子是 ",[42,138774,138775],{},"hotwords"," 热词模块定位",[1214,138778,138779,138782,138785],{},[162,138780,138781],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[162,138783,138784],{},"给里面所有的a标签设置 左右10px的外边距",[162,138786,138787],{},"给第一个a标签设置文字变红色（#c81623）",[10,138789,138442],{},[35,138791,138793],{"className":126603,"code":138792,"language":126605,"meta":40,"style":40},"div {\n  margin: 0 auto;\n}\n",[42,138794,138795,138801,138813],{"__ignoreMap":40},[45,138796,138797,138799],{"class":47,"line":48},[45,138798,51692],{"class":51381},[45,138800,15655],{"class":51},[45,138802,138803,138805,138807,138809,138811],{"class":47,"line":125},[45,138804,70551],{"class":257},[45,138806,51518],{"class":51},[45,138808,400],{"class":257},[45,138810,51637],{"class":257},[45,138812,1373],{"class":51},[45,138814,138815],{"class":47,"line":1262},[45,138816,1648],{"class":51},[10,138818,138482],{},[35,138820,138821],{"className":126603,"code":138792,"language":126605,"meta":40,"style":40},[42,138822,138823,138829,138841],{"__ignoreMap":40},[45,138824,138825,138827],{"class":47,"line":48},[45,138826,51692],{"class":51381},[45,138828,15655],{"class":51},[45,138830,138831,138833,138835,138837,138839],{"class":47,"line":125},[45,138832,70551],{"class":257},[45,138834,51518],{"class":51},[45,138836,400],{"class":257},[45,138838,51637],{"class":257},[45,138840,1373],{"class":51},[45,138842,138843],{"class":47,"line":1262},[45,138844,1648],{"class":51},[10,138846,138847,138848,138851],{},"4 号盒子是 ",[42,138849,138850],{},"shopcar"," 购物车模块",[1214,138853,138854,138859,138862,138865],{},[162,138855,123386,138856,138858],{},[42,138857,138850],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[162,138860,138861],{},"count 统计部分用绝对定位做",[162,138863,138864],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[162,138866,138867],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[10,138869,138442],{},[35,138871,138872],{"className":126603,"code":132035,"language":126605,"meta":40,"style":40},[42,138873,138874,138878,138892,138896,138910,138914,138928,138932,138946,138950],{"__ignoreMap":40},[45,138875,138876],{"class":47,"line":48},[45,138877,132042],{"class":267},[45,138879,138880,138882,138884,138886,138888,138890],{"class":47,"line":125},[45,138881,132047],{"class":2046},[45,138883,79888],{"class":51},[45,138885,128963],{"class":257},[45,138887,51518],{"class":51},[45,138889,132056],{"class":257},[45,138891,129533],{"class":51},[45,138893,138894],{"class":47,"line":1262},[45,138895,132063],{"class":267},[45,138897,138898,138900,138902,138904,138906,138908],{"class":47,"line":1277},[45,138899,132068],{"class":2046},[45,138901,79888],{"class":51},[45,138903,128963],{"class":257},[45,138905,51518],{"class":51},[45,138907,54845],{"class":257},[45,138909,129533],{"class":51},[45,138911,138912],{"class":47,"line":1283},[45,138913,132083],{"class":267},[45,138915,138916,138918,138920,138922,138924,138926],{"class":47,"line":1297},[45,138917,132088],{"class":2046},[45,138919,79888],{"class":51},[45,138921,128963],{"class":257},[45,138923,51518],{"class":51},[45,138925,54912],{"class":257},[45,138927,129533],{"class":51},[45,138929,138930],{"class":47,"line":1303},[45,138931,132103],{"class":267},[45,138933,138934,138936,138938,138940,138942,138944],{"class":47,"line":1394},[45,138935,132108],{"class":2046},[45,138937,79888],{"class":51},[45,138939,128963],{"class":257},[45,138941,51518],{"class":51},[45,138943,86314],{"class":257},[45,138945,129533],{"class":51},[45,138947,138948],{"class":47,"line":1400},[45,138949,132123],{"class":267},[45,138951,138952,138954,138956,138958,138960,138962],{"class":47,"line":1412},[45,138953,132128],{"class":2046},[45,138955,79888],{"class":51},[45,138957,128963],{"class":257},[45,138959,51518],{"class":51},[45,138961,132137],{"class":257},[45,138963,129533],{"class":51},[10,138965,138482],{},[35,138967,138968],{"className":126603,"code":132035,"language":126605,"meta":40,"style":40},[42,138969,138970,138974,138988,138992,139006,139010,139024,139028,139042,139046],{"__ignoreMap":40},[45,138971,138972],{"class":47,"line":48},[45,138973,132042],{"class":267},[45,138975,138976,138978,138980,138982,138984,138986],{"class":47,"line":125},[45,138977,132047],{"class":2046},[45,138979,79888],{"class":51},[45,138981,128963],{"class":257},[45,138983,51518],{"class":51},[45,138985,132056],{"class":257},[45,138987,129533],{"class":51},[45,138989,138990],{"class":47,"line":1262},[45,138991,132063],{"class":267},[45,138993,138994,138996,138998,139000,139002,139004],{"class":47,"line":1277},[45,138995,132068],{"class":2046},[45,138997,79888],{"class":51},[45,138999,128963],{"class":257},[45,139001,51518],{"class":51},[45,139003,54845],{"class":257},[45,139005,129533],{"class":51},[45,139007,139008],{"class":47,"line":1283},[45,139009,132083],{"class":267},[45,139011,139012,139014,139016,139018,139020,139022],{"class":47,"line":1297},[45,139013,132088],{"class":2046},[45,139015,79888],{"class":51},[45,139017,128963],{"class":257},[45,139019,51518],{"class":51},[45,139021,54912],{"class":257},[45,139023,129533],{"class":51},[45,139025,139026],{"class":47,"line":1303},[45,139027,132103],{"class":267},[45,139029,139030,139032,139034,139036,139038,139040],{"class":47,"line":1394},[45,139031,132108],{"class":2046},[45,139033,79888],{"class":51},[45,139035,128963],{"class":257},[45,139037,51518],{"class":51},[45,139039,86314],{"class":257},[45,139041,129533],{"class":51},[45,139043,139044],{"class":47,"line":1400},[45,139045,132123],{"class":267},[45,139047,139048,139050,139052,139054,139056,139058],{"class":47,"line":1412},[45,139049,132128],{"class":2046},[45,139051,79888],{"class":51},[45,139053,128963],{"class":257},[45,139055,51518],{"class":51},[45,139057,132137],{"class":257},[45,139059,129533],{"class":51},[176,139061,139063,139064,139066],{"id":139062},"_1544-nav导航模块制作","15.4.4 ",[42,139065,53794],{},"导航模块制作",[1545,139068],{"style":126459,"src":139069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[10,139071,139072,139074],{},[42,139073,53794],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[10,139076,139077,139078],{},"1 号盒子左侧浮动，",[42,139079,139080],{},"dropdown",[1214,139082,139083,139093,139101,139107,139115,139125,139133,139144],{},[162,139084,139085,139086,101069,139089,139092],{},"1号盒子有讲究，根据相关性 里面包含 ",[42,139087,139088],{},".dt",[42,139090,139091],{},".dd"," 两个盒子",[162,139094,139095,139097,139098,139100],{},[42,139096,139088],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[42,139099,139091],{}," 挤到下面去了",[162,139102,139103,139104,139106],{},"给 ",[42,139105,139091],{}," 盒子设置宽度 和 高度，以及背景颜色",[162,139108,139103,139109,139111,139112,120288],{},[42,139110,139091],{}," 盒子里面定义 无序列表 （",[42,139113,139114],{},"ul > li > a",[162,139116,139117,139118,139120,139121,139124],{},"每个 ",[42,139119,162],{}," 都有一个高度（",[42,139122,139123],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[162,139126,139103,139127,139129,139130,120288],{},[42,139128,162],{}," 里面的a设置文字大小（",[42,139131,139132],{},"14px",[162,139134,139103,139135,139137,139138,139140,139141,139143],{},[42,139136,162],{}," 设置 ",[42,139139,127764],{},"，当鼠标移入的时候，让",[42,139142,162],{},"的背景变成白色，让里面的文字变成红色",[162,139145,139146,139148,139149,139151,139152,139154],{},[42,139147,162],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[42,139150,162],{},"的右侧，那么给",[42,139153,162],{},"设置相对定位",[10,139156,139157],{},"一定要注意相关性",[10,139159,138442],{},[35,139161,139162],{"className":126603,"code":138445,"language":126605,"meta":40,"style":40},[42,139163,139164,139172,139182,139192],{"__ignoreMap":40},[45,139165,139166,139168,139170],{"class":47,"line":48},[45,139167,51692],{"class":51381},[45,139169,137604],{"class":2046},[45,139171,15655],{"class":51},[45,139173,139174,139176,139178,139180],{"class":47,"line":125},[45,139175,137611],{"class":257},[45,139177,51518],{"class":51},[45,139179,7735],{"class":313},[45,139181,1373],{"class":51},[45,139183,139184,139186,139188,139190],{"class":47,"line":1262},[45,139185,128219],{"class":257},[45,139187,51518],{"class":51},[45,139189,60950],{"class":257},[45,139191,1373],{"class":51},[45,139193,139194],{"class":47,"line":1277},[45,139195,1648],{"class":51},[10,139197,138482],{},[35,139199,139200],{"className":126603,"code":138445,"language":126605,"meta":40,"style":40},[42,139201,139202,139210,139220,139230],{"__ignoreMap":40},[45,139203,139204,139206,139208],{"class":47,"line":48},[45,139205,51692],{"class":51381},[45,139207,137604],{"class":2046},[45,139209,15655],{"class":51},[45,139211,139212,139214,139216,139218],{"class":47,"line":125},[45,139213,137611],{"class":257},[45,139215,51518],{"class":51},[45,139217,7735],{"class":313},[45,139219,1373],{"class":51},[45,139221,139222,139224,139226,139228],{"class":47,"line":1262},[45,139223,128219],{"class":257},[45,139225,51518],{"class":51},[45,139227,60950],{"class":257},[45,139229,1373],{"class":51},[45,139231,139232],{"class":47,"line":1277},[45,139233,1648],{"class":51},[10,139235,139236],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[10,139238,139239,139240,139243],{},"2 号盒子左侧浮动，",[42,139241,139242],{},"navitems"," 导航栏组",[1214,139245,139246,139251,139260],{},[162,139247,139248,139249],{},"里面结构是 ",[42,139250,139114],{},[162,139252,139253,139254,139256,139257,139259],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[42,139255,13],{},"左右的",[42,139258,30964],{},"把两侧撑开",[162,139261,139262],{},"让文字垂直居中（行高等于高度）",[1545,139264],{"style":126459,"src":139265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[10,139267,139268],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[10,139270,138442],{},[35,139272,139274],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},".box {\n  float: left;\n}\n",[42,139275,139276,139282,139292],{"__ignoreMap":40},[45,139277,139278,139280],{"class":47,"line":48},[45,139279,130451],{"class":2046},[45,139281,15655],{"class":51},[45,139283,139284,139286,139288,139290],{"class":47,"line":125},[45,139285,131083],{"class":257},[45,139287,51518],{"class":51},[45,139289,23819],{"class":257},[45,139291,1373],{"class":51},[45,139293,139294],{"class":47,"line":1262},[45,139295,1648],{"class":51},[10,139297,138482],{},[35,139299,139300],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,139301,139302,139308,139318],{"__ignoreMap":40},[45,139303,139304,139306],{"class":47,"line":48},[45,139305,130451],{"class":2046},[45,139307,15655],{"class":51},[45,139309,139310,139312,139314,139316],{"class":47,"line":125},[45,139311,131083],{"class":257},[45,139313,51518],{"class":51},[45,139315,23819],{"class":257},[45,139317,1373],{"class":51},[45,139319,139320],{"class":47,"line":1262},[45,139321,1648],{"class":51},[10,139323,139324],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1545,139326],{"style":126459,"src":139327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[35,139329,139330],{"className":126603,"code":130760,"language":126605,"meta":40,"style":40},[42,139331,139332,139338,139354],{"__ignoreMap":40},[45,139333,139334,139336],{"class":47,"line":48},[45,139335,51692],{"class":51381},[45,139337,15655],{"class":51},[45,139339,139340,139342,139344,139346,139348,139350,139352],{"class":47,"line":125},[45,139341,70977],{"class":257},[45,139343,51518],{"class":51},[45,139345,426],{"class":257},[45,139347,51573],{"class":93},[45,139349,51602],{"class":257},[45,139351,129995],{"class":257},[45,139353,1373],{"class":51},[45,139355,139356],{"class":47,"line":1262},[45,139357,1648],{"class":51},[176,139359,139361],{"id":139360},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1545,139363],{"style":126459,"src":139364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1214,139366,139367,139372,139377],{},[162,139368,139369,139371],{},[42,139370,131806],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[162,139373,139374,139376],{},[42,139375,131806],{}," 里面有一个大的版心",[162,139378,139379,139380,139383,139384],{},"版心里面包含 1 号盒子，",[42,139381,139382],{},"mod_service"," 是服务模块，mod 是模块的意思",[1214,139385,139386,139391,139404,139420,139425],{},[162,139387,139103,139388,139390],{},[42,139389,139382],{}," 设置高度（80px）和下边框",[162,139392,139393,139394,139397,139398,139400,139401,139403],{},"在里面定义 ",[42,139395,139396],{},"ul > li"," ,每个",[42,139399,162],{}," 宽度是300px 高度是 50px，给每个",[42,139402,162],{},"设置35px的左内边距",[162,139405,139406,139407,139409,139410,139412,139413,139415,139416,18493,139418,120288],{},"在每个",[42,139408,162],{},"里面，放一个 ",[42,139411,22993],{},"（里面放图标），一个",[42,139414,51692],{},"（里面放",[42,139417,51692],{},[42,139419,10],{},[162,139421,139103,139422,139424],{},[42,139423,22993],{},"设置浮动，让h5与这个div左右排列",[162,139426,139427],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[10,139429,138442],{},[35,139431,139433],{"className":126603,"code":139432,"language":126605,"meta":40,"style":40},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[42,139434,139435,139441,139453,139465,139492],{"__ignoreMap":40},[45,139436,139437,139439],{"class":47,"line":48},[45,139438,134360],{"class":2046},[45,139440,15655],{"class":51},[45,139442,139443,139445,139447,139449,139451],{"class":47,"line":125},[45,139444,70649],{"class":257},[45,139446,51518],{"class":51},[45,139448,907],{"class":257},[45,139450,51573],{"class":93},[45,139452,1373],{"class":51},[45,139454,139455,139457,139459,139461,139463],{"class":47,"line":1262},[45,139456,70869],{"class":257},[45,139458,51518],{"class":51},[45,139460,907],{"class":257},[45,139462,51573],{"class":93},[45,139464,1373],{"class":51},[45,139466,139467,139469,139471,139473,139475,139477,139479,139481,139484,139486,139488,139490],{"class":47,"line":1277},[45,139468,70692],{"class":257},[45,139470,51518],{"class":51},[45,139472,61807],{"class":257},[45,139474,209],{"class":51},[45,139476,134399],{"class":5299},[45,139478,13797],{"class":51},[45,139480,61817],{"class":257},[45,139482,139483],{"class":257}," -10",[45,139485,51573],{"class":93},[45,139487,134418],{"class":257},[45,139489,51573],{"class":93},[45,139491,1373],{"class":51},[45,139493,139494],{"class":47,"line":1283},[45,139495,1648],{"class":51},[10,139497,138482],{},[35,139499,139500],{"className":126603,"code":139432,"language":126605,"meta":40,"style":40},[42,139501,139502,139508,139520,139532,139558],{"__ignoreMap":40},[45,139503,139504,139506],{"class":47,"line":48},[45,139505,134360],{"class":2046},[45,139507,15655],{"class":51},[45,139509,139510,139512,139514,139516,139518],{"class":47,"line":125},[45,139511,70649],{"class":257},[45,139513,51518],{"class":51},[45,139515,907],{"class":257},[45,139517,51573],{"class":93},[45,139519,1373],{"class":51},[45,139521,139522,139524,139526,139528,139530],{"class":47,"line":1262},[45,139523,70869],{"class":257},[45,139525,51518],{"class":51},[45,139527,907],{"class":257},[45,139529,51573],{"class":93},[45,139531,1373],{"class":51},[45,139533,139534,139536,139538,139540,139542,139544,139546,139548,139550,139552,139554,139556],{"class":47,"line":1277},[45,139535,70692],{"class":257},[45,139537,51518],{"class":51},[45,139539,61807],{"class":257},[45,139541,209],{"class":51},[45,139543,134399],{"class":5299},[45,139545,13797],{"class":51},[45,139547,61817],{"class":257},[45,139549,139483],{"class":257},[45,139551,51573],{"class":93},[45,139553,134418],{"class":257},[45,139555,51573],{"class":93},[45,139557,1373],{"class":51},[45,139559,139560],{"class":47,"line":1283},[45,139561,1648],{"class":51},[10,139563,139564],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1214,139566,139567,139570,139576,139582,139594],{},[162,139568,139569],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[162,139571,139572,139573,120288],{},"里面的布局利用 自定义列表来实现（",[42,139574,139575],{},"dl > dt + dd",[162,139577,139103,139578,139581],{},[42,139579,139580],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[162,139583,139103,139584,139587,139588,18493,139590,139593],{},[42,139585,139586],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[42,139589,139586],{},[42,139591,139592],{},"dd","之间有些距离",[162,139595,139596],{},"最后一个 dl 结构和样式不一样，需要单独设置",[10,139598,138442],{},[35,139600,139601],{"className":126603,"code":138792,"language":126605,"meta":40,"style":40},[42,139602,139603,139609,139621],{"__ignoreMap":40},[45,139604,139605,139607],{"class":47,"line":48},[45,139606,51692],{"class":51381},[45,139608,15655],{"class":51},[45,139610,139611,139613,139615,139617,139619],{"class":47,"line":125},[45,139612,70551],{"class":257},[45,139614,51518],{"class":51},[45,139616,400],{"class":257},[45,139618,51637],{"class":257},[45,139620,1373],{"class":51},[45,139622,139623],{"class":47,"line":1262},[45,139624,1648],{"class":51},[10,139626,138482],{},[35,139628,139629],{"className":126603,"code":138792,"language":126605,"meta":40,"style":40},[42,139630,139631,139637,139649],{"__ignoreMap":40},[45,139632,139633,139635],{"class":47,"line":48},[45,139634,51692],{"class":51381},[45,139636,15655],{"class":51},[45,139638,139639,139641,139643,139645,139647],{"class":47,"line":125},[45,139640,70551],{"class":257},[45,139642,51518],{"class":51},[45,139644,400],{"class":257},[45,139646,51637],{"class":257},[45,139648,1373],{"class":51},[45,139650,139651],{"class":47,"line":1262},[45,139652,1648],{"class":51},[10,139654,139655],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1214,139657,139658,139667,139670,139681],{},[162,139659,139660,139661,139663,139664,139666],{},"分为上下两块，上面是 ",[42,139662,131823],{}," 友情链接，下面是 ",[42,139665,131816],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[162,139668,139669],{},"把内容分别复制到相应模块中",[162,139671,139103,139672,139674,139675,139677,139678,139680],{},[42,139673,131823],{}," 设置 15px 的下外边距，给",[42,139676,131823],{}," 里面 的 ",[42,139679,13],{}," 标签设置 左右 3px 的外边距",[162,139682,139683,139684,139686],{},"给",[42,139685,131816],{}," 设置 20px 的行高",[10,139688,138442],{},[35,139690,139691],{"className":126603,"code":138792,"language":126605,"meta":40,"style":40},[42,139692,139693,139699,139711],{"__ignoreMap":40},[45,139694,139695,139697],{"class":47,"line":48},[45,139696,51692],{"class":51381},[45,139698,15655],{"class":51},[45,139700,139701,139703,139705,139707,139709],{"class":47,"line":125},[45,139702,70551],{"class":257},[45,139704,51518],{"class":51},[45,139706,400],{"class":257},[45,139708,51637],{"class":257},[45,139710,1373],{"class":51},[45,139712,139713],{"class":47,"line":1262},[45,139714,1648],{"class":51},[10,139716,138482],{},[35,139718,139719],{"className":126603,"code":138792,"language":126605,"meta":40,"style":40},[42,139720,139721,139727,139739],{"__ignoreMap":40},[45,139722,139723,139725],{"class":47,"line":48},[45,139724,51692],{"class":51381},[45,139726,15655],{"class":51},[45,139728,139729,139731,139733,139735,139737],{"class":47,"line":125},[45,139730,70551],{"class":257},[45,139732,51518],{"class":51},[45,139734,400],{"class":257},[45,139736,51637],{"class":257},[45,139738,1373],{"class":51},[45,139740,139741],{"class":47,"line":1262},[45,139742,1648],{"class":51},[10,139744,139745],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[121,139747,139748],{},"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":40,"searchDepth":125,"depth":125,"links":139750},[139751,139752,139753,139760],{"id":138031,"depth":125,"text":138032},{"id":138050,"depth":125,"text":138051},{"id":138077,"depth":125,"text":138078,"children":139754},[139755,139756,139757,139758,139759],{"id":138081,"depth":1262,"text":138082},{"id":138094,"depth":1262,"text":138095},{"id":138118,"depth":1262,"text":138119},{"id":138140,"depth":1262,"text":138141},{"id":138212,"depth":1262,"text":138213},{"id":138338,"depth":125,"text":138339,"children":139761},[139762,139763,139764,139765,139767],{"id":138342,"depth":1262,"text":138343},{"id":138349,"depth":1262,"text":138350},{"id":138521,"depth":1262,"text":138522},{"id":139062,"depth":1262,"text":139766},"15.4.4 nav导航模块制作",{"id":139360,"depth":1262,"text":139361},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138023,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139774,"title":139775,"body":139776,"description":130,"extension":131,"meta":142178,"navigation":133,"path":142179,"seo":142180,"stem":142181,"__hash__":142182},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139777,"toc":142155},[139778,139781,139785,139789,139801,139804,139807,139810,139821,139823,139847,139849,139873,139878,139881,139883,139919,139921,139957,139960,139965,139968,139971,139974,140004,140011,140014,140024,140026,140060,140063,140097,140103,140120,140122,140158,140160,140196,140201,140226,140228,140254,140256,140280,140287,140290,140354,140356,140398,140400,140440,140447,140452,140454,140484,140486,140516,140520,140523,140530,140542,140544,140570,140572,140596,140599,140601,140625,140631,140641,140643,140673,140675,140705,140712,140753,140755,140791,140793,140829,140833,140836,140839,140842,140848,140853,140856,140879,140882,140906,140909,140933,140938,140941,140944,140947,140950,140953,141027,141029,141059,141061,141091,141094,141097,141129,141133,141137,141151,141160,141163,141168,141170,141264,141266,141360,141383,141385,141409,141411,141435,141442,141445,141455,141457,141481,141486,141494,141496,141526,141531,141571,141573,141599,141601,141627,141631,141634,141639,141642,141646,141654,141661,141669,141671,141701,141703,141733,141741,141744,141747,141749,141779,141781,141811,141814,141819,141821,141845,141847,141871,141874,141959,141961,141985,141987,142011,142015,142017,142041,142043,142077,142081,142095,142098,142103,142106,142111,142114,142144,142152],[20,139779,139775],{"id":139780},"_16-品优购项目下篇-主体与页面开发",[30,139782,139784],{"id":139783},"_161-项目主体模块制作","16.1 项目主体模块制作",[176,139786,139788],{"id":139787},"_1611-首页制作","16.1.1 首页制作",[10,139790,139791,139793,139794,139796,139797,139800],{},[358,139792,102109],{}," 主体模块是 ",[358,139795,74139],{}," 里面专有的，注意需要新的样式文件 ",[358,139798,139799],{},"index.css，"," 就不要写在common.css中了",[1545,139802],{"style":126459,"src":139803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1545,139805],{"style":126459,"src":139806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[10,139808,139809],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1214,139811,139812,139815,139818],{},[162,139813,139814],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[162,139816,139817],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[162,139819,139820],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[10,139822,138442],{},[35,139824,139825],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,139826,139827,139833,139843],{"__ignoreMap":40},[45,139828,139829,139831],{"class":47,"line":48},[45,139830,130451],{"class":2046},[45,139832,15655],{"class":51},[45,139834,139835,139837,139839,139841],{"class":47,"line":125},[45,139836,131083],{"class":257},[45,139838,51518],{"class":51},[45,139840,23819],{"class":257},[45,139842,1373],{"class":51},[45,139844,139845],{"class":47,"line":1262},[45,139846,1648],{"class":51},[10,139848,138482],{},[35,139850,139851],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,139852,139853,139859,139869],{"__ignoreMap":40},[45,139854,139855,139857],{"class":47,"line":48},[45,139856,130451],{"class":2046},[45,139858,15655],{"class":51},[45,139860,139861,139863,139865,139867],{"class":47,"line":125},[45,139862,131083],{"class":257},[45,139864,51518],{"class":51},[45,139866,23819],{"class":257},[45,139868,1373],{"class":51},[45,139870,139871],{"class":47,"line":1262},[45,139872,1648],{"class":51},[159,139874,139875],{},[162,139876,139877],{},"左侧focus模块制作",[1545,139879],{"style":126459,"src":139880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[10,139882,138442],{},[35,139884,139885],{"className":126603,"code":127926,"language":126605,"meta":40,"style":40},[42,139886,139887,139895,139905,139915],{"__ignoreMap":40},[45,139888,139889,139891,139893],{"class":47,"line":48},[45,139890,53902],{"class":51381},[45,139892,61981],{"class":2046},[45,139894,15655],{"class":51},[45,139896,139897,139899,139901,139903],{"class":47,"line":125},[45,139898,127941],{"class":257},[45,139900,51518],{"class":51},[45,139902,54970],{"class":257},[45,139904,1373],{"class":51},[45,139906,139907,139909,139911,139913],{"class":47,"line":1262},[45,139908,70879],{"class":257},[45,139910,51518],{"class":51},[45,139912,54818],{"class":257},[45,139914,1373],{"class":51},[45,139916,139917],{"class":47,"line":1277},[45,139918,1648],{"class":51},[10,139920,138482],{},[35,139922,139923],{"className":126603,"code":127926,"language":126605,"meta":40,"style":40},[42,139924,139925,139933,139943,139953],{"__ignoreMap":40},[45,139926,139927,139929,139931],{"class":47,"line":48},[45,139928,53902],{"class":51381},[45,139930,61981],{"class":2046},[45,139932,15655],{"class":51},[45,139934,139935,139937,139939,139941],{"class":47,"line":125},[45,139936,127941],{"class":257},[45,139938,51518],{"class":51},[45,139940,54970],{"class":257},[45,139942,1373],{"class":51},[45,139944,139945,139947,139949,139951],{"class":47,"line":1262},[45,139946,70879],{"class":257},[45,139948,51518],{"class":51},[45,139950,54818],{"class":257},[45,139952,1373],{"class":51},[45,139954,139955],{"class":47,"line":1277},[45,139956,1648],{"class":51},[10,139958,139959],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[159,139961,139962],{"start":125},[162,139963,139964],{},"右侧newsflash模块制作",[1545,139966],{"style":126459,"src":139967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[10,139969,139970],{},"右侧的模块 分为上中下三个盒子",[10,139972,139973],{},"结构代码：",[35,139975,139976],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,139977,139978],{"__ignoreMap":40},[45,139979,139980,139982,139984,139986,139988,139990,139992,139994,139996,139998,140000,140002],{"class":47,"line":48},[45,139981,1117],{"class":51},[45,139983,1545],{"class":51381},[45,139985,55320],{"class":2046},[45,139987,254],{"class":51},[45,139989,134120],{"class":313},[45,139991,55328],{"class":2046},[45,139993,254],{"class":51},[45,139995,134127],{"class":313},[45,139997,134130],{"class":2046},[45,139999,254],{"class":51},[45,140001,134135],{"class":313},[45,140003,51388],{"class":51},[10,140005,140006,140007,140010],{},"1 号盒子为 ",[42,140008,140009],{},"news"," 新闻模块 高度为 165px",[1545,140012],{"style":126459,"src":140013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[10,140015,140016,140017,140020,140021],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[42,140018,140019],{},"news-hd","，下面是 ",[42,140022,140023],{},"news-bd",[10,140025,139973],{},[35,140027,140028],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},[42,140029,140030,140034,140048,140052],{"__ignoreMap":40},[45,140031,140032],{"class":47,"line":48},[45,140033,130714],{"class":267},[45,140035,140036,140038,140040,140042,140044,140046],{"class":47,"line":125},[45,140037,1117],{"class":51},[45,140039,51692],{"class":51381},[45,140041,53567],{"class":2046},[45,140043,254],{"class":51},[45,140045,130727],{"class":313},[45,140047,51388],{"class":51},[45,140049,140050],{"class":47,"line":1262},[45,140051,130734],{"class":51},[45,140053,140054,140056,140058],{"class":47,"line":1277},[45,140055,51866],{"class":51},[45,140057,51692],{"class":51381},[45,140059,51388],{"class":51},[10,140061,140062],{},"样式代码：",[35,140064,140065],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},[42,140066,140067,140071,140085,140089],{"__ignoreMap":40},[45,140068,140069],{"class":47,"line":48},[45,140070,130714],{"class":267},[45,140072,140073,140075,140077,140079,140081,140083],{"class":47,"line":125},[45,140074,1117],{"class":51},[45,140076,51692],{"class":51381},[45,140078,53567],{"class":2046},[45,140080,254],{"class":51},[45,140082,130727],{"class":313},[45,140084,51388],{"class":51},[45,140086,140087],{"class":47,"line":1262},[45,140088,130734],{"class":51},[45,140090,140091,140093,140095],{"class":47,"line":1277},[45,140092,51866],{"class":51},[45,140094,51692],{"class":51381},[45,140096,51388],{"class":51},[10,140098,140099,140100,140102],{},"上面是",[42,140101,140019],{},"，设置高度是 33px，设置下边框",[1214,140104,140105,140111],{},[162,140106,140107,140108,140110],{},"里面放一个",[42,140109,22993],{}," 标题",[162,140112,140113,140114,140116,140117,140119],{},"放一个a",[42,140115,102744],{},"，内容是 更多，然后让 ",[42,140118,13],{}," 进行右浮动，三角用伪元素设置字体图标就好",[10,140121,139973],{},[35,140123,140124],{"className":126603,"code":138445,"language":126605,"meta":40,"style":40},[42,140125,140126,140134,140144,140154],{"__ignoreMap":40},[45,140127,140128,140130,140132],{"class":47,"line":48},[45,140129,51692],{"class":51381},[45,140131,137604],{"class":2046},[45,140133,15655],{"class":51},[45,140135,140136,140138,140140,140142],{"class":47,"line":125},[45,140137,137611],{"class":257},[45,140139,51518],{"class":51},[45,140141,7735],{"class":313},[45,140143,1373],{"class":51},[45,140145,140146,140148,140150,140152],{"class":47,"line":1262},[45,140147,128219],{"class":257},[45,140149,51518],{"class":51},[45,140151,60950],{"class":257},[45,140153,1373],{"class":51},[45,140155,140156],{"class":47,"line":1277},[45,140157,1648],{"class":51},[10,140159,140062],{},[35,140161,140162],{"className":126603,"code":138445,"language":126605,"meta":40,"style":40},[42,140163,140164,140172,140182,140192],{"__ignoreMap":40},[45,140165,140166,140168,140170],{"class":47,"line":48},[45,140167,51692],{"class":51381},[45,140169,137604],{"class":2046},[45,140171,15655],{"class":51},[45,140173,140174,140176,140178,140180],{"class":47,"line":125},[45,140175,137611],{"class":257},[45,140177,51518],{"class":51},[45,140179,7735],{"class":313},[45,140181,1373],{"class":51},[45,140183,140184,140186,140188,140190],{"class":47,"line":1262},[45,140185,128219],{"class":257},[45,140187,51518],{"class":51},[45,140189,60950],{"class":257},[45,140191,1373],{"class":51},[45,140193,140194],{"class":47,"line":1277},[45,140195,1648],{"class":51},[10,140197,140198,140199],{},"下面是",[42,140200,140023],{},[1214,140202,140203,140211],{},[162,140204,140205,140206,101069,140208,140210],{},"里面包含 ",[42,140207,1214],{},[42,140209,162],{}," 还有链接",[162,140212,139683,140213,140215,140216,140218,140219,140222,140223],{},[42,140214,162],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[42,140217,131269],{}," 2.设置 ",[42,140220,140221],{},"white-space: nowrap;"," 3. 设置 ",[42,140224,140225],{},"text-overflow: ellipsis;",[10,140227,139973],{},[35,140229,140231],{"className":126603,"code":140230,"language":126605,"meta":40,"style":40},"div {\n  overflow: hidden;\n}\n",[42,140232,140233,140239,140250],{"__ignoreMap":40},[45,140234,140235,140237],{"class":47,"line":48},[45,140236,51692],{"class":51381},[45,140238,15655],{"class":51},[45,140240,140241,140244,140246,140248],{"class":47,"line":125},[45,140242,140243],{"class":257},"  overflow",[45,140245,51518],{"class":51},[45,140247,61795],{"class":257},[45,140249,1373],{"class":51},[45,140251,140252],{"class":47,"line":1262},[45,140253,1648],{"class":51},[10,140255,140062],{},[35,140257,140258],{"className":126603,"code":140230,"language":126605,"meta":40,"style":40},[42,140259,140260,140266,140276],{"__ignoreMap":40},[45,140261,140262,140264],{"class":47,"line":48},[45,140263,51692],{"class":51381},[45,140265,15655],{"class":51},[45,140267,140268,140270,140272,140274],{"class":47,"line":125},[45,140269,140243],{"class":257},[45,140271,51518],{"class":51},[45,140273,61795],{"class":257},[45,140275,1373],{"class":51},[45,140277,140278],{"class":47,"line":1262},[45,140279,1648],{"class":51},[10,140281,140282,140283,140286],{},"2 号盒子为 ",[42,140284,140285],{},"lifeservice"," 生活服务模块 高度为 209px",[1545,140288],{"style":126459,"src":140289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1214,140291,140292,140295,140305,140329,140340],{},[162,140293,140294],{},"设置边框（左右下边框）",[162,140296,140297,140298,140301,140302,140304],{},"里面的内容 是 ",[42,140299,140300],{},"ul > 12*li","，给",[42,140303,162],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[162,140306,140307,140308],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1214,140309,140310,140315,140324],{},[162,140311,140312,140314],{},[42,140313,140285],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[162,140316,140317,140318,140320,140321,140323],{},"可以让 ",[42,140319,140285],{}," 里面的 ",[42,140322,1214],{}," 宽度为 252，就可以装的下 4 个 小 li",[162,140325,140326,140328],{},[42,140327,140285],{}," 盒子 overflow 隐藏多余的部分就可以了",[162,140330,116518,140331,140333,140334,140336,140337,140339],{},[42,140332,162],{}," 里面放一个 ",[42,140335,649],{},"（里面放图标），下面的文本用 ",[42,140338,10],{}," 标签包裹",[162,140341,139103,140342,140344,140345,140347,140348,139137,140350,140353],{},[42,140343,649],{}," 设置 24px宽和28px的高（注意 ",[42,140346,649],{}," 是行内元素， 转成行内块），给 ",[42,140349,162],{},[42,140351,140352],{},"text-align:center"," 让里面内容居中显示",[10,140355,139973],{},[35,140357,140359],{"className":126603,"code":140358,"language":126605,"meta":40,"style":40},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[42,140360,140361,140379,140384,140394],{"__ignoreMap":40},[45,140362,140363,140365,140367,140369,140371,140373,140375,140377],{"class":47,"line":48},[45,140364,45],{"class":51381},[45,140366,12518],{"class":51},[45,140368,13],{"class":51381},[45,140370,12518],{"class":51},[45,140372,23636],{"class":51381},[45,140374,12518],{"class":51},[45,140376,358],{"class":51381},[45,140378,15655],{"class":51},[45,140380,140381],{"class":47,"line":125},[45,140382,140383],{"class":267},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[45,140385,140386,140388,140390,140392],{"class":47,"line":1262},[45,140387,128219],{"class":257},[45,140389,51518],{"class":51},[45,140391,128281],{"class":257},[45,140393,1373],{"class":51},[45,140395,140396],{"class":47,"line":1277},[45,140397,1648],{"class":51},[10,140399,140062],{},[35,140401,140402],{"className":126603,"code":140358,"language":126605,"meta":40,"style":40},[42,140403,140404,140422,140426,140436],{"__ignoreMap":40},[45,140405,140406,140408,140410,140412,140414,140416,140418,140420],{"class":47,"line":48},[45,140407,45],{"class":51381},[45,140409,12518],{"class":51},[45,140411,13],{"class":51381},[45,140413,12518],{"class":51},[45,140415,23636],{"class":51381},[45,140417,12518],{"class":51},[45,140419,358],{"class":51381},[45,140421,15655],{"class":51},[45,140423,140424],{"class":47,"line":125},[45,140425,140383],{"class":267},[45,140427,140428,140430,140432,140434],{"class":47,"line":1262},[45,140429,128219],{"class":257},[45,140431,51518],{"class":51},[45,140433,128281],{"class":257},[45,140435,1373],{"class":51},[45,140437,140438],{"class":47,"line":1277},[45,140439,1648],{"class":51},[10,140441,140442,140443,140446],{},"3 号盒子为 ",[42,140444,140445],{},"bargain"," 特价商品",[1214,140448,140449],{},[162,140450,140451],{},"这个比较简单，直接插入一张图片即可",[10,140453,139973],{},[35,140455,140456],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,140457,140458],{"__ignoreMap":40},[45,140459,140460,140462,140464,140466,140468,140470,140472,140474,140476,140478,140480,140482],{"class":47,"line":48},[45,140461,1117],{"class":51},[45,140463,1545],{"class":51381},[45,140465,55320],{"class":2046},[45,140467,254],{"class":51},[45,140469,134120],{"class":313},[45,140471,55328],{"class":2046},[45,140473,254],{"class":51},[45,140475,134127],{"class":313},[45,140477,134130],{"class":2046},[45,140479,254],{"class":51},[45,140481,134135],{"class":313},[45,140483,51388],{"class":51},[10,140485,140062],{},[35,140487,140488],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,140489,140490],{"__ignoreMap":40},[45,140491,140492,140494,140496,140498,140500,140502,140504,140506,140508,140510,140512,140514],{"class":47,"line":48},[45,140493,1117],{"class":51},[45,140495,1545],{"class":51381},[45,140497,55320],{"class":2046},[45,140499,254],{"class":51},[45,140501,134120],{"class":313},[45,140503,55328],{"class":2046},[45,140505,254],{"class":51},[45,140507,134127],{"class":313},[45,140509,134130],{"class":2046},[45,140511,254],{"class":51},[45,140513,134135],{"class":313},[45,140515,51388],{"class":51},[176,140517,140519],{"id":140518},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1545,140521],{"style":126459,"src":140522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[10,140524,140525,140526,140529],{},"大盒子 ",[42,140527,140528],{},"recom"," 推荐模块 recommend",[1214,140531,140532],{},[162,140533,140534,140535,140537,140538,140541],{},"给这个 ",[42,140536,140528],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[42,140539,140540],{},"#ebebeb","），设置距离上边 12px",[10,140543,139973],{},[35,140545,140547],{"className":126603,"code":140546,"language":126605,"meta":40,"style":40},"div {\n  background-color: #f0f0f0;\n}\n",[42,140548,140549,140555,140566],{"__ignoreMap":40},[45,140550,140551,140553],{"class":47,"line":48},[45,140552,51692],{"class":51381},[45,140554,15655],{"class":51},[45,140556,140557,140559,140561,140564],{"class":47,"line":125},[45,140558,70959],{"class":257},[45,140560,51518],{"class":51},[45,140562,140563],{"class":257},"#f0f0f0",[45,140565,1373],{"class":51},[45,140567,140568],{"class":47,"line":1262},[45,140569,1648],{"class":51},[10,140571,140062],{},[35,140573,140574],{"className":126603,"code":140546,"language":126605,"meta":40,"style":40},[42,140575,140576,140582,140592],{"__ignoreMap":40},[45,140577,140578,140580],{"class":47,"line":48},[45,140579,51692],{"class":51381},[45,140581,15655],{"class":51},[45,140583,140584,140586,140588,140590],{"class":47,"line":125},[45,140585,70959],{"class":257},[45,140587,51518],{"class":51},[45,140589,140563],{"class":257},[45,140591,1373],{"class":51},[45,140593,140594],{"class":47,"line":1262},[45,140595,1648],{"class":51},[10,140597,140598],{},"里面包含 2 个盒子， 浮动即可",[10,140600,139973],{},[35,140602,140603],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,140604,140605,140611,140621],{"__ignoreMap":40},[45,140606,140607,140609],{"class":47,"line":48},[45,140608,130451],{"class":2046},[45,140610,15655],{"class":51},[45,140612,140613,140615,140617,140619],{"class":47,"line":125},[45,140614,131083],{"class":257},[45,140616,51518],{"class":51},[45,140618,23819],{"class":257},[45,140620,1373],{"class":51},[45,140622,140623],{"class":47,"line":1262},[45,140624,1648],{"class":51},[10,140626,140627,140628],{},"1 号盒子 ",[42,140629,140630],{},"recom_hd",[1214,140632,140633,140636],{},[162,140634,140635],{},"设置宽度205px，高度163px",[162,140637,140107,140638,140640],{},[42,140639,1545],{},"标签，插入图片即可",[10,140642,139973],{},[35,140644,140645],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,140646,140647],{"__ignoreMap":40},[45,140648,140649,140651,140653,140655,140657,140659,140661,140663,140665,140667,140669,140671],{"class":47,"line":48},[45,140650,1117],{"class":51},[45,140652,1545],{"class":51381},[45,140654,55320],{"class":2046},[45,140656,254],{"class":51},[45,140658,134120],{"class":313},[45,140660,55328],{"class":2046},[45,140662,254],{"class":51},[45,140664,134127],{"class":313},[45,140666,134130],{"class":2046},[45,140668,254],{"class":51},[45,140670,134135],{"class":313},[45,140672,51388],{"class":51},[10,140674,140062],{},[35,140676,140677],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,140678,140679],{"__ignoreMap":40},[45,140680,140681,140683,140685,140687,140689,140691,140693,140695,140697,140699,140701,140703],{"class":47,"line":48},[45,140682,1117],{"class":51},[45,140684,1545],{"class":51381},[45,140686,55320],{"class":2046},[45,140688,254],{"class":51},[45,140690,134120],{"class":313},[45,140692,55328],{"class":2046},[45,140694,254],{"class":51},[45,140696,134127],{"class":313},[45,140698,134130],{"class":2046},[45,140700,254],{"class":51},[45,140702,134135],{"class":313},[45,140704,51388],{"class":51},[10,140706,140707,140708,140711],{},"2 号盒子 ",[42,140709,140710],{},"recom_bd"," ，注意里面的小竖线",[1214,140713,140714,140725,140728,140733,140738],{},[162,140715,140716,140717,140719,140720,140722,140723],{},"右侧结构里面放 ",[42,140718,1214],{}," 包含 4个 ",[42,140721,162],{},"，每个li里面包含一个",[42,140724,1545],{},[162,140726,140727],{},"直接利用切片工具把里面的内容当成一张图片",[162,140729,139103,140730,140732],{},[42,140731,162],{}," 设置浮动",[162,140734,139103,140735,140737],{},[42,140736,1545],{}," 设置宽高，宽度 248px，高度 163px",[162,140739,140740,140741,140301,140744,140746,140747,140749,140750],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[42,140742,140743],{},"top 10px",[42,140745,162],{},"设置相对定位（注意，最后一个",[42,140748,162],{},"不用设置伪元素），可以利用 ",[42,140751,140752],{},"nth-child(-n+3){...}",[10,140754,139973],{},[35,140756,140757],{"className":126603,"code":138445,"language":126605,"meta":40,"style":40},[42,140758,140759,140767,140777,140787],{"__ignoreMap":40},[45,140760,140761,140763,140765],{"class":47,"line":48},[45,140762,51692],{"class":51381},[45,140764,137604],{"class":2046},[45,140766,15655],{"class":51},[45,140768,140769,140771,140773,140775],{"class":47,"line":125},[45,140770,137611],{"class":257},[45,140772,51518],{"class":51},[45,140774,7735],{"class":313},[45,140776,1373],{"class":51},[45,140778,140779,140781,140783,140785],{"class":47,"line":1262},[45,140780,128219],{"class":257},[45,140782,51518],{"class":51},[45,140784,60950],{"class":257},[45,140786,1373],{"class":51},[45,140788,140789],{"class":47,"line":1277},[45,140790,1648],{"class":51},[10,140792,140062],{},[35,140794,140795],{"className":126603,"code":138445,"language":126605,"meta":40,"style":40},[42,140796,140797,140805,140815,140825],{"__ignoreMap":40},[45,140798,140799,140801,140803],{"class":47,"line":48},[45,140800,51692],{"class":51381},[45,140802,137604],{"class":2046},[45,140804,15655],{"class":51},[45,140806,140807,140809,140811,140813],{"class":47,"line":125},[45,140808,137611],{"class":257},[45,140810,51518],{"class":51},[45,140812,7735],{"class":313},[45,140814,1373],{"class":51},[45,140816,140817,140819,140821,140823],{"class":47,"line":1262},[45,140818,128219],{"class":257},[45,140820,51518],{"class":51},[45,140822,60950],{"class":257},[45,140824,1373],{"class":51},[45,140826,140827],{"class":47,"line":1277},[45,140828,1648],{"class":51},[176,140830,140832],{"id":140831},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1545,140834],{"style":126459,"src":140835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[10,140837,140838],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[10,140840,140841],{},"第一楼是家用电器模块： 里面包含两个盒子",[10,140843,140844,140847],{},[42,140845,140846],{},"box_hd"," 制作",[10,140849,140627,140850,140852],{},[42,140851,140846],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1545,140854],{"style":126459,"src":140855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1214,140857,140858,140863,140868,140871],{},[162,140859,140860,140862],{},[42,140861,140846],{}," 给 30px 的高度，2个像素的下边框",[162,140864,140865,140866],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[42,140867,139114],{},[162,140869,140870],{},"左侧盒左浮动，右侧盒子右浮动",[162,140872,140873,140875,140876,140878],{},[42,140874,13],{},"标签之间的距离用左右的",[42,140877,30964],{},"撑开即可",[10,140880,140881],{},"结构代码",[35,140883,140884],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,140885,140886,140892,140902],{"__ignoreMap":40},[45,140887,140888,140890],{"class":47,"line":48},[45,140889,130451],{"class":2046},[45,140891,15655],{"class":51},[45,140893,140894,140896,140898,140900],{"class":47,"line":125},[45,140895,131083],{"class":257},[45,140897,51518],{"class":51},[45,140899,23819],{"class":257},[45,140901,1373],{"class":51},[45,140903,140904],{"class":47,"line":1262},[45,140905,1648],{"class":51},[10,140907,140908],{},"样式代码",[35,140910,140911],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,140912,140913,140919,140929],{"__ignoreMap":40},[45,140914,140915,140917],{"class":47,"line":48},[45,140916,130451],{"class":2046},[45,140918,15655],{"class":51},[45,140920,140921,140923,140925,140927],{"class":47,"line":125},[45,140922,131083],{"class":257},[45,140924,51518],{"class":51},[45,140926,23819],{"class":257},[45,140928,1373],{"class":51},[45,140930,140931],{"class":47,"line":1262},[45,140932,1648],{"class":51},[10,140934,140935,140847],{},[42,140936,140937],{},"box_bd",[10,140939,140940],{},"2 号盒子 box_bd，不要给高度",[1545,140942],{"style":126459,"src":140943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[10,140945,140946],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[10,140948,140949],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[10,140951,140952],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1214,140954,140955,140967,140983],{},[162,140956,140957,140959,140960,140963,140964,140966],{},[42,140958,140937],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[42,140961,140962],{},"tab_content","，在",[42,140965,140962],{}," 里面包裹tab选项卡对应的内容",[162,140968,140969,140970,140973,140974,140976,140977,140979,140980,140982],{},"内容被一个大盒子包裹（",[42,140971,140972],{},"tab_list_item","），里面是 ",[42,140975,1214],{}," 包裹 5个 ",[42,140978,162],{},"，每个",[42,140981,162],{},"设置对应的宽度，然后设置浮动",[162,140984,140985,140986,140988,140989,140991,140992],{},"而这5个",[42,140987,162],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[42,140990,162],{},"设置",[1214,140993,140994,141012,141015],{},[162,140995,140996,140997,140999,141000,141002,141003,141005,141006,141008,141009,141011],{},"第一个小 ",[42,140998,162],{}," 分为上下结构，上面是 ",[42,141001,1214],{}," 包裹 ",[42,141004,162],{}," ，",[42,141007,162],{},"里面包裹 ",[42,141010,13],{},"，下面插入一张图片",[162,141013,141014],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[162,141016,141017,141018,141020,141021,141023,141024,141026],{},"后面的小 ",[42,141019,162],{}," 里面先放一个",[42,141022,13],{},"标签，然后在",[42,141025,13],{},"标签里面插入图片即可",[10,141028,140881],{},[35,141030,141031],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,141032,141033],{"__ignoreMap":40},[45,141034,141035,141037,141039,141041,141043,141045,141047,141049,141051,141053,141055,141057],{"class":47,"line":48},[45,141036,1117],{"class":51},[45,141038,1545],{"class":51381},[45,141040,55320],{"class":2046},[45,141042,254],{"class":51},[45,141044,134120],{"class":313},[45,141046,55328],{"class":2046},[45,141048,254],{"class":51},[45,141050,134127],{"class":313},[45,141052,134130],{"class":2046},[45,141054,254],{"class":51},[45,141056,134135],{"class":313},[45,141058,51388],{"class":51},[10,141060,140908],{},[35,141062,141063],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,141064,141065],{"__ignoreMap":40},[45,141066,141067,141069,141071,141073,141075,141077,141079,141081,141083,141085,141087,141089],{"class":47,"line":48},[45,141068,1117],{"class":51},[45,141070,1545],{"class":51381},[45,141072,55320],{"class":2046},[45,141074,254],{"class":51},[45,141076,134120],{"class":313},[45,141078,55328],{"class":2046},[45,141080,254],{"class":51},[45,141082,134127],{"class":313},[45,141084,134130],{"class":2046},[45,141086,254],{"class":51},[45,141088,134135],{"class":313},[45,141090,51388],{"class":51},[10,141092,141093],{},"tab栏切换需求！！！！！！介绍：",[1545,141095],{"style":126459,"src":141096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1214,141098,141099,141107,141113,141116],{},[162,141100,141101,141104,141105],{},[42,141102,141103],{},"tab","栏的布局是 ",[42,141106,139114],{},[162,141108,141109,141110,141112],{},"有多少个",[42,141111,141103],{},"选项卡，那么对应就有多少个内容",[162,141114,141115],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[162,141117,141118,141119,141122,141123,141125,141126,141128],{},"等后面我们学习了",[42,141120,141121],{},"js","之后，我们就会配合",[42,141124,141121],{},"来实现，",[42,141127,141103],{},"栏的切换",[30,141130,141132],{"id":141131},"_162-列表制作","16.2 列表制作",[176,141134,141136],{"id":141135},"_1621-准备工作","16.2.1 准备工作",[1214,141138,141139,141142,141145,141148],{},[162,141140,141141],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[162,141143,141144],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[162,141146,141147],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[162,141149,141150],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[176,141152,141154,141155,101069,141157,141159],{"id":141153},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[42,141156,131608],{},[42,141158,53794],{}," 修改",[1545,141161],{"style":126459,"src":141162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1214,141164,141165],{},[162,141166,141167],{},"秒杀盒子 sk（ second kill ） 定位即可",[10,141169,139973],{},[35,141171,141172],{"className":126603,"code":132035,"language":126605,"meta":40,"style":40},[42,141173,141174,141178,141192,141196,141210,141214,141228,141232,141246,141250],{"__ignoreMap":40},[45,141175,141176],{"class":47,"line":48},[45,141177,132042],{"class":267},[45,141179,141180,141182,141184,141186,141188,141190],{"class":47,"line":125},[45,141181,132047],{"class":2046},[45,141183,79888],{"class":51},[45,141185,128963],{"class":257},[45,141187,51518],{"class":51},[45,141189,132056],{"class":257},[45,141191,129533],{"class":51},[45,141193,141194],{"class":47,"line":1262},[45,141195,132063],{"class":267},[45,141197,141198,141200,141202,141204,141206,141208],{"class":47,"line":1277},[45,141199,132068],{"class":2046},[45,141201,79888],{"class":51},[45,141203,128963],{"class":257},[45,141205,51518],{"class":51},[45,141207,54845],{"class":257},[45,141209,129533],{"class":51},[45,141211,141212],{"class":47,"line":1283},[45,141213,132083],{"class":267},[45,141215,141216,141218,141220,141222,141224,141226],{"class":47,"line":1297},[45,141217,132088],{"class":2046},[45,141219,79888],{"class":51},[45,141221,128963],{"class":257},[45,141223,51518],{"class":51},[45,141225,54912],{"class":257},[45,141227,129533],{"class":51},[45,141229,141230],{"class":47,"line":1303},[45,141231,132103],{"class":267},[45,141233,141234,141236,141238,141240,141242,141244],{"class":47,"line":1394},[45,141235,132108],{"class":2046},[45,141237,79888],{"class":51},[45,141239,128963],{"class":257},[45,141241,51518],{"class":51},[45,141243,86314],{"class":257},[45,141245,129533],{"class":51},[45,141247,141248],{"class":47,"line":1400},[45,141249,132123],{"class":267},[45,141251,141252,141254,141256,141258,141260,141262],{"class":47,"line":1412},[45,141253,132128],{"class":2046},[45,141255,79888],{"class":51},[45,141257,128963],{"class":257},[45,141259,51518],{"class":51},[45,141261,132137],{"class":257},[45,141263,129533],{"class":51},[10,141265,140062],{},[35,141267,141268],{"className":126603,"code":132035,"language":126605,"meta":40,"style":40},[42,141269,141270,141274,141288,141292,141306,141310,141324,141328,141342,141346],{"__ignoreMap":40},[45,141271,141272],{"class":47,"line":48},[45,141273,132042],{"class":267},[45,141275,141276,141278,141280,141282,141284,141286],{"class":47,"line":125},[45,141277,132047],{"class":2046},[45,141279,79888],{"class":51},[45,141281,128963],{"class":257},[45,141283,51518],{"class":51},[45,141285,132056],{"class":257},[45,141287,129533],{"class":51},[45,141289,141290],{"class":47,"line":1262},[45,141291,132063],{"class":267},[45,141293,141294,141296,141298,141300,141302,141304],{"class":47,"line":1277},[45,141295,132068],{"class":2046},[45,141297,79888],{"class":51},[45,141299,128963],{"class":257},[45,141301,51518],{"class":51},[45,141303,54845],{"class":257},[45,141305,129533],{"class":51},[45,141307,141308],{"class":47,"line":1283},[45,141309,132083],{"class":267},[45,141311,141312,141314,141316,141318,141320,141322],{"class":47,"line":1297},[45,141313,132088],{"class":2046},[45,141315,79888],{"class":51},[45,141317,128963],{"class":257},[45,141319,51518],{"class":51},[45,141321,54912],{"class":257},[45,141323,129533],{"class":51},[45,141325,141326],{"class":47,"line":1303},[45,141327,132103],{"class":267},[45,141329,141330,141332,141334,141336,141338,141340],{"class":47,"line":1394},[45,141331,132108],{"class":2046},[45,141333,79888],{"class":51},[45,141335,128963],{"class":257},[45,141337,51518],{"class":51},[45,141339,86314],{"class":257},[45,141341,129533],{"class":51},[45,141343,141344],{"class":47,"line":1400},[45,141345,132123],{"class":267},[45,141347,141348,141350,141352,141354,141356,141358],{"class":47,"line":1412},[45,141349,132128],{"class":2046},[45,141351,79888],{"class":51},[45,141353,128963],{"class":257},[45,141355,51518],{"class":51},[45,141357,132137],{"class":257},[45,141359,129533],{"class":51},[1214,141361,141362,141373],{},[162,141363,141364,141365,141368,141369,101069,141371],{},"1 号盒子左侧浮动 ",[42,141366,141367],{},"sk_list"," 里面包含 ",[42,141370,1214],{},[42,141372,162],{},[162,141374,141375,141376,141368,141379,101069,141381],{},"2 号盒子左侧浮动 ",[42,141377,141378],{},"sk_con",[42,141380,1214],{},[42,141382,162],{},[10,141384,139973],{},[35,141386,141387],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,141388,141389,141395,141405],{"__ignoreMap":40},[45,141390,141391,141393],{"class":47,"line":48},[45,141392,130451],{"class":2046},[45,141394,15655],{"class":51},[45,141396,141397,141399,141401,141403],{"class":47,"line":125},[45,141398,131083],{"class":257},[45,141400,51518],{"class":51},[45,141402,23819],{"class":257},[45,141404,1373],{"class":51},[45,141406,141407],{"class":47,"line":1262},[45,141408,1648],{"class":51},[10,141410,140062],{},[35,141412,141413],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,141414,141415,141421,141431],{"__ignoreMap":40},[45,141416,141417,141419],{"class":47,"line":48},[45,141418,130451],{"class":2046},[45,141420,15655],{"class":51},[45,141422,141423,141425,141427,141429],{"class":47,"line":125},[45,141424,131083],{"class":257},[45,141426,51518],{"class":51},[45,141428,23819],{"class":257},[45,141430,1373],{"class":51},[45,141432,141433],{"class":47,"line":1262},[45,141434,1648],{"class":51},[176,141436,141438,141439],{"id":141437},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[42,141440,141441],{},"sk_container",[1545,141443],{"style":126459,"src":141444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1214,141446,141447,141452],{},[162,141448,140627,141449,141451],{},[42,141450,141441],{}," 给宽度 1200，不要给高度",[162,141453,141454],{},"一定不要忘记清除浮动",[10,141456,139973],{},[35,141458,141459],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,141460,141461,141467,141477],{"__ignoreMap":40},[45,141462,141463,141465],{"class":47,"line":48},[45,141464,130451],{"class":2046},[45,141466,15655],{"class":51},[45,141468,141469,141471,141473,141475],{"class":47,"line":125},[45,141470,131083],{"class":257},[45,141472,51518],{"class":51},[45,141474,23819],{"class":257},[45,141476,1373],{"class":51},[45,141478,141479],{"class":47,"line":1262},[45,141480,1648],{"class":51},[159,141482,141483],{},[162,141484,141485],{},"sk_hd制作",[1214,141487,141488],{},[162,141489,140707,141490,141493],{},[42,141491,141492],{},"sk_hd"," ，插入图片即可",[10,141495,139973],{},[35,141497,141498],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,141499,141500],{"__ignoreMap":40},[45,141501,141502,141504,141506,141508,141510,141512,141514,141516,141518,141520,141522,141524],{"class":47,"line":48},[45,141503,1117],{"class":51},[45,141505,1545],{"class":51381},[45,141507,55320],{"class":2046},[45,141509,254],{"class":51},[45,141511,134120],{"class":313},[45,141513,55328],{"class":2046},[45,141515,254],{"class":51},[45,141517,134127],{"class":313},[45,141519,134130],{"class":2046},[45,141521,254],{"class":51},[45,141523,134135],{"class":313},[45,141525,51388],{"class":51},[159,141527,141528],{"start":125},[162,141529,141530],{},"sk_bd制作",[1214,141532,141533],{},[162,141534,141535,141536,141539,141540,101069,141542,141544],{},"3 号盒子 ",[42,141537,141538],{},"sk_bd"," ，里面包含很多的 ",[42,141541,1214],{},[42,141543,162],{},[1214,141545,141546,141555],{},[162,141547,141548,141549,141551,141552,141554],{},"当鼠标移入到 ",[42,141550,162],{}," 上面的时候显示红色的边框，在这里先给 ",[42,141553,162],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[162,141556,141557,141558,141560,141561,141563,141564,141567,141568,141570],{},"由于给每个 ",[42,141559,162],{}," 都设置了外边距，导致一行的最后一个 ",[42,141562,162],{}," 掉了下来，在这里我们利用 ",[42,141565,141566],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[42,141569,162],{},"，去掉外边距就好了",[10,141572,139973],{},[35,141574,141575],{"className":126603,"code":138792,"language":126605,"meta":40,"style":40},[42,141576,141577,141583,141595],{"__ignoreMap":40},[45,141578,141579,141581],{"class":47,"line":48},[45,141580,51692],{"class":51381},[45,141582,15655],{"class":51},[45,141584,141585,141587,141589,141591,141593],{"class":47,"line":125},[45,141586,70551],{"class":257},[45,141588,51518],{"class":51},[45,141590,400],{"class":257},[45,141592,51637],{"class":257},[45,141594,1373],{"class":51},[45,141596,141597],{"class":47,"line":1262},[45,141598,1648],{"class":51},[10,141600,140062],{},[35,141602,141603],{"className":126603,"code":138792,"language":126605,"meta":40,"style":40},[42,141604,141605,141611,141623],{"__ignoreMap":40},[45,141606,141607,141609],{"class":47,"line":48},[45,141608,51692],{"class":51381},[45,141610,15655],{"class":51},[45,141612,141613,141615,141617,141619,141621],{"class":47,"line":125},[45,141614,70551],{"class":257},[45,141616,51518],{"class":51},[45,141618,400],{"class":257},[45,141620,51637],{"class":257},[45,141622,1373],{"class":51},[45,141624,141625],{"class":47,"line":1262},[45,141626,1648],{"class":51},[30,141628,141630],{"id":141629},"_163-注册页面制作","16.3 注册页面制作",[1545,141632],{"style":126459,"src":141633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[10,141635,141636,141638],{},[358,141637,9108],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1545,141640],{"style":126459,"src":141641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[176,141643,141645],{"id":141644},"_1631-准备工作","16.3.1 准备工作",[1214,141647,141648,141651],{},[162,141649,141650],{},"创建register.html，引入 base.css，引入favicon图标",[162,141652,141653],{},"创建register.css ，在html页面进行引入",[176,141655,141657,141658,141660],{"id":141656},"_1632-header-头部实现","16.3.2 ",[42,141659,131608],{}," 头部实现",[1214,141662,141663,141666],{},[162,141664,141665],{},"整个内容用 版心 进行包裹",[162,141667,141668],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[10,141670,139973],{},[35,141672,141673],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,141674,141675],{"__ignoreMap":40},[45,141676,141677,141679,141681,141683,141685,141687,141689,141691,141693,141695,141697,141699],{"class":47,"line":48},[45,141678,1117],{"class":51},[45,141680,1545],{"class":51381},[45,141682,55320],{"class":2046},[45,141684,254],{"class":51},[45,141686,134120],{"class":313},[45,141688,55328],{"class":2046},[45,141690,254],{"class":51},[45,141692,134127],{"class":313},[45,141694,134130],{"class":2046},[45,141696,254],{"class":51},[45,141698,134135],{"class":313},[45,141700,51388],{"class":51},[10,141702,140062],{},[35,141704,141705],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,141706,141707],{"__ignoreMap":40},[45,141708,141709,141711,141713,141715,141717,141719,141721,141723,141725,141727,141729,141731],{"class":47,"line":48},[45,141710,1117],{"class":51},[45,141712,1545],{"class":51381},[45,141714,55320],{"class":2046},[45,141716,254],{"class":51},[45,141718,134120],{"class":313},[45,141720,55328],{"class":2046},[45,141722,254],{"class":51},[45,141724,134127],{"class":313},[45,141726,134130],{"class":2046},[45,141728,254],{"class":51},[45,141730,134135],{"class":313},[45,141732,51388],{"class":51},[176,141734,141736,141737,141740],{"id":141735},"_1633-registerarea-主体模块实现","16.3.3 ",[42,141738,141739],{},"registerarea"," 主体模块实现",[1545,141742],{"style":126459,"src":141743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[10,141745,141746],{},"整个大盒子 高度为 522px，设置4个边框",[10,141748,139973],{},[35,141750,141751],{"className":126603,"code":130760,"language":126605,"meta":40,"style":40},[42,141752,141753,141759,141775],{"__ignoreMap":40},[45,141754,141755,141757],{"class":47,"line":48},[45,141756,51692],{"class":51381},[45,141758,15655],{"class":51},[45,141760,141761,141763,141765,141767,141769,141771,141773],{"class":47,"line":125},[45,141762,70977],{"class":257},[45,141764,51518],{"class":51},[45,141766,426],{"class":257},[45,141768,51573],{"class":93},[45,141770,51602],{"class":257},[45,141772,129995],{"class":257},[45,141774,1373],{"class":51},[45,141776,141777],{"class":47,"line":1262},[45,141778,1648],{"class":51},[10,141780,140062],{},[35,141782,141783],{"className":126603,"code":130760,"language":126605,"meta":40,"style":40},[42,141784,141785,141791,141807],{"__ignoreMap":40},[45,141786,141787,141789],{"class":47,"line":48},[45,141788,51692],{"class":51381},[45,141790,15655],{"class":51},[45,141792,141793,141795,141797,141799,141801,141803,141805],{"class":47,"line":125},[45,141794,70977],{"class":257},[45,141796,51518],{"class":51},[45,141798,426],{"class":257},[45,141800,51573],{"class":93},[45,141802,51602],{"class":257},[45,141804,129995],{"class":257},[45,141806,1373],{"class":51},[45,141808,141809],{"class":47,"line":1262},[45,141810,1648],{"class":51},[10,141812,141813],{},"1号盒子 是一个 h3 标签，放标题",[1214,141815,141816],{},[162,141817,141818],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[10,141820,139973],{},[35,141822,141823],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,141824,141825,141831,141841],{"__ignoreMap":40},[45,141826,141827,141829],{"class":47,"line":48},[45,141828,130451],{"class":2046},[45,141830,15655],{"class":51},[45,141832,141833,141835,141837,141839],{"class":47,"line":125},[45,141834,131083],{"class":257},[45,141836,51518],{"class":51},[45,141838,23819],{"class":257},[45,141840,1373],{"class":51},[45,141842,141843],{"class":47,"line":1262},[45,141844,1648],{"class":51},[10,141846,140062],{},[35,141848,141849],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,141850,141851,141857,141867],{"__ignoreMap":40},[45,141852,141853,141855],{"class":47,"line":48},[45,141854,130451],{"class":2046},[45,141856,15655],{"class":51},[45,141858,141859,141861,141863,141865],{"class":47,"line":125},[45,141860,131083],{"class":257},[45,141862,51518],{"class":51},[45,141864,23819],{"class":257},[45,141866,1373],{"class":51},[45,141868,141869],{"class":47,"line":1262},[45,141870,1648],{"class":51},[10,141872,141873],{},"2号盒子 里面放注册的内容",[1214,141875,141876,141879,141888,141902,141915,141918,141921,141939,141953],{},[162,141877,141878],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[162,141880,141881,141882,141884,141885,141887],{},"里面的内容利用 ",[42,141883,1214],{}," 包含 ",[42,141886,162],{}," 来实现的（不需要用表格）",[162,141889,139117,141890,141892,141893,141895,141896,141898,141899,141901],{},[42,141891,162],{}," 里面，左侧放 ",[42,141894,33689],{}," 标签， 中间放",[42,141897,53902],{}," 标签， 右侧放 ",[42,141900,45],{}," 提示信息",[162,141903,141904,141905,141907,141908,141910,141911,141914],{},"左侧 ",[42,141906,33689],{},"里面的文字都是右对齐，我们可以给",[42,141909,33689],{},"设置一个宽度（88px），然后利用",[42,141912,141913],{},"text-align"," 来设置右对齐",[162,141916,141917],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[162,141919,141920],{},"右侧 span修饰一下文字颜色",[162,141922,141923,141924],{},"提示信息的样式优化",[1214,141925,141926,141929,141932],{},[162,141927,141928],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[162,141930,141931],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[162,141933,141934,141935,141938],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[42,141936,141937],{},"vertical-algin"," 来设置 图片与文字对齐方式",[162,141940,141941,141942],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1214,141943,141944,141950],{},[162,141945,141946,141947,141949],{},"设置 ",[42,141948,23636],{}," 的 左右 12px 的内边距，设置一下文字颜色",[162,141951,141952],{},"分别设置 背景颜色",[162,141954,141955,141956,141958],{},"同意协议 和 完成注册 都是用 ",[42,141957,162],{}," 进行包裹",[10,141960,139973],{},[35,141962,141963],{"className":126603,"code":140546,"language":126605,"meta":40,"style":40},[42,141964,141965,141971,141981],{"__ignoreMap":40},[45,141966,141967,141969],{"class":47,"line":48},[45,141968,51692],{"class":51381},[45,141970,15655],{"class":51},[45,141972,141973,141975,141977,141979],{"class":47,"line":125},[45,141974,70959],{"class":257},[45,141976,51518],{"class":51},[45,141978,140563],{"class":257},[45,141980,1373],{"class":51},[45,141982,141983],{"class":47,"line":1262},[45,141984,1648],{"class":51},[10,141986,140062],{},[35,141988,141989],{"className":126603,"code":140546,"language":126605,"meta":40,"style":40},[42,141990,141991,141997,142007],{"__ignoreMap":40},[45,141992,141993,141995],{"class":47,"line":48},[45,141994,51692],{"class":51381},[45,141996,15655],{"class":51},[45,141998,141999,142001,142003,142005],{"class":47,"line":125},[45,142000,70959],{"class":257},[45,142002,51518],{"class":51},[45,142004,140563],{"class":257},[45,142006,1373],{"class":51},[45,142008,142009],{"class":47,"line":1262},[45,142010,1648],{"class":51},[176,142012,142014],{"id":142013},"_1634-底部实现","16.3.4 底部实现",[10,142016,139973],{},[35,142018,142019],{"className":126603,"code":140546,"language":126605,"meta":40,"style":40},[42,142020,142021,142027,142037],{"__ignoreMap":40},[45,142022,142023,142025],{"class":47,"line":48},[45,142024,51692],{"class":51381},[45,142026,15655],{"class":51},[45,142028,142029,142031,142033,142035],{"class":47,"line":125},[45,142030,70959],{"class":257},[45,142032,51518],{"class":51},[45,142034,140563],{"class":257},[45,142036,1373],{"class":51},[45,142038,142039],{"class":47,"line":1262},[45,142040,1648],{"class":51},[10,142042,140062],{},[35,142044,142045],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},[42,142046,142047,142051,142065,142069],{"__ignoreMap":40},[45,142048,142049],{"class":47,"line":48},[45,142050,130714],{"class":267},[45,142052,142053,142055,142057,142059,142061,142063],{"class":47,"line":125},[45,142054,1117],{"class":51},[45,142056,51692],{"class":51381},[45,142058,53567],{"class":2046},[45,142060,254],{"class":51},[45,142062,130727],{"class":313},[45,142064,51388],{"class":51},[45,142066,142067],{"class":47,"line":1262},[45,142068,130734],{"class":51},[45,142070,142071,142073,142075],{"class":47,"line":1277},[45,142072,51866],{"class":51},[45,142074,51692],{"class":51381},[45,142076,51388],{"class":51},[30,142078,142080],{"id":142079},"_164-项目总结","16.4 项目总结",[159,142082,142083,142086,142089,142092],{},[162,142084,142085],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[162,142087,142088],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[162,142090,142091],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[162,142093,142094],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1545,142096],{"style":126459,"src":142097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[159,142099,142100],{"start":1283},[162,142101,142102],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1545,142104],{"style":126459,"src":142105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[159,142107,142108],{"start":1297},[162,142109,142110],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1545,142112],{"style":126459,"src":142113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[35,142115,142116],{"className":127350,"code":136760,"language":127352,"meta":40,"style":40},[42,142117,142118],{"__ignoreMap":40},[45,142119,142120,142122,142124,142126,142128,142130,142132,142134,142136,142138,142140,142142],{"class":47,"line":48},[45,142121,1117],{"class":51},[45,142123,53902],{"class":51381},[45,142125,53905],{"class":2046},[45,142127,254],{"class":51},[45,142129,62780],{"class":313},[45,142131,15003],{"class":2046},[45,142133,254],{"class":51},[45,142135,136781],{"class":313},[45,142137,61101],{"class":2046},[45,142139,254],{"class":51},[45,142141,136788],{"class":313},[45,142143,51388],{"class":51},[159,142145,142146,142149],{"start":1303},[162,142147,142148],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[162,142150,142151],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[121,142153,142154],{},"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":40,"searchDepth":125,"depth":125,"links":142156},[142157,142162,142169,142177],{"id":139783,"depth":125,"text":139784,"children":142158},[142159,142160,142161],{"id":139787,"depth":1262,"text":139788},{"id":140518,"depth":1262,"text":140519},{"id":140831,"depth":1262,"text":140832},{"id":141131,"depth":125,"text":141132,"children":142163},[142164,142165,142167],{"id":141135,"depth":1262,"text":141136},{"id":141153,"depth":1262,"text":142166},"16.2.2 列表页 header 和 nav 修改",{"id":141437,"depth":1262,"text":142168},"16.2.3 列表页主体 sk_container",{"id":141629,"depth":125,"text":141630,"children":142170},[142171,142172,142174,142176],{"id":141644,"depth":1262,"text":141645},{"id":141656,"depth":1262,"text":142173},"16.3.2 header 头部实现",{"id":141735,"depth":1262,"text":142175},"16.3.3 registerarea 主体模块实现",{"id":142013,"depth":1262,"text":142014},{"id":142079,"depth":125,"text":142080},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139775,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142184,"title":142185,"body":142186,"description":130,"extension":131,"meta":142294,"navigation":133,"path":142295,"seo":142296,"stem":142297,"__hash__":142298},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142187,"toc":142289},[142188,142191,142195,142198,142201,142210,142219,142223,142228,142235,142253,142256,142259,142262,142265,142268,142271,142274,142277,142280,142283,142286],[20,142189,142185],{"id":142190},"_17-web服务器与网站发布",[30,142192,142194],{"id":142193},"_171-web服务器","17.1 Web服务器",[10,142196,142197],{},"把自己网站上传到服务器上，可以让其他人访问",[1545,142199],{"style":126459,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[10,142202,142203,142206,142207],{},[358,142204,142205],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[358,142208,142209],{},"Web 服务器等",[10,142211,142212,142213,101069,142216,25823],{},"根据服务器在网络中所在的位置不同，又可分为 ",[358,142214,142215],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[358,142217,142218],{},"远程服务器",[176,142220,142222],{"id":142221},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[10,142224,142225],{},[358,142226,142227],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[10,142229,142230,142231],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[13,142232,142233],{"href":142233,"rel":142234},"http:\u002F\u002Ffree.3v.do\u002F",[17],[1214,142236,142237,142240,142243,142250],{},[162,142238,142239],{},"去免费空间网站注册账号。",[162,142241,142242],{},"记录下主机名、用户名、密码、域名。",[162,142244,142245,142246,142249],{},"利用 ",[42,142247,142248],{},"utftp"," 软件 上传网站到远程服务器",[162,142251,142252],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[10,142254,142255],{},"使用软件上传，对上传软件文件进行解压",[1545,142257],{"style":126459,"src":142258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1545,142260],{"style":126459,"src":142261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[10,142263,142264],{},"输入刚刚申请的服务器账号信息：",[1545,142266],{"style":126459,"src":142267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1545,142269],{"style":126459,"src":142270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1545,142272],{"style":126459,"src":142273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1545,142275],{"style":126459,"src":142276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[10,142278,142279],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1545,142281],{"style":126459,"src":142282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[10,142284,142285],{},"浏览器输入域名即可访问",[10,142287,142288],{},"首页一定必须是index",{"title":40,"searchDepth":125,"depth":125,"links":142290},[142291],{"id":142193,"depth":125,"text":142194,"children":142292},[142293],{"id":142221,"depth":1262,"text":142222},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142185,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142300,"title":142301,"body":142302,"description":130,"extension":131,"meta":143229,"navigation":133,"path":143230,"seo":143231,"stem":143232,"__hash__":143233},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142303,"toc":143212},[142304,142307,142311,142314,142317,142328,142331,142335,142339,142344,142347,142350,142353,142356,142360,142386,142390,142394,142397,142400,142404,142437,142441,142444,142447,142511,142515,142519,142522,142525,142528,142532,142577,142581,142584,142614,142618,142622,142625,142628,142632,142635,142704,142707,142815,142817,142823,142827,142830,142833,142929,142932,142936,142960,142964,142967,142971,142974,142978,142981,142984,142987,142990,142994,142997,143000,143004,143008,143011,143014,143017,143020,143024,143027,143031,143034,143037,143082,143086,143090,143093,143096,143099,143131,143135,143138,143172,143176,143179,143209],[20,142305,142301],{"id":142306},"_18-2d动画与3d转换",[30,142308,142310],{"id":142309},"_181-css3-2d转换","18.1 CSS3 2D转换",[10,142312,142313],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[10,142315,142316],{},"转换（transform）你可以简单理解为变形",[1214,142318,142319,142322,142325],{},[162,142320,142321],{},"移动：translate",[162,142323,142324],{},"旋转：rotate",[162,142326,142327],{},"缩放：scale",[1545,142329],{"style":126459,"src":142330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[176,142332,142334],{"id":142333},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22081,142336,142338],{"id":142337},"_18111-translate介绍","18.1.1.1 translate介绍",[10,142340,142341,142342],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[358,142343,133262],{},[1545,142345],{"style":126459,"src":142346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[10,142348,142349],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[10,142351,142352],{},"对于行内元素无效",[10,142354,142355],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22081,142357,142359],{"id":142358},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[35,142361,142362],{"className":126603,"code":138792,"language":126605,"meta":40,"style":40},[42,142363,142364,142370,142382],{"__ignoreMap":40},[45,142365,142366,142368],{"class":47,"line":48},[45,142367,51692],{"class":51381},[45,142369,15655],{"class":51},[45,142371,142372,142374,142376,142378,142380],{"class":47,"line":125},[45,142373,70551],{"class":257},[45,142375,51518],{"class":51},[45,142377,400],{"class":257},[45,142379,51637],{"class":257},[45,142381,1373],{"class":51},[45,142383,142384],{"class":47,"line":1262},[45,142385,1648],{"class":51},[176,142387,142389],{"id":142388},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22081,142391,142393],{"id":142392},"_18121-rotate介绍","18.1.2.1 rotate介绍",[10,142395,142396],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1545,142398],{"style":126459,"src":142399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22081,142401,142403],{"id":142402},"_18122-旋转效果","18.1.2.2 旋转效果",[35,142405,142407],{"className":126603,"code":142406,"language":126605,"meta":40,"style":40},"div {\n  transform: rotate(45deg);\n}\n",[42,142408,142409,142415,142433],{"__ignoreMap":40},[45,142410,142411,142413],{"class":47,"line":48},[45,142412,51692],{"class":51381},[45,142414,15655],{"class":51},[45,142416,142417,142419,142421,142424,142426,142428,142431],{"class":47,"line":125},[45,142418,136587],{"class":257},[45,142420,51518],{"class":51},[45,142422,142423],{"class":257},"rotate",[45,142425,209],{"class":51},[45,142427,737],{"class":257},[45,142429,142430],{"class":93},"deg",[45,142432,2802],{"class":51},[45,142434,142435],{"class":47,"line":1262},[45,142436,1648],{"class":51},[22081,142438,142440],{"id":142439},"_18123-三角做法","18.1.2.3 三角做法",[10,142442,142443],{},"该下标当经过最外层大盒子时会实现向上反转",[1545,142445],{"style":126459,"src":142446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[35,142448,142449],{"className":126603,"code":135123,"language":126605,"meta":40,"style":40},[42,142450,142451,142455,142461,142471,142481,142497,142507],{"__ignoreMap":40},[45,142452,142453],{"class":47,"line":48},[45,142454,135130],{"class":267},[45,142456,142457,142459],{"class":47,"line":125},[45,142458,135135],{"class":2046},[45,142460,15655],{"class":51},[45,142462,142463,142465,142467,142469],{"class":47,"line":1262},[45,142464,70649],{"class":257},[45,142466,51518],{"class":51},[45,142468,400],{"class":257},[45,142470,1373],{"class":51},[45,142472,142473,142475,142477,142479],{"class":47,"line":1277},[45,142474,70869],{"class":257},[45,142476,51518],{"class":51},[45,142478,400],{"class":257},[45,142480,1373],{"class":51},[45,142482,142483,142485,142487,142489,142491,142493,142495],{"class":47,"line":1283},[45,142484,70977],{"class":257},[45,142486,51518],{"class":51},[45,142488,654],{"class":257},[45,142490,51573],{"class":93},[45,142492,51602],{"class":257},[45,142494,64072],{"class":257},[45,142496,1373],{"class":51},[45,142498,142499,142501,142503,142505],{"class":47,"line":1297},[45,142500,135178],{"class":257},[45,142502,51518],{"class":51},[45,142504,62450],{"class":257},[45,142506,1373],{"class":51},[45,142508,142509],{"class":47,"line":1303},[45,142510,1648],{"class":51},[176,142512,142514],{"id":142513},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22081,142516,142518],{"id":142517},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[10,142520,142521],{},"设置中心点",[1545,142523],{"style":126459,"src":142524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[10,142526,142527],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22081,142529,142531],{"id":142530},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[35,142533,142535],{"className":126603,"code":142534,"language":126605,"meta":40,"style":40},"\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",[42,142536,142537,142542,142548,142563,142568,142573],{"__ignoreMap":40},[45,142538,142539],{"class":47,"line":48},[45,142540,142541],{"class":267},"\u002F* 转换中心点 *\u002F\n",[45,142543,142544,142546],{"class":47,"line":125},[45,142545,51692],{"class":51381},[45,142547,15655],{"class":51},[45,142549,142550,142553,142555,142557,142559,142561],{"class":47,"line":1262},[45,142551,142552],{"class":257},"  transform-origin",[45,142554,51518],{"class":51},[45,142556,51673],{"class":257},[45,142558,17227],{"class":257},[45,142560,130466],{"class":51},[45,142562,135276],{"class":267},[45,142564,142565],{"class":47,"line":1277},[45,142566,142567],{"class":267},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[45,142569,142570],{"class":47,"line":1283},[45,142571,142572],{"class":267},"  \u002F* transform-origin: left top; *\u002F\n",[45,142574,142575],{"class":47,"line":1297},[45,142576,1648],{"class":51},[22081,142578,142580],{"id":142579},"_18133-旋转案例","18.1.3.3 旋转案例",[1545,142582],{"style":126459,"src":142583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[35,142585,142586],{"className":126603,"code":142406,"language":126605,"meta":40,"style":40},[42,142587,142588,142594,142610],{"__ignoreMap":40},[45,142589,142590,142592],{"class":47,"line":48},[45,142591,51692],{"class":51381},[45,142593,15655],{"class":51},[45,142595,142596,142598,142600,142602,142604,142606,142608],{"class":47,"line":125},[45,142597,136587],{"class":257},[45,142599,51518],{"class":51},[45,142601,142423],{"class":257},[45,142603,209],{"class":51},[45,142605,737],{"class":257},[45,142607,142430],{"class":93},[45,142609,2802],{"class":51},[45,142611,142612],{"class":47,"line":1262},[45,142613,1648],{"class":51},[176,142615,142617],{"id":142616},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22081,142619,142621],{"id":142620},"_18141-scale介绍","18.1.4.1 scale介绍",[10,142623,142624],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1545,142626],{"style":126459,"src":142627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22081,142629,142631],{"id":142630},"_18142-分页按钮","18.1.4.2 分页按钮",[1545,142633],{"style":126459,"src":142634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[35,142636,142638],{"className":126603,"code":142637,"language":126605,"meta":40,"style":40},"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",[42,142639,142640,142646,142662,142666,142670,142675,142681,142695,142700],{"__ignoreMap":40},[45,142641,142642,142644],{"class":47,"line":48},[45,142643,51692],{"class":51381},[45,142645,15655],{"class":51},[45,142647,142648,142650,142652,142655,142657,142660],{"class":47,"line":125},[45,142649,136587],{"class":257},[45,142651,51518],{"class":51},[45,142653,142654],{"class":257},"scale",[45,142656,209],{"class":51},[45,142658,142659],{"class":257},"1.2",[45,142661,2802],{"class":51},[45,142663,142664],{"class":47,"line":1262},[45,142665,1648],{"class":51},[45,142667,142668],{"class":47,"line":1277},[45,142669,136064],{"class":51},[45,142671,142672],{"class":47,"line":1283},[45,142673,142674],{"class":267},"\u002F* 2D 缩放 *\u002F\n",[45,142676,142677,142679],{"class":47,"line":1297},[45,142678,51692],{"class":51381},[45,142680,15655],{"class":51},[45,142682,142683,142685,142687,142689,142691,142693],{"class":47,"line":1303},[45,142684,136587],{"class":257},[45,142686,51518],{"class":51},[45,142688,142654],{"class":257},[45,142690,209],{"class":51},[45,142692,142659],{"class":257},[45,142694,2802],{"class":51},[45,142696,142697],{"class":47,"line":1394},[45,142698,142699],{"class":267},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[45,142701,142702],{"class":47,"line":1400},[45,142703,1648],{"class":51},[10,142705,142706],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[35,142708,142710],{"className":126603,"code":142709,"language":126605,"meta":40,"style":40},"\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",[42,142711,142712,142717,142727,142748,142769,142773,142778,142784,142811],{"__ignoreMap":40},[45,142713,142714],{"class":47,"line":48},[45,142715,142716],{"class":267},"\u002F* 定义动画 *\u002F\n",[45,142718,142719,142722,142725],{"class":47,"line":125},[45,142720,142721],{"class":93},"@keyframes",[45,142723,142724],{"class":5299}," move",[45,142726,15655],{"class":51},[45,142728,142729,142732,142734,142736,142738,142741,142743,142745],{"class":47,"line":1262},[45,142730,142731],{"class":2046},"  0%",[45,142733,79888],{"class":51},[45,142735,48215],{"class":257},[45,142737,51518],{"class":51},[45,142739,142740],{"class":257},"translateX",[45,142742,209],{"class":51},[45,142744,400],{"class":257},[45,142746,142747],{"class":51},"); }\n",[45,142749,142750,142753,142755,142757,142759,142761,142763,142765,142767],{"class":47,"line":1277},[45,142751,142752],{"class":2046},"  100%",[45,142754,79888],{"class":51},[45,142756,48215],{"class":257},[45,142758,51518],{"class":51},[45,142760,142740],{"class":257},[45,142762,209],{"class":51},[45,142764,519],{"class":257},[45,142766,51573],{"class":93},[45,142768,142747],{"class":51},[45,142770,142771],{"class":47,"line":1283},[45,142772,1648],{"class":51},[45,142774,142775],{"class":47,"line":1297},[45,142776,142777],{"class":267},"\u002F* 调用动画 *\u002F\n",[45,142779,142780,142782],{"class":47,"line":1303},[45,142781,51692],{"class":51381},[45,142783,15655],{"class":51},[45,142785,142786,142789,142791,142793,142795,142797,142799,142801,142803,142806,142809],{"class":47,"line":1394},[45,142787,142788],{"class":257},"  animation",[45,142790,51518],{"class":51},[45,142792,135289],{"class":257},[45,142794,25201],{"class":257},[45,142796,902],{"class":93},[45,142798,78761],{"class":257},[45,142800,4176],{"class":257},[45,142802,902],{"class":93},[45,142804,142805],{"class":257}," infinite",[45,142807,142808],{"class":257}," alternate",[45,142810,1373],{"class":51},[45,142812,142813],{"class":47,"line":1400},[45,142814,1648],{"class":51},[10,142816,142706],{},[35,142818,142821],{"className":142819,"code":142820,"language":5270},[5268],"\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",[42,142822,142820],{"__ignoreMap":40},[22081,142824,142826],{"id":142825},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[10,142828,142829],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1545,142831],{"style":126459,"src":142832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[35,142834,142835],{"className":126603,"code":142709,"language":126605,"meta":40,"style":40},[42,142836,142837,142841,142849,142867,142887,142891,142895,142901,142925],{"__ignoreMap":40},[45,142838,142839],{"class":47,"line":48},[45,142840,142716],{"class":267},[45,142842,142843,142845,142847],{"class":47,"line":125},[45,142844,142721],{"class":93},[45,142846,142724],{"class":5299},[45,142848,15655],{"class":51},[45,142850,142851,142853,142855,142857,142859,142861,142863,142865],{"class":47,"line":1262},[45,142852,142731],{"class":2046},[45,142854,79888],{"class":51},[45,142856,48215],{"class":257},[45,142858,51518],{"class":51},[45,142860,142740],{"class":257},[45,142862,209],{"class":51},[45,142864,400],{"class":257},[45,142866,142747],{"class":51},[45,142868,142869,142871,142873,142875,142877,142879,142881,142883,142885],{"class":47,"line":1277},[45,142870,142752],{"class":2046},[45,142872,79888],{"class":51},[45,142874,48215],{"class":257},[45,142876,51518],{"class":51},[45,142878,142740],{"class":257},[45,142880,209],{"class":51},[45,142882,519],{"class":257},[45,142884,51573],{"class":93},[45,142886,142747],{"class":51},[45,142888,142889],{"class":47,"line":1283},[45,142890,1648],{"class":51},[45,142892,142893],{"class":47,"line":1297},[45,142894,142777],{"class":267},[45,142896,142897,142899],{"class":47,"line":1303},[45,142898,51692],{"class":51381},[45,142900,15655],{"class":51},[45,142902,142903,142905,142907,142909,142911,142913,142915,142917,142919,142921,142923],{"class":47,"line":1394},[45,142904,142788],{"class":257},[45,142906,51518],{"class":51},[45,142908,135289],{"class":257},[45,142910,25201],{"class":257},[45,142912,902],{"class":93},[45,142914,78761],{"class":257},[45,142916,4176],{"class":257},[45,142918,902],{"class":93},[45,142920,142805],{"class":257},[45,142922,142808],{"class":257},[45,142924,1373],{"class":51},[45,142926,142927],{"class":47,"line":1400},[45,142928,1648],{"class":51},[10,142930,142931],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[176,142933,142935],{"id":142934},"_1823-知识点回顾","18.2.3 知识点回顾",[35,142937,142938],{"className":126603,"code":128772,"language":126605,"meta":40,"style":40},[42,142939,142940,142946,142956],{"__ignoreMap":40},[45,142941,142942,142944],{"class":47,"line":48},[45,142943,51692],{"class":51381},[45,142945,15655],{"class":51},[45,142947,142948,142950,142952,142954],{"class":47,"line":125},[45,142949,128785],{"class":257},[45,142951,51518],{"class":51},[45,142953,61817],{"class":257},[45,142955,1373],{"class":51},[45,142957,142958],{"class":47,"line":1262},[45,142959,1648],{"class":51},[30,142961,142963],{"id":142962},"_183-3d-转换","18.3 3D 转换",[10,142965,142966],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[176,142968,142970],{"id":142969},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1545,142972],{"style":126459,"src":142973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[176,142975,142977],{"id":142976},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1545,142979],{"style":126459,"src":142980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[10,142982,142983],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[10,142985,142986],{},"translate3d的效果需要搭配透视perspective来使用",[1545,142988],{"style":126459,"src":142989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[176,142991,142993],{"id":142992},"_1833-透视-perspective","18.3.3 透视 perspective",[1545,142995],{"style":126459,"src":142996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[10,142998,142999],{},"透视写在父盒子上，单位为像素",[176,143001,143003],{"id":143002},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22081,143005,143007],{"id":143006},"_18341-分开解释","18.3.4.1 分开解释",[1545,143009],{"style":126459,"src":143010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1545,143012],{"style":126459,"src":143013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1545,143015],{"style":126459,"src":143016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[10,143018,143019],{},"总结来说就是左手原则",[22081,143021,143023],{"id":143022},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1545,143025],{"style":126459,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[176,143028,143030],{"id":143029},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1545,143032],{"style":126459,"src":143033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1545,143035],{"style":126459,"src":143036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[35,143038,143040],{"className":126603,"code":143039,"language":126605,"meta":40,"style":40},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[42,143041,143042,143048,143061,143078],{"__ignoreMap":40},[45,143043,143044,143046],{"class":47,"line":48},[45,143045,51692],{"class":51381},[45,143047,15655],{"class":51},[45,143049,143050,143053,143055,143057,143059],{"class":47,"line":125},[45,143051,143052],{"class":257},"  perspective",[45,143054,51518],{"class":51},[45,143056,65155],{"class":257},[45,143058,51573],{"class":93},[45,143060,1373],{"class":51},[45,143062,143063,143065,143067,143070,143072,143074,143076],{"class":47,"line":1262},[45,143064,136587],{"class":257},[45,143066,51518],{"class":51},[45,143068,143069],{"class":257},"rotateX",[45,143071,209],{"class":51},[45,143073,737],{"class":257},[45,143075,142430],{"class":93},[45,143077,2802],{"class":51},[45,143079,143080],{"class":47,"line":1277},[45,143081,1648],{"class":51},[176,143083,143085],{"id":143084},"_1836-案例","18.3.6 案例",[22081,143087,143089],{"id":143088},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1545,143091],{"style":126459,"src":143092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1545,143094],{"style":126459,"src":143095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1545,143097],{"style":126459,"src":143098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[35,143100,143102],{"className":126603,"code":143101,"language":126605,"meta":40,"style":40},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[42,143103,143104,143109,143115,143127],{"__ignoreMap":40},[45,143105,143106],{"class":47,"line":48},[45,143107,143108],{"class":267},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[45,143110,143111,143113],{"class":47,"line":125},[45,143112,133600],{"class":2046},[45,143114,15655],{"class":51},[45,143116,143117,143119,143121,143123,143125],{"class":47,"line":1262},[45,143118,143052],{"class":257},[45,143120,51518],{"class":51},[45,143122,65155],{"class":257},[45,143124,51573],{"class":93},[45,143126,1373],{"class":51},[45,143128,143129],{"class":47,"line":1277},[45,143130,1648],{"class":51},[22081,143132,143134],{"id":143133},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1545,143136],{"style":126459,"src":143137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[35,143139,143140],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},[42,143141,143142,143146,143160,143164],{"__ignoreMap":40},[45,143143,143144],{"class":47,"line":48},[45,143145,130714],{"class":267},[45,143147,143148,143150,143152,143154,143156,143158],{"class":47,"line":125},[45,143149,1117],{"class":51},[45,143151,51692],{"class":51381},[45,143153,53567],{"class":2046},[45,143155,254],{"class":51},[45,143157,130727],{"class":313},[45,143159,51388],{"class":51},[45,143161,143162],{"class":47,"line":1262},[45,143163,130734],{"class":51},[45,143165,143166,143168,143170],{"class":47,"line":1277},[45,143167,51866],{"class":51},[45,143169,51692],{"class":51381},[45,143171,51388],{"class":51},[22081,143173,143175],{"id":143174},"_18363-旋转木马","18.3.6.3 旋转木马",[1545,143177],{"style":126459,"src":143178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[35,143180,143181],{"className":126603,"code":142406,"language":126605,"meta":40,"style":40},[42,143182,143183,143189,143205],{"__ignoreMap":40},[45,143184,143185,143187],{"class":47,"line":48},[45,143186,51692],{"class":51381},[45,143188,15655],{"class":51},[45,143190,143191,143193,143195,143197,143199,143201,143203],{"class":47,"line":125},[45,143192,136587],{"class":257},[45,143194,51518],{"class":51},[45,143196,142423],{"class":257},[45,143198,209],{"class":51},[45,143200,737],{"class":257},[45,143202,142430],{"class":93},[45,143204,2802],{"class":51},[45,143206,143207],{"class":47,"line":1262},[45,143208,1648],{"class":51},[121,143210,143211],{},"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":40,"searchDepth":125,"depth":125,"links":143213},[143214,143221],{"id":142309,"depth":125,"text":142310,"children":143215},[143216,143217,143218,143219,143220],{"id":142333,"depth":1262,"text":142334},{"id":142388,"depth":1262,"text":142389},{"id":142513,"depth":1262,"text":142514},{"id":142616,"depth":1262,"text":142617},{"id":142934,"depth":1262,"text":142935},{"id":142962,"depth":125,"text":142963,"children":143222},[143223,143224,143225,143226,143227,143228],{"id":142969,"depth":1262,"text":142970},{"id":142976,"depth":1262,"text":142977},{"id":142992,"depth":1262,"text":142993},{"id":143002,"depth":1262,"text":143003},{"id":143029,"depth":1262,"text":143030},{"id":143084,"depth":1262,"text":143085},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142301,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143235,"title":143236,"body":143237,"description":130,"extension":131,"meta":143440,"navigation":133,"path":143441,"seo":143442,"stem":143443,"__hash__":143444},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143238,"toc":143429},[143239,143242,143246,143249,143252,143256,143259,143262,143265,143269,143272,143276,143279,143283,143286,143290,143304,143308,143333,143336,143339,143356,143360,143364,143367,143370,143374,143377,143380,143398,143402,143405,143419,143423,143426],[20,143240,143236],{"id":143241},"_19-移动端基础-前缀现状与视口",[30,143243,143245],{"id":143244},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1545,143247],{"style":126459,"src":143248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[10,143250,143251],{},"意思就是加个前缀，增加兼容性",[30,143253,143255],{"id":143254},"_192-移动端现状认识","19.2 移动端现状认识",[1545,143257],{"style":126459,"src":143258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[10,143260,143261],{},"调试方法：",[1545,143263],{"style":126459,"src":143264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[30,143266,143268],{"id":143267},"_193-视口","19.3 视口",[10,143270,143271],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[176,143273,143275],{"id":143274},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1545,143277],{"style":126459,"src":143278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[176,143280,143282],{"id":143281},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1545,143284],{"style":126459,"src":143285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[176,143287,143289],{"id":143288},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1214,143291,143292,143295,143298,143301],{},[162,143293,143294],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[162,143296,143297],{},"理想视口，对设备来讲，是最理想的视口尺寸",[162,143299,143300],{},"需要手动添写meta视口标签通知浏览器操作",[162,143302,143303],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[176,143305,143307],{"id":143306},"_1934-meta视口标签","19.3.4 meta视口标签",[35,143309,143311],{"className":127350,"code":143310,"language":127352,"meta":40,"style":40},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[42,143312,143313],{"__ignoreMap":40},[45,143314,143315,143317,143319,143321,143323,143325,143327,143329,143331],{"class":47,"line":48},[45,143316,1117],{"class":51},[45,143318,51425],{"class":51381},[45,143320,15003],{"class":2046},[45,143322,254],{"class":51},[45,143324,51472],{"class":313},[45,143326,51452],{"class":2046},[45,143328,254],{"class":51},[45,143330,51479],{"class":313},[45,143332,51388],{"class":51},[1545,143334],{"style":126459,"src":143335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[10,143337,143338],{},"标准视口设置：",[159,143340,143341,143344,143347,143350,143353],{},[162,143342,143343],{},"视口宽度和设备保持一致",[162,143345,143346],{},"视口的默认缩放比例1.0",[162,143348,143349],{},"不允许用户自行缩放",[162,143351,143352],{},"最大允许的缩放比例1.0",[162,143354,143355],{},"最小允许的缩放比例1.0",[176,143357,143359],{"id":143358},"_1935-二倍图","19.3.5 二倍图",[22081,143361,143363],{"id":143362},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1545,143365],{"style":126459,"src":143366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1545,143368],{"style":126459,"src":143369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22081,143371,143373],{"id":143372},"_19352-多倍图","19.3.5.2 多倍图",[1545,143375],{"style":126459,"src":143376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[10,143378,143379],{},"二倍图法，代码如下：",[35,143381,143383],{"className":126603,"code":143382,"language":126605,"meta":40,"style":40},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[42,143384,143385,143390],{"__ignoreMap":40},[45,143386,143387],{"class":47,"line":48},[45,143388,143389],{"class":267},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[45,143391,143392,143395],{"class":47,"line":125},[45,143393,143394],{"class":51381},"background-size",[45,143396,143397],{"class":51},": 50% 50%;\n",[22081,143399,143401],{"id":143400},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1545,143403],{"style":126459,"src":143404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[159,143406,143407,143410,143413,143416],{},[162,143408,143409],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[162,143411,143412],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[162,143414,143415],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[162,143417,143418],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22081,143420,143422],{"id":143421},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1545,143424],{"style":126459,"src":143425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[121,143427,143428],{},"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":40,"searchDepth":125,"depth":125,"links":143430},[143431,143432,143433],{"id":143244,"depth":125,"text":143245},{"id":143254,"depth":125,"text":143255},{"id":143267,"depth":125,"text":143268,"children":143434},[143435,143436,143437,143438,143439],{"id":143274,"depth":1262,"text":143275},{"id":143281,"depth":1262,"text":143282},{"id":143288,"depth":1262,"text":143289},{"id":143306,"depth":1262,"text":143307},{"id":143358,"depth":1262,"text":143359},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143236,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143446,"title":143447,"body":143448,"description":130,"extension":131,"meta":144325,"navigation":133,"path":144326,"seo":144327,"stem":144328,"__hash__":144329},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143449,"toc":144309},[143450,143453,143457,143464,143467,143474,143477,143482,143485,143489,143493,143500,143503,143506,143510,143513,143516,143519,143522,143525,143529,143532,143536,143538,143541,143544,143547,143550,143552,143555,143557,143587,143589,143619,143623,143626,143630,143633,143650,143653,143656,143732,143734,143737,143740,143743,143746,143748,143751,143754,143758,143780,143783,143786,143790,143793,143799,143802,143806,143809,143812,143816,143819,143822,143825,143829,143832,143835,143838,143841,143845,143848,143852,143859,143862,143865,143868,143871,143881,143884,143887,143894,143897,143901,143904,143907,143911,143914,143917,143920,143965,143968,143971,143974,143976,144105,144107,144145,144148,144151,144153,144271,144273,144307],[20,143451,143447],{"id":143452},"_20-移动端布局实战上篇",[30,143454,143456],{"id":143455},"_201-移动端主流方案","20.1 移动端主流方案",[159,143458,143459],{},[162,143460,143461],{},[358,143462,143463],{},"单独移动端页面（主流）",[1545,143465],{"style":126459,"src":143466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[159,143468,143469],{"start":125},[162,143470,143471],{},[358,143472,143473],{},"响应式兼容PC移动端",[1545,143475],{"style":126459,"src":143476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[159,143478,143479],{"start":1262},[162,143480,143481],{},"两种页面选型布局方式",[1545,143483],{"style":126459,"src":143484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[30,143486,143488],{"id":143487},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[176,143490,143492],{"id":143491},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[10,143494,143495,143496],{},"官网地址： ",[13,143497,143498],{"href":143498,"rel":143499},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[17],[1545,143501],{"style":126459,"src":143502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1545,143504],{"style":126459,"src":143505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[176,143507,143509],{"id":143508},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1545,143511],{"style":126459,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1545,143514],{"style":126459,"src":143515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[10,143517,143518],{},"去除高亮：",[10,143520,143521],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[10,143523,143524],{},"-webkit- tap-highlight-color: transparent;",[30,143526,143528],{"id":143527},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1545,143530],{"style":126459,"src":143531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[30,143533,143535],{"id":143534},"_204-流式布局案例","20.4 流式布局案例",[10,143537,238],{},[10,143539,143540],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[10,143542,143543],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[10,143545,143546],{},"图片格式：",[1545,143548],{"style":126459,"src":143549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[10,143551,135646],{},[1545,143553],{"style":126459,"src":143554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[10,143556,139973],{},[35,143558,143559],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,143560,143561],{"__ignoreMap":40},[45,143562,143563,143565,143567,143569,143571,143573,143575,143577,143579,143581,143583,143585],{"class":47,"line":48},[45,143564,1117],{"class":51},[45,143566,1545],{"class":51381},[45,143568,55320],{"class":2046},[45,143570,254],{"class":51},[45,143572,134120],{"class":313},[45,143574,55328],{"class":2046},[45,143576,254],{"class":51},[45,143578,134127],{"class":313},[45,143580,134130],{"class":2046},[45,143582,254],{"class":51},[45,143584,134135],{"class":313},[45,143586,51388],{"class":51},[10,143588,140062],{},[35,143590,143591],{"className":127350,"code":134105,"language":127352,"meta":40,"style":40},[42,143592,143593],{"__ignoreMap":40},[45,143594,143595,143597,143599,143601,143603,143605,143607,143609,143611,143613,143615,143617],{"class":47,"line":48},[45,143596,1117],{"class":51},[45,143598,1545],{"class":51381},[45,143600,55320],{"class":2046},[45,143602,254],{"class":51},[45,143604,134120],{"class":313},[45,143606,55328],{"class":2046},[45,143608,254],{"class":51},[45,143610,134127],{"class":313},[45,143612,134130],{"class":2046},[45,143614,254],{"class":51},[45,143616,134135],{"class":313},[45,143618,51388],{"class":51},[30,143620,143622],{"id":143621},"_205-flex布局","20.5 flex布局",[1545,143624],{"style":126459,"src":143625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[176,143627,143629],{"id":143628},"_2051-布局原理","20.5.1 布局原理",[10,143631,143632],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1214,143634,143635,143638,143641,143644,143647],{},[162,143636,143637],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[162,143639,143640],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[162,143642,143643],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[162,143645,143646],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[162,143648,143649],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[10,143651,143652],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[10,143654,143655],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[35,143657,143659],{"className":126603,"code":143658,"language":126605,"meta":40,"style":40},"\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",[42,143660,143661,143666,143673,143683,143695,143706,143717,143728],{"__ignoreMap":40},[45,143662,143663],{"class":47,"line":48},[45,143664,143665],{"class":267},"\u002F* Flex 弹性布局 *\u002F\n",[45,143667,143668,143671],{"class":47,"line":125},[45,143669,143670],{"class":2046},".container",[45,143672,15655],{"class":51},[45,143674,143675,143677,143679,143681],{"class":47,"line":1262},[45,143676,128219],{"class":257},[45,143678,51518],{"class":51},[45,143680,51558],{"class":257},[45,143682,1373],{"class":51},[45,143684,143685,143688,143690,143693],{"class":47,"line":1277},[45,143686,143687],{"class":257},"  flex-direction",[45,143689,51518],{"class":51},[45,143691,143692],{"class":257},"row",[45,143694,1373],{"class":51},[45,143696,143697,143700,143702,143704],{"class":47,"line":1283},[45,143698,143699],{"class":257},"  justify-content",[45,143701,51518],{"class":51},[45,143703,51749],{"class":257},[45,143705,1373],{"class":51},[45,143707,143708,143711,143713,143715],{"class":47,"line":1297},[45,143709,143710],{"class":257},"  align-items",[45,143712,51518],{"class":51},[45,143714,51673],{"class":257},[45,143716,1373],{"class":51},[45,143718,143719,143722,143724,143726],{"class":47,"line":1303},[45,143720,143721],{"class":257},"  flex-wrap",[45,143723,51518],{"class":51},[45,143725,78691],{"class":257},[45,143727,1373],{"class":51},[45,143729,143730],{"class":47,"line":1394},[45,143731,1648],{"class":51},[10,143733,70534],{},[10,143735,143736],{},".form-item .male-label {",[10,143738,143739],{},"   margin-right: 20px;",[10,143741,143742],{},"   display: inline-flex;",[10,143744,143745],{},"   align-items: center;",[10,143747,1153],{},[1545,143749],{"style":126459,"src":143750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1545,143752],{"style":126459,"src":143753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[176,143755,143757],{"id":143756},"_2052-常见父项属性","20.5.2 常见父项属性",[159,143759,143760,143763,143766,143769,143772,143775,143778],{},[162,143761,143762],{},"flex-direction：设置主轴的方向",[162,143764,143765],{},"justify-content：设置主轴上的子元素排列方式",[162,143767,143768],{},"flex-wrap：设置子元素是否换行",[162,143770,143771],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[162,143773,143774],{},"align-items：设置侧轴上的子元素排列方式（单行）",[162,143776,143777],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[162,143779,143762],{},[1545,143781],{"style":126459,"src":143782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1545,143784],{"style":126459,"src":143785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[159,143787,143788],{"start":125},[162,143789,143765],{},[1545,143791],{"style":126459,"src":143792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[10,143794,143795,143798],{},[42,143796,143797],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[10,143800,143801],{},"跟着主轴走",[159,143803,143804],{"start":1262},[162,143805,143768],{},[1545,143807],{"style":126459,"src":143808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[10,143810,143811],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[159,143813,143814],{"start":1277},[162,143815,143771],{},[1545,143817],{"style":126459,"src":143818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[10,143820,143821],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[10,143823,143824],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[159,143826,143827],{"start":1283},[162,143828,143774],{},[1545,143830],{"style":126459,"src":143831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[10,143833,143834],{},"align-items与align-content之间的区别：",[10,143836,143837],{},"单找items，多找content",[1545,143839],{"style":126459,"src":143840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[159,143842,143843],{"start":1297},[162,143844,143777],{},[1545,143846],{"style":126459,"src":143847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[176,143849,143851],{"id":143850},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[159,143853,143854],{},[162,143855,143856],{},[358,143857,143858],{},"flex 属性",[10,143860,143861],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1545,143863],{"style":126459,"src":143864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[10,143866,143867],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[10,143869,143870],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[159,143872,143873],{"start":125},[162,143874,143875,13878,143878],{},[358,143876,143877],{},"align-self",[358,143879,143880],{},"控制子项自己在侧轴上的排列方式",[1545,143882],{"style":126459,"src":143883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[10,143885,143886],{},"单个子盒子在父盒子侧轴上的排列方式",[159,143888,143889],{"start":1262},[162,143890,143891,143893],{},[358,143892,95348],{}," 属性定义项目的排列顺序",[1545,143895],{"style":126459,"src":143896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[176,143898,143900],{"id":143899},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1545,143902],{"style":126459,"src":143903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[10,143905,143906],{},"必须要添加浏览器的私有前缀",[176,143908,143910],{"id":143909},"_2055-携程网首页案例","20.5.5 携程网首页案例",[10,143912,143913],{},"学到最重要的知识：",[10,143915,143916],{},"flex处理这样的布局思路",[1545,143918],{"style":126459,"src":143919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[35,143921,143923],{"className":126603,"code":143922,"language":126605,"meta":40,"style":40},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[42,143924,143925,143931,143941,143951,143961],{"__ignoreMap":40},[45,143926,143927,143929],{"class":47,"line":48},[45,143928,143670],{"class":2046},[45,143930,15655],{"class":51},[45,143932,143933,143935,143937,143939],{"class":47,"line":125},[45,143934,128219],{"class":257},[45,143936,51518],{"class":51},[45,143938,51558],{"class":257},[45,143940,1373],{"class":51},[45,143942,143943,143945,143947,143949],{"class":47,"line":1262},[45,143944,143699],{"class":257},[45,143946,51518],{"class":51},[45,143948,51673],{"class":257},[45,143950,1373],{"class":51},[45,143952,143953,143955,143957,143959],{"class":47,"line":1277},[45,143954,143710],{"class":257},[45,143956,51518],{"class":51},[45,143958,51673],{"class":257},[45,143960,1373],{"class":51},[45,143962,143963],{"class":47,"line":1283},[45,143964,1648],{"class":51},[10,143966,143967],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[10,143969,143970],{},"使用属性选择器",[1545,143972],{"style":126459,"src":143973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[10,143975,68970],{},[35,143977,143979],{"className":127350,"code":143978,"language":127352,"meta":40,"style":40},"\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",[42,143980,143981,143986,144000,144005,144025,144030,144049,144054,144073,144078,144097],{"__ignoreMap":40},[45,143982,143983],{"class":47,"line":48},[45,143984,143985],{"class":267},"\u003C!-- 携程网移动端案例结构 -->\n",[45,143987,143988,143990,143992,143994,143996,143998],{"class":47,"line":125},[45,143989,1117],{"class":51},[45,143991,51692],{"class":51381},[45,143993,53567],{"class":2046},[45,143995,254],{"class":51},[45,143997,92404],{"class":313},[45,143999,51388],{"class":51},[45,144001,144002],{"class":47,"line":1262},[45,144003,144004],{"class":267},"  \u003C!-- 搜索栏 -->\n",[45,144006,144007,144009,144011,144013,144015,144018,144021,144023],{"class":47,"line":1277},[45,144008,52225],{"class":51},[45,144010,51692],{"class":51381},[45,144012,53567],{"class":2046},[45,144014,254],{"class":51},[45,144016,144017],{"class":313},"\"search-index\"",[45,144019,144020],{"class":51},">...\u003C\u002F",[45,144022,51692],{"class":51381},[45,144024,51388],{"class":51},[45,144026,144027],{"class":47,"line":1283},[45,144028,144029],{"class":267},"  \u003C!-- 焦点图 -->\n",[45,144031,144032,144034,144036,144038,144040,144043,144045,144047],{"class":47,"line":1297},[45,144033,52225],{"class":51},[45,144035,51692],{"class":51381},[45,144037,53567],{"class":2046},[45,144039,254],{"class":51},[45,144041,144042],{"class":313},"\"focus\"",[45,144044,144020],{"class":51},[45,144046,51692],{"class":51381},[45,144048,51388],{"class":51},[45,144050,144051],{"class":47,"line":1303},[45,144052,144053],{"class":267},"  \u003C!-- 主导航 -->\n",[45,144055,144056,144058,144060,144062,144064,144067,144069,144071],{"class":47,"line":1394},[45,144057,52225],{"class":51},[45,144059,51692],{"class":51381},[45,144061,53567],{"class":2046},[45,144063,254],{"class":51},[45,144065,144066],{"class":313},"\"local-nav\"",[45,144068,144020],{"class":51},[45,144070,51692],{"class":51381},[45,144072,51388],{"class":51},[45,144074,144075],{"class":47,"line":1400},[45,144076,144077],{"class":267},"  \u003C!-- 子导航 -->\n",[45,144079,144080,144082,144084,144086,144088,144091,144093,144095],{"class":47,"line":1412},[45,144081,52225],{"class":51},[45,144083,51692],{"class":51381},[45,144085,53567],{"class":2046},[45,144087,254],{"class":51},[45,144089,144090],{"class":313},"\"nav-common\"",[45,144092,144020],{"class":51},[45,144094,51692],{"class":51381},[45,144096,51388],{"class":51},[45,144098,144099,144101,144103],{"class":47,"line":1695},[45,144100,51866],{"class":51},[45,144102,51692],{"class":51381},[45,144104,51388],{"class":51},[10,144106,70534],{},[35,144108,144109],{"className":126603,"code":137055,"language":126605,"meta":40,"style":40},[42,144110,144111,144125,144141],{"__ignoreMap":40},[45,144112,144113,144115,144117,144119,144121,144123],{"class":47,"line":48},[45,144114,53902],{"class":51381},[45,144116,1097],{"class":51},[45,144118,103158],{"class":2046},[45,144120,254],{"class":93},[45,144122,62780],{"class":313},[45,144124,137072],{"class":51},[45,144126,144127,144129,144131,144133,144135,144137,144139],{"class":47,"line":125},[45,144128,70977],{"class":257},[45,144130,51518],{"class":51},[45,144132,426],{"class":257},[45,144134,51573],{"class":93},[45,144136,51602],{"class":257},[45,144138,130183],{"class":257},[45,144140,1373],{"class":51},[45,144142,144143],{"class":47,"line":1262},[45,144144,1648],{"class":51},[10,144146,144147],{},"总代码和效果展示：",[1545,144149],{"style":126459,"src":144150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[10,144152,68970],{},[35,144154,144155],{"className":127350,"code":143978,"language":127352,"meta":40,"style":40},[42,144156,144157,144161,144175,144179,144197,144201,144219,144223,144241,144245,144263],{"__ignoreMap":40},[45,144158,144159],{"class":47,"line":48},[45,144160,143985],{"class":267},[45,144162,144163,144165,144167,144169,144171,144173],{"class":47,"line":125},[45,144164,1117],{"class":51},[45,144166,51692],{"class":51381},[45,144168,53567],{"class":2046},[45,144170,254],{"class":51},[45,144172,92404],{"class":313},[45,144174,51388],{"class":51},[45,144176,144177],{"class":47,"line":1262},[45,144178,144004],{"class":267},[45,144180,144181,144183,144185,144187,144189,144191,144193,144195],{"class":47,"line":1277},[45,144182,52225],{"class":51},[45,144184,51692],{"class":51381},[45,144186,53567],{"class":2046},[45,144188,254],{"class":51},[45,144190,144017],{"class":313},[45,144192,144020],{"class":51},[45,144194,51692],{"class":51381},[45,144196,51388],{"class":51},[45,144198,144199],{"class":47,"line":1283},[45,144200,144029],{"class":267},[45,144202,144203,144205,144207,144209,144211,144213,144215,144217],{"class":47,"line":1297},[45,144204,52225],{"class":51},[45,144206,51692],{"class":51381},[45,144208,53567],{"class":2046},[45,144210,254],{"class":51},[45,144212,144042],{"class":313},[45,144214,144020],{"class":51},[45,144216,51692],{"class":51381},[45,144218,51388],{"class":51},[45,144220,144221],{"class":47,"line":1303},[45,144222,144053],{"class":267},[45,144224,144225,144227,144229,144231,144233,144235,144237,144239],{"class":47,"line":1394},[45,144226,52225],{"class":51},[45,144228,51692],{"class":51381},[45,144230,53567],{"class":2046},[45,144232,254],{"class":51},[45,144234,144066],{"class":313},[45,144236,144020],{"class":51},[45,144238,51692],{"class":51381},[45,144240,51388],{"class":51},[45,144242,144243],{"class":47,"line":1400},[45,144244,144077],{"class":267},[45,144246,144247,144249,144251,144253,144255,144257,144259,144261],{"class":47,"line":1412},[45,144248,52225],{"class":51},[45,144250,51692],{"class":51381},[45,144252,53567],{"class":2046},[45,144254,254],{"class":51},[45,144256,144090],{"class":313},[45,144258,144020],{"class":51},[45,144260,51692],{"class":51381},[45,144262,51388],{"class":51},[45,144264,144265,144267,144269],{"class":47,"line":1695},[45,144266,51866],{"class":51},[45,144268,51692],{"class":51381},[45,144270,51388],{"class":51},[10,144272,70534],{},[35,144274,144275],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},[42,144276,144277,144281,144295,144299],{"__ignoreMap":40},[45,144278,144279],{"class":47,"line":48},[45,144280,130714],{"class":267},[45,144282,144283,144285,144287,144289,144291,144293],{"class":47,"line":125},[45,144284,1117],{"class":51},[45,144286,51692],{"class":51381},[45,144288,53567],{"class":2046},[45,144290,254],{"class":51},[45,144292,130727],{"class":313},[45,144294,51388],{"class":51},[45,144296,144297],{"class":47,"line":1262},[45,144298,130734],{"class":51},[45,144300,144301,144303,144305],{"class":47,"line":1277},[45,144302,51866],{"class":51},[45,144304,51692],{"class":51381},[45,144306,51388],{"class":51},[121,144308,138004],{},{"title":40,"searchDepth":125,"depth":125,"links":144310},[144311,144312,144316,144317,144318],{"id":143455,"depth":125,"text":143456},{"id":143487,"depth":125,"text":143488,"children":144313},[144314,144315],{"id":143491,"depth":1262,"text":143492},{"id":143508,"depth":1262,"text":143509},{"id":143527,"depth":125,"text":143528},{"id":143534,"depth":125,"text":143535},{"id":143621,"depth":125,"text":143622,"children":144319},[144320,144321,144322,144323,144324],{"id":143628,"depth":1262,"text":143629},{"id":143756,"depth":1262,"text":143757},{"id":143850,"depth":1262,"text":143851},{"id":143899,"depth":1262,"text":143900},{"id":143909,"depth":1262,"text":143910},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143447,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144331,"title":144332,"body":144333,"description":130,"extension":131,"meta":145560,"navigation":133,"path":145561,"seo":145562,"stem":145563,"__hash__":145564},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144334,"toc":145538},[144335,144338,144342,144346,144349,144352,144356,144361,144364,144367,144370,144373,144376,144433,144436,144441,144444,144447,144451,144462,144466,144469,144472,144479,144484,144488,144491,144497,144500,144504,144507,144514,144517,144520,144527,144530,144537,144540,144543,144550,144553,144556,144558,144575,144579,144582,144585,144588,144592,144595,144598,144601,144604,144607,144610,144612,144615,144618,144680,144683,144793,144800,144806,144809,144812,144816,144819,144823,144828,144831,144838,144841,144847,144852,144855,144858,144861,144864,144867,144870,144873,144876,144932,144934,144960,144964,144967,144970,144973,144981,144984,144987,144991,145047,145050,145054,145060,145071,145074,145079,145082,145085,145091,145094,145097,145100,145103,145106,145109,145112,145115,145140,145146,145149,145152,145155,145158,145161,145164,145169,145172,145175,145178,145186,145189,145196,145199,145202,145204,145228,145230,145233,145236,145239,145242,145245,145248,145251,145285,145288,145291,145325,145332,145335,145338,145341,145344,145347,145350,145357,145360,145363,145366,145369,145376,145379,145382,145389,145392,145395,145399,145402,145405,145408,145411,145414,145417,145420,145423,145425,145449,145451,145475,145479,145490,145493,145496,145499,145502,145505,145508,145511,145514,145517,145520,145523,145526,145529,145532,145535],[20,144336,144332],{"id":144337},"_21-移动端布局实战下篇",[30,144339,144341],{"id":144340},"_211-rem适配布局","21.1 rem适配布局",[176,144343,144345],{"id":144344},"_2111-rem单位","21.1.1 rem单位",[1545,144347],{"style":126459,"src":144348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[10,144350,144351],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[176,144353,144355],{"id":144354},"_2112-媒体查询","21.1.2 媒体查询",[159,144357,144358],{},[162,144359,144360],{},"参数介绍",[1545,144362],{"style":126459,"src":144363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1545,144365],{"style":126459,"src":144366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1545,144368],{"style":126459,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1545,144371],{"style":126459,"src":144372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1545,144374],{"style":126459,"src":144375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[35,144377,144379],{"className":126603,"code":144378,"language":126605,"meta":40,"style":40},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[42,144380,144381,144386,144405,144412,144425,144429],{"__ignoreMap":40},[45,144382,144383],{"class":47,"line":48},[45,144384,144385],{"class":267},"\u002F* 媒体查询 *\u002F\n",[45,144387,144388,144391,144393,144396,144398,144401,144403],{"class":47,"line":125},[45,144389,144390],{"class":93},"@media",[45,144392,1741],{"class":51},[45,144394,144395],{"class":257},"max-width",[45,144397,51518],{"class":51},[45,144399,144400],{"class":257},"768",[45,144402,51573],{"class":93},[45,144404,12525],{"class":51},[45,144406,144407,144410],{"class":47,"line":1262},[45,144408,144409],{"class":2046},"  .container",[45,144411,15655],{"class":51},[45,144413,144414,144417,144419,144421,144423],{"class":47,"line":1277},[45,144415,144416],{"class":257},"    width",[45,144418,51518],{"class":51},[45,144420,519],{"class":257},[45,144422,536],{"class":93},[45,144424,1373],{"class":51},[45,144426,144427],{"class":47,"line":1283},[45,144428,127399],{"class":51},[45,144430,144431],{"class":47,"line":1297},[45,144432,1648],{"class":51},[10,144434,144435],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[159,144437,144438],{"start":125},[162,144439,144440],{},"引入资源",[1545,144442],{"style":126459,"src":144443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[10,144445,144446],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[176,144448,144450],{"id":144449},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1214,144452,144453,144456,144459],{},[162,144454,144455],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[162,144457,144458],{},"媒体查询可以根据不同设备宽度来修改样式",[162,144460,144461],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[30,144463,144465],{"id":144464},"_212-less基础","21.2 Less基础",[10,144467,144468],{},"css冗余度较高，不利于复用，没有很好的计算能力",[10,144470,144471],{},"Less可以解决该问题，它是css的扩展语言",[10,144473,144474,144475],{},"Less中文网址： ",[13,144476,144477],{"href":144477,"rel":144478},"http:\u002F\u002Flesscss.cn\u002F",[17],[10,144480,144481],{},[358,144482,144483],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[176,144485,144487],{"id":144486},"_2121-less安装","21.2.1 less安装",[10,144489,144490],{},"如果使用vscode，则无需进行下方安装步骤",[10,144492,144493],{},[13,144494,144495],{"href":144495,"rel":144496},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[17],[1545,144498],{"style":126459,"src":144499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[176,144501,144503],{"id":144502},"_2122-less使用","21.2.2 less使用",[10,144505,144506],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[159,144508,144509],{},[162,144510,144511],{},[358,144512,144513],{},"Less 变量",[1545,144515],{"style":126459,"src":144516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1545,144518],{"style":126459,"src":144519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[159,144521,144522],{"start":125},[162,144523,144524],{},[358,144525,144526],{},"Less 编译",[1545,144528],{"style":126459,"src":144529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[159,144531,144532],{"start":1262},[162,144533,144534],{},[358,144535,144536],{},"Less 嵌套",[1545,144538],{"style":126459,"src":144539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1545,144541],{"style":126459,"src":144542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[159,144544,144545],{"start":1277},[162,144546,144547],{},[358,144548,144549],{},"Less 运算",[1545,144551],{"style":126459,"src":144552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[10,144554,144555],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[10,144557,238],{},[1214,144559,144560,144563,144566,144569,144572],{},[162,144561,144562],{},"乘号（*）和除号（\u002F）的写法",[162,144564,144565],{},"运算符中间左右有个空格隔开 1px + 5",[162,144567,144568],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[162,144570,144571],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[162,144573,144574],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[30,144576,144578],{"id":144577},"_213-rem-适配方案","21.3 rem 适配方案",[10,144580,144581],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[10,144583,144584],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1545,144586],{"style":126459,"src":144587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[176,144589,144591],{"id":144590},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[10,144593,144594],{},"rem + 媒体查询 + less 技术",[1545,144596],{"style":126459,"src":144597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[10,144599,144600],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[10,144602,144603],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1545,144605],{"style":126459,"src":144606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[10,144608,144609],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[10,144611,14716],{},[1545,144613],{"style":126459,"src":144614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[10,144616,144617],{},"index.html:",[35,144619,144621],{"className":126603,"code":144620,"language":126605,"meta":40,"style":40},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[42,144622,144623,144628,144634,144650,144654,144660,144676],{"__ignoreMap":40},[45,144624,144625],{"class":47,"line":48},[45,144626,144627],{"class":267},"\u002F* rem 适配方案 *\u002F\n",[45,144629,144630,144632],{"class":47,"line":125},[45,144631,50716],{"class":51381},[45,144633,15655],{"class":51},[45,144635,144636,144638,144640,144643,144645,144647],{"class":47,"line":1262},[45,144637,70707],{"class":257},[45,144639,51518],{"class":51},[45,144641,144642],{"class":257},"62.5",[45,144644,536],{"class":93},[45,144646,130466],{"class":51},[45,144648,144649],{"class":267},"\u002F* 1rem = 10px *\u002F\n",[45,144651,144652],{"class":47,"line":1277},[45,144653,1648],{"class":51},[45,144655,144656,144658],{"class":47,"line":1283},[45,144657,130451],{"class":2046},[45,144659,15655],{"class":51},[45,144661,144662,144664,144666,144668,144671,144673],{"class":47,"line":1297},[45,144663,70649],{"class":257},[45,144665,51518],{"class":51},[45,144667,654],{"class":257},[45,144669,144670],{"class":93},"rem",[45,144672,130466],{"class":51},[45,144674,144675],{"class":267},"\u002F* 100px *\u002F\n",[45,144677,144678],{"class":47,"line":1303},[45,144679,1648],{"class":51},[10,144681,144682],{},"common.less",[35,144684,144686],{"className":126603,"code":144685,"language":126605,"meta":40,"style":40},"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",[42,144687,144688,144694,144709,144713,144719,144733,144737,144741,144745,144751,144765,144769,144775,144789],{"__ignoreMap":40},[45,144689,144690,144692],{"class":47,"line":48},[45,144691,50716],{"class":51381},[45,144693,15655],{"class":51},[45,144695,144696,144698,144700,144702,144704,144706],{"class":47,"line":125},[45,144697,70707],{"class":257},[45,144699,51518],{"class":51},[45,144701,144642],{"class":257},[45,144703,536],{"class":93},[45,144705,26150],{"class":51},[45,144707,144708],{"class":267},"\u002F* 10px *\u002F\n",[45,144710,144711],{"class":47,"line":1262},[45,144712,1648],{"class":51},[45,144714,144715,144717],{"class":47,"line":1277},[45,144716,51692],{"class":51381},[45,144718,15655],{"class":51},[45,144720,144721,144723,144725,144727,144729,144731],{"class":47,"line":1283},[45,144722,70649],{"class":257},[45,144724,51518],{"class":51},[45,144726,654],{"class":257},[45,144728,144670],{"class":93},[45,144730,26150],{"class":51},[45,144732,144675],{"class":267},[45,144734,144735],{"class":47,"line":1297},[45,144736,1648],{"class":51},[45,144738,144739],{"class":47,"line":1303},[45,144740,136064],{"class":51},[45,144742,144743],{"class":47,"line":1394},[45,144744,144627],{"class":267},[45,144746,144747,144749],{"class":47,"line":1400},[45,144748,50716],{"class":51381},[45,144750,15655],{"class":51},[45,144752,144753,144755,144757,144759,144761,144763],{"class":47,"line":1412},[45,144754,70707],{"class":257},[45,144756,51518],{"class":51},[45,144758,144642],{"class":257},[45,144760,536],{"class":93},[45,144762,130466],{"class":51},[45,144764,144649],{"class":267},[45,144766,144767],{"class":47,"line":1695},[45,144768,1648],{"class":51},[45,144770,144771,144773],{"class":47,"line":1700},[45,144772,130451],{"class":2046},[45,144774,15655],{"class":51},[45,144776,144777,144779,144781,144783,144785,144787],{"class":47,"line":1706},[45,144778,70649],{"class":257},[45,144780,51518],{"class":51},[45,144782,654],{"class":257},[45,144784,144670],{"class":93},[45,144786,130466],{"class":51},[45,144788,144675],{"class":267},[45,144790,144791],{"class":47,"line":1711},[45,144792,1648],{"class":51},[10,144794,144795,144796,144799],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23636,144797,144798],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[35,144801,144804],{"className":144802,"code":144803,"language":5270},[5268],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[42,144805,144803],{"__ignoreMap":40},[10,144807,144808],{},"less保存时会自动变成.css文件",[10,144810,144811],{},"好好搞懂上述代码写法",[176,144813,144815],{"id":144814},"_2132-样式导入样式","21.3.2 样式导入样式",[1545,144817],{"style":126459,"src":144818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[176,144820,144822],{"id":144821},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[159,144824,144825],{},[162,144826,144827],{},"准备工作",[1545,144829],{"style":126459,"src":144830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[10,144832,144833,144834],{},"github地址：",[13,144835,144836],{"href":144836,"rel":144837},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[17],[10,144839,144840],{},"下载之后，将index.js文件拖到项目中就可以了",[10,144842,144843,144844],{},"js文件引入到index.html中使用的是",[42,144845,144846],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[159,144848,144849],{"start":125},[162,144850,144851],{},"vscode插件",[1545,144853],{"style":126459,"src":144854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[10,144856,144857],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[10,144859,144860],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1545,144862],{"style":126459,"src":144863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[10,144865,144866],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1545,144868],{"style":126459,"src":144869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[10,144871,144872],{},"修改成75就可以，alt+z为快捷键",[10,144874,144875],{},"index.css：",[35,144877,144878],{"className":126603,"code":144620,"language":126605,"meta":40,"style":40},[42,144879,144880,144884,144890,144904,144908,144914,144928],{"__ignoreMap":40},[45,144881,144882],{"class":47,"line":48},[45,144883,144627],{"class":267},[45,144885,144886,144888],{"class":47,"line":125},[45,144887,50716],{"class":51381},[45,144889,15655],{"class":51},[45,144891,144892,144894,144896,144898,144900,144902],{"class":47,"line":1262},[45,144893,70707],{"class":257},[45,144895,51518],{"class":51},[45,144897,144642],{"class":257},[45,144899,536],{"class":93},[45,144901,130466],{"class":51},[45,144903,144649],{"class":267},[45,144905,144906],{"class":47,"line":1277},[45,144907,1648],{"class":51},[45,144909,144910,144912],{"class":47,"line":1283},[45,144911,130451],{"class":2046},[45,144913,15655],{"class":51},[45,144915,144916,144918,144920,144922,144924,144926],{"class":47,"line":1297},[45,144917,70649],{"class":257},[45,144919,51518],{"class":51},[45,144921,654],{"class":257},[45,144923,144670],{"class":93},[45,144925,130466],{"class":51},[45,144927,144675],{"class":267},[45,144929,144930],{"class":47,"line":1303},[45,144931,1648],{"class":51},[10,144933,144617],{},[35,144935,144936],{"className":126603,"code":127007,"language":126605,"meta":40,"style":40},[42,144937,144938,144944,144956],{"__ignoreMap":40},[45,144939,144940,144942],{"class":47,"line":48},[45,144941,51881],{"class":51381},[45,144943,15655],{"class":51},[45,144945,144946,144948,144950,144952,144954],{"class":47,"line":125},[45,144947,70707],{"class":257},[45,144949,51518],{"class":51},[45,144951,808],{"class":257},[45,144953,51573],{"class":93},[45,144955,1373],{"class":51},[45,144957,144958],{"class":47,"line":1262},[45,144959,1648],{"class":51},[30,144961,144963],{"id":144962},"_214-响应式开发","21.4 响应式开发",[10,144965,144966],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1545,144968],{"style":126459,"src":144969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[10,144971,144972],{},"做法：",[1214,144974,144975,144978],{},[162,144976,144977],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[162,144979,144980],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1545,144982],{"style":126459,"src":144983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[10,144985,144986],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[176,144988,144990],{"id":144989},"_2141-简单代码示范","21.4.1 简单代码示范",[35,144992,144993],{"className":126603,"code":144620,"language":126605,"meta":40,"style":40},[42,144994,144995,144999,145005,145019,145023,145029,145043],{"__ignoreMap":40},[45,144996,144997],{"class":47,"line":48},[45,144998,144627],{"class":267},[45,145000,145001,145003],{"class":47,"line":125},[45,145002,50716],{"class":51381},[45,145004,15655],{"class":51},[45,145006,145007,145009,145011,145013,145015,145017],{"class":47,"line":1262},[45,145008,70707],{"class":257},[45,145010,51518],{"class":51},[45,145012,144642],{"class":257},[45,145014,536],{"class":93},[45,145016,130466],{"class":51},[45,145018,144649],{"class":267},[45,145020,145021],{"class":47,"line":1277},[45,145022,1648],{"class":51},[45,145024,145025,145027],{"class":47,"line":1283},[45,145026,130451],{"class":2046},[45,145028,15655],{"class":51},[45,145030,145031,145033,145035,145037,145039,145041],{"class":47,"line":1297},[45,145032,70649],{"class":257},[45,145034,51518],{"class":51},[45,145036,654],{"class":257},[45,145038,144670],{"class":93},[45,145040,130466],{"class":51},[45,145042,144675],{"class":267},[45,145044,145045],{"class":47,"line":1303},[45,145046,1648],{"class":51},[10,145048,145049],{},"父盒子一般命名为container",[176,145051,145053],{"id":145052},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[10,145055,145056,145057],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[358,145058,145059],{},"使得 Web 开发更加快捷",[1214,145061,145062],{},[162,145063,145064,145065],{},"官网：",[358,145066,145067],{},[13,145068,145069],{"href":145069,"rel":145070},"http:\u002F\u002Fgetbootstrap.com\u002F",[17],[10,145072,145073],{},"可以直接去官网拿现成的东西",[159,145075,145076],{},[162,145077,145078],{},"Bootstrap的使用",[10,145080,145081],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[10,145083,145084],{},"Bootstrap 使用四步曲：",[10,145086,145087,145090],{},[358,145088,145089],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1545,145092],{"style":126459,"src":145093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[10,145095,145096],{},"打开Bootstrap官网，然后下载",[1545,145098],{"style":126459,"src":145099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1545,145101],{"style":126459,"src":145102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[10,145104,145105],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[10,145107,145108],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[10,145110,145111],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1545,145113],{"style":126459,"src":145114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[35,145116,145118],{"className":126603,"code":145117,"language":126605,"meta":40,"style":40},".center {\n  color: red;\n}\n",[42,145119,145120,145126,145136],{"__ignoreMap":40},[45,145121,145122,145124],{"class":47,"line":48},[45,145123,126894],{"class":2046},[45,145125,15655],{"class":51},[45,145127,145128,145130,145132,145134],{"class":47,"line":125},[45,145129,70986],{"class":257},[45,145131,51518],{"class":51},[45,145133,57502],{"class":257},[45,145135,1373],{"class":51},[45,145137,145138],{"class":47,"line":1262},[45,145139,1648],{"class":51},[10,145141,145142,145145],{},[42,145143,145144],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1545,145147],{"style":126459,"src":145148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1545,145150],{"style":126459,"src":145151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1545,145153],{"style":126459,"src":145154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[10,145156,145157],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1545,145159],{"style":126459,"src":145160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[10,145162,145163],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[159,145165,145166],{"start":125},[162,145167,145168],{},"布局容器",[1545,145170],{"style":126459,"src":145171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[10,145173,145174],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[10,145176,145177],{},"container-fluid用于移动式布局比较方便",[159,145179,145180],{"start":1262},[162,145181,145182,145183],{},"bootstrap ",[358,145184,145185],{},"栅格系统原理",[1545,145187],{"style":126459,"src":145188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[159,145190,145191],{"start":1277},[162,145192,145193],{},[358,145194,145195],{},"栅格选项参数",[1545,145197],{"style":126459,"src":145198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[10,145200,145201],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[10,145203,14716],{},[35,145205,145206],{"className":126603,"code":145117,"language":126605,"meta":40,"style":40},[42,145207,145208,145214,145224],{"__ignoreMap":40},[45,145209,145210,145212],{"class":47,"line":48},[45,145211,126894],{"class":2046},[45,145213,15655],{"class":51},[45,145215,145216,145218,145220,145222],{"class":47,"line":125},[45,145217,70986],{"class":257},[45,145219,51518],{"class":51},[45,145221,57502],{"class":257},[45,145223,1373],{"class":51},[45,145225,145226],{"class":47,"line":1262},[45,145227,1648],{"class":51},[10,145229,135646],{},[1545,145231],{"style":126459,"src":145232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[10,145234,145235],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[10,145237,145238],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[10,145240,145241],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[10,145243,145244],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[10,145246,145247],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[10,145249,145250],{},"汇总展示说明：",[35,145252,145253],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},[42,145254,145255,145259,145273,145277],{"__ignoreMap":40},[45,145256,145257],{"class":47,"line":48},[45,145258,130714],{"class":267},[45,145260,145261,145263,145265,145267,145269,145271],{"class":47,"line":125},[45,145262,1117],{"class":51},[45,145264,51692],{"class":51381},[45,145266,53567],{"class":2046},[45,145268,254],{"class":51},[45,145270,130727],{"class":313},[45,145272,51388],{"class":51},[45,145274,145275],{"class":47,"line":1262},[45,145276,130734],{"class":51},[45,145278,145279,145281,145283],{"class":47,"line":1277},[45,145280,51866],{"class":51},[45,145282,51692],{"class":51381},[45,145284,51388],{"class":51},[1545,145286],{"style":126459,"src":145287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[10,145289,145290],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[35,145292,145293],{"className":127350,"code":130707,"language":127352,"meta":40,"style":40},[42,145294,145295,145299,145313,145317],{"__ignoreMap":40},[45,145296,145297],{"class":47,"line":48},[45,145298,130714],{"class":267},[45,145300,145301,145303,145305,145307,145309,145311],{"class":47,"line":125},[45,145302,1117],{"class":51},[45,145304,51692],{"class":51381},[45,145306,53567],{"class":2046},[45,145308,254],{"class":51},[45,145310,130727],{"class":313},[45,145312,51388],{"class":51},[45,145314,145315],{"class":47,"line":1262},[45,145316,130734],{"class":51},[45,145318,145319,145321,145323],{"class":47,"line":1277},[45,145320,51866],{"class":51},[45,145322,51692],{"class":51381},[45,145324,51388],{"class":51},[159,145326,145327],{"start":1283},[162,145328,145329],{},[358,145330,145331],{},"列嵌套",[1545,145333],{"style":126459,"src":145334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[10,145336,145337],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[10,145339,145340],{},"没加row内部这样：",[1545,145342],{"style":126459,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[10,145345,145346],{},"加上row之后内部为：",[1545,145348],{"style":126459,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[159,145351,145352],{"start":1297},[162,145353,145354],{},[358,145355,145356],{},"列偏移",[1545,145358],{"style":126459,"src":145359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[10,145361,145362],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[10,145364,145365],{},"要加偏移量，即偏移份数",[10,145367,145368],{},"偏移的份数=12-两个盒子的份数",[159,145370,145371],{"start":1303},[162,145372,145373],{},[358,145374,145375],{},"列排序",[1545,145377],{"style":126459,"src":145378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[10,145380,145381],{},"pull拉左；push推右",[159,145383,145384],{"start":1394},[162,145385,145386],{},[358,145387,145388],{},"响应式工具",[1545,145390],{"style":126459,"src":145391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[10,145393,145394],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[176,145396,145398],{"id":145397},"_2143-响应式小项目","21.4.3 响应式小项目",[10,145400,145401],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[10,145403,145404],{},"ul {",[10,145406,145407],{},"list-style: none;",[10,145409,145410],{},"margin:0;",[10,145412,145413],{},"padding:0; }",[1545,145415],{"style":126459,"src":145416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1545,145418],{"style":126459,"src":145419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[10,145421,145422],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[10,145424,68970],{},[35,145426,145427],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,145428,145429,145435,145445],{"__ignoreMap":40},[45,145430,145431,145433],{"class":47,"line":48},[45,145432,130451],{"class":2046},[45,145434,15655],{"class":51},[45,145436,145437,145439,145441,145443],{"class":47,"line":125},[45,145438,131083],{"class":257},[45,145440,51518],{"class":51},[45,145442,23819],{"class":257},[45,145444,1373],{"class":51},[45,145446,145447],{"class":47,"line":1262},[45,145448,1648],{"class":51},[10,145450,70534],{},[35,145452,145453],{"className":126603,"code":139273,"language":126605,"meta":40,"style":40},[42,145454,145455,145461,145471],{"__ignoreMap":40},[45,145456,145457,145459],{"class":47,"line":48},[45,145458,130451],{"class":2046},[45,145460,15655],{"class":51},[45,145462,145463,145465,145467,145469],{"class":47,"line":125},[45,145464,131083],{"class":257},[45,145466,51518],{"class":51},[45,145468,23819],{"class":257},[45,145470,1373],{"class":51},[45,145472,145473],{"class":47,"line":1262},[45,145474,1648],{"class":51},[30,145476,145478],{"id":145477},"_215-swiper-插件使用","21.5 swiper 插件使用",[1214,145480,145481,145484,145487],{},[162,145482,145483],{},"下载需要的css和js文件html页面中 引入相关文件",[162,145485,145486],{},"官网找到类似案例，复制html结构，css样式 js 语法",[162,145488,145489],{},"根据需求定制修改模块",[1545,145491],{"style":126459,"src":145492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[10,145494,145495],{},"解压后将这两部分放到项目中",[1545,145497],{"style":126459,"src":145498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[10,145500,145501],{},"这个插件可以帮助我们实现轮播图效果",[10,145503,145504],{},"用法：",[1545,145506],{"style":126459,"src":145507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[10,145509,145510],{},"找到自己喜欢的",[1545,145512],{"style":126459,"src":145513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[10,145515,145516],{},"右键，查看网页源代码",[1545,145518],{"style":126459,"src":145519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[10,145521,145522],{},"复制人家的结构内容",[10,145524,145525],{},"然后去看API文档：",[1545,145527],{"style":126459,"src":145528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[10,145530,145531],{},"可以看看如何修改样式",[10,145533,145534],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[121,145536,145537],{},"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":40,"searchDepth":125,"depth":125,"links":145539},[145540,145545,145549,145554,145559],{"id":144340,"depth":125,"text":144341,"children":145541},[145542,145543,145544],{"id":144344,"depth":1262,"text":144345},{"id":144354,"depth":1262,"text":144355},{"id":144449,"depth":1262,"text":144450},{"id":144464,"depth":125,"text":144465,"children":145546},[145547,145548],{"id":144486,"depth":1262,"text":144487},{"id":144502,"depth":1262,"text":144503},{"id":144577,"depth":125,"text":144578,"children":145550},[145551,145552,145553],{"id":144590,"depth":1262,"text":144591},{"id":144814,"depth":1262,"text":144815},{"id":144821,"depth":1262,"text":144822},{"id":144962,"depth":125,"text":144963,"children":145555},[145556,145557,145558],{"id":144989,"depth":1262,"text":144990},{"id":145052,"depth":1262,"text":145053},{"id":145397,"depth":1262,"text":145398},{"id":145477,"depth":125,"text":145478},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144332,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145566,"title":145567,"body":145568,"description":130,"extension":131,"meta":145788,"navigation":133,"path":145789,"seo":145790,"stem":145791,"__hash__":145792},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145569,"toc":145784},[145570,145573,145577,145580,145595,145600,145603,145608,145643,145648,145660,145665,145678,145683,145700,145705,145725,145730,145748,145751,145754,145757,145760,145764,145767,145770,145773,145776,145779,145782],[20,145571,145567],{"id":145572},"_22-代码提交与新型相对单位",[30,145574,145576],{"id":145575},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[10,145578,145579],{},"法1：",[159,145581,145582,145589,145592],{},[162,145583,145584,145585],{},"登录网站注册：",[13,145586,145587],{"href":145587,"rel":145588},"https:\u002F\u002Fgitee.com\u002F",[17],[162,145590,145591],{},"码云创建新的仓库",[162,145593,145594],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1214,145596,145597],{},[162,145598,145599],{},"在网站根目录右键-- Git Bash Here",[1545,145601],{"style":126459,"src":145602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1214,145604,145605],{},[162,145606,145607],{},"如果是第一次利用git提交，请配置好全局选项",[35,145609,145611],{"className":117347,"code":145610,"language":117349,"meta":40,"style":40},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[42,145612,145613,145629],{"__ignoreMap":40},[45,145614,145615,145618,145620,145623,145626],{"class":47,"line":48},[45,145616,145617],{"class":2046},"git",[45,145619,119770],{"class":313},[45,145621,145622],{"class":257}," --global",[45,145624,145625],{"class":313}," user.name",[45,145627,145628],{"class":313}," \"你的名字\"\n",[45,145630,145631,145633,145635,145637,145640],{"class":47,"line":125},[45,145632,145617],{"class":2046},[45,145634,119770],{"class":313},[45,145636,145622],{"class":257},[45,145638,145639],{"class":313}," user.email",[45,145641,145642],{"class":313}," \"你的邮箱\"\n",[1214,145644,145645],{},[162,145646,145647],{},"初始化仓库",[35,145649,145651],{"className":117347,"code":145650,"language":117349,"meta":40,"style":40},"git init\n",[42,145652,145653],{"__ignoreMap":40},[45,145654,145655,145657],{"class":47,"line":48},[45,145656,145617],{"class":2046},[45,145658,145659],{"class":313}," init\n",[1214,145661,145662],{},[162,145663,145664],{},"把本地文件放到暂存区",[35,145666,145668],{"className":117347,"code":145667,"language":117349,"meta":40,"style":40},"git add .\n",[42,145669,145670],{"__ignoreMap":40},[45,145671,145672,145674,145676],{"class":47,"line":48},[45,145673,145617],{"class":2046},[45,145675,5292],{"class":313},[45,145677,28824],{"class":313},[1214,145679,145680],{},[162,145681,145682],{},"把本地文件放到本地仓库里面",[35,145684,145686],{"className":117347,"code":145685,"language":117349,"meta":40,"style":40},"git commit -m \"first commit\"\n",[42,145687,145688],{"__ignoreMap":40},[45,145689,145690,145692,145695,145697],{"class":47,"line":48},[45,145691,145617],{"class":2046},[45,145693,145694],{"class":313}," commit",[45,145696,100933],{"class":257},[45,145698,145699],{"class":313}," \"first commit\"\n",[1214,145701,145702],{},[162,145703,145704],{},"链接远程仓库",[35,145706,145708],{"className":117347,"code":145707,"language":117349,"meta":40,"style":40},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[42,145709,145710],{"__ignoreMap":40},[45,145711,145712,145714,145717,145719,145722],{"class":47,"line":48},[45,145713,145617],{"class":2046},[45,145715,145716],{"class":313}," remote",[45,145718,5292],{"class":313},[45,145720,145721],{"class":313}," origin",[45,145723,145724],{"class":313}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1214,145726,145727],{},[162,145728,145729],{},"把本地仓库的文件推送到远程仓库 push",[35,145731,145733],{"className":117347,"code":145732,"language":117349,"meta":40,"style":40},"git push -u origin master\n",[42,145734,145735],{"__ignoreMap":40},[45,145736,145737,145739,145741,145743,145745],{"class":47,"line":48},[45,145738,145617],{"class":2046},[45,145740,29099],{"class":313},[45,145742,28373],{"class":257},[45,145744,145721],{"class":313},[45,145746,145747],{"class":313}," master\n",[1545,145749],{"style":126459,"src":145750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[10,145752,145753],{},"上方方法暂未实现，后边学完git后在整",[10,145755,145756],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1545,145758],{"style":126459,"src":145759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[30,145761,145763],{"id":145762},"_222-新型相对单位","22.2 新型相对单位",[1545,145765],{"style":126459,"src":145766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1545,145768],{"style":126459,"src":145769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[10,145771,145772],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[10,145774,145775],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1545,145777],{"style":126459,"src":145778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[10,145780,145781],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[121,145783,24040],{},{"title":40,"searchDepth":125,"depth":125,"links":145785},[145786,145787],{"id":145575,"depth":125,"text":145576},{"id":145762,"depth":125,"text":145763},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145567,"description":130},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145794,"title":145795,"body":145796,"description":145800,"extension":131,"meta":145801,"navigation":133,"path":145802,"seo":145803,"stem":145804,"__hash__":145805},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145797,"toc":145798},[],{"title":40,"searchDepth":125,"depth":125,"links":145799},[],"自己正经开始学编程的第一门语言！",{"category":92920},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145795,"description":145800},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145807,"title":145808,"body":145809,"description":130,"extension":131,"meta":146956,"navigation":133,"path":146957,"seo":146958,"stem":146959,"__hash__":146960},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145810,"toc":146932},[145811,145814,145818,145821,145824,145849,145852,145858,145862,145865,145892,145895,145935,145938,145950,145953,145959,145963,145967,145994,146011,146018,146022,146025,146051,146054,146058,146061,146101,146104,146121,146127,146131,146136,146180,146183,146201,146204,146272,146276,146283,146286,146301,146304,146313,146316,146327,146330,146339,146342,146359,146362,146377,146381,146385,146388,146390,146410,146414,146417,146420,146431,146434,146440,146444,146450,146477,146480,146492,146495,146506,146509,146515,146519,146525,146575,146578,146620,146623,146656,146659,146693,146697,146700,146720,146723,146759,146762,146775,146779,146783,146789,146792,146805,146809,146812,146818,146821,146825,146828,146831,146880,146884,146900,146906,146913,146919,146929],[20,145812,145808],{"id":145813},"_1-python环境与第一个程序",[30,145815,145817],{"id":145816},"_11-什么是python","1.1 什么是Python",[10,145819,145820],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[10,145822,145823],{},"理解 Python 时抓住三个关键词：",[159,145825,145826,145829,145832],{},[162,145827,145828],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[162,145830,145831],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[162,145833,145834,145835,421,145838,421,145841,421,145844,421,145846,28468],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[42,145836,145837],{},"os",[42,145839,145840],{},"sys",[42,145842,145843],{},"json",[42,145845,57941],{},[42,145847,145848],{},"datetime",[10,145850,145851],{},"Python 程序的运行链路：",[35,145853,145856],{"className":145854,"code":145855,"language":5270,"meta":40},[5268],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[42,145857,145855],{"__ignoreMap":40},[30,145859,145861],{"id":145860},"_12-python解释器","1.2 Python解释器",[10,145863,145864],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[35,145866,145868],{"className":23905,"code":145867,"language":23907,"meta":40,"style":40},"python --version\npython3 --version\npython\npython3\n",[42,145869,145870,145876,145882,145887],{"__ignoreMap":40},[45,145871,145872,145874],{"class":47,"line":48},[45,145873,39],{"class":2046},[45,145875,26376],{"class":257},[45,145877,145878,145880],{"class":47,"line":125},[45,145879,100930],{"class":2046},[45,145881,26376],{"class":257},[45,145883,145884],{"class":47,"line":1262},[45,145885,145886],{"class":2046},"python\n",[45,145888,145889],{"class":47,"line":1277},[45,145890,145891],{"class":2046},"python3\n",[10,145893,145894],{},"进入交互模式后，可以直接输入表达式：",[35,145896,145898],{"className":37,"code":145897,"language":39,"meta":40,"style":40},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[42,145899,145900,145911,145916,145930],{"__ignoreMap":40},[45,145901,145902,145905,145907,145909],{"class":47,"line":48},[45,145903,145904],{"class":93},">>>",[45,145906,25201],{"class":257},[45,145908,45647],{"class":93},[45,145910,47804],{"class":257},[45,145912,145913],{"class":47,"line":125},[45,145914,145915],{"class":257},"3\n",[45,145917,145918,145920,145923,145925,145928],{"class":47,"line":1262},[45,145919,145904],{"class":93},[45,145921,145922],{"class":257}," print",[45,145924,209],{"class":51},[45,145926,145927],{"class":313},"\"hello python\"",[45,145929,215],{"class":51},[45,145931,145932],{"class":47,"line":1277},[45,145933,145934],{"class":51},"hello python\n",[10,145936,145937],{},"退出交互模式：",[35,145939,145941],{"className":37,"code":145940,"language":39,"meta":40,"style":40},"exit()\n",[42,145942,145943],{"__ignoreMap":40},[45,145944,145945,145948],{"class":47,"line":48},[45,145946,145947],{"class":257},"exit",[45,145949,2059],{"class":51},[10,145951,145952],{},"或使用快捷键：",[35,145954,145957],{"className":145955,"code":145956,"language":5270,"meta":40},[5268],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[42,145958,145956],{"__ignoreMap":40},[30,145960,145962],{"id":145961},"_13-安装python","1.3 安装Python",[176,145964,145966],{"id":145965},"_131-windows安装","1.3.1 Windows安装",[159,145968,145969,145976,145979,145985,145991],{},[162,145970,145971,145972],{},"打开 Python 官网：",[13,145973,145974],{"href":145974,"rel":145975},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[17],[162,145977,145978],{},"下载 Windows Installer。",[162,145980,145981,145982,28468],{},"安装时勾选 ",[42,145983,145984],{},"Add Python to PATH",[162,145986,145987,145988,28468],{},"点击 ",[42,145989,145990],{},"Install Now",[162,145992,145993],{},"安装完成后打开命令提示符验证：",[35,145995,145997],{"className":23905,"code":145996,"language":23907,"meta":40,"style":40},"python --version\npip --version\n",[42,145998,145999,146005],{"__ignoreMap":40},[45,146000,146001,146003],{"class":47,"line":48},[45,146002,39],{"class":2046},[45,146004,26376],{"class":257},[45,146006,146007,146009],{"class":47,"line":125},[45,146008,23914],{"class":2046},[45,146010,26376],{"class":257},[10,146012,146013,146014,146017],{},"如果提示 ",[42,146015,146016],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[176,146019,146021],{"id":146020},"_132-macos安装","1.3.2 macOS安装",[10,146023,146024],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[35,146026,146028],{"className":23905,"code":146027,"language":23907,"meta":40,"style":40},"brew install python\npython3 --version\npip3 --version\n",[42,146029,146030,146039,146045],{"__ignoreMap":40},[45,146031,146032,146035,146037],{"class":47,"line":48},[45,146033,146034],{"class":2046},"brew",[45,146036,23917],{"class":313},[45,146038,124369],{"class":313},[45,146040,146041,146043],{"class":47,"line":125},[45,146042,100930],{"class":2046},[45,146044,26376],{"class":257},[45,146046,146047,146049],{"class":47,"line":1262},[45,146048,119751],{"class":2046},[45,146050,26376],{"class":257},[10,146052,146053],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[176,146055,146057],{"id":146056},"_133-linux安装","1.3.3 Linux安装",[10,146059,146060],{},"Ubuntu\u002FDebian：",[35,146062,146064],{"className":23905,"code":146063,"language":23907,"meta":40,"style":40},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[42,146065,146066,146074,146089,146095],{"__ignoreMap":40},[45,146067,146068,146070,146072],{"class":47,"line":48},[45,146069,24659],{"class":2046},[45,146071,117368],{"class":313},[45,146073,26325],{"class":313},[45,146075,146076,146078,146080,146082,146084,146086],{"class":47,"line":125},[45,146077,24659],{"class":2046},[45,146079,117368],{"class":313},[45,146081,23917],{"class":313},[45,146083,104454],{"class":313},[45,146085,100849],{"class":313},[45,146087,146088],{"class":313}," python3-venv\n",[45,146090,146091,146093],{"class":47,"line":1262},[45,146092,100930],{"class":2046},[45,146094,26376],{"class":257},[45,146096,146097,146099],{"class":47,"line":1277},[45,146098,119751],{"class":2046},[45,146100,26376],{"class":257},[10,146102,146103],{},"Fedora：",[35,146105,146107],{"className":23905,"code":146106,"language":23907,"meta":40,"style":40},"sudo dnf install python3 python3-pip\n",[42,146108,146109],{"__ignoreMap":40},[45,146110,146111,146113,146115,146117,146119],{"class":47,"line":48},[45,146112,24659],{"class":2046},[45,146114,26398],{"class":313},[45,146116,23917],{"class":313},[45,146118,104454],{"class":313},[45,146120,119816],{"class":313},[10,146122,146123,146124,146126],{},"Linux 上通常使用 ",[42,146125,100930],{}," 命令，避免和系统旧版本 Python 冲突。",[30,146128,146130],{"id":146129},"_14-pip包管理器","1.4 pip包管理器",[10,146132,146133,146135],{},[42,146134,23914],{}," 用来安装第三方库。",[35,146137,146139],{"className":23905,"code":146138,"language":23907,"meta":40,"style":40},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[42,146140,146141,146150,146159,146167,146173],{"__ignoreMap":40},[45,146142,146143,146145,146147],{"class":47,"line":48},[45,146144,23914],{"class":2046},[45,146146,23917],{"class":313},[45,146148,146149],{"class":313}," requests\n",[45,146151,146152,146154,146157],{"class":47,"line":125},[45,146153,23914],{"class":2046},[45,146155,146156],{"class":313}," uninstall",[45,146158,146149],{"class":313},[45,146160,146161,146163,146165],{"class":47,"line":1262},[45,146162,23914],{"class":2046},[45,146164,117625],{"class":313},[45,146166,146149],{"class":313},[45,146168,146169,146171],{"class":47,"line":1277},[45,146170,23914],{"class":2046},[45,146172,119006],{"class":313},[45,146174,146175,146177],{"class":47,"line":1283},[45,146176,23914],{"class":2046},[45,146178,146179],{"class":313}," freeze\n",[10,146181,146182],{},"国内网络较慢时可以临时使用镜像：",[35,146184,146186],{"className":23905,"code":146185,"language":23907,"meta":40,"style":40},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[42,146187,146188],{"__ignoreMap":40},[45,146189,146190,146192,146194,146197,146199],{"class":47,"line":48},[45,146191,23914],{"class":2046},[45,146193,23917],{"class":313},[45,146195,146196],{"class":313}," requests",[45,146198,26513],{"class":257},[45,146200,119779],{"class":313},[10,146202,146203],{},"常见第三方库：",[346,146205,146206,146215],{},[349,146207,146208],{},[352,146209,146210,146213],{},[355,146211,146212],{},"库",[355,146214,102747],{},[393,146216,146217,146225,146232,146240,146248,146256,146264],{},[352,146218,146219,146222],{},[398,146220,146221],{},"requests",[398,146223,146224],{},"网络请求",[352,146226,146227,146229],{},[398,146228,100677],{},[398,146230,146231],{},"数值计算",[352,146233,146234,146237],{},[398,146235,146236],{},"pandas",[398,146238,146239],{},"表格数据处理",[352,146241,146242,146245],{},[398,146243,146244],{},"matplotlib",[398,146246,146247],{},"绘图",[352,146249,146250,146253],{},[398,146251,146252],{},"pyecharts",[398,146254,146255],{},"ECharts 图表",[352,146257,146258,146261],{},[398,146259,146260],{},"flask",[398,146262,146263],{},"Web 后端",[352,146265,146266,146269],{},[398,146267,146268],{},"pytest",[398,146270,146271],{},"自动化测试",[30,146273,146275],{"id":146274},"_15-虚拟环境","1.5 虚拟环境",[10,146277,146278,146279,146282],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[42,146280,146281],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[10,146284,146285],{},"创建虚拟环境：",[35,146287,146289],{"className":23905,"code":146288,"language":23907,"meta":40,"style":40},"python -m venv .venv\n",[42,146290,146291],{"__ignoreMap":40},[45,146292,146293,146295,146297,146299],{"class":47,"line":48},[45,146294,39],{"class":2046},[45,146296,100933],{"class":257},[45,146298,100936],{"class":313},[45,146300,100939],{"class":313},[10,146302,146303],{},"Windows 激活：",[35,146305,146307],{"className":23905,"code":146306,"language":23907,"meta":40,"style":40},".venv\\Scripts\\activate\n",[42,146308,146309],{"__ignoreMap":40},[45,146310,146311],{"class":47,"line":48},[45,146312,146306],{"class":2046},[10,146314,146315],{},"macOS\u002FLinux 激活：",[35,146317,146319],{"className":23905,"code":146318,"language":23907,"meta":40,"style":40},"source .venv\u002Fbin\u002Factivate\n",[42,146320,146321],{"__ignoreMap":40},[45,146322,146323,146325],{"class":47,"line":48},[45,146324,100944],{"class":257},[45,146326,100947],{"class":313},[10,146328,146329],{},"退出虚拟环境：",[35,146331,146333],{"className":23905,"code":146332,"language":23907,"meta":40,"style":40},"deactivate\n",[42,146334,146335],{"__ignoreMap":40},[45,146336,146337],{"class":47,"line":48},[45,146338,146332],{"class":2046},[10,146340,146341],{},"保存依赖：",[35,146343,146345],{"className":23905,"code":146344,"language":23907,"meta":40,"style":40},"pip freeze > requirements.txt\n",[42,146346,146347],{"__ignoreMap":40},[45,146348,146349,146351,146354,146356],{"class":47,"line":48},[45,146350,23914],{"class":2046},[45,146352,146353],{"class":313}," freeze",[45,146355,26305],{"class":93},[45,146357,146358],{"class":313}," requirements.txt\n",[10,146360,146361],{},"安装依赖：",[35,146363,146365],{"className":23905,"code":146364,"language":23907,"meta":40,"style":40},"pip install -r requirements.txt\n",[42,146366,146367],{"__ignoreMap":40},[45,146368,146369,146371,146373,146375],{"class":47,"line":48},[45,146370,23914],{"class":2046},[45,146372,23917],{"class":313},[45,146374,119690],{"class":257},[45,146376,146358],{"class":313},[30,146378,146380],{"id":146379},"_16-开发工具","1.6 开发工具",[176,146382,146384],{"id":146383},"_161-pycharm","1.6.1 PyCharm",[10,146386,146387],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[10,146389,122113],{},[159,146391,146392,146395,146398,146404,146407],{},[162,146393,146394],{},"New Project：创建项目。",[162,146396,146397],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[162,146399,146400,146401,126034],{},"New Python File：创建 ",[42,146402,146403],{},".py",[162,146405,146406],{},"Run：运行当前文件。",[162,146408,146409],{},"Debug：断点调试。",[176,146411,146413],{"id":146412},"_162-vs-code","1.6.2 VS Code",[10,146415,146416],{},"VS Code 轻量，适合后续多语言开发。",[10,146418,146419],{},"建议安装插件：",[159,146421,146422,146425,146428],{},[162,146423,146424],{},"Python。",[162,146426,146427],{},"Pylance。",[162,146429,146430],{},"Jupyter。",[10,146432,146433],{},"选择解释器：",[35,146435,146438],{"className":146436,"code":146437,"language":5270,"meta":40},[5268],"Ctrl + Shift + P -> Python: Select Interpreter\n",[42,146439,146437],{"__ignoreMap":40},[30,146441,146443],{"id":146442},"_17-第一个python程序","1.7 第一个Python程序",[10,146445,146446,146447,24701],{},"创建文件 ",[42,146448,146449],{},"hello.py",[35,146451,146453],{"className":37,"code":146452,"language":39,"meta":40,"style":40},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[42,146454,146455,146466],{"__ignoreMap":40},[45,146456,146457,146459,146461,146464],{"class":47,"line":48},[45,146458,30496],{"class":257},[45,146460,209],{"class":51},[45,146462,146463],{"class":313},"\"Hello World\"",[45,146465,215],{"class":51},[45,146467,146468,146470,146472,146475],{"class":47,"line":125},[45,146469,30496],{"class":257},[45,146471,209],{"class":51},[45,146473,146474],{"class":313},"\"你好，Python\"",[45,146476,215],{"class":51},[10,146478,146479],{},"在终端运行：",[35,146481,146483],{"className":23905,"code":146482,"language":23907,"meta":40,"style":40},"python hello.py\n",[42,146484,146485],{"__ignoreMap":40},[45,146486,146487,146489],{"class":47,"line":48},[45,146488,39],{"class":2046},[45,146490,146491],{"class":313}," hello.py\n",[10,146493,146494],{},"或：",[35,146496,146498],{"className":23905,"code":146497,"language":23907,"meta":40,"style":40},"python3 hello.py\n",[42,146499,146500],{"__ignoreMap":40},[45,146501,146502,146504],{"class":47,"line":48},[45,146503,100930],{"class":2046},[45,146505,146491],{"class":313},[10,146507,146508],{},"输出：",[35,146510,146513],{"className":146511,"code":146512,"language":5270,"meta":40},[5268],"Hello World\n你好，Python\n",[42,146514,146512],{"__ignoreMap":40},[30,146516,146518],{"id":146517},"_18-print函数","1.8 print函数",[10,146520,146521,146524],{},[42,146522,146523],{},"print()"," 用来输出内容。",[35,146526,146528],{"className":37,"code":146527,"language":39,"meta":40,"style":40},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[42,146529,146530,146540,146550,146560],{"__ignoreMap":40},[45,146531,146532,146534,146536,146538],{"class":47,"line":48},[45,146533,30496],{"class":257},[45,146535,209],{"class":51},[45,146537,5927],{"class":313},[45,146539,215],{"class":51},[45,146541,146542,146544,146546,146548],{"class":47,"line":125},[45,146543,30496],{"class":257},[45,146545,209],{"class":51},[45,146547,519],{"class":257},[45,146549,215],{"class":51},[45,146551,146552,146554,146556,146558],{"class":47,"line":1262},[45,146553,30496],{"class":257},[45,146555,209],{"class":51},[45,146557,258],{"class":257},[45,146559,215],{"class":51},[45,146561,146562,146564,146566,146569,146571,146573],{"class":47,"line":1277},[45,146563,30496],{"class":257},[45,146565,209],{"class":51},[45,146567,146568],{"class":313},"\"年龄:\"",[45,146570,12518],{"class":51},[45,146572,857],{"class":257},[45,146574,215],{"class":51},[10,146576,146577],{},"多个内容用逗号隔开，默认中间加空格：",[35,146579,146581],{"className":37,"code":146580,"language":39,"meta":40,"style":40},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[42,146582,146583,146593,146603],{"__ignoreMap":40},[45,146584,146585,146588,146590],{"class":47,"line":48},[45,146586,146587],{"class":51},"name ",[45,146589,254],{"class":93},[45,146591,146592],{"class":313}," \"张三\"\n",[45,146594,146595,146598,146600],{"class":47,"line":125},[45,146596,146597],{"class":51},"age ",[45,146599,254],{"class":93},[45,146601,146602],{"class":257}," 18\n",[45,146604,146605,146607,146609,146612,146615,146617],{"class":47,"line":1262},[45,146606,30496],{"class":257},[45,146608,209],{"class":51},[45,146610,146611],{"class":313},"\"姓名:\"",[45,146613,146614],{"class":51},", name, ",[45,146616,146568],{"class":313},[45,146618,146619],{"class":51},", age)\n",[10,146621,146622],{},"修改分隔符：",[35,146624,146626],{"className":37,"code":146625,"language":39,"meta":40,"style":40},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[42,146627,146628],{"__ignoreMap":40},[45,146629,146630,146632,146634,146637,146639,146641,146643,146645,146647,146650,146652,146654],{"class":47,"line":48},[45,146631,30496],{"class":257},[45,146633,209],{"class":51},[45,146635,146636],{"class":313},"\"2024\"",[45,146638,12518],{"class":51},[45,146640,54397],{"class":313},[45,146642,12518],{"class":51},[45,146644,54397],{"class":313},[45,146646,12518],{"class":51},[45,146648,146649],{"class":5299},"sep",[45,146651,254],{"class":93},[45,146653,32564],{"class":313},[45,146655,215],{"class":51},[10,146657,146658],{},"修改结尾符：",[35,146660,146662],{"className":37,"code":146661,"language":39,"meta":40,"style":40},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[42,146663,146664,146682],{"__ignoreMap":40},[45,146665,146666,146668,146670,146672,146674,146676,146678,146680],{"class":47,"line":48},[45,146667,30496],{"class":257},[45,146669,209],{"class":51},[45,146671,5927],{"class":313},[45,146673,12518],{"class":51},[45,146675,45882],{"class":5299},[45,146677,254],{"class":93},[45,146679,4442],{"class":313},[45,146681,215],{"class":51},[45,146683,146684,146686,146688,146691],{"class":47,"line":125},[45,146685,30496],{"class":257},[45,146687,209],{"class":51},[45,146689,146690],{"class":313},"\"python\"",[45,146692,215],{"class":51},[30,146694,146696],{"id":146695},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[10,146698,146699],{},"交互运行适合临时验证：",[35,146701,146703],{"className":37,"code":146702,"language":39,"meta":40,"style":40},">>> 10 * 3\n30\n",[42,146704,146705,146715],{"__ignoreMap":40},[45,146706,146707,146709,146711,146713],{"class":47,"line":48},[45,146708,145904],{"class":93},[45,146710,2121],{"class":257},[45,146712,6601],{"class":93},[45,146714,120087],{"class":257},[45,146716,146717],{"class":47,"line":125},[45,146718,146719],{"class":257},"30\n",[10,146721,146722],{},"脚本运行适合保存程序：",[35,146724,146726],{"className":37,"code":146725,"language":39,"meta":40,"style":40},"price = 8\ncount = 5\nprint(price * count)\n",[42,146727,146728,146738,146747],{"__ignoreMap":40},[45,146729,146730,146733,146735],{"class":47,"line":48},[45,146731,146732],{"class":51},"price ",[45,146734,254],{"class":93},[45,146736,146737],{"class":257}," 8\n",[45,146739,146740,146743,146745],{"class":47,"line":125},[45,146741,146742],{"class":51},"count ",[45,146744,254],{"class":93},[45,146746,54508],{"class":257},[45,146748,146749,146751,146754,146756],{"class":47,"line":1262},[45,146750,30496],{"class":257},[45,146752,146753],{"class":51},"(price ",[45,146755,663],{"class":93},[45,146757,146758],{"class":51}," count)\n",[10,146760,146761],{},"实际学习中推荐：",[159,146763,146764,146767,146772],{},[162,146765,146766],{},"临时试一个语法，用交互模式。",[162,146768,146769,146770,126034],{},"写完整练习，用 ",[42,146771,146403],{},[162,146773,146774],{},"写项目，用独立目录和虚拟环境。",[30,146776,146778],{"id":146777},"_110-常见错误","1.10 常见错误",[176,146780,146782],{"id":146781},"_1101-命令找不到","1.10.1 命令找不到",[35,146784,146787],{"className":146785,"code":146786,"language":5270,"meta":40},[5268],"python: command not found\n",[42,146788,146786],{"__ignoreMap":40},[10,146790,146791],{},"原因：",[159,146793,146794,146797,146800],{},[162,146795,146796],{},"没安装 Python。",[162,146798,146799],{},"PATH 没配置。",[162,146801,146802,146803,28468],{},"Linux\u002FmacOS 应该使用 ",[42,146804,100930],{},[176,146806,146808],{"id":146807},"_1102-文件名冲突","1.10.2 文件名冲突",[10,146810,146811],{},"不要把文件命名为：",[35,146813,146816],{"className":146814,"code":146815,"language":5270,"meta":40},[5268],"random.py\njson.py\ntime.py\nrequests.py\n",[42,146817,146815],{"__ignoreMap":40},[10,146819,146820],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[176,146822,146824],{"id":146823},"_1103-中文乱码","1.10.3 中文乱码",[10,146826,146827],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[10,146829,146830],{},"如果读写文件出现乱码，要明确指定编码：",[35,146832,146834],{"className":37,"code":146833,"language":39,"meta":40,"style":40},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[42,146835,146836,146870],{"__ignoreMap":40},[45,146837,146838,146840,146843,146845,146848,146850,146853,146855,146858,146860,146863,146865,146867],{"class":47,"line":48},[45,146839,107884],{"class":93},[45,146841,146842],{"class":257}," open",[45,146844,209],{"class":51},[45,146846,146847],{"class":313},"\"data.txt\"",[45,146849,12518],{"class":51},[45,146851,146852],{"class":313},"\"r\"",[45,146854,12518],{"class":51},[45,146856,146857],{"class":5299},"encoding",[45,146859,254],{"class":93},[45,146861,146862],{"class":313},"\"utf-8\"",[45,146864,13797],{"class":51},[45,146866,31464],{"class":93},[45,146868,146869],{"class":51}," f:\n",[45,146871,146872,146875,146877],{"class":47,"line":125},[45,146873,146874],{"class":51},"    content ",[45,146876,254],{"class":93},[45,146878,146879],{"class":51}," f.read()\n",[30,146881,146883],{"id":146882},"_111-本章练习","1.11 本章练习",[159,146885,146886,146889,146895],{},[162,146887,146888],{},"安装 Python，并在终端输出版本号。",[162,146890,146891,146892,146894],{},"新建 ",[42,146893,146449],{},"，输出自己的姓名、年龄、学习目标。",[162,146896,104417,146897,146899],{},[42,146898,146523],{}," 输出下面格式：",[35,146901,146904],{"className":146902,"code":146903,"language":5270,"meta":40},[5268],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[42,146905,146903],{"__ignoreMap":40},[159,146907,146908],{"start":1277},[162,146909,104417,146910,146912],{},[42,146911,146649],{}," 输出日期：",[35,146914,146917],{"className":146915,"code":146916,"language":5270,"meta":40},[5268],"2024-10-10\n",[42,146918,146916],{"__ignoreMap":40},[159,146920,146921],{"start":1283},[162,146922,104417,146923,146925,146926,146928],{},[42,146924,45882],{}," 让两次 ",[42,146927,146523],{}," 输出在同一行。",[121,146930,146931],{},"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":40,"searchDepth":125,"depth":125,"links":146933},[146934,146935,146936,146941,146942,146943,146947,146948,146949,146950,146955],{"id":145816,"depth":125,"text":145817},{"id":145860,"depth":125,"text":145861},{"id":145961,"depth":125,"text":145962,"children":146937},[146938,146939,146940],{"id":145965,"depth":1262,"text":145966},{"id":146020,"depth":1262,"text":146021},{"id":146056,"depth":1262,"text":146057},{"id":146129,"depth":125,"text":146130},{"id":146274,"depth":125,"text":146275},{"id":146379,"depth":125,"text":146380,"children":146944},[146945,146946],{"id":146383,"depth":1262,"text":146384},{"id":146412,"depth":1262,"text":146413},{"id":146442,"depth":125,"text":146443},{"id":146517,"depth":125,"text":146518},{"id":146695,"depth":125,"text":146696},{"id":146777,"depth":125,"text":146778,"children":146951},[146952,146953,146954],{"id":146781,"depth":1262,"text":146782},{"id":146807,"depth":1262,"text":146808},{"id":146823,"depth":1262,"text":146824},{"id":146882,"depth":125,"text":146883},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145808,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146962,"title":146963,"body":146964,"description":130,"extension":131,"meta":149368,"navigation":133,"path":149369,"seo":149370,"stem":149371,"__hash__":149372},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146965,"toc":149353},[146966,146969,146973,146976,146979,146996,146999,147041,147044,147048,147051,147054,147091,147094,147128,147131,147223,147227,147241,147244,147271,147274,147278,147381,147388,147391,147408,147412,147419,147608,147611,147684,147688,147691,147775,147778,147810,147814,148018,148021,148025,148031,148133,148136,148392,148396,148399,148402,148416,148418,148604,148608,148970,148976,148980,148983,149107,149110,149289,149292,149296,149329,149333,149350],[20,146967,146963],{"id":146968},"_10-json与pyecharts折线图",[30,146970,146972],{"id":146971},"_101-数据可视化","10.1 数据可视化",[10,146974,146975],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[10,146977,146978],{},"常见图表：",[159,146980,146981,146984,146987,146990,146993],{},[162,146982,146983],{},"折线图：看趋势。",[162,146985,146986],{},"柱状图：看分类对比。",[162,146988,146989],{},"饼图：看占比。",[162,146991,146992],{},"地图：看地域分布。",[162,146994,146995],{},"散点图：看两个变量之间的关系。",[10,146997,146998],{},"Python 可视化常用库：",[346,147000,147001,147009],{},[349,147002,147003],{},[352,147004,147005,147007],{},[355,147006,146212],{},[355,147008,23823],{},[393,147010,147011,147018,147026,147033],{},[352,147012,147013,147015],{},[398,147014,146244],{},[398,147016,147017],{},"基础、经典、可定制",[352,147019,147020,147023],{},[398,147021,147022],{},"seaborn",[398,147024,147025],{},"统计图表更美观",[352,147027,147028,147030],{},[398,147029,146252],{},[398,147031,147032],{},"生成交互式网页图表",[352,147034,147035,147038],{},[398,147036,147037],{},"plotly",[398,147039,147040],{},"交互图表能力强",[10,147042,147043],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[30,147045,147047],{"id":147046},"_102-json回顾","10.2 JSON回顾",[10,147049,147050],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[10,147052,147053],{},"Python 字典：",[35,147055,147057],{"className":37,"code":147056,"language":39,"meta":40,"style":40},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[42,147058,147059,147067,147078,147087],{"__ignoreMap":40},[45,147060,147061,147063,147065],{"class":47,"line":48},[45,147062,101709],{"class":51},[45,147064,254],{"class":93},[45,147066,15655],{"class":51},[45,147068,147069,147072,147074,147076],{"class":47,"line":125},[45,147070,147071],{"class":313},"    \"name\"",[45,147073,51518],{"class":51},[45,147075,69350],{"class":313},[45,147077,31547],{"class":51},[45,147079,147080,147083,147085],{"class":47,"line":1262},[45,147081,147082],{"class":313},"    \"value\"",[45,147084,51518],{"class":51},[45,147086,97509],{"class":257},[45,147088,147089],{"class":47,"line":1277},[45,147090,1648],{"class":51},[10,147092,147093],{},"JSON 字符串：",[35,147095,147098],{"className":147096,"code":147097,"language":145843,"meta":40,"style":40},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[42,147099,147100,147104,147115,147124],{"__ignoreMap":40},[45,147101,147102],{"class":47,"line":48},[45,147103,1629],{"class":51},[45,147105,147106,147109,147111,147113],{"class":47,"line":125},[45,147107,147108],{"class":257},"  \"name\"",[45,147110,51518],{"class":51},[45,147112,69350],{"class":313},[45,147114,31547],{"class":51},[45,147116,147117,147120,147122],{"class":47,"line":1262},[45,147118,147119],{"class":257},"  \"value\"",[45,147121,51518],{"class":51},[45,147123,97509],{"class":257},[45,147125,147126],{"class":47,"line":1277},[45,147127,1648],{"class":51},[10,147129,147130],{},"Python 与 JSON 的转换：",[35,147132,147134],{"className":37,"code":147133,"language":39,"meta":40,"style":40},"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",[42,147135,147136,147143,147147,147172,147176,147195,147202,147206,147216],{"__ignoreMap":40},[45,147137,147138,147140],{"class":47,"line":48},[45,147139,30473],{"class":93},[45,147141,147142],{"class":51}," json\n",[45,147144,147145],{"class":47,"line":125},[45,147146,2483],{"emptyLinePlaceholder":133},[45,147148,147149,147151,147153,147155,147157,147159,147161,147163,147166,147168,147170],{"class":47,"line":1262},[45,147150,101709],{"class":51},[45,147152,254],{"class":93},[45,147154,4531],{"class":51},[45,147156,62760],{"class":313},[45,147158,51518],{"class":51},[45,147160,69350],{"class":313},[45,147162,12518],{"class":51},[45,147164,147165],{"class":313},"\"value\"",[45,147167,51518],{"class":51},[45,147169,519],{"class":257},[45,147171,1648],{"class":51},[45,147173,147174],{"class":47,"line":1277},[45,147175,2483],{"emptyLinePlaceholder":133},[45,147177,147178,147181,147183,147186,147189,147191,147193],{"class":47,"line":1283},[45,147179,147180],{"class":51},"json_text ",[45,147182,254],{"class":93},[45,147184,147185],{"class":51}," json.dumps(data, ",[45,147187,147188],{"class":5299},"ensure_ascii",[45,147190,254],{"class":93},[45,147192,34068],{"class":257},[45,147194,215],{"class":51},[45,147196,147197,147199],{"class":47,"line":1297},[45,147198,30496],{"class":257},[45,147200,147201],{"class":51},"(json_text)\n",[45,147203,147204],{"class":47,"line":1303},[45,147205,2483],{"emptyLinePlaceholder":133},[45,147207,147208,147211,147213],{"class":47,"line":1394},[45,147209,147210],{"class":51},"new_data ",[45,147212,254],{"class":93},[45,147214,147215],{"class":51}," json.loads(json_text)\n",[45,147217,147218,147220],{"class":47,"line":1400},[45,147219,30496],{"class":257},[45,147221,147222],{"class":51},"(new_data)\n",[30,147224,147226],{"id":147225},"_103-安装pyecharts","10.3 安装pyecharts",[35,147228,147230],{"className":23905,"code":147229,"language":23907,"meta":40,"style":40},"pip install pyecharts\n",[42,147231,147232],{"__ignoreMap":40},[45,147233,147234,147236,147238],{"class":47,"line":48},[45,147235,23914],{"class":2046},[45,147237,23917],{"class":313},[45,147239,147240],{"class":313}," pyecharts\n",[10,147242,147243],{},"验证：",[35,147245,147247],{"className":37,"code":147246,"language":39,"meta":40,"style":40},"import pyecharts\n\nprint(pyecharts.__version__)\n",[42,147248,147249,147255,147259],{"__ignoreMap":40},[45,147250,147251,147253],{"class":47,"line":48},[45,147252,30473],{"class":93},[45,147254,147240],{"class":51},[45,147256,147257],{"class":47,"line":125},[45,147258,2483],{"emptyLinePlaceholder":133},[45,147260,147261,147263,147266,147269],{"class":47,"line":1262},[45,147262,30496],{"class":257},[45,147264,147265],{"class":51},"(pyecharts.",[45,147267,147268],{"class":257},"__version__",[45,147270,215],{"class":51},[10,147272,147273],{},"如果使用虚拟环境，要先激活环境再安装。",[30,147275,147277],{"id":147276},"_104-第一个折线图","10.4 第一个折线图",[35,147279,147281],{"className":37,"code":147280,"language":39,"meta":40,"style":40},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[42,147282,147283,147295,147299,147309,147339,147371],{"__ignoreMap":40},[45,147284,147285,147287,147290,147292],{"class":47,"line":48},[45,147286,30818],{"class":93},[45,147288,147289],{"class":51}," pyecharts.charts ",[45,147291,30473],{"class":93},[45,147293,147294],{"class":51}," Line\n",[45,147296,147297],{"class":47,"line":125},[45,147298,2483],{"emptyLinePlaceholder":133},[45,147300,147301,147304,147306],{"class":47,"line":1262},[45,147302,147303],{"class":51},"line ",[45,147305,254],{"class":93},[45,147307,147308],{"class":51}," Line()\n",[45,147310,147311,147314,147317,147319,147322,147324,147327,147329,147332,147334,147337],{"class":47,"line":1277},[45,147312,147313],{"class":51},"line.add_xaxis([",[45,147315,147316],{"class":313},"\"周一\"",[45,147318,12518],{"class":51},[45,147320,147321],{"class":313},"\"周二\"",[45,147323,12518],{"class":51},[45,147325,147326],{"class":313},"\"周三\"",[45,147328,12518],{"class":51},[45,147330,147331],{"class":313},"\"周四\"",[45,147333,12518],{"class":51},[45,147335,147336],{"class":313},"\"周五\"",[45,147338,4740],{"class":51},[45,147340,147341,147344,147347,147349,147351,147353,147355,147357,147359,147361,147364,147366,147369],{"class":47,"line":1283},[45,147342,147343],{"class":51},"line.add_yaxis(",[45,147345,147346],{"class":313},"\"销售额\"",[45,147348,77599],{"class":51},[45,147350,519],{"class":257},[45,147352,12518],{"class":51},[45,147354,1024],{"class":257},[45,147356,12518],{"class":51},[45,147358,1069],{"class":257},[45,147360,12518],{"class":51},[45,147362,147363],{"class":257},"150",[45,147365,12518],{"class":51},[45,147367,147368],{"class":257},"180",[45,147370,4740],{"class":51},[45,147372,147373,147376,147379],{"class":47,"line":1297},[45,147374,147375],{"class":51},"line.render(",[45,147377,147378],{"class":313},"\"line.html\"",[45,147380,215],{"class":51},[10,147382,147383,147384,147387],{},"运行后会生成 ",[42,147385,147386],{},"line.html","，用浏览器打开即可看到图表。",[10,147389,147390],{},"核心步骤：",[159,147392,147393,147396,147399,147402,147405],{},[162,147394,147395],{},"导入图表类。",[162,147397,147398],{},"创建图表对象。",[162,147400,147401],{},"添加 x 轴数据。",[162,147403,147404],{},"添加 y 轴数据。",[162,147406,147407],{},"渲染为 HTML。",[30,147409,147411],{"id":147410},"_105-全局配置","10.5 全局配置",[10,147413,147414,147415,147418],{},"常用配置在 ",[42,147416,147417],{},"pyecharts.options"," 中。",[35,147420,147422],{"className":37,"code":147421,"language":39,"meta":40,"style":40},"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",[42,147423,147424,147441,147451,147455,147463,147487,147515,147520,147539,147558,147576,147596,147600],{"__ignoreMap":40},[45,147425,147426,147428,147431,147433,147436,147438],{"class":47,"line":48},[45,147427,30818],{"class":93},[45,147429,147430],{"class":51}," pyecharts ",[45,147432,30473],{"class":93},[45,147434,147435],{"class":51}," options ",[45,147437,31464],{"class":93},[45,147439,147440],{"class":51}," opts\n",[45,147442,147443,147445,147447,147449],{"class":47,"line":125},[45,147444,30818],{"class":93},[45,147446,147289],{"class":51},[45,147448,30473],{"class":93},[45,147450,147294],{"class":51},[45,147452,147453],{"class":47,"line":1262},[45,147454,2483],{"emptyLinePlaceholder":133},[45,147456,147457,147459,147461],{"class":47,"line":1277},[45,147458,147303],{"class":51},[45,147460,254],{"class":93},[45,147462,147308],{"class":51},[45,147464,147465,147467,147469,147471,147473,147475,147477,147479,147481,147483,147485],{"class":47,"line":1283},[45,147466,147313],{"class":51},[45,147468,147316],{"class":313},[45,147470,12518],{"class":51},[45,147472,147321],{"class":313},[45,147474,12518],{"class":51},[45,147476,147326],{"class":313},[45,147478,12518],{"class":51},[45,147480,147331],{"class":313},[45,147482,12518],{"class":51},[45,147484,147336],{"class":313},[45,147486,4740],{"class":51},[45,147488,147489,147491,147493,147495,147497,147499,147501,147503,147505,147507,147509,147511,147513],{"class":47,"line":1297},[45,147490,147343],{"class":51},[45,147492,147346],{"class":313},[45,147494,77599],{"class":51},[45,147496,519],{"class":257},[45,147498,12518],{"class":51},[45,147500,1024],{"class":257},[45,147502,12518],{"class":51},[45,147504,1069],{"class":257},[45,147506,12518],{"class":51},[45,147508,147363],{"class":257},[45,147510,12518],{"class":51},[45,147512,147368],{"class":257},[45,147514,4740],{"class":51},[45,147516,147517],{"class":47,"line":1303},[45,147518,147519],{"class":51},"line.set_global_opts(\n",[45,147521,147522,147525,147527,147530,147532,147534,147537],{"class":47,"line":1394},[45,147523,147524],{"class":5299},"    title_opts",[45,147526,254],{"class":93},[45,147528,147529],{"class":51},"opts.TitleOpts(",[45,147531,51488],{"class":5299},[45,147533,254],{"class":93},[45,147535,147536],{"class":313},"\"一周销售额\"",[45,147538,38128],{"class":51},[45,147540,147541,147544,147546,147549,147551,147553,147556],{"class":47,"line":1400},[45,147542,147543],{"class":5299},"    xaxis_opts",[45,147545,254],{"class":93},[45,147547,147548],{"class":51},"opts.AxisOpts(",[45,147550,79891],{"class":5299},[45,147552,254],{"class":93},[45,147554,147555],{"class":313},"\"日期\"",[45,147557,38128],{"class":51},[45,147559,147560,147563,147565,147567,147569,147571,147574],{"class":47,"line":1412},[45,147561,147562],{"class":5299},"    yaxis_opts",[45,147564,254],{"class":93},[45,147566,147548],{"class":51},[45,147568,79891],{"class":5299},[45,147570,254],{"class":93},[45,147572,147573],{"class":313},"\"金额\"",[45,147575,38128],{"class":51},[45,147577,147578,147581,147583,147586,147589,147591,147594],{"class":47,"line":1695},[45,147579,147580],{"class":5299},"    tooltip_opts",[45,147582,254],{"class":93},[45,147584,147585],{"class":51},"opts.TooltipOpts(",[45,147587,147588],{"class":5299},"trigger",[45,147590,254],{"class":93},[45,147592,147593],{"class":313},"\"axis\"",[45,147595,38128],{"class":51},[45,147597,147598],{"class":47,"line":1700},[45,147599,215],{"class":51},[45,147601,147602,147604,147606],{"class":47,"line":1706},[45,147603,147375],{"class":51},[45,147605,147378],{"class":313},[45,147607,215],{"class":51},[10,147609,147610],{},"常见全局配置：",[346,147612,147613,147622],{},[349,147614,147615],{},[352,147616,147617,147620],{},[355,147618,147619],{},"配置",[355,147621,102747],{},[393,147623,147624,147634,147644,147654,147664,147674],{},[352,147625,147626,147631],{},[398,147627,147628],{},[42,147629,147630],{},"TitleOpts",[398,147632,147633],{},"标题",[352,147635,147636,147641],{},[398,147637,147638],{},[42,147639,147640],{},"LegendOpts",[398,147642,147643],{},"图例",[352,147645,147646,147651],{},[398,147647,147648],{},[42,147649,147650],{},"TooltipOpts",[398,147652,147653],{},"提示框",[352,147655,147656,147661],{},[398,147657,147658],{},[42,147659,147660],{},"AxisOpts",[398,147662,147663],{},"坐标轴",[352,147665,147666,147671],{},[398,147667,147668],{},[42,147669,147670],{},"VisualMapOpts",[398,147672,147673],{},"视觉映射",[352,147675,147676,147681],{},[398,147677,147678],{},[42,147679,147680],{},"DataZoomOpts",[398,147682,147683],{},"区域缩放",[30,147685,147687],{"id":147686},"_106-系列配置","10.6 系列配置",[10,147689,147690],{},"系列配置作用于某一组数据。",[35,147692,147694],{"className":37,"code":147693,"language":39,"meta":40,"style":40},"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",[42,147695,147696,147701,147712,147741,147752,147771],{"__ignoreMap":40},[45,147697,147698],{"class":47,"line":48},[45,147699,147700],{"class":51},"line.add_yaxis(\n",[45,147702,147703,147706,147708,147710],{"class":47,"line":125},[45,147704,147705],{"class":5299},"    series_name",[45,147707,254],{"class":93},[45,147709,147346],{"class":313},[45,147711,31547],{"class":51},[45,147713,147714,147717,147719,147721,147723,147725,147727,147729,147731,147733,147735,147737,147739],{"class":47,"line":1262},[45,147715,147716],{"class":5299},"    y_axis",[45,147718,254],{"class":93},[45,147720,1097],{"class":51},[45,147722,519],{"class":257},[45,147724,12518],{"class":51},[45,147726,1024],{"class":257},[45,147728,12518],{"class":51},[45,147730,1069],{"class":257},[45,147732,12518],{"class":51},[45,147734,147363],{"class":257},[45,147736,12518],{"class":51},[45,147738,147368],{"class":257},[45,147740,87917],{"class":51},[45,147742,147743,147746,147748,147750],{"class":47,"line":1277},[45,147744,147745],{"class":5299},"    is_smooth",[45,147747,254],{"class":93},[45,147749,31557],{"class":257},[45,147751,31547],{"class":51},[45,147753,147754,147757,147759,147762,147765,147767,147769],{"class":47,"line":1283},[45,147755,147756],{"class":5299},"    label_opts",[45,147758,254],{"class":93},[45,147760,147761],{"class":51},"opts.LabelOpts(",[45,147763,147764],{"class":5299},"is_show",[45,147766,254],{"class":93},[45,147768,31557],{"class":257},[45,147770,38128],{"class":51},[45,147772,147773],{"class":47,"line":1297},[45,147774,215],{"class":51},[10,147776,147777],{},"常用参数：",[159,147779,147780,147786,147792,147798,147804],{},[162,147781,147782,147785],{},[42,147783,147784],{},"series_name","：系列名称。",[162,147787,147788,147791],{},[42,147789,147790],{},"y_axis","：y 轴数据。",[162,147793,147794,147797],{},[42,147795,147796],{},"is_smooth","：是否平滑曲线。",[162,147799,147800,147803],{},[42,147801,147802],{},"label_opts","：标签配置。",[162,147805,147806,147809],{},[42,147807,147808],{},"symbol_size","：标记点大小。",[30,147811,147813],{"id":147812},"_107-多条折线","10.7 多条折线",[35,147815,147817],{"className":37,"code":147816,"language":39,"meta":40,"style":40},"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",[42,147818,147819,147833,147843,147847,147876,147880,147888,147893,147931,147968,147972,147989,148005,148009],{"__ignoreMap":40},[45,147820,147821,147823,147825,147827,147829,147831],{"class":47,"line":48},[45,147822,30818],{"class":93},[45,147824,147430],{"class":51},[45,147826,30473],{"class":93},[45,147828,147435],{"class":51},[45,147830,31464],{"class":93},[45,147832,147440],{"class":51},[45,147834,147835,147837,147839,147841],{"class":47,"line":125},[45,147836,30818],{"class":93},[45,147838,147289],{"class":51},[45,147840,30473],{"class":93},[45,147842,147294],{"class":51},[45,147844,147845],{"class":47,"line":1262},[45,147846,2483],{"emptyLinePlaceholder":133},[45,147848,147849,147852,147854,147856,147858,147860,147862,147864,147866,147868,147870,147872,147874],{"class":47,"line":1277},[45,147850,147851],{"class":51},"dates ",[45,147853,254],{"class":93},[45,147855,52307],{"class":51},[45,147857,147316],{"class":313},[45,147859,12518],{"class":51},[45,147861,147321],{"class":313},[45,147863,12518],{"class":51},[45,147865,147326],{"class":313},[45,147867,12518],{"class":51},[45,147869,147331],{"class":313},[45,147871,12518],{"class":51},[45,147873,147336],{"class":313},[45,147875,33327],{"class":51},[45,147877,147878],{"class":47,"line":1283},[45,147879,2483],{"emptyLinePlaceholder":133},[45,147881,147882,147884,147886],{"class":47,"line":1297},[45,147883,147303],{"class":51},[45,147885,254],{"class":93},[45,147887,147308],{"class":51},[45,147889,147890],{"class":47,"line":1303},[45,147891,147892],{"class":51},"line.add_xaxis(dates)\n",[45,147894,147895,147897,147900,147902,147904,147906,147909,147911,147913,147915,147917,147919,147921,147923,147925,147927,147929],{"class":47,"line":1394},[45,147896,147343],{"class":51},[45,147898,147899],{"class":313},"\"线上销售\"",[45,147901,77599],{"class":51},[45,147903,519],{"class":257},[45,147905,12518],{"class":51},[45,147907,147908],{"class":257},"130",[45,147910,12518],{"class":51},[45,147912,1024],{"class":257},[45,147914,12518],{"class":51},[45,147916,21131],{"class":257},[45,147918,12518],{"class":51},[45,147920,1805],{"class":257},[45,147922,112253],{"class":51},[45,147924,147796],{"class":5299},[45,147926,254],{"class":93},[45,147928,31557],{"class":257},[45,147930,215],{"class":51},[45,147932,147933,147935,147938,147940,147942,147944,147946,147948,147950,147952,147954,147956,147958,147960,147962,147964,147966],{"class":47,"line":1400},[45,147934,147343],{"class":51},[45,147936,147937],{"class":313},"\"线下销售\"",[45,147939,77599],{"class":51},[45,147941,819],{"class":257},[45,147943,12518],{"class":51},[45,147945,1069],{"class":257},[45,147947,12518],{"class":51},[45,147949,519],{"class":257},[45,147951,12518],{"class":51},[45,147953,1024],{"class":257},[45,147955,12518],{"class":51},[45,147957,147363],{"class":257},[45,147959,112253],{"class":51},[45,147961,147796],{"class":5299},[45,147963,254],{"class":93},[45,147965,31557],{"class":257},[45,147967,215],{"class":51},[45,147969,147970],{"class":47,"line":1412},[45,147971,147519],{"class":51},[45,147973,147974,147976,147978,147980,147982,147984,147987],{"class":47,"line":1695},[45,147975,147524],{"class":5299},[45,147977,254],{"class":93},[45,147979,147529],{"class":51},[45,147981,51488],{"class":5299},[45,147983,254],{"class":93},[45,147985,147986],{"class":313},"\"线上线下销售趋势\"",[45,147988,38128],{"class":51},[45,147990,147991,147993,147995,147997,147999,148001,148003],{"class":47,"line":1700},[45,147992,147580],{"class":5299},[45,147994,254],{"class":93},[45,147996,147585],{"class":51},[45,147998,147588],{"class":5299},[45,148000,254],{"class":93},[45,148002,147593],{"class":313},[45,148004,38128],{"class":51},[45,148006,148007],{"class":47,"line":1706},[45,148008,215],{"class":51},[45,148010,148011,148013,148016],{"class":47,"line":1711},[45,148012,147375],{"class":51},[45,148014,148015],{"class":313},"\"sales.html\"",[45,148017,215],{"class":51},[10,148019,148020],{},"多条折线适合比较不同指标或不同地区。",[30,148022,148024],{"id":148023},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[10,148026,148027,148028,24701],{},"假设 ",[42,148029,148030],{},"sales.json",[35,148032,148034],{"className":147096,"code":148033,"language":145843,"meta":40,"style":40},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[42,148035,148036,148041,148073,148101,148129],{"__ignoreMap":40},[45,148037,148038],{"class":47,"line":48},[45,148039,148040],{"class":51},"[\n",[45,148042,148043,148046,148049,148051,148053,148055,148058,148060,148062,148064,148067,148069,148071],{"class":47,"line":125},[45,148044,148045],{"class":51},"  {",[45,148047,148048],{"class":257},"\"date\"",[45,148050,51518],{"class":51},[45,148052,147316],{"class":313},[45,148054,12518],{"class":51},[45,148056,148057],{"class":257},"\"online\"",[45,148059,51518],{"class":51},[45,148061,519],{"class":257},[45,148063,12518],{"class":51},[45,148065,148066],{"class":257},"\"offline\"",[45,148068,51518],{"class":51},[45,148070,819],{"class":257},[45,148072,5013],{"class":51},[45,148074,148075,148077,148079,148081,148083,148085,148087,148089,148091,148093,148095,148097,148099],{"class":47,"line":1262},[45,148076,148045],{"class":51},[45,148078,148048],{"class":257},[45,148080,51518],{"class":51},[45,148082,147321],{"class":313},[45,148084,12518],{"class":51},[45,148086,148057],{"class":257},[45,148088,51518],{"class":51},[45,148090,147908],{"class":257},[45,148092,12518],{"class":51},[45,148094,148066],{"class":257},[45,148096,51518],{"class":51},[45,148098,1069],{"class":257},[45,148100,5013],{"class":51},[45,148102,148103,148105,148107,148109,148111,148113,148115,148117,148119,148121,148123,148125,148127],{"class":47,"line":1277},[45,148104,148045],{"class":51},[45,148106,148048],{"class":257},[45,148108,51518],{"class":51},[45,148110,147326],{"class":313},[45,148112,12518],{"class":51},[45,148114,148057],{"class":257},[45,148116,51518],{"class":51},[45,148118,1024],{"class":257},[45,148120,12518],{"class":51},[45,148122,148066],{"class":257},[45,148124,51518],{"class":51},[45,148126,519],{"class":257},[45,148128,1648],{"class":51},[45,148130,148131],{"class":47,"line":1283},[45,148132,33327],{"class":51},[10,148134,148135],{},"读取并绘图：",[35,148137,148139],{"className":37,"code":148138,"language":39,"meta":40,"style":40},"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",[42,148140,148141,148147,148161,148171,148175,148207,148220,148224,148232,148241,148250,148254,148266,148275,148284,148293,148297,148305,148309,148326,148343,148347,148364,148380,148384],{"__ignoreMap":40},[45,148142,148143,148145],{"class":47,"line":48},[45,148144,30473],{"class":93},[45,148146,147142],{"class":51},[45,148148,148149,148151,148153,148155,148157,148159],{"class":47,"line":125},[45,148150,30818],{"class":93},[45,148152,147430],{"class":51},[45,148154,30473],{"class":93},[45,148156,147435],{"class":51},[45,148158,31464],{"class":93},[45,148160,147440],{"class":51},[45,148162,148163,148165,148167,148169],{"class":47,"line":1262},[45,148164,30818],{"class":93},[45,148166,147289],{"class":51},[45,148168,30473],{"class":93},[45,148170,147294],{"class":51},[45,148172,148173],{"class":47,"line":1277},[45,148174,2483],{"emptyLinePlaceholder":133},[45,148176,148177,148179,148181,148183,148186,148188,148190,148192,148194,148196,148198,148200,148202,148205],{"class":47,"line":1283},[45,148178,107884],{"class":93},[45,148180,146842],{"class":257},[45,148182,209],{"class":51},[45,148184,148185],{"class":313},"\"sales.json\"",[45,148187,12518],{"class":51},[45,148189,146852],{"class":313},[45,148191,12518],{"class":51},[45,148193,146857],{"class":5299},[45,148195,254],{"class":93},[45,148197,146862],{"class":313},[45,148199,13797],{"class":51},[45,148201,31464],{"class":93},[45,148203,148204],{"class":5299}," file",[45,148206,3822],{"class":51},[45,148208,148209,148211,148213,148216,148218],{"class":47,"line":1297},[45,148210,101472],{"class":51},[45,148212,254],{"class":93},[45,148214,148215],{"class":51}," json.load(",[45,148217,45435],{"class":5299},[45,148219,215],{"class":51},[45,148221,148222],{"class":47,"line":1303},[45,148223,2483],{"emptyLinePlaceholder":133},[45,148225,148226,148228,148230],{"class":47,"line":1394},[45,148227,147851],{"class":51},[45,148229,254],{"class":93},[45,148231,51919],{"class":51},[45,148233,148234,148237,148239],{"class":47,"line":1400},[45,148235,148236],{"class":51},"online_sales ",[45,148238,254],{"class":93},[45,148240,51919],{"class":51},[45,148242,148243,148246,148248],{"class":47,"line":1412},[45,148244,148245],{"class":51},"offline_sales ",[45,148247,254],{"class":93},[45,148249,51919],{"class":51},[45,148251,148252],{"class":47,"line":1695},[45,148253,2483],{"emptyLinePlaceholder":133},[45,148255,148256,148258,148261,148263],{"class":47,"line":1700},[45,148257,3108],{"class":93},[45,148259,148260],{"class":51}," item ",[45,148262,26126],{"class":93},[45,148264,148265],{"class":51}," data:\n",[45,148267,148268,148271,148273],{"class":47,"line":1706},[45,148269,148270],{"class":51},"    dates.append(item[",[45,148272,148048],{"class":313},[45,148274,4740],{"class":51},[45,148276,148277,148280,148282],{"class":47,"line":1711},[45,148278,148279],{"class":51},"    online_sales.append(item[",[45,148281,148057],{"class":313},[45,148283,4740],{"class":51},[45,148285,148286,148289,148291],{"class":47,"line":1725},[45,148287,148288],{"class":51},"    offline_sales.append(item[",[45,148290,148066],{"class":313},[45,148292,4740],{"class":51},[45,148294,148295],{"class":47,"line":1730},[45,148296,2483],{"emptyLinePlaceholder":133},[45,148298,148299,148301,148303],{"class":47,"line":1736},[45,148300,147303],{"class":51},[45,148302,254],{"class":93},[45,148304,147308],{"class":51},[45,148306,148307],{"class":47,"line":1757},[45,148308,147892],{"class":51},[45,148310,148311,148313,148315,148318,148320,148322,148324],{"class":47,"line":1762},[45,148312,147343],{"class":51},[45,148314,147899],{"class":313},[45,148316,148317],{"class":51},", online_sales, ",[45,148319,147796],{"class":5299},[45,148321,254],{"class":93},[45,148323,31557],{"class":257},[45,148325,215],{"class":51},[45,148327,148328,148330,148332,148335,148337,148339,148341],{"class":47,"line":1776},[45,148329,147343],{"class":51},[45,148331,147937],{"class":313},[45,148333,148334],{"class":51},", offline_sales, ",[45,148336,147796],{"class":5299},[45,148338,254],{"class":93},[45,148340,31557],{"class":257},[45,148342,215],{"class":51},[45,148344,148345],{"class":47,"line":1781},[45,148346,147519],{"class":51},[45,148348,148349,148351,148353,148355,148357,148359,148362],{"class":47,"line":1810},[45,148350,147524],{"class":5299},[45,148352,254],{"class":93},[45,148354,147529],{"class":51},[45,148356,51488],{"class":5299},[45,148358,254],{"class":93},[45,148360,148361],{"class":313},"\"销售趋势\"",[45,148363,38128],{"class":51},[45,148365,148366,148368,148370,148372,148374,148376,148378],{"class":47,"line":1815},[45,148367,147580],{"class":5299},[45,148369,254],{"class":93},[45,148371,147585],{"class":51},[45,148373,147588],{"class":5299},[45,148375,254],{"class":93},[45,148377,147593],{"class":313},[45,148379,38128],{"class":51},[45,148381,148382],{"class":47,"line":1832},[45,148383,215],{"class":51},[45,148385,148386,148388,148390],{"class":47,"line":1837},[45,148387,147375],{"class":51},[45,148389,148015],{"class":313},[45,148391,215],{"class":51},[30,148393,148395],{"id":148394},"_109-数据清洗","10.9 数据清洗",[10,148397,148398],{},"真实数据经常不整齐，需要清洗。",[10,148400,148401],{},"常见问题：",[159,148403,148404,148407,148410,148413],{},[162,148405,148406],{},"数字是字符串。",[162,148408,148409],{},"字段缺失。",[162,148411,148412],{},"空值。",[162,148414,148415],{},"日期格式不统一。",[10,148417,15218],{},[35,148419,148421],{"className":37,"code":148420,"language":39,"meta":40,"style":40},"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",[42,148422,148423,148432,148455,148475,148496,148500,148504,148512,148521,148525,148536,148550,148559,148564,148568,148576,148586,148590,148597],{"__ignoreMap":40},[45,148424,148425,148428,148430],{"class":47,"line":48},[45,148426,148427],{"class":51},"raw_data ",[45,148429,254],{"class":93},[45,148431,55528],{"class":51},[45,148433,148434,148437,148439,148441,148443,148445,148448,148450,148453],{"class":47,"line":125},[45,148435,148436],{"class":51},"    {",[45,148438,148048],{"class":313},[45,148440,51518],{"class":51},[45,148442,147316],{"class":313},[45,148444,12518],{"class":51},[45,148446,148447],{"class":313},"\"sales\"",[45,148449,51518],{"class":51},[45,148451,148452],{"class":313},"\"100\"",[45,148454,5013],{"class":51},[45,148456,148457,148459,148461,148463,148465,148467,148469,148471,148473],{"class":47,"line":1262},[45,148458,148436],{"class":51},[45,148460,148048],{"class":313},[45,148462,51518],{"class":51},[45,148464,147321],{"class":313},[45,148466,12518],{"class":51},[45,148468,148447],{"class":313},[45,148470,51518],{"class":51},[45,148472,7735],{"class":313},[45,148474,5013],{"class":51},[45,148476,148477,148479,148481,148483,148485,148487,148489,148491,148494],{"class":47,"line":1277},[45,148478,148436],{"class":51},[45,148480,148048],{"class":313},[45,148482,51518],{"class":51},[45,148484,147326],{"class":313},[45,148486,12518],{"class":51},[45,148488,148447],{"class":313},[45,148490,51518],{"class":51},[45,148492,148493],{"class":313},"\"120\"",[45,148495,5013],{"class":51},[45,148497,148498],{"class":47,"line":1283},[45,148499,33327],{"class":51},[45,148501,148502],{"class":47,"line":1297},[45,148503,2483],{"emptyLinePlaceholder":133},[45,148505,148506,148508,148510],{"class":47,"line":1303},[45,148507,147851],{"class":51},[45,148509,254],{"class":93},[45,148511,51919],{"class":51},[45,148513,148514,148517,148519],{"class":47,"line":1394},[45,148515,148516],{"class":51},"sales ",[45,148518,254],{"class":93},[45,148520,51919],{"class":51},[45,148522,148523],{"class":47,"line":1400},[45,148524,2483],{"emptyLinePlaceholder":133},[45,148526,148527,148529,148531,148533],{"class":47,"line":1412},[45,148528,3108],{"class":93},[45,148530,148260],{"class":51},[45,148532,26126],{"class":93},[45,148534,148535],{"class":51}," raw_data:\n",[45,148537,148538,148541,148543,148546,148548],{"class":47,"line":1695},[45,148539,148540],{"class":51},"    value ",[45,148542,254],{"class":93},[45,148544,148545],{"class":51}," item.get(",[45,148547,148447],{"class":313},[45,148549,215],{"class":51},[45,148551,148552,148554,148556],{"class":47,"line":1700},[45,148553,3184],{"class":93},[45,148555,39011],{"class":93},[45,148557,148558],{"class":51}," value:\n",[45,148560,148561],{"class":47,"line":1706},[45,148562,148563],{"class":93},"        continue\n",[45,148565,148566],{"class":47,"line":1711},[45,148567,2483],{"emptyLinePlaceholder":133},[45,148569,148570,148572,148574],{"class":47,"line":1725},[45,148571,148270],{"class":51},[45,148573,148048],{"class":313},[45,148575,4740],{"class":51},[45,148577,148578,148581,148583],{"class":47,"line":1730},[45,148579,148580],{"class":51},"    sales.append(",[45,148582,212],{"class":257},[45,148584,148585],{"class":51},"(value))\n",[45,148587,148588],{"class":47,"line":1736},[45,148589,2483],{"emptyLinePlaceholder":133},[45,148591,148592,148594],{"class":47,"line":1757},[45,148593,30496],{"class":257},[45,148595,148596],{"class":51},"(dates)\n",[45,148598,148599,148601],{"class":47,"line":1762},[45,148600,30496],{"class":257},[45,148602,148603],{"class":51},"(sales)\n",[30,148605,148607],{"id":148606},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[35,148609,148611],{"className":37,"code":148610,"language":39,"meta":40,"style":40},"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",[42,148612,148613,148627,148637,148641,148649,148670,148692,148714,148736,148758,148762,148766,148788,148809,148813,148821,148825,148829,148839,148848,148858,148874,148878,148882,148899,148915,148931,148947,148957,148961],{"__ignoreMap":40},[45,148614,148615,148617,148619,148621,148623,148625],{"class":47,"line":48},[45,148616,30818],{"class":93},[45,148618,147430],{"class":51},[45,148620,30473],{"class":93},[45,148622,147435],{"class":51},[45,148624,31464],{"class":93},[45,148626,147440],{"class":51},[45,148628,148629,148631,148633,148635],{"class":47,"line":125},[45,148630,30818],{"class":93},[45,148632,147289],{"class":51},[45,148634,30473],{"class":93},[45,148636,147294],{"class":51},[45,148638,148639],{"class":47,"line":1262},[45,148640,2483],{"emptyLinePlaceholder":133},[45,148642,148643,148645,148647],{"class":47,"line":1277},[45,148644,148516],{"class":51},[45,148646,254],{"class":93},[45,148648,55528],{"class":51},[45,148650,148651,148653,148655,148657,148660,148662,148664,148666,148668],{"class":47,"line":1283},[45,148652,148436],{"class":51},[45,148654,148048],{"class":313},[45,148656,51518],{"class":51},[45,148658,148659],{"class":313},"\"2024-10-01\"",[45,148661,12518],{"class":51},[45,148663,84165],{"class":313},[45,148665,51518],{"class":51},[45,148667,92104],{"class":257},[45,148669,5013],{"class":51},[45,148671,148672,148674,148676,148678,148681,148683,148685,148687,148690],{"class":47,"line":1297},[45,148673,148436],{"class":51},[45,148675,148048],{"class":313},[45,148677,51518],{"class":51},[45,148679,148680],{"class":313},"\"2024-10-02\"",[45,148682,12518],{"class":51},[45,148684,84165],{"class":313},[45,148686,51518],{"class":51},[45,148688,148689],{"class":257},"1800",[45,148691,5013],{"class":51},[45,148693,148694,148696,148698,148700,148703,148705,148707,148709,148712],{"class":47,"line":1303},[45,148695,148436],{"class":51},[45,148697,148048],{"class":313},[45,148699,51518],{"class":51},[45,148701,148702],{"class":313},"\"2024-10-03\"",[45,148704,12518],{"class":51},[45,148706,84165],{"class":313},[45,148708,51518],{"class":51},[45,148710,148711],{"class":257},"1500",[45,148713,5013],{"class":51},[45,148715,148716,148718,148720,148722,148725,148727,148729,148731,148734],{"class":47,"line":1394},[45,148717,148436],{"class":51},[45,148719,148048],{"class":313},[45,148721,51518],{"class":51},[45,148723,148724],{"class":313},"\"2024-10-04\"",[45,148726,12518],{"class":51},[45,148728,84165],{"class":313},[45,148730,51518],{"class":51},[45,148732,148733],{"class":257},"2100",[45,148735,5013],{"class":51},[45,148737,148738,148740,148742,148744,148747,148749,148751,148753,148756],{"class":47,"line":1400},[45,148739,148436],{"class":51},[45,148741,148048],{"class":313},[45,148743,51518],{"class":51},[45,148745,148746],{"class":313},"\"2024-10-05\"",[45,148748,12518],{"class":51},[45,148750,84165],{"class":313},[45,148752,51518],{"class":51},[45,148754,148755],{"class":257},"2600",[45,148757,5013],{"class":51},[45,148759,148760],{"class":47,"line":1412},[45,148761,33327],{"class":51},[45,148763,148764],{"class":47,"line":1695},[45,148765,2483],{"emptyLinePlaceholder":133},[45,148767,148768,148770,148772,148775,148777,148779,148781,148783,148785],{"class":47,"line":1700},[45,148769,147851],{"class":51},[45,148771,254],{"class":93},[45,148773,148774],{"class":51}," [item[",[45,148776,148048],{"class":313},[45,148778,4526],{"class":51},[45,148780,3108],{"class":93},[45,148782,148260],{"class":51},[45,148784,26126],{"class":93},[45,148786,148787],{"class":51}," sales]\n",[45,148789,148790,148793,148795,148797,148799,148801,148803,148805,148807],{"class":47,"line":1706},[45,148791,148792],{"class":51},"amounts ",[45,148794,254],{"class":93},[45,148796,148774],{"class":51},[45,148798,84165],{"class":313},[45,148800,4526],{"class":51},[45,148802,3108],{"class":93},[45,148804,148260],{"class":51},[45,148806,26126],{"class":93},[45,148808,148787],{"class":51},[45,148810,148811],{"class":47,"line":1711},[45,148812,2483],{"emptyLinePlaceholder":133},[45,148814,148815,148817,148819],{"class":47,"line":1725},[45,148816,147303],{"class":51},[45,148818,254],{"class":93},[45,148820,147308],{"class":51},[45,148822,148823],{"class":47,"line":1730},[45,148824,147892],{"class":51},[45,148826,148827],{"class":47,"line":1736},[45,148828,147700],{"class":51},[45,148830,148831,148833,148835,148837],{"class":47,"line":1757},[45,148832,147705],{"class":5299},[45,148834,254],{"class":93},[45,148836,147346],{"class":313},[45,148838,31547],{"class":51},[45,148840,148841,148843,148845],{"class":47,"line":1762},[45,148842,147716],{"class":5299},[45,148844,254],{"class":93},[45,148846,148847],{"class":51},"amounts,\n",[45,148849,148850,148852,148854,148856],{"class":47,"line":1776},[45,148851,147745],{"class":5299},[45,148853,254],{"class":93},[45,148855,31557],{"class":257},[45,148857,31547],{"class":51},[45,148859,148860,148862,148864,148866,148868,148870,148872],{"class":47,"line":1781},[45,148861,147756],{"class":5299},[45,148863,254],{"class":93},[45,148865,147761],{"class":51},[45,148867,147764],{"class":5299},[45,148869,254],{"class":93},[45,148871,31557],{"class":257},[45,148873,38128],{"class":51},[45,148875,148876],{"class":47,"line":1810},[45,148877,215],{"class":51},[45,148879,148880],{"class":47,"line":1815},[45,148881,147519],{"class":51},[45,148883,148884,148886,148888,148890,148892,148894,148897],{"class":47,"line":1832},[45,148885,147524],{"class":5299},[45,148887,254],{"class":93},[45,148889,147529],{"class":51},[45,148891,51488],{"class":5299},[45,148893,254],{"class":93},[45,148895,148896],{"class":313},"\"每日销售额\"",[45,148898,38128],{"class":51},[45,148900,148901,148903,148905,148907,148909,148911,148913],{"class":47,"line":1837},[45,148902,147543],{"class":5299},[45,148904,254],{"class":93},[45,148906,147548],{"class":51},[45,148908,79891],{"class":5299},[45,148910,254],{"class":93},[45,148912,147555],{"class":313},[45,148914,38128],{"class":51},[45,148916,148917,148919,148921,148923,148925,148927,148929],{"class":47,"line":1842},[45,148918,147562],{"class":5299},[45,148920,254],{"class":93},[45,148922,147548],{"class":51},[45,148924,79891],{"class":5299},[45,148926,254],{"class":93},[45,148928,147573],{"class":313},[45,148930,38128],{"class":51},[45,148932,148933,148935,148937,148939,148941,148943,148945],{"class":47,"line":1847},[45,148934,147580],{"class":5299},[45,148936,254],{"class":93},[45,148938,147585],{"class":51},[45,148940,147588],{"class":5299},[45,148942,254],{"class":93},[45,148944,147593],{"class":313},[45,148946,38128],{"class":51},[45,148948,148949,148952,148954],{"class":47,"line":1861},[45,148950,148951],{"class":5299},"    datazoom_opts",[45,148953,254],{"class":93},[45,148955,148956],{"class":51},"[opts.DataZoomOpts()],\n",[45,148958,148959],{"class":47,"line":1866},[45,148960,215],{"class":51},[45,148962,148963,148965,148968],{"class":47,"line":2660},[45,148964,147375],{"class":51},[45,148966,148967],{"class":313},"\"daily_sales.html\"",[45,148969,215],{"class":51},[10,148971,148972,148975],{},[42,148973,148974],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[30,148977,148979],{"id":148978},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[10,148981,148982],{},"如果数据结构如下：",[35,148984,148986],{"className":37,"code":148985,"language":39,"meta":40,"style":40},"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",[42,148987,148988,148996,149004,149026,149047,149052,149059,149079,149099,149103],{"__ignoreMap":40},[45,148989,148990,148992,148994],{"class":47,"line":48},[45,148991,101709],{"class":51},[45,148993,254],{"class":93},[45,148995,15655],{"class":51},[45,148997,148998,149001],{"class":47,"line":125},[45,148999,149000],{"class":313},"    \"北京\"",[45,149002,149003],{"class":51},": [\n",[45,149005,149006,149008,149010,149012,149015,149017,149020,149022,149024],{"class":47,"line":1262},[45,149007,5000],{"class":51},[45,149009,148048],{"class":313},[45,149011,51518],{"class":51},[45,149013,149014],{"class":313},"\"2024-01-01\"",[45,149016,12518],{"class":51},[45,149018,149019],{"class":313},"\"confirm\"",[45,149021,51518],{"class":51},[45,149023,654],{"class":257},[45,149025,5013],{"class":51},[45,149027,149028,149030,149032,149034,149037,149039,149041,149043,149045],{"class":47,"line":1277},[45,149029,5000],{"class":51},[45,149031,148048],{"class":313},[45,149033,51518],{"class":51},[45,149035,149036],{"class":313},"\"2024-01-02\"",[45,149038,12518],{"class":51},[45,149040,149019],{"class":313},[45,149042,51518],{"class":51},[45,149044,706],{"class":257},[45,149046,5013],{"class":51},[45,149048,149049],{"class":47,"line":1283},[45,149050,149051],{"class":51},"    ],\n",[45,149053,149054,149057],{"class":47,"line":1297},[45,149055,149056],{"class":313},"    \"上海\"",[45,149058,149003],{"class":51},[45,149060,149061,149063,149065,149067,149069,149071,149073,149075,149077],{"class":47,"line":1303},[45,149062,5000],{"class":51},[45,149064,148048],{"class":313},[45,149066,51518],{"class":51},[45,149068,149014],{"class":313},[45,149070,12518],{"class":51},[45,149072,149019],{"class":313},[45,149074,51518],{"class":51},[45,149076,603],{"class":257},[45,149078,5013],{"class":51},[45,149080,149081,149083,149085,149087,149089,149091,149093,149095,149097],{"class":47,"line":1394},[45,149082,5000],{"class":51},[45,149084,148048],{"class":313},[45,149086,51518],{"class":51},[45,149088,149036],{"class":313},[45,149090,12518],{"class":51},[45,149092,149019],{"class":313},[45,149094,51518],{"class":51},[45,149096,731],{"class":257},[45,149098,5013],{"class":51},[45,149100,149101],{"class":47,"line":1400},[45,149102,149051],{"class":51},[45,149104,149105],{"class":47,"line":1412},[45,149106,1648],{"class":51},[10,149108,149109],{},"绘制多地区趋势：",[35,149111,149113],{"className":37,"code":149112,"language":39,"meta":40,"style":40},"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",[42,149114,149115,149129,149139,149143,149168,149172,149180,149184,149188,149200,149222,149235,149239,149243,149260,149276,149280],{"__ignoreMap":40},[45,149116,149117,149119,149121,149123,149125,149127],{"class":47,"line":48},[45,149118,30818],{"class":93},[45,149120,147430],{"class":51},[45,149122,30473],{"class":93},[45,149124,147435],{"class":51},[45,149126,31464],{"class":93},[45,149128,147440],{"class":51},[45,149130,149131,149133,149135,149137],{"class":47,"line":125},[45,149132,30818],{"class":93},[45,149134,147289],{"class":51},[45,149136,30473],{"class":93},[45,149138,147294],{"class":51},[45,149140,149141],{"class":47,"line":1262},[45,149142,2483],{"emptyLinePlaceholder":133},[45,149144,149145,149147,149149,149151,149153,149155,149157,149159,149161,149164,149166],{"class":47,"line":1277},[45,149146,147851],{"class":51},[45,149148,254],{"class":93},[45,149150,148774],{"class":51},[45,149152,148048],{"class":313},[45,149154,4526],{"class":51},[45,149156,3108],{"class":93},[45,149158,148260],{"class":51},[45,149160,26126],{"class":93},[45,149162,149163],{"class":51}," data[",[45,149165,69350],{"class":313},[45,149167,77608],{"class":51},[45,149169,149170],{"class":47,"line":1283},[45,149171,2483],{"emptyLinePlaceholder":133},[45,149173,149174,149176,149178],{"class":47,"line":1297},[45,149175,147303],{"class":51},[45,149177,254],{"class":93},[45,149179,147308],{"class":51},[45,149181,149182],{"class":47,"line":1303},[45,149183,147892],{"class":51},[45,149185,149186],{"class":47,"line":1394},[45,149187,2483],{"emptyLinePlaceholder":133},[45,149189,149190,149192,149195,149197],{"class":47,"line":1400},[45,149191,3108],{"class":93},[45,149193,149194],{"class":51}," city, records ",[45,149196,26126],{"class":93},[45,149198,149199],{"class":51}," data.items():\n",[45,149201,149202,149205,149207,149209,149211,149213,149215,149217,149219],{"class":47,"line":1412},[45,149203,149204],{"class":51},"    values ",[45,149206,254],{"class":93},[45,149208,148774],{"class":51},[45,149210,149019],{"class":313},[45,149212,4526],{"class":51},[45,149214,3108],{"class":93},[45,149216,148260],{"class":51},[45,149218,26126],{"class":93},[45,149220,149221],{"class":51}," records]\n",[45,149223,149224,149227,149229,149231,149233],{"class":47,"line":1695},[45,149225,149226],{"class":51},"    line.add_yaxis(city, values, ",[45,149228,147796],{"class":5299},[45,149230,254],{"class":93},[45,149232,31557],{"class":257},[45,149234,215],{"class":51},[45,149236,149237],{"class":47,"line":1700},[45,149238,2483],{"emptyLinePlaceholder":133},[45,149240,149241],{"class":47,"line":1706},[45,149242,147519],{"class":51},[45,149244,149245,149247,149249,149251,149253,149255,149258],{"class":47,"line":1711},[45,149246,147524],{"class":5299},[45,149248,254],{"class":93},[45,149250,147529],{"class":51},[45,149252,51488],{"class":5299},[45,149254,254],{"class":93},[45,149256,149257],{"class":313},"\"多地区趋势图\"",[45,149259,38128],{"class":51},[45,149261,149262,149264,149266,149268,149270,149272,149274],{"class":47,"line":1725},[45,149263,147580],{"class":5299},[45,149265,254],{"class":93},[45,149267,147585],{"class":51},[45,149269,147588],{"class":5299},[45,149271,254],{"class":93},[45,149273,147593],{"class":313},[45,149275,38128],{"class":51},[45,149277,149278],{"class":47,"line":1730},[45,149279,215],{"class":51},[45,149281,149282,149284,149287],{"class":47,"line":1736},[45,149283,147375],{"class":51},[45,149285,149286],{"class":313},"\"trend.html\"",[45,149288,215],{"class":51},[10,149290,149291],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[30,149293,149295],{"id":149294},"_1012-易错点","10.12 易错点",[159,149297,149298,149304,149310,149320,149326],{},[162,149299,149300,149303],{},[42,149301,149302],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[162,149305,149306,149309],{},[42,149307,149308],{},"render()"," 生成的是 HTML，不是图片。",[162,149311,149312,149313,149316,149317,28468],{},"JSON 字符串用 ",[42,149314,149315],{},"json.loads()","，JSON 文件用 ",[42,149318,149319],{},"json.load()",[162,149321,149322,149323,28468],{},"中文 JSON 保存时加 ",[42,149324,149325],{},"ensure_ascii=False",[162,149327,149328],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[30,149330,149332],{"id":149331},"_1013-本章练习","10.13 本章练习",[159,149334,149335,149338,149341,149344,149347],{},[162,149336,149337],{},"安装 pyecharts 并生成第一个折线图。",[162,149339,149340],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[162,149342,149343],{},"绘制两条折线，对比线上和线下销售额。",[162,149345,149346],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[162,149348,149349],{},"对含有空值的销售数据进行清洗后再绘图。",[121,149351,149352],{},"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":40,"searchDepth":125,"depth":125,"links":149354},[149355,149356,149357,149358,149359,149360,149361,149362,149363,149364,149365,149366,149367],{"id":146971,"depth":125,"text":146972},{"id":147046,"depth":125,"text":147047},{"id":147225,"depth":125,"text":147226},{"id":147276,"depth":125,"text":147277},{"id":147410,"depth":125,"text":147411},{"id":147686,"depth":125,"text":147687},{"id":147812,"depth":125,"text":147813},{"id":148023,"depth":125,"text":148024},{"id":148394,"depth":125,"text":148395},{"id":148606,"depth":125,"text":148607},{"id":148978,"depth":125,"text":148979},{"id":149294,"depth":125,"text":149295},{"id":149331,"depth":125,"text":149332},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146963,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149374,"title":149375,"body":149376,"description":130,"extension":131,"meta":151736,"navigation":133,"path":151737,"seo":151738,"stem":151739,"__hash__":151740},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149377,"toc":151713},[149378,149381,149385,149388,149391,149467,149470,149561,149564,149568,149571,149615,149628,149632,149635,149702,149705,149709,149712,149796,149804,149808,149813,149954,149957,149968,149974,149980,150094,150098,150101,150104,150357,150360,150364,150367,150471,150474,150478,150629,150633,150640,150753,150757,150760,150866,150869,150873,150876,150907,150910,151015,151018,151022,151026,151036,151104,151108,151115,151179,151182,151186,151192,151288,151297,151301,151625,151634,151638,151666,151670,151710],[20,149379,149375],{"id":149380},"_11-面向对象基础",[30,149382,149384],{"id":149383},"_111-什么是面向对象","11.1 什么是面向对象",[10,149386,149387],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[10,149389,149390],{},"面向过程：",[35,149392,149394],{"className":37,"code":149393,"language":39,"meta":40,"style":40},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[42,149395,149396,149405,149413,149417,149427,149458,149462],{"__ignoreMap":40},[45,149397,149398,149400,149402],{"class":47,"line":48},[45,149399,146587],{"class":51},[45,149401,254],{"class":93},[45,149403,149404],{"class":313}," \"小明\"\n",[45,149406,149407,149409,149411],{"class":47,"line":125},[45,149408,146597],{"class":51},[45,149410,254],{"class":93},[45,149412,146602],{"class":257},[45,149414,149415],{"class":47,"line":1262},[45,149416,2483],{"emptyLinePlaceholder":133},[45,149418,149419,149421,149424],{"class":47,"line":1277},[45,149420,32028],{"class":93},[45,149422,149423],{"class":2046}," introduce",[45,149425,149426],{"class":51},"(name, age):\n",[45,149428,149429,149431,149433,149435,149438,149440,149442,149444,149447,149449,149451,149453,149456],{"class":47,"line":1283},[45,149430,31380],{"class":257},[45,149432,209],{"class":51},[45,149434,261],{"class":93},[45,149436,149437],{"class":313},"\"我叫",[45,149439,1103],{"class":257},[45,149441,79891],{"class":51},[45,149443,1153],{"class":257},[45,149445,149446],{"class":313},"，今年",[45,149448,1103],{"class":257},[45,149450,70302],{"class":51},[45,149452,1153],{"class":257},[45,149454,149455],{"class":313},"岁\"",[45,149457,215],{"class":51},[45,149459,149460],{"class":47,"line":1297},[45,149461,2483],{"emptyLinePlaceholder":133},[45,149463,149464],{"class":47,"line":1303},[45,149465,149466],{"class":51},"introduce(name, age)\n",[10,149468,149469],{},"面向对象：",[35,149471,149473],{"className":37,"code":149472,"language":39,"meta":40,"style":40},"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",[42,149474,149475,149483,149491,149520,149524,149528,149538,149547,149556],{"__ignoreMap":40},[45,149476,149477,149479,149481],{"class":47,"line":48},[45,149478,14777],{"class":93},[45,149480,7981],{"class":2046},[45,149482,3822],{"class":51},[45,149484,149485,149487,149489],{"class":47,"line":125},[45,149486,30882],{"class":93},[45,149488,149423],{"class":2046},[45,149490,30888],{"class":51},[45,149492,149493,149495,149497,149499,149501,149504,149506,149508,149510,149512,149514,149516,149518],{"class":47,"line":1262},[45,149494,32532],{"class":257},[45,149496,209],{"class":51},[45,149498,261],{"class":93},[45,149500,149437],{"class":313},[45,149502,149503],{"class":257},"{self",[45,149505,80382],{"class":51},[45,149507,1153],{"class":257},[45,149509,149446],{"class":313},[45,149511,149503],{"class":257},[45,149513,80394],{"class":51},[45,149515,1153],{"class":257},[45,149517,149455],{"class":313},[45,149519,215],{"class":51},[45,149521,149522],{"class":47,"line":1277},[45,149523,2483],{"emptyLinePlaceholder":133},[45,149525,149526],{"class":47,"line":1283},[45,149527,2483],{"emptyLinePlaceholder":133},[45,149529,149530,149533,149535],{"class":47,"line":1297},[45,149531,149532],{"class":51},"student ",[45,149534,254],{"class":93},[45,149536,149537],{"class":51}," Student()\n",[45,149539,149540,149543,149545],{"class":47,"line":1303},[45,149541,149542],{"class":51},"student.name ",[45,149544,254],{"class":93},[45,149546,149404],{"class":313},[45,149548,149549,149552,149554],{"class":47,"line":1394},[45,149550,149551],{"class":51},"student.age ",[45,149553,254],{"class":93},[45,149555,146602],{"class":257},[45,149557,149558],{"class":47,"line":1400},[45,149559,149560],{"class":51},"student.introduce()\n",[10,149562,149563],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[30,149565,149567],{"id":149566},"_112-类和对象","11.2 类和对象",[10,149569,149570],{},"类是模板，对象是根据模板创建出来的具体实例。",[35,149572,149574],{"className":37,"code":149573,"language":39,"meta":40,"style":40},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[42,149575,149576,149584,149589,149593,149597,149606],{"__ignoreMap":40},[45,149577,149578,149580,149582],{"class":47,"line":48},[45,149579,14777],{"class":93},[45,149581,7981],{"class":2046},[45,149583,3822],{"class":51},[45,149585,149586],{"class":47,"line":125},[45,149587,149588],{"class":93},"    pass\n",[45,149590,149591],{"class":47,"line":1262},[45,149592,2483],{"emptyLinePlaceholder":133},[45,149594,149595],{"class":47,"line":1277},[45,149596,2483],{"emptyLinePlaceholder":133},[45,149598,149599,149602,149604],{"class":47,"line":1283},[45,149600,149601],{"class":51},"student1 ",[45,149603,254],{"class":93},[45,149605,149537],{"class":51},[45,149607,149608,149611,149613],{"class":47,"line":1297},[45,149609,149610],{"class":51},"student2 ",[45,149612,254],{"class":93},[45,149614,149537],{"class":51},[10,149616,149617,149620,149621,101069,149624,149627],{},[42,149618,149619],{},"Student"," 是类，",[42,149622,149623],{},"student1",[42,149625,149626],{},"student2"," 是对象。",[30,149629,149631],{"id":149630},"_113-属性","11.3 属性",[10,149633,149634],{},"属性是对象保存的数据。",[35,149636,149638],{"className":37,"code":149637,"language":39,"meta":40,"style":40},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[42,149639,149640,149648,149652,149656,149660,149668,149676,149684,149688,149695],{"__ignoreMap":40},[45,149641,149642,149644,149646],{"class":47,"line":48},[45,149643,14777],{"class":93},[45,149645,7981],{"class":2046},[45,149647,3822],{"class":51},[45,149649,149650],{"class":47,"line":125},[45,149651,149588],{"class":93},[45,149653,149654],{"class":47,"line":1262},[45,149655,2483],{"emptyLinePlaceholder":133},[45,149657,149658],{"class":47,"line":1277},[45,149659,2483],{"emptyLinePlaceholder":133},[45,149661,149662,149664,149666],{"class":47,"line":1283},[45,149663,149532],{"class":51},[45,149665,254],{"class":93},[45,149667,149537],{"class":51},[45,149669,149670,149672,149674],{"class":47,"line":1297},[45,149671,149542],{"class":51},[45,149673,254],{"class":93},[45,149675,149404],{"class":313},[45,149677,149678,149680,149682],{"class":47,"line":1303},[45,149679,149551],{"class":51},[45,149681,254],{"class":93},[45,149683,146602],{"class":257},[45,149685,149686],{"class":47,"line":1394},[45,149687,2483],{"emptyLinePlaceholder":133},[45,149689,149690,149692],{"class":47,"line":1400},[45,149691,30496],{"class":257},[45,149693,149694],{"class":51},"(student.name)\n",[45,149696,149697,149699],{"class":47,"line":1412},[45,149698,30496],{"class":257},[45,149700,149701],{"class":51},"(student.age)\n",[10,149703,149704],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[30,149706,149708],{"id":149707},"_114-方法","11.4 方法",[10,149710,149711],{},"类中的函数叫方法。",[35,149713,149714],{"className":37,"code":149472,"language":39,"meta":40,"style":40},[42,149715,149716,149724,149732,149760,149764,149768,149776,149784,149792],{"__ignoreMap":40},[45,149717,149718,149720,149722],{"class":47,"line":48},[45,149719,14777],{"class":93},[45,149721,7981],{"class":2046},[45,149723,3822],{"class":51},[45,149725,149726,149728,149730],{"class":47,"line":125},[45,149727,30882],{"class":93},[45,149729,149423],{"class":2046},[45,149731,30888],{"class":51},[45,149733,149734,149736,149738,149740,149742,149744,149746,149748,149750,149752,149754,149756,149758],{"class":47,"line":1262},[45,149735,32532],{"class":257},[45,149737,209],{"class":51},[45,149739,261],{"class":93},[45,149741,149437],{"class":313},[45,149743,149503],{"class":257},[45,149745,80382],{"class":51},[45,149747,1153],{"class":257},[45,149749,149446],{"class":313},[45,149751,149503],{"class":257},[45,149753,80394],{"class":51},[45,149755,1153],{"class":257},[45,149757,149455],{"class":313},[45,149759,215],{"class":51},[45,149761,149762],{"class":47,"line":1277},[45,149763,2483],{"emptyLinePlaceholder":133},[45,149765,149766],{"class":47,"line":1283},[45,149767,2483],{"emptyLinePlaceholder":133},[45,149769,149770,149772,149774],{"class":47,"line":1297},[45,149771,149532],{"class":51},[45,149773,254],{"class":93},[45,149775,149537],{"class":51},[45,149777,149778,149780,149782],{"class":47,"line":1303},[45,149779,149542],{"class":51},[45,149781,254],{"class":93},[45,149783,149404],{"class":313},[45,149785,149786,149788,149790],{"class":47,"line":1394},[45,149787,149551],{"class":51},[45,149789,254],{"class":93},[45,149791,146602],{"class":257},[45,149793,149794],{"class":47,"line":1400},[45,149795,149560],{"class":51},[10,149797,149798,149800,149801,149803],{},[42,149799,30904],{}," 表示当前对象。调用方法时不需要手动传入 ",[42,149802,30904],{},"，Python 会自动传。",[30,149805,149807],{"id":149806},"_115-构造方法__init__","11.5 构造方法__init__",[10,149809,149810,149812],{},[42,149811,30910],{}," 在对象创建时自动执行，用于初始化属性。",[35,149814,149816],{"className":37,"code":149815,"language":39,"meta":40,"style":40},"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",[42,149817,149818,149826,149835,149847,149859,149870,149874,149882,149920,149924,149928,149950],{"__ignoreMap":40},[45,149819,149820,149822,149824],{"class":47,"line":48},[45,149821,14777],{"class":93},[45,149823,7981],{"class":2046},[45,149825,3822],{"class":51},[45,149827,149828,149830,149832],{"class":47,"line":125},[45,149829,30882],{"class":93},[45,149831,30885],{"class":257},[45,149833,149834],{"class":51},"(self, name, age, score):\n",[45,149836,149837,149839,149842,149844],{"class":47,"line":1262},[45,149838,30926],{"class":257},[45,149840,149841],{"class":51},".name ",[45,149843,254],{"class":93},[45,149845,149846],{"class":51}," name\n",[45,149848,149849,149851,149854,149856],{"class":47,"line":1277},[45,149850,30926],{"class":257},[45,149852,149853],{"class":51},".age ",[45,149855,254],{"class":93},[45,149857,149858],{"class":51}," age\n",[45,149860,149861,149863,149866,149868],{"class":47,"line":1283},[45,149862,30926],{"class":257},[45,149864,149865],{"class":51},".score ",[45,149867,254],{"class":93},[45,149869,1662],{"class":51},[45,149871,149872],{"class":47,"line":1297},[45,149873,2483],{"emptyLinePlaceholder":133},[45,149875,149876,149878,149880],{"class":47,"line":1303},[45,149877,30882],{"class":93},[45,149879,149423],{"class":2046},[45,149881,30888],{"class":51},[45,149883,149884,149886,149888,149890,149892,149894,149896,149898,149900,149902,149904,149906,149909,149911,149914,149916,149918],{"class":47,"line":1394},[45,149885,32532],{"class":257},[45,149887,209],{"class":51},[45,149889,261],{"class":93},[45,149891,149437],{"class":313},[45,149893,149503],{"class":257},[45,149895,80382],{"class":51},[45,149897,1153],{"class":257},[45,149899,149446],{"class":313},[45,149901,149503],{"class":257},[45,149903,80394],{"class":51},[45,149905,1153],{"class":257},[45,149907,149908],{"class":313},"岁，成绩",[45,149910,149503],{"class":257},[45,149912,149913],{"class":51},".score",[45,149915,1153],{"class":257},[45,149917,459],{"class":313},[45,149919,215],{"class":51},[45,149921,149922],{"class":47,"line":1400},[45,149923,2483],{"emptyLinePlaceholder":133},[45,149925,149926],{"class":47,"line":1412},[45,149927,2483],{"emptyLinePlaceholder":133},[45,149929,149930,149932,149934,149937,149940,149942,149944,149946,149948],{"class":47,"line":1695},[45,149931,149532],{"class":51},[45,149933,254],{"class":93},[45,149935,149936],{"class":51}," Student(",[45,149938,149939],{"class":313},"\"小明\"",[45,149941,12518],{"class":51},[45,149943,857],{"class":257},[45,149945,12518],{"class":51},[45,149947,1196],{"class":257},[45,149949,215],{"class":51},[45,149951,149952],{"class":47,"line":1700},[45,149953,149560],{"class":51},[10,149955,149956],{},"构造方法的好处：",[159,149958,149959,149962,149965],{},[162,149960,149961],{},"创建对象时必须提供必要数据。",[162,149963,149964],{},"属性初始化集中，不容易漏。",[162,149966,149967],{},"对象状态更完整。",[30,149969,149971,149972],{"id":149970},"_116-str","11.6 ",[358,149973,1382],{},[10,149975,149976,149977,28468],{},"直接打印对象时，默认输出不直观。可以定义 ",[42,149978,149979],{},"__str__",[35,149981,149983],{"className":37,"code":149982,"language":39,"meta":40,"style":40},"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",[42,149984,149985,149993,150002,150012,150022,150026,150035,150063,150067,150071,150087],{"__ignoreMap":40},[45,149986,149987,149989,149991],{"class":47,"line":48},[45,149988,14777],{"class":93},[45,149990,7981],{"class":2046},[45,149992,3822],{"class":51},[45,149994,149995,149997,149999],{"class":47,"line":125},[45,149996,30882],{"class":93},[45,149998,30885],{"class":257},[45,150000,150001],{"class":51},"(self, name, age):\n",[45,150003,150004,150006,150008,150010],{"class":47,"line":1262},[45,150005,30926],{"class":257},[45,150007,149841],{"class":51},[45,150009,254],{"class":93},[45,150011,149846],{"class":51},[45,150013,150014,150016,150018,150020],{"class":47,"line":1277},[45,150015,30926],{"class":257},[45,150017,149853],{"class":51},[45,150019,254],{"class":93},[45,150021,149858],{"class":51},[45,150023,150024],{"class":47,"line":1283},[45,150025,2483],{"emptyLinePlaceholder":133},[45,150027,150028,150030,150033],{"class":47,"line":1297},[45,150029,30882],{"class":93},[45,150031,150032],{"class":257}," __str__",[45,150034,30888],{"class":51},[45,150036,150037,150039,150042,150045,150047,150049,150051,150054,150056,150058,150060],{"class":47,"line":1303},[45,150038,14835],{"class":93},[45,150040,150041],{"class":93}," f",[45,150043,150044],{"class":313},"\"Student(name=",[45,150046,149503],{"class":257},[45,150048,80382],{"class":51},[45,150050,1153],{"class":257},[45,150052,150053],{"class":313},", age=",[45,150055,149503],{"class":257},[45,150057,80394],{"class":51},[45,150059,1153],{"class":257},[45,150061,150062],{"class":313},")\"\n",[45,150064,150065],{"class":47,"line":1394},[45,150066,2483],{"emptyLinePlaceholder":133},[45,150068,150069],{"class":47,"line":1400},[45,150070,2483],{"emptyLinePlaceholder":133},[45,150072,150073,150075,150077,150079,150081,150083,150085],{"class":47,"line":1412},[45,150074,149532],{"class":51},[45,150076,254],{"class":93},[45,150078,149936],{"class":51},[45,150080,149939],{"class":313},[45,150082,12518],{"class":51},[45,150084,857],{"class":257},[45,150086,215],{"class":51},[45,150088,150089,150091],{"class":47,"line":1695},[45,150090,30496],{"class":257},[45,150092,150093],{"class":51},"(student)\n",[30,150095,150097],{"id":150096},"_117-封装","11.7 封装",[10,150099,150100],{},"封装就是把数据和方法放到类中，并控制访问方式。",[10,150102,150103],{},"Python 中以双下划线开头的属性通常视为私有属性。",[35,150105,150107],{"className":37,"code":150106,"language":39,"meta":40,"style":40},"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",[42,150108,150109,150118,150127,150139,150151,150155,150164,150173,150177,150187,150200,150211,150216,150227,150231,150240,150252,150263,150267,150280,150291,150295,150306,150310,150314,150332,150341,150350],{"__ignoreMap":40},[45,150110,150111,150113,150116],{"class":47,"line":48},[45,150112,14777],{"class":93},[45,150114,150115],{"class":2046}," Account",[45,150117,3822],{"class":51},[45,150119,150120,150122,150124],{"class":47,"line":125},[45,150121,30882],{"class":93},[45,150123,30885],{"class":257},[45,150125,150126],{"class":51},"(self, owner, balance):\n",[45,150128,150129,150131,150134,150136],{"class":47,"line":1262},[45,150130,30926],{"class":257},[45,150132,150133],{"class":51},".owner ",[45,150135,254],{"class":93},[45,150137,150138],{"class":51}," owner\n",[45,150140,150141,150143,150146,150148],{"class":47,"line":1277},[45,150142,30926],{"class":257},[45,150144,150145],{"class":51},".__balance ",[45,150147,254],{"class":93},[45,150149,150150],{"class":51}," balance\n",[45,150152,150153],{"class":47,"line":1283},[45,150154,2483],{"emptyLinePlaceholder":133},[45,150156,150157,150159,150162],{"class":47,"line":1297},[45,150158,30882],{"class":93},[45,150160,150161],{"class":2046}," get_balance",[45,150163,30888],{"class":51},[45,150165,150166,150168,150170],{"class":47,"line":1303},[45,150167,14835],{"class":93},[45,150169,38954],{"class":257},[45,150171,150172],{"class":51},".__balance\n",[45,150174,150175],{"class":47,"line":1394},[45,150176,2483],{"emptyLinePlaceholder":133},[45,150178,150179,150181,150184],{"class":47,"line":1400},[45,150180,30882],{"class":93},[45,150182,150183],{"class":2046}," deposit",[45,150185,150186],{"class":51},"(self, money):\n",[45,150188,150189,150191,150194,150196,150198],{"class":47,"line":1412},[45,150190,2580],{"class":93},[45,150192,150193],{"class":51}," money ",[45,150195,1671],{"class":93},[45,150197,4176],{"class":257},[45,150199,3822],{"class":51},[45,150201,150202,150204,150206,150209],{"class":47,"line":1695},[45,150203,34731],{"class":257},[45,150205,209],{"class":51},[45,150207,150208],{"class":313},"\"存款金额必须大于0\"",[45,150210,215],{"class":51},[45,150212,150213],{"class":47,"line":1700},[45,150214,150215],{"class":93},"            return\n",[45,150217,150218,150220,150222,150224],{"class":47,"line":1706},[45,150219,30926],{"class":257},[45,150221,150145],{"class":51},[45,150223,9560],{"class":93},[45,150225,150226],{"class":51}," money\n",[45,150228,150229],{"class":47,"line":1711},[45,150230,2483],{"emptyLinePlaceholder":133},[45,150232,150233,150235,150238],{"class":47,"line":1725},[45,150234,30882],{"class":93},[45,150236,150237],{"class":2046}," withdraw",[45,150239,150186],{"class":51},[45,150241,150242,150244,150246,150248,150250],{"class":47,"line":1730},[45,150243,2580],{"class":93},[45,150245,150193],{"class":51},[45,150247,1671],{"class":93},[45,150249,4176],{"class":257},[45,150251,3822],{"class":51},[45,150253,150254,150256,150258,150261],{"class":47,"line":1736},[45,150255,34731],{"class":257},[45,150257,209],{"class":51},[45,150259,150260],{"class":313},"\"取款金额必须大于0\"",[45,150262,215],{"class":51},[45,150264,150265],{"class":47,"line":1757},[45,150266,150215],{"class":93},[45,150268,150269,150271,150273,150275,150277],{"class":47,"line":1762},[45,150270,2580],{"class":93},[45,150272,150193],{"class":51},[45,150274,1167],{"class":93},[45,150276,38954],{"class":257},[45,150278,150279],{"class":51},".__balance:\n",[45,150281,150282,150284,150286,150289],{"class":47,"line":1776},[45,150283,34731],{"class":257},[45,150285,209],{"class":51},[45,150287,150288],{"class":313},"\"余额不足\"",[45,150290,215],{"class":51},[45,150292,150293],{"class":47,"line":1781},[45,150294,150215],{"class":93},[45,150296,150297,150299,150301,150304],{"class":47,"line":1810},[45,150298,30926],{"class":257},[45,150300,150145],{"class":51},[45,150302,150303],{"class":93},"-=",[45,150305,150226],{"class":51},[45,150307,150308],{"class":47,"line":1815},[45,150309,2483],{"emptyLinePlaceholder":133},[45,150311,150312],{"class":47,"line":1832},[45,150313,2483],{"emptyLinePlaceholder":133},[45,150315,150316,150319,150321,150324,150326,150328,150330],{"class":47,"line":1837},[45,150317,150318],{"class":51},"account ",[45,150320,254],{"class":93},[45,150322,150323],{"class":51}," Account(",[45,150325,149939],{"class":313},[45,150327,12518],{"class":51},[45,150329,6493],{"class":257},[45,150331,215],{"class":51},[45,150333,150334,150337,150339],{"class":47,"line":1842},[45,150335,150336],{"class":51},"account.deposit(",[45,150338,1805],{"class":257},[45,150340,215],{"class":51},[45,150342,150343,150346,150348],{"class":47,"line":1847},[45,150344,150345],{"class":51},"account.withdraw(",[45,150347,519],{"class":257},[45,150349,215],{"class":51},[45,150351,150352,150354],{"class":47,"line":1861},[45,150353,30496],{"class":257},[45,150355,150356],{"class":51},"(account.get_balance())\n",[10,150358,150359],{},"封装的意义是避免外部随意修改内部状态。",[30,150361,150363],{"id":150362},"_118-继承","11.8 继承",[10,150365,150366],{},"继承可以让子类复用父类的属性和方法。",[35,150368,150370],{"className":37,"code":150369,"language":39,"meta":40,"style":40},"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",[42,150371,150372,150381,150390,150401,150405,150409,150423,150432,150443,150447,150451,150461,150466],{"__ignoreMap":40},[45,150373,150374,150376,150379],{"class":47,"line":48},[45,150375,14777],{"class":93},[45,150377,150378],{"class":2046}," Animal",[45,150380,3822],{"class":51},[45,150382,150383,150385,150388],{"class":47,"line":125},[45,150384,30882],{"class":93},[45,150386,150387],{"class":2046}," eat",[45,150389,30888],{"class":51},[45,150391,150392,150394,150396,150399],{"class":47,"line":1262},[45,150393,32532],{"class":257},[45,150395,209],{"class":51},[45,150397,150398],{"class":313},"\"吃东西\"",[45,150400,215],{"class":51},[45,150402,150403],{"class":47,"line":1277},[45,150404,2483],{"emptyLinePlaceholder":133},[45,150406,150407],{"class":47,"line":1283},[45,150408,2483],{"emptyLinePlaceholder":133},[45,150410,150411,150413,150416,150418,150421],{"class":47,"line":1297},[45,150412,14777],{"class":93},[45,150414,150415],{"class":2046}," Dog",[45,150417,209],{"class":51},[45,150419,150420],{"class":2046},"Animal",[45,150422,30867],{"class":51},[45,150424,150425,150427,150430],{"class":47,"line":1303},[45,150426,30882],{"class":93},[45,150428,150429],{"class":2046}," bark",[45,150431,30888],{"class":51},[45,150433,150434,150436,150438,150441],{"class":47,"line":1394},[45,150435,32532],{"class":257},[45,150437,209],{"class":51},[45,150439,150440],{"class":313},"\"汪汪\"",[45,150442,215],{"class":51},[45,150444,150445],{"class":47,"line":1400},[45,150446,2483],{"emptyLinePlaceholder":133},[45,150448,150449],{"class":47,"line":1412},[45,150450,2483],{"emptyLinePlaceholder":133},[45,150452,150453,150456,150458],{"class":47,"line":1695},[45,150454,150455],{"class":51},"dog ",[45,150457,254],{"class":93},[45,150459,150460],{"class":51}," Dog()\n",[45,150462,150463],{"class":47,"line":1700},[45,150464,150465],{"class":51},"dog.eat()\n",[45,150467,150468],{"class":47,"line":1706},[45,150469,150470],{"class":51},"dog.bark()\n",[10,150472,150473],{},"子类可以扩展新方法，也可以重写父类方法。",[30,150475,150477],{"id":150476},"_119-方法重写","11.9 方法重写",[35,150479,150481],{"className":37,"code":150480,"language":39,"meta":40,"style":40},"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",[42,150482,150483,150491,150500,150511,150515,150519,150531,150539,150549,150553,150557,150570,150578,150589,150593,150597,150605,150615,150619,150624],{"__ignoreMap":40},[45,150484,150485,150487,150489],{"class":47,"line":48},[45,150486,14777],{"class":93},[45,150488,150378],{"class":2046},[45,150490,3822],{"class":51},[45,150492,150493,150495,150498],{"class":47,"line":125},[45,150494,30882],{"class":93},[45,150496,150497],{"class":2046}," speak",[45,150499,30888],{"class":51},[45,150501,150502,150504,150506,150509],{"class":47,"line":1262},[45,150503,32532],{"class":257},[45,150505,209],{"class":51},[45,150507,150508],{"class":313},"\"动物叫\"",[45,150510,215],{"class":51},[45,150512,150513],{"class":47,"line":1277},[45,150514,2483],{"emptyLinePlaceholder":133},[45,150516,150517],{"class":47,"line":1283},[45,150518,2483],{"emptyLinePlaceholder":133},[45,150520,150521,150523,150525,150527,150529],{"class":47,"line":1297},[45,150522,14777],{"class":93},[45,150524,150415],{"class":2046},[45,150526,209],{"class":51},[45,150528,150420],{"class":2046},[45,150530,30867],{"class":51},[45,150532,150533,150535,150537],{"class":47,"line":1303},[45,150534,30882],{"class":93},[45,150536,150497],{"class":2046},[45,150538,30888],{"class":51},[45,150540,150541,150543,150545,150547],{"class":47,"line":1394},[45,150542,32532],{"class":257},[45,150544,209],{"class":51},[45,150546,150440],{"class":313},[45,150548,215],{"class":51},[45,150550,150551],{"class":47,"line":1400},[45,150552,2483],{"emptyLinePlaceholder":133},[45,150554,150555],{"class":47,"line":1412},[45,150556,2483],{"emptyLinePlaceholder":133},[45,150558,150559,150561,150564,150566,150568],{"class":47,"line":1695},[45,150560,14777],{"class":93},[45,150562,150563],{"class":2046}," Cat",[45,150565,209],{"class":51},[45,150567,150420],{"class":2046},[45,150569,30867],{"class":51},[45,150571,150572,150574,150576],{"class":47,"line":1700},[45,150573,30882],{"class":93},[45,150575,150497],{"class":2046},[45,150577,30888],{"class":51},[45,150579,150580,150582,150584,150587],{"class":47,"line":1706},[45,150581,32532],{"class":257},[45,150583,209],{"class":51},[45,150585,150586],{"class":313},"\"喵喵\"",[45,150588,215],{"class":51},[45,150590,150591],{"class":47,"line":1711},[45,150592,2483],{"emptyLinePlaceholder":133},[45,150594,150595],{"class":47,"line":1725},[45,150596,2483],{"emptyLinePlaceholder":133},[45,150598,150599,150601,150603],{"class":47,"line":1730},[45,150600,150455],{"class":51},[45,150602,254],{"class":93},[45,150604,150460],{"class":51},[45,150606,150607,150610,150612],{"class":47,"line":1736},[45,150608,150609],{"class":51},"cat ",[45,150611,254],{"class":93},[45,150613,150614],{"class":51}," Cat()\n",[45,150616,150617],{"class":47,"line":1757},[45,150618,2483],{"emptyLinePlaceholder":133},[45,150620,150621],{"class":47,"line":1762},[45,150622,150623],{"class":51},"dog.speak()\n",[45,150625,150626],{"class":47,"line":1776},[45,150627,150628],{"class":51},"cat.speak()\n",[30,150630,150632],{"id":150631},"_1110-super","11.10 super",[10,150634,150635,150636,150639],{},"子类可以通过 ",[42,150637,150638],{},"super()"," 调用父类方法。",[35,150641,150643],{"className":37,"code":150642,"language":39,"meta":40,"style":40},"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",[42,150644,150645,150653,150662,150672,150676,150680,150692,150701,150712,150722,150726,150730,150746],{"__ignoreMap":40},[45,150646,150647,150649,150651],{"class":47,"line":48},[45,150648,14777],{"class":93},[45,150650,15652],{"class":2046},[45,150652,3822],{"class":51},[45,150654,150655,150657,150659],{"class":47,"line":125},[45,150656,30882],{"class":93},[45,150658,30885],{"class":257},[45,150660,150661],{"class":51},"(self, name):\n",[45,150663,150664,150666,150668,150670],{"class":47,"line":1262},[45,150665,30926],{"class":257},[45,150667,149841],{"class":51},[45,150669,254],{"class":93},[45,150671,149846],{"class":51},[45,150673,150674],{"class":47,"line":1277},[45,150675,2483],{"emptyLinePlaceholder":133},[45,150677,150678],{"class":47,"line":1283},[45,150679,2483],{"emptyLinePlaceholder":133},[45,150681,150682,150684,150686,150688,150690],{"class":47,"line":1297},[45,150683,14777],{"class":93},[45,150685,7981],{"class":2046},[45,150687,209],{"class":51},[45,150689,19129],{"class":2046},[45,150691,30867],{"class":51},[45,150693,150694,150696,150698],{"class":47,"line":1303},[45,150695,30882],{"class":93},[45,150697,30885],{"class":257},[45,150699,150700],{"class":51},"(self, name, score):\n",[45,150702,150703,150705,150707,150709],{"class":47,"line":1394},[45,150704,30898],{"class":257},[45,150706,17344],{"class":51},[45,150708,30910],{"class":257},[45,150710,150711],{"class":51},"(name)\n",[45,150713,150714,150716,150718,150720],{"class":47,"line":1400},[45,150715,30926],{"class":257},[45,150717,149865],{"class":51},[45,150719,254],{"class":93},[45,150721,1662],{"class":51},[45,150723,150724],{"class":47,"line":1412},[45,150725,2483],{"emptyLinePlaceholder":133},[45,150727,150728],{"class":47,"line":1695},[45,150729,2483],{"emptyLinePlaceholder":133},[45,150731,150732,150734,150736,150738,150740,150742,150744],{"class":47,"line":1700},[45,150733,149532],{"class":51},[45,150735,254],{"class":93},[45,150737,149936],{"class":51},[45,150739,149939],{"class":313},[45,150741,12518],{"class":51},[45,150743,1196],{"class":257},[45,150745,215],{"class":51},[45,150747,150748,150750],{"class":47,"line":1706},[45,150749,30496],{"class":257},[45,150751,150752],{"class":51},"(student.name, student.score)\n",[30,150754,150756],{"id":150755},"_1111-多态","11.11 多态",[10,150758,150759],{},"多态指不同对象响应同一个方法，表现出不同结果。",[35,150761,150763],{"className":37,"code":150762,"language":39,"meta":40,"style":40},"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",[42,150764,150765,150773,150781,150791,150795,150799,150807,150815,150825,150829,150833,150843,150848,150852,150856,150861],{"__ignoreMap":40},[45,150766,150767,150769,150771],{"class":47,"line":48},[45,150768,14777],{"class":93},[45,150770,150415],{"class":2046},[45,150772,3822],{"class":51},[45,150774,150775,150777,150779],{"class":47,"line":125},[45,150776,30882],{"class":93},[45,150778,150497],{"class":2046},[45,150780,30888],{"class":51},[45,150782,150783,150785,150787,150789],{"class":47,"line":1262},[45,150784,32532],{"class":257},[45,150786,209],{"class":51},[45,150788,150440],{"class":313},[45,150790,215],{"class":51},[45,150792,150793],{"class":47,"line":1277},[45,150794,2483],{"emptyLinePlaceholder":133},[45,150796,150797],{"class":47,"line":1283},[45,150798,2483],{"emptyLinePlaceholder":133},[45,150800,150801,150803,150805],{"class":47,"line":1297},[45,150802,14777],{"class":93},[45,150804,150563],{"class":2046},[45,150806,3822],{"class":51},[45,150808,150809,150811,150813],{"class":47,"line":1303},[45,150810,30882],{"class":93},[45,150812,150497],{"class":2046},[45,150814,30888],{"class":51},[45,150816,150817,150819,150821,150823],{"class":47,"line":1394},[45,150818,32532],{"class":257},[45,150820,209],{"class":51},[45,150822,150586],{"class":313},[45,150824,215],{"class":51},[45,150826,150827],{"class":47,"line":1400},[45,150828,2483],{"emptyLinePlaceholder":133},[45,150830,150831],{"class":47,"line":1412},[45,150832,2483],{"emptyLinePlaceholder":133},[45,150834,150835,150837,150840],{"class":47,"line":1695},[45,150836,32028],{"class":93},[45,150838,150839],{"class":2046}," make_sound",[45,150841,150842],{"class":51},"(animal):\n",[45,150844,150845],{"class":47,"line":1700},[45,150846,150847],{"class":51},"    animal.speak()\n",[45,150849,150850],{"class":47,"line":1706},[45,150851,2483],{"emptyLinePlaceholder":133},[45,150853,150854],{"class":47,"line":1711},[45,150855,2483],{"emptyLinePlaceholder":133},[45,150857,150858],{"class":47,"line":1725},[45,150859,150860],{"class":51},"make_sound(Dog())\n",[45,150862,150863],{"class":47,"line":1730},[45,150864,150865],{"class":51},"make_sound(Cat())\n",[10,150867,150868],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[30,150870,150872],{"id":150871},"_1112-类属性和实例属性","11.12 类属性和实例属性",[10,150874,150875],{},"实例属性属于对象：",[35,150877,150879],{"className":37,"code":150878,"language":39,"meta":40,"style":40},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[42,150880,150881,150889,150897],{"__ignoreMap":40},[45,150882,150883,150885,150887],{"class":47,"line":48},[45,150884,14777],{"class":93},[45,150886,7981],{"class":2046},[45,150888,3822],{"class":51},[45,150890,150891,150893,150895],{"class":47,"line":125},[45,150892,30882],{"class":93},[45,150894,30885],{"class":257},[45,150896,150661],{"class":51},[45,150898,150899,150901,150903,150905],{"class":47,"line":1262},[45,150900,30926],{"class":257},[45,150902,149841],{"class":51},[45,150904,254],{"class":93},[45,150906,149846],{"class":51},[10,150908,150909],{},"类属性属于类，所有对象共享：",[35,150911,150913],{"className":37,"code":150912,"language":39,"meta":40,"style":40},"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",[42,150914,150915,150923,150933,150937,150945,150955,150959,150963,150976,150990,150994,151001,151008],{"__ignoreMap":40},[45,150916,150917,150919,150921],{"class":47,"line":48},[45,150918,14777],{"class":93},[45,150920,7981],{"class":2046},[45,150922,3822],{"class":51},[45,150924,150925,150928,150930],{"class":47,"line":125},[45,150926,150927],{"class":51},"    school ",[45,150929,254],{"class":93},[45,150931,150932],{"class":313}," \"黑马学校\"\n",[45,150934,150935],{"class":47,"line":1262},[45,150936,2483],{"emptyLinePlaceholder":133},[45,150938,150939,150941,150943],{"class":47,"line":1277},[45,150940,30882],{"class":93},[45,150942,30885],{"class":257},[45,150944,150661],{"class":51},[45,150946,150947,150949,150951,150953],{"class":47,"line":1283},[45,150948,30926],{"class":257},[45,150950,149841],{"class":51},[45,150952,254],{"class":93},[45,150954,149846],{"class":51},[45,150956,150957],{"class":47,"line":1297},[45,150958,2483],{"emptyLinePlaceholder":133},[45,150960,150961],{"class":47,"line":1303},[45,150962,2483],{"emptyLinePlaceholder":133},[45,150964,150965,150968,150970,150972,150974],{"class":47,"line":1394},[45,150966,150967],{"class":51},"s1 ",[45,150969,254],{"class":93},[45,150971,149936],{"class":51},[45,150973,149939],{"class":313},[45,150975,215],{"class":51},[45,150977,150978,150981,150983,150985,150988],{"class":47,"line":1400},[45,150979,150980],{"class":51},"s2 ",[45,150982,254],{"class":93},[45,150984,149936],{"class":51},[45,150986,150987],{"class":313},"\"小红\"",[45,150989,215],{"class":51},[45,150991,150992],{"class":47,"line":1412},[45,150993,2483],{"emptyLinePlaceholder":133},[45,150995,150996,150998],{"class":47,"line":1695},[45,150997,30496],{"class":257},[45,150999,151000],{"class":51},"(s1.school)\n",[45,151002,151003,151005],{"class":47,"line":1700},[45,151004,30496],{"class":257},[45,151006,151007],{"class":51},"(s2.school)\n",[45,151009,151010,151012],{"class":47,"line":1706},[45,151011,30496],{"class":257},[45,151013,151014],{"class":51},"(Student.school)\n",[10,151016,151017],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[30,151019,151021],{"id":151020},"_1113-类方法和静态方法","11.13 类方法和静态方法",[176,151023,151025],{"id":151024},"_11131-类方法","11.13.1 类方法",[10,151027,151028,151029,151032,151033,28468],{},"类方法使用 ",[42,151030,151031],{},"@classmethod","，第一个参数通常是 ",[42,151034,151035],{},"cls",[35,151037,151039],{"className":37,"code":151038,"language":39,"meta":40,"style":40},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[42,151040,151041,151049,151057,151061,151069,151079,151089,151093,151097],{"__ignoreMap":40},[45,151042,151043,151045,151047],{"class":47,"line":48},[45,151044,14777],{"class":93},[45,151046,7981],{"class":2046},[45,151048,3822],{"class":51},[45,151050,151051,151053,151055],{"class":47,"line":125},[45,151052,150927],{"class":51},[45,151054,254],{"class":93},[45,151056,150932],{"class":313},[45,151058,151059],{"class":47,"line":1262},[45,151060,2483],{"emptyLinePlaceholder":133},[45,151062,151063,151066],{"class":47,"line":1277},[45,151064,151065],{"class":2046},"    @",[45,151067,151068],{"class":257},"classmethod\n",[45,151070,151071,151073,151076],{"class":47,"line":1283},[45,151072,30882],{"class":93},[45,151074,151075],{"class":2046}," get_school",[45,151077,151078],{"class":51},"(cls):\n",[45,151080,151081,151083,151086],{"class":47,"line":1297},[45,151082,14835],{"class":93},[45,151084,151085],{"class":257}," cls",[45,151087,151088],{"class":51},".school\n",[45,151090,151091],{"class":47,"line":1303},[45,151092,2483],{"emptyLinePlaceholder":133},[45,151094,151095],{"class":47,"line":1394},[45,151096,2483],{"emptyLinePlaceholder":133},[45,151098,151099,151101],{"class":47,"line":1400},[45,151100,30496],{"class":257},[45,151102,151103],{"class":51},"(Student.get_school())\n",[176,151105,151107],{"id":151106},"_11132-静态方法","11.13.2 静态方法",[10,151109,151110,151111,151114],{},"静态方法使用 ",[42,151112,151113],{},"@staticmethod","，不需要访问实例和类。",[35,151116,151118],{"className":37,"code":151117,"language":39,"meta":40,"style":40},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[42,151119,151120,151129,151136,151145,151156,151160,151164],{"__ignoreMap":40},[45,151121,151122,151124,151127],{"class":47,"line":48},[45,151123,14777],{"class":93},[45,151125,151126],{"class":2046}," MathUtils",[45,151128,3822],{"class":51},[45,151130,151131,151133],{"class":47,"line":125},[45,151132,151065],{"class":2046},[45,151134,151135],{"class":257},"staticmethod\n",[45,151137,151138,151140,151142],{"class":47,"line":1262},[45,151139,30882],{"class":93},[45,151141,5292],{"class":2046},[45,151143,151144],{"class":51},"(a, b):\n",[45,151146,151147,151149,151151,151153],{"class":47,"line":1277},[45,151148,14835],{"class":93},[45,151150,10952],{"class":51},[45,151152,689],{"class":93},[45,151154,151155],{"class":51}," b\n",[45,151157,151158],{"class":47,"line":1283},[45,151159,2483],{"emptyLinePlaceholder":133},[45,151161,151162],{"class":47,"line":1297},[45,151163,2483],{"emptyLinePlaceholder":133},[45,151165,151166,151168,151171,151173,151175,151177],{"class":47,"line":1303},[45,151167,30496],{"class":257},[45,151169,151170],{"class":51},"(MathUtils.add(",[45,151172,426],{"class":257},[45,151174,12518],{"class":51},[45,151176,286],{"class":257},[45,151178,30578],{"class":51},[10,151180,151181],{},"静态方法本质上是放在类命名空间里的普通函数。",[30,151183,151185],{"id":151184},"_1114-dataclass","11.14 dataclass",[10,151187,151188,151191],{},[42,151189,151190],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[35,151193,151195],{"className":37,"code":151194,"language":39,"meta":40,"style":40},"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",[42,151196,151197,151209,151213,151217,151222,151230,151238,151246,151254,151258,151262,151282],{"__ignoreMap":40},[45,151198,151199,151201,151204,151206],{"class":47,"line":48},[45,151200,30818],{"class":93},[45,151202,151203],{"class":51}," dataclasses ",[45,151205,30473],{"class":93},[45,151207,151208],{"class":51}," dataclass\n",[45,151210,151211],{"class":47,"line":125},[45,151212,2483],{"emptyLinePlaceholder":133},[45,151214,151215],{"class":47,"line":1262},[45,151216,2483],{"emptyLinePlaceholder":133},[45,151218,151219],{"class":47,"line":1277},[45,151220,151221],{"class":2046},"@dataclass\n",[45,151223,151224,151226,151228],{"class":47,"line":1283},[45,151225,14777],{"class":93},[45,151227,7981],{"class":2046},[45,151229,3822],{"class":51},[45,151231,151232,151235],{"class":47,"line":1297},[45,151233,151234],{"class":51},"    name: ",[45,151236,151237],{"class":257},"str\n",[45,151239,151240,151243],{"class":47,"line":1303},[45,151241,151242],{"class":51},"    age: ",[45,151244,151245],{"class":257},"int\n",[45,151247,151248,151251],{"class":47,"line":1394},[45,151249,151250],{"class":51},"    score: ",[45,151252,151253],{"class":257},"float\n",[45,151255,151256],{"class":47,"line":1400},[45,151257,2483],{"emptyLinePlaceholder":133},[45,151259,151260],{"class":47,"line":1412},[45,151261,2483],{"emptyLinePlaceholder":133},[45,151263,151264,151266,151268,151270,151272,151274,151276,151278,151280],{"class":47,"line":1695},[45,151265,149532],{"class":51},[45,151267,254],{"class":93},[45,151269,149936],{"class":51},[45,151271,149939],{"class":313},[45,151273,12518],{"class":51},[45,151275,857],{"class":257},[45,151277,12518],{"class":51},[45,151279,1196],{"class":257},[45,151281,215],{"class":51},[45,151283,151284,151286],{"class":47,"line":1700},[45,151285,30496],{"class":257},[45,151287,150093],{"class":51},[10,151289,151290,151291,421,151293,151296],{},"它会自动生成 ",[42,151292,30910],{},[42,151294,151295],{},"__repr__"," 等方法。适合数据模型类。",[30,151298,151300],{"id":151299},"_1115-小案例学生类","11.15 小案例：学生类",[35,151302,151304],{"className":37,"code":151303,"language":39,"meta":40,"style":40},"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",[42,151305,151306,151314,151323,151335,151345,151355,151365,151369,151378,151391,151395,151404,151410,151422,151434,151446,151458,151462,151466,151472,151482,151491,151501,151509,151517,151526,151530,151534,151542,151578,151582,151586,151611,151618],{"__ignoreMap":40},[45,151307,151308,151310,151312],{"class":47,"line":48},[45,151309,14777],{"class":93},[45,151311,7981],{"class":2046},[45,151313,3822],{"class":51},[45,151315,151316,151318,151320],{"class":47,"line":125},[45,151317,30882],{"class":93},[45,151319,30885],{"class":257},[45,151321,151322],{"class":51},"(self, student_id, name, age, score):\n",[45,151324,151325,151327,151330,151332],{"class":47,"line":1262},[45,151326,30926],{"class":257},[45,151328,151329],{"class":51},".student_id ",[45,151331,254],{"class":93},[45,151333,151334],{"class":51}," student_id\n",[45,151336,151337,151339,151341,151343],{"class":47,"line":1277},[45,151338,30926],{"class":257},[45,151340,149841],{"class":51},[45,151342,254],{"class":93},[45,151344,149846],{"class":51},[45,151346,151347,151349,151351,151353],{"class":47,"line":1283},[45,151348,30926],{"class":257},[45,151350,149853],{"class":51},[45,151352,254],{"class":93},[45,151354,149858],{"class":51},[45,151356,151357,151359,151361,151363],{"class":47,"line":1297},[45,151358,30926],{"class":257},[45,151360,149865],{"class":51},[45,151362,254],{"class":93},[45,151364,1662],{"class":51},[45,151366,151367],{"class":47,"line":1303},[45,151368,2483],{"emptyLinePlaceholder":133},[45,151370,151371,151373,151376],{"class":47,"line":1394},[45,151372,30882],{"class":93},[45,151374,151375],{"class":2046}," is_passed",[45,151377,30888],{"class":51},[45,151379,151380,151382,151384,151386,151388],{"class":47,"line":1400},[45,151381,14835],{"class":93},[45,151383,38954],{"class":257},[45,151385,149865],{"class":51},[45,151387,1793],{"class":93},[45,151389,151390],{"class":257}," 60\n",[45,151392,151393],{"class":47,"line":1412},[45,151394,2483],{"emptyLinePlaceholder":133},[45,151396,151397,151399,151402],{"class":47,"line":1695},[45,151398,30882],{"class":93},[45,151400,151401],{"class":2046}," to_dict",[45,151403,30888],{"class":51},[45,151405,151406,151408],{"class":47,"line":1700},[45,151407,14835],{"class":93},[45,151409,15655],{"class":51},[45,151411,151412,151415,151417,151419],{"class":47,"line":1706},[45,151413,151414],{"class":313},"            \"student_id\"",[45,151416,51518],{"class":51},[45,151418,30904],{"class":257},[45,151420,151421],{"class":51},".student_id,\n",[45,151423,151424,151427,151429,151431],{"class":47,"line":1711},[45,151425,151426],{"class":313},"            \"name\"",[45,151428,51518],{"class":51},[45,151430,30904],{"class":257},[45,151432,151433],{"class":51},".name,\n",[45,151435,151436,151439,151441,151443],{"class":47,"line":1725},[45,151437,151438],{"class":313},"            \"age\"",[45,151440,51518],{"class":51},[45,151442,30904],{"class":257},[45,151444,151445],{"class":51},".age,\n",[45,151447,151448,151451,151453,151455],{"class":47,"line":1730},[45,151449,151450],{"class":313},"            \"score\"",[45,151452,51518],{"class":51},[45,151454,30904],{"class":257},[45,151456,151457],{"class":51},".score,\n",[45,151459,151460],{"class":47,"line":1736},[45,151461,2612],{"class":51},[45,151463,151464],{"class":47,"line":1757},[45,151465,2483],{"emptyLinePlaceholder":133},[45,151467,151468,151470],{"class":47,"line":1762},[45,151469,151065],{"class":2046},[45,151471,151068],{"class":257},[45,151473,151474,151476,151479],{"class":47,"line":1776},[45,151475,30882],{"class":93},[45,151477,151478],{"class":2046}," from_dict",[45,151480,151481],{"class":51},"(cls, data):\n",[45,151483,151484,151486,151488],{"class":47,"line":1781},[45,151485,14835],{"class":93},[45,151487,151085],{"class":257},[45,151489,151490],{"class":51},"(\n",[45,151492,151493,151496,151499],{"class":47,"line":1810},[45,151494,151495],{"class":51},"            data[",[45,151497,151498],{"class":313},"\"student_id\"",[45,151500,87917],{"class":51},[45,151502,151503,151505,151507],{"class":47,"line":1815},[45,151504,151495],{"class":51},[45,151506,62760],{"class":313},[45,151508,87917],{"class":51},[45,151510,151511,151513,151515],{"class":47,"line":1832},[45,151512,151495],{"class":51},[45,151514,69205],{"class":313},[45,151516,87917],{"class":51},[45,151518,151519,151521,151524],{"class":47,"line":1837},[45,151520,151495],{"class":51},[45,151522,151523],{"class":313},"\"score\"",[45,151525,87917],{"class":51},[45,151527,151528],{"class":47,"line":1842},[45,151529,38207],{"class":51},[45,151531,151532],{"class":47,"line":1847},[45,151533,2483],{"emptyLinePlaceholder":133},[45,151535,151536,151538,151540],{"class":47,"line":1861},[45,151537,30882],{"class":93},[45,151539,150032],{"class":257},[45,151541,30888],{"class":51},[45,151543,151544,151546,151548,151550,151552,151555,151557,151560,151562,151564,151566,151568,151570,151572,151574,151576],{"class":47,"line":1866},[45,151545,14835],{"class":93},[45,151547,150041],{"class":93},[45,151549,459],{"class":313},[45,151551,149503],{"class":257},[45,151553,151554],{"class":51},".student_id",[45,151556,1153],{"class":257},[45,151558,151559],{"class":257}," {self",[45,151561,80382],{"class":51},[45,151563,1153],{"class":257},[45,151565,151559],{"class":257},[45,151567,80394],{"class":51},[45,151569,1153],{"class":257},[45,151571,151559],{"class":257},[45,151573,149913],{"class":51},[45,151575,1153],{"class":257},[45,151577,25216],{"class":313},[45,151579,151580],{"class":47,"line":2660},[45,151581,2483],{"emptyLinePlaceholder":133},[45,151583,151584],{"class":47,"line":2674},[45,151585,2483],{"emptyLinePlaceholder":133},[45,151587,151588,151590,151592,151594,151597,151599,151601,151603,151605,151607,151609],{"class":47,"line":2682},[45,151589,149532],{"class":51},[45,151591,254],{"class":93},[45,151593,149936],{"class":51},[45,151595,151596],{"class":313},"\"001\"",[45,151598,12518],{"class":51},[45,151600,149939],{"class":313},[45,151602,12518],{"class":51},[45,151604,857],{"class":257},[45,151606,12518],{"class":51},[45,151608,1196],{"class":257},[45,151610,215],{"class":51},[45,151612,151613,151615],{"class":47,"line":2687},[45,151614,30496],{"class":257},[45,151616,151617],{"class":51},"(student.is_passed())\n",[45,151619,151620,151622],{"class":47,"line":2693},[45,151621,30496],{"class":257},[45,151623,151624],{"class":51},"(student.to_dict())\n",[10,151626,151627,101069,151630,151633],{},[42,151628,151629],{},"to_dict()",[42,151631,151632],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[30,151635,151637],{"id":151636},"_1116-易错点","11.16 易错点",[159,151639,151640,151646,151652,151657,151660,151663],{},[162,151641,151642,151643,28468],{},"类名推荐使用大驼峰，如 ",[42,151644,151645],{},"StudentManager",[162,151647,151648,151649,151651],{},"方法第一个参数必须写 ",[42,151650,30904],{},"，调用时不用传。",[162,151653,151654,151656],{},[42,151655,30910],{}," 不是普通方法，它在创建对象时自动执行。",[162,151658,151659],{},"私有属性不是绝对安全，只是约定和名称改写。",[162,151661,151662],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[162,151664,151665],{},"类中方法太多时，说明职责可能过重。",[30,151667,151669],{"id":151668},"_1117-本章练习","11.17 本章练习",[159,151671,151672,151678,151684,151689,151702],{},[162,151673,151674,151675,151677],{},"定义 ",[42,151676,149619],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[162,151679,151674,151680,151683],{},[42,151681,151682],{},"Account"," 类，实现存款、取款、查询余额。",[162,151685,151674,151686,151688],{},[42,151687,17309],{}," 类，计算圆的周长和面积。",[162,151690,151674,151691,421,151694,151697,151698,151701],{},[42,151692,151693],{},"Dog",[42,151695,151696],{},"Cat"," 类，并用同一个函数调用它们的 ",[42,151699,151700],{},"speak()"," 方法。",[162,151703,104417,151704,151706,151707,28468],{},[42,151705,151190],{}," 定义一个商品类 ",[42,151708,151709],{},"Product",[121,151711,151712],{},"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":40,"searchDepth":125,"depth":125,"links":151714},[151715,151716,151717,151718,151719,151720,151722,151723,151724,151725,151726,151727,151728,151732,151733,151734,151735],{"id":149383,"depth":125,"text":149384},{"id":149566,"depth":125,"text":149567},{"id":149630,"depth":125,"text":149631},{"id":149707,"depth":125,"text":149708},{"id":149806,"depth":125,"text":149807},{"id":149970,"depth":125,"text":151721},"11.6 str",{"id":150096,"depth":125,"text":150097},{"id":150362,"depth":125,"text":150363},{"id":150476,"depth":125,"text":150477},{"id":150631,"depth":125,"text":150632},{"id":150755,"depth":125,"text":150756},{"id":150871,"depth":125,"text":150872},{"id":151020,"depth":125,"text":151021,"children":151729},[151730,151731],{"id":151024,"depth":1262,"text":151025},{"id":151106,"depth":1262,"text":151107},{"id":151184,"depth":125,"text":151185},{"id":151299,"depth":125,"text":151300},{"id":151636,"depth":125,"text":151637},{"id":151668,"depth":125,"text":151669},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149375,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151742,"title":151743,"body":151744,"description":130,"extension":131,"meta":155057,"navigation":133,"path":155058,"seo":155059,"stem":155060,"__hash__":155061},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151745,"toc":155033},[151746,151749,151753,151756,151759,151788,151791,151799,151803,151807,151810,151833,151836,151842,151846,153292,153295,153316,153320,153323,153335,153338,153522,153525,153651,153654,153658,153662,153798,153802,153888,153892,153974,153978,154015,154019,154208,154212,154215,154445,154449,154452,154633,154636,154640,154643,154649,154652,154678,154682,154685,154699,154702,154727,154730,154744,154747,154764,154767,154784,154787,154804,154808,154834,154838,154861,154865,154868,154870,154876,154878,154899,154902,154908,154914,154918,154921,154997,155000,155004,155030],[20,151747,151743],{"id":151748},"_12-综合案例与复习路线",[30,151750,151752],{"id":151751},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[10,151754,151755],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[10,151757,151758],{},"一个合格的入门综合项目最好覆盖：",[159,151760,151761,151764,151767,151770,151773,151776,151779,151782,151785],{},[162,151762,151763],{},"输入输出。",[162,151765,151766],{},"判断和循环。",[162,151768,151769],{},"函数拆分。",[162,151771,151772],{},"列表、字典等容器。",[162,151774,151775],{},"文件持久化。",[162,151777,151778],{},"异常处理。",[162,151780,151781],{},"模块拆分。",[162,151783,151784],{},"可选：面向对象。",[162,151786,151787],{},"可选：数据可视化。",[10,151789,151790],{},"本章整理两个方向：",[159,151792,151793,151796],{},[162,151794,151795],{},"学生管理系统。",[162,151797,151798],{},"销售数据统计和可视化。",[30,151800,151802],{"id":151801},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[176,151804,151806],{"id":151805},"_1221-需求","12.2.1 需求",[10,151808,151809],{},"实现一个命令行学生管理系统：",[159,151811,151812,151815,151818,151821,151824,151827,151830],{},[162,151813,151814],{},"添加学生。",[162,151816,151817],{},"删除学生。",[162,151819,151820],{},"修改学生。",[162,151822,151823],{},"查询学生。",[162,151825,151826],{},"显示所有学生。",[162,151828,151829],{},"保存到 JSON 文件。",[162,151831,151832],{},"程序启动时自动读取 JSON 文件。",[10,151834,151835],{},"学生字段：",[35,151837,151840],{"className":151838,"code":151839,"language":5270,"meta":40},[5268],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[42,151841,151839],{"__ignoreMap":40},[30,151843,151845],{"id":151844},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[35,151847,151849],{"className":37,"code":151848,"language":39,"meta":40,"style":40},"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",[42,151850,151851,151857,151867,151871,151885,151889,151893,151902,151914,151920,151924,151930,151961,151971,151978,151989,151995,151999,152003,152013,152044,152070,152074,152078,152087,152098,152109,152120,152131,152142,152153,152164,152168,152172,152182,152194,152210,152217,152224,152228,152232,152242,152250,152257,152270,152280,152291,152295,152299,152308,152316,152322,152334,152342,152353,152357,152361,152370,152386,152390,152397,152408,152413,152417,152433,152448,152463,152467,152472,152480,152488,152496,152504,152508,152513,152524,152528,152532,152541,152556,152566,152570,152582,152593,152597,152601,152606,152610,152621,152625,152629,152638,152653,152661,152665,152677,152687,152691,152695,152710,152723,152736,152740,152753,152765,152777,152781,152785,152796,152800,152804,152813,152828,152836,152840,152852,152862,152866,152870,152875,152879,152883,152893,152899,152921,152940,152959,152978,152983,152987,152991,153000,153008,153019,153023,153027,153053,153063,153068,153072,153076,153084,153094,153098,153106,153111,153127,153131,153145,153150,153164,153169,153182,153187,153200,153205,153218,153223,153236,153247,153251,153257,153268,153272,153276,153288],{"__ignoreMap":40},[45,151852,151853,151855],{"class":47,"line":48},[45,151854,30473],{"class":93},[45,151856,147142],{"class":51},[45,151858,151859,151861,151863,151865],{"class":47,"line":125},[45,151860,30818],{"class":93},[45,151862,108362],{"class":51},[45,151864,30473],{"class":93},[45,151866,108367],{"class":51},[45,151868,151869],{"class":47,"line":1262},[45,151870,2483],{"emptyLinePlaceholder":133},[45,151872,151873,151876,151878,151880,151883],{"class":47,"line":1277},[45,151874,151875],{"class":257},"DATA_FILE",[45,151877,13647],{"class":93},[45,151879,108596],{"class":51},[45,151881,151882],{"class":313},"\"students.json\"",[45,151884,215],{"class":51},[45,151886,151887],{"class":47,"line":1283},[45,151888,2483],{"emptyLinePlaceholder":133},[45,151890,151891],{"class":47,"line":1297},[45,151892,2483],{"emptyLinePlaceholder":133},[45,151894,151895,151897,151900],{"class":47,"line":1303},[45,151896,32028],{"class":93},[45,151898,151899],{"class":2046}," load_students",[45,151901,32034],{"class":51},[45,151903,151904,151906,151908,151911],{"class":47,"line":1394},[45,151905,3184],{"class":93},[45,151907,39011],{"class":93},[45,151909,151910],{"class":257}," DATA_FILE",[45,151912,151913],{"class":51},".exists():\n",[45,151915,151916,151918],{"class":47,"line":1400},[45,151917,14835],{"class":93},[45,151919,51919],{"class":51},[45,151921,151922],{"class":47,"line":1412},[45,151923,2483],{"emptyLinePlaceholder":133},[45,151925,151926,151928],{"class":47,"line":1695},[45,151927,125835],{"class":93},[45,151929,3822],{"class":51},[45,151931,151932,151935,151937,151939,151941,151943,151945,151947,151949,151951,151953,151955,151957,151959],{"class":47,"line":1700},[45,151933,151934],{"class":93},"        with",[45,151936,146842],{"class":257},[45,151938,209],{"class":51},[45,151940,151875],{"class":257},[45,151942,12518],{"class":51},[45,151944,146852],{"class":313},[45,151946,12518],{"class":51},[45,151948,146857],{"class":5299},[45,151950,254],{"class":93},[45,151952,146862],{"class":313},[45,151954,13797],{"class":51},[45,151956,31464],{"class":93},[45,151958,148204],{"class":5299},[45,151960,3822],{"class":51},[45,151962,151963,151965,151967,151969],{"class":47,"line":1706},[45,151964,15815],{"class":93},[45,151966,148215],{"class":51},[45,151968,45435],{"class":5299},[45,151970,215],{"class":51},[45,151972,151973,151975],{"class":47,"line":1711},[45,151974,125863],{"class":93},[45,151976,151977],{"class":51}," json.JSONDecodeError:\n",[45,151979,151980,151982,151984,151987],{"class":47,"line":1725},[45,151981,32532],{"class":257},[45,151983,209],{"class":51},[45,151985,151986],{"class":313},"\"数据文件格式错误，已使用空数据启动\"",[45,151988,215],{"class":51},[45,151990,151991,151993],{"class":47,"line":1730},[45,151992,14835],{"class":93},[45,151994,51919],{"class":51},[45,151996,151997],{"class":47,"line":1736},[45,151998,2483],{"emptyLinePlaceholder":133},[45,152000,152001],{"class":47,"line":1757},[45,152002,2483],{"emptyLinePlaceholder":133},[45,152004,152005,152007,152010],{"class":47,"line":1762},[45,152006,32028],{"class":93},[45,152008,152009],{"class":2046}," save_students",[45,152011,152012],{"class":51},"(students):\n",[45,152014,152015,152017,152019,152021,152023,152025,152028,152030,152032,152034,152036,152038,152040,152042],{"class":47,"line":1776},[45,152016,34259],{"class":93},[45,152018,146842],{"class":257},[45,152020,209],{"class":51},[45,152022,151875],{"class":257},[45,152024,12518],{"class":51},[45,152026,152027],{"class":313},"\"w\"",[45,152029,12518],{"class":51},[45,152031,146857],{"class":5299},[45,152033,254],{"class":93},[45,152035,146862],{"class":313},[45,152037,13797],{"class":51},[45,152039,31464],{"class":93},[45,152041,148204],{"class":5299},[45,152043,3822],{"class":51},[45,152045,152046,152049,152051,152053,152055,152057,152059,152061,152064,152066,152068],{"class":47,"line":1781},[45,152047,152048],{"class":51},"        json.dump(students, ",[45,152050,45435],{"class":5299},[45,152052,12518],{"class":51},[45,152054,147188],{"class":5299},[45,152056,254],{"class":93},[45,152058,34068],{"class":257},[45,152060,12518],{"class":51},[45,152062,152063],{"class":5299},"indent",[45,152065,254],{"class":93},[45,152067,286],{"class":257},[45,152069,215],{"class":51},[45,152071,152072],{"class":47,"line":1810},[45,152073,2483],{"emptyLinePlaceholder":133},[45,152075,152076],{"class":47,"line":1815},[45,152077,2483],{"emptyLinePlaceholder":133},[45,152079,152080,152082,152085],{"class":47,"line":1832},[45,152081,32028],{"class":93},[45,152083,152084],{"class":2046}," show_menu",[45,152086,32034],{"class":51},[45,152088,152089,152091,152093,152096],{"class":47,"line":1837},[45,152090,31380],{"class":257},[45,152092,209],{"class":51},[45,152094,152095],{"class":313},"\"====== 学生管理系统 ======\"",[45,152097,215],{"class":51},[45,152099,152100,152102,152104,152107],{"class":47,"line":1842},[45,152101,31380],{"class":257},[45,152103,209],{"class":51},[45,152105,152106],{"class":313},"\"1. 添加学生\"",[45,152108,215],{"class":51},[45,152110,152111,152113,152115,152118],{"class":47,"line":1847},[45,152112,31380],{"class":257},[45,152114,209],{"class":51},[45,152116,152117],{"class":313},"\"2. 删除学生\"",[45,152119,215],{"class":51},[45,152121,152122,152124,152126,152129],{"class":47,"line":1861},[45,152123,31380],{"class":257},[45,152125,209],{"class":51},[45,152127,152128],{"class":313},"\"3. 修改学生\"",[45,152130,215],{"class":51},[45,152132,152133,152135,152137,152140],{"class":47,"line":1866},[45,152134,31380],{"class":257},[45,152136,209],{"class":51},[45,152138,152139],{"class":313},"\"4. 查询学生\"",[45,152141,215],{"class":51},[45,152143,152144,152146,152148,152151],{"class":47,"line":2660},[45,152145,31380],{"class":257},[45,152147,209],{"class":51},[45,152149,152150],{"class":313},"\"5. 显示所有学生\"",[45,152152,215],{"class":51},[45,152154,152155,152157,152159,152162],{"class":47,"line":2674},[45,152156,31380],{"class":257},[45,152158,209],{"class":51},[45,152160,152161],{"class":313},"\"0. 退出系统\"",[45,152163,215],{"class":51},[45,152165,152166],{"class":47,"line":2682},[45,152167,2483],{"emptyLinePlaceholder":133},[45,152169,152170],{"class":47,"line":2687},[45,152171,2483],{"emptyLinePlaceholder":133},[45,152173,152174,152176,152179],{"class":47,"line":2693},[45,152175,32028],{"class":93},[45,152177,152178],{"class":2046}," find_student",[45,152180,152181],{"class":51},"(students, student_id):\n",[45,152183,152184,152186,152189,152191],{"class":47,"line":2699},[45,152185,3284],{"class":93},[45,152187,152188],{"class":51}," student ",[45,152190,26126],{"class":93},[45,152192,152193],{"class":51}," students:\n",[45,152195,152196,152198,152201,152203,152205,152207],{"class":47,"line":2704},[45,152197,2580],{"class":93},[45,152199,152200],{"class":51}," student[",[45,152202,151498],{"class":313},[45,152204,4526],{"class":51},[45,152206,3032],{"class":93},[45,152208,152209],{"class":51}," student_id:\n",[45,152211,152212,152214],{"class":47,"line":8031},[45,152213,15815],{"class":93},[45,152215,152216],{"class":51}," student\n",[45,152218,152219,152221],{"class":47,"line":8055},[45,152220,4173],{"class":93},[45,152222,152223],{"class":257}," None\n",[45,152225,152226],{"class":47,"line":8060},[45,152227,2483],{"emptyLinePlaceholder":133},[45,152229,152230],{"class":47,"line":8066},[45,152231,2483],{"emptyLinePlaceholder":133},[45,152233,152234,152236,152239],{"class":47,"line":8093},[45,152235,32028],{"class":93},[45,152237,152238],{"class":2046}," input_int",[45,152240,152241],{"class":51},"(prompt):\n",[45,152243,152244,152246,152248],{"class":47,"line":8098},[45,152245,2334],{"class":93},[45,152247,95343],{"class":257},[45,152249,3822],{"class":51},[45,152251,152252,152255],{"class":47,"line":8104},[45,152253,152254],{"class":93},"        try",[45,152256,3822],{"class":51},[45,152258,152259,152261,152263,152265,152267],{"class":47,"line":8116},[45,152260,15815],{"class":93},[45,152262,2465],{"class":257},[45,152264,209],{"class":51},[45,152266,53902],{"class":257},[45,152268,152269],{"class":51},"(prompt))\n",[45,152271,152272,152275,152278],{"class":47,"line":8128},[45,152273,152274],{"class":93},"        except",[45,152276,152277],{"class":257}," ValueError",[45,152279,3822],{"class":51},[45,152281,152282,152284,152286,152289],{"class":47,"line":8140},[45,152283,34731],{"class":257},[45,152285,209],{"class":51},[45,152287,152288],{"class":313},"\"请输入整数\"",[45,152290,215],{"class":51},[45,152292,152293],{"class":47,"line":9799},[45,152294,2483],{"emptyLinePlaceholder":133},[45,152296,152297],{"class":47,"line":9824},[45,152298,2483],{"emptyLinePlaceholder":133},[45,152300,152301,152303,152306],{"class":47,"line":9847},[45,152302,32028],{"class":93},[45,152304,152305],{"class":2046}," input_float",[45,152307,152241],{"class":51},[45,152309,152310,152312,152314],{"class":47,"line":9871},[45,152311,2334],{"class":93},[45,152313,95343],{"class":257},[45,152315,3822],{"class":51},[45,152317,152318,152320],{"class":47,"line":9876},[45,152319,152254],{"class":93},[45,152321,3822],{"class":51},[45,152323,152324,152326,152328,152330,152332],{"class":47,"line":9881},[45,152325,15815],{"class":93},[45,152327,109848],{"class":257},[45,152329,209],{"class":51},[45,152331,53902],{"class":257},[45,152333,152269],{"class":51},[45,152335,152336,152338,152340],{"class":47,"line":9886},[45,152337,152274],{"class":93},[45,152339,152277],{"class":257},[45,152341,3822],{"class":51},[45,152343,152344,152346,152348,152351],{"class":47,"line":9895},[45,152345,34731],{"class":257},[45,152347,209],{"class":51},[45,152349,152350],{"class":313},"\"请输入数字\"",[45,152352,215],{"class":51},[45,152354,152355],{"class":47,"line":9900},[45,152356,2483],{"emptyLinePlaceholder":133},[45,152358,152359],{"class":47,"line":9906},[45,152360,2483],{"emptyLinePlaceholder":133},[45,152362,152363,152365,152368],{"class":47,"line":9927},[45,152364,32028],{"class":93},[45,152366,152367],{"class":2046}," add_student",[45,152369,152012],{"class":51},[45,152371,152372,152375,152377,152379,152381,152384],{"class":47,"line":9933},[45,152373,152374],{"class":51},"    student_id ",[45,152376,254],{"class":93},[45,152378,60686],{"class":257},[45,152380,209],{"class":51},[45,152382,152383],{"class":313},"\"请输入学号:\"",[45,152385,215],{"class":51},[45,152387,152388],{"class":47,"line":9947},[45,152389,2483],{"emptyLinePlaceholder":133},[45,152391,152392,152394],{"class":47,"line":9953},[45,152393,3184],{"class":93},[45,152395,152396],{"class":51}," find_student(students, student_id):\n",[45,152398,152399,152401,152403,152406],{"class":47,"line":9980},[45,152400,32532],{"class":257},[45,152402,209],{"class":51},[45,152404,152405],{"class":313},"\"学号已存在\"",[45,152407,215],{"class":51},[45,152409,152410],{"class":47,"line":9989},[45,152411,152412],{"class":93},"        return\n",[45,152414,152415],{"class":47,"line":9995},[45,152416,2483],{"emptyLinePlaceholder":133},[45,152418,152419,152422,152424,152426,152428,152431],{"class":47,"line":10003},[45,152420,152421],{"class":51},"    name ",[45,152423,254],{"class":93},[45,152425,60686],{"class":257},[45,152427,209],{"class":51},[45,152429,152430],{"class":313},"\"请输入姓名:\"",[45,152432,215],{"class":51},[45,152434,152435,152438,152440,152443,152446],{"class":47,"line":10008},[45,152436,152437],{"class":51},"    age ",[45,152439,254],{"class":93},[45,152441,152442],{"class":51}," input_int(",[45,152444,152445],{"class":313},"\"请输入年龄:\"",[45,152447,215],{"class":51},[45,152449,152450,152453,152455,152458,152461],{"class":47,"line":16687},[45,152451,152452],{"class":51},"    score ",[45,152454,254],{"class":93},[45,152456,152457],{"class":51}," input_float(",[45,152459,152460],{"class":313},"\"请输入成绩:\"",[45,152462,215],{"class":51},[45,152464,152465],{"class":47,"line":16693},[45,152466,2483],{"emptyLinePlaceholder":133},[45,152468,152469],{"class":47,"line":16716},[45,152470,152471],{"class":51},"    students.append({\n",[45,152473,152474,152477],{"class":47,"line":16722},[45,152475,152476],{"class":313},"        \"student_id\"",[45,152478,152479],{"class":51},": student_id,\n",[45,152481,152482,152485],{"class":47,"line":16745},[45,152483,152484],{"class":313},"        \"name\"",[45,152486,152487],{"class":51},": name,\n",[45,152489,152490,152493],{"class":47,"line":16759},[45,152491,152492],{"class":313},"        \"age\"",[45,152494,152495],{"class":51},": age,\n",[45,152497,152498,152501],{"class":47,"line":16779},[45,152499,152500],{"class":313},"        \"score\"",[45,152502,152503],{"class":51},": score,\n",[45,152505,152506],{"class":47,"line":16785},[45,152507,33542],{"class":51},[45,152509,152510],{"class":47,"line":16796},[45,152511,152512],{"class":51},"    save_students(students)\n",[45,152514,152515,152517,152519,152522],{"class":47,"line":16819},[45,152516,31380],{"class":257},[45,152518,209],{"class":51},[45,152520,152521],{"class":313},"\"添加成功\"",[45,152523,215],{"class":51},[45,152525,152526],{"class":47,"line":16841},[45,152527,2483],{"emptyLinePlaceholder":133},[45,152529,152530],{"class":47,"line":16846},[45,152531,2483],{"emptyLinePlaceholder":133},[45,152533,152534,152536,152539],{"class":47,"line":16852},[45,152535,32028],{"class":93},[45,152537,152538],{"class":2046}," delete_student",[45,152540,152012],{"class":51},[45,152542,152543,152545,152547,152549,152551,152554],{"class":47,"line":16866},[45,152544,152374],{"class":51},[45,152546,254],{"class":93},[45,152548,60686],{"class":257},[45,152550,209],{"class":51},[45,152552,152553],{"class":313},"\"请输入要删除的学号:\"",[45,152555,215],{"class":51},[45,152557,152558,152561,152563],{"class":47,"line":16879},[45,152559,152560],{"class":51},"    student ",[45,152562,254],{"class":93},[45,152564,152565],{"class":51}," find_student(students, student_id)\n",[45,152567,152568],{"class":47,"line":16884},[45,152569,2483],{"emptyLinePlaceholder":133},[45,152571,152572,152574,152576,152578,152580],{"class":47,"line":16898},[45,152573,3184],{"class":93},[45,152575,152188],{"class":51},[45,152577,39008],{"class":93},[45,152579,39014],{"class":257},[45,152581,3822],{"class":51},[45,152583,152584,152586,152588,152591],{"class":47,"line":16903},[45,152585,32532],{"class":257},[45,152587,209],{"class":51},[45,152589,152590],{"class":313},"\"学生不存在\"",[45,152592,215],{"class":51},[45,152594,152595],{"class":47,"line":16909},[45,152596,152412],{"class":93},[45,152598,152599],{"class":47,"line":16914},[45,152600,2483],{"emptyLinePlaceholder":133},[45,152602,152603],{"class":47,"line":16928},[45,152604,152605],{"class":51},"    students.remove(student)\n",[45,152607,152608],{"class":47,"line":16933},[45,152609,152512],{"class":51},[45,152611,152612,152614,152616,152619],{"class":47,"line":16938},[45,152613,31380],{"class":257},[45,152615,209],{"class":51},[45,152617,152618],{"class":313},"\"删除成功\"",[45,152620,215],{"class":51},[45,152622,152623],{"class":47,"line":16952},[45,152624,2483],{"emptyLinePlaceholder":133},[45,152626,152627],{"class":47,"line":16964},[45,152628,2483],{"emptyLinePlaceholder":133},[45,152630,152631,152633,152636],{"class":47,"line":16969},[45,152632,32028],{"class":93},[45,152634,152635],{"class":2046}," update_student",[45,152637,152012],{"class":51},[45,152639,152640,152642,152644,152646,152648,152651],{"class":47,"line":16982},[45,152641,152374],{"class":51},[45,152643,254],{"class":93},[45,152645,60686],{"class":257},[45,152647,209],{"class":51},[45,152649,152650],{"class":313},"\"请输入要修改的学号:\"",[45,152652,215],{"class":51},[45,152654,152655,152657,152659],{"class":47,"line":16987},[45,152656,152560],{"class":51},[45,152658,254],{"class":93},[45,152660,152565],{"class":51},[45,152662,152663],{"class":47,"line":16992},[45,152664,2483],{"emptyLinePlaceholder":133},[45,152666,152667,152669,152671,152673,152675],{"class":47,"line":16997},[45,152668,3184],{"class":93},[45,152670,152188],{"class":51},[45,152672,39008],{"class":93},[45,152674,39014],{"class":257},[45,152676,3822],{"class":51},[45,152678,152679,152681,152683,152685],{"class":47,"line":17010},[45,152680,32532],{"class":257},[45,152682,209],{"class":51},[45,152684,152590],{"class":313},[45,152686,215],{"class":51},[45,152688,152689],{"class":47,"line":17015},[45,152690,152412],{"class":93},[45,152692,152693],{"class":47,"line":32714},[45,152694,2483],{"emptyLinePlaceholder":133},[45,152696,152697,152699,152701,152703,152705,152708],{"class":47,"line":32720},[45,152698,152421],{"class":51},[45,152700,254],{"class":93},[45,152702,60686],{"class":257},[45,152704,209],{"class":51},[45,152706,152707],{"class":313},"\"请输入新姓名:\"",[45,152709,215],{"class":51},[45,152711,152712,152714,152716,152718,152721],{"class":47,"line":32726},[45,152713,152437],{"class":51},[45,152715,254],{"class":93},[45,152717,152442],{"class":51},[45,152719,152720],{"class":313},"\"请输入新年龄:\"",[45,152722,215],{"class":51},[45,152724,152725,152727,152729,152731,152734],{"class":47,"line":32732},[45,152726,152452],{"class":51},[45,152728,254],{"class":93},[45,152730,152457],{"class":51},[45,152732,152733],{"class":313},"\"请输入新成绩:\"",[45,152735,215],{"class":51},[45,152737,152738],{"class":47,"line":32738},[45,152739,2483],{"emptyLinePlaceholder":133},[45,152741,152742,152745,152747,152749,152751],{"class":47,"line":32749},[45,152743,152744],{"class":51},"    student[",[45,152746,62760],{"class":313},[45,152748,4526],{"class":51},[45,152750,254],{"class":93},[45,152752,149846],{"class":51},[45,152754,152755,152757,152759,152761,152763],{"class":47,"line":32755},[45,152756,152744],{"class":51},[45,152758,69205],{"class":313},[45,152760,4526],{"class":51},[45,152762,254],{"class":93},[45,152764,149858],{"class":51},[45,152766,152767,152769,152771,152773,152775],{"class":47,"line":32775},[45,152768,152744],{"class":51},[45,152770,151523],{"class":313},[45,152772,4526],{"class":51},[45,152774,254],{"class":93},[45,152776,1662],{"class":51},[45,152778,152779],{"class":47,"line":32781},[45,152780,2483],{"emptyLinePlaceholder":133},[45,152782,152783],{"class":47,"line":32792},[45,152784,152512],{"class":51},[45,152786,152787,152789,152791,152794],{"class":47,"line":32798},[45,152788,31380],{"class":257},[45,152790,209],{"class":51},[45,152792,152793],{"class":313},"\"修改成功\"",[45,152795,215],{"class":51},[45,152797,152798],{"class":47,"line":32804},[45,152799,2483],{"emptyLinePlaceholder":133},[45,152801,152802],{"class":47,"line":32810},[45,152803,2483],{"emptyLinePlaceholder":133},[45,152805,152806,152808,152811],{"class":47,"line":32816},[45,152807,32028],{"class":93},[45,152809,152810],{"class":2046}," query_student",[45,152812,152012],{"class":51},[45,152814,152815,152817,152819,152821,152823,152826],{"class":47,"line":32822},[45,152816,152374],{"class":51},[45,152818,254],{"class":93},[45,152820,60686],{"class":257},[45,152822,209],{"class":51},[45,152824,152825],{"class":313},"\"请输入要查询的学号:\"",[45,152827,215],{"class":51},[45,152829,152830,152832,152834],{"class":47,"line":32828},[45,152831,152560],{"class":51},[45,152833,254],{"class":93},[45,152835,152565],{"class":51},[45,152837,152838],{"class":47,"line":32834},[45,152839,2483],{"emptyLinePlaceholder":133},[45,152841,152842,152844,152846,152848,152850],{"class":47,"line":32854},[45,152843,3184],{"class":93},[45,152845,152188],{"class":51},[45,152847,39008],{"class":93},[45,152849,39014],{"class":257},[45,152851,3822],{"class":51},[45,152853,152854,152856,152858,152860],{"class":47,"line":32860},[45,152855,32532],{"class":257},[45,152857,209],{"class":51},[45,152859,152590],{"class":313},[45,152861,215],{"class":51},[45,152863,152864],{"class":47,"line":32876},[45,152865,152412],{"class":93},[45,152867,152868],{"class":47,"line":32882},[45,152869,2483],{"emptyLinePlaceholder":133},[45,152871,152872],{"class":47,"line":32896},[45,152873,152874],{"class":51},"    print_student(student)\n",[45,152876,152877],{"class":47,"line":32902},[45,152878,2483],{"emptyLinePlaceholder":133},[45,152880,152881],{"class":47,"line":32917},[45,152882,2483],{"emptyLinePlaceholder":133},[45,152884,152885,152887,152890],{"class":47,"line":32923},[45,152886,32028],{"class":93},[45,152888,152889],{"class":2046}," print_student",[45,152891,152892],{"class":51},"(student):\n",[45,152894,152895,152897],{"class":47,"line":32932},[45,152896,31380],{"class":257},[45,152898,151490],{"class":51},[45,152900,152901,152904,152906,152908,152911,152914,152916,152919],{"class":47,"line":32938},[45,152902,152903],{"class":93},"        f",[45,152905,459],{"class":313},[45,152907,1103],{"class":257},[45,152909,152910],{"class":51},"student[",[45,152912,152913],{"class":313},"'student_id'",[45,152915,1147],{"class":51},[45,152917,152918],{"class":257},"}\\t",[45,152920,25216],{"class":313},[45,152922,152923,152925,152927,152929,152931,152934,152936,152938],{"class":47,"line":32947},[45,152924,152903],{"class":93},[45,152926,459],{"class":313},[45,152928,1103],{"class":257},[45,152930,152910],{"class":51},[45,152932,152933],{"class":313},"'name'",[45,152935,1147],{"class":51},[45,152937,152918],{"class":257},[45,152939,25216],{"class":313},[45,152941,152942,152944,152946,152948,152950,152953,152955,152957],{"class":47,"line":32953},[45,152943,152903],{"class":93},[45,152945,459],{"class":313},[45,152947,1103],{"class":257},[45,152949,152910],{"class":51},[45,152951,152952],{"class":313},"'age'",[45,152954,1147],{"class":51},[45,152956,152918],{"class":257},[45,152958,25216],{"class":313},[45,152960,152961,152963,152965,152967,152969,152972,152974,152976],{"class":47,"line":32959},[45,152962,152903],{"class":93},[45,152964,459],{"class":313},[45,152966,1103],{"class":257},[45,152968,152910],{"class":51},[45,152970,152971],{"class":313},"'score'",[45,152973,1147],{"class":51},[45,152975,1153],{"class":257},[45,152977,25216],{"class":313},[45,152979,152980],{"class":47,"line":32968},[45,152981,152982],{"class":51},"    )\n",[45,152984,152985],{"class":47,"line":32974},[45,152986,2483],{"emptyLinePlaceholder":133},[45,152988,152989],{"class":47,"line":32985},[45,152990,2483],{"emptyLinePlaceholder":133},[45,152992,152993,152995,152998],{"class":47,"line":32991},[45,152994,32028],{"class":93},[45,152996,152997],{"class":2046}," show_all_students",[45,152999,152012],{"class":51},[45,153001,153002,153004,153006],{"class":47,"line":33010},[45,153003,3184],{"class":93},[45,153005,39011],{"class":93},[45,153007,152193],{"class":51},[45,153009,153010,153012,153014,153017],{"class":47,"line":33016},[45,153011,32532],{"class":257},[45,153013,209],{"class":51},[45,153015,153016],{"class":313},"\"暂无学生\"",[45,153018,215],{"class":51},[45,153020,153021],{"class":47,"line":33027},[45,153022,152412],{"class":93},[45,153024,153025],{"class":47,"line":33033},[45,153026,2483],{"emptyLinePlaceholder":133},[45,153028,153029,153031,153033,153036,153038,153041,153043,153046,153048,153051],{"class":47,"line":33053},[45,153030,31380],{"class":257},[45,153032,209],{"class":51},[45,153034,153035],{"class":313},"\"学号",[45,153037,1313],{"class":257},[45,153039,153040],{"class":313},"姓名",[45,153042,1313],{"class":257},[45,153044,153045],{"class":313},"年龄",[45,153047,1313],{"class":257},[45,153049,153050],{"class":313},"成绩\"",[45,153052,215],{"class":51},[45,153054,153055,153057,153059,153061],{"class":47,"line":33069},[45,153056,3284],{"class":93},[45,153058,152188],{"class":51},[45,153060,26126],{"class":93},[45,153062,152193],{"class":51},[45,153064,153065],{"class":47,"line":33075},[45,153066,153067],{"class":51},"        print_student(student)\n",[45,153069,153070],{"class":47,"line":33089},[45,153071,2483],{"emptyLinePlaceholder":133},[45,153073,153074],{"class":47,"line":33095},[45,153075,2483],{"emptyLinePlaceholder":133},[45,153077,153078,153080,153082],{"class":47,"line":33101},[45,153079,32028],{"class":93},[45,153081,2056],{"class":2046},[45,153083,32034],{"class":51},[45,153085,153086,153089,153091],{"class":47,"line":33112},[45,153087,153088],{"class":51},"    students ",[45,153090,254],{"class":93},[45,153092,153093],{"class":51}," load_students()\n",[45,153095,153096],{"class":47,"line":33118},[45,153097,2483],{"emptyLinePlaceholder":133},[45,153099,153100,153102,153104],{"class":47,"line":33124},[45,153101,2334],{"class":93},[45,153103,95343],{"class":257},[45,153105,3822],{"class":51},[45,153107,153108],{"class":47,"line":33134},[45,153109,153110],{"class":51},"        show_menu()\n",[45,153112,153113,153116,153118,153120,153122,153125],{"class":47,"line":33140},[45,153114,153115],{"class":51},"        choice ",[45,153117,254],{"class":93},[45,153119,60686],{"class":257},[45,153121,209],{"class":51},[45,153123,153124],{"class":313},"\"请输入操作:\"",[45,153126,215],{"class":51},[45,153128,153129],{"class":47,"line":33151},[45,153130,2483],{"emptyLinePlaceholder":133},[45,153132,153133,153135,153138,153140,153143],{"class":47,"line":33157},[45,153134,2580],{"class":93},[45,153136,153137],{"class":51}," choice ",[45,153139,3032],{"class":93},[45,153141,153142],{"class":313}," \"1\"",[45,153144,3822],{"class":51},[45,153146,153147],{"class":47,"line":33167},[45,153148,153149],{"class":51},"            add_student(students)\n",[45,153151,153152,153155,153157,153159,153162],{"class":47,"line":33172},[45,153153,153154],{"class":93},"        elif",[45,153156,153137],{"class":51},[45,153158,3032],{"class":93},[45,153160,153161],{"class":313}," \"2\"",[45,153163,3822],{"class":51},[45,153165,153166],{"class":47,"line":33178},[45,153167,153168],{"class":51},"            delete_student(students)\n",[45,153170,153171,153173,153175,153177,153180],{"class":47,"line":33227},[45,153172,153154],{"class":93},[45,153174,153137],{"class":51},[45,153176,3032],{"class":93},[45,153178,153179],{"class":313}," \"3\"",[45,153181,3822],{"class":51},[45,153183,153184],{"class":47,"line":33274},[45,153185,153186],{"class":51},"            update_student(students)\n",[45,153188,153189,153191,153193,153195,153198],{"class":47,"line":33279},[45,153190,153154],{"class":93},[45,153192,153137],{"class":51},[45,153194,3032],{"class":93},[45,153196,153197],{"class":313}," \"4\"",[45,153199,3822],{"class":51},[45,153201,153202],{"class":47,"line":33285},[45,153203,153204],{"class":51},"            query_student(students)\n",[45,153206,153207,153209,153211,153213,153216],{"class":47,"line":33304},[45,153208,153154],{"class":93},[45,153210,153137],{"class":51},[45,153212,3032],{"class":93},[45,153214,153215],{"class":313}," \"5\"",[45,153217,3822],{"class":51},[45,153219,153220],{"class":47,"line":33310},[45,153221,153222],{"class":51},"            show_all_students(students)\n",[45,153224,153225,153227,153229,153231,153234],{"class":47,"line":33330},[45,153226,153154],{"class":93},[45,153228,153137],{"class":51},[45,153230,3032],{"class":93},[45,153232,153233],{"class":313}," \"0\"",[45,153235,3822],{"class":51},[45,153237,153238,153240,153242,153245],{"class":47,"line":33336},[45,153239,34731],{"class":257},[45,153241,209],{"class":51},[45,153243,153244],{"class":313},"\"退出系统\"",[45,153246,215],{"class":51},[45,153248,153249],{"class":47,"line":33342},[45,153250,115149],{"class":93},[45,153252,153253,153255],{"class":47,"line":33352},[45,153254,2617],{"class":93},[45,153256,3822],{"class":51},[45,153258,153259,153261,153263,153266],{"class":47,"line":33357},[45,153260,34731],{"class":257},[45,153262,209],{"class":51},[45,153264,153265],{"class":313},"\"输入错误\"",[45,153267,215],{"class":51},[45,153269,153270],{"class":47,"line":33363},[45,153271,2483],{"emptyLinePlaceholder":133},[45,153273,153274],{"class":47,"line":33379},[45,153275,2483],{"emptyLinePlaceholder":133},[45,153277,153278,153280,153282,153284,153286],{"class":47,"line":33424},[45,153279,1614],{"class":93},[45,153281,31301],{"class":257},[45,153283,101610],{"class":93},[45,153285,101613],{"class":313},[45,153287,3822],{"class":51},[45,153289,153290],{"class":47,"line":33430},[45,153291,101620],{"class":51},[10,153293,153294],{},"这个项目串联了：",[159,153296,153297,153300,153303,153306,153309,153311],{},[162,153298,153299],{},"菜单循环。",[162,153301,153302],{},"函数封装。",[162,153304,153305],{},"列表字典。",[162,153307,153308],{},"JSON 读写。",[162,153310,151778],{},[162,153312,153313,28468],{},[42,153314,153315],{},"if __name__ == \"__main__\"",[30,153317,153319],{"id":153318},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[10,153321,153322],{},"可以进一步拆成两个类：",[159,153324,153325,153330],{},[162,153326,153327,153329],{},[42,153328,149619],{},"：表示单个学生。",[162,153331,153332,153334],{},[42,153333,151645],{},"：负责学生增删改查和文件保存。",[10,153336,153337],{},"示意代码：",[35,153339,153341],{"className":37,"code":153340,"language":39,"meta":40,"style":40},"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",[42,153342,153343,153353,153357,153361,153365,153373,153380,153386,153392,153398,153402,153410,153416,153426,153436,153446,153456,153460,153464,153470,153478,153486,153494,153502,153510,153518],{"__ignoreMap":40},[45,153344,153345,153347,153349,153351],{"class":47,"line":48},[45,153346,30818],{"class":93},[45,153348,151203],{"class":51},[45,153350,30473],{"class":93},[45,153352,151208],{"class":51},[45,153354,153355],{"class":47,"line":125},[45,153356,2483],{"emptyLinePlaceholder":133},[45,153358,153359],{"class":47,"line":1262},[45,153360,2483],{"emptyLinePlaceholder":133},[45,153362,153363],{"class":47,"line":1277},[45,153364,151221],{"class":2046},[45,153366,153367,153369,153371],{"class":47,"line":1283},[45,153368,14777],{"class":93},[45,153370,7981],{"class":2046},[45,153372,3822],{"class":51},[45,153374,153375,153378],{"class":47,"line":1297},[45,153376,153377],{"class":51},"    student_id: ",[45,153379,151237],{"class":257},[45,153381,153382,153384],{"class":47,"line":1303},[45,153383,151234],{"class":51},[45,153385,151237],{"class":257},[45,153387,153388,153390],{"class":47,"line":1394},[45,153389,151242],{"class":51},[45,153391,151245],{"class":257},[45,153393,153394,153396],{"class":47,"line":1400},[45,153395,151250],{"class":51},[45,153397,151253],{"class":257},[45,153399,153400],{"class":47,"line":1412},[45,153401,2483],{"emptyLinePlaceholder":133},[45,153403,153404,153406,153408],{"class":47,"line":1695},[45,153405,30882],{"class":93},[45,153407,151401],{"class":2046},[45,153409,30888],{"class":51},[45,153411,153412,153414],{"class":47,"line":1700},[45,153413,14835],{"class":93},[45,153415,15655],{"class":51},[45,153417,153418,153420,153422,153424],{"class":47,"line":1706},[45,153419,151414],{"class":313},[45,153421,51518],{"class":51},[45,153423,30904],{"class":257},[45,153425,151421],{"class":51},[45,153427,153428,153430,153432,153434],{"class":47,"line":1711},[45,153429,151426],{"class":313},[45,153431,51518],{"class":51},[45,153433,30904],{"class":257},[45,153435,151433],{"class":51},[45,153437,153438,153440,153442,153444],{"class":47,"line":1725},[45,153439,151438],{"class":313},[45,153441,51518],{"class":51},[45,153443,30904],{"class":257},[45,153445,151445],{"class":51},[45,153447,153448,153450,153452,153454],{"class":47,"line":1730},[45,153449,151450],{"class":313},[45,153451,51518],{"class":51},[45,153453,30904],{"class":257},[45,153455,151457],{"class":51},[45,153457,153458],{"class":47,"line":1736},[45,153459,2612],{"class":51},[45,153461,153462],{"class":47,"line":1757},[45,153463,2483],{"emptyLinePlaceholder":133},[45,153465,153466,153468],{"class":47,"line":1762},[45,153467,151065],{"class":2046},[45,153469,151068],{"class":257},[45,153471,153472,153474,153476],{"class":47,"line":1776},[45,153473,30882],{"class":93},[45,153475,151478],{"class":2046},[45,153477,151481],{"class":51},[45,153479,153480,153482,153484],{"class":47,"line":1781},[45,153481,14835],{"class":93},[45,153483,151085],{"class":257},[45,153485,151490],{"class":51},[45,153487,153488,153490,153492],{"class":47,"line":1810},[45,153489,151495],{"class":51},[45,153491,151498],{"class":313},[45,153493,87917],{"class":51},[45,153495,153496,153498,153500],{"class":47,"line":1815},[45,153497,151495],{"class":51},[45,153499,62760],{"class":313},[45,153501,87917],{"class":51},[45,153503,153504,153506,153508],{"class":47,"line":1832},[45,153505,151495],{"class":51},[45,153507,69205],{"class":313},[45,153509,87917],{"class":51},[45,153511,153512,153514,153516],{"class":47,"line":1837},[45,153513,151495],{"class":51},[45,153515,151523],{"class":313},[45,153517,87917],{"class":51},[45,153519,153520],{"class":47,"line":1842},[45,153521,38207],{"class":51},[10,153523,153524],{},"管理器示意：",[35,153526,153528],{"className":37,"code":153527,"language":39,"meta":40,"style":40},"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",[42,153529,153530,153539,153547,153558,153562,153572,153585,153596,153603,153609,153613,153622,153631,153637,153644],{"__ignoreMap":40},[45,153531,153532,153534,153537],{"class":47,"line":48},[45,153533,14777],{"class":93},[45,153535,153536],{"class":2046}," StudentManager",[45,153538,3822],{"class":51},[45,153540,153541,153543,153545],{"class":47,"line":125},[45,153542,30882],{"class":93},[45,153544,30885],{"class":257},[45,153546,30888],{"class":51},[45,153548,153549,153551,153554,153556],{"class":47,"line":1262},[45,153550,30926],{"class":257},[45,153552,153553],{"class":51},".students ",[45,153555,254],{"class":93},[45,153557,51919],{"class":51},[45,153559,153560],{"class":47,"line":1277},[45,153561,2483],{"emptyLinePlaceholder":133},[45,153563,153564,153566,153569],{"class":47,"line":1283},[45,153565,30882],{"class":93},[45,153567,153568],{"class":2046}," find_by_id",[45,153570,153571],{"class":51},"(self, student_id):\n",[45,153573,153574,153576,153578,153580,153582],{"class":47,"line":1297},[45,153575,3486],{"class":93},[45,153577,152188],{"class":51},[45,153579,26126],{"class":93},[45,153581,38954],{"class":257},[45,153583,153584],{"class":51},".students:\n",[45,153586,153587,153589,153592,153594],{"class":47,"line":1303},[45,153588,4725],{"class":93},[45,153590,153591],{"class":51}," student.student_id ",[45,153593,3032],{"class":93},[45,153595,152209],{"class":51},[45,153597,153598,153601],{"class":47,"line":1394},[45,153599,153600],{"class":93},"                return",[45,153602,152216],{"class":51},[45,153604,153605,153607],{"class":47,"line":1400},[45,153606,14835],{"class":93},[45,153608,152223],{"class":257},[45,153610,153611],{"class":47,"line":1412},[45,153612,2483],{"emptyLinePlaceholder":133},[45,153614,153615,153617,153619],{"class":47,"line":1695},[45,153616,30882],{"class":93},[45,153618,5292],{"class":2046},[45,153620,153621],{"class":51},"(self, student):\n",[45,153623,153624,153626,153628],{"class":47,"line":1700},[45,153625,2580],{"class":93},[45,153627,38954],{"class":257},[45,153629,153630],{"class":51},".find_by_id(student.student_id):\n",[45,153632,153633,153635],{"class":47,"line":1706},[45,153634,15815],{"class":93},[45,153636,125858],{"class":257},[45,153638,153639,153641],{"class":47,"line":1711},[45,153640,30926],{"class":257},[45,153642,153643],{"class":51},".students.append(student)\n",[45,153645,153646,153648],{"class":47,"line":1725},[45,153647,14835],{"class":93},[45,153649,153650],{"class":257}," True\n",[10,153652,153653],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[30,153655,153657],{"id":153656},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[176,153659,153661],{"id":153660},"_1251-数据结构","12.5.1 数据结构",[35,153663,153665],{"className":37,"code":153664,"language":39,"meta":40,"style":40},"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",[42,153666,153667,153675,153706,153736,153765,153794],{"__ignoreMap":40},[45,153668,153669,153671,153673],{"class":47,"line":48},[45,153670,148516],{"class":51},[45,153672,254],{"class":93},[45,153674,55528],{"class":51},[45,153676,153677,153679,153681,153683,153685,153687,153690,153692,153695,153697,153699,153701,153704],{"class":47,"line":125},[45,153678,148436],{"class":51},[45,153680,148048],{"class":313},[45,153682,51518],{"class":51},[45,153684,148659],{"class":313},[45,153686,12518],{"class":51},[45,153688,153689],{"class":313},"\"category\"",[45,153691,51518],{"class":51},[45,153693,153694],{"class":313},"\"手机\"",[45,153696,12518],{"class":51},[45,153698,84165],{"class":313},[45,153700,51518],{"class":51},[45,153702,153703],{"class":257},"12000",[45,153705,5013],{"class":51},[45,153707,153708,153710,153712,153714,153716,153718,153720,153722,153725,153727,153729,153731,153734],{"class":47,"line":1262},[45,153709,148436],{"class":51},[45,153711,148048],{"class":313},[45,153713,51518],{"class":51},[45,153715,148659],{"class":313},[45,153717,12518],{"class":51},[45,153719,153689],{"class":313},[45,153721,51518],{"class":51},[45,153723,153724],{"class":313},"\"电脑\"",[45,153726,12518],{"class":51},[45,153728,84165],{"class":313},[45,153730,51518],{"class":51},[45,153732,153733],{"class":257},"18000",[45,153735,5013],{"class":51},[45,153737,153738,153740,153742,153744,153746,153748,153750,153752,153754,153756,153758,153760,153763],{"class":47,"line":1277},[45,153739,148436],{"class":51},[45,153741,148048],{"class":313},[45,153743,51518],{"class":51},[45,153745,148680],{"class":313},[45,153747,12518],{"class":51},[45,153749,153689],{"class":313},[45,153751,51518],{"class":51},[45,153753,153694],{"class":313},[45,153755,12518],{"class":51},[45,153757,84165],{"class":313},[45,153759,51518],{"class":51},[45,153761,153762],{"class":257},"15000",[45,153764,5013],{"class":51},[45,153766,153767,153769,153771,153773,153775,153777,153779,153781,153783,153785,153787,153789,153792],{"class":47,"line":1283},[45,153768,148436],{"class":51},[45,153770,148048],{"class":313},[45,153772,51518],{"class":51},[45,153774,148680],{"class":313},[45,153776,12518],{"class":51},[45,153778,153689],{"class":313},[45,153780,51518],{"class":51},[45,153782,153724],{"class":313},[45,153784,12518],{"class":51},[45,153786,84165],{"class":313},[45,153788,51518],{"class":51},[45,153790,153791],{"class":257},"16000",[45,153793,5013],{"class":51},[45,153795,153796],{"class":47,"line":1297},[45,153797,33327],{"class":51},[176,153799,153801],{"id":153800},"_1252-按日期统计","12.5.2 按日期统计",[35,153803,153805],{"className":37,"code":153804,"language":39,"meta":40,"style":40},"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",[42,153806,153807,153816,153820,153831,153845,153858,153877,153881],{"__ignoreMap":40},[45,153808,153809,153812,153814],{"class":47,"line":48},[45,153810,153811],{"class":51},"daily_total ",[45,153813,254],{"class":93},[45,153815,87949],{"class":51},[45,153817,153818],{"class":47,"line":125},[45,153819,2483],{"emptyLinePlaceholder":133},[45,153821,153822,153824,153826,153828],{"class":47,"line":1262},[45,153823,3108],{"class":93},[45,153825,148260],{"class":51},[45,153827,26126],{"class":93},[45,153829,153830],{"class":51}," sales:\n",[45,153832,153833,153836,153838,153841,153843],{"class":47,"line":1277},[45,153834,153835],{"class":51},"    date ",[45,153837,254],{"class":93},[45,153839,153840],{"class":51}," item[",[45,153842,148048],{"class":313},[45,153844,33327],{"class":51},[45,153846,153847,153850,153852,153854,153856],{"class":47,"line":1283},[45,153848,153849],{"class":51},"    amount ",[45,153851,254],{"class":93},[45,153853,153840],{"class":51},[45,153855,84165],{"class":313},[45,153857,33327],{"class":51},[45,153859,153860,153863,153865,153868,153870,153872,153874],{"class":47,"line":1297},[45,153861,153862],{"class":51},"    daily_total[date] ",[45,153864,254],{"class":93},[45,153866,153867],{"class":51}," daily_total.get(date, ",[45,153869,400],{"class":257},[45,153871,13797],{"class":51},[45,153873,689],{"class":93},[45,153875,153876],{"class":51}," amount\n",[45,153878,153879],{"class":47,"line":1303},[45,153880,2483],{"emptyLinePlaceholder":133},[45,153882,153883,153885],{"class":47,"line":1394},[45,153884,30496],{"class":257},[45,153886,153887],{"class":51},"(daily_total)\n",[176,153889,153891],{"id":153890},"_1253-按类别统计","12.5.3 按类别统计",[35,153893,153895],{"className":37,"code":153894,"language":39,"meta":40,"style":40},"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",[42,153896,153897,153906,153910,153920,153933,153945,153963,153967],{"__ignoreMap":40},[45,153898,153899,153902,153904],{"class":47,"line":48},[45,153900,153901],{"class":51},"category_total ",[45,153903,254],{"class":93},[45,153905,87949],{"class":51},[45,153907,153908],{"class":47,"line":125},[45,153909,2483],{"emptyLinePlaceholder":133},[45,153911,153912,153914,153916,153918],{"class":47,"line":1262},[45,153913,3108],{"class":93},[45,153915,148260],{"class":51},[45,153917,26126],{"class":93},[45,153919,153830],{"class":51},[45,153921,153922,153925,153927,153929,153931],{"class":47,"line":1277},[45,153923,153924],{"class":51},"    category ",[45,153926,254],{"class":93},[45,153928,153840],{"class":51},[45,153930,153689],{"class":313},[45,153932,33327],{"class":51},[45,153934,153935,153937,153939,153941,153943],{"class":47,"line":1283},[45,153936,153849],{"class":51},[45,153938,254],{"class":93},[45,153940,153840],{"class":51},[45,153942,84165],{"class":313},[45,153944,33327],{"class":51},[45,153946,153947,153950,153952,153955,153957,153959,153961],{"class":47,"line":1297},[45,153948,153949],{"class":51},"    category_total[category] ",[45,153951,254],{"class":93},[45,153953,153954],{"class":51}," category_total.get(category, ",[45,153956,400],{"class":257},[45,153958,13797],{"class":51},[45,153960,689],{"class":93},[45,153962,153876],{"class":51},[45,153964,153965],{"class":47,"line":1303},[45,153966,2483],{"emptyLinePlaceholder":133},[45,153968,153969,153971],{"class":47,"line":1394},[45,153970,30496],{"class":257},[45,153972,153973],{"class":51},"(category_total)\n",[176,153975,153977],{"id":153976},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[35,153979,153981],{"className":37,"code":153980,"language":39,"meta":40,"style":40},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[42,153982,153983,154008],{"__ignoreMap":40},[45,153984,153985,153988,153990,153992,153995,153998,154001,154004,154006],{"class":47,"line":48},[45,153986,153987],{"class":51},"top_date, top_amount ",[45,153989,254],{"class":93},[45,153991,6034],{"class":257},[45,153993,153994],{"class":51},"(daily_total.items(), ",[45,153996,153997],{"class":5299},"key",[45,153999,154000],{"class":93},"=lambda",[45,154002,154003],{"class":51}," item: item[",[45,154005,426],{"class":257},[45,154007,4740],{"class":51},[45,154009,154010,154012],{"class":47,"line":125},[45,154011,30496],{"class":257},[45,154013,154014],{"class":51},"(top_date, top_amount)\n",[30,154016,154018],{"id":154017},"_126-绘制柱状图","12.6 绘制柱状图",[35,154020,154022],{"className":37,"code":154021,"language":39,"meta":40,"style":40},"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",[42,154023,154024,154038,154049,154053,154061,154073,154085,154096,154100,154104,154114,154125,154139,154144,154161,154178,154194,154198],{"__ignoreMap":40},[45,154025,154026,154028,154030,154032,154034,154036],{"class":47,"line":48},[45,154027,30818],{"class":93},[45,154029,147430],{"class":51},[45,154031,30473],{"class":93},[45,154033,147435],{"class":51},[45,154035,31464],{"class":93},[45,154037,147440],{"class":51},[45,154039,154040,154042,154044,154046],{"class":47,"line":125},[45,154041,30818],{"class":93},[45,154043,147289],{"class":51},[45,154045,30473],{"class":93},[45,154047,154048],{"class":51}," Bar\n",[45,154050,154051],{"class":47,"line":1262},[45,154052,2483],{"emptyLinePlaceholder":133},[45,154054,154055,154057,154059],{"class":47,"line":1277},[45,154056,153901],{"class":51},[45,154058,254],{"class":93},[45,154060,15655],{"class":51},[45,154062,154063,154066,154068,154071],{"class":47,"line":1283},[45,154064,154065],{"class":313},"    \"手机\"",[45,154067,51518],{"class":51},[45,154069,154070],{"class":257},"27000",[45,154072,31547],{"class":51},[45,154074,154075,154078,154080,154083],{"class":47,"line":1297},[45,154076,154077],{"class":313},"    \"电脑\"",[45,154079,51518],{"class":51},[45,154081,154082],{"class":257},"34000",[45,154084,31547],{"class":51},[45,154086,154087,154090,154092,154094],{"class":47,"line":1303},[45,154088,154089],{"class":313},"    \"耳机\"",[45,154091,51518],{"class":51},[45,154093,124450],{"class":257},[45,154095,31547],{"class":51},[45,154097,154098],{"class":47,"line":1394},[45,154099,1648],{"class":51},[45,154101,154102],{"class":47,"line":1400},[45,154103,2483],{"emptyLinePlaceholder":133},[45,154105,154106,154109,154111],{"class":47,"line":1412},[45,154107,154108],{"class":51},"bar ",[45,154110,254],{"class":93},[45,154112,154113],{"class":51}," Bar()\n",[45,154115,154116,154119,154122],{"class":47,"line":1695},[45,154117,154118],{"class":51},"bar.add_xaxis(",[45,154120,154121],{"class":257},"list",[45,154123,154124],{"class":51},"(category_total.keys()))\n",[45,154126,154127,154130,154132,154134,154136],{"class":47,"line":1700},[45,154128,154129],{"class":51},"bar.add_yaxis(",[45,154131,147346],{"class":313},[45,154133,12518],{"class":51},[45,154135,154121],{"class":257},[45,154137,154138],{"class":51},"(category_total.values()))\n",[45,154140,154141],{"class":47,"line":1706},[45,154142,154143],{"class":51},"bar.set_global_opts(\n",[45,154145,154146,154148,154150,154152,154154,154156,154159],{"class":47,"line":1711},[45,154147,147524],{"class":5299},[45,154149,254],{"class":93},[45,154151,147529],{"class":51},[45,154153,51488],{"class":5299},[45,154155,254],{"class":93},[45,154157,154158],{"class":313},"\"品类销售额\"",[45,154160,38128],{"class":51},[45,154162,154163,154165,154167,154169,154171,154173,154176],{"class":47,"line":1725},[45,154164,147543],{"class":5299},[45,154166,254],{"class":93},[45,154168,147548],{"class":51},[45,154170,79891],{"class":5299},[45,154172,254],{"class":93},[45,154174,154175],{"class":313},"\"品类\"",[45,154177,38128],{"class":51},[45,154179,154180,154182,154184,154186,154188,154190,154192],{"class":47,"line":1730},[45,154181,147562],{"class":5299},[45,154183,254],{"class":93},[45,154185,147548],{"class":51},[45,154187,79891],{"class":5299},[45,154189,254],{"class":93},[45,154191,147346],{"class":313},[45,154193,38128],{"class":51},[45,154195,154196],{"class":47,"line":1736},[45,154197,215],{"class":51},[45,154199,154200,154203,154206],{"class":47,"line":1757},[45,154201,154202],{"class":51},"bar.render(",[45,154204,154205],{"class":313},"\"category_sales.html\"",[45,154207,215],{"class":51},[30,154209,154211],{"id":154210},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[10,154213,154214],{},"时间线适合展示不同日期、月份、年份的数据变化。",[35,154216,154218],{"className":37,"code":154217,"language":39,"meta":40,"style":40},"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",[42,154219,154220,154234,154245,154249,154257,154281,154304,154329,154333,154337,154347,154351,154362,154371,154381,154395,154426,154431,154435],{"__ignoreMap":40},[45,154221,154222,154224,154226,154228,154230,154232],{"class":47,"line":48},[45,154223,30818],{"class":93},[45,154225,147430],{"class":51},[45,154227,30473],{"class":93},[45,154229,147435],{"class":51},[45,154231,31464],{"class":93},[45,154233,147440],{"class":51},[45,154235,154236,154238,154240,154242],{"class":47,"line":125},[45,154237,30818],{"class":93},[45,154239,147289],{"class":51},[45,154241,30473],{"class":93},[45,154243,154244],{"class":51}," Bar, Timeline\n",[45,154246,154247],{"class":47,"line":1262},[45,154248,2483],{"emptyLinePlaceholder":133},[45,154250,154251,154253,154255],{"class":47,"line":1277},[45,154252,101709],{"class":51},[45,154254,254],{"class":93},[45,154256,15655],{"class":51},[45,154258,154259,154262,154265,154267,154269,154271,154273,154275,154277,154279],{"class":47,"line":1283},[45,154260,154261],{"class":313},"    \"2024-10-01\"",[45,154263,154264],{"class":51},": {",[45,154266,153694],{"class":313},[45,154268,51518],{"class":51},[45,154270,153703],{"class":257},[45,154272,12518],{"class":51},[45,154274,153724],{"class":313},[45,154276,51518],{"class":51},[45,154278,153733],{"class":257},[45,154280,5013],{"class":51},[45,154282,154283,154286,154288,154290,154292,154294,154296,154298,154300,154302],{"class":47,"line":1297},[45,154284,154285],{"class":313},"    \"2024-10-02\"",[45,154287,154264],{"class":51},[45,154289,153694],{"class":313},[45,154291,51518],{"class":51},[45,154293,153762],{"class":257},[45,154295,12518],{"class":51},[45,154297,153724],{"class":313},[45,154299,51518],{"class":51},[45,154301,153791],{"class":257},[45,154303,5013],{"class":51},[45,154305,154306,154309,154311,154313,154315,154318,154320,154322,154324,154327],{"class":47,"line":1303},[45,154307,154308],{"class":313},"    \"2024-10-03\"",[45,154310,154264],{"class":51},[45,154312,153694],{"class":313},[45,154314,51518],{"class":51},[45,154316,154317],{"class":257},"17000",[45,154319,12518],{"class":51},[45,154321,153724],{"class":313},[45,154323,51518],{"class":51},[45,154325,154326],{"class":257},"19000",[45,154328,5013],{"class":51},[45,154330,154331],{"class":47,"line":1394},[45,154332,1648],{"class":51},[45,154334,154335],{"class":47,"line":1400},[45,154336,2483],{"emptyLinePlaceholder":133},[45,154338,154339,154342,154344],{"class":47,"line":1412},[45,154340,154341],{"class":51},"timeline ",[45,154343,254],{"class":93},[45,154345,154346],{"class":51}," Timeline()\n",[45,154348,154349],{"class":47,"line":1695},[45,154350,2483],{"emptyLinePlaceholder":133},[45,154352,154353,154355,154358,154360],{"class":47,"line":1700},[45,154354,3108],{"class":93},[45,154356,154357],{"class":51}," date, category_data ",[45,154359,26126],{"class":93},[45,154361,149199],{"class":51},[45,154363,154364,154367,154369],{"class":47,"line":1706},[45,154365,154366],{"class":51},"    bar ",[45,154368,254],{"class":93},[45,154370,154113],{"class":51},[45,154372,154373,154376,154378],{"class":47,"line":1711},[45,154374,154375],{"class":51},"    bar.add_xaxis(",[45,154377,154121],{"class":257},[45,154379,154380],{"class":51},"(category_data.keys()))\n",[45,154382,154383,154386,154388,154390,154392],{"class":47,"line":1725},[45,154384,154385],{"class":51},"    bar.add_yaxis(",[45,154387,147346],{"class":313},[45,154389,12518],{"class":51},[45,154391,154121],{"class":257},[45,154393,154394],{"class":51},"(category_data.values()))\n",[45,154396,154397,154400,154403,154405,154407,154409,154411,154413,154415,154417,154419,154421,154424],{"class":47,"line":1730},[45,154398,154399],{"class":51},"    bar.set_global_opts(",[45,154401,154402],{"class":5299},"title_opts",[45,154404,254],{"class":93},[45,154406,147529],{"class":51},[45,154408,51488],{"class":5299},[45,154410,254],{"class":93},[45,154412,261],{"class":93},[45,154414,459],{"class":313},[45,154416,1103],{"class":257},[45,154418,74007],{"class":51},[45,154420,1153],{"class":257},[45,154422,154423],{"class":313},"销售额\"",[45,154425,30578],{"class":51},[45,154427,154428],{"class":47,"line":1736},[45,154429,154430],{"class":51},"    timeline.add(bar, date)\n",[45,154432,154433],{"class":47,"line":1757},[45,154434,2483],{"emptyLinePlaceholder":133},[45,154436,154437,154440,154443],{"class":47,"line":1762},[45,154438,154439],{"class":51},"timeline.render(",[45,154441,154442],{"class":313},"\"timeline_sales.html\"",[45,154444,215],{"class":51},[30,154446,154448],{"id":154447},"_128-绘制地图","12.8 绘制地图",[10,154450,154451],{},"地图适合展示地区数据。",[35,154453,154455],{"className":37,"code":154454,"language":39,"meta":40,"style":40},"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",[42,154456,154457,154471,154482,154486,154494,154507,154519,154532,154545,154549,154553,154563,154578,154583,154600,154619,154623],{"__ignoreMap":40},[45,154458,154459,154461,154463,154465,154467,154469],{"class":47,"line":48},[45,154460,30818],{"class":93},[45,154462,147430],{"class":51},[45,154464,30473],{"class":93},[45,154466,147435],{"class":51},[45,154468,31464],{"class":93},[45,154470,147440],{"class":51},[45,154472,154473,154475,154477,154479],{"class":47,"line":125},[45,154474,30818],{"class":93},[45,154476,147289],{"class":51},[45,154478,30473],{"class":93},[45,154480,154481],{"class":51}," Map\n",[45,154483,154484],{"class":47,"line":1262},[45,154485,2483],{"emptyLinePlaceholder":133},[45,154487,154488,154490,154492],{"class":47,"line":1277},[45,154489,101709],{"class":51},[45,154491,254],{"class":93},[45,154493,55528],{"class":51},[45,154495,154496,154499,154501,154503,154505],{"class":47,"line":1283},[45,154497,154498],{"class":51},"    (",[45,154500,69350],{"class":313},[45,154502,12518],{"class":51},[45,154504,1024],{"class":257},[45,154506,38128],{"class":51},[45,154508,154509,154511,154513,154515,154517],{"class":47,"line":1297},[45,154510,154498],{"class":51},[45,154512,69370],{"class":313},[45,154514,12518],{"class":51},[45,154516,147363],{"class":257},[45,154518,38128],{"class":51},[45,154520,154521,154523,154526,154528,154530],{"class":47,"line":1303},[45,154522,154498],{"class":51},[45,154524,154525],{"class":313},"\"广东\"",[45,154527,12518],{"class":51},[45,154529,1805],{"class":257},[45,154531,38128],{"class":51},[45,154533,154534,154536,154539,154541,154543],{"class":47,"line":1394},[45,154535,154498],{"class":51},[45,154537,154538],{"class":313},"\"浙江\"",[45,154540,12518],{"class":51},[45,154542,147368],{"class":257},[45,154544,38128],{"class":51},[45,154546,154547],{"class":47,"line":1400},[45,154548,33327],{"class":51},[45,154550,154551],{"class":47,"line":1412},[45,154552,2483],{"emptyLinePlaceholder":133},[45,154554,154555,154558,154560],{"class":47,"line":1695},[45,154556,154557],{"class":51},"map_chart ",[45,154559,254],{"class":93},[45,154561,154562],{"class":51}," Map()\n",[45,154564,154565,154568,154570,154573,154576],{"class":47,"line":1700},[45,154566,154567],{"class":51},"map_chart.add(",[45,154569,147346],{"class":313},[45,154571,154572],{"class":51},", data, ",[45,154574,154575],{"class":313},"\"china\"",[45,154577,215],{"class":51},[45,154579,154580],{"class":47,"line":1706},[45,154581,154582],{"class":51},"map_chart.set_global_opts(\n",[45,154584,154585,154587,154589,154591,154593,154595,154598],{"class":47,"line":1711},[45,154586,147524],{"class":5299},[45,154588,254],{"class":93},[45,154590,147529],{"class":51},[45,154592,51488],{"class":5299},[45,154594,254],{"class":93},[45,154596,154597],{"class":313},"\"地区销售额\"",[45,154599,38128],{"class":51},[45,154601,154602,154605,154607,154610,154613,154615,154617],{"class":47,"line":1725},[45,154603,154604],{"class":5299},"    visualmap_opts",[45,154606,254],{"class":93},[45,154608,154609],{"class":51},"opts.VisualMapOpts(",[45,154611,154612],{"class":5299},"max_",[45,154614,254],{"class":93},[45,154616,1805],{"class":257},[45,154618,38128],{"class":51},[45,154620,154621],{"class":47,"line":1730},[45,154622,215],{"class":51},[45,154624,154625,154628,154631],{"class":47,"line":1736},[45,154626,154627],{"class":51},"map_chart.render(",[45,154629,154630],{"class":313},"\"map_sales.html\"",[45,154632,215],{"class":51},[10,154634,154635],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[30,154637,154639],{"id":154638},"_129-项目拆分建议","12.9 项目拆分建议",[10,154641,154642],{},"当代码超过一个文件时，可以这样组织：",[35,154644,154647],{"className":154645,"code":154646,"language":5270,"meta":40},[5268],"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",[42,154648,154646],{"__ignoreMap":40},[10,154650,154651],{},"职责：",[159,154653,154654,154660,154666,154672],{},[162,154655,154656,154659],{},[42,154657,154658],{},"main.py","：程序入口。",[162,154661,154662,154665],{},[42,154663,154664],{},"file_utils.py","：读写 JSON。",[162,154667,154668,154671],{},[42,154669,154670],{},"sales_service.py","：统计销售数据。",[162,154673,154674,154677],{},[42,154675,154676],{},"chart_builder.py","：生成图表。",[30,154679,154681],{"id":154680},"_1210-python基础复习清单","12.10 Python基础复习清单",[10,154683,154684],{},"语法基础：",[159,154686,154687,154690,154693,154696],{},[162,154688,154689],{},"会写变量、注释、输入输出。",[162,154691,154692],{},"会使用 int、float、str、bool。",[162,154694,154695],{},"会做类型转换。",[162,154697,154698],{},"会使用 f-string 格式化输出。",[10,154700,154701],{},"流程控制：",[159,154703,154704,154710,154716,154724],{},[162,154705,154706,154707,28468],{},"会写 ",[42,154708,154709],{},"if elif else",[162,154711,154706,154712,101069,154714,28468],{},[42,154713,108714],{},[42,154715,3108],{},[162,154717,154718,154719,101069,154721,28468],{},"理解 ",[42,154720,2136],{},[42,154722,154723],{},"continue",[162,154725,154726],{},"能写嵌套循环。",[10,154728,154729],{},"函数：",[159,154731,154732,154735,154738,154741],{},[162,154733,154734],{},"会定义和调用函数。",[162,154736,154737],{},"理解参数和返回值。",[162,154739,154740],{},"知道局部变量和全局变量。",[162,154742,154743],{},"会使用默认参数、关键字参数、不定长参数。",[10,154745,154746],{},"容器：",[159,154748,154749,154752,154755,154758,154761],{},[162,154750,154751],{},"会使用列表增删改查。",[162,154753,154754],{},"会遍历列表、字典。",[162,154756,154757],{},"会使用切片。",[162,154759,154760],{},"会用集合去重。",[162,154762,154763],{},"会处理列表嵌套字典。",[10,154765,154766],{},"文件和模块：",[159,154768,154769,154772,154775,154778,154781],{},[162,154770,154771],{},"会读写文本文件。",[162,154773,154774],{},"会读写 JSON。",[162,154776,154777],{},"会捕获常见异常。",[162,154779,154780],{},"会导入模块和第三方包。",[162,154782,154783],{},"会创建简单包结构。",[10,154785,154786],{},"项目能力：",[159,154788,154789,154792,154795,154798,154801],{},[162,154790,154791],{},"能把代码拆成函数。",[162,154793,154794],{},"能把数据保存到文件。",[162,154796,154797],{},"能处理用户输入错误。",[162,154799,154800],{},"能写一个完整菜单程序。",[162,154802,154803],{},"能用 pyecharts 生成图表。",[30,154805,154807],{"id":154806},"_1211-推荐练习顺序","12.11 推荐练习顺序",[159,154809,154810,154813,154816,154819,154822,154825,154828,154831],{},[162,154811,154812],{},"猜数字游戏。",[162,154814,154815],{},"ATM 菜单程序。",[162,154817,154818],{},"学生成绩统计。",[162,154820,154821],{},"学生管理系统函数版。",[162,154823,154824],{},"学生管理系统文件持久化版。",[162,154826,154827],{},"学生管理系统面向对象版。",[162,154829,154830],{},"销售数据统计。",[162,154832,154833],{},"销售数据可视化。",[30,154835,154837],{"id":154836},"_1212-常见学习误区","12.12 常见学习误区",[159,154839,154840,154843,154846,154849,154852,154855,154858],{},[162,154841,154842],{},"只看视频不敲代码。",[162,154844,154845],{},"一报错就复制错误去搜，不先读报错位置。",[162,154847,154848],{},"变量名随便写，后续自己看不懂。",[162,154850,154851],{},"所有代码都写在一个文件一个函数里。",[162,154853,154854],{},"不保存练习代码，复习时没有材料。",[162,154856,154857],{},"还没掌握列表字典就急着学框架。",[162,154859,154860],{},"不会读官方文档，只依赖教程。",[30,154862,154864],{"id":154863},"_1213-如何读报错","12.13 如何读报错",[10,154866,154867],{},"报错通常从下往上看最后几行。",[10,154869,15218],{},[35,154871,154874],{"className":154872,"code":154873,"language":5270,"meta":40},[5268],"ValueError: invalid literal for int() with base 10: 'abc'\n",[42,154875,154873],{"__ignoreMap":40},[10,154877,24682],{},[159,154879,154880,154886,154896],{},[162,154881,154882,154883,28468],{},"异常类型是 ",[42,154884,154885],{},"ValueError",[162,154887,107396,154888,154891,154892,154895],{},[42,154889,154890],{},"int()"," 无法把 ",[42,154893,154894],{},"'abc'"," 转成整数。",[162,154897,154898],{},"应该检查输入内容或增加异常处理。",[10,154900,154901],{},"再看文件名和行号：",[35,154903,154906],{"className":154904,"code":154905,"language":5270,"meta":40},[5268],"File \"main.py\", line 10, in \u003Cmodule>\n",[42,154907,154905],{"__ignoreMap":40},[10,154909,154910,154911,154913],{},"表示错误发生在 ",[42,154912,154658],{}," 第 10 行。",[30,154915,154917],{"id":154916},"_1214-后续学习方向","12.14 后续学习方向",[10,154919,154920],{},"Python 基础完成后，可以按兴趣选择方向：",[159,154922,154923,154935,154944,154956,154967,154976,154986],{},[162,154924,154925,154926,421,154929,421,154932,28468],{},"自动化办公：",[42,154927,154928],{},"openpyxl",[42,154930,154931],{},"python-docx",[42,154933,154934],{},"pdfplumber",[162,154936,154937,154938,421,154940,421,154942,28468],{},"数据分析：",[42,154939,100677],{},[42,154941,146236],{},[42,154943,146244],{},[162,154945,154946,154947,421,154950,421,154953,28468],{},"Web 后端：",[42,154948,154949],{},"Flask",[42,154951,154952],{},"FastAPI",[42,154954,154955],{},"Django",[162,154957,154958,154959,421,154961,421,154964,28468],{},"爬虫：",[42,154960,146221],{},[42,154962,154963],{},"BeautifulSoup",[42,154965,154966],{},"Scrapy",[162,154968,154969,154970,421,154972,154975],{},"测试开发：",[42,154971,146268],{},[42,154973,154974],{},"selenium","、接口测试。",[162,154977,154978,154979,421,154981,421,154983,28468],{},"人工智能：",[42,154980,100677],{},[42,154982,146236],{},[42,154984,154985],{},"pytorch",[162,154987,154988,154989,421,154991,421,154994,28468],{},"运维脚本：",[42,154990,145837],{},[42,154992,154993],{},"subprocess",[42,154995,154996],{},"paramiko",[10,154998,154999],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[30,155001,155003],{"id":155002},"_1215-结课练习","12.15 结课练习",[159,155005,155006,155009,155012,155015,155018,155021,155024,155027],{},[162,155007,155008],{},"完成函数版学生管理系统。",[162,155010,155011],{},"给学生管理系统增加 JSON 持久化。",[162,155013,155014],{},"给学生管理系统增加异常处理。",[162,155016,155017],{},"把学生管理系统改成面向对象版。",[162,155019,155020],{},"使用 pyecharts 绘制学生成绩柱状图。",[162,155022,155023],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[162,155025,155026],{},"按品类统计销售额并绘制柱状图。",[162,155028,155029],{},"写一份自己的 Python 学习路线图。",[121,155031,155032],{},"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":40,"searchDepth":125,"depth":125,"links":155034},[155035,155036,155039,155040,155041,155047,155048,155049,155050,155051,155052,155053,155054,155055,155056],{"id":151751,"depth":125,"text":151752},{"id":151801,"depth":125,"text":151802,"children":155037},[155038],{"id":151805,"depth":1262,"text":151806},{"id":151844,"depth":125,"text":151845},{"id":153318,"depth":125,"text":153319},{"id":153656,"depth":125,"text":153657,"children":155042},[155043,155044,155045,155046],{"id":153660,"depth":1262,"text":153661},{"id":153800,"depth":1262,"text":153801},{"id":153890,"depth":1262,"text":153891},{"id":153976,"depth":1262,"text":153977},{"id":154017,"depth":125,"text":154018},{"id":154210,"depth":125,"text":154211},{"id":154447,"depth":125,"text":154448},{"id":154638,"depth":125,"text":154639},{"id":154680,"depth":125,"text":154681},{"id":154806,"depth":125,"text":154807},{"id":154836,"depth":125,"text":154837},{"id":154863,"depth":125,"text":154864},{"id":154916,"depth":125,"text":154917},{"id":155002,"depth":125,"text":155003},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151743,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155063,"title":155064,"body":155065,"description":130,"extension":131,"meta":157534,"navigation":133,"path":157535,"seo":157536,"stem":157537,"__hash__":157538},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155066,"toc":157509},[155067,155070,155074,155077,155080,155100,155103,155126,155129,155132,155154,155157,155179,155183,155186,155226,155229,155350,155354,155357,155397,155400,155424,155427,155431,155434,155448,155481,155484,155519,155522,155545,155548,155581,155584,155586,155592,155667,155670,155676,155693,155733,155737,155740,155786,155788,155826,155829,155864,155867,155902,155905,155937,155940,155959,155963,155967,156080,156082,156157,156161,156207,156210,156236,156245,156249,156252,156315,156323,156351,156355,156395,156460,156464,156467,156506,156509,156554,156557,156618,156622,156649,156652,156680,156683,156687,156691,156756,156759,156797,156800,156832,156836,156935,156939,156942,157015,157018,157066,157070,157076,157116,157119,157166,157169,157218,157222,157224,157238,157240,157421,157425,157452,157472,157479,157483,157500,157506],[20,155068,155064],{"id":155069},"_2-基础语法变量与字符串",[30,155071,155073],{"id":155072},"_21-注释","2.1 注释",[10,155075,155076],{},"注释是给人看的说明文字，不会被 Python 执行。",[10,155078,155079],{},"单行注释：",[35,155081,155083],{"className":37,"code":155082,"language":39,"meta":40,"style":40},"# 这是单行注释\nprint(\"hello\")\n",[42,155084,155085,155090],{"__ignoreMap":40},[45,155086,155087],{"class":47,"line":48},[45,155088,155089],{"class":267},"# 这是单行注释\n",[45,155091,155092,155094,155096,155098],{"class":47,"line":125},[45,155093,30496],{"class":257},[45,155095,209],{"class":51},[45,155097,5927],{"class":313},[45,155099,215],{"class":51},[10,155101,155102],{},"多行说明常用三引号：",[35,155104,155106],{"className":37,"code":155105,"language":39,"meta":40,"style":40},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[42,155107,155108,155112,155117,155122],{"__ignoreMap":40},[45,155109,155110],{"class":47,"line":48},[45,155111,95749],{"class":313},[45,155113,155114],{"class":47,"line":125},[45,155115,155116],{"class":313},"这是多行说明。\n",[45,155118,155119],{"class":47,"line":1262},[45,155120,155121],{"class":313},"常用于文件顶部说明、函数说明等。\n",[45,155123,155124],{"class":47,"line":1277},[45,155125,95749],{"class":313},[10,155127,155128],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[10,155130,155131],{},"不好：",[35,155133,155135],{"className":37,"code":155134,"language":39,"meta":40,"style":40},"# age 加 1\nage = age + 1\n",[42,155136,155137,155142],{"__ignoreMap":40},[45,155138,155139],{"class":47,"line":48},[45,155140,155141],{"class":267},"# age 加 1\n",[45,155143,155144,155146,155148,155150,155152],{"class":47,"line":125},[45,155145,146597],{"class":51},[45,155147,254],{"class":93},[45,155149,15790],{"class":51},[45,155151,689],{"class":93},[45,155153,55780],{"class":257},[10,155155,155156],{},"较好：",[35,155158,155160],{"className":37,"code":155159,"language":39,"meta":40,"style":40},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[42,155161,155162,155167],{"__ignoreMap":40},[45,155163,155164],{"class":47,"line":48},[45,155165,155166],{"class":267},"# 用户过完生日后，年龄增加一岁\n",[45,155168,155169,155171,155173,155175,155177],{"class":47,"line":125},[45,155170,146597],{"class":51},[45,155172,254],{"class":93},[45,155174,15790],{"class":51},[45,155176,689],{"class":93},[45,155178,55780],{"class":257},[30,155180,155182],{"id":155181},"_22-字面量","2.2 字面量",[10,155184,155185],{},"字面量就是代码中直接写出来的数据。",[35,155187,155189],{"className":37,"code":155188,"language":39,"meta":40,"style":40},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[42,155190,155191,155198,155205,155212,155219],{"__ignoreMap":40},[45,155192,155193,155195],{"class":47,"line":48},[45,155194,519],{"class":257},[45,155196,155197],{"class":267},"          # 整数\n",[45,155199,155200,155202],{"class":47,"line":125},[45,155201,258],{"class":257},[45,155203,155204],{"class":267},"         # 小数\n",[45,155206,155207,155209],{"class":47,"line":1262},[45,155208,5927],{"class":313},[45,155210,155211],{"class":267},"      # 字符串\n",[45,155213,155214,155216],{"class":47,"line":1277},[45,155215,31557],{"class":257},[45,155217,155218],{"class":267},"         # 布尔值\n",[45,155220,155221,155223],{"class":47,"line":1283},[45,155222,95737],{"class":257},[45,155224,155225],{"class":267},"         # 空值\n",[10,155227,155228],{},"常见字面量类型：",[346,155230,155231,155241],{},[349,155232,155233],{},[352,155234,155235,155237,155239],{},[355,155236,23820],{},[355,155238,27575],{},[355,155240,25952],{},[393,155242,155243,155254,155265,155276,155288,155300,155312,155325,155337],{},[352,155244,155245,155247,155251],{},[398,155246,212],{},[398,155248,155249],{},[42,155250,519],{},[398,155252,155253],{},"整数",[352,155255,155256,155258,155262],{},[398,155257,248],{},[398,155259,155260],{},[42,155261,258],{},[398,155263,155264],{},"浮点数",[352,155266,155267,155269,155273],{},[398,155268,1382],{},[398,155270,155271],{},[42,155272,5927],{},[398,155274,155275],{},"字符串",[352,155277,155278,155280,155286],{},[398,155279,1437],{},[398,155281,155282,421,155284],{},[42,155283,31557],{},[42,155285,34068],{},[398,155287,66096],{},[352,155289,155290,155293,155297],{},[398,155291,155292],{},"NoneType",[398,155294,155295],{},[42,155296,95737],{},[398,155298,155299],{},"空值",[352,155301,155302,155304,155309],{},[398,155303,154121],{},[398,155305,155306],{},[42,155307,155308],{},"[1, 2, 3]",[398,155310,155311],{},"列表",[352,155313,155314,155317,155322],{},[398,155315,155316],{},"tuple",[398,155318,155319],{},[42,155320,155321],{},"(1, 2, 3)",[398,155323,155324],{},"元组",[352,155326,155327,155329,155334],{},[398,155328,114597],{},[398,155330,155331],{},[42,155332,155333],{},"{\"name\": \"张三\"}",[398,155335,155336],{},"字典",[352,155338,155339,155342,155347],{},[398,155340,155341],{},"set",[398,155343,155344],{},[42,155345,155346],{},"{1, 2, 3}",[398,155348,155349],{},"集合",[30,155351,155353],{"id":155352},"_23-变量","2.3 变量",[10,155355,155356],{},"变量是保存数据的名字。",[35,155358,155360],{"className":37,"code":155359,"language":39,"meta":40,"style":40},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[42,155361,155362,155370,155378,155388],{"__ignoreMap":40},[45,155363,155364,155366,155368],{"class":47,"line":48},[45,155365,146587],{"class":51},[45,155367,254],{"class":93},[45,155369,149404],{"class":313},[45,155371,155372,155374,155376],{"class":47,"line":125},[45,155373,146597],{"class":51},[45,155375,254],{"class":93},[45,155377,146602],{"class":257},[45,155379,155380,155383,155385],{"class":47,"line":1262},[45,155381,155382],{"class":51},"height ",[45,155384,254],{"class":93},[45,155386,155387],{"class":257}," 1.75\n",[45,155389,155390,155393,155395],{"class":47,"line":1277},[45,155391,155392],{"class":51},"is_student ",[45,155394,254],{"class":93},[45,155396,153650],{"class":257},[10,155398,155399],{},"Python 的变量不需要提前声明类型：",[35,155401,155403],{"className":37,"code":155402,"language":39,"meta":40,"style":40},"score = 100\nscore = \"满分\"\n",[42,155404,155405,155415],{"__ignoreMap":40},[45,155406,155407,155410,155412],{"class":47,"line":48},[45,155408,155409],{"class":51},"score ",[45,155411,254],{"class":93},[45,155413,155414],{"class":257}," 100\n",[45,155416,155417,155419,155421],{"class":47,"line":125},[45,155418,155409],{"class":51},[45,155420,254],{"class":93},[45,155422,155423],{"class":313}," \"满分\"\n",[10,155425,155426],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[30,155428,155430],{"id":155429},"_24-变量命名规则","2.4 变量命名规则",[10,155432,155433],{},"硬性规则：",[159,155435,155436,155439,155442,155445],{},[162,155437,155438],{},"只能由字母、数字、下划线组成。",[162,155440,155441],{},"不能以数字开头。",[162,155443,155444],{},"不能使用 Python 关键字。",[162,155446,155447],{},"区分大小写。",[35,155449,155451],{"className":37,"code":155450,"language":39,"meta":40,"style":40},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[42,155452,155453,155462,155471],{"__ignoreMap":40},[45,155454,155455,155458,155460],{"class":47,"line":48},[45,155456,155457],{"class":51},"user_name ",[45,155459,254],{"class":93},[45,155461,146592],{"class":313},[45,155463,155464,155467,155469],{"class":47,"line":125},[45,155465,155466],{"class":51},"age2 ",[45,155468,254],{"class":93},[45,155470,146602],{"class":257},[45,155472,155473,155476,155478],{"class":47,"line":1262},[45,155474,155475],{"class":51},"_token ",[45,155477,254],{"class":93},[45,155479,155480],{"class":313}," \"abc\"\n",[10,155482,155483],{},"错误写法：",[35,155485,155487],{"className":37,"code":155486,"language":39,"meta":40,"style":40},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[42,155488,155489,155498,155510],{"__ignoreMap":40},[45,155490,155491,155494,155496],{"class":47,"line":48},[45,155492,155493],{"class":77484},"2age",[45,155495,13647],{"class":93},[45,155497,146602],{"class":257},[45,155499,155500,155502,155504,155506,155508],{"class":47,"line":125},[45,155501,131635],{"class":51},[45,155503,94],{"class":93},[45,155505,146587],{"class":51},[45,155507,254],{"class":93},[45,155509,146592],{"class":313},[45,155511,155512,155514,155516],{"class":47,"line":1262},[45,155513,14777],{"class":93},[45,155515,13647],{"class":93},[45,155517,155518],{"class":313}," \"一班\"\n",[10,155520,155521],{},"查看关键字：",[35,155523,155525],{"className":37,"code":155524,"language":39,"meta":40,"style":40},"import keyword\n\nprint(keyword.kwlist)\n",[42,155526,155527,155534,155538],{"__ignoreMap":40},[45,155528,155529,155531],{"class":47,"line":48},[45,155530,30473],{"class":93},[45,155532,155533],{"class":51}," keyword\n",[45,155535,155536],{"class":47,"line":125},[45,155537,2483],{"emptyLinePlaceholder":133},[45,155539,155540,155542],{"class":47,"line":1262},[45,155541,30496],{"class":257},[45,155543,155544],{"class":51},"(keyword.kwlist)\n",[10,155546,155547],{},"推荐命名风格：",[35,155549,155551],{"className":37,"code":155550,"language":39,"meta":40,"style":40},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[42,155552,155553,155562,155572],{"__ignoreMap":40},[45,155554,155555,155558,155560],{"class":47,"line":48},[45,155556,155557],{"class":51},"student_name ",[45,155559,254],{"class":93},[45,155561,149404],{"class":313},[45,155563,155564,155567,155569],{"class":47,"line":125},[45,155565,155566],{"class":51},"total_price ",[45,155568,254],{"class":93},[45,155570,155571],{"class":257}," 99.8\n",[45,155573,155574,155577,155579],{"class":47,"line":1262},[45,155575,155576],{"class":51},"is_finished ",[45,155578,254],{"class":93},[45,155580,125858],{"class":257},[10,155582,155583],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[30,155585,50813],{"id":50812},[10,155587,104417,155588,155591],{},[42,155589,155590],{},"type()"," 查看数据类型：",[35,155593,155595],{"className":37,"code":155594,"language":39,"meta":40,"style":40},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[42,155596,155597,155611,155625,155639,155653],{"__ignoreMap":40},[45,155598,155599,155601,155603,155605,155607,155609],{"class":47,"line":48},[45,155600,30496],{"class":257},[45,155602,209],{"class":51},[45,155604,103158],{"class":257},[45,155606,209],{"class":51},[45,155608,519],{"class":257},[45,155610,30578],{"class":51},[45,155612,155613,155615,155617,155619,155621,155623],{"class":47,"line":125},[45,155614,30496],{"class":257},[45,155616,209],{"class":51},[45,155618,103158],{"class":257},[45,155620,209],{"class":51},[45,155622,258],{"class":257},[45,155624,30578],{"class":51},[45,155626,155627,155629,155631,155633,155635,155637],{"class":47,"line":1262},[45,155628,30496],{"class":257},[45,155630,209],{"class":51},[45,155632,103158],{"class":257},[45,155634,209],{"class":51},[45,155636,5927],{"class":313},[45,155638,30578],{"class":51},[45,155640,155641,155643,155645,155647,155649,155651],{"class":47,"line":1277},[45,155642,30496],{"class":257},[45,155644,209],{"class":51},[45,155646,103158],{"class":257},[45,155648,209],{"class":51},[45,155650,31557],{"class":257},[45,155652,30578],{"class":51},[45,155654,155655,155657,155659,155661,155663,155665],{"class":47,"line":1283},[45,155656,30496],{"class":257},[45,155658,209],{"class":51},[45,155660,103158],{"class":257},[45,155662,209],{"class":51},[45,155664,95737],{"class":257},[45,155666,30578],{"class":51},[10,155668,155669],{},"输出类似：",[35,155671,155674],{"className":155672,"code":155673,"language":5270,"meta":40},[5268],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[42,155675,155673],{"__ignoreMap":40},[10,155677,9108,155678,107334,155680,155682,155683,155685,155686,21583,155688,155685,155690,155692],{},[42,155679,1437],{},[42,155681,212],{}," 的子类，",[42,155684,31557],{}," 可以当作 ",[42,155687,426],{},[42,155689,34068],{},[42,155691,400],{},"，但业务代码中不要滥用。",[35,155694,155696],{"className":37,"code":155695,"language":39,"meta":40,"style":40},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[42,155697,155698,155716],{"__ignoreMap":40},[45,155699,155700,155702,155704,155706,155708,155710,155713],{"class":47,"line":48},[45,155701,30496],{"class":257},[45,155703,209],{"class":51},[45,155705,31557],{"class":257},[45,155707,45647],{"class":93},[45,155709,25201],{"class":257},[45,155711,155712],{"class":51},")   ",[45,155714,155715],{"class":267},"# 2\n",[45,155717,155718,155720,155722,155724,155726,155728,155730],{"class":47,"line":125},[45,155719,30496],{"class":257},[45,155721,209],{"class":51},[45,155723,34068],{"class":257},[45,155725,45647],{"class":93},[45,155727,25201],{"class":257},[45,155729,45889],{"class":51},[45,155731,155732],{"class":267},"# 1\n",[30,155734,155736],{"id":155735},"_26-类型转换","2.6 类型转换",[10,155738,155739],{},"常用转换函数：",[35,155741,155743],{"className":37,"code":155742,"language":39,"meta":40,"style":40},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[42,155744,155745,155755,155766,155776],{"__ignoreMap":40},[45,155746,155747,155749,155751,155753],{"class":47,"line":48},[45,155748,212],{"class":257},[45,155750,209],{"class":51},[45,155752,54397],{"class":313},[45,155754,215],{"class":51},[45,155756,155757,155759,155761,155764],{"class":47,"line":125},[45,155758,248],{"class":257},[45,155760,209],{"class":51},[45,155762,155763],{"class":313},"\"3.14\"",[45,155765,215],{"class":51},[45,155767,155768,155770,155772,155774],{"class":47,"line":1262},[45,155769,1382],{"class":257},[45,155771,209],{"class":51},[45,155773,519],{"class":257},[45,155775,215],{"class":51},[45,155777,155778,155780,155782,155784],{"class":47,"line":1277},[45,155779,1437],{"class":257},[45,155781,209],{"class":51},[45,155783,426],{"class":257},[45,155785,215],{"class":51},[10,155787,15218],{},[35,155789,155791],{"className":37,"code":155790,"language":39,"meta":40,"style":40},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[42,155792,155793,155802,155813],{"__ignoreMap":40},[45,155794,155795,155797,155799],{"class":47,"line":48},[45,155796,146597],{"class":51},[45,155798,254],{"class":93},[45,155800,155801],{"class":313}," \"18\"\n",[45,155803,155804,155806,155808,155810],{"class":47,"line":125},[45,155805,146597],{"class":51},[45,155807,254],{"class":93},[45,155809,2465],{"class":257},[45,155811,155812],{"class":51},"(age)\n",[45,155814,155815,155817,155820,155822,155824],{"class":47,"line":1262},[45,155816,30496],{"class":257},[45,155818,155819],{"class":51},"(age ",[45,155821,689],{"class":93},[45,155823,25201],{"class":257},[45,155825,215],{"class":51},[10,155827,155828],{},"输入得到的内容永远是字符串：",[35,155830,155832],{"className":37,"code":155831,"language":39,"meta":40,"style":40},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[42,155833,155834,155850],{"__ignoreMap":40},[45,155835,155836,155839,155841,155843,155845,155848],{"class":47,"line":48},[45,155837,155838],{"class":51},"num ",[45,155840,254],{"class":93},[45,155842,60686],{"class":257},[45,155844,209],{"class":51},[45,155846,155847],{"class":313},"\"请输入数字:\"",[45,155849,215],{"class":51},[45,155851,155852,155854,155856,155858,155861],{"class":47,"line":125},[45,155853,30496],{"class":257},[45,155855,209],{"class":51},[45,155857,103158],{"class":257},[45,155859,155860],{"class":51},"(num))  ",[45,155862,155863],{"class":267},"# str\n",[10,155865,155866],{},"如果要做数学运算，必须转换：",[35,155868,155870],{"className":37,"code":155869,"language":39,"meta":40,"style":40},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[42,155871,155872,155890],{"__ignoreMap":40},[45,155873,155874,155876,155878,155880,155882,155884,155886,155888],{"class":47,"line":48},[45,155875,155838],{"class":51},[45,155877,254],{"class":93},[45,155879,2465],{"class":257},[45,155881,209],{"class":51},[45,155883,53902],{"class":257},[45,155885,209],{"class":51},[45,155887,155847],{"class":313},[45,155889,30578],{"class":51},[45,155891,155892,155894,155896,155898,155900],{"class":47,"line":125},[45,155893,30496],{"class":257},[45,155895,45700],{"class":51},[45,155897,689],{"class":93},[45,155899,2121],{"class":257},[45,155901,215],{"class":51},[10,155903,155904],{},"常见错误：",[35,155906,155908],{"className":37,"code":155907,"language":39,"meta":40,"style":40},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[42,155909,155910,155923],{"__ignoreMap":40},[45,155911,155912,155914,155916,155918,155920],{"class":47,"line":48},[45,155913,212],{"class":257},[45,155915,209],{"class":51},[45,155917,155763],{"class":313},[45,155919,155712],{"class":51},[45,155921,155922],{"class":267},"# 错误\n",[45,155924,155925,155927,155929,155932,155935],{"class":47,"line":125},[45,155926,212],{"class":257},[45,155928,209],{"class":51},[45,155930,155931],{"class":313},"\"abc\"",[45,155933,155934],{"class":51},")    ",[45,155936,155922],{"class":267},[10,155938,155939],{},"正确写法：",[35,155941,155943],{"className":37,"code":155942,"language":39,"meta":40,"style":40},"num = float(\"3.14\")\n",[42,155944,155945],{"__ignoreMap":40},[45,155946,155947,155949,155951,155953,155955,155957],{"class":47,"line":48},[45,155948,155838],{"class":51},[45,155950,254],{"class":93},[45,155952,109848],{"class":257},[45,155954,209],{"class":51},[45,155956,155763],{"class":313},[45,155958,215],{"class":51},[30,155960,155962],{"id":155961},"_27-运算符","2.7 运算符",[176,155964,155966],{"id":155965},"_271-算术运算符","2.7.1 算术运算符",[346,155968,155969,155980],{},[349,155970,155971],{},[352,155972,155973,155976,155978],{},[355,155974,155975],{},"运算符",[355,155977,25952],{},[355,155979,27575],{},[393,155981,155982,155996,156010,156024,156038,156052,156066],{},[352,155983,155984,155988,155991],{},[398,155985,155986],{},[42,155987,689],{},[398,155989,155990],{},"加法",[398,155992,155993],{},[42,155994,155995],{},"1 + 2",[352,155997,155998,156002,156005],{},[398,155999,156000],{},[42,156001,94],{},[398,156003,156004],{},"减法",[398,156006,156007],{},[42,156008,156009],{},"5 - 3",[352,156011,156012,156016,156019],{},[398,156013,156014],{},[42,156015,663],{},[398,156017,156018],{},"乘法",[398,156020,156021],{},[42,156022,156023],{},"2 * 3",[352,156025,156026,156030,156033],{},[398,156027,156028],{},[42,156029,791],{},[398,156031,156032],{},"除法，结果是浮点数",[398,156034,156035],{},[42,156036,156037],{},"5 \u002F 2",[352,156039,156040,156044,156047],{},[398,156041,156042],{},[42,156043,33410],{},[398,156045,156046],{},"整除",[398,156048,156049],{},[42,156050,156051],{},"5 \u002F\u002F 2",[352,156053,156054,156058,156061],{},[398,156055,156056],{},[42,156057,536],{},[398,156059,156060],{},"取余",[398,156062,156063],{},[42,156064,156065],{},"5 % 2",[352,156067,156068,156072,156075],{},[398,156069,156070],{},[42,156071,10744],{},[398,156073,156074],{},"幂运算",[398,156076,156077],{},[42,156078,156079],{},"2 ** 3",[10,156081,15218],{},[35,156083,156085],{"className":37,"code":156084,"language":39,"meta":40,"style":40},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[42,156086,156087,156105,156122,156139],{"__ignoreMap":40},[45,156088,156089,156091,156093,156095,156098,156100,156102],{"class":47,"line":48},[45,156090,30496],{"class":257},[45,156092,209],{"class":51},[45,156094,527],{"class":257},[45,156096,156097],{"class":93}," \u002F",[45,156099,14838],{"class":257},[45,156101,155712],{"class":51},[45,156103,156104],{"class":267},"# 2.5\n",[45,156106,156107,156109,156111,156113,156116,156118,156120],{"class":47,"line":125},[45,156108,30496],{"class":257},[45,156110,209],{"class":51},[45,156112,527],{"class":257},[45,156114,156115],{"class":93}," \u002F\u002F",[45,156117,14838],{"class":257},[45,156119,45889],{"class":51},[45,156121,155715],{"class":267},[45,156123,156124,156126,156128,156130,156133,156135,156137],{"class":47,"line":1262},[45,156125,30496],{"class":257},[45,156127,209],{"class":51},[45,156129,527],{"class":257},[45,156131,156132],{"class":93}," %",[45,156134,14838],{"class":257},[45,156136,155712],{"class":51},[45,156138,155732],{"class":267},[45,156140,156141,156143,156145,156147,156150,156152,156154],{"class":47,"line":1277},[45,156142,30496],{"class":257},[45,156144,209],{"class":51},[45,156146,286],{"class":257},[45,156148,156149],{"class":93}," **",[45,156151,78151],{"class":257},[45,156153,45889],{"class":51},[45,156155,156156],{"class":267},"# 8\n",[176,156158,156160],{"id":156159},"_272-赋值运算符","2.7.2 赋值运算符",[35,156162,156164],{"className":37,"code":156163,"language":39,"meta":40,"style":40},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[42,156165,156166,156174,156182,156190,156198],{"__ignoreMap":40},[45,156167,156168,156170,156172],{"class":47,"line":48},[45,156169,155838],{"class":51},[45,156171,254],{"class":93},[45,156173,58509],{"class":257},[45,156175,156176,156178,156180],{"class":47,"line":125},[45,156177,155838],{"class":51},[45,156179,9560],{"class":93},[45,156181,54508],{"class":257},[45,156183,156184,156186,156188],{"class":47,"line":1262},[45,156185,155838],{"class":51},[45,156187,150303],{"class":93},[45,156189,47804],{"class":257},[45,156191,156192,156194,156196],{"class":47,"line":1277},[45,156193,155838],{"class":51},[45,156195,137199],{"class":93},[45,156197,120087],{"class":257},[45,156199,156200,156202,156205],{"class":47,"line":1283},[45,156201,155838],{"class":51},[45,156203,156204],{"class":93},"\u002F=",[45,156206,47804],{"class":257},[10,156208,156209],{},"等价关系：",[35,156211,156213],{"className":37,"code":156212,"language":39,"meta":40,"style":40},"num += 1\nnum = num + 1\n",[42,156214,156215,156223],{"__ignoreMap":40},[45,156216,156217,156219,156221],{"class":47,"line":48},[45,156218,155838],{"class":51},[45,156220,9560],{"class":93},[45,156222,55780],{"class":257},[45,156224,156225,156227,156229,156232,156234],{"class":47,"line":125},[45,156226,155838],{"class":51},[45,156228,254],{"class":93},[45,156230,156231],{"class":51}," num ",[45,156233,689],{"class":93},[45,156235,55780],{"class":257},[10,156237,156238,156239,101069,156242,28468],{},"Python 没有 ",[42,156240,156241],{},"num++",[42,156243,156244],{},"num--",[176,156246,156248],{"id":156247},"_273-比较运算符","2.7.3 比较运算符",[10,156250,156251],{},"比较运算结果是布尔值。",[35,156253,156255],{"className":37,"code":156254,"language":39,"meta":40,"style":40},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[42,156256,156257,156271,156286,156300],{"__ignoreMap":40},[45,156258,156259,156261,156263,156265,156267,156269],{"class":47,"line":48},[45,156260,30496],{"class":257},[45,156262,209],{"class":51},[45,156264,654],{"class":257},[45,156266,26305],{"class":93},[45,156268,2231],{"class":257},[45,156270,215],{"class":51},[45,156272,156273,156275,156277,156279,156282,156284],{"class":47,"line":125},[45,156274,30496],{"class":257},[45,156276,209],{"class":51},[45,156278,654],{"class":257},[45,156280,156281],{"class":93}," >=",[45,156283,2121],{"class":257},[45,156285,215],{"class":51},[45,156287,156288,156290,156292,156294,156296,156298],{"class":47,"line":1262},[45,156289,30496],{"class":257},[45,156291,209],{"class":51},[45,156293,654],{"class":257},[45,156295,101610],{"class":93},[45,156297,2166],{"class":257},[45,156299,215],{"class":51},[45,156301,156302,156304,156306,156308,156311,156313],{"class":47,"line":1277},[45,156303,30496],{"class":257},[45,156305,209],{"class":51},[45,156307,654],{"class":257},[45,156309,156310],{"class":93}," !=",[45,156312,2166],{"class":257},[45,156314,215],{"class":51},[10,156316,156317,156318,156320,156321,28468],{},"注意：判断相等用 ",[42,156319,3032],{},"，赋值用 ",[42,156322,254],{},[35,156324,156326],{"className":37,"code":156325,"language":39,"meta":40,"style":40},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[42,156327,156328,156340],{"__ignoreMap":40},[45,156329,156330,156332,156334,156337],{"class":47,"line":48},[45,156331,146597],{"class":51},[45,156333,254],{"class":93},[45,156335,156336],{"class":257}," 18",[45,156338,156339],{"class":267},"       # 赋值\n",[45,156341,156342,156344,156346,156348],{"class":47,"line":125},[45,156343,146597],{"class":51},[45,156345,3032],{"class":93},[45,156347,156336],{"class":257},[45,156349,156350],{"class":267},"      # 判断是否相等\n",[176,156352,156354],{"id":156353},"_274-逻辑运算符","2.7.4 逻辑运算符",[346,156356,156357,156365],{},[349,156358,156359],{},[352,156360,156361,156363],{},[355,156362,155975],{},[355,156364,25952],{},[393,156366,156367,156376,156385],{},[352,156368,156369,156373],{},[398,156370,156371],{},[42,156372,30543],{},[398,156374,156375],{},"并且",[352,156377,156378,156382],{},[398,156379,156380],{},[42,156381,115141],{},[398,156383,156384],{},"或者",[352,156386,156387,156392],{},[398,156388,156389],{},[42,156390,156391],{},"not",[398,156393,156394],{},"取反",[35,156396,156398],{"className":37,"code":156397,"language":39,"meta":40,"style":40},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[42,156399,156400,156408,156417,156421,156436,156450],{"__ignoreMap":40},[45,156401,156402,156404,156406],{"class":47,"line":48},[45,156403,146597],{"class":51},[45,156405,254],{"class":93},[45,156407,88146],{"class":257},[45,156409,156410,156413,156415],{"class":47,"line":125},[45,156411,156412],{"class":51},"has_ticket ",[45,156414,254],{"class":93},[45,156416,153650],{"class":257},[45,156418,156419],{"class":47,"line":1262},[45,156420,2483],{"emptyLinePlaceholder":133},[45,156422,156423,156425,156427,156429,156431,156433],{"class":47,"line":1277},[45,156424,30496],{"class":257},[45,156426,155819],{"class":51},[45,156428,1793],{"class":93},[45,156430,156336],{"class":257},[45,156432,120480],{"class":93},[45,156434,156435],{"class":51}," has_ticket)\n",[45,156437,156438,156440,156442,156444,156446,156448],{"class":47,"line":1283},[45,156439,30496],{"class":257},[45,156441,155819],{"class":51},[45,156443,1117],{"class":93},[45,156445,156336],{"class":257},[45,156447,114252],{"class":93},[45,156449,156435],{"class":51},[45,156451,156452,156454,156456,156458],{"class":47,"line":1297},[45,156453,30496],{"class":257},[45,156455,209],{"class":51},[45,156457,156391],{"class":93},[45,156459,156435],{"class":51},[30,156461,156463],{"id":156462},"_28-字符串定义","2.8 字符串定义",[10,156465,156466],{},"三种常见写法：",[35,156468,156470],{"className":37,"code":156469,"language":39,"meta":40,"style":40},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[42,156471,156472,156482,156491,156501],{"__ignoreMap":40},[45,156473,156474,156477,156479],{"class":47,"line":48},[45,156475,156476],{"class":51},"name1 ",[45,156478,254],{"class":93},[45,156480,156481],{"class":313}," '小明'\n",[45,156483,156484,156487,156489],{"class":47,"line":125},[45,156485,156486],{"class":51},"name2 ",[45,156488,254],{"class":93},[45,156490,149404],{"class":313},[45,156492,156493,156496,156498],{"class":47,"line":1262},[45,156494,156495],{"class":51},"text ",[45,156497,254],{"class":93},[45,156499,156500],{"class":313}," \"\"\"这是多行字符串\n",[45,156502,156503],{"class":47,"line":1277},[45,156504,156505],{"class":313},"可以换行\"\"\"\n",[10,156507,156508],{},"字符串中包含引号：",[35,156510,156512],{"className":37,"code":156511,"language":39,"meta":40,"style":40},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[42,156513,156514,156524,156534],{"__ignoreMap":40},[45,156515,156516,156519,156521],{"class":47,"line":48},[45,156517,156518],{"class":51},"msg ",[45,156520,254],{"class":93},[45,156522,156523],{"class":313}," \"他说:'你好'\"\n",[45,156525,156526,156529,156531],{"class":47,"line":125},[45,156527,156528],{"class":51},"msg2 ",[45,156530,254],{"class":93},[45,156532,156533],{"class":313}," '他说:\"你好\"'\n",[45,156535,156536,156539,156541,156544,156547,156550,156552],{"class":47,"line":1262},[45,156537,156538],{"class":51},"msg3 ",[45,156540,254],{"class":93},[45,156542,156543],{"class":313}," \"他说:",[45,156545,156546],{"class":257},"\\\"",[45,156548,156549],{"class":313},"你好",[45,156551,156546],{"class":257},[45,156553,25216],{"class":313},[10,156555,156556],{},"常见转义字符：",[346,156558,156559,156568],{},[349,156560,156561],{},[352,156562,156563,156566],{},[355,156564,156565],{},"写法",[355,156567,100751],{},[393,156569,156570,156580,156589,156599,156608],{},[352,156571,156572,156577],{},[398,156573,156574],{},[42,156575,156576],{},"\\n",[398,156578,156579],{},"换行",[352,156581,156582,156586],{},[398,156583,156584],{},[42,156585,1313],{},[398,156587,156588],{},"制表符",[352,156590,156591,156596],{},[398,156592,156593],{},[42,156594,156595],{},"\\\\",[398,156597,156598],{},"反斜杠",[352,156600,156601,156605],{},[398,156602,156603],{},[42,156604,156546],{},[398,156606,156607],{},"双引号",[352,156609,156610,156615],{},[398,156611,156612],{},[42,156613,156614],{},"\\'",[398,156616,156617],{},"单引号",[30,156619,156621],{"id":156620},"_29-字符串拼接","2.9 字符串拼接",[35,156623,156625],{"className":37,"code":156624,"language":39,"meta":40,"style":40},"name = \"小明\"\nprint(\"你好，\" + name)\n",[42,156626,156627,156635],{"__ignoreMap":40},[45,156628,156629,156631,156633],{"class":47,"line":48},[45,156630,146587],{"class":51},[45,156632,254],{"class":93},[45,156634,149404],{"class":313},[45,156636,156637,156639,156641,156644,156646],{"class":47,"line":125},[45,156638,30496],{"class":257},[45,156640,209],{"class":51},[45,156642,156643],{"class":313},"\"你好，\"",[45,156645,45647],{"class":93},[45,156647,156648],{"class":51}," name)\n",[10,156650,156651],{},"字符串只能和字符串拼接：",[35,156653,156655],{"className":37,"code":156654,"language":39,"meta":40,"style":40},"age = 18\nprint(\"年龄:\" + str(age))\n",[42,156656,156657,156665],{"__ignoreMap":40},[45,156658,156659,156661,156663],{"class":47,"line":48},[45,156660,146597],{"class":51},[45,156662,254],{"class":93},[45,156664,146602],{"class":257},[45,156666,156667,156669,156671,156673,156675,156677],{"class":47,"line":125},[45,156668,30496],{"class":257},[45,156670,209],{"class":51},[45,156672,146568],{"class":313},[45,156674,45647],{"class":93},[45,156676,74000],{"class":257},[45,156678,156679],{"class":51},"(age))\n",[10,156681,156682],{},"更推荐使用格式化字符串。",[30,156684,156686],{"id":156685},"_210-字符串格式化","2.10 字符串格式化",[176,156688,156690],{"id":156689},"_2101-百分号格式化","2.10.1 百分号格式化",[35,156692,156694],{"className":37,"code":156693,"language":39,"meta":40,"style":40},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[42,156695,156696,156704,156712,156721,156725],{"__ignoreMap":40},[45,156697,156698,156700,156702],{"class":47,"line":48},[45,156699,146587],{"class":51},[45,156701,254],{"class":93},[45,156703,149404],{"class":313},[45,156705,156706,156708,156710],{"class":47,"line":125},[45,156707,146597],{"class":51},[45,156709,254],{"class":93},[45,156711,146602],{"class":257},[45,156713,156714,156716,156718],{"class":47,"line":1262},[45,156715,155409],{"class":51},[45,156717,254],{"class":93},[45,156719,156720],{"class":257}," 95.5\n",[45,156722,156723],{"class":47,"line":1277},[45,156724,2483],{"emptyLinePlaceholder":133},[45,156726,156727,156729,156731,156734,156737,156740,156743,156746,156749,156751,156753],{"class":47,"line":1283},[45,156728,30496],{"class":257},[45,156730,209],{"class":51},[45,156732,156733],{"class":313},"\"姓名:",[45,156735,156736],{"class":257},"%s",[45,156738,156739],{"class":313}," 年龄:",[45,156741,156742],{"class":257},"%d",[45,156744,156745],{"class":313}," 分数:",[45,156747,156748],{"class":257},"%.1f",[45,156750,459],{"class":313},[45,156752,156132],{"class":93},[45,156754,156755],{"class":51}," (name, age, score))\n",[10,156757,156758],{},"常用占位符：",[346,156760,156761,156770],{},[349,156762,156763],{},[352,156764,156765,156768],{},[355,156766,156767],{},"占位符",[355,156769,25952],{},[393,156771,156772,156780,156788],{},[352,156773,156774,156778],{},[398,156775,156776],{},[42,156777,156736],{},[398,156779,155275],{},[352,156781,156782,156786],{},[398,156783,156784],{},[42,156785,156742],{},[398,156787,155253],{},[352,156789,156790,156795],{},[398,156791,156792],{},[42,156793,156794],{},"%f",[398,156796,155264],{},[10,156798,156799],{},"精度控制：",[35,156801,156803],{"className":37,"code":156802,"language":39,"meta":40,"style":40},"price = 12.3456\nprint(\"%.2f\" % price)\n",[42,156804,156805,156814],{"__ignoreMap":40},[45,156806,156807,156809,156811],{"class":47,"line":48},[45,156808,146732],{"class":51},[45,156810,254],{"class":93},[45,156812,156813],{"class":257}," 12.3456\n",[45,156815,156816,156818,156820,156822,156825,156827,156829],{"class":47,"line":125},[45,156817,30496],{"class":257},[45,156819,209],{"class":51},[45,156821,459],{"class":313},[45,156823,156824],{"class":257},"%.2f",[45,156826,459],{"class":313},[45,156828,156132],{"class":93},[45,156830,156831],{"class":51}," price)\n",[176,156833,156835],{"id":156834},"_2102-format方法","2.10.2 format方法",[35,156837,156839],{"className":37,"code":156838,"language":39,"meta":40,"style":40},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[42,156840,156841,156849,156857,156861,156880,156900],{"__ignoreMap":40},[45,156842,156843,156845,156847],{"class":47,"line":48},[45,156844,146587],{"class":51},[45,156846,254],{"class":93},[45,156848,149404],{"class":313},[45,156850,156851,156853,156855],{"class":47,"line":125},[45,156852,146597],{"class":51},[45,156854,254],{"class":93},[45,156856,146602],{"class":257},[45,156858,156859],{"class":47,"line":1262},[45,156860,2483],{"emptyLinePlaceholder":133},[45,156862,156863,156865,156867,156869,156871,156873,156875,156877],{"class":47,"line":1277},[45,156864,30496],{"class":257},[45,156866,209],{"class":51},[45,156868,156733],{"class":313},[45,156870,32540],{"class":257},[45,156872,156739],{"class":313},[45,156874,32540],{"class":257},[45,156876,459],{"class":313},[45,156878,156879],{"class":51},".format(name, age))\n",[45,156881,156882,156884,156886,156888,156891,156893,156896,156898],{"class":47,"line":1283},[45,156883,30496],{"class":257},[45,156885,209],{"class":51},[45,156887,156733],{"class":313},[45,156889,156890],{"class":257},"{0}",[45,156892,156739],{"class":313},[45,156894,156895],{"class":257},"{1}",[45,156897,459],{"class":313},[45,156899,156879],{"class":51},[45,156901,156902,156904,156906,156908,156911,156913,156916,156918,156921,156923,156925,156928,156930,156932],{"class":47,"line":1297},[45,156903,30496],{"class":257},[45,156905,209],{"class":51},[45,156907,156733],{"class":313},[45,156909,156910],{"class":257},"{name}",[45,156912,156739],{"class":313},[45,156914,156915],{"class":257},"{age}",[45,156917,459],{"class":313},[45,156919,156920],{"class":51},".format(",[45,156922,79891],{"class":5299},[45,156924,254],{"class":93},[45,156926,156927],{"class":51},"name, ",[45,156929,70302],{"class":5299},[45,156931,254],{"class":93},[45,156933,156934],{"class":51},"age))\n",[176,156936,156938],{"id":156937},"_2103-f-string","2.10.3 f-string",[10,156940,156941],{},"推荐写法：",[35,156943,156945],{"className":37,"code":156944,"language":39,"meta":40,"style":40},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[42,156946,156947,156955,156963,156971,156975],{"__ignoreMap":40},[45,156948,156949,156951,156953],{"class":47,"line":48},[45,156950,146587],{"class":51},[45,156952,254],{"class":93},[45,156954,149404],{"class":313},[45,156956,156957,156959,156961],{"class":47,"line":125},[45,156958,146597],{"class":51},[45,156960,254],{"class":93},[45,156962,146602],{"class":257},[45,156964,156965,156967,156969],{"class":47,"line":1262},[45,156966,155409],{"class":51},[45,156968,254],{"class":93},[45,156970,156720],{"class":257},[45,156972,156973],{"class":47,"line":1277},[45,156974,2483],{"emptyLinePlaceholder":133},[45,156976,156977,156979,156981,156983,156985,156987,156989,156991,156993,156995,156997,156999,157001,157003,157006,157009,157011,157013],{"class":47,"line":1283},[45,156978,30496],{"class":257},[45,156980,209],{"class":51},[45,156982,261],{"class":93},[45,156984,156733],{"class":313},[45,156986,1103],{"class":257},[45,156988,79891],{"class":51},[45,156990,1153],{"class":257},[45,156992,156739],{"class":313},[45,156994,1103],{"class":257},[45,156996,70302],{"class":51},[45,156998,1153],{"class":257},[45,157000,156745],{"class":313},[45,157002,1103],{"class":257},[45,157004,157005],{"class":51},"score",[45,157007,157008],{"class":93},":.1f",[45,157010,1153],{"class":257},[45,157012,459],{"class":313},[45,157014,215],{"class":51},[10,157016,157017],{},"表达式也可以放进去：",[35,157019,157021],{"className":37,"code":157020,"language":39,"meta":40,"style":40},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[42,157022,157023,157031,157039],{"__ignoreMap":40},[45,157024,157025,157027,157029],{"class":47,"line":48},[45,157026,146732],{"class":51},[45,157028,254],{"class":93},[45,157030,146737],{"class":257},[45,157032,157033,157035,157037],{"class":47,"line":125},[45,157034,146742],{"class":51},[45,157036,254],{"class":93},[45,157038,54508],{"class":257},[45,157040,157041,157043,157045,157047,157050,157052,157054,157056,157059,157061,157064],{"class":47,"line":1262},[45,157042,30496],{"class":257},[45,157044,209],{"class":51},[45,157046,261],{"class":93},[45,157048,157049],{"class":313},"\"总价:",[45,157051,1103],{"class":257},[45,157053,146732],{"class":51},[45,157055,663],{"class":93},[45,157057,157058],{"class":51}," count",[45,157060,1153],{"class":257},[45,157062,157063],{"class":313},"元\"",[45,157065,215],{"class":51},[30,157067,157069],{"id":157068},"_211-input输入","2.11 input输入",[10,157071,157072,157075],{},[42,157073,157074],{},"input()"," 会暂停程序，等待用户输入。",[35,157077,157079],{"className":37,"code":157078,"language":39,"meta":40,"style":40},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[42,157080,157081,157095],{"__ignoreMap":40},[45,157082,157083,157085,157087,157089,157091,157093],{"class":47,"line":48},[45,157084,146587],{"class":51},[45,157086,254],{"class":93},[45,157088,60686],{"class":257},[45,157090,209],{"class":51},[45,157092,152430],{"class":313},[45,157094,215],{"class":51},[45,157096,157097,157099,157101,157103,157106,157108,157110,157112,157114],{"class":47,"line":125},[45,157098,30496],{"class":257},[45,157100,209],{"class":51},[45,157102,261],{"class":93},[45,157104,157105],{"class":313},"\"你好，",[45,157107,1103],{"class":257},[45,157109,79891],{"class":51},[45,157111,1153],{"class":257},[45,157113,459],{"class":313},[45,157115,215],{"class":51},[10,157117,157118],{},"输入整数：",[35,157120,157122],{"className":37,"code":157121,"language":39,"meta":40,"style":40},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[42,157123,157124,157142],{"__ignoreMap":40},[45,157125,157126,157128,157130,157132,157134,157136,157138,157140],{"class":47,"line":48},[45,157127,146597],{"class":51},[45,157129,254],{"class":93},[45,157131,2465],{"class":257},[45,157133,209],{"class":51},[45,157135,53902],{"class":257},[45,157137,209],{"class":51},[45,157139,152445],{"class":313},[45,157141,30578],{"class":51},[45,157143,157144,157146,157148,157150,157153,157155,157157,157159,157162,157164],{"class":47,"line":125},[45,157145,30496],{"class":257},[45,157147,209],{"class":51},[45,157149,261],{"class":93},[45,157151,157152],{"class":313},"\"明年你",[45,157154,1103],{"class":257},[45,157156,146597],{"class":51},[45,157158,689],{"class":93},[45,157160,157161],{"class":257}," 1}",[45,157163,149455],{"class":313},[45,157165,215],{"class":51},[10,157167,157168],{},"输入小数：",[35,157170,157172],{"className":37,"code":157171,"language":39,"meta":40,"style":40},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[42,157173,157174,157193],{"__ignoreMap":40},[45,157175,157176,157178,157180,157182,157184,157186,157188,157191],{"class":47,"line":48},[45,157177,155382],{"class":51},[45,157179,254],{"class":93},[45,157181,109848],{"class":257},[45,157183,209],{"class":51},[45,157185,53902],{"class":257},[45,157187,209],{"class":51},[45,157189,157190],{"class":313},"\"请输入身高:\"",[45,157192,30578],{"class":51},[45,157194,157195,157197,157199,157201,157204,157206,157208,157211,157213,157216],{"class":47,"line":125},[45,157196,30496],{"class":257},[45,157198,209],{"class":51},[45,157200,261],{"class":93},[45,157202,157203],{"class":313},"\"身高:",[45,157205,1103],{"class":257},[45,157207,25064],{"class":51},[45,157209,157210],{"class":93},":.2f",[45,157212,1153],{"class":257},[45,157214,157215],{"class":313},"米\"",[45,157217,215],{"class":51},[30,157219,157221],{"id":157220},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[10,157223,123343],{},[159,157225,157226,157229,157232,157235],{},[162,157227,157228],{},"输入商品单价。",[162,157230,157231],{},"输入购买数量。",[162,157233,157234],{},"输入折扣，例如 0.8 表示八折。",[162,157236,157237],{},"输出最终金额，保留两位小数。",[10,157239,10118],{},[35,157241,157243],{"className":37,"code":157242,"language":39,"meta":40,"style":40},"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",[42,157244,157245,157264,157283,157303,157307,157327,157331,157354,157375,157397],{"__ignoreMap":40},[45,157246,157247,157249,157251,157253,157255,157257,157259,157262],{"class":47,"line":48},[45,157248,146732],{"class":51},[45,157250,254],{"class":93},[45,157252,109848],{"class":257},[45,157254,209],{"class":51},[45,157256,53902],{"class":257},[45,157258,209],{"class":51},[45,157260,157261],{"class":313},"\"请输入商品单价:\"",[45,157263,30578],{"class":51},[45,157265,157266,157268,157270,157272,157274,157276,157278,157281],{"class":47,"line":125},[45,157267,146742],{"class":51},[45,157269,254],{"class":93},[45,157271,2465],{"class":257},[45,157273,209],{"class":51},[45,157275,53902],{"class":257},[45,157277,209],{"class":51},[45,157279,157280],{"class":313},"\"请输入购买数量:\"",[45,157282,30578],{"class":51},[45,157284,157285,157288,157290,157292,157294,157296,157298,157301],{"class":47,"line":1262},[45,157286,157287],{"class":51},"discount ",[45,157289,254],{"class":93},[45,157291,109848],{"class":257},[45,157293,209],{"class":51},[45,157295,53902],{"class":257},[45,157297,209],{"class":51},[45,157299,157300],{"class":313},"\"请输入折扣:\"",[45,157302,30578],{"class":51},[45,157304,157305],{"class":47,"line":1277},[45,157306,2483],{"emptyLinePlaceholder":133},[45,157308,157309,157312,157314,157317,157319,157322,157324],{"class":47,"line":1283},[45,157310,157311],{"class":51},"total ",[45,157313,254],{"class":93},[45,157315,157316],{"class":51}," price ",[45,157318,663],{"class":93},[45,157320,157321],{"class":51}," count ",[45,157323,663],{"class":93},[45,157325,157326],{"class":51}," discount\n",[45,157328,157329],{"class":47,"line":1297},[45,157330,2483],{"emptyLinePlaceholder":133},[45,157332,157333,157335,157337,157339,157342,157344,157346,157348,157350,157352],{"class":47,"line":1303},[45,157334,30496],{"class":257},[45,157336,209],{"class":51},[45,157338,261],{"class":93},[45,157340,157341],{"class":313},"\"商品单价:",[45,157343,1103],{"class":257},[45,157345,79896],{"class":51},[45,157347,157210],{"class":93},[45,157349,1153],{"class":257},[45,157351,459],{"class":313},[45,157353,215],{"class":51},[45,157355,157356,157358,157360,157362,157365,157367,157369,157371,157373],{"class":47,"line":1394},[45,157357,30496],{"class":257},[45,157359,209],{"class":51},[45,157361,261],{"class":93},[45,157363,157364],{"class":313},"\"购买数量:",[45,157366,1103],{"class":257},[45,157368,84515],{"class":51},[45,157370,1153],{"class":257},[45,157372,459],{"class":313},[45,157374,215],{"class":51},[45,157376,157377,157379,157381,157383,157386,157388,157391,157393,157395],{"class":47,"line":1400},[45,157378,30496],{"class":257},[45,157380,209],{"class":51},[45,157382,261],{"class":93},[45,157384,157385],{"class":313},"\"折扣:",[45,157387,1103],{"class":257},[45,157389,157390],{"class":51},"discount",[45,157392,1153],{"class":257},[45,157394,459],{"class":313},[45,157396,215],{"class":51},[45,157398,157399,157401,157403,157405,157408,157410,157413,157415,157417,157419],{"class":47,"line":1412},[45,157400,30496],{"class":257},[45,157402,209],{"class":51},[45,157404,261],{"class":93},[45,157406,157407],{"class":313},"\"应付金额:",[45,157409,1103],{"class":257},[45,157411,157412],{"class":51},"total",[45,157414,157210],{"class":93},[45,157416,1153],{"class":257},[45,157418,157063],{"class":313},[45,157420,215],{"class":51},[30,157422,157424],{"id":157423},"_213-易错点","2.13 易错点",[159,157426,157427,157432,157438,157446,157449],{},[162,157428,157429,157431],{},[42,157430,157074],{}," 的结果是字符串，做运算前要转换。",[162,157433,157434,157435,28468],{},"字符串拼接时，数字要先 ",[42,157436,157437],{},"str()",[162,157439,157440,157442,157443,157445],{},[42,157441,254],{}," 是赋值，",[42,157444,3032],{}," 是比较。",[162,157447,157448],{},"Python 没有自增自减运算符。",[162,157450,157451],{},"浮点数计算可能有精度误差：",[35,157453,157455],{"className":37,"code":157454,"language":39,"meta":40,"style":40},"print(0.1 + 0.2)\n",[42,157456,157457],{"__ignoreMap":40},[45,157458,157459,157461,157463,157465,157467,157470],{"class":47,"line":48},[45,157460,30496],{"class":257},[45,157462,209],{"class":51},[45,157464,86291],{"class":257},[45,157466,45647],{"class":93},[45,157468,157469],{"class":257}," 0.2",[45,157471,215],{"class":51},[10,157473,157474,157475,157478],{},"金额计算如果要求严格，可以后续学习 ",[42,157476,157477],{},"decimal"," 模块。",[30,157480,157482],{"id":157481},"_214-本章练习","2.14 本章练习",[159,157484,157485,157488,157491,157494,157497],{},[162,157486,157487],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[162,157489,157490],{},"输入圆的半径，计算面积，保留两位小数。",[162,157492,157493],{},"输入工资和奖金，计算总收入。",[162,157495,157496],{},"输入摄氏温度，转换为华氏温度。",[162,157498,157499],{},"写一个 BMI 计算程序：",[35,157501,157504],{"className":157502,"code":157503,"language":5270,"meta":40},[5268],"BMI = 体重kg \u002F 身高m ** 2\n",[42,157505,157503],{"__ignoreMap":40},[121,157507,157508],{},"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":40,"searchDepth":125,"depth":125,"links":157510},[157511,157512,157513,157514,157515,157516,157517,157523,157524,157525,157530,157531,157532,157533],{"id":155072,"depth":125,"text":155073},{"id":155181,"depth":125,"text":155182},{"id":155352,"depth":125,"text":155353},{"id":155429,"depth":125,"text":155430},{"id":50812,"depth":125,"text":50813},{"id":155735,"depth":125,"text":155736},{"id":155961,"depth":125,"text":155962,"children":157518},[157519,157520,157521,157522],{"id":155965,"depth":1262,"text":155966},{"id":156159,"depth":1262,"text":156160},{"id":156247,"depth":1262,"text":156248},{"id":156353,"depth":1262,"text":156354},{"id":156462,"depth":125,"text":156463},{"id":156620,"depth":125,"text":156621},{"id":156685,"depth":125,"text":156686,"children":157526},[157527,157528,157529],{"id":156689,"depth":1262,"text":156690},{"id":156834,"depth":1262,"text":156835},{"id":156937,"depth":1262,"text":156938},{"id":157068,"depth":125,"text":157069},{"id":157220,"depth":125,"text":157221},{"id":157423,"depth":125,"text":157424},{"id":157481,"depth":125,"text":157482},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155064,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157540,"title":157541,"body":157542,"description":130,"extension":131,"meta":159178,"navigation":133,"path":159179,"seo":159180,"stem":159181,"__hash__":159182},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157543,"toc":159159},[157544,157547,157551,157554,157569,157572,157600,157604,157654,157656,157672,157675,157701,157704,157708,157775,157778,157794,157798,157801,157919,157922,157929,157978,157984,157988,157991,158104,158107,158111,158115,158118,158168,158172,158175,158225,158229,158232,158270,158274,158277,158323,158326,158361,158365,158370,158373,158419,158421,158488,158492,158498,158609,158618,158622,158624,158635,158637,158803,158807,158809,158823,158825,159039,159043,159062,159079,159082,159128,159132,159156],[20,157545,157541],{"id":157546},"_3-判断语句",[30,157548,157550],{"id":157549},"_31-布尔值","3.1 布尔值",[10,157552,157553],{},"判断语句依赖布尔值：",[35,157555,157557],{"className":37,"code":157556,"language":39,"meta":40,"style":40},"True\nFalse\n",[42,157558,157559,157564],{"__ignoreMap":40},[45,157560,157561],{"class":47,"line":48},[45,157562,157563],{"class":257},"True\n",[45,157565,157566],{"class":47,"line":125},[45,157567,157568],{"class":257},"False\n",[10,157570,157571],{},"比较表达式会产生布尔值：",[35,157573,157575],{"className":37,"code":157574,"language":39,"meta":40,"style":40},"age = 18\nprint(age >= 18)  # True\n",[42,157576,157577,157585],{"__ignoreMap":40},[45,157578,157579,157581,157583],{"class":47,"line":48},[45,157580,146597],{"class":51},[45,157582,254],{"class":93},[45,157584,146602],{"class":257},[45,157586,157587,157589,157591,157593,157595,157597],{"class":47,"line":125},[45,157588,30496],{"class":257},[45,157590,155819],{"class":51},[45,157592,1793],{"class":93},[45,157594,156336],{"class":257},[45,157596,45889],{"class":51},[45,157598,157599],{"class":267},"# True\n",[30,157601,157603],{"id":157602},"_32-if基础语法","3.2 if基础语法",[35,157605,157607],{"className":37,"code":157606,"language":39,"meta":40,"style":40},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[42,157608,157609,157627,157631,157643],{"__ignoreMap":40},[45,157610,157611,157613,157615,157617,157619,157621,157623,157625],{"class":47,"line":48},[45,157612,146597],{"class":51},[45,157614,254],{"class":93},[45,157616,2465],{"class":257},[45,157618,209],{"class":51},[45,157620,53902],{"class":257},[45,157622,209],{"class":51},[45,157624,152445],{"class":313},[45,157626,30578],{"class":51},[45,157628,157629],{"class":47,"line":125},[45,157630,2483],{"emptyLinePlaceholder":133},[45,157632,157633,157635,157637,157639,157641],{"class":47,"line":1262},[45,157634,1614],{"class":93},[45,157636,15790],{"class":51},[45,157638,1793],{"class":93},[45,157640,156336],{"class":257},[45,157642,3822],{"class":51},[45,157644,157645,157647,157649,157652],{"class":47,"line":1277},[45,157646,31380],{"class":257},[45,157648,209],{"class":51},[45,157650,157651],{"class":313},"\"可以进入网吧\"",[45,157653,215],{"class":51},[10,157655,9108],{},[159,157657,157658,157663,157666,157669],{},[162,157659,157660,157662],{},[42,157661,1614],{}," 后面是条件表达式。",[162,157664,157665],{},"条件后面必须写冒号。",[162,157667,157668],{},"条件成立时执行缩进代码块。",[162,157670,157671],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[10,157673,157674],{},"错误示例：",[35,157676,157678],{"className":37,"code":157677,"language":39,"meta":40,"style":40},"if age >= 18\n    print(\"可以进入\")\n",[42,157679,157680,157690],{"__ignoreMap":40},[45,157681,157682,157684,157686,157688],{"class":47,"line":48},[45,157683,1614],{"class":93},[45,157685,15790],{"class":51},[45,157687,1793],{"class":93},[45,157689,146602],{"class":257},[45,157691,157692,157694,157696,157699],{"class":47,"line":125},[45,157693,31380],{"class":257},[45,157695,209],{"class":51},[45,157697,157698],{"class":313},"\"可以进入\"",[45,157700,215],{"class":51},[10,157702,157703],{},"缺少冒号。",[30,157705,157707],{"id":157706},"_33-if-else","3.3 if else",[35,157709,157711],{"className":37,"code":157710,"language":39,"meta":40,"style":40},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[42,157712,157713,157731,157735,157747,157758,157764],{"__ignoreMap":40},[45,157714,157715,157717,157719,157721,157723,157725,157727,157729],{"class":47,"line":48},[45,157716,146597],{"class":51},[45,157718,254],{"class":93},[45,157720,2465],{"class":257},[45,157722,209],{"class":51},[45,157724,53902],{"class":257},[45,157726,209],{"class":51},[45,157728,152445],{"class":313},[45,157730,30578],{"class":51},[45,157732,157733],{"class":47,"line":125},[45,157734,2483],{"emptyLinePlaceholder":133},[45,157736,157737,157739,157741,157743,157745],{"class":47,"line":1262},[45,157738,1614],{"class":93},[45,157740,15790],{"class":51},[45,157742,1793],{"class":93},[45,157744,156336],{"class":257},[45,157746,3822],{"class":51},[45,157748,157749,157751,157753,157756],{"class":47,"line":1277},[45,157750,31380],{"class":257},[45,157752,209],{"class":51},[45,157754,157755],{"class":313},"\"成年人\"",[45,157757,215],{"class":51},[45,157759,157760,157762],{"class":47,"line":1283},[45,157761,1784],{"class":93},[45,157763,3822],{"class":51},[45,157765,157766,157768,157770,157773],{"class":47,"line":1297},[45,157767,31380],{"class":257},[45,157769,209],{"class":51},[45,157771,157772],{"class":313},"\"未成年人\"",[45,157774,215],{"class":51},[10,157776,157777],{},"执行逻辑：",[159,157779,157780,157786,157791],{},[162,157781,157782,157783,157785],{},"条件成立，执行 ",[42,157784,1614],{}," 代码块。",[162,157787,157788,157789,157785],{},"条件不成立，执行 ",[42,157790,1784],{},[162,157792,157793],{},"两个代码块只会执行其中一个。",[30,157795,157797],{"id":157796},"_34-if-elif-else","3.4 if elif else",[10,157799,157800],{},"多条件判断：",[35,157802,157804],{"className":37,"code":157803,"language":39,"meta":40,"style":40},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[42,157805,157806,157824,157828,157842,157853,157867,157878,157891,157902,157908],{"__ignoreMap":40},[45,157807,157808,157810,157812,157814,157816,157818,157820,157822],{"class":47,"line":48},[45,157809,155409],{"class":51},[45,157811,254],{"class":93},[45,157813,2465],{"class":257},[45,157815,209],{"class":51},[45,157817,53902],{"class":257},[45,157819,209],{"class":51},[45,157821,152460],{"class":313},[45,157823,30578],{"class":51},[45,157825,157826],{"class":47,"line":125},[45,157827,2483],{"emptyLinePlaceholder":133},[45,157829,157830,157832,157835,157837,157840],{"class":47,"line":1262},[45,157831,1614],{"class":93},[45,157833,157834],{"class":51}," score ",[45,157836,1793],{"class":93},[45,157838,157839],{"class":257}," 90",[45,157841,3822],{"class":51},[45,157843,157844,157846,157848,157851],{"class":47,"line":1277},[45,157845,31380],{"class":257},[45,157847,209],{"class":51},[45,157849,157850],{"class":313},"\"优秀\"",[45,157852,215],{"class":51},[45,157854,157855,157858,157860,157862,157865],{"class":47,"line":1283},[45,157856,157857],{"class":93},"elif",[45,157859,157834],{"class":51},[45,157861,1793],{"class":93},[45,157863,157864],{"class":257}," 80",[45,157866,3822],{"class":51},[45,157868,157869,157871,157873,157876],{"class":47,"line":1297},[45,157870,31380],{"class":257},[45,157872,209],{"class":51},[45,157874,157875],{"class":313},"\"良好\"",[45,157877,215],{"class":51},[45,157879,157880,157882,157884,157886,157889],{"class":47,"line":1303},[45,157881,157857],{"class":93},[45,157883,157834],{"class":51},[45,157885,1793],{"class":93},[45,157887,157888],{"class":257}," 60",[45,157890,3822],{"class":51},[45,157892,157893,157895,157897,157900],{"class":47,"line":1394},[45,157894,31380],{"class":257},[45,157896,209],{"class":51},[45,157898,157899],{"class":313},"\"及格\"",[45,157901,215],{"class":51},[45,157903,157904,157906],{"class":47,"line":1400},[45,157905,1784],{"class":93},[45,157907,3822],{"class":51},[45,157909,157910,157912,157914,157917],{"class":47,"line":1412},[45,157911,31380],{"class":257},[45,157913,209],{"class":51},[45,157915,157916],{"class":313},"\"不及格\"",[45,157918,215],{"class":51},[10,157920,157921],{},"注意判断顺序很重要。",[10,157923,157924,157925,157928],{},"如果把 ",[42,157926,157927],{},"score >= 60"," 放在最前面：",[35,157930,157932],{"className":37,"code":157931,"language":39,"meta":40,"style":40},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[42,157933,157934,157946,157956,157968],{"__ignoreMap":40},[45,157935,157936,157938,157940,157942,157944],{"class":47,"line":48},[45,157937,1614],{"class":93},[45,157939,157834],{"class":51},[45,157941,1793],{"class":93},[45,157943,157888],{"class":257},[45,157945,3822],{"class":51},[45,157947,157948,157950,157952,157954],{"class":47,"line":125},[45,157949,31380],{"class":257},[45,157951,209],{"class":51},[45,157953,157899],{"class":313},[45,157955,215],{"class":51},[45,157957,157958,157960,157962,157964,157966],{"class":47,"line":1262},[45,157959,157857],{"class":93},[45,157961,157834],{"class":51},[45,157963,1793],{"class":93},[45,157965,157839],{"class":257},[45,157967,3822],{"class":51},[45,157969,157970,157972,157974,157976],{"class":47,"line":1277},[45,157971,31380],{"class":257},[45,157973,209],{"class":51},[45,157975,157850],{"class":313},[45,157977,215],{"class":51},[10,157979,157980,157981,157983],{},"成绩 95 会先满足 ",[42,157982,157927],{},"，后面的优秀分支就不会执行。",[30,157985,157987],{"id":157986},"_35-判断语句嵌套","3.5 判断语句嵌套",[10,157989,157990],{},"嵌套判断就是在一个判断内部再写判断。",[35,157992,157994],{"className":37,"code":157993,"language":39,"meta":40,"style":40},"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",[42,157995,157996,158014,158029,158033,158045,158059,158069,158076,158087,158093],{"__ignoreMap":40},[45,157997,157998,158000,158002,158004,158006,158008,158010,158012],{"class":47,"line":48},[45,157999,146597],{"class":51},[45,158001,254],{"class":93},[45,158003,2465],{"class":257},[45,158005,209],{"class":51},[45,158007,53902],{"class":257},[45,158009,209],{"class":51},[45,158011,152445],{"class":313},[45,158013,30578],{"class":51},[45,158015,158016,158018,158020,158022,158024,158027],{"class":47,"line":125},[45,158017,156412],{"class":51},[45,158019,254],{"class":93},[45,158021,60686],{"class":257},[45,158023,209],{"class":51},[45,158025,158026],{"class":313},"\"是否有票(y\u002Fn):\"",[45,158028,215],{"class":51},[45,158030,158031],{"class":47,"line":1262},[45,158032,2483],{"emptyLinePlaceholder":133},[45,158034,158035,158037,158039,158041,158043],{"class":47,"line":1277},[45,158036,1614],{"class":93},[45,158038,15790],{"class":51},[45,158040,1793],{"class":93},[45,158042,156336],{"class":257},[45,158044,3822],{"class":51},[45,158046,158047,158049,158052,158054,158057],{"class":47,"line":1283},[45,158048,3184],{"class":93},[45,158050,158051],{"class":51}," has_ticket ",[45,158053,3032],{"class":93},[45,158055,158056],{"class":313}," \"y\"",[45,158058,3822],{"class":51},[45,158060,158061,158063,158065,158067],{"class":47,"line":1297},[45,158062,32532],{"class":257},[45,158064,209],{"class":51},[45,158066,157698],{"class":313},[45,158068,215],{"class":51},[45,158070,158071,158074],{"class":47,"line":1303},[45,158072,158073],{"class":93},"    else",[45,158075,3822],{"class":51},[45,158077,158078,158080,158082,158085],{"class":47,"line":1394},[45,158079,32532],{"class":257},[45,158081,209],{"class":51},[45,158083,158084],{"class":313},"\"请先买票\"",[45,158086,215],{"class":51},[45,158088,158089,158091],{"class":47,"line":1400},[45,158090,1784],{"class":93},[45,158092,3822],{"class":51},[45,158094,158095,158097,158099,158102],{"class":47,"line":1412},[45,158096,31380],{"class":257},[45,158098,209],{"class":51},[45,158100,158101],{"class":313},"\"未成年人禁止进入\"",[45,158103,215],{"class":51},[10,158105,158106],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[30,158108,158110],{"id":158109},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[176,158112,158114],{"id":158113},"_361-and","3.6.1 and",[10,158116,158117],{},"两个条件都成立才成立。",[35,158119,158121],{"className":37,"code":158120,"language":39,"meta":40,"style":40},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[42,158122,158123,158131,158139,158143,158158],{"__ignoreMap":40},[45,158124,158125,158127,158129],{"class":47,"line":48},[45,158126,146597],{"class":51},[45,158128,254],{"class":93},[45,158130,88146],{"class":257},[45,158132,158133,158135,158137],{"class":47,"line":125},[45,158134,156412],{"class":51},[45,158136,254],{"class":93},[45,158138,153650],{"class":257},[45,158140,158141],{"class":47,"line":1262},[45,158142,2483],{"emptyLinePlaceholder":133},[45,158144,158145,158147,158149,158151,158153,158155],{"class":47,"line":1277},[45,158146,1614],{"class":93},[45,158148,15790],{"class":51},[45,158150,1793],{"class":93},[45,158152,156336],{"class":257},[45,158154,120480],{"class":93},[45,158156,158157],{"class":51}," has_ticket:\n",[45,158159,158160,158162,158164,158166],{"class":47,"line":1283},[45,158161,31380],{"class":257},[45,158163,209],{"class":51},[45,158165,157698],{"class":313},[45,158167,215],{"class":51},[176,158169,158171],{"id":158170},"_362-or","3.6.2 or",[10,158173,158174],{},"只要一个条件成立就成立。",[35,158176,158178],{"className":37,"code":158177,"language":39,"meta":40,"style":40},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[42,158179,158180,158189,158198,158202,158214],{"__ignoreMap":40},[45,158181,158182,158185,158187],{"class":47,"line":48},[45,158183,158184],{"class":51},"is_vip ",[45,158186,254],{"class":93},[45,158188,125858],{"class":257},[45,158190,158191,158194,158196],{"class":47,"line":125},[45,158192,158193],{"class":51},"coupon ",[45,158195,254],{"class":93},[45,158197,153650],{"class":257},[45,158199,158200],{"class":47,"line":1262},[45,158201,2483],{"emptyLinePlaceholder":133},[45,158203,158204,158206,158209,158211],{"class":47,"line":1277},[45,158205,1614],{"class":93},[45,158207,158208],{"class":51}," is_vip ",[45,158210,115141],{"class":93},[45,158212,158213],{"class":51}," coupon:\n",[45,158215,158216,158218,158220,158223],{"class":47,"line":1283},[45,158217,31380],{"class":257},[45,158219,209],{"class":51},[45,158221,158222],{"class":313},"\"可以享受优惠\"",[45,158224,215],{"class":51},[176,158226,158228],{"id":158227},"_363-not","3.6.3 not",[10,158230,158231],{},"取反。",[35,158233,158235],{"className":37,"code":158234,"language":39,"meta":40,"style":40},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[42,158236,158237,158246,158250,158259],{"__ignoreMap":40},[45,158238,158239,158242,158244],{"class":47,"line":48},[45,158240,158241],{"class":51},"is_closed ",[45,158243,254],{"class":93},[45,158245,125858],{"class":257},[45,158247,158248],{"class":47,"line":125},[45,158249,2483],{"emptyLinePlaceholder":133},[45,158251,158252,158254,158256],{"class":47,"line":1262},[45,158253,1614],{"class":93},[45,158255,39011],{"class":93},[45,158257,158258],{"class":51}," is_closed:\n",[45,158260,158261,158263,158265,158268],{"class":47,"line":1277},[45,158262,31380],{"class":257},[45,158264,209],{"class":51},[45,158266,158267],{"class":313},"\"店铺营业中\"",[45,158269,215],{"class":51},[30,158271,158273],{"id":158272},"_37-链式比较","3.7 链式比较",[10,158275,158276],{},"Python 支持链式比较：",[35,158278,158280],{"className":37,"code":158279,"language":39,"meta":40,"style":40},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[42,158281,158282,158291,158295,158312],{"__ignoreMap":40},[45,158283,158284,158286,158288],{"class":47,"line":48},[45,158285,155409],{"class":51},[45,158287,254],{"class":93},[45,158289,158290],{"class":257}," 85\n",[45,158292,158293],{"class":47,"line":125},[45,158294,2483],{"emptyLinePlaceholder":133},[45,158296,158297,158299,158301,158304,158306,158308,158310],{"class":47,"line":1262},[45,158298,1614],{"class":93},[45,158300,4176],{"class":257},[45,158302,158303],{"class":93}," \u003C=",[45,158305,157834],{"class":51},[45,158307,1671],{"class":93},[45,158309,5837],{"class":257},[45,158311,3822],{"class":51},[45,158313,158314,158316,158318,158321],{"class":47,"line":1277},[45,158315,31380],{"class":257},[45,158317,209],{"class":51},[45,158319,158320],{"class":313},"\"成绩合法\"",[45,158322,215],{"class":51},[10,158324,158325],{},"等价于：",[35,158327,158329],{"className":37,"code":158328,"language":39,"meta":40,"style":40},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[42,158330,158331,158351],{"__ignoreMap":40},[45,158332,158333,158335,158337,158339,158341,158343,158345,158347,158349],{"class":47,"line":48},[45,158334,1614],{"class":93},[45,158336,157834],{"class":51},[45,158338,1793],{"class":93},[45,158340,4176],{"class":257},[45,158342,120480],{"class":93},[45,158344,157834],{"class":51},[45,158346,1671],{"class":93},[45,158348,5837],{"class":257},[45,158350,3822],{"class":51},[45,158352,158353,158355,158357,158359],{"class":47,"line":125},[45,158354,31380],{"class":257},[45,158356,209],{"class":51},[45,158358,158320],{"class":313},[45,158360,215],{"class":51},[30,158362,158364],{"id":158363},"_38-真值和假值","3.8 真值和假值",[10,158366,116518,158367,158369],{},[42,158368,1614],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[10,158371,158372],{},"假值：",[35,158374,158376],{"className":37,"code":158375,"language":39,"meta":40,"style":40},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[42,158377,158378,158382,158387,158391,158395,158400,158404,158408,158413],{"__ignoreMap":40},[45,158379,158380],{"class":47,"line":48},[45,158381,157568],{"class":257},[45,158383,158384],{"class":47,"line":125},[45,158385,158386],{"class":257},"None\n",[45,158388,158389],{"class":47,"line":1262},[45,158390,3168],{"class":257},[45,158392,158393],{"class":47,"line":1277},[45,158394,32423],{"class":257},[45,158396,158397],{"class":47,"line":1283},[45,158398,158399],{"class":313},"\"\"\n",[45,158401,158402],{"class":47,"line":1297},[45,158403,32438],{"class":51},[45,158405,158406],{"class":47,"line":1303},[45,158407,2059],{"class":51},[45,158409,158410],{"class":47,"line":1394},[45,158411,158412],{"class":51},"{}\n",[45,158414,158415,158417],{"class":47,"line":1400},[45,158416,155341],{"class":257},[45,158418,2059],{"class":51},[10,158420,15218],{},[35,158422,158424],{"className":37,"code":158423,"language":39,"meta":40,"style":40},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[42,158425,158426,158440,158444,158451,158471,158477],{"__ignoreMap":40},[45,158427,158428,158430,158432,158434,158436,158438],{"class":47,"line":48},[45,158429,146587],{"class":51},[45,158431,254],{"class":93},[45,158433,60686],{"class":257},[45,158435,209],{"class":51},[45,158437,152430],{"class":313},[45,158439,215],{"class":51},[45,158441,158442],{"class":47,"line":125},[45,158443,2483],{"emptyLinePlaceholder":133},[45,158445,158446,158448],{"class":47,"line":1262},[45,158447,1614],{"class":93},[45,158449,158450],{"class":51}," name:\n",[45,158452,158453,158455,158457,158459,158461,158463,158465,158467,158469],{"class":47,"line":1277},[45,158454,31380],{"class":257},[45,158456,209],{"class":51},[45,158458,261],{"class":93},[45,158460,157105],{"class":313},[45,158462,1103],{"class":257},[45,158464,79891],{"class":51},[45,158466,1153],{"class":257},[45,158468,459],{"class":313},[45,158470,215],{"class":51},[45,158472,158473,158475],{"class":47,"line":1283},[45,158474,1784],{"class":93},[45,158476,3822],{"class":51},[45,158478,158479,158481,158483,158486],{"class":47,"line":1297},[45,158480,31380],{"class":257},[45,158482,209],{"class":51},[45,158484,158485],{"class":313},"\"姓名不能为空\"",[45,158487,215],{"class":51},[30,158489,158491],{"id":158490},"_39-match语句","3.9 match语句",[10,158493,158494,158495,158497],{},"Python 3.10 开始支持 ",[42,158496,71346],{},"。它适合处理固定选项。",[35,158499,158501],{"className":37,"code":158500,"language":39,"meta":40,"style":40},"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",[42,158502,158503,158519,158523,158530,158540,158551,158560,158571,158580,158591,158598],{"__ignoreMap":40},[45,158504,158505,158508,158510,158512,158514,158517],{"class":47,"line":48},[45,158506,158507],{"class":51},"command ",[45,158509,254],{"class":93},[45,158511,60686],{"class":257},[45,158513,209],{"class":51},[45,158515,158516],{"class":313},"\"请输入命令:\"",[45,158518,215],{"class":51},[45,158520,158521],{"class":47,"line":125},[45,158522,2483],{"emptyLinePlaceholder":133},[45,158524,158525,158527],{"class":47,"line":1262},[45,158526,71346],{"class":93},[45,158528,158529],{"class":51}," command:\n",[45,158531,158532,158535,158538],{"class":47,"line":1277},[45,158533,158534],{"class":93},"    case",[45,158536,158537],{"class":313}," \"start\"",[45,158539,3822],{"class":51},[45,158541,158542,158544,158546,158549],{"class":47,"line":1283},[45,158543,32532],{"class":257},[45,158545,209],{"class":51},[45,158547,158548],{"class":313},"\"启动\"",[45,158550,215],{"class":51},[45,158552,158553,158555,158558],{"class":47,"line":1297},[45,158554,158534],{"class":93},[45,158556,158557],{"class":313}," \"stop\"",[45,158559,3822],{"class":51},[45,158561,158562,158564,158566,158569],{"class":47,"line":1303},[45,158563,32532],{"class":257},[45,158565,209],{"class":51},[45,158567,158568],{"class":313},"\"停止\"",[45,158570,215],{"class":51},[45,158572,158573,158575,158578],{"class":47,"line":1394},[45,158574,158534],{"class":93},[45,158576,158577],{"class":313}," \"restart\"",[45,158579,3822],{"class":51},[45,158581,158582,158584,158586,158589],{"class":47,"line":1400},[45,158583,32532],{"class":257},[45,158585,209],{"class":51},[45,158587,158588],{"class":313},"\"重启\"",[45,158590,215],{"class":51},[45,158592,158593,158595],{"class":47,"line":1412},[45,158594,158534],{"class":93},[45,158596,158597],{"class":51}," _:\n",[45,158599,158600,158602,158604,158607],{"class":47,"line":1695},[45,158601,32532],{"class":257},[45,158603,209],{"class":51},[45,158605,158606],{"class":313},"\"未知命令\"",[45,158608,215],{"class":51},[10,158610,158611,158612,158614,158615,158617],{},"入门阶段掌握 ",[42,158613,154709],{}," 更重要，",[42,158616,71346],{}," 可以作为补充。",[30,158619,158621],{"id":158620},"_310-小案例成绩等级","3.10 小案例：成绩等级",[10,158623,123343],{},[159,158625,158626,158629,158632],{},[162,158627,158628],{},"输入成绩。",[162,158630,158631],{},"判断成绩是否合法。",[162,158633,158634],{},"输出等级。",[10,158636,10118],{},[35,158638,158640],{"className":37,"code":158639,"language":39,"meta":40,"style":40},"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",[42,158641,158642,158660,158664,158682,158693,158705,158716,158728,158739,158752,158763,158775,158786,158792],{"__ignoreMap":40},[45,158643,158644,158646,158648,158650,158652,158654,158656,158658],{"class":47,"line":48},[45,158645,155409],{"class":51},[45,158647,254],{"class":93},[45,158649,109848],{"class":257},[45,158651,209],{"class":51},[45,158653,53902],{"class":257},[45,158655,209],{"class":51},[45,158657,152460],{"class":313},[45,158659,30578],{"class":51},[45,158661,158662],{"class":47,"line":125},[45,158663,2483],{"emptyLinePlaceholder":133},[45,158665,158666,158668,158670,158672,158674,158676,158678,158680],{"class":47,"line":1262},[45,158667,1614],{"class":93},[45,158669,39011],{"class":93},[45,158671,4176],{"class":257},[45,158673,158303],{"class":93},[45,158675,157834],{"class":51},[45,158677,1671],{"class":93},[45,158679,5837],{"class":257},[45,158681,3822],{"class":51},[45,158683,158684,158686,158688,158691],{"class":47,"line":1277},[45,158685,31380],{"class":257},[45,158687,209],{"class":51},[45,158689,158690],{"class":313},"\"成绩不合法\"",[45,158692,215],{"class":51},[45,158694,158695,158697,158699,158701,158703],{"class":47,"line":1283},[45,158696,157857],{"class":93},[45,158698,157834],{"class":51},[45,158700,1793],{"class":93},[45,158702,157839],{"class":257},[45,158704,3822],{"class":51},[45,158706,158707,158709,158711,158714],{"class":47,"line":1297},[45,158708,31380],{"class":257},[45,158710,209],{"class":51},[45,158712,158713],{"class":313},"\"等级:A\"",[45,158715,215],{"class":51},[45,158717,158718,158720,158722,158724,158726],{"class":47,"line":1303},[45,158719,157857],{"class":93},[45,158721,157834],{"class":51},[45,158723,1793],{"class":93},[45,158725,157864],{"class":257},[45,158727,3822],{"class":51},[45,158729,158730,158732,158734,158737],{"class":47,"line":1394},[45,158731,31380],{"class":257},[45,158733,209],{"class":51},[45,158735,158736],{"class":313},"\"等级:B\"",[45,158738,215],{"class":51},[45,158740,158741,158743,158745,158747,158750],{"class":47,"line":1400},[45,158742,157857],{"class":93},[45,158744,157834],{"class":51},[45,158746,1793],{"class":93},[45,158748,158749],{"class":257}," 70",[45,158751,3822],{"class":51},[45,158753,158754,158756,158758,158761],{"class":47,"line":1412},[45,158755,31380],{"class":257},[45,158757,209],{"class":51},[45,158759,158760],{"class":313},"\"等级:C\"",[45,158762,215],{"class":51},[45,158764,158765,158767,158769,158771,158773],{"class":47,"line":1695},[45,158766,157857],{"class":93},[45,158768,157834],{"class":51},[45,158770,1793],{"class":93},[45,158772,157888],{"class":257},[45,158774,3822],{"class":51},[45,158776,158777,158779,158781,158784],{"class":47,"line":1700},[45,158778,31380],{"class":257},[45,158780,209],{"class":51},[45,158782,158783],{"class":313},"\"等级:D\"",[45,158785,215],{"class":51},[45,158787,158788,158790],{"class":47,"line":1706},[45,158789,1784],{"class":93},[45,158791,3822],{"class":51},[45,158793,158794,158796,158798,158801],{"class":47,"line":1711},[45,158795,31380],{"class":257},[45,158797,209],{"class":51},[45,158799,158800],{"class":313},"\"等级:E\"",[45,158802,215],{"class":51},[30,158804,158806],{"id":158805},"_311-小案例会员折扣","3.11 小案例：会员折扣",[10,158808,123343],{},[159,158810,158811,158814,158817,158820],{},[162,158812,158813],{},"输入消费金额。",[162,158815,158816],{},"输入会员等级，普通、银卡、金卡。",[162,158818,158819],{},"普通不打折，银卡 9 折，金卡 8 折。",[162,158821,158822],{},"满 500 再减 50。",[10,158824,10118],{},[35,158826,158828],{"className":37,"code":158827,"language":39,"meta":40,"style":40},"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",[42,158829,158830,158850,158866,158870,158878,158882,158896,158906,158919,158928,158941,158949,158955,158966,158970,158984,158988,159002,159012,159016],{"__ignoreMap":40},[45,158831,158832,158835,158837,158839,158841,158843,158845,158848],{"class":47,"line":48},[45,158833,158834],{"class":51},"amount ",[45,158836,254],{"class":93},[45,158838,109848],{"class":257},[45,158840,209],{"class":51},[45,158842,53902],{"class":257},[45,158844,209],{"class":51},[45,158846,158847],{"class":313},"\"请输入消费金额:\"",[45,158849,30578],{"class":51},[45,158851,158852,158855,158857,158859,158861,158864],{"class":47,"line":125},[45,158853,158854],{"class":51},"level ",[45,158856,254],{"class":93},[45,158858,60686],{"class":257},[45,158860,209],{"class":51},[45,158862,158863],{"class":313},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[45,158865,215],{"class":51},[45,158867,158868],{"class":47,"line":1262},[45,158869,2483],{"emptyLinePlaceholder":133},[45,158871,158872,158874,158876],{"class":47,"line":1277},[45,158873,157287],{"class":51},[45,158875,254],{"class":93},[45,158877,55780],{"class":257},[45,158879,158880],{"class":47,"line":1283},[45,158881,2483],{"emptyLinePlaceholder":133},[45,158883,158884,158886,158889,158891,158894],{"class":47,"line":1297},[45,158885,1614],{"class":93},[45,158887,158888],{"class":51}," level ",[45,158890,3032],{"class":93},[45,158892,158893],{"class":313}," \"银卡\"",[45,158895,3822],{"class":51},[45,158897,158898,158901,158903],{"class":47,"line":1303},[45,158899,158900],{"class":51},"    discount ",[45,158902,254],{"class":93},[45,158904,158905],{"class":257}," 0.9\n",[45,158907,158908,158910,158912,158914,158917],{"class":47,"line":1394},[45,158909,157857],{"class":93},[45,158911,158888],{"class":51},[45,158913,3032],{"class":93},[45,158915,158916],{"class":313}," \"金卡\"",[45,158918,3822],{"class":51},[45,158920,158921,158923,158925],{"class":47,"line":1400},[45,158922,158900],{"class":51},[45,158924,254],{"class":93},[45,158926,158927],{"class":257}," 0.8\n",[45,158929,158930,158932,158934,158936,158939],{"class":47,"line":1412},[45,158931,157857],{"class":93},[45,158933,158888],{"class":51},[45,158935,3032],{"class":93},[45,158937,158938],{"class":313}," \"普通\"",[45,158940,3822],{"class":51},[45,158942,158943,158945,158947],{"class":47,"line":1695},[45,158944,158900],{"class":51},[45,158946,254],{"class":93},[45,158948,55780],{"class":257},[45,158950,158951,158953],{"class":47,"line":1700},[45,158952,1784],{"class":93},[45,158954,3822],{"class":51},[45,158956,158957,158959,158961,158964],{"class":47,"line":1706},[45,158958,31380],{"class":257},[45,158960,209],{"class":51},[45,158962,158963],{"class":313},"\"会员等级输入错误，按普通会员计算\"",[45,158965,215],{"class":51},[45,158967,158968],{"class":47,"line":1711},[45,158969,2483],{"emptyLinePlaceholder":133},[45,158971,158972,158975,158977,158980,158982],{"class":47,"line":1725},[45,158973,158974],{"class":51},"pay ",[45,158976,254],{"class":93},[45,158978,158979],{"class":51}," amount ",[45,158981,663],{"class":93},[45,158983,157326],{"class":51},[45,158985,158986],{"class":47,"line":1730},[45,158987,2483],{"emptyLinePlaceholder":133},[45,158989,158990,158992,158995,158997,159000],{"class":47,"line":1736},[45,158991,1614],{"class":93},[45,158993,158994],{"class":51}," pay ",[45,158996,1793],{"class":93},[45,158998,158999],{"class":257}," 500",[45,159001,3822],{"class":51},[45,159003,159004,159007,159009],{"class":47,"line":1757},[45,159005,159006],{"class":51},"    pay ",[45,159008,150303],{"class":93},[45,159010,159011],{"class":257}," 50\n",[45,159013,159014],{"class":47,"line":1762},[45,159015,2483],{"emptyLinePlaceholder":133},[45,159017,159018,159020,159022,159024,159026,159028,159031,159033,159035,159037],{"class":47,"line":1776},[45,159019,30496],{"class":257},[45,159021,209],{"class":51},[45,159023,261],{"class":93},[45,159025,157407],{"class":313},[45,159027,1103],{"class":257},[45,159029,159030],{"class":51},"pay",[45,159032,157210],{"class":93},[45,159034,1153],{"class":257},[45,159036,157063],{"class":313},[45,159038,215],{"class":51},[30,159040,159042],{"id":159041},"_312-易错点","3.12 易错点",[159,159044,159045,159048,159051,159054,159059],{},[162,159046,159047],{},"冒号不能漏。",[162,159049,159050],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[162,159052,159053],{},"多分支判断要注意顺序。",[162,159055,159056,159057,28468],{},"判断相等用 ",[42,159058,3032],{},[162,159060,159061],{},"字符串比较区分大小写：",[35,159063,159065],{"className":37,"code":159064,"language":39,"meta":40,"style":40},"\"Y\" == \"y\"  # False\n",[42,159066,159067],{"__ignoreMap":40},[45,159068,159069,159072,159074,159076],{"class":47,"line":48},[45,159070,159071],{"class":313},"\"Y\"",[45,159073,101610],{"class":93},[45,159075,158056],{"class":313},[45,159077,159078],{"class":267},"  # False\n",[10,159080,159081],{},"可转换后再判断：",[35,159083,159085],{"className":37,"code":159084,"language":39,"meta":40,"style":40},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[42,159086,159087,159104,159117],{"__ignoreMap":40},[45,159088,159089,159092,159094,159096,159098,159101],{"class":47,"line":48},[45,159090,159091],{"class":51},"answer ",[45,159093,254],{"class":93},[45,159095,60686],{"class":257},[45,159097,209],{"class":51},[45,159099,159100],{"class":313},"\"是否继续(y\u002Fn):\"",[45,159102,159103],{"class":51},").lower()\n",[45,159105,159106,159108,159111,159113,159115],{"class":47,"line":125},[45,159107,1614],{"class":93},[45,159109,159110],{"class":51}," answer ",[45,159112,3032],{"class":93},[45,159114,158056],{"class":313},[45,159116,3822],{"class":51},[45,159118,159119,159121,159123,159126],{"class":47,"line":1262},[45,159120,31380],{"class":257},[45,159122,209],{"class":51},[45,159124,159125],{"class":313},"\"继续\"",[45,159127,215],{"class":51},[30,159129,159131],{"id":159130},"_313-本章练习","3.13 本章练习",[159,159133,159134,159137,159140,159143,159153],{},[162,159135,159136],{},"输入年龄，判断是否成年。",[162,159138,159139],{},"输入年份，判断是否为闰年。",[162,159141,159142],{},"输入三个数字，输出最大值。",[162,159144,159145,159146,159149,159150,159152],{},"写登录判断：用户名是 ",[42,159147,159148],{},"admin"," 且密码是 ",[42,159151,15167],{}," 才登录成功。",[162,159154,159155],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[121,159157,159158],{},"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":40,"searchDepth":125,"depth":125,"links":159160},[159161,159162,159163,159164,159165,159166,159171,159172,159173,159174,159175,159176,159177],{"id":157549,"depth":125,"text":157550},{"id":157602,"depth":125,"text":157603},{"id":157706,"depth":125,"text":157707},{"id":157796,"depth":125,"text":157797},{"id":157986,"depth":125,"text":157987},{"id":158109,"depth":125,"text":158110,"children":159167},[159168,159169,159170],{"id":158113,"depth":1262,"text":158114},{"id":158170,"depth":1262,"text":158171},{"id":158227,"depth":1262,"text":158228},{"id":158272,"depth":125,"text":158273},{"id":158363,"depth":125,"text":158364},{"id":158490,"depth":125,"text":158491},{"id":158620,"depth":125,"text":158621},{"id":158805,"depth":125,"text":158806},{"id":159041,"depth":125,"text":159042},{"id":159130,"depth":125,"text":159131},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157541,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159184,"title":159185,"body":159186,"description":130,"extension":131,"meta":160955,"navigation":133,"path":160956,"seo":160957,"stem":160958,"__hash__":160959},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159187,"toc":160935},[159188,159191,159195,159201,159204,159221,159225,159227,159244,159246,159291,159293,159310,159314,159317,159383,159386,159404,159408,159569,159578,159582,159586,159591,159638,159640,159646,159650,159655,159702,159704,159710,159714,159719,159755,159758,159805,159809,159815,159873,159878,159909,159914,159918,159973,159976,160048,160051,160110,160114,160117,160192,160195,160199,160305,160308,160334,160338,160350,160419,160422,160514,160518,160520,160531,160533,160663,160667,160869,160877,160881,160911,160915,160932],[20,159189,159185],{"id":159190},"_4-循环语句",[30,159192,159194],{"id":159193},"_41-为什么需要循环","4.1 为什么需要循环",[10,159196,159197,159198,159200],{},"如果要输出 1 到 100，不应该写 100 行 ",[42,159199,146523],{},"，而应该用循环。",[10,159202,159203],{},"循环适合处理重复任务：",[159,159205,159206,159209,159212,159215,159218],{},[162,159207,159208],{},"重复输出。",[162,159210,159211],{},"重复输入。",[162,159213,159214],{},"遍历数据。",[162,159216,159217],{},"持续执行菜单。",[162,159219,159220],{},"批量处理文件或数据。",[30,159222,159224],{"id":159223},"_42-while循环","4.2 while循环",[10,159226,5264],{},[35,159228,159230],{"className":37,"code":159229,"language":39,"meta":40,"style":40},"while 条件:\n    循环体\n",[42,159231,159232,159239],{"__ignoreMap":40},[45,159233,159234,159236],{"class":47,"line":48},[45,159235,108714],{"class":93},[45,159237,159238],{"class":51}," 条件:\n",[45,159240,159241],{"class":47,"line":125},[45,159242,159243],{"class":51},"    循环体\n",[10,159245,15218],{},[35,159247,159249],{"className":37,"code":159248,"language":39,"meta":40,"style":40},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[42,159250,159251,159259,159263,159275,159282],{"__ignoreMap":40},[45,159252,159253,159255,159257],{"class":47,"line":48},[45,159254,100199],{"class":51},[45,159256,254],{"class":93},[45,159258,55780],{"class":257},[45,159260,159261],{"class":47,"line":125},[45,159262,2483],{"emptyLinePlaceholder":133},[45,159264,159265,159267,159269,159271,159273],{"class":47,"line":1262},[45,159266,108714],{"class":93},[45,159268,9521],{"class":51},[45,159270,1671],{"class":93},[45,159272,2231],{"class":257},[45,159274,3822],{"class":51},[45,159276,159277,159279],{"class":47,"line":1277},[45,159278,31380],{"class":257},[45,159280,159281],{"class":51},"(i)\n",[45,159283,159284,159287,159289],{"class":47,"line":1283},[45,159285,159286],{"class":51},"    i ",[45,159288,9560],{"class":93},[45,159290,55780],{"class":257},[10,159292,81010],{},[159,159294,159295,159301,159304,159307],{},[162,159296,159297,159298,28468],{},"判断条件 ",[42,159299,159300],{},"i \u003C= 5",[162,159302,159303],{},"条件成立，执行循环体。",[162,159305,159306],{},"执行完后回到条件判断。",[162,159308,159309],{},"条件不成立，退出循环。",[30,159311,159313],{"id":159312},"_43-while累加","4.3 while累加",[10,159315,159316],{},"计算 1 到 100 的和：",[35,159318,159320],{"className":37,"code":159319,"language":39,"meta":40,"style":40},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[42,159321,159322,159330,159338,159342,159354,159364,159372,159376],{"__ignoreMap":40},[45,159323,159324,159326,159328],{"class":47,"line":48},[45,159325,100199],{"class":51},[45,159327,254],{"class":93},[45,159329,55780],{"class":257},[45,159331,159332,159334,159336],{"class":47,"line":125},[45,159333,157311],{"class":51},[45,159335,254],{"class":93},[45,159337,47414],{"class":257},[45,159339,159340],{"class":47,"line":1262},[45,159341,2483],{"emptyLinePlaceholder":133},[45,159343,159344,159346,159348,159350,159352],{"class":47,"line":1277},[45,159345,108714],{"class":93},[45,159347,9521],{"class":51},[45,159349,1671],{"class":93},[45,159351,5837],{"class":257},[45,159353,3822],{"class":51},[45,159355,159356,159359,159361],{"class":47,"line":1283},[45,159357,159358],{"class":51},"    total ",[45,159360,9560],{"class":93},[45,159362,159363],{"class":51}," i\n",[45,159365,159366,159368,159370],{"class":47,"line":1297},[45,159367,159286],{"class":51},[45,159369,9560],{"class":93},[45,159371,55780],{"class":257},[45,159373,159374],{"class":47,"line":1303},[45,159375,2483],{"emptyLinePlaceholder":133},[45,159377,159378,159380],{"class":47,"line":1394},[45,159379,30496],{"class":257},[45,159381,159382],{"class":51},"(total)\n",[10,159384,159385],{},"核心思想：",[159,159387,159388,159393,159398],{},[162,159389,159390,159392],{},[42,159391,649],{}," 控制循环次数。",[162,159394,159395,159397],{},[42,159396,157412],{}," 保存累加结果。",[162,159399,159400,159401,159403],{},"每轮循环都要更新 ",[42,159402,649],{},"，否则可能死循环。",[30,159405,159407],{"id":159406},"_44-while猜数字","4.4 while猜数字",[35,159409,159411],{"className":37,"code":159410,"language":39,"meta":40,"style":40},"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",[42,159412,159413,159419,159423,159440,159448,159452,159460,159480,159489,159493,159505,159516,159526,159537,159543,159565],{"__ignoreMap":40},[45,159414,159415,159417],{"class":47,"line":48},[45,159416,30473],{"class":93},[45,159418,45409],{"class":51},[45,159420,159421],{"class":47,"line":125},[45,159422,2483],{"emptyLinePlaceholder":133},[45,159424,159425,159427,159429,159432,159434,159436,159438],{"class":47,"line":1262},[45,159426,159091],{"class":51},[45,159428,254],{"class":93},[45,159430,159431],{"class":51}," random.randint(",[45,159433,426],{"class":257},[45,159435,12518],{"class":51},[45,159437,519],{"class":257},[45,159439,215],{"class":51},[45,159441,159442,159444,159446],{"class":47,"line":1277},[45,159443,146742],{"class":51},[45,159445,254],{"class":93},[45,159447,47414],{"class":257},[45,159449,159450],{"class":47,"line":1283},[45,159451,2483],{"emptyLinePlaceholder":133},[45,159453,159454,159456,159458],{"class":47,"line":1297},[45,159455,108714],{"class":93},[45,159457,95343],{"class":257},[45,159459,3822],{"class":51},[45,159461,159462,159465,159467,159469,159471,159473,159475,159478],{"class":47,"line":1303},[45,159463,159464],{"class":51},"    guess ",[45,159466,254],{"class":93},[45,159468,2465],{"class":257},[45,159470,209],{"class":51},[45,159472,53902],{"class":257},[45,159474,209],{"class":51},[45,159476,159477],{"class":313},"\"请输入1到100之间的数字:\"",[45,159479,30578],{"class":51},[45,159481,159482,159485,159487],{"class":47,"line":1394},[45,159483,159484],{"class":51},"    count ",[45,159486,9560],{"class":93},[45,159488,55780],{"class":257},[45,159490,159491],{"class":47,"line":1400},[45,159492,2483],{"emptyLinePlaceholder":133},[45,159494,159495,159497,159500,159502],{"class":47,"line":1412},[45,159496,3184],{"class":93},[45,159498,159499],{"class":51}," guess ",[45,159501,1167],{"class":93},[45,159503,159504],{"class":51}," answer:\n",[45,159506,159507,159509,159511,159514],{"class":47,"line":1695},[45,159508,32532],{"class":257},[45,159510,209],{"class":51},[45,159512,159513],{"class":313},"\"猜大了\"",[45,159515,215],{"class":51},[45,159517,159518,159520,159522,159524],{"class":47,"line":1700},[45,159519,39374],{"class":93},[45,159521,159499],{"class":51},[45,159523,1117],{"class":93},[45,159525,159504],{"class":51},[45,159527,159528,159530,159532,159535],{"class":47,"line":1706},[45,159529,32532],{"class":257},[45,159531,209],{"class":51},[45,159533,159534],{"class":313},"\"猜小了\"",[45,159536,215],{"class":51},[45,159538,159539,159541],{"class":47,"line":1711},[45,159540,158073],{"class":93},[45,159542,3822],{"class":51},[45,159544,159545,159547,159549,159551,159554,159556,159558,159560,159563],{"class":47,"line":1725},[45,159546,32532],{"class":257},[45,159548,209],{"class":51},[45,159550,261],{"class":93},[45,159552,159553],{"class":313},"\"猜对了，一共猜了",[45,159555,1103],{"class":257},[45,159557,84515],{"class":51},[45,159559,1153],{"class":257},[45,159561,159562],{"class":313},"次\"",[45,159564,215],{"class":51},[45,159566,159567],{"class":47,"line":1730},[45,159568,31708],{"class":93},[10,159570,159571,159574,159575,159577],{},[42,159572,159573],{},"while True"," 表示无限循环，通常配合 ",[42,159576,2136],{}," 使用。",[30,159579,159581],{"id":159580},"_45-break和continue","4.5 break和continue",[176,159583,159585],{"id":159584},"_451-break","4.5.1 break",[10,159587,159588,159590],{},[42,159589,2136],{}," 直接结束整个循环。",[35,159592,159594],{"className":37,"code":159593,"language":39,"meta":40,"style":40},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[42,159595,159596,159616,159628,159632],{"__ignoreMap":40},[45,159597,159598,159600,159602,159604,159606,159608,159610,159612,159614],{"class":47,"line":48},[45,159599,3108],{"class":93},[45,159601,9521],{"class":51},[45,159603,26126],{"class":93},[45,159605,32524],{"class":257},[45,159607,209],{"class":51},[45,159609,426],{"class":257},[45,159611,12518],{"class":51},[45,159613,552],{"class":257},[45,159615,30867],{"class":51},[45,159617,159618,159620,159622,159624,159626],{"class":47,"line":125},[45,159619,3184],{"class":93},[45,159621,9521],{"class":51},[45,159623,3032],{"class":93},[45,159625,78151],{"class":257},[45,159627,3822],{"class":51},[45,159629,159630],{"class":47,"line":1262},[45,159631,31708],{"class":93},[45,159633,159634,159636],{"class":47,"line":1277},[45,159635,31380],{"class":257},[45,159637,159281],{"class":51},[10,159639,146508],{},[35,159641,159644],{"className":159642,"code":159643,"language":5270,"meta":40},[5268],"1\n2\n",[42,159645,159643],{"__ignoreMap":40},[176,159647,159649],{"id":159648},"_452-continue","4.5.2 continue",[10,159651,159652,159654],{},[42,159653,154723],{}," 跳过本轮剩余代码，进入下一轮循环。",[35,159656,159658],{"className":37,"code":159657,"language":39,"meta":40,"style":40},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[42,159659,159660,159680,159692,159696],{"__ignoreMap":40},[45,159661,159662,159664,159666,159668,159670,159672,159674,159676,159678],{"class":47,"line":48},[45,159663,3108],{"class":93},[45,159665,9521],{"class":51},[45,159667,26126],{"class":93},[45,159669,32524],{"class":257},[45,159671,209],{"class":51},[45,159673,426],{"class":257},[45,159675,12518],{"class":51},[45,159677,552],{"class":257},[45,159679,30867],{"class":51},[45,159681,159682,159684,159686,159688,159690],{"class":47,"line":125},[45,159683,3184],{"class":93},[45,159685,9521],{"class":51},[45,159687,3032],{"class":93},[45,159689,78151],{"class":257},[45,159691,3822],{"class":51},[45,159693,159694],{"class":47,"line":1262},[45,159695,148563],{"class":93},[45,159697,159698,159700],{"class":47,"line":1277},[45,159699,31380],{"class":257},[45,159701,159281],{"class":51},[10,159703,146508],{},[35,159705,159708],{"className":159706,"code":159707,"language":5270,"meta":40},[5268],"1\n2\n4\n5\n",[42,159709,159707],{"__ignoreMap":40},[30,159711,159713],{"id":159712},"_46-for循环","4.6 for循环",[10,159715,159716,159718],{},[42,159717,3108],{}," 常用于遍历序列。",[35,159720,159722],{"className":37,"code":159721,"language":39,"meta":40,"style":40},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[42,159723,159724,159733,159737,159748],{"__ignoreMap":40},[45,159725,159726,159728,159730],{"class":47,"line":48},[45,159727,146587],{"class":51},[45,159729,254],{"class":93},[45,159731,159732],{"class":313}," \"python\"\n",[45,159734,159735],{"class":47,"line":125},[45,159736,2483],{"emptyLinePlaceholder":133},[45,159738,159739,159741,159744,159746],{"class":47,"line":1262},[45,159740,3108],{"class":93},[45,159742,159743],{"class":51}," ch ",[45,159745,26126],{"class":93},[45,159747,158450],{"class":51},[45,159749,159750,159752],{"class":47,"line":1277},[45,159751,31380],{"class":257},[45,159753,159754],{"class":51},"(ch)\n",[10,159756,159757],{},"遍历列表：",[35,159759,159761],{"className":37,"code":159760,"language":39,"meta":40,"style":40},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[42,159762,159763,159785,159789,159799],{"__ignoreMap":40},[45,159764,159765,159768,159770,159772,159774,159776,159778,159780,159783],{"class":47,"line":48},[45,159766,159767],{"class":51},"students ",[45,159769,254],{"class":93},[45,159771,52307],{"class":51},[45,159773,149939],{"class":313},[45,159775,12518],{"class":51},[45,159777,150987],{"class":313},[45,159779,12518],{"class":51},[45,159781,159782],{"class":313},"\"小刚\"",[45,159784,33327],{"class":51},[45,159786,159787],{"class":47,"line":125},[45,159788,2483],{"emptyLinePlaceholder":133},[45,159790,159791,159793,159795,159797],{"class":47,"line":1262},[45,159792,3108],{"class":93},[45,159794,152188],{"class":51},[45,159796,26126],{"class":93},[45,159798,152193],{"class":51},[45,159800,159801,159803],{"class":47,"line":1277},[45,159802,31380],{"class":257},[45,159804,150093],{"class":51},[30,159806,159808],{"id":159807},"_47-range函数","4.7 range函数",[10,159810,159811,159814],{},[42,159812,159813],{},"range()"," 用于生成整数序列。",[35,159816,159818],{"className":37,"code":159817,"language":39,"meta":40,"style":40},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[42,159819,159820,159834,159852],{"__ignoreMap":40},[45,159821,159822,159824,159826,159828,159831],{"class":47,"line":48},[45,159823,33497],{"class":257},[45,159825,209],{"class":51},[45,159827,527],{"class":257},[45,159829,159830],{"class":51},")          ",[45,159832,159833],{"class":267},"# 0,1,2,3,4\n",[45,159835,159836,159838,159840,159842,159844,159846,159849],{"class":47,"line":125},[45,159837,33497],{"class":257},[45,159839,209],{"class":51},[45,159841,426],{"class":257},[45,159843,12518],{"class":51},[45,159845,527],{"class":257},[45,159847,159848],{"class":51},")       ",[45,159850,159851],{"class":267},"# 1,2,3,4\n",[45,159853,159854,159856,159858,159860,159862,159864,159866,159868,159870],{"class":47,"line":1262},[45,159855,33497],{"class":257},[45,159857,209],{"class":51},[45,159859,426],{"class":257},[45,159861,12518],{"class":51},[45,159863,654],{"class":257},[45,159865,12518],{"class":51},[45,159867,286],{"class":257},[45,159869,155712],{"class":51},[45,159871,159872],{"class":267},"# 1,3,5,7,9\n",[10,159874,159875,159876,24701],{},"配合 ",[42,159877,3108],{},[35,159879,159881],{"className":37,"code":159880,"language":39,"meta":40,"style":40},"for i in range(1, 6):\n    print(i)\n",[42,159882,159883,159903],{"__ignoreMap":40},[45,159884,159885,159887,159889,159891,159893,159895,159897,159899,159901],{"class":47,"line":48},[45,159886,3108],{"class":93},[45,159888,9521],{"class":51},[45,159890,26126],{"class":93},[45,159892,32524],{"class":257},[45,159894,209],{"class":51},[45,159896,426],{"class":257},[45,159898,12518],{"class":51},[45,159900,552],{"class":257},[45,159902,30867],{"class":51},[45,159904,159905,159907],{"class":47,"line":125},[45,159906,31380],{"class":257},[45,159908,159281],{"class":51},[10,159910,9108,159911,159913],{},[42,159912,33497],{}," 的结束值不包含在内。",[30,159915,159917],{"id":159916},"_48-for循环求和","4.8 for循环求和",[35,159919,159921],{"className":37,"code":159920,"language":39,"meta":40,"style":40},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[42,159922,159923,159931,159935,159955,159963,159967],{"__ignoreMap":40},[45,159924,159925,159927,159929],{"class":47,"line":48},[45,159926,157311],{"class":51},[45,159928,254],{"class":93},[45,159930,47414],{"class":257},[45,159932,159933],{"class":47,"line":125},[45,159934,2483],{"emptyLinePlaceholder":133},[45,159936,159937,159939,159941,159943,159945,159947,159949,159951,159953],{"class":47,"line":1262},[45,159938,3108],{"class":93},[45,159940,9521],{"class":51},[45,159942,26126],{"class":93},[45,159944,32524],{"class":257},[45,159946,209],{"class":51},[45,159948,426],{"class":257},[45,159950,12518],{"class":51},[45,159952,545],{"class":257},[45,159954,30867],{"class":51},[45,159956,159957,159959,159961],{"class":47,"line":1277},[45,159958,159358],{"class":51},[45,159960,9560],{"class":93},[45,159962,159363],{"class":51},[45,159964,159965],{"class":47,"line":1283},[45,159966,2483],{"emptyLinePlaceholder":133},[45,159968,159969,159971],{"class":47,"line":1297},[45,159970,30496],{"class":257},[45,159972,159382],{"class":51},[10,159974,159975],{},"求偶数和：",[35,159977,159979],{"className":37,"code":159978,"language":39,"meta":40,"style":40},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[42,159980,159981,159989,159993,160013,160029,160038,160042],{"__ignoreMap":40},[45,159982,159983,159985,159987],{"class":47,"line":48},[45,159984,157311],{"class":51},[45,159986,254],{"class":93},[45,159988,47414],{"class":257},[45,159990,159991],{"class":47,"line":125},[45,159992,2483],{"emptyLinePlaceholder":133},[45,159994,159995,159997,159999,160001,160003,160005,160007,160009,160011],{"class":47,"line":1262},[45,159996,3108],{"class":93},[45,159998,9521],{"class":51},[45,160000,26126],{"class":93},[45,160002,32524],{"class":257},[45,160004,209],{"class":51},[45,160006,426],{"class":257},[45,160008,12518],{"class":51},[45,160010,545],{"class":257},[45,160012,30867],{"class":51},[45,160014,160015,160017,160019,160021,160023,160025,160027],{"class":47,"line":1277},[45,160016,3184],{"class":93},[45,160018,9521],{"class":51},[45,160020,536],{"class":93},[45,160022,14838],{"class":257},[45,160024,101610],{"class":93},[45,160026,4176],{"class":257},[45,160028,3822],{"class":51},[45,160030,160031,160034,160036],{"class":47,"line":1283},[45,160032,160033],{"class":51},"        total ",[45,160035,9560],{"class":93},[45,160037,159363],{"class":51},[45,160039,160040],{"class":47,"line":1297},[45,160041,2483],{"emptyLinePlaceholder":133},[45,160043,160044,160046],{"class":47,"line":1303},[45,160045,30496],{"class":257},[45,160047,159382],{"class":51},[10,160049,160050],{},"也可以：",[35,160052,160054],{"className":37,"code":160053,"language":39,"meta":40,"style":40},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[42,160055,160056,160064,160068,160092,160100,160104],{"__ignoreMap":40},[45,160057,160058,160060,160062],{"class":47,"line":48},[45,160059,157311],{"class":51},[45,160061,254],{"class":93},[45,160063,47414],{"class":257},[45,160065,160066],{"class":47,"line":125},[45,160067,2483],{"emptyLinePlaceholder":133},[45,160069,160070,160072,160074,160076,160078,160080,160082,160084,160086,160088,160090],{"class":47,"line":1262},[45,160071,3108],{"class":93},[45,160073,9521],{"class":51},[45,160075,26126],{"class":93},[45,160077,32524],{"class":257},[45,160079,209],{"class":51},[45,160081,286],{"class":257},[45,160083,12518],{"class":51},[45,160085,545],{"class":257},[45,160087,12518],{"class":51},[45,160089,286],{"class":257},[45,160091,30867],{"class":51},[45,160093,160094,160096,160098],{"class":47,"line":1277},[45,160095,159358],{"class":51},[45,160097,9560],{"class":93},[45,160099,159363],{"class":51},[45,160101,160102],{"class":47,"line":1283},[45,160103,2483],{"emptyLinePlaceholder":133},[45,160105,160106,160108],{"class":47,"line":1297},[45,160107,30496],{"class":257},[45,160109,159382],{"class":51},[30,160111,160113],{"id":160112},"_49-循环嵌套","4.9 循环嵌套",[10,160115,160116],{},"嵌套循环就是循环里面再写循环。",[35,160118,160120],{"className":37,"code":160119,"language":39,"meta":40,"style":40},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[42,160121,160122,160142,160162],{"__ignoreMap":40},[45,160123,160124,160126,160128,160130,160132,160134,160136,160138,160140],{"class":47,"line":48},[45,160125,3108],{"class":93},[45,160127,9521],{"class":51},[45,160129,26126],{"class":93},[45,160131,32524],{"class":257},[45,160133,209],{"class":51},[45,160135,426],{"class":257},[45,160137,12518],{"class":51},[45,160139,501],{"class":257},[45,160141,30867],{"class":51},[45,160143,160144,160146,160148,160150,160152,160154,160156,160158,160160],{"class":47,"line":125},[45,160145,3284],{"class":93},[45,160147,9583],{"class":51},[45,160149,26126],{"class":93},[45,160151,32524],{"class":257},[45,160153,209],{"class":51},[45,160155,426],{"class":257},[45,160157,12518],{"class":51},[45,160159,501],{"class":257},[45,160161,30867],{"class":51},[45,160163,160164,160166,160168,160170,160173,160175,160177,160179,160182,160184,160186,160188,160190],{"class":47,"line":1262},[45,160165,32532],{"class":257},[45,160167,209],{"class":51},[45,160169,261],{"class":93},[45,160171,160172],{"class":313},"\"i=",[45,160174,1103],{"class":257},[45,160176,649],{"class":51},[45,160178,1153],{"class":257},[45,160180,160181],{"class":313},", j=",[45,160183,1103],{"class":257},[45,160185,675],{"class":51},[45,160187,1153],{"class":257},[45,160189,459],{"class":313},[45,160191,215],{"class":51},[10,160193,160194],{},"外层循环执行一次，内层循环执行完整一轮。",[30,160196,160198],{"id":160197},"_410-九九乘法表","4.10 九九乘法表",[35,160200,160202],{"className":37,"code":160201,"language":39,"meta":40,"style":40},"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",[42,160203,160204,160224,160247,160299],{"__ignoreMap":40},[45,160205,160206,160208,160210,160212,160214,160216,160218,160220,160222],{"class":47,"line":48},[45,160207,3108],{"class":93},[45,160209,9521],{"class":51},[45,160211,26126],{"class":93},[45,160213,32524],{"class":257},[45,160215,209],{"class":51},[45,160217,426],{"class":257},[45,160219,12518],{"class":51},[45,160221,654],{"class":257},[45,160223,30867],{"class":51},[45,160225,160226,160228,160230,160232,160234,160236,160238,160241,160243,160245],{"class":47,"line":125},[45,160227,3284],{"class":93},[45,160229,9583],{"class":51},[45,160231,26126],{"class":93},[45,160233,32524],{"class":257},[45,160235,209],{"class":51},[45,160237,426],{"class":257},[45,160239,160240],{"class":51},", i ",[45,160242,689],{"class":93},[45,160244,25201],{"class":257},[45,160246,30867],{"class":51},[45,160248,160249,160251,160253,160255,160257,160259,160261,160263,160265,160267,160269,160271,160273,160275,160277,160279,160281,160283,160285,160287,160289,160291,160293,160295,160297],{"class":47,"line":1262},[45,160250,32532],{"class":257},[45,160252,209],{"class":51},[45,160254,261],{"class":93},[45,160256,459],{"class":313},[45,160258,1103],{"class":257},[45,160260,675],{"class":51},[45,160262,1153],{"class":257},[45,160264,663],{"class":313},[45,160266,1103],{"class":257},[45,160268,649],{"class":51},[45,160270,1153],{"class":257},[45,160272,254],{"class":313},[45,160274,1103],{"class":257},[45,160276,100199],{"class":51},[45,160278,663],{"class":93},[45,160280,3493],{"class":51},[45,160282,1153],{"class":257},[45,160284,459],{"class":313},[45,160286,12518],{"class":51},[45,160288,45882],{"class":5299},[45,160290,254],{"class":93},[45,160292,459],{"class":313},[45,160294,1313],{"class":257},[45,160296,459],{"class":313},[45,160298,215],{"class":51},[45,160300,160301,160303],{"class":47,"line":1277},[45,160302,31380],{"class":257},[45,160304,2059],{"class":51},[10,160306,160307],{},"关键点：",[159,160309,160310,160316,160322,160328],{},[162,160311,160312,160313,160315],{},"外层 ",[42,160314,649],{}," 控制行。",[162,160317,160318,160319,160321],{},"内层 ",[42,160320,675],{}," 控制列。",[162,160323,160324,160325,160327],{},"每行结束后用 ",[42,160326,146523],{}," 换行。",[162,160329,160330,160333],{},[42,160331,160332],{},"end=\"\\t\""," 让同一行的内容横向排列。",[30,160335,160337],{"id":160336},"_411-循环else","4.11 循环else",[10,160339,160340,160341,160343,160344,160346,160347,160349],{},"Python 的循环可以带 ",[42,160342,1784],{},"。当循环正常结束时执行 ",[42,160345,1784],{},"，如果被 ",[42,160348,2136],{}," 打断，则不执行。",[35,160351,160353],{"className":37,"code":160352,"language":39,"meta":40,"style":40},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[42,160354,160355,160375,160387,160398,160402,160408],{"__ignoreMap":40},[45,160356,160357,160359,160361,160363,160365,160367,160369,160371,160373],{"class":47,"line":48},[45,160358,3108],{"class":93},[45,160360,9521],{"class":51},[45,160362,26126],{"class":93},[45,160364,32524],{"class":257},[45,160366,209],{"class":51},[45,160368,426],{"class":257},[45,160370,12518],{"class":51},[45,160372,552],{"class":257},[45,160374,30867],{"class":51},[45,160376,160377,160379,160381,160383,160385],{"class":47,"line":125},[45,160378,3184],{"class":93},[45,160380,9521],{"class":51},[45,160382,3032],{"class":93},[45,160384,2121],{"class":257},[45,160386,3822],{"class":51},[45,160388,160389,160391,160393,160396],{"class":47,"line":1262},[45,160390,32532],{"class":257},[45,160392,209],{"class":51},[45,160394,160395],{"class":313},"\"找到了\"",[45,160397,215],{"class":51},[45,160399,160400],{"class":47,"line":1277},[45,160401,31708],{"class":93},[45,160403,160404,160406],{"class":47,"line":1283},[45,160405,1784],{"class":93},[45,160407,3822],{"class":51},[45,160409,160410,160412,160414,160417],{"class":47,"line":1297},[45,160411,31380],{"class":257},[45,160413,209],{"class":51},[45,160415,160416],{"class":313},"\"没找到\"",[45,160418,215],{"class":51},[10,160420,160421],{},"常用于搜索。",[35,160423,160425],{"className":37,"code":160424,"language":39,"meta":40,"style":40},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[42,160426,160427,160448,160457,160461,160473,160484,160494,160498,160504],{"__ignoreMap":40},[45,160428,160429,160432,160434,160436,160438,160440,160442,160444,160446],{"class":47,"line":48},[45,160430,160431],{"class":51},"names ",[45,160433,254],{"class":93},[45,160435,52307],{"class":51},[45,160437,149939],{"class":313},[45,160439,12518],{"class":51},[45,160441,150987],{"class":313},[45,160443,12518],{"class":51},[45,160445,159782],{"class":313},[45,160447,33327],{"class":51},[45,160449,160450,160452,160454],{"class":47,"line":125},[45,160451,111629],{"class":51},[45,160453,254],{"class":93},[45,160455,160456],{"class":313}," \"小李\"\n",[45,160458,160459],{"class":47,"line":1262},[45,160460,2483],{"emptyLinePlaceholder":133},[45,160462,160463,160465,160468,160470],{"class":47,"line":1277},[45,160464,3108],{"class":93},[45,160466,160467],{"class":51}," name ",[45,160469,26126],{"class":93},[45,160471,160472],{"class":51}," names:\n",[45,160474,160475,160477,160479,160481],{"class":47,"line":1283},[45,160476,3184],{"class":93},[45,160478,160467],{"class":51},[45,160480,3032],{"class":93},[45,160482,160483],{"class":51}," target:\n",[45,160485,160486,160488,160490,160492],{"class":47,"line":1297},[45,160487,32532],{"class":257},[45,160489,209],{"class":51},[45,160491,160395],{"class":313},[45,160493,215],{"class":51},[45,160495,160496],{"class":47,"line":1303},[45,160497,31708],{"class":93},[45,160499,160500,160502],{"class":47,"line":1394},[45,160501,1784],{"class":93},[45,160503,3822],{"class":51},[45,160505,160506,160508,160510,160512],{"class":47,"line":1400},[45,160507,31380],{"class":257},[45,160509,209],{"class":51},[45,160511,160416],{"class":313},[45,160513,215],{"class":51},[30,160515,160517],{"id":160516},"_412-小案例登录重试","4.12 小案例：登录重试",[10,160519,123343],{},[159,160521,160522,160525,160528],{},[162,160523,160524],{},"用户最多输入 3 次密码。",[162,160526,160527],{},"密码正确则登录成功。",[162,160529,160530],{},"3 次都错误则锁定账号。",[10,160532,10118],{},[35,160534,160536],{"className":37,"code":160535,"language":39,"meta":40,"style":40},"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",[42,160537,160538,160548,160552,160568,160584,160588,160600,160611,160615,160621,160646,160652],{"__ignoreMap":40},[45,160539,160540,160543,160545],{"class":47,"line":48},[45,160541,160542],{"class":51},"password ",[45,160544,254],{"class":93},[45,160546,160547],{"class":313}," \"123456\"\n",[45,160549,160550],{"class":47,"line":125},[45,160551,2483],{"emptyLinePlaceholder":133},[45,160553,160554,160556,160558,160560,160562,160564,160566],{"class":47,"line":1262},[45,160555,3108],{"class":93},[45,160557,9521],{"class":51},[45,160559,26126],{"class":93},[45,160561,32524],{"class":257},[45,160563,209],{"class":51},[45,160565,280],{"class":257},[45,160567,30867],{"class":51},[45,160569,160570,160573,160575,160577,160579,160582],{"class":47,"line":1277},[45,160571,160572],{"class":51},"    user_password ",[45,160574,254],{"class":93},[45,160576,60686],{"class":257},[45,160578,209],{"class":51},[45,160580,160581],{"class":313},"\"请输入密码:\"",[45,160583,215],{"class":51},[45,160585,160586],{"class":47,"line":1283},[45,160587,2483],{"emptyLinePlaceholder":133},[45,160589,160590,160592,160595,160597],{"class":47,"line":1297},[45,160591,3184],{"class":93},[45,160593,160594],{"class":51}," user_password ",[45,160596,3032],{"class":93},[45,160598,160599],{"class":51}," password:\n",[45,160601,160602,160604,160606,160609],{"class":47,"line":1303},[45,160603,32532],{"class":257},[45,160605,209],{"class":51},[45,160607,160608],{"class":313},"\"登录成功\"",[45,160610,215],{"class":51},[45,160612,160613],{"class":47,"line":1394},[45,160614,31708],{"class":93},[45,160616,160617,160619],{"class":47,"line":1400},[45,160618,158073],{"class":93},[45,160620,3822],{"class":51},[45,160622,160623,160625,160627,160629,160632,160635,160637,160639,160641,160644],{"class":47,"line":1412},[45,160624,32532],{"class":257},[45,160626,209],{"class":51},[45,160628,261],{"class":93},[45,160630,160631],{"class":313},"\"密码错误，还剩",[45,160633,160634],{"class":257},"{2",[45,160636,52352],{"class":93},[45,160638,3115],{"class":51},[45,160640,1153],{"class":257},[45,160642,160643],{"class":313},"次机会\"",[45,160645,215],{"class":51},[45,160647,160648,160650],{"class":47,"line":1695},[45,160649,1784],{"class":93},[45,160651,3822],{"class":51},[45,160653,160654,160656,160658,160661],{"class":47,"line":1700},[45,160655,31380],{"class":257},[45,160657,209],{"class":51},[45,160659,160660],{"class":313},"\"账号已锁定\"",[45,160662,215],{"class":51},[30,160664,160666],{"id":160665},"_413-小案例菜单程序","4.13 小案例：菜单程序",[35,160668,160670],{"className":37,"code":160669,"language":39,"meta":40,"style":40},"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",[42,160671,160672,160680,160691,160702,160713,160724,160735,160739,160754,160758,160770,160781,160793,160804,160816,160827,160839,160849,160853,160859],{"__ignoreMap":40},[45,160673,160674,160676,160678],{"class":47,"line":48},[45,160675,108714],{"class":93},[45,160677,95343],{"class":257},[45,160679,3822],{"class":51},[45,160681,160682,160684,160686,160689],{"class":47,"line":125},[45,160683,31380],{"class":257},[45,160685,209],{"class":51},[45,160687,160688],{"class":313},"\"====== 菜单 ======\"",[45,160690,215],{"class":51},[45,160692,160693,160695,160697,160700],{"class":47,"line":1262},[45,160694,31380],{"class":257},[45,160696,209],{"class":51},[45,160698,160699],{"class":313},"\"1. 查询余额\"",[45,160701,215],{"class":51},[45,160703,160704,160706,160708,160711],{"class":47,"line":1277},[45,160705,31380],{"class":257},[45,160707,209],{"class":51},[45,160709,160710],{"class":313},"\"2. 存款\"",[45,160712,215],{"class":51},[45,160714,160715,160717,160719,160722],{"class":47,"line":1283},[45,160716,31380],{"class":257},[45,160718,209],{"class":51},[45,160720,160721],{"class":313},"\"3. 取款\"",[45,160723,215],{"class":51},[45,160725,160726,160728,160730,160733],{"class":47,"line":1297},[45,160727,31380],{"class":257},[45,160729,209],{"class":51},[45,160731,160732],{"class":313},"\"0. 退出\"",[45,160734,215],{"class":51},[45,160736,160737],{"class":47,"line":1303},[45,160738,2483],{"emptyLinePlaceholder":133},[45,160740,160741,160744,160746,160748,160750,160752],{"class":47,"line":1394},[45,160742,160743],{"class":51},"    choice ",[45,160745,254],{"class":93},[45,160747,60686],{"class":257},[45,160749,209],{"class":51},[45,160751,153124],{"class":313},[45,160753,215],{"class":51},[45,160755,160756],{"class":47,"line":1400},[45,160757,2483],{"emptyLinePlaceholder":133},[45,160759,160760,160762,160764,160766,160768],{"class":47,"line":1412},[45,160761,3184],{"class":93},[45,160763,153137],{"class":51},[45,160765,3032],{"class":93},[45,160767,153142],{"class":313},[45,160769,3822],{"class":51},[45,160771,160772,160774,160776,160779],{"class":47,"line":1695},[45,160773,32532],{"class":257},[45,160775,209],{"class":51},[45,160777,160778],{"class":313},"\"余额为1000元\"",[45,160780,215],{"class":51},[45,160782,160783,160785,160787,160789,160791],{"class":47,"line":1700},[45,160784,39374],{"class":93},[45,160786,153137],{"class":51},[45,160788,3032],{"class":93},[45,160790,153161],{"class":313},[45,160792,3822],{"class":51},[45,160794,160795,160797,160799,160802],{"class":47,"line":1706},[45,160796,32532],{"class":257},[45,160798,209],{"class":51},[45,160800,160801],{"class":313},"\"存款功能\"",[45,160803,215],{"class":51},[45,160805,160806,160808,160810,160812,160814],{"class":47,"line":1711},[45,160807,39374],{"class":93},[45,160809,153137],{"class":51},[45,160811,3032],{"class":93},[45,160813,153179],{"class":313},[45,160815,3822],{"class":51},[45,160817,160818,160820,160822,160825],{"class":47,"line":1725},[45,160819,32532],{"class":257},[45,160821,209],{"class":51},[45,160823,160824],{"class":313},"\"取款功能\"",[45,160826,215],{"class":51},[45,160828,160829,160831,160833,160835,160837],{"class":47,"line":1730},[45,160830,39374],{"class":93},[45,160832,153137],{"class":51},[45,160834,3032],{"class":93},[45,160836,153233],{"class":313},[45,160838,3822],{"class":51},[45,160840,160841,160843,160845,160847],{"class":47,"line":1736},[45,160842,32532],{"class":257},[45,160844,209],{"class":51},[45,160846,153244],{"class":313},[45,160848,215],{"class":51},[45,160850,160851],{"class":47,"line":1757},[45,160852,31708],{"class":93},[45,160854,160855,160857],{"class":47,"line":1762},[45,160856,158073],{"class":93},[45,160858,3822],{"class":51},[45,160860,160861,160863,160865,160867],{"class":47,"line":1776},[45,160862,32532],{"class":257},[45,160864,209],{"class":51},[45,160866,153265],{"class":313},[45,160868,215],{"class":51},[10,160870,160871,160872,160874,160875,28468],{},"菜单类程序通常使用 ",[42,160873,159573],{},"，用户选择退出时 ",[42,160876,2136],{},[30,160878,160880],{"id":160879},"_414-易错点","4.14 易错点",[159,160882,160883,160888,160894,160902,160908],{},[162,160884,160885,160887],{},[42,160886,108714],{}," 循环必须更新控制变量。",[162,160889,160890,160893],{},[42,160891,160892],{},"range(1, 10)"," 不包含 10。",[162,160895,160896,160898,160899,160901],{},[42,160897,2136],{}," 结束整个循环，",[42,160900,154723],{}," 只跳过本轮。",[162,160903,160904,160905,160907],{},"嵌套循环中，",[42,160906,2136],{}," 只跳出当前所在的一层循环。",[162,160909,160910],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[30,160912,160914],{"id":160913},"_415-本章练习","4.15 本章练习",[159,160916,160917,160920,160923,160926,160929],{},[162,160918,160919],{},"输出 1 到 100。",[162,160921,160922],{},"计算 1 到 100 的偶数和。",[162,160924,160925],{},"输出 100 以内能被 3 和 5 同时整除的数。",[162,160927,160928],{},"编写猜数字游戏，限制最多猜 7 次。",[162,160930,160931],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[121,160933,160934],{},"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":40,"searchDepth":125,"depth":125,"links":160936},[160937,160938,160939,160940,160941,160945,160946,160947,160948,160949,160950,160951,160952,160953,160954],{"id":159193,"depth":125,"text":159194},{"id":159223,"depth":125,"text":159224},{"id":159312,"depth":125,"text":159313},{"id":159406,"depth":125,"text":159407},{"id":159580,"depth":125,"text":159581,"children":160942},[160943,160944],{"id":159584,"depth":1262,"text":159585},{"id":159648,"depth":1262,"text":159649},{"id":159712,"depth":125,"text":159713},{"id":159807,"depth":125,"text":159808},{"id":159916,"depth":125,"text":159917},{"id":160112,"depth":125,"text":160113},{"id":160197,"depth":125,"text":160198},{"id":160336,"depth":125,"text":160337},{"id":160516,"depth":125,"text":160517},{"id":160665,"depth":125,"text":160666},{"id":160879,"depth":125,"text":160880},{"id":160913,"depth":125,"text":160914},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159185,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160961,"title":160962,"body":160963,"description":130,"extension":131,"meta":162968,"navigation":133,"path":162969,"seo":162970,"stem":162971,"__hash__":162972},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160964,"toc":162948},[160965,160968,160972,160975,160978,160992,160995,161009,161013,161015,161034,161036,161083,161085,161099,161103,161177,161180,161184,161187,161246,161254,161257,161310,161313,161317,161322,161377,161385,161435,161439,161444,161452,161551,161557,161561,161566,161569,161580,161621,161634,161638,161641,161677,161680,161693,161696,161756,161760,161764,161767,161818,161822,161825,161872,161878,161944,161947,161951,161954,162070,162073,162077,162080,162186,162190,162193,162231,162234,162276,162279,162339,162342,162346,162810,162813,162817,162844,162850,162911,162915,162945],[20,160966,160962],{"id":160967},"_5-函数基础",[30,160969,160971],{"id":160970},"_51-为什么需要函数","5.1 为什么需要函数",[10,160973,160974],{},"函数用于封装一段可以重复使用的代码。",[10,160976,160977],{},"不使用函数的问题：",[159,160979,160980,160983,160986,160989],{},[162,160981,160982],{},"重复代码多。",[162,160984,160985],{},"修改逻辑时容易漏改。",[162,160987,160988],{},"主流程不清晰。",[162,160990,160991],{},"程序越写越长，难以维护。",[10,160993,160994],{},"使用函数后的好处：",[159,160996,160997,161000,161003,161006],{},[162,160998,160999],{},"提高复用性。",[162,161001,161002],{},"提高可读性。",[162,161004,161005],{},"便于调试。",[162,161007,161008],{},"便于分工。",[30,161010,161012],{"id":161011},"_52-函数定义","5.2 函数定义",[10,161014,5264],{},[35,161016,161018],{"className":37,"code":161017,"language":39,"meta":40,"style":40},"def 函数名():\n    函数体\n",[42,161019,161020,161029],{"__ignoreMap":40},[45,161021,161022,161024,161027],{"class":47,"line":48},[45,161023,32028],{"class":93},[45,161025,161026],{"class":2046}," 函数名",[45,161028,32034],{"class":51},[45,161030,161031],{"class":47,"line":125},[45,161032,161033],{"class":51},"    函数体\n",[10,161035,15218],{},[35,161037,161039],{"className":37,"code":161038,"language":39,"meta":40,"style":40},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[42,161040,161041,161050,161060,161070,161074,161078],{"__ignoreMap":40},[45,161042,161043,161045,161048],{"class":47,"line":48},[45,161044,32028],{"class":93},[45,161046,161047],{"class":2046}," say_hello",[45,161049,32034],{"class":51},[45,161051,161052,161054,161056,161058],{"class":47,"line":125},[45,161053,31380],{"class":257},[45,161055,209],{"class":51},[45,161057,5927],{"class":313},[45,161059,215],{"class":51},[45,161061,161062,161064,161066,161068],{"class":47,"line":1262},[45,161063,31380],{"class":257},[45,161065,209],{"class":51},[45,161067,146690],{"class":313},[45,161069,215],{"class":51},[45,161071,161072],{"class":47,"line":1277},[45,161073,2483],{"emptyLinePlaceholder":133},[45,161075,161076],{"class":47,"line":1283},[45,161077,2483],{"emptyLinePlaceholder":133},[45,161079,161080],{"class":47,"line":1297},[45,161081,161082],{"class":51},"say_hello()\n",[10,161084,9108],{},[159,161086,161087,161090,161093,161096],{},[162,161088,161089],{},"函数必须先定义，再调用。",[162,161091,161092],{},"函数名遵循变量命名规则。",[162,161094,161095],{},"函数体需要缩进。",[162,161097,161098],{},"函数不调用就不会执行。",[30,161100,161102],{"id":161101},"_53-函数调用","5.3 函数调用",[35,161104,161106],{"className":37,"code":161105,"language":39,"meta":40,"style":40},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[42,161107,161108,161117,161128,161139,161150,161160,161164,161168,161173],{"__ignoreMap":40},[45,161109,161110,161112,161115],{"class":47,"line":48},[45,161111,32028],{"class":93},[45,161113,161114],{"class":2046}," print_menu",[45,161116,32034],{"class":51},[45,161118,161119,161121,161123,161126],{"class":47,"line":125},[45,161120,31380],{"class":257},[45,161122,209],{"class":51},[45,161124,161125],{"class":313},"\"1. 查询\"",[45,161127,215],{"class":51},[45,161129,161130,161132,161134,161137],{"class":47,"line":1262},[45,161131,31380],{"class":257},[45,161133,209],{"class":51},[45,161135,161136],{"class":313},"\"2. 添加\"",[45,161138,215],{"class":51},[45,161140,161141,161143,161145,161148],{"class":47,"line":1277},[45,161142,31380],{"class":257},[45,161144,209],{"class":51},[45,161146,161147],{"class":313},"\"3. 删除\"",[45,161149,215],{"class":51},[45,161151,161152,161154,161156,161158],{"class":47,"line":1283},[45,161153,31380],{"class":257},[45,161155,209],{"class":51},[45,161157,160732],{"class":313},[45,161159,215],{"class":51},[45,161161,161162],{"class":47,"line":1297},[45,161163,2483],{"emptyLinePlaceholder":133},[45,161165,161166],{"class":47,"line":1303},[45,161167,2483],{"emptyLinePlaceholder":133},[45,161169,161170],{"class":47,"line":1394},[45,161171,161172],{"class":51},"print_menu()\n",[45,161174,161175],{"class":47,"line":1400},[45,161176,161172],{"class":51},[10,161178,161179],{},"函数可以多次调用，每次调用都会执行函数体。",[30,161181,161183],{"id":161182},"_54-参数","5.4 参数",[10,161185,161186],{},"参数用于向函数传递数据。",[35,161188,161190],{"className":37,"code":161189,"language":39,"meta":40,"style":40},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[42,161191,161192,161201,161221,161225,161229,161238],{"__ignoreMap":40},[45,161193,161194,161196,161198],{"class":47,"line":48},[45,161195,32028],{"class":93},[45,161197,161047],{"class":2046},[45,161199,161200],{"class":51},"(name):\n",[45,161202,161203,161205,161207,161209,161211,161213,161215,161217,161219],{"class":47,"line":125},[45,161204,31380],{"class":257},[45,161206,209],{"class":51},[45,161208,261],{"class":93},[45,161210,157105],{"class":313},[45,161212,1103],{"class":257},[45,161214,79891],{"class":51},[45,161216,1153],{"class":257},[45,161218,459],{"class":313},[45,161220,215],{"class":51},[45,161222,161223],{"class":47,"line":1262},[45,161224,2483],{"emptyLinePlaceholder":133},[45,161226,161227],{"class":47,"line":1277},[45,161228,2483],{"emptyLinePlaceholder":133},[45,161230,161231,161234,161236],{"class":47,"line":1283},[45,161232,161233],{"class":51},"say_hello(",[45,161235,149939],{"class":313},[45,161237,215],{"class":51},[45,161239,161240,161242,161244],{"class":47,"line":1297},[45,161241,161233],{"class":51},[45,161243,150987],{"class":313},[45,161245,215],{"class":51},[10,161247,161248,161250,161251,161253],{},[42,161249,79891],{}," 是形参，",[42,161252,149939],{}," 是实参。",[10,161255,161256],{},"多个参数：",[35,161258,161260],{"className":37,"code":161259,"language":39,"meta":40,"style":40},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[42,161261,161262,161270,161283,161289,161293,161297],{"__ignoreMap":40},[45,161263,161264,161266,161268],{"class":47,"line":48},[45,161265,32028],{"class":93},[45,161267,5292],{"class":2046},[45,161269,151144],{"class":51},[45,161271,161272,161275,161277,161279,161281],{"class":47,"line":125},[45,161273,161274],{"class":51},"    result ",[45,161276,254],{"class":93},[45,161278,10952],{"class":51},[45,161280,689],{"class":93},[45,161282,151155],{"class":51},[45,161284,161285,161287],{"class":47,"line":1262},[45,161286,31380],{"class":257},[45,161288,76666],{"class":51},[45,161290,161291],{"class":47,"line":1277},[45,161292,2483],{"emptyLinePlaceholder":133},[45,161294,161295],{"class":47,"line":1283},[45,161296,2483],{"emptyLinePlaceholder":133},[45,161298,161299,161302,161304,161306,161308],{"class":47,"line":1297},[45,161300,161301],{"class":51},"add(",[45,161303,654],{"class":257},[45,161305,12518],{"class":51},[45,161307,907],{"class":257},[45,161309,215],{"class":51},[10,161311,161312],{},"调用时参数数量必须匹配。",[30,161314,161316],{"id":161315},"_55-返回值","5.5 返回值",[10,161318,161319,161321],{},[42,161320,17129],{}," 用于把函数内部的结果返回给调用者。",[35,161323,161325],{"className":37,"code":161324,"language":39,"meta":40,"style":40},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[42,161326,161327,161335,161345,161349,161353,161371],{"__ignoreMap":40},[45,161328,161329,161331,161333],{"class":47,"line":48},[45,161330,32028],{"class":93},[45,161332,5292],{"class":2046},[45,161334,151144],{"class":51},[45,161336,161337,161339,161341,161343],{"class":47,"line":125},[45,161338,4173],{"class":93},[45,161340,10952],{"class":51},[45,161342,689],{"class":93},[45,161344,151155],{"class":51},[45,161346,161347],{"class":47,"line":1262},[45,161348,2483],{"emptyLinePlaceholder":133},[45,161350,161351],{"class":47,"line":1277},[45,161352,2483],{"emptyLinePlaceholder":133},[45,161354,161355,161358,161360,161363,161365,161367,161369],{"class":47,"line":1283},[45,161356,161357],{"class":51},"result ",[45,161359,254],{"class":93},[45,161361,161362],{"class":51}," add(",[45,161364,654],{"class":257},[45,161366,12518],{"class":51},[45,161368,907],{"class":257},[45,161370,215],{"class":51},[45,161372,161373,161375],{"class":47,"line":1297},[45,161374,30496],{"class":257},[45,161376,76666],{"class":51},[10,161378,161379,161380,161382,161383,28468],{},"如果函数没有写 ",[42,161381,17129],{},"，默认返回 ",[42,161384,95737],{},[35,161386,161388],{"className":37,"code":161387,"language":39,"meta":40,"style":40},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[42,161389,161390,161398,161408,161412,161416,161425],{"__ignoreMap":40},[45,161391,161392,161394,161396],{"class":47,"line":48},[45,161393,32028],{"class":93},[45,161395,161047],{"class":2046},[45,161397,32034],{"class":51},[45,161399,161400,161402,161404,161406],{"class":47,"line":125},[45,161401,31380],{"class":257},[45,161403,209],{"class":51},[45,161405,5927],{"class":313},[45,161407,215],{"class":51},[45,161409,161410],{"class":47,"line":1262},[45,161411,2483],{"emptyLinePlaceholder":133},[45,161413,161414],{"class":47,"line":1277},[45,161415,2483],{"emptyLinePlaceholder":133},[45,161417,161418,161420,161422],{"class":47,"line":1283},[45,161419,161357],{"class":51},[45,161421,254],{"class":93},[45,161423,161424],{"class":51}," say_hello()\n",[45,161426,161427,161429,161432],{"class":47,"line":1297},[45,161428,30496],{"class":257},[45,161430,161431],{"class":51},"(result)  ",[45,161433,161434],{"class":267},"# None\n",[30,161436,161438],{"id":161437},"_56-return的作用","5.6 return的作用",[10,161440,161441,161443],{},[42,161442,17129],{}," 有两个作用：",[159,161445,161446,161449],{},[162,161447,161448],{},"返回结果。",[162,161450,161451],{},"结束函数。",[35,161453,161455],{"className":37,"code":161454,"language":39,"meta":40,"style":40},"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",[42,161456,161457,161467,161479,161486,161490,161502,161509,161513,161520,161524,161528,161539],{"__ignoreMap":40},[45,161458,161459,161461,161464],{"class":47,"line":48},[45,161460,32028],{"class":93},[45,161462,161463],{"class":2046}," check_age",[45,161465,161466],{"class":51},"(age):\n",[45,161468,161469,161471,161473,161475,161477],{"class":47,"line":125},[45,161470,3184],{"class":93},[45,161472,15790],{"class":51},[45,161474,1117],{"class":93},[45,161476,4176],{"class":257},[45,161478,3822],{"class":51},[45,161480,161481,161483],{"class":47,"line":1262},[45,161482,14835],{"class":93},[45,161484,161485],{"class":313}," \"年龄不合法\"\n",[45,161487,161488],{"class":47,"line":1277},[45,161489,2483],{"emptyLinePlaceholder":133},[45,161491,161492,161494,161496,161498,161500],{"class":47,"line":1283},[45,161493,3184],{"class":93},[45,161495,15790],{"class":51},[45,161497,1793],{"class":93},[45,161499,156336],{"class":257},[45,161501,3822],{"class":51},[45,161503,161504,161506],{"class":47,"line":1297},[45,161505,14835],{"class":93},[45,161507,161508],{"class":313}," \"成年人\"\n",[45,161510,161511],{"class":47,"line":1303},[45,161512,2483],{"emptyLinePlaceholder":133},[45,161514,161515,161517],{"class":47,"line":1394},[45,161516,4173],{"class":93},[45,161518,161519],{"class":313}," \"未成年人\"\n",[45,161521,161522],{"class":47,"line":1400},[45,161523,2483],{"emptyLinePlaceholder":133},[45,161525,161526],{"class":47,"line":1412},[45,161527,2483],{"emptyLinePlaceholder":133},[45,161529,161530,161532,161535,161537],{"class":47,"line":1695},[45,161531,30496],{"class":257},[45,161533,161534],{"class":51},"(check_age(",[45,161536,907],{"class":257},[45,161538,30578],{"class":51},[45,161540,161541,161543,161545,161547,161549],{"class":47,"line":1700},[45,161542,30496],{"class":257},[45,161544,161534],{"class":51},[45,161546,94],{"class":93},[45,161548,426],{"class":257},[45,161550,30578],{"class":51},[10,161552,161553,161554,161556],{},"函数执行到 ",[42,161555,17129],{}," 后，后面的代码不会继续执行。",[30,161558,161560],{"id":161559},"_57-none","5.7 None",[10,161562,161563,161565],{},[42,161564,95737],{}," 表示空值或没有结果。",[10,161567,161568],{},"常见使用场景：",[159,161570,161571,161574,161577],{},[162,161572,161573],{},"函数没有返回值。",[162,161575,161576],{},"变量暂时没有具体值。",[162,161578,161579],{},"表示查询不到结果。",[35,161581,161583],{"className":37,"code":161582,"language":39,"meta":40,"style":40},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[42,161584,161585,161593,161597,161610],{"__ignoreMap":40},[45,161586,161587,161589,161591],{"class":47,"line":48},[45,161588,161357],{"class":51},[45,161590,254],{"class":93},[45,161592,152223],{"class":257},[45,161594,161595],{"class":47,"line":125},[45,161596,2483],{"emptyLinePlaceholder":133},[45,161598,161599,161601,161604,161606,161608],{"class":47,"line":1262},[45,161600,1614],{"class":93},[45,161602,161603],{"class":51}," result ",[45,161605,39008],{"class":93},[45,161607,39014],{"class":257},[45,161609,3822],{"class":51},[45,161611,161612,161614,161616,161619],{"class":47,"line":1277},[45,161613,31380],{"class":257},[45,161615,209],{"class":51},[45,161617,161618],{"class":313},"\"没有数据\"",[45,161620,215],{"class":51},[10,161622,161623,161624,161626,161627,161630,161631,28468],{},"判断 ",[42,161625,95737],{}," 推荐使用 ",[42,161628,161629],{},"is None","，不要写成 ",[42,161632,161633],{},"== None",[30,161635,161637],{"id":161636},"_58-函数文档字符串","5.8 函数文档字符串",[10,161639,161640],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[35,161642,161644],{"className":37,"code":161643,"language":39,"meta":40,"style":40},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[42,161645,161646,161656,161661],{"__ignoreMap":40},[45,161647,161648,161650,161653],{"class":47,"line":48},[45,161649,32028],{"class":93},[45,161651,161652],{"class":2046}," calculate_bmi",[45,161654,161655],{"class":51},"(weight, height):\n",[45,161657,161658],{"class":47,"line":125},[45,161659,161660],{"class":313},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[45,161662,161663,161665,161668,161670,161673,161675],{"class":47,"line":1262},[45,161664,4173],{"class":93},[45,161666,161667],{"class":51}," weight ",[45,161669,791],{"class":93},[45,161671,161672],{"class":51}," height ",[45,161674,10744],{"class":93},[45,161676,47804],{"class":257},[10,161678,161679],{},"查看说明：",[35,161681,161683],{"className":37,"code":161682,"language":39,"meta":40,"style":40},"help(calculate_bmi)\n",[42,161684,161685],{"__ignoreMap":40},[45,161686,161687,161690],{"class":47,"line":48},[45,161688,161689],{"class":257},"help",[45,161691,161692],{"class":51},"(calculate_bmi)\n",[10,161694,161695],{},"较完整的写法：",[35,161697,161699],{"className":37,"code":161698,"language":39,"meta":40,"style":40},"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",[42,161700,161701,161709,161714,161719,161723,161728,161733,161738,161742],{"__ignoreMap":40},[45,161702,161703,161705,161707],{"class":47,"line":48},[45,161704,32028],{"class":93},[45,161706,161652],{"class":2046},[45,161708,161655],{"class":51},[45,161710,161711],{"class":47,"line":125},[45,161712,161713],{"class":313},"    \"\"\"\n",[45,161715,161716],{"class":47,"line":1262},[45,161717,161718],{"class":313},"    计算BMI。\n",[45,161720,161721],{"class":47,"line":1277},[45,161722,2483],{"emptyLinePlaceholder":133},[45,161724,161725],{"class":47,"line":1283},[45,161726,161727],{"class":313},"    :param weight: 体重，单位kg\n",[45,161729,161730],{"class":47,"line":1297},[45,161731,161732],{"class":313},"    :param height: 身高，单位m\n",[45,161734,161735],{"class":47,"line":1303},[45,161736,161737],{"class":313},"    :return: BMI数值\n",[45,161739,161740],{"class":47,"line":1394},[45,161741,161713],{"class":313},[45,161743,161744,161746,161748,161750,161752,161754],{"class":47,"line":1400},[45,161745,4173],{"class":93},[45,161747,161667],{"class":51},[45,161749,791],{"class":93},[45,161751,161672],{"class":51},[45,161753,10744],{"class":93},[45,161755,47804],{"class":257},[30,161757,161759],{"id":161758},"_59-变量作用域","5.9 变量作用域",[176,161761,161763],{"id":161762},"_591-局部变量","5.9.1 局部变量",[10,161765,161766],{},"在函数内部定义的变量，只能在函数内部使用。",[35,161768,161770],{"className":37,"code":161769,"language":39,"meta":40,"style":40},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[42,161771,161772,161781,161789,161795,161799,161803,161808],{"__ignoreMap":40},[45,161773,161774,161776,161779],{"class":47,"line":48},[45,161775,32028],{"class":93},[45,161777,161778],{"class":2046}," test",[45,161780,32034],{"class":51},[45,161782,161783,161785,161787],{"class":47,"line":125},[45,161784,45674],{"class":51},[45,161786,254],{"class":93},[45,161788,58509],{"class":257},[45,161790,161791,161793],{"class":47,"line":1262},[45,161792,31380],{"class":257},[45,161794,222],{"class":51},[45,161796,161797],{"class":47,"line":1277},[45,161798,2483],{"emptyLinePlaceholder":133},[45,161800,161801],{"class":47,"line":1283},[45,161802,2483],{"emptyLinePlaceholder":133},[45,161804,161805],{"class":47,"line":1297},[45,161806,161807],{"class":51},"test()\n",[45,161809,161810,161812,161815],{"class":47,"line":1303},[45,161811,30496],{"class":257},[45,161813,161814],{"class":51},"(num)  ",[45,161816,161817],{"class":267},"# 报错\n",[176,161819,161821],{"id":161820},"_592-全局变量","5.9.2 全局变量",[10,161823,161824],{},"在函数外部定义的变量，可以在函数内部读取。",[35,161826,161828],{"className":37,"code":161827,"language":39,"meta":40,"style":40},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[42,161829,161830,161838,161842,161846,161854,161860,161864,161868],{"__ignoreMap":40},[45,161831,161832,161834,161836],{"class":47,"line":48},[45,161833,146587],{"class":51},[45,161835,254],{"class":93},[45,161837,149404],{"class":313},[45,161839,161840],{"class":47,"line":125},[45,161841,2483],{"emptyLinePlaceholder":133},[45,161843,161844],{"class":47,"line":1262},[45,161845,2483],{"emptyLinePlaceholder":133},[45,161847,161848,161850,161852],{"class":47,"line":1277},[45,161849,32028],{"class":93},[45,161851,161047],{"class":2046},[45,161853,32034],{"class":51},[45,161855,161856,161858],{"class":47,"line":1283},[45,161857,31380],{"class":257},[45,161859,150711],{"class":51},[45,161861,161862],{"class":47,"line":1297},[45,161863,2483],{"emptyLinePlaceholder":133},[45,161865,161866],{"class":47,"line":1303},[45,161867,2483],{"emptyLinePlaceholder":133},[45,161869,161870],{"class":47,"line":1394},[45,161871,161082],{"class":51},[10,161873,161874,161875,28468],{},"如果要在函数内部修改全局变量，需要 ",[42,161876,161877],{},"global",[35,161879,161881],{"className":37,"code":161880,"language":39,"meta":40,"style":40},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[42,161882,161883,161891,161895,161899,161908,161916,161924,161928,161932,161937],{"__ignoreMap":40},[45,161884,161885,161887,161889],{"class":47,"line":48},[45,161886,146742],{"class":51},[45,161888,254],{"class":93},[45,161890,47414],{"class":257},[45,161892,161893],{"class":47,"line":125},[45,161894,2483],{"emptyLinePlaceholder":133},[45,161896,161897],{"class":47,"line":1262},[45,161898,2483],{"emptyLinePlaceholder":133},[45,161900,161901,161903,161906],{"class":47,"line":1277},[45,161902,32028],{"class":93},[45,161904,161905],{"class":2046}," add_count",[45,161907,32034],{"class":51},[45,161909,161910,161913],{"class":47,"line":1283},[45,161911,161912],{"class":93},"    global",[45,161914,161915],{"class":51}," count\n",[45,161917,161918,161920,161922],{"class":47,"line":1297},[45,161919,159484],{"class":51},[45,161921,9560],{"class":93},[45,161923,55780],{"class":257},[45,161925,161926],{"class":47,"line":1303},[45,161927,2483],{"emptyLinePlaceholder":133},[45,161929,161930],{"class":47,"line":1394},[45,161931,2483],{"emptyLinePlaceholder":133},[45,161933,161934],{"class":47,"line":1400},[45,161935,161936],{"class":51},"add_count()\n",[45,161938,161939,161941],{"class":47,"line":1412},[45,161940,30496],{"class":257},[45,161942,161943],{"class":51},"(count)\n",[10,161945,161946],{},"不建议大量使用全局变量，项目变大后很难维护。",[30,161948,161950],{"id":161949},"_510-函数嵌套调用","5.10 函数嵌套调用",[10,161952,161953],{},"一个函数中可以调用另一个函数。",[35,161955,161957],{"className":37,"code":161956,"language":39,"meta":40,"style":40},"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",[42,161958,161959,161968,161982,161986,161990,161999,162004,162024,162045,162049,162053,162057],{"__ignoreMap":40},[45,161960,161961,161963,161966],{"class":47,"line":48},[45,161962,32028],{"class":93},[45,161964,161965],{"class":2046}," print_line",[45,161967,32034],{"class":51},[45,161969,161970,161972,161974,161976,161978,161980],{"class":47,"line":125},[45,161971,31380],{"class":257},[45,161973,209],{"class":51},[45,161975,32564],{"class":313},[45,161977,6601],{"class":93},[45,161979,78746],{"class":257},[45,161981,215],{"class":51},[45,161983,161984],{"class":47,"line":1262},[45,161985,2483],{"emptyLinePlaceholder":133},[45,161987,161988],{"class":47,"line":1277},[45,161989,2483],{"emptyLinePlaceholder":133},[45,161991,161992,161994,161997],{"class":47,"line":1283},[45,161993,32028],{"class":93},[45,161995,161996],{"class":2046}," print_info",[45,161998,149426],{"class":51},[45,162000,162001],{"class":47,"line":1297},[45,162002,162003],{"class":51},"    print_line()\n",[45,162005,162006,162008,162010,162012,162014,162016,162018,162020,162022],{"class":47,"line":1303},[45,162007,31380],{"class":257},[45,162009,209],{"class":51},[45,162011,261],{"class":93},[45,162013,156733],{"class":313},[45,162015,1103],{"class":257},[45,162017,79891],{"class":51},[45,162019,1153],{"class":257},[45,162021,459],{"class":313},[45,162023,215],{"class":51},[45,162025,162026,162028,162030,162032,162035,162037,162039,162041,162043],{"class":47,"line":1394},[45,162027,31380],{"class":257},[45,162029,209],{"class":51},[45,162031,261],{"class":93},[45,162033,162034],{"class":313},"\"年龄:",[45,162036,1103],{"class":257},[45,162038,70302],{"class":51},[45,162040,1153],{"class":257},[45,162042,459],{"class":313},[45,162044,215],{"class":51},[45,162046,162047],{"class":47,"line":1400},[45,162048,162003],{"class":51},[45,162050,162051],{"class":47,"line":1412},[45,162052,2483],{"emptyLinePlaceholder":133},[45,162054,162055],{"class":47,"line":1695},[45,162056,2483],{"emptyLinePlaceholder":133},[45,162058,162059,162062,162064,162066,162068],{"class":47,"line":1700},[45,162060,162061],{"class":51},"print_info(",[45,162063,149939],{"class":313},[45,162065,12518],{"class":51},[45,162067,857],{"class":257},[45,162069,215],{"class":51},[10,162071,162072],{},"这种方式可以把小功能组合成大功能。",[30,162074,162076],{"id":162075},"_511-参数检查","5.11 参数检查",[10,162078,162079],{},"函数内部可以检查参数是否合法。",[35,162081,162083],{"className":37,"code":162082,"language":39,"meta":40,"style":40},"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",[42,162084,162085,162094,162106,162112,162122,162126,162130,162147,162151,162163,162174,162180],{"__ignoreMap":40},[45,162086,162087,162089,162092],{"class":47,"line":48},[45,162088,32028],{"class":93},[45,162090,162091],{"class":2046}," divide",[45,162093,151144],{"class":51},[45,162095,162096,162098,162100,162102,162104],{"class":47,"line":125},[45,162097,3184],{"class":93},[45,162099,10965],{"class":51},[45,162101,3032],{"class":93},[45,162103,4176],{"class":257},[45,162105,3822],{"class":51},[45,162107,162108,162110],{"class":47,"line":1262},[45,162109,14835],{"class":93},[45,162111,152223],{"class":257},[45,162113,162114,162116,162118,162120],{"class":47,"line":1277},[45,162115,4173],{"class":93},[45,162117,10952],{"class":51},[45,162119,791],{"class":93},[45,162121,151155],{"class":51},[45,162123,162124],{"class":47,"line":1283},[45,162125,2483],{"emptyLinePlaceholder":133},[45,162127,162128],{"class":47,"line":1297},[45,162129,2483],{"emptyLinePlaceholder":133},[45,162131,162132,162134,162136,162139,162141,162143,162145],{"class":47,"line":1303},[45,162133,161357],{"class":51},[45,162135,254],{"class":93},[45,162137,162138],{"class":51}," divide(",[45,162140,654],{"class":257},[45,162142,12518],{"class":51},[45,162144,400],{"class":257},[45,162146,215],{"class":51},[45,162148,162149],{"class":47,"line":1394},[45,162150,2483],{"emptyLinePlaceholder":133},[45,162152,162153,162155,162157,162159,162161],{"class":47,"line":1400},[45,162154,1614],{"class":93},[45,162156,161603],{"class":51},[45,162158,39008],{"class":93},[45,162160,39014],{"class":257},[45,162162,3822],{"class":51},[45,162164,162165,162167,162169,162172],{"class":47,"line":1412},[45,162166,31380],{"class":257},[45,162168,209],{"class":51},[45,162170,162171],{"class":313},"\"除数不能为0\"",[45,162173,215],{"class":51},[45,162175,162176,162178],{"class":47,"line":1695},[45,162177,1784],{"class":93},[45,162179,3822],{"class":51},[45,162181,162182,162184],{"class":47,"line":1700},[45,162183,31380],{"class":257},[45,162185,76666],{"class":51},[30,162187,162189],{"id":162188},"_512-类型提示","5.12 类型提示",[10,162191,162192],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[35,162194,162196],{"className":37,"code":162195,"language":39,"meta":40,"style":40},"def add(a: int, b: int) -> int:\n    return a + b\n",[42,162197,162198,162221],{"__ignoreMap":40},[45,162199,162200,162202,162204,162207,162209,162212,162214,162217,162219],{"class":47,"line":48},[45,162201,32028],{"class":93},[45,162203,5292],{"class":2046},[45,162205,162206],{"class":51},"(a: ",[45,162208,212],{"class":257},[45,162210,162211],{"class":51},", b: ",[45,162213,212],{"class":257},[45,162215,162216],{"class":51},") -> ",[45,162218,212],{"class":257},[45,162220,3822],{"class":51},[45,162222,162223,162225,162227,162229],{"class":47,"line":125},[45,162224,4173],{"class":93},[45,162226,10952],{"class":51},[45,162228,689],{"class":93},[45,162230,151155],{"class":51},[10,162232,162233],{},"字符串参数：",[35,162235,162237],{"className":37,"code":162236,"language":39,"meta":40,"style":40},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[42,162238,162239,162256],{"__ignoreMap":40},[45,162240,162241,162243,162245,162248,162250,162252,162254],{"class":47,"line":48},[45,162242,32028],{"class":93},[45,162244,161047],{"class":2046},[45,162246,162247],{"class":51},"(name: ",[45,162249,1382],{"class":257},[45,162251,162216],{"class":51},[45,162253,95737],{"class":257},[45,162255,3822],{"class":51},[45,162257,162258,162260,162262,162264,162266,162268,162270,162272,162274],{"class":47,"line":125},[45,162259,31380],{"class":257},[45,162261,209],{"class":51},[45,162263,261],{"class":93},[45,162265,157105],{"class":313},[45,162267,1103],{"class":257},[45,162269,79891],{"class":51},[45,162271,1153],{"class":257},[45,162273,459],{"class":313},[45,162275,215],{"class":51},[10,162277,162278],{},"列表参数：",[35,162280,162282],{"className":37,"code":162281,"language":39,"meta":40,"style":40},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[42,162283,162284,162303,162311,162323,162332],{"__ignoreMap":40},[45,162285,162286,162288,162291,162294,162296,162299,162301],{"class":47,"line":48},[45,162287,32028],{"class":93},[45,162289,162290],{"class":2046}," get_total",[45,162292,162293],{"class":51},"(numbers: list[",[45,162295,212],{"class":257},[45,162297,162298],{"class":51},"]) -> ",[45,162300,212],{"class":257},[45,162302,3822],{"class":51},[45,162304,162305,162307,162309],{"class":47,"line":125},[45,162306,159358],{"class":51},[45,162308,254],{"class":93},[45,162310,47414],{"class":257},[45,162312,162313,162315,162318,162320],{"class":47,"line":1262},[45,162314,3284],{"class":93},[45,162316,162317],{"class":51}," number ",[45,162319,26126],{"class":93},[45,162321,162322],{"class":51}," numbers:\n",[45,162324,162325,162327,162329],{"class":47,"line":1277},[45,162326,160033],{"class":51},[45,162328,9560],{"class":93},[45,162330,162331],{"class":51}," number\n",[45,162333,162334,162336],{"class":47,"line":1283},[45,162335,4173],{"class":93},[45,162337,162338],{"class":51}," total\n",[10,162340,162341],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[30,162343,162345],{"id":162344},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[35,162347,162349],{"className":37,"code":162348,"language":39,"meta":40,"style":40},"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",[42,162350,162351,162361,162365,162369,162377,162388,162398,162408,162418,162428,162432,162436,162445,162467,162471,162475,162484,162490,162510,162522,162533,162537,162546,162557,162562,162566,162570,162579,162585,162604,162616,162626,162630,162641,162651,162655,162663,162674,162678,162682,162686,162694,162699,162713,162717,162729,162734,162746,162751,162763,162768,162780,162790,162794,162800],{"__ignoreMap":40},[45,162352,162353,162356,162358],{"class":47,"line":48},[45,162354,162355],{"class":51},"balance ",[45,162357,254],{"class":93},[45,162359,162360],{"class":257}," 1000\n",[45,162362,162363],{"class":47,"line":125},[45,162364,2483],{"emptyLinePlaceholder":133},[45,162366,162367],{"class":47,"line":1262},[45,162368,2483],{"emptyLinePlaceholder":133},[45,162370,162371,162373,162375],{"class":47,"line":1277},[45,162372,32028],{"class":93},[45,162374,152084],{"class":2046},[45,162376,32034],{"class":51},[45,162378,162379,162381,162383,162386],{"class":47,"line":1283},[45,162380,31380],{"class":257},[45,162382,209],{"class":51},[45,162384,162385],{"class":313},"\"====== ATM ======\"",[45,162387,215],{"class":51},[45,162389,162390,162392,162394,162396],{"class":47,"line":1297},[45,162391,31380],{"class":257},[45,162393,209],{"class":51},[45,162395,160699],{"class":313},[45,162397,215],{"class":51},[45,162399,162400,162402,162404,162406],{"class":47,"line":1303},[45,162401,31380],{"class":257},[45,162403,209],{"class":51},[45,162405,160710],{"class":313},[45,162407,215],{"class":51},[45,162409,162410,162412,162414,162416],{"class":47,"line":1394},[45,162411,31380],{"class":257},[45,162413,209],{"class":51},[45,162415,160721],{"class":313},[45,162417,215],{"class":51},[45,162419,162420,162422,162424,162426],{"class":47,"line":1400},[45,162421,31380],{"class":257},[45,162423,209],{"class":51},[45,162425,160732],{"class":313},[45,162427,215],{"class":51},[45,162429,162430],{"class":47,"line":1412},[45,162431,2483],{"emptyLinePlaceholder":133},[45,162433,162434],{"class":47,"line":1695},[45,162435,2483],{"emptyLinePlaceholder":133},[45,162437,162438,162440,162443],{"class":47,"line":1700},[45,162439,32028],{"class":93},[45,162441,162442],{"class":2046}," show_balance",[45,162444,32034],{"class":51},[45,162446,162447,162449,162451,162453,162456,162458,162461,162463,162465],{"class":47,"line":1706},[45,162448,31380],{"class":257},[45,162450,209],{"class":51},[45,162452,261],{"class":93},[45,162454,162455],{"class":313},"\"当前余额:",[45,162457,1103],{"class":257},[45,162459,162460],{"class":51},"balance",[45,162462,1153],{"class":257},[45,162464,157063],{"class":313},[45,162466,215],{"class":51},[45,162468,162469],{"class":47,"line":1711},[45,162470,2483],{"emptyLinePlaceholder":133},[45,162472,162473],{"class":47,"line":1725},[45,162474,2483],{"emptyLinePlaceholder":133},[45,162476,162477,162479,162482],{"class":47,"line":1730},[45,162478,32028],{"class":93},[45,162480,162481],{"class":2046}," save_money",[45,162483,32034],{"class":51},[45,162485,162486,162488],{"class":47,"line":1736},[45,162487,161912],{"class":93},[45,162489,150150],{"class":51},[45,162491,162492,162495,162497,162499,162501,162503,162505,162508],{"class":47,"line":1757},[45,162493,162494],{"class":51},"    money ",[45,162496,254],{"class":93},[45,162498,109848],{"class":257},[45,162500,209],{"class":51},[45,162502,53902],{"class":257},[45,162504,209],{"class":51},[45,162506,162507],{"class":313},"\"请输入存款金额:\"",[45,162509,30578],{"class":51},[45,162511,162512,162514,162516,162518,162520],{"class":47,"line":1762},[45,162513,3184],{"class":93},[45,162515,150193],{"class":51},[45,162517,1671],{"class":93},[45,162519,4176],{"class":257},[45,162521,3822],{"class":51},[45,162523,162524,162526,162528,162531],{"class":47,"line":1776},[45,162525,32532],{"class":257},[45,162527,209],{"class":51},[45,162529,162530],{"class":313},"\"金额必须大于0\"",[45,162532,215],{"class":51},[45,162534,162535],{"class":47,"line":1781},[45,162536,152412],{"class":93},[45,162538,162539,162542,162544],{"class":47,"line":1810},[45,162540,162541],{"class":51},"    balance ",[45,162543,9560],{"class":93},[45,162545,150226],{"class":51},[45,162547,162548,162550,162552,162555],{"class":47,"line":1815},[45,162549,31380],{"class":257},[45,162551,209],{"class":51},[45,162553,162554],{"class":313},"\"存款成功\"",[45,162556,215],{"class":51},[45,162558,162559],{"class":47,"line":1832},[45,162560,162561],{"class":51},"    show_balance()\n",[45,162563,162564],{"class":47,"line":1837},[45,162565,2483],{"emptyLinePlaceholder":133},[45,162567,162568],{"class":47,"line":1842},[45,162569,2483],{"emptyLinePlaceholder":133},[45,162571,162572,162574,162577],{"class":47,"line":1847},[45,162573,32028],{"class":93},[45,162575,162576],{"class":2046}," withdraw_money",[45,162578,32034],{"class":51},[45,162580,162581,162583],{"class":47,"line":1861},[45,162582,161912],{"class":93},[45,162584,150150],{"class":51},[45,162586,162587,162589,162591,162593,162595,162597,162599,162602],{"class":47,"line":1866},[45,162588,162494],{"class":51},[45,162590,254],{"class":93},[45,162592,109848],{"class":257},[45,162594,209],{"class":51},[45,162596,53902],{"class":257},[45,162598,209],{"class":51},[45,162600,162601],{"class":313},"\"请输入取款金额:\"",[45,162603,30578],{"class":51},[45,162605,162606,162608,162610,162612,162614],{"class":47,"line":2660},[45,162607,3184],{"class":93},[45,162609,150193],{"class":51},[45,162611,1671],{"class":93},[45,162613,4176],{"class":257},[45,162615,3822],{"class":51},[45,162617,162618,162620,162622,162624],{"class":47,"line":2674},[45,162619,32532],{"class":257},[45,162621,209],{"class":51},[45,162623,162530],{"class":313},[45,162625,215],{"class":51},[45,162627,162628],{"class":47,"line":2682},[45,162629,152412],{"class":93},[45,162631,162632,162634,162636,162638],{"class":47,"line":2687},[45,162633,3184],{"class":93},[45,162635,150193],{"class":51},[45,162637,1167],{"class":93},[45,162639,162640],{"class":51}," balance:\n",[45,162642,162643,162645,162647,162649],{"class":47,"line":2693},[45,162644,32532],{"class":257},[45,162646,209],{"class":51},[45,162648,150288],{"class":313},[45,162650,215],{"class":51},[45,162652,162653],{"class":47,"line":2699},[45,162654,152412],{"class":93},[45,162656,162657,162659,162661],{"class":47,"line":2704},[45,162658,162541],{"class":51},[45,162660,150303],{"class":93},[45,162662,150226],{"class":51},[45,162664,162665,162667,162669,162672],{"class":47,"line":8031},[45,162666,31380],{"class":257},[45,162668,209],{"class":51},[45,162670,162671],{"class":313},"\"取款成功\"",[45,162673,215],{"class":51},[45,162675,162676],{"class":47,"line":8055},[45,162677,162561],{"class":51},[45,162679,162680],{"class":47,"line":8060},[45,162681,2483],{"emptyLinePlaceholder":133},[45,162683,162684],{"class":47,"line":8066},[45,162685,2483],{"emptyLinePlaceholder":133},[45,162687,162688,162690,162692],{"class":47,"line":8093},[45,162689,108714],{"class":93},[45,162691,95343],{"class":257},[45,162693,3822],{"class":51},[45,162695,162696],{"class":47,"line":8098},[45,162697,162698],{"class":51},"    show_menu()\n",[45,162700,162701,162703,162705,162707,162709,162711],{"class":47,"line":8104},[45,162702,160743],{"class":51},[45,162704,254],{"class":93},[45,162706,60686],{"class":257},[45,162708,209],{"class":51},[45,162710,153124],{"class":313},[45,162712,215],{"class":51},[45,162714,162715],{"class":47,"line":8116},[45,162716,2483],{"emptyLinePlaceholder":133},[45,162718,162719,162721,162723,162725,162727],{"class":47,"line":8128},[45,162720,3184],{"class":93},[45,162722,153137],{"class":51},[45,162724,3032],{"class":93},[45,162726,153142],{"class":313},[45,162728,3822],{"class":51},[45,162730,162731],{"class":47,"line":8140},[45,162732,162733],{"class":51},"        show_balance()\n",[45,162735,162736,162738,162740,162742,162744],{"class":47,"line":9799},[45,162737,39374],{"class":93},[45,162739,153137],{"class":51},[45,162741,3032],{"class":93},[45,162743,153161],{"class":313},[45,162745,3822],{"class":51},[45,162747,162748],{"class":47,"line":9824},[45,162749,162750],{"class":51},"        save_money()\n",[45,162752,162753,162755,162757,162759,162761],{"class":47,"line":9847},[45,162754,39374],{"class":93},[45,162756,153137],{"class":51},[45,162758,3032],{"class":93},[45,162760,153179],{"class":313},[45,162762,3822],{"class":51},[45,162764,162765],{"class":47,"line":9871},[45,162766,162767],{"class":51},"        withdraw_money()\n",[45,162769,162770,162772,162774,162776,162778],{"class":47,"line":9876},[45,162771,39374],{"class":93},[45,162773,153137],{"class":51},[45,162775,3032],{"class":93},[45,162777,153233],{"class":313},[45,162779,3822],{"class":51},[45,162781,162782,162784,162786,162788],{"class":47,"line":9881},[45,162783,32532],{"class":257},[45,162785,209],{"class":51},[45,162787,153244],{"class":313},[45,162789,215],{"class":51},[45,162791,162792],{"class":47,"line":9886},[45,162793,31708],{"class":93},[45,162795,162796,162798],{"class":47,"line":9895},[45,162797,158073],{"class":93},[45,162799,3822],{"class":51},[45,162801,162802,162804,162806,162808],{"class":47,"line":9900},[45,162803,32532],{"class":257},[45,162805,209],{"class":51},[45,162807,153265],{"class":313},[45,162809,215],{"class":51},[10,162811,162812],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[30,162814,162816],{"id":162815},"_514-易错点","5.14 易错点",[159,162818,162819,162822,162825,162830,162835,162838],{},[162,162820,162821],{},"函数定义后必须调用才会执行。",[162,162823,162824],{},"函数名后面有括号才是调用。",[162,162826,162827,162829],{},[42,162828,17129],{}," 后面的代码不会执行。",[162,162831,162832,162833,28468],{},"没有返回值的函数默认返回 ",[42,162834,95737],{},[162,162836,162837],{},"局部变量不能在函数外部访问。",[162,162839,162840,162841,162843],{},"不要滥用 ",[42,162842,161877],{},"，更好的方式是让函数返回新值。",[10,162845,162846,162847,162849],{},"例如不用 ",[42,162848,161877],{}," 改写存款：",[35,162851,162853],{"className":37,"code":162852,"language":39,"meta":40,"style":40},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[42,162854,162855,162864,162875,162879,162883,162891,162904],{"__ignoreMap":40},[45,162856,162857,162859,162861],{"class":47,"line":48},[45,162858,32028],{"class":93},[45,162860,162481],{"class":2046},[45,162862,162863],{"class":51},"(balance, money):\n",[45,162865,162866,162868,162871,162873],{"class":47,"line":125},[45,162867,4173],{"class":93},[45,162869,162870],{"class":51}," balance ",[45,162872,689],{"class":93},[45,162874,150226],{"class":51},[45,162876,162877],{"class":47,"line":1262},[45,162878,2483],{"emptyLinePlaceholder":133},[45,162880,162881],{"class":47,"line":1277},[45,162882,2483],{"emptyLinePlaceholder":133},[45,162884,162885,162887,162889],{"class":47,"line":1283},[45,162886,162355],{"class":51},[45,162888,254],{"class":93},[45,162890,162360],{"class":257},[45,162892,162893,162895,162897,162900,162902],{"class":47,"line":1297},[45,162894,162355],{"class":51},[45,162896,254],{"class":93},[45,162898,162899],{"class":51}," save_money(balance, ",[45,162901,1805],{"class":257},[45,162903,215],{"class":51},[45,162905,162906,162908],{"class":47,"line":1303},[45,162907,30496],{"class":257},[45,162909,162910],{"class":51},"(balance)\n",[30,162912,162914],{"id":162913},"_515-本章练习","5.15 本章练习",[159,162916,162917,162924,162930,162936,162942],{},[162,162918,162919,162920,162923],{},"定义函数 ",[42,162921,162922],{},"print_student(name, age)","，输出学生信息。",[162,162925,162919,162926,162929],{},[42,162927,162928],{},"get_max(a, b, c)","，返回三个数中的最大值。",[162,162931,162919,162932,162935],{},[42,162933,162934],{},"is_even(num)","，判断一个数是否为偶数。",[162,162937,162919,162938,162941],{},[42,162939,162940],{},"calculate_bmi(weight, height)","，返回 BMI。",[162,162943,162944],{},"把第 4 章的菜单程序拆分成多个函数。",[121,162946,162947],{},"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":40,"searchDepth":125,"depth":125,"links":162949},[162950,162951,162952,162953,162954,162955,162956,162957,162958,162962,162963,162964,162965,162966,162967],{"id":160970,"depth":125,"text":160971},{"id":161011,"depth":125,"text":161012},{"id":161101,"depth":125,"text":161102},{"id":161182,"depth":125,"text":161183},{"id":161315,"depth":125,"text":161316},{"id":161437,"depth":125,"text":161438},{"id":161559,"depth":125,"text":161560},{"id":161636,"depth":125,"text":161637},{"id":161758,"depth":125,"text":161759,"children":162959},[162960,162961],{"id":161762,"depth":1262,"text":161763},{"id":161820,"depth":1262,"text":161821},{"id":161949,"depth":125,"text":161950},{"id":162075,"depth":125,"text":162076},{"id":162188,"depth":125,"text":162189},{"id":162344,"depth":125,"text":162345},{"id":162815,"depth":125,"text":162816},{"id":162913,"depth":125,"text":162914},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160962,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162974,"title":162975,"body":162976,"description":130,"extension":131,"meta":166020,"navigation":133,"path":166021,"seo":166022,"stem":166023,"__hash__":166024},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162977,"toc":166001},[162978,162981,162985,162988,162991,163095,163098,163102,163105,163185,163188,163192,163195,163255,163258,163294,163297,163312,163316,163389,163392,163447,163450,163520,163523,163607,163617,163675,163679,163724,163727,163753,163756,163862,163866,163869,163911,163914,163978,163981,163985,163988,164049,164052,164082,164085,164123,164127,164130,164139,164142,164266,164269,164310,164314,164317,164328,164368,164371,164386,164391,164394,164461,164464,164554,164558,164561,164609,164612,164639,164641,164671,164674,164694,164697,164728,164731,164764,164768,164771,164795,164798,164822,164825,164849,164853,164856,164986,164989,165069,165072,165147,165151,165154,165204,165207,165249,165252,165276,165278,165302,165305,165360,165363,165429,165433,165436,165439,165477,165480,165533,165536,165582,165585,165618,165621,165625,165944,165948,165977,165981,165998],[20,162979,162975],{"id":162980},"_6-数据容器",[30,162982,162984],{"id":162983},"_61-什么是数据容器","6.1 什么是数据容器",[10,162986,162987],{},"数据容器用于一次保存多个数据。",[10,162989,162990],{},"常见容器：",[346,162992,162993,163010],{},[349,162994,162995],{},[352,162996,162997,162999,163002,163005,163008],{},[355,162998,25854],{},[355,163000,163001],{},"是否有序",[355,163003,163004],{},"是否可变",[355,163006,163007],{},"是否允许重复",[355,163009,27575],{},[393,163011,163012,163030,163046,163061,163078],{},[352,163013,163014,163017,163020,163023,163026],{},[398,163015,163016],{},"list列表",[398,163018,163019],{},"有序",[398,163021,163022],{},"可变",[398,163024,163025],{},"允许",[398,163027,163028],{},[42,163029,155308],{},[352,163031,163032,163035,163037,163040,163042],{},[398,163033,163034],{},"tuple元组",[398,163036,163019],{},[398,163038,163039],{},"不可变",[398,163041,163025],{},[398,163043,163044],{},[42,163045,155321],{},[352,163047,163048,163051,163053,163055,163057],{},[398,163049,163050],{},"str字符串",[398,163052,163019],{},[398,163054,163039],{},[398,163056,163025],{},[398,163058,163059],{},[42,163060,155931],{},[352,163062,163063,163066,163069,163071,163074],{},[398,163064,163065],{},"set集合",[398,163067,163068],{},"无序",[398,163070,163022],{},[398,163072,163073],{},"不允许",[398,163075,163076],{},[42,163077,155346],{},[352,163079,163080,163083,163085,163087,163090],{},[398,163081,163082],{},"dict字典",[398,163084,163019],{},[398,163086,163022],{},[398,163088,163089],{},"key不允许重复",[398,163091,163092],{},[42,163093,163094],{},"{\"name\": \"小明\"}",[10,163096,163097],{},"Python 3.7 之后，字典保持插入顺序。",[30,163099,163101],{"id":163100},"_62-列表list","6.2 列表list",[10,163103,163104],{},"列表用于保存一组有顺序的数据。",[35,163106,163108],{"className":37,"code":163107,"language":39,"meta":40,"style":40},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[42,163109,163110,163130,163155,163176],{"__ignoreMap":40},[45,163111,163112,163114,163116,163118,163120,163122,163124,163126,163128],{"class":47,"line":48},[45,163113,160431],{"class":51},[45,163115,254],{"class":93},[45,163117,52307],{"class":51},[45,163119,149939],{"class":313},[45,163121,12518],{"class":51},[45,163123,150987],{"class":313},[45,163125,12518],{"class":51},[45,163127,159782],{"class":313},[45,163129,33327],{"class":51},[45,163131,163132,163135,163137,163139,163141,163143,163145,163147,163149,163151,163153],{"class":47,"line":125},[45,163133,163134],{"class":51},"numbers ",[45,163136,254],{"class":93},[45,163138,52307],{"class":51},[45,163140,426],{"class":257},[45,163142,12518],{"class":51},[45,163144,286],{"class":257},[45,163146,12518],{"class":51},[45,163148,280],{"class":257},[45,163150,12518],{"class":51},[45,163152,501],{"class":257},[45,163154,33327],{"class":51},[45,163156,163157,163160,163162,163164,163166,163168,163170,163172,163174],{"class":47,"line":1262},[45,163158,163159],{"class":51},"mixed ",[45,163161,254],{"class":93},[45,163163,52307],{"class":51},[45,163165,149939],{"class":313},[45,163167,12518],{"class":51},[45,163169,857],{"class":257},[45,163171,12518],{"class":51},[45,163173,31557],{"class":257},[45,163175,33327],{"class":51},[45,163177,163178,163181,163183],{"class":47,"line":1277},[45,163179,163180],{"class":51},"empty ",[45,163182,254],{"class":93},[45,163184,51919],{"class":51},[10,163186,163187],{},"推荐一个列表中保存同类数据，代码更清晰。",[30,163189,163191],{"id":163190},"_63-列表索引","6.3 列表索引",[10,163193,163194],{},"正向索引从 0 开始：",[35,163196,163198],{"className":37,"code":163197,"language":39,"meta":40,"style":40},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[42,163199,163200,163220,163224,163235,163245],{"__ignoreMap":40},[45,163201,163202,163204,163206,163208,163210,163212,163214,163216,163218],{"class":47,"line":48},[45,163203,160431],{"class":51},[45,163205,254],{"class":93},[45,163207,52307],{"class":51},[45,163209,149939],{"class":313},[45,163211,12518],{"class":51},[45,163213,150987],{"class":313},[45,163215,12518],{"class":51},[45,163217,159782],{"class":313},[45,163219,33327],{"class":51},[45,163221,163222],{"class":47,"line":125},[45,163223,2483],{"emptyLinePlaceholder":133},[45,163225,163226,163228,163231,163233],{"class":47,"line":1262},[45,163227,30496],{"class":257},[45,163229,163230],{"class":51},"(names[",[45,163232,400],{"class":257},[45,163234,4740],{"class":51},[45,163236,163237,163239,163241,163243],{"class":47,"line":1277},[45,163238,30496],{"class":257},[45,163240,163230],{"class":51},[45,163242,426],{"class":257},[45,163244,4740],{"class":51},[45,163246,163247,163249,163251,163253],{"class":47,"line":1283},[45,163248,30496],{"class":257},[45,163250,163230],{"class":51},[45,163252,286],{"class":257},[45,163254,4740],{"class":51},[10,163256,163257],{},"反向索引从 -1 开始：",[35,163259,163261],{"className":37,"code":163260,"language":39,"meta":40,"style":40},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[42,163262,163263,163279],{"__ignoreMap":40},[45,163264,163265,163267,163269,163271,163273,163276],{"class":47,"line":48},[45,163266,30496],{"class":257},[45,163268,163230],{"class":51},[45,163270,94],{"class":93},[45,163272,426],{"class":257},[45,163274,163275],{"class":51},"])  ",[45,163277,163278],{"class":267},"# 小刚\n",[45,163280,163281,163283,163285,163287,163289,163291],{"class":47,"line":125},[45,163282,30496],{"class":257},[45,163284,163230],{"class":51},[45,163286,94],{"class":93},[45,163288,286],{"class":257},[45,163290,163275],{"class":51},[45,163292,163293],{"class":267},"# 小红\n",[10,163295,163296],{},"索引越界会报错：",[35,163298,163300],{"className":37,"code":163299,"language":39,"meta":40,"style":40},"print(names[3])\n",[42,163301,163302],{"__ignoreMap":40},[45,163303,163304,163306,163308,163310],{"class":47,"line":48},[45,163305,30496],{"class":257},[45,163307,163230],{"class":51},[45,163309,280],{"class":257},[45,163311,4740],{"class":51},[30,163313,163315],{"id":163314},"_64-列表常用方法","6.4 列表常用方法",[35,163317,163319],{"className":37,"code":163318,"language":39,"meta":40,"style":40},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[42,163320,163321,163337,163341,163350,163364,163378,163382],{"__ignoreMap":40},[45,163322,163323,163325,163327,163329,163331,163333,163335],{"class":47,"line":48},[45,163324,160431],{"class":51},[45,163326,254],{"class":93},[45,163328,52307],{"class":51},[45,163330,149939],{"class":313},[45,163332,12518],{"class":51},[45,163334,150987],{"class":313},[45,163336,33327],{"class":51},[45,163338,163339],{"class":47,"line":125},[45,163340,2483],{"emptyLinePlaceholder":133},[45,163342,163343,163346,163348],{"class":47,"line":1262},[45,163344,163345],{"class":51},"names.append(",[45,163347,159782],{"class":313},[45,163349,215],{"class":51},[45,163351,163352,163355,163357,163359,163362],{"class":47,"line":1277},[45,163353,163354],{"class":51},"names.insert(",[45,163356,426],{"class":257},[45,163358,12518],{"class":51},[45,163360,163361],{"class":313},"\"小李\"",[45,163363,215],{"class":51},[45,163365,163366,163369,163371,163373,163376],{"class":47,"line":1283},[45,163367,163368],{"class":51},"names.extend([",[45,163370,8766],{"class":313},[45,163372,12518],{"class":51},[45,163374,163375],{"class":313},"\"小赵\"",[45,163377,4740],{"class":51},[45,163379,163380],{"class":47,"line":1297},[45,163381,2483],{"emptyLinePlaceholder":133},[45,163383,163384,163386],{"class":47,"line":1303},[45,163385,30496],{"class":257},[45,163387,163388],{"class":51},"(names)\n",[10,163390,163391],{},"删除元素：",[35,163393,163395],{"className":37,"code":163394,"language":39,"meta":40,"style":40},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[42,163396,163397,163406,163416,163430,163442],{"__ignoreMap":40},[45,163398,163399,163402,163404],{"class":47,"line":48},[45,163400,163401],{"class":51},"names.remove(",[45,163403,150987],{"class":313},[45,163405,215],{"class":51},[45,163407,163408,163411,163413],{"class":47,"line":125},[45,163409,163410],{"class":51},"last ",[45,163412,254],{"class":93},[45,163414,163415],{"class":51}," names.pop()\n",[45,163417,163418,163421,163423,163426,163428],{"class":47,"line":1262},[45,163419,163420],{"class":51},"first ",[45,163422,254],{"class":93},[45,163424,163425],{"class":51}," names.pop(",[45,163427,400],{"class":257},[45,163429,215],{"class":51},[45,163431,163432,163435,163438,163440],{"class":47,"line":1277},[45,163433,163434],{"class":93},"del",[45,163436,163437],{"class":51}," names[",[45,163439,400],{"class":257},[45,163441,33327],{"class":51},[45,163443,163444],{"class":47,"line":1283},[45,163445,163446],{"class":51},"names.clear()\n",[10,163448,163449],{},"查询和统计：",[35,163451,163453],{"className":37,"code":163452,"language":39,"meta":40,"style":40},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[42,163454,163455,163483,163487,163498,163509],{"__ignoreMap":40},[45,163456,163457,163459,163461,163463,163465,163467,163469,163471,163473,163475,163477,163479,163481],{"class":47,"line":48},[45,163458,163134],{"class":51},[45,163460,254],{"class":93},[45,163462,52307],{"class":51},[45,163464,426],{"class":257},[45,163466,12518],{"class":51},[45,163468,286],{"class":257},[45,163470,12518],{"class":51},[45,163472,280],{"class":257},[45,163474,12518],{"class":51},[45,163476,286],{"class":257},[45,163478,12518],{"class":51},[45,163480,501],{"class":257},[45,163482,33327],{"class":51},[45,163484,163485],{"class":47,"line":125},[45,163486,2483],{"emptyLinePlaceholder":133},[45,163488,163489,163491,163494,163496],{"class":47,"line":1262},[45,163490,30496],{"class":257},[45,163492,163493],{"class":51},"(numbers.index(",[45,163495,280],{"class":257},[45,163497,30578],{"class":51},[45,163499,163500,163502,163505,163507],{"class":47,"line":1277},[45,163501,30496],{"class":257},[45,163503,163504],{"class":51},"(numbers.count(",[45,163506,286],{"class":257},[45,163508,30578],{"class":51},[45,163510,163511,163513,163515,163517],{"class":47,"line":1283},[45,163512,30496],{"class":257},[45,163514,209],{"class":51},[45,163516,7441],{"class":257},[45,163518,163519],{"class":51},"(numbers))\n",[10,163521,163522],{},"排序：",[35,163524,163526],{"className":37,"code":163525,"language":39,"meta":40,"style":40},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[42,163527,163528,163552,163556,163561,163568,163572,163586,163592,163596,163601],{"__ignoreMap":40},[45,163529,163530,163532,163534,163536,163538,163540,163542,163544,163546,163548,163550],{"class":47,"line":48},[45,163531,163134],{"class":51},[45,163533,254],{"class":93},[45,163535,52307],{"class":51},[45,163537,280],{"class":257},[45,163539,12518],{"class":51},[45,163541,426],{"class":257},[45,163543,12518],{"class":51},[45,163545,527],{"class":257},[45,163547,12518],{"class":51},[45,163549,286],{"class":257},[45,163551,33327],{"class":51},[45,163553,163554],{"class":47,"line":125},[45,163555,2483],{"emptyLinePlaceholder":133},[45,163557,163558],{"class":47,"line":1262},[45,163559,163560],{"class":51},"numbers.sort()\n",[45,163562,163563,163565],{"class":47,"line":1277},[45,163564,30496],{"class":257},[45,163566,163567],{"class":51},"(numbers)\n",[45,163569,163570],{"class":47,"line":1283},[45,163571,2483],{"emptyLinePlaceholder":133},[45,163573,163574,163577,163580,163582,163584],{"class":47,"line":1297},[45,163575,163576],{"class":51},"numbers.sort(",[45,163578,163579],{"class":5299},"reverse",[45,163581,254],{"class":93},[45,163583,31557],{"class":257},[45,163585,215],{"class":51},[45,163587,163588,163590],{"class":47,"line":1303},[45,163589,30496],{"class":257},[45,163591,163567],{"class":51},[45,163593,163594],{"class":47,"line":1394},[45,163595,2483],{"emptyLinePlaceholder":133},[45,163597,163598],{"class":47,"line":1400},[45,163599,163600],{"class":51},"numbers.reverse()\n",[45,163602,163603,163605],{"class":47,"line":1412},[45,163604,30496],{"class":257},[45,163606,163567],{"class":51},[10,163608,163609,163612,163613,163616],{},[42,163610,163611],{},"sort()"," 会修改原列表，",[42,163614,163615],{},"sorted()"," 返回新列表。",[35,163618,163620],{"className":37,"code":163619,"language":39,"meta":40,"style":40},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[42,163621,163622,163646,163658,163662,163668],{"__ignoreMap":40},[45,163623,163624,163626,163628,163630,163632,163634,163636,163638,163640,163642,163644],{"class":47,"line":48},[45,163625,163134],{"class":51},[45,163627,254],{"class":93},[45,163629,52307],{"class":51},[45,163631,280],{"class":257},[45,163633,12518],{"class":51},[45,163635,426],{"class":257},[45,163637,12518],{"class":51},[45,163639,527],{"class":257},[45,163641,12518],{"class":51},[45,163643,286],{"class":257},[45,163645,33327],{"class":51},[45,163647,163648,163651,163653,163656],{"class":47,"line":125},[45,163649,163650],{"class":51},"new_numbers ",[45,163652,254],{"class":93},[45,163654,163655],{"class":257}," sorted",[45,163657,163567],{"class":51},[45,163659,163660],{"class":47,"line":1262},[45,163661,2483],{"emptyLinePlaceholder":133},[45,163663,163664,163666],{"class":47,"line":1277},[45,163665,30496],{"class":257},[45,163667,163567],{"class":51},[45,163669,163670,163672],{"class":47,"line":1283},[45,163671,30496],{"class":257},[45,163673,163674],{"class":51},"(new_numbers)\n",[30,163676,163678],{"id":163677},"_65-列表遍历","6.5 列表遍历",[35,163680,163682],{"className":37,"code":163681,"language":39,"meta":40,"style":40},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[42,163683,163684,163704,163708,163718],{"__ignoreMap":40},[45,163685,163686,163688,163690,163692,163694,163696,163698,163700,163702],{"class":47,"line":48},[45,163687,160431],{"class":51},[45,163689,254],{"class":93},[45,163691,52307],{"class":51},[45,163693,149939],{"class":313},[45,163695,12518],{"class":51},[45,163697,150987],{"class":313},[45,163699,12518],{"class":51},[45,163701,159782],{"class":313},[45,163703,33327],{"class":51},[45,163705,163706],{"class":47,"line":125},[45,163707,2483],{"emptyLinePlaceholder":133},[45,163709,163710,163712,163714,163716],{"class":47,"line":1262},[45,163711,3108],{"class":93},[45,163713,160467],{"class":51},[45,163715,26126],{"class":93},[45,163717,160472],{"class":51},[45,163719,163720,163722],{"class":47,"line":1277},[45,163721,31380],{"class":257},[45,163723,150711],{"class":51},[10,163725,163726],{},"需要索引时：",[35,163728,163730],{"className":37,"code":163729,"language":39,"meta":40,"style":40},"for index, name in enumerate(names):\n    print(index, name)\n",[42,163731,163732,163746],{"__ignoreMap":40},[45,163733,163734,163736,163739,163741,163743],{"class":47,"line":48},[45,163735,3108],{"class":93},[45,163737,163738],{"class":51}," index, name ",[45,163740,26126],{"class":93},[45,163742,31687],{"class":257},[45,163744,163745],{"class":51},"(names):\n",[45,163747,163748,163750],{"class":47,"line":125},[45,163749,31380],{"class":257},[45,163751,163752],{"class":51},"(index, name)\n",[10,163754,163755],{},"统计总分：",[35,163757,163759],{"className":37,"code":163758,"language":39,"meta":40,"style":40},"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",[42,163760,163761,163786,163794,163798,163809,163817,163821,163838],{"__ignoreMap":40},[45,163762,163763,163766,163768,163770,163772,163774,163776,163778,163780,163782,163784],{"class":47,"line":48},[45,163764,163765],{"class":51},"scores ",[45,163767,254],{"class":93},[45,163769,52307],{"class":51},[45,163771,1069],{"class":257},[45,163773,12518],{"class":51},[45,163775,943],{"class":257},[45,163777,12518],{"class":51},[45,163779,462],{"class":257},[45,163781,12518],{"class":51},[45,163783,768],{"class":257},[45,163785,33327],{"class":51},[45,163787,163788,163790,163792],{"class":47,"line":125},[45,163789,157311],{"class":51},[45,163791,254],{"class":93},[45,163793,47414],{"class":257},[45,163795,163796],{"class":47,"line":1262},[45,163797,2483],{"emptyLinePlaceholder":133},[45,163799,163800,163802,163804,163806],{"class":47,"line":1277},[45,163801,3108],{"class":93},[45,163803,157834],{"class":51},[45,163805,26126],{"class":93},[45,163807,163808],{"class":51}," scores:\n",[45,163810,163811,163813,163815],{"class":47,"line":1283},[45,163812,159358],{"class":51},[45,163814,9560],{"class":93},[45,163816,1662],{"class":51},[45,163818,163819],{"class":47,"line":1297},[45,163820,2483],{"emptyLinePlaceholder":133},[45,163822,163823,163826,163828,163831,163833,163835],{"class":47,"line":1303},[45,163824,163825],{"class":51},"avg ",[45,163827,254],{"class":93},[45,163829,163830],{"class":51}," total ",[45,163832,791],{"class":93},[45,163834,7414],{"class":257},[45,163836,163837],{"class":51},"(scores)\n",[45,163839,163840,163842,163844,163846,163849,163851,163854,163856,163858,163860],{"class":47,"line":1394},[45,163841,30496],{"class":257},[45,163843,209],{"class":51},[45,163845,261],{"class":93},[45,163847,163848],{"class":313},"\"平均分:",[45,163850,1103],{"class":257},[45,163852,163853],{"class":51},"avg",[45,163855,157210],{"class":93},[45,163857,1153],{"class":257},[45,163859,459],{"class":313},[45,163861,215],{"class":51},[30,163863,163865],{"id":163864},"_66-元组tuple","6.6 元组tuple",[10,163867,163868],{},"元组和列表类似，但不可修改。",[35,163870,163872],{"className":37,"code":163871,"language":39,"meta":40,"style":40},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[42,163873,163874,163891],{"__ignoreMap":40},[45,163875,163876,163879,163881,163883,163885,163887,163889],{"class":47,"line":48},[45,163877,163878],{"class":51},"point ",[45,163880,254],{"class":93},[45,163882,1741],{"class":51},[45,163884,654],{"class":257},[45,163886,12518],{"class":51},[45,163888,907],{"class":257},[45,163890,215],{"class":51},[45,163892,163893,163895,163897,163899,163901,163903,163905,163907,163909],{"class":47,"line":125},[45,163894,116365],{"class":51},[45,163896,254],{"class":93},[45,163898,1741],{"class":51},[45,163900,149939],{"class":313},[45,163902,12518],{"class":51},[45,163904,857],{"class":257},[45,163906,12518],{"class":51},[45,163908,69350],{"class":313},[45,163910,215],{"class":51},[10,163912,163913],{},"单元素元组必须加逗号：",[35,163915,163917],{"className":37,"code":163916,"language":39,"meta":40,"style":40},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[42,163918,163919,163933,163946,163950,163964],{"__ignoreMap":40},[45,163920,163921,163924,163926,163928,163930],{"class":47,"line":48},[45,163922,163923],{"class":51},"t1 ",[45,163925,254],{"class":93},[45,163927,1741],{"class":51},[45,163929,654],{"class":257},[45,163931,163932],{"class":51},",)\n",[45,163934,163935,163938,163940,163942,163944],{"class":47,"line":125},[45,163936,163937],{"class":51},"t2 ",[45,163939,254],{"class":93},[45,163941,1741],{"class":51},[45,163943,654],{"class":257},[45,163945,215],{"class":51},[45,163947,163948],{"class":47,"line":1262},[45,163949,2483],{"emptyLinePlaceholder":133},[45,163951,163952,163954,163956,163958,163961],{"class":47,"line":1277},[45,163953,30496],{"class":257},[45,163955,209],{"class":51},[45,163957,103158],{"class":257},[45,163959,163960],{"class":51},"(t1))  ",[45,163962,163963],{"class":267},"# tuple\n",[45,163965,163966,163968,163970,163972,163975],{"class":47,"line":1283},[45,163967,30496],{"class":257},[45,163969,209],{"class":51},[45,163971,103158],{"class":257},[45,163973,163974],{"class":51},"(t2))  ",[45,163976,163977],{"class":267},"# int\n",[10,163979,163980],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[30,163982,163984],{"id":163983},"_67-字符串str","6.7 字符串str",[10,163986,163987],{},"字符串也是序列，可以索引、切片和遍历。",[35,163989,163991],{"className":37,"code":163990,"language":39,"meta":40,"style":40},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[42,163992,163993,164001,164005,164016,164028,164032,164043],{"__ignoreMap":40},[45,163994,163995,163997,163999],{"class":47,"line":48},[45,163996,156495],{"class":51},[45,163998,254],{"class":93},[45,164000,159732],{"class":313},[45,164002,164003],{"class":47,"line":125},[45,164004,2483],{"emptyLinePlaceholder":133},[45,164006,164007,164009,164012,164014],{"class":47,"line":1262},[45,164008,30496],{"class":257},[45,164010,164011],{"class":51},"(text[",[45,164013,400],{"class":257},[45,164015,4740],{"class":51},[45,164017,164018,164020,164022,164024,164026],{"class":47,"line":1277},[45,164019,30496],{"class":257},[45,164021,164011],{"class":51},[45,164023,94],{"class":93},[45,164025,426],{"class":257},[45,164027,4740],{"class":51},[45,164029,164030],{"class":47,"line":1283},[45,164031,2483],{"emptyLinePlaceholder":133},[45,164033,164034,164036,164038,164040],{"class":47,"line":1297},[45,164035,3108],{"class":93},[45,164037,159743],{"class":51},[45,164039,26126],{"class":93},[45,164041,164042],{"class":51}," text:\n",[45,164044,164045,164047],{"class":47,"line":1303},[45,164046,31380],{"class":257},[45,164048,159754],{"class":51},[10,164050,164051],{},"字符串不可变：",[35,164053,164055],{"className":37,"code":164054,"language":39,"meta":40,"style":40},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[42,164056,164057,164065],{"__ignoreMap":40},[45,164058,164059,164061,164063],{"class":47,"line":48},[45,164060,156495],{"class":51},[45,164062,254],{"class":93},[45,164064,159732],{"class":313},[45,164066,164067,164070,164072,164074,164076,164079],{"class":47,"line":125},[45,164068,164069],{"class":51},"text[",[45,164071,400],{"class":257},[45,164073,4526],{"class":51},[45,164075,254],{"class":93},[45,164077,164078],{"class":313}," \"P\"",[45,164080,164081],{"class":267},"  # 报错\n",[10,164083,164084],{},"如果要得到新字符串：",[35,164086,164088],{"className":37,"code":164087,"language":39,"meta":40,"style":40},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[42,164089,164090,164098,164116],{"__ignoreMap":40},[45,164091,164092,164094,164096],{"class":47,"line":48},[45,164093,156495],{"class":51},[45,164095,254],{"class":93},[45,164097,159732],{"class":313},[45,164099,164100,164102,164104,164106,164108,164111,164113],{"class":47,"line":125},[45,164101,156495],{"class":51},[45,164103,254],{"class":93},[45,164105,164078],{"class":313},[45,164107,45647],{"class":93},[45,164109,164110],{"class":51}," text[",[45,164112,426],{"class":257},[45,164114,164115],{"class":51},":]\n",[45,164117,164118,164120],{"class":47,"line":1262},[45,164119,30496],{"class":257},[45,164121,164122],{"class":51},"(text)\n",[30,164124,164126],{"id":164125},"_68-切片","6.8 切片",[10,164128,164129],{},"切片用于从序列中取一部分。",[35,164131,164133],{"className":37,"code":164132,"language":39,"meta":40,"style":40},"序列[开始:结束:步长]\n",[42,164134,164135],{"__ignoreMap":40},[45,164136,164137],{"class":47,"line":48},[45,164138,164132],{"class":51},[10,164140,164141],{},"结束位置不包含。",[35,164143,164145],{"className":37,"code":164144,"language":39,"meta":40,"style":40},"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",[42,164146,164147,164184,164188,164207,164222,164236,164250],{"__ignoreMap":40},[45,164148,164149,164152,164154,164156,164158,164160,164162,164164,164166,164168,164170,164172,164174,164176,164178,164180,164182],{"class":47,"line":48},[45,164150,164151],{"class":51},"nums ",[45,164153,254],{"class":93},[45,164155,52307],{"class":51},[45,164157,400],{"class":257},[45,164159,12518],{"class":51},[45,164161,426],{"class":257},[45,164163,12518],{"class":51},[45,164165,286],{"class":257},[45,164167,12518],{"class":51},[45,164169,280],{"class":257},[45,164171,12518],{"class":51},[45,164173,501],{"class":257},[45,164175,12518],{"class":51},[45,164177,527],{"class":257},[45,164179,12518],{"class":51},[45,164181,552],{"class":257},[45,164183,33327],{"class":51},[45,164185,164186],{"class":47,"line":125},[45,164187,2483],{"emptyLinePlaceholder":133},[45,164189,164190,164192,164195,164197,164199,164201,164204],{"class":47,"line":1262},[45,164191,30496],{"class":257},[45,164193,164194],{"class":51},"(nums[",[45,164196,426],{"class":257},[45,164198,1066],{"class":51},[45,164200,501],{"class":257},[45,164202,164203],{"class":51},"])    ",[45,164205,164206],{"class":267},"# [1, 2, 3]\n",[45,164208,164209,164211,164214,164216,164219],{"class":47,"line":1277},[45,164210,30496],{"class":257},[45,164212,164213],{"class":51},"(nums[:",[45,164215,280],{"class":257},[45,164217,164218],{"class":51},"])     ",[45,164220,164221],{"class":267},"# [0, 1, 2]\n",[45,164223,164224,164226,164228,164230,164233],{"class":47,"line":1283},[45,164225,30496],{"class":257},[45,164227,164194],{"class":51},[45,164229,280],{"class":257},[45,164231,164232],{"class":51},":])     ",[45,164234,164235],{"class":267},"# [3, 4, 5, 6]\n",[45,164237,164238,164240,164243,164245,164247],{"class":47,"line":1297},[45,164239,30496],{"class":257},[45,164241,164242],{"class":51},"(nums[::",[45,164244,286],{"class":257},[45,164246,164203],{"class":51},[45,164248,164249],{"class":267},"# [0, 2, 4, 6]\n",[45,164251,164252,164254,164256,164258,164260,164263],{"class":47,"line":1303},[45,164253,30496],{"class":257},[45,164255,164242],{"class":51},[45,164257,94],{"class":93},[45,164259,426],{"class":257},[45,164261,164262],{"class":51},"])   ",[45,164264,164265],{"class":267},"# 反转\n",[10,164267,164268],{},"字符串切片：",[35,164270,164272],{"className":37,"code":164271,"language":39,"meta":40,"style":40},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[42,164273,164274,164283,164297],{"__ignoreMap":40},[45,164275,164276,164278,164280],{"class":47,"line":48},[45,164277,156495],{"class":51},[45,164279,254],{"class":93},[45,164281,164282],{"class":313}," \"abcdef\"\n",[45,164284,164285,164287,164289,164291,164293,164295],{"class":47,"line":125},[45,164286,30496],{"class":257},[45,164288,164011],{"class":51},[45,164290,426],{"class":257},[45,164292,1066],{"class":51},[45,164294,501],{"class":257},[45,164296,4740],{"class":51},[45,164298,164299,164301,164304,164306,164308],{"class":47,"line":1262},[45,164300,30496],{"class":257},[45,164302,164303],{"class":51},"(text[::",[45,164305,94],{"class":93},[45,164307,426],{"class":257},[45,164309,4740],{"class":51},[30,164311,164313],{"id":164312},"_69-集合set","6.9 集合set",[10,164315,164316],{},"集合特点：",[159,164318,164319,164322,164325],{},[162,164320,164321],{},"无序。",[162,164323,164324],{},"元素不重复。",[162,164326,164327],{},"可以做交集、并集、差集。",[35,164329,164331],{"className":37,"code":164330,"language":39,"meta":40,"style":40},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[42,164332,164333,164361],{"__ignoreMap":40},[45,164334,164335,164337,164339,164341,164343,164345,164347,164349,164351,164353,164355,164357,164359],{"class":47,"line":48},[45,164336,164151],{"class":51},[45,164338,254],{"class":93},[45,164340,4531],{"class":51},[45,164342,426],{"class":257},[45,164344,12518],{"class":51},[45,164346,286],{"class":257},[45,164348,12518],{"class":51},[45,164350,280],{"class":257},[45,164352,12518],{"class":51},[45,164354,280],{"class":257},[45,164356,12518],{"class":51},[45,164358,501],{"class":257},[45,164360,1648],{"class":51},[45,164362,164363,164365],{"class":47,"line":125},[45,164364,30496],{"class":257},[45,164366,164367],{"class":51},"(nums)\n",[10,164369,164370],{},"创建空集合：",[35,164372,164374],{"className":37,"code":164373,"language":39,"meta":40,"style":40},"s = set()\n",[42,164375,164376],{"__ignoreMap":40},[45,164377,164378,164380,164382,164384],{"class":47,"line":48},[45,164379,10662],{"class":51},[45,164381,254],{"class":93},[45,164383,119773],{"class":257},[45,164385,2059],{"class":51},[10,164387,9108,164388,164390],{},[42,164389,32540],{}," 是空字典，不是空集合。",[10,164392,164393],{},"集合常用操作：",[35,164395,164397],{"className":37,"code":164396,"language":39,"meta":40,"style":40},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[42,164398,164399,164419,164423,164432,164441,164450],{"__ignoreMap":40},[45,164400,164401,164403,164405,164407,164409,164411,164413,164415,164417],{"class":47,"line":48},[45,164402,10662],{"class":51},[45,164404,254],{"class":93},[45,164406,4531],{"class":51},[45,164408,426],{"class":257},[45,164410,12518],{"class":51},[45,164412,286],{"class":257},[45,164414,12518],{"class":51},[45,164416,280],{"class":257},[45,164418,1648],{"class":51},[45,164420,164421],{"class":47,"line":125},[45,164422,2483],{"emptyLinePlaceholder":133},[45,164424,164425,164428,164430],{"class":47,"line":1262},[45,164426,164427],{"class":51},"s.add(",[45,164429,501],{"class":257},[45,164431,215],{"class":51},[45,164433,164434,164437,164439],{"class":47,"line":1277},[45,164435,164436],{"class":51},"s.remove(",[45,164438,286],{"class":257},[45,164440,215],{"class":51},[45,164442,164443,164446,164448],{"class":47,"line":1283},[45,164444,164445],{"class":51},"s.discard(",[45,164447,654],{"class":257},[45,164449,215],{"class":51},[45,164451,164452,164454,164456,164458],{"class":47,"line":1297},[45,164453,30496],{"class":257},[45,164455,209],{"class":51},[45,164457,7441],{"class":257},[45,164459,164460],{"class":51},"(s))\n",[10,164462,164463],{},"交并差：",[35,164465,164467],{"className":37,"code":164466,"language":39,"meta":40,"style":40},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[42,164468,164469,164489,164509,164513,164528,164541],{"__ignoreMap":40},[45,164470,164471,164473,164475,164477,164479,164481,164483,164485,164487],{"class":47,"line":48},[45,164472,11002],{"class":51},[45,164474,254],{"class":93},[45,164476,4531],{"class":51},[45,164478,426],{"class":257},[45,164480,12518],{"class":51},[45,164482,286],{"class":257},[45,164484,12518],{"class":51},[45,164486,280],{"class":257},[45,164488,1648],{"class":51},[45,164490,164491,164493,164495,164497,164499,164501,164503,164505,164507],{"class":47,"line":125},[45,164492,11028],{"class":51},[45,164494,254],{"class":93},[45,164496,4531],{"class":51},[45,164498,280],{"class":257},[45,164500,12518],{"class":51},[45,164502,501],{"class":257},[45,164504,12518],{"class":51},[45,164506,527],{"class":257},[45,164508,1648],{"class":51},[45,164510,164511],{"class":47,"line":1262},[45,164512,2483],{"emptyLinePlaceholder":133},[45,164514,164515,164517,164520,164522,164525],{"class":47,"line":1277},[45,164516,30496],{"class":257},[45,164518,164519],{"class":51},"(a ",[45,164521,561],{"class":93},[45,164523,164524],{"class":51}," b)  ",[45,164526,164527],{"class":267},"# 交集\n",[45,164529,164530,164532,164534,164536,164538],{"class":47,"line":1283},[45,164531,30496],{"class":257},[45,164533,164519],{"class":51},[45,164535,1128],{"class":93},[45,164537,164524],{"class":51},[45,164539,164540],{"class":267},"# 并集\n",[45,164542,164543,164545,164547,164549,164551],{"class":47,"line":1297},[45,164544,30496],{"class":257},[45,164546,164519],{"class":51},[45,164548,94],{"class":93},[45,164550,164524],{"class":51},[45,164552,164553],{"class":267},"# 差集\n",[30,164555,164557],{"id":164556},"_610-字典dict","6.10 字典dict",[10,164559,164560],{},"字典通过 key-value 保存数据。",[35,164562,164564],{"className":37,"code":164563,"language":39,"meta":40,"style":40},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[42,164565,164566,164574,164584,164595,164605],{"__ignoreMap":40},[45,164567,164568,164570,164572],{"class":47,"line":48},[45,164569,149532],{"class":51},[45,164571,254],{"class":93},[45,164573,15655],{"class":51},[45,164575,164576,164578,164580,164582],{"class":47,"line":125},[45,164577,147071],{"class":313},[45,164579,51518],{"class":51},[45,164581,149939],{"class":313},[45,164583,31547],{"class":51},[45,164585,164586,164589,164591,164593],{"class":47,"line":1262},[45,164587,164588],{"class":313},"    \"age\"",[45,164590,51518],{"class":51},[45,164592,857],{"class":257},[45,164594,31547],{"class":51},[45,164596,164597,164600,164602],{"class":47,"line":1277},[45,164598,164599],{"class":313},"    \"score\"",[45,164601,51518],{"class":51},[45,164603,164604],{"class":257},"95\n",[45,164606,164607],{"class":47,"line":1283},[45,164608,1648],{"class":51},[10,164610,164611],{},"获取值：",[35,164613,164615],{"className":37,"code":164614,"language":39,"meta":40,"style":40},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[42,164616,164617,164628],{"__ignoreMap":40},[45,164618,164619,164621,164624,164626],{"class":47,"line":48},[45,164620,30496],{"class":257},[45,164622,164623],{"class":51},"(student[",[45,164625,62760],{"class":313},[45,164627,4740],{"class":51},[45,164629,164630,164632,164635,164637],{"class":47,"line":125},[45,164631,30496],{"class":257},[45,164633,164634],{"class":51},"(student.get(",[45,164636,62760],{"class":313},[45,164638,30578],{"class":51},[10,164640,15471],{},[35,164642,164644],{"className":37,"code":164643,"language":39,"meta":40,"style":40},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[42,164645,164646,164659],{"__ignoreMap":40},[45,164647,164648,164650,164653,164656],{"class":47,"line":48},[45,164649,152910],{"class":51},[45,164651,164652],{"class":313},"\"address\"",[45,164654,164655],{"class":51},"]     ",[45,164657,164658],{"class":267},"# key不存在会报错\n",[45,164660,164661,164664,164666,164668],{"class":47,"line":125},[45,164662,164663],{"class":51},"student.get(",[45,164665,164652],{"class":313},[45,164667,13797],{"class":51},[45,164669,164670],{"class":267},"# key不存在返回None\n",[10,164672,164673],{},"设置默认值：",[35,164675,164677],{"className":37,"code":164676,"language":39,"meta":40,"style":40},"print(student.get(\"address\", \"未知\"))\n",[42,164678,164679],{"__ignoreMap":40},[45,164680,164681,164683,164685,164687,164689,164692],{"class":47,"line":48},[45,164682,30496],{"class":257},[45,164684,164634],{"class":51},[45,164686,164652],{"class":313},[45,164688,12518],{"class":51},[45,164690,164691],{"class":313},"\"未知\"",[45,164693,30578],{"class":51},[10,164695,164696],{},"新增和修改：",[35,164698,164700],{"className":37,"code":164699,"language":39,"meta":40,"style":40},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[42,164701,164702,164715],{"__ignoreMap":40},[45,164703,164704,164706,164708,164710,164712],{"class":47,"line":48},[45,164705,152910],{"class":51},[45,164707,69205],{"class":313},[45,164709,4526],{"class":51},[45,164711,254],{"class":93},[45,164713,164714],{"class":257}," 19\n",[45,164716,164717,164719,164721,164723,164725],{"class":47,"line":125},[45,164718,152910],{"class":51},[45,164720,164652],{"class":313},[45,164722,4526],{"class":51},[45,164724,254],{"class":93},[45,164726,164727],{"class":313}," \"北京\"\n",[10,164729,164730],{},"删除：",[35,164732,164734],{"className":37,"code":164733,"language":39,"meta":40,"style":40},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[42,164735,164736,164749,164759],{"__ignoreMap":40},[45,164737,164738,164740,164742,164745,164747],{"class":47,"line":48},[45,164739,155409],{"class":51},[45,164741,254],{"class":93},[45,164743,164744],{"class":51}," student.pop(",[45,164746,151523],{"class":313},[45,164748,215],{"class":51},[45,164750,164751,164753,164755,164757],{"class":47,"line":125},[45,164752,163434],{"class":93},[45,164754,152200],{"class":51},[45,164756,69205],{"class":313},[45,164758,33327],{"class":51},[45,164760,164761],{"class":47,"line":1262},[45,164762,164763],{"class":51},"student.clear()\n",[30,164765,164767],{"id":164766},"_611-字典遍历","6.11 字典遍历",[10,164769,164770],{},"遍历 key：",[35,164772,164774],{"className":37,"code":164773,"language":39,"meta":40,"style":40},"for key in student:\n    print(key, student[key])\n",[42,164775,164776,164788],{"__ignoreMap":40},[45,164777,164778,164780,164783,164785],{"class":47,"line":48},[45,164779,3108],{"class":93},[45,164781,164782],{"class":51}," key ",[45,164784,26126],{"class":93},[45,164786,164787],{"class":51}," student:\n",[45,164789,164790,164792],{"class":47,"line":125},[45,164791,31380],{"class":257},[45,164793,164794],{"class":51},"(key, student[key])\n",[10,164796,164797],{},"遍历 value：",[35,164799,164801],{"className":37,"code":164800,"language":39,"meta":40,"style":40},"for value in student.values():\n    print(value)\n",[42,164802,164803,164815],{"__ignoreMap":40},[45,164804,164805,164807,164810,164812],{"class":47,"line":48},[45,164806,3108],{"class":93},[45,164808,164809],{"class":51}," value ",[45,164811,26126],{"class":93},[45,164813,164814],{"class":51}," student.values():\n",[45,164816,164817,164819],{"class":47,"line":125},[45,164818,31380],{"class":257},[45,164820,164821],{"class":51},"(value)\n",[10,164823,164824],{},"遍历 key 和 value：",[35,164826,164828],{"className":37,"code":164827,"language":39,"meta":40,"style":40},"for key, value in student.items():\n    print(key, value)\n",[42,164829,164830,164842],{"__ignoreMap":40},[45,164831,164832,164834,164837,164839],{"class":47,"line":48},[45,164833,3108],{"class":93},[45,164835,164836],{"class":51}," key, value ",[45,164838,26126],{"class":93},[45,164840,164841],{"class":51}," student.items():\n",[45,164843,164844,164846],{"class":47,"line":125},[45,164845,31380],{"class":257},[45,164847,164848],{"class":51},"(key, value)\n",[30,164850,164852],{"id":164851},"_612-嵌套容器","6.12 嵌套容器",[10,164854,164855],{},"列表中保存字典，是项目中最常见的结构之一。",[35,164857,164859],{"className":37,"code":164858,"language":39,"meta":40,"style":40},"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",[42,164860,164861,164869,164897,164925,164953,164957,164961,164971],{"__ignoreMap":40},[45,164862,164863,164865,164867],{"class":47,"line":48},[45,164864,159767],{"class":51},[45,164866,254],{"class":93},[45,164868,55528],{"class":51},[45,164870,164871,164873,164875,164877,164879,164881,164883,164885,164887,164889,164891,164893,164895],{"class":47,"line":125},[45,164872,148436],{"class":51},[45,164874,62760],{"class":313},[45,164876,51518],{"class":51},[45,164878,149939],{"class":313},[45,164880,12518],{"class":51},[45,164882,69205],{"class":313},[45,164884,51518],{"class":51},[45,164886,857],{"class":257},[45,164888,12518],{"class":51},[45,164890,151523],{"class":313},[45,164892,51518],{"class":51},[45,164894,1196],{"class":257},[45,164896,5013],{"class":51},[45,164898,164899,164901,164903,164905,164907,164909,164911,164913,164915,164917,164919,164921,164923],{"class":47,"line":1262},[45,164900,148436],{"class":51},[45,164902,62760],{"class":313},[45,164904,51518],{"class":51},[45,164906,150987],{"class":313},[45,164908,12518],{"class":51},[45,164910,69205],{"class":313},[45,164912,51518],{"class":51},[45,164914,832],{"class":257},[45,164916,12518],{"class":51},[45,164918,151523],{"class":313},[45,164920,51518],{"class":51},[45,164922,1018],{"class":257},[45,164924,5013],{"class":51},[45,164926,164927,164929,164931,164933,164935,164937,164939,164941,164943,164945,164947,164949,164951],{"class":47,"line":1277},[45,164928,148436],{"class":51},[45,164930,62760],{"class":313},[45,164932,51518],{"class":51},[45,164934,159782],{"class":313},[45,164936,12518],{"class":51},[45,164938,69205],{"class":313},[45,164940,51518],{"class":51},[45,164942,882],{"class":257},[45,164944,12518],{"class":51},[45,164946,151523],{"class":313},[45,164948,51518],{"class":51},[45,164950,614],{"class":257},[45,164952,5013],{"class":51},[45,164954,164955],{"class":47,"line":1283},[45,164956,33327],{"class":51},[45,164958,164959],{"class":47,"line":1297},[45,164960,2483],{"emptyLinePlaceholder":133},[45,164962,164963,164965,164967,164969],{"class":47,"line":1303},[45,164964,3108],{"class":93},[45,164966,152188],{"class":51},[45,164968,26126],{"class":93},[45,164970,152193],{"class":51},[45,164972,164973,164975,164977,164979,164982,164984],{"class":47,"line":1394},[45,164974,31380],{"class":257},[45,164976,164623],{"class":51},[45,164978,62760],{"class":313},[45,164980,164981],{"class":51},"], student[",[45,164983,151523],{"class":313},[45,164985,4740],{"class":51},[10,164987,164988],{},"统计平均分：",[35,164990,164992],{"className":37,"code":164991,"language":39,"meta":40,"style":40},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[42,164993,164994,165002,165006,165016,165028,165032,165047],{"__ignoreMap":40},[45,164995,164996,164998,165000],{"class":47,"line":48},[45,164997,157311],{"class":51},[45,164999,254],{"class":93},[45,165001,47414],{"class":257},[45,165003,165004],{"class":47,"line":125},[45,165005,2483],{"emptyLinePlaceholder":133},[45,165007,165008,165010,165012,165014],{"class":47,"line":1262},[45,165009,3108],{"class":93},[45,165011,152188],{"class":51},[45,165013,26126],{"class":93},[45,165015,152193],{"class":51},[45,165017,165018,165020,165022,165024,165026],{"class":47,"line":1277},[45,165019,159358],{"class":51},[45,165021,9560],{"class":93},[45,165023,152200],{"class":51},[45,165025,151523],{"class":313},[45,165027,33327],{"class":51},[45,165029,165030],{"class":47,"line":1283},[45,165031,2483],{"emptyLinePlaceholder":133},[45,165033,165034,165036,165038,165040,165042,165044],{"class":47,"line":1297},[45,165035,163825],{"class":51},[45,165037,254],{"class":93},[45,165039,163830],{"class":51},[45,165041,791],{"class":93},[45,165043,7414],{"class":257},[45,165045,165046],{"class":51},"(students)\n",[45,165048,165049,165051,165053,165055,165057,165059,165061,165063,165065,165067],{"class":47,"line":1303},[45,165050,30496],{"class":257},[45,165052,209],{"class":51},[45,165054,261],{"class":93},[45,165056,163848],{"class":313},[45,165058,1103],{"class":257},[45,165060,163853],{"class":51},[45,165062,157210],{"class":93},[45,165064,1153],{"class":257},[45,165066,459],{"class":313},[45,165068,215],{"class":51},[10,165070,165071],{},"查找学生：",[35,165073,165075],{"className":37,"code":165074,"language":39,"meta":40,"style":40},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[42,165076,165077,165092,165096,165106,165120,165126,165130,165136],{"__ignoreMap":40},[45,165078,165079,165081,165083,165085,165087,165090],{"class":47,"line":48},[45,165080,111629],{"class":51},[45,165082,254],{"class":93},[45,165084,60686],{"class":257},[45,165086,209],{"class":51},[45,165088,165089],{"class":313},"\"请输入学生姓名:\"",[45,165091,215],{"class":51},[45,165093,165094],{"class":47,"line":125},[45,165095,2483],{"emptyLinePlaceholder":133},[45,165097,165098,165100,165102,165104],{"class":47,"line":1262},[45,165099,3108],{"class":93},[45,165101,152188],{"class":51},[45,165103,26126],{"class":93},[45,165105,152193],{"class":51},[45,165107,165108,165110,165112,165114,165116,165118],{"class":47,"line":1277},[45,165109,3184],{"class":93},[45,165111,152200],{"class":51},[45,165113,62760],{"class":313},[45,165115,4526],{"class":51},[45,165117,3032],{"class":93},[45,165119,160483],{"class":51},[45,165121,165122,165124],{"class":47,"line":1283},[45,165123,32532],{"class":257},[45,165125,150093],{"class":51},[45,165127,165128],{"class":47,"line":1297},[45,165129,31708],{"class":93},[45,165131,165132,165134],{"class":47,"line":1303},[45,165133,1784],{"class":93},[45,165135,3822],{"class":51},[45,165137,165138,165140,165142,165145],{"class":47,"line":1394},[45,165139,31380],{"class":257},[45,165141,209],{"class":51},[45,165143,165144],{"class":313},"\"没有找到\"",[45,165146,215],{"class":51},[30,165148,165150],{"id":165149},"_613-容器通用操作","6.13 容器通用操作",[10,165152,165153],{},"长度：",[35,165155,165157],{"className":37,"code":165156,"language":39,"meta":40,"style":40},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[42,165158,165159,165178,165188],{"__ignoreMap":40},[45,165160,165161,165163,165166,165168,165170,165172,165174,165176],{"class":47,"line":48},[45,165162,7441],{"class":257},[45,165164,165165],{"class":51},"([",[45,165167,426],{"class":257},[45,165169,12518],{"class":51},[45,165171,286],{"class":257},[45,165173,12518],{"class":51},[45,165175,280],{"class":257},[45,165177,4740],{"class":51},[45,165179,165180,165182,165184,165186],{"class":47,"line":125},[45,165181,7441],{"class":257},[45,165183,209],{"class":51},[45,165185,155931],{"class":313},[45,165187,215],{"class":51},[45,165189,165190,165192,165195,165197,165199,165201],{"class":47,"line":1262},[45,165191,7441],{"class":257},[45,165193,165194],{"class":51},"({",[45,165196,62760],{"class":313},[45,165198,51518],{"class":51},[45,165200,149939],{"class":313},[45,165202,165203],{"class":51},"})\n",[10,165205,165206],{},"最大最小：",[35,165208,165210],{"className":37,"code":165209,"language":39,"meta":40,"style":40},"max([1, 2, 3])\nmin([1, 2, 3])\n",[42,165211,165212,165230],{"__ignoreMap":40},[45,165213,165214,165216,165218,165220,165222,165224,165226,165228],{"class":47,"line":48},[45,165215,6098],{"class":257},[45,165217,165165],{"class":51},[45,165219,426],{"class":257},[45,165221,12518],{"class":51},[45,165223,286],{"class":257},[45,165225,12518],{"class":51},[45,165227,280],{"class":257},[45,165229,4740],{"class":51},[45,165231,165232,165235,165237,165239,165241,165243,165245,165247],{"class":47,"line":125},[45,165233,165234],{"class":257},"min",[45,165236,165165],{"class":51},[45,165238,426],{"class":257},[45,165240,12518],{"class":51},[45,165242,286],{"class":257},[45,165244,12518],{"class":51},[45,165246,280],{"class":257},[45,165248,4740],{"class":51},[10,165250,165251],{},"求和：",[35,165253,165255],{"className":37,"code":165254,"language":39,"meta":40,"style":40},"sum([1, 2, 3])\n",[42,165256,165257],{"__ignoreMap":40},[45,165258,165259,165262,165264,165266,165268,165270,165272,165274],{"class":47,"line":48},[45,165260,165261],{"class":257},"sum",[45,165263,165165],{"class":51},[45,165265,426],{"class":257},[45,165267,12518],{"class":51},[45,165269,286],{"class":257},[45,165271,12518],{"class":51},[45,165273,280],{"class":257},[45,165275,4740],{"class":51},[10,165277,163522],{},[35,165279,165281],{"className":37,"code":165280,"language":39,"meta":40,"style":40},"sorted([3, 1, 2])\n",[42,165282,165283],{"__ignoreMap":40},[45,165284,165285,165288,165290,165292,165294,165296,165298,165300],{"class":47,"line":48},[45,165286,165287],{"class":257},"sorted",[45,165289,165165],{"class":51},[45,165291,280],{"class":257},[45,165293,12518],{"class":51},[45,165295,426],{"class":257},[45,165297,12518],{"class":51},[45,165299,286],{"class":257},[45,165301,4740],{"class":51},[10,165303,165304],{},"类型转换：",[35,165306,165308],{"className":37,"code":165307,"language":39,"meta":40,"style":40},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[42,165309,165310,165320,165338],{"__ignoreMap":40},[45,165311,165312,165314,165316,165318],{"class":47,"line":48},[45,165313,154121],{"class":257},[45,165315,209],{"class":51},[45,165317,155931],{"class":313},[45,165319,215],{"class":51},[45,165321,165322,165324,165326,165328,165330,165332,165334,165336],{"class":47,"line":125},[45,165323,155316],{"class":257},[45,165325,165165],{"class":51},[45,165327,426],{"class":257},[45,165329,12518],{"class":51},[45,165331,286],{"class":257},[45,165333,12518],{"class":51},[45,165335,280],{"class":257},[45,165337,4740],{"class":51},[45,165339,165340,165342,165344,165346,165348,165350,165352,165354,165356,165358],{"class":47,"line":1262},[45,165341,155341],{"class":257},[45,165343,165165],{"class":51},[45,165345,426],{"class":257},[45,165347,12518],{"class":51},[45,165349,426],{"class":257},[45,165351,12518],{"class":51},[45,165353,286],{"class":257},[45,165355,12518],{"class":51},[45,165357,280],{"class":257},[45,165359,4740],{"class":51},[10,165361,165362],{},"成员判断：",[35,165364,165366],{"className":37,"code":165365,"language":39,"meta":40,"style":40},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[42,165367,165368,165385,165409],{"__ignoreMap":40},[45,165369,165370,165372,165374,165377,165380,165383],{"class":47,"line":48},[45,165371,30496],{"class":257},[45,165373,209],{"class":51},[45,165375,165376],{"class":313},"\"a\"",[45,165378,165379],{"class":93}," in",[45,165381,165382],{"class":313}," \"abc\"",[45,165384,215],{"class":51},[45,165386,165387,165389,165391,165393,165395,165397,165399,165401,165403,165405,165407],{"class":47,"line":125},[45,165388,30496],{"class":257},[45,165390,209],{"class":51},[45,165392,426],{"class":257},[45,165394,165379],{"class":93},[45,165396,52307],{"class":51},[45,165398,426],{"class":257},[45,165400,12518],{"class":51},[45,165402,286],{"class":257},[45,165404,12518],{"class":51},[45,165406,280],{"class":257},[45,165408,4740],{"class":51},[45,165410,165411,165413,165415,165417,165419,165421,165423,165425,165427],{"class":47,"line":1262},[45,165412,30496],{"class":257},[45,165414,209],{"class":51},[45,165416,62760],{"class":313},[45,165418,165379],{"class":93},[45,165420,4531],{"class":51},[45,165422,62760],{"class":313},[45,165424,51518],{"class":51},[45,165426,149939],{"class":313},[45,165428,165203],{"class":51},[30,165430,165432],{"id":165431},"_614-推导式","6.14 推导式",[10,165434,165435],{},"推导式用于快速生成容器。",[10,165437,165438],{},"列表推导式：",[35,165440,165442],{"className":37,"code":165441,"language":39,"meta":40,"style":40},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[42,165443,165444,165471],{"__ignoreMap":40},[45,165445,165446,165448,165450,165453,165455,165457,165459,165461,165463,165465,165467,165469],{"class":47,"line":48},[45,165447,164151],{"class":51},[45,165449,254],{"class":93},[45,165451,165452],{"class":51}," [i ",[45,165454,3108],{"class":93},[45,165456,9521],{"class":51},[45,165458,26126],{"class":93},[45,165460,32524],{"class":257},[45,165462,209],{"class":51},[45,165464,426],{"class":257},[45,165466,12518],{"class":51},[45,165468,552],{"class":257},[45,165470,97351],{"class":51},[45,165472,165473,165475],{"class":47,"line":125},[45,165474,30496],{"class":257},[45,165476,164367],{"class":51},[10,165478,165479],{},"带条件：",[35,165481,165483],{"className":37,"code":165482,"language":39,"meta":40,"style":40},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[42,165484,165485,165526],{"__ignoreMap":40},[45,165486,165487,165490,165492,165494,165496,165498,165500,165502,165504,165506,165508,165510,165512,165514,165516,165518,165520,165522,165524],{"class":47,"line":48},[45,165488,165489],{"class":51},"even_nums ",[45,165491,254],{"class":93},[45,165493,165452],{"class":51},[45,165495,3108],{"class":93},[45,165497,9521],{"class":51},[45,165499,26126],{"class":93},[45,165501,32524],{"class":257},[45,165503,209],{"class":51},[45,165505,426],{"class":257},[45,165507,12518],{"class":51},[45,165509,545],{"class":257},[45,165511,13797],{"class":51},[45,165513,1614],{"class":93},[45,165515,9521],{"class":51},[45,165517,536],{"class":93},[45,165519,14838],{"class":257},[45,165521,101610],{"class":93},[45,165523,4176],{"class":257},[45,165525,33327],{"class":51},[45,165527,165528,165530],{"class":47,"line":125},[45,165529,30496],{"class":257},[45,165531,165532],{"class":51},"(even_nums)\n",[10,165534,165535],{},"字典推导式：",[35,165537,165539],{"className":37,"code":165538,"language":39,"meta":40,"style":40},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[42,165540,165541,165575],{"__ignoreMap":40},[45,165542,165543,165546,165548,165551,165553,165555,165558,165560,165562,165564,165566,165568,165570,165572],{"class":47,"line":48},[45,165544,165545],{"class":51},"squares ",[45,165547,254],{"class":93},[45,165549,165550],{"class":51}," {i: i ",[45,165552,10744],{"class":93},[45,165554,14838],{"class":257},[45,165556,165557],{"class":93}," for",[45,165559,9521],{"class":51},[45,165561,26126],{"class":93},[45,165563,32524],{"class":257},[45,165565,209],{"class":51},[45,165567,426],{"class":257},[45,165569,12518],{"class":51},[45,165571,552],{"class":257},[45,165573,165574],{"class":51},")}\n",[45,165576,165577,165579],{"class":47,"line":125},[45,165578,30496],{"class":257},[45,165580,165581],{"class":51},"(squares)\n",[10,165583,165584],{},"集合推导式：",[35,165586,165588],{"className":37,"code":165587,"language":39,"meta":40,"style":40},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[42,165589,165590,165611],{"__ignoreMap":40},[45,165591,165592,165595,165597,165600,165602,165604,165606,165609],{"class":47,"line":48},[45,165593,165594],{"class":51},"chars ",[45,165596,254],{"class":93},[45,165598,165599],{"class":51}," {ch ",[45,165601,3108],{"class":93},[45,165603,159743],{"class":51},[45,165605,26126],{"class":93},[45,165607,165608],{"class":313}," \"hello\"",[45,165610,1648],{"class":51},[45,165612,165613,165615],{"class":47,"line":125},[45,165614,30496],{"class":257},[45,165616,165617],{"class":51},"(chars)\n",[10,165619,165620],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[30,165622,165624],{"id":165623},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[35,165626,165628],{"className":37,"code":165627,"language":39,"meta":40,"style":40},"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",[42,165629,165630,165638,165658,165678,165698,165718,165722,165726,165734,165748,165757,165761,165771,165783,165787,165807,165816,165820,165836,165841,165845,165859,165863,165885,165921],{"__ignoreMap":40},[45,165631,165632,165634,165636],{"class":47,"line":48},[45,165633,159767],{"class":51},[45,165635,254],{"class":93},[45,165637,55528],{"class":51},[45,165639,165640,165642,165644,165646,165648,165650,165652,165654,165656],{"class":47,"line":125},[45,165641,148436],{"class":51},[45,165643,62760],{"class":313},[45,165645,51518],{"class":51},[45,165647,149939],{"class":313},[45,165649,12518],{"class":51},[45,165651,151523],{"class":313},[45,165653,51518],{"class":51},[45,165655,1196],{"class":257},[45,165657,5013],{"class":51},[45,165659,165660,165662,165664,165666,165668,165670,165672,165674,165676],{"class":47,"line":1262},[45,165661,148436],{"class":51},[45,165663,62760],{"class":313},[45,165665,51518],{"class":51},[45,165667,150987],{"class":313},[45,165669,12518],{"class":51},[45,165671,151523],{"class":313},[45,165673,51518],{"class":51},[45,165675,1018],{"class":257},[45,165677,5013],{"class":51},[45,165679,165680,165682,165684,165686,165688,165690,165692,165694,165696],{"class":47,"line":1277},[45,165681,148436],{"class":51},[45,165683,62760],{"class":313},[45,165685,51518],{"class":51},[45,165687,159782],{"class":313},[45,165689,12518],{"class":51},[45,165691,151523],{"class":313},[45,165693,51518],{"class":51},[45,165695,614],{"class":257},[45,165697,5013],{"class":51},[45,165699,165700,165702,165704,165706,165708,165710,165712,165714,165716],{"class":47,"line":1283},[45,165701,148436],{"class":51},[45,165703,62760],{"class":313},[45,165705,51518],{"class":51},[45,165707,163361],{"class":313},[45,165709,12518],{"class":51},[45,165711,151523],{"class":313},[45,165713,51518],{"class":51},[45,165715,1089],{"class":257},[45,165717,5013],{"class":51},[45,165719,165720],{"class":47,"line":1297},[45,165721,33327],{"class":51},[45,165723,165724],{"class":47,"line":1303},[45,165725,2483],{"emptyLinePlaceholder":133},[45,165727,165728,165730,165732],{"class":47,"line":1394},[45,165729,157311],{"class":51},[45,165731,254],{"class":93},[45,165733,47414],{"class":257},[45,165735,165736,165739,165741,165744,165746],{"class":47,"line":1400},[45,165737,165738],{"class":51},"max_student ",[45,165740,254],{"class":93},[45,165742,165743],{"class":51}," students[",[45,165745,400],{"class":257},[45,165747,33327],{"class":51},[45,165749,165750,165753,165755],{"class":47,"line":1412},[45,165751,165752],{"class":51},"passed ",[45,165754,254],{"class":93},[45,165756,51919],{"class":51},[45,165758,165759],{"class":47,"line":1695},[45,165760,2483],{"emptyLinePlaceholder":133},[45,165762,165763,165765,165767,165769],{"class":47,"line":1700},[45,165764,3108],{"class":93},[45,165766,152188],{"class":51},[45,165768,26126],{"class":93},[45,165770,152193],{"class":51},[45,165772,165773,165775,165777,165779,165781],{"class":47,"line":1706},[45,165774,159358],{"class":51},[45,165776,9560],{"class":93},[45,165778,152200],{"class":51},[45,165780,151523],{"class":313},[45,165782,33327],{"class":51},[45,165784,165785],{"class":47,"line":1711},[45,165786,2483],{"emptyLinePlaceholder":133},[45,165788,165789,165791,165793,165795,165797,165799,165802,165804],{"class":47,"line":1725},[45,165790,3184],{"class":93},[45,165792,152200],{"class":51},[45,165794,151523],{"class":313},[45,165796,4526],{"class":51},[45,165798,1167],{"class":93},[45,165800,165801],{"class":51}," max_student[",[45,165803,151523],{"class":313},[45,165805,165806],{"class":51},"]:\n",[45,165808,165809,165812,165814],{"class":47,"line":1730},[45,165810,165811],{"class":51},"        max_student ",[45,165813,254],{"class":93},[45,165815,152216],{"class":51},[45,165817,165818],{"class":47,"line":1736},[45,165819,2483],{"emptyLinePlaceholder":133},[45,165821,165822,165824,165826,165828,165830,165832,165834],{"class":47,"line":1757},[45,165823,3184],{"class":93},[45,165825,152200],{"class":51},[45,165827,151523],{"class":313},[45,165829,4526],{"class":51},[45,165831,1793],{"class":93},[45,165833,157888],{"class":257},[45,165835,3822],{"class":51},[45,165837,165838],{"class":47,"line":1762},[45,165839,165840],{"class":51},"        passed.append(student)\n",[45,165842,165843],{"class":47,"line":1776},[45,165844,2483],{"emptyLinePlaceholder":133},[45,165846,165847,165849,165851,165853,165855,165857],{"class":47,"line":1781},[45,165848,163825],{"class":51},[45,165850,254],{"class":93},[45,165852,163830],{"class":51},[45,165854,791],{"class":93},[45,165856,7414],{"class":257},[45,165858,165046],{"class":51},[45,165860,165861],{"class":47,"line":1810},[45,165862,2483],{"emptyLinePlaceholder":133},[45,165864,165865,165867,165869,165871,165873,165875,165877,165879,165881,165883],{"class":47,"line":1815},[45,165866,30496],{"class":257},[45,165868,209],{"class":51},[45,165870,261],{"class":93},[45,165872,163848],{"class":313},[45,165874,1103],{"class":257},[45,165876,163853],{"class":51},[45,165878,157210],{"class":93},[45,165880,1153],{"class":257},[45,165882,459],{"class":313},[45,165884,215],{"class":51},[45,165886,165887,165889,165891,165893,165896,165898,165901,165903,165905,165907,165909,165911,165913,165915,165917,165919],{"class":47,"line":1832},[45,165888,30496],{"class":257},[45,165890,209],{"class":51},[45,165892,261],{"class":93},[45,165894,165895],{"class":313},"\"最高分学生:",[45,165897,1103],{"class":257},[45,165899,165900],{"class":51},"max_student[",[45,165902,152933],{"class":313},[45,165904,1147],{"class":51},[45,165906,1153],{"class":257},[45,165908,4531],{"class":257},[45,165910,165900],{"class":51},[45,165912,152971],{"class":313},[45,165914,1147],{"class":51},[45,165916,1153],{"class":257},[45,165918,459],{"class":313},[45,165920,215],{"class":51},[45,165922,165923,165925,165927,165929,165932,165935,165938,165940,165942],{"class":47,"line":1837},[45,165924,30496],{"class":257},[45,165926,209],{"class":51},[45,165928,261],{"class":93},[45,165930,165931],{"class":313},"\"及格人数:",[45,165933,165934],{"class":257},"{len",[45,165936,165937],{"class":51},"(passed)",[45,165939,1153],{"class":257},[45,165941,459],{"class":313},[45,165943,215],{"class":51},[30,165945,165947],{"id":165946},"_616-易错点","6.16 易错点",[159,165949,165950,165953,165956,165959,165965,165974],{},[162,165951,165952],{},"列表可变，元组和字符串不可变。",[162,165954,165955],{},"切片结束位置不包含。",[162,165957,165958],{},"字典通过 key 取值，不是通过索引。",[162,165960,165961,165962,28468],{},"空集合要用 ",[42,165963,165964],{},"set()",[162,165966,104417,165967,165970,165971,28468],{},[42,165968,165969],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[42,165972,165973],{},"get()",[162,165975,165976],{},"嵌套容器要先看清楚每一层是什么类型。",[30,165978,165980],{"id":165979},"_617-本章练习","6.17 本章练习",[159,165982,165983,165986,165989,165992,165995],{},[162,165984,165985],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[162,165987,165988],{},"输入一句话，统计每个字符出现次数。",[162,165990,165991],{},"使用集合去除列表中的重复元素。",[162,165993,165994],{},"使用字典保存一个学生的信息，并实现修改成绩。",[162,165996,165997],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[121,165999,166000],{},"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":40,"searchDepth":125,"depth":125,"links":166002},[166003,166004,166005,166006,166007,166008,166009,166010,166011,166012,166013,166014,166015,166016,166017,166018,166019],{"id":162983,"depth":125,"text":162984},{"id":163100,"depth":125,"text":163101},{"id":163190,"depth":125,"text":163191},{"id":163314,"depth":125,"text":163315},{"id":163677,"depth":125,"text":163678},{"id":163864,"depth":125,"text":163865},{"id":163983,"depth":125,"text":163984},{"id":164125,"depth":125,"text":164126},{"id":164312,"depth":125,"text":164313},{"id":164556,"depth":125,"text":164557},{"id":164766,"depth":125,"text":164767},{"id":164851,"depth":125,"text":164852},{"id":165149,"depth":125,"text":165150},{"id":165431,"depth":125,"text":165432},{"id":165623,"depth":125,"text":165624},{"id":165946,"depth":125,"text":165947},{"id":165979,"depth":125,"text":165980},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162975,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166026,"title":166027,"body":166028,"description":130,"extension":131,"meta":168200,"navigation":133,"path":168201,"seo":168202,"stem":168203,"__hash__":168204},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166029,"toc":168175},[166030,166033,166037,166040,166120,166123,166144,166147,166151,166154,166216,166219,166236,166240,166243,166288,166290,166298,166302,166305,166387,166390,166393,166418,166421,166444,166448,166451,166453,166515,166518,166520,166571,166575,166579,166585,166690,166694,166700,166771,166775,166778,166846,166849,166929,166933,166939,166975,166978,166981,167091,167097,167101,167104,167176,167179,167183,167187,167192,167254,167258,167263,167331,167335,167340,167456,167460,167463,167543,167546,167550,167553,167657,167659,167674,167677,167681,167819,167827,167831,167833,167844,167846,168104,168108,168140,168144,168172],[20,166031,166027],{"id":166032},"_7-函数进阶",[30,166034,166036],{"id":166035},"_71-多返回值","7.1 多返回值",[10,166038,166039],{},"Python 函数可以返回多个值，本质上返回的是元组。",[35,166041,166043],{"className":37,"code":166042,"language":39,"meta":40,"style":40},"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",[42,166044,166045,166054,166062,166070,166079,166086,166090,166094,166103,166109],{"__ignoreMap":40},[45,166046,166047,166049,166052],{"class":47,"line":48},[45,166048,32028],{"class":93},[45,166050,166051],{"class":2046}," get_info",[45,166053,32034],{"class":51},[45,166055,166056,166058,166060],{"class":47,"line":125},[45,166057,152421],{"class":51},[45,166059,254],{"class":93},[45,166061,149404],{"class":313},[45,166063,166064,166066,166068],{"class":47,"line":1262},[45,166065,152437],{"class":51},[45,166067,254],{"class":93},[45,166069,146602],{"class":257},[45,166071,166072,166074,166076],{"class":47,"line":1277},[45,166073,152452],{"class":51},[45,166075,254],{"class":93},[45,166077,166078],{"class":257}," 95\n",[45,166080,166081,166083],{"class":47,"line":1283},[45,166082,4173],{"class":93},[45,166084,166085],{"class":51}," name, age, score\n",[45,166087,166088],{"class":47,"line":1297},[45,166089,2483],{"emptyLinePlaceholder":133},[45,166091,166092],{"class":47,"line":1303},[45,166093,2483],{"emptyLinePlaceholder":133},[45,166095,166096,166098,166100],{"class":47,"line":1394},[45,166097,161357],{"class":51},[45,166099,254],{"class":93},[45,166101,166102],{"class":51}," get_info()\n",[45,166104,166105,166107],{"class":47,"line":1400},[45,166106,30496],{"class":257},[45,166108,76666],{"class":51},[45,166110,166111,166113,166115,166117],{"class":47,"line":1412},[45,166112,30496],{"class":257},[45,166114,209],{"class":51},[45,166116,103158],{"class":257},[45,166118,166119],{"class":51},"(result))\n",[10,166121,166122],{},"可以直接解包：",[35,166124,166126],{"className":37,"code":166125,"language":39,"meta":40,"style":40},"name, age, score = get_info()\nprint(name, age, score)\n",[42,166127,166128,166137],{"__ignoreMap":40},[45,166129,166130,166133,166135],{"class":47,"line":48},[45,166131,166132],{"class":51},"name, age, score ",[45,166134,254],{"class":93},[45,166136,166102],{"class":51},[45,166138,166139,166141],{"class":47,"line":125},[45,166140,30496],{"class":257},[45,166142,166143],{"class":51},"(name, age, score)\n",[10,166145,166146],{},"返回多个值适合函数需要同时给出多个结果时使用。",[30,166148,166150],{"id":166149},"_72-位置参数","7.2 位置参数",[10,166152,166153],{},"位置参数按顺序传递。",[35,166155,166157],{"className":37,"code":166156,"language":39,"meta":40,"style":40},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[42,166158,166159,166167,166195,166199,166203],{"__ignoreMap":40},[45,166160,166161,166163,166165],{"class":47,"line":48},[45,166162,32028],{"class":93},[45,166164,149423],{"class":2046},[45,166166,149426],{"class":51},[45,166168,166169,166171,166173,166175,166177,166179,166181,166183,166185,166187,166189,166191,166193],{"class":47,"line":125},[45,166170,31380],{"class":257},[45,166172,209],{"class":51},[45,166174,261],{"class":93},[45,166176,149437],{"class":313},[45,166178,1103],{"class":257},[45,166180,79891],{"class":51},[45,166182,1153],{"class":257},[45,166184,149446],{"class":313},[45,166186,1103],{"class":257},[45,166188,70302],{"class":51},[45,166190,1153],{"class":257},[45,166192,149455],{"class":313},[45,166194,215],{"class":51},[45,166196,166197],{"class":47,"line":1262},[45,166198,2483],{"emptyLinePlaceholder":133},[45,166200,166201],{"class":47,"line":1277},[45,166202,2483],{"emptyLinePlaceholder":133},[45,166204,166205,166208,166210,166212,166214],{"class":47,"line":1283},[45,166206,166207],{"class":51},"introduce(",[45,166209,149939],{"class":313},[45,166211,12518],{"class":51},[45,166213,857],{"class":257},[45,166215,215],{"class":51},[10,166217,166218],{},"顺序错了就会得到错误含义：",[35,166220,166222],{"className":37,"code":166221,"language":39,"meta":40,"style":40},"introduce(18, \"小明\")\n",[42,166223,166224],{"__ignoreMap":40},[45,166225,166226,166228,166230,166232,166234],{"class":47,"line":48},[45,166227,166207],{"class":51},[45,166229,857],{"class":257},[45,166231,12518],{"class":51},[45,166233,149939],{"class":313},[45,166235,215],{"class":51},[30,166237,166239],{"id":166238},"_73-关键字参数","7.3 关键字参数",[10,166241,166242],{},"关键字参数按参数名传递。",[35,166244,166246],{"className":37,"code":166245,"language":39,"meta":40,"style":40},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[42,166247,166248,166268],{"__ignoreMap":40},[45,166249,166250,166252,166254,166256,166258,166260,166262,166264,166266],{"class":47,"line":48},[45,166251,166207],{"class":51},[45,166253,79891],{"class":5299},[45,166255,254],{"class":93},[45,166257,149939],{"class":313},[45,166259,12518],{"class":51},[45,166261,70302],{"class":5299},[45,166263,254],{"class":93},[45,166265,857],{"class":257},[45,166267,215],{"class":51},[45,166269,166270,166272,166274,166276,166278,166280,166282,166284,166286],{"class":47,"line":125},[45,166271,166207],{"class":51},[45,166273,70302],{"class":5299},[45,166275,254],{"class":93},[45,166277,857],{"class":257},[45,166279,12518],{"class":51},[45,166281,79891],{"class":5299},[45,166283,254],{"class":93},[45,166285,149939],{"class":313},[45,166287,215],{"class":51},[10,166289,117985],{},[159,166291,166292,166295],{},[162,166293,166294],{},"顺序不容易错。",[162,166296,166297],{},"调用时可读性更强。",[30,166299,166301],{"id":166300},"_74-默认参数","7.4 默认参数",[10,166303,166304],{},"默认参数给参数设置默认值。",[35,166306,166308],{"className":37,"code":166307,"language":39,"meta":40,"style":40},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[42,166309,166310,166326,166356,166360,166364,166374],{"__ignoreMap":40},[45,166311,166312,166314,166316,166319,166321,166324],{"class":47,"line":48},[45,166313,32028],{"class":93},[45,166315,122144],{"class":2046},[45,166317,166318],{"class":51},"(host, port",[45,166320,254],{"class":93},[45,166322,166323],{"class":257},"3306",[45,166325,30867],{"class":51},[45,166327,166328,166330,166332,166334,166337,166339,166341,166343,166345,166347,166350,166352,166354],{"class":47,"line":125},[45,166329,31380],{"class":257},[45,166331,209],{"class":51},[45,166333,261],{"class":93},[45,166335,166336],{"class":313},"\"连接",[45,166338,1103],{"class":257},[45,166340,27478],{"class":51},[45,166342,1153],{"class":257},[45,166344,1066],{"class":313},[45,166346,1103],{"class":257},[45,166348,166349],{"class":51},"port",[45,166351,1153],{"class":257},[45,166353,459],{"class":313},[45,166355,215],{"class":51},[45,166357,166358],{"class":47,"line":1262},[45,166359,2483],{"emptyLinePlaceholder":133},[45,166361,166362],{"class":47,"line":1277},[45,166363,2483],{"emptyLinePlaceholder":133},[45,166365,166366,166369,166372],{"class":47,"line":1283},[45,166367,166368],{"class":51},"connect(",[45,166370,166371],{"class":313},"\"localhost\"",[45,166373,215],{"class":51},[45,166375,166376,166378,166380,166382,166385],{"class":47,"line":1297},[45,166377,166368],{"class":51},[45,166379,166371],{"class":313},[45,166381,12518],{"class":51},[45,166383,166384],{"class":257},"6379",[45,166386,215],{"class":51},[10,166388,166389],{},"注意：默认参数必须放在非默认参数后面。",[10,166391,166392],{},"错误：",[35,166394,166396],{"className":37,"code":166395,"language":39,"meta":40,"style":40},"def connect(port=3306, host):\n    pass\n",[42,166397,166398,166414],{"__ignoreMap":40},[45,166399,166400,166402,166404,166407,166409,166411],{"class":47,"line":48},[45,166401,32028],{"class":93},[45,166403,122144],{"class":2046},[45,166405,166406],{"class":51},"(port",[45,166408,254],{"class":93},[45,166410,166323],{"class":257},[45,166412,166413],{"class":51},", host):\n",[45,166415,166416],{"class":47,"line":125},[45,166417,149588],{"class":93},[10,166419,166420],{},"正确：",[35,166422,166424],{"className":37,"code":166423,"language":39,"meta":40,"style":40},"def connect(host, port=3306):\n    pass\n",[42,166425,166426,166440],{"__ignoreMap":40},[45,166427,166428,166430,166432,166434,166436,166438],{"class":47,"line":48},[45,166429,32028],{"class":93},[45,166431,122144],{"class":2046},[45,166433,166318],{"class":51},[45,166435,254],{"class":93},[45,166437,166323],{"class":257},[45,166439,30867],{"class":51},[45,166441,166442],{"class":47,"line":125},[45,166443,149588],{"class":93},[30,166445,166447],{"id":166446},"_75-默认参数的坑","7.5 默认参数的坑",[10,166449,166450],{},"不要使用可变对象作为默认参数。",[10,166452,157674],{},[35,166454,166456],{"className":37,"code":166455,"language":39,"meta":40,"style":40},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[42,166457,166458,166473,166478,166485,166489,166493,166504],{"__ignoreMap":40},[45,166459,166460,166462,166465,166468,166470],{"class":47,"line":48},[45,166461,32028],{"class":93},[45,166463,166464],{"class":2046}," add_item",[45,166466,166467],{"class":51},"(item, items",[45,166469,254],{"class":93},[45,166471,166472],{"class":51},"[]):\n",[45,166474,166475],{"class":47,"line":125},[45,166476,166477],{"class":51},"    items.append(item)\n",[45,166479,166480,166482],{"class":47,"line":1262},[45,166481,4173],{"class":93},[45,166483,166484],{"class":51}," items\n",[45,166486,166487],{"class":47,"line":1277},[45,166488,2483],{"emptyLinePlaceholder":133},[45,166490,166491],{"class":47,"line":1283},[45,166492,2483],{"emptyLinePlaceholder":133},[45,166494,166495,166497,166500,166502],{"class":47,"line":1297},[45,166496,30496],{"class":257},[45,166498,166499],{"class":51},"(add_item(",[45,166501,165376],{"class":313},[45,166503,30578],{"class":51},[45,166505,166506,166508,166510,166513],{"class":47,"line":1303},[45,166507,30496],{"class":257},[45,166509,166499],{"class":51},[45,166511,166512],{"class":313},"\"b\"",[45,166514,30578],{"class":51},[10,166516,166517],{},"第二次调用会复用第一次的列表。",[10,166519,155939],{},[35,166521,166523],{"className":37,"code":166522,"language":39,"meta":40,"style":40},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[42,166524,166525,166539,166552,166561,166565],{"__ignoreMap":40},[45,166526,166527,166529,166531,166533,166535,166537],{"class":47,"line":48},[45,166528,32028],{"class":93},[45,166530,166464],{"class":2046},[45,166532,166467],{"class":51},[45,166534,254],{"class":93},[45,166536,95737],{"class":257},[45,166538,30867],{"class":51},[45,166540,166541,166543,166546,166548,166550],{"class":47,"line":125},[45,166542,3184],{"class":93},[45,166544,166545],{"class":51}," items ",[45,166547,39008],{"class":93},[45,166549,39014],{"class":257},[45,166551,3822],{"class":51},[45,166553,166554,166557,166559],{"class":47,"line":1262},[45,166555,166556],{"class":51},"        items ",[45,166558,254],{"class":93},[45,166560,51919],{"class":51},[45,166562,166563],{"class":47,"line":1277},[45,166564,166477],{"class":51},[45,166566,166567,166569],{"class":47,"line":1283},[45,166568,4173],{"class":93},[45,166570,166484],{"class":51},[30,166572,166574],{"id":166573},"_76-不定长参数","7.6 不定长参数",[176,166576,166578],{"id":166577},"_761-args","7.6.1 *args",[10,166580,166581,166584],{},[42,166582,166583],{},"*args"," 接收任意数量的位置参数，得到元组。",[35,166586,166588],{"className":37,"code":166587,"language":39,"meta":40,"style":40},"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",[42,166589,166590,166603,166611,166622,166631,166637,166641,166645,166664],{"__ignoreMap":40},[45,166591,166592,166594,166596,166598,166600],{"class":47,"line":48},[45,166593,32028],{"class":93},[45,166595,5292],{"class":2046},[45,166597,209],{"class":51},[45,166599,663],{"class":93},[45,166601,166602],{"class":51},"args):\n",[45,166604,166605,166607,166609],{"class":47,"line":125},[45,166606,159358],{"class":51},[45,166608,254],{"class":93},[45,166610,47414],{"class":257},[45,166612,166613,166615,166617,166619],{"class":47,"line":1262},[45,166614,3284],{"class":93},[45,166616,156231],{"class":51},[45,166618,26126],{"class":93},[45,166620,166621],{"class":51}," args:\n",[45,166623,166624,166626,166628],{"class":47,"line":1277},[45,166625,160033],{"class":51},[45,166627,9560],{"class":93},[45,166629,166630],{"class":51}," num\n",[45,166632,166633,166635],{"class":47,"line":1283},[45,166634,4173],{"class":93},[45,166636,162338],{"class":51},[45,166638,166639],{"class":47,"line":1297},[45,166640,2483],{"emptyLinePlaceholder":133},[45,166642,166643],{"class":47,"line":1303},[45,166644,2483],{"emptyLinePlaceholder":133},[45,166646,166647,166649,166652,166654,166656,166658,166660,166662],{"class":47,"line":1394},[45,166648,30496],{"class":257},[45,166650,166651],{"class":51},"(add(",[45,166653,426],{"class":257},[45,166655,12518],{"class":51},[45,166657,286],{"class":257},[45,166659,12518],{"class":51},[45,166661,280],{"class":257},[45,166663,30578],{"class":51},[45,166665,166666,166668,166670,166672,166674,166676,166678,166680,166682,166684,166686,166688],{"class":47,"line":1400},[45,166667,30496],{"class":257},[45,166669,166651],{"class":51},[45,166671,426],{"class":257},[45,166673,12518],{"class":51},[45,166675,286],{"class":257},[45,166677,12518],{"class":51},[45,166679,280],{"class":257},[45,166681,12518],{"class":51},[45,166683,501],{"class":257},[45,166685,12518],{"class":51},[45,166687,527],{"class":257},[45,166689,30578],{"class":51},[176,166691,166693],{"id":166692},"_762-kwargs","7.6.2 **kwargs",[10,166695,166696,166699],{},[42,166697,166698],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[35,166701,166703],{"className":37,"code":166702,"language":39,"meta":40,"style":40},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[42,166704,166705,166718,166729,166735,166739,166743],{"__ignoreMap":40},[45,166706,166707,166709,166711,166713,166715],{"class":47,"line":48},[45,166708,32028],{"class":93},[45,166710,161996],{"class":2046},[45,166712,209],{"class":51},[45,166714,10744],{"class":93},[45,166716,166717],{"class":51},"kwargs):\n",[45,166719,166720,166722,166724,166726],{"class":47,"line":125},[45,166721,3284],{"class":93},[45,166723,164836],{"class":51},[45,166725,26126],{"class":93},[45,166727,166728],{"class":51}," kwargs.items():\n",[45,166730,166731,166733],{"class":47,"line":1262},[45,166732,32532],{"class":257},[45,166734,164848],{"class":51},[45,166736,166737],{"class":47,"line":1277},[45,166738,2483],{"emptyLinePlaceholder":133},[45,166740,166741],{"class":47,"line":1283},[45,166742,2483],{"emptyLinePlaceholder":133},[45,166744,166745,166747,166749,166751,166753,166755,166757,166759,166761,166763,166765,166767,166769],{"class":47,"line":1297},[45,166746,162061],{"class":51},[45,166748,79891],{"class":5299},[45,166750,254],{"class":93},[45,166752,149939],{"class":313},[45,166754,12518],{"class":51},[45,166756,70302],{"class":5299},[45,166758,254],{"class":93},[45,166760,857],{"class":257},[45,166762,12518],{"class":51},[45,166764,70353],{"class":5299},[45,166766,254],{"class":93},[45,166768,69350],{"class":313},[45,166770,215],{"class":51},[30,166772,166774],{"id":166773},"_77-参数解包","7.7 参数解包",[10,166776,166777],{},"列表或元组解包为位置参数：",[35,166779,166781],{"className":37,"code":166780,"language":39,"meta":40,"style":40},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[42,166782,166783,166792,166807,166811,166815,166835],{"__ignoreMap":40},[45,166784,166785,166787,166789],{"class":47,"line":48},[45,166786,32028],{"class":93},[45,166788,5292],{"class":2046},[45,166790,166791],{"class":51},"(a, b, c):\n",[45,166793,166794,166796,166798,166800,166802,166804],{"class":47,"line":125},[45,166795,4173],{"class":93},[45,166797,10952],{"class":51},[45,166799,689],{"class":93},[45,166801,10965],{"class":51},[45,166803,689],{"class":93},[45,166805,166806],{"class":51}," c\n",[45,166808,166809],{"class":47,"line":1262},[45,166810,2483],{"emptyLinePlaceholder":133},[45,166812,166813],{"class":47,"line":1277},[45,166814,2483],{"emptyLinePlaceholder":133},[45,166816,166817,166819,166821,166823,166825,166827,166829,166831,166833],{"class":47,"line":1283},[45,166818,164151],{"class":51},[45,166820,254],{"class":93},[45,166822,52307],{"class":51},[45,166824,426],{"class":257},[45,166826,12518],{"class":51},[45,166828,286],{"class":257},[45,166830,12518],{"class":51},[45,166832,280],{"class":257},[45,166834,33327],{"class":51},[45,166836,166837,166839,166841,166843],{"class":47,"line":1297},[45,166838,30496],{"class":257},[45,166840,166651],{"class":51},[45,166842,663],{"class":93},[45,166844,166845],{"class":51},"nums))\n",[10,166847,166848],{},"字典解包为关键字参数：",[35,166850,166852],{"className":37,"code":166851,"language":39,"meta":40,"style":40},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[42,166853,166854,166862,166888,166892,166896,166920],{"__ignoreMap":40},[45,166855,166856,166858,166860],{"class":47,"line":48},[45,166857,32028],{"class":93},[45,166859,149423],{"class":2046},[45,166861,149426],{"class":51},[45,166863,166864,166866,166868,166870,166872,166874,166876,166878,166880,166882,166884,166886],{"class":47,"line":125},[45,166865,31380],{"class":257},[45,166867,209],{"class":51},[45,166869,261],{"class":93},[45,166871,459],{"class":313},[45,166873,1103],{"class":257},[45,166875,79891],{"class":51},[45,166877,1153],{"class":257},[45,166879,4531],{"class":257},[45,166881,70302],{"class":51},[45,166883,1153],{"class":257},[45,166885,459],{"class":313},[45,166887,215],{"class":51},[45,166889,166890],{"class":47,"line":1262},[45,166891,2483],{"emptyLinePlaceholder":133},[45,166893,166894],{"class":47,"line":1277},[45,166895,2483],{"emptyLinePlaceholder":133},[45,166897,166898,166900,166902,166904,166906,166908,166910,166912,166914,166916,166918],{"class":47,"line":1283},[45,166899,116365],{"class":51},[45,166901,254],{"class":93},[45,166903,4531],{"class":51},[45,166905,62760],{"class":313},[45,166907,51518],{"class":51},[45,166909,149939],{"class":313},[45,166911,12518],{"class":51},[45,166913,69205],{"class":313},[45,166915,51518],{"class":51},[45,166917,857],{"class":257},[45,166919,1648],{"class":51},[45,166921,166922,166924,166926],{"class":47,"line":1297},[45,166923,166207],{"class":51},[45,166925,10744],{"class":93},[45,166927,166928],{"class":51},"info)\n",[30,166930,166932],{"id":166931},"_78-匿名函数lambda","7.8 匿名函数lambda",[10,166934,166935,166938],{},[42,166936,166937],{},"lambda"," 用于定义简单匿名函数。",[35,166940,166942],{"className":37,"code":166941,"language":39,"meta":40,"style":40},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[42,166943,166944,166961],{"__ignoreMap":40},[45,166945,166946,166949,166951,166954,166957,166959],{"class":47,"line":48},[45,166947,166948],{"class":51},"add ",[45,166950,254],{"class":93},[45,166952,166953],{"class":93}," lambda",[45,166955,166956],{"class":51}," a, b: a ",[45,166958,689],{"class":93},[45,166960,151155],{"class":51},[45,166962,166963,166965,166967,166969,166971,166973],{"class":47,"line":125},[45,166964,30496],{"class":257},[45,166966,166651],{"class":51},[45,166968,426],{"class":257},[45,166970,12518],{"class":51},[45,166972,286],{"class":257},[45,166974,30578],{"class":51},[10,166976,166977],{},"常和排序、过滤等函数一起使用。",[10,166979,166980],{},"按分数排序：",[35,166982,166984],{"className":37,"code":166983,"language":39,"meta":40,"style":40},"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",[42,166985,166986,166994,167014,167034,167054,167058,167062,167085],{"__ignoreMap":40},[45,166987,166988,166990,166992],{"class":47,"line":48},[45,166989,159767],{"class":51},[45,166991,254],{"class":93},[45,166993,55528],{"class":51},[45,166995,166996,166998,167000,167002,167004,167006,167008,167010,167012],{"class":47,"line":125},[45,166997,148436],{"class":51},[45,166999,62760],{"class":313},[45,167001,51518],{"class":51},[45,167003,149939],{"class":313},[45,167005,12518],{"class":51},[45,167007,151523],{"class":313},[45,167009,51518],{"class":51},[45,167011,1196],{"class":257},[45,167013,5013],{"class":51},[45,167015,167016,167018,167020,167022,167024,167026,167028,167030,167032],{"class":47,"line":1262},[45,167017,148436],{"class":51},[45,167019,62760],{"class":313},[45,167021,51518],{"class":51},[45,167023,150987],{"class":313},[45,167025,12518],{"class":51},[45,167027,151523],{"class":313},[45,167029,51518],{"class":51},[45,167031,1018],{"class":257},[45,167033,5013],{"class":51},[45,167035,167036,167038,167040,167042,167044,167046,167048,167050,167052],{"class":47,"line":1277},[45,167037,148436],{"class":51},[45,167039,62760],{"class":313},[45,167041,51518],{"class":51},[45,167043,159782],{"class":313},[45,167045,12518],{"class":51},[45,167047,151523],{"class":313},[45,167049,51518],{"class":51},[45,167051,614],{"class":257},[45,167053,5013],{"class":51},[45,167055,167056],{"class":47,"line":1283},[45,167057,33327],{"class":51},[45,167059,167060],{"class":47,"line":1297},[45,167061,2483],{"emptyLinePlaceholder":133},[45,167063,167064,167067,167069,167071,167073,167075,167077,167079,167081,167083],{"class":47,"line":1303},[45,167065,167066],{"class":51},"students.sort(",[45,167068,153997],{"class":5299},[45,167070,154000],{"class":93},[45,167072,154003],{"class":51},[45,167074,151523],{"class":313},[45,167076,112253],{"class":51},[45,167078,163579],{"class":5299},[45,167080,254],{"class":93},[45,167082,31557],{"class":257},[45,167084,215],{"class":51},[45,167086,167087,167089],{"class":47,"line":1394},[45,167088,30496],{"class":257},[45,167090,165046],{"class":51},[10,167092,167093,167094,167096],{},"如果逻辑复杂，不要硬写 ",[42,167095,166937],{},"，定义普通函数更清晰。",[30,167098,167100],{"id":167099},"_79-函数作为参数","7.9 函数作为参数",[10,167102,167103],{},"函数可以作为参数传给另一个函数。",[35,167105,167107],{"className":37,"code":167106,"language":39,"meta":40,"style":40},"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",[42,167108,167109,167117,167127,167131,167135,167145,167152,167156,167160],{"__ignoreMap":40},[45,167110,167111,167113,167115],{"class":47,"line":48},[45,167112,32028],{"class":93},[45,167114,5292],{"class":2046},[45,167116,151144],{"class":51},[45,167118,167119,167121,167123,167125],{"class":47,"line":125},[45,167120,4173],{"class":93},[45,167122,10952],{"class":51},[45,167124,689],{"class":93},[45,167126,151155],{"class":51},[45,167128,167129],{"class":47,"line":1262},[45,167130,2483],{"emptyLinePlaceholder":133},[45,167132,167133],{"class":47,"line":1277},[45,167134,2483],{"emptyLinePlaceholder":133},[45,167136,167137,167139,167142],{"class":47,"line":1283},[45,167138,32028],{"class":93},[45,167140,167141],{"class":2046}," calculate",[45,167143,167144],{"class":51},"(a, b, func):\n",[45,167146,167147,167149],{"class":47,"line":1297},[45,167148,4173],{"class":93},[45,167150,167151],{"class":51}," func(a, b)\n",[45,167153,167154],{"class":47,"line":1303},[45,167155,2483],{"emptyLinePlaceholder":133},[45,167157,167158],{"class":47,"line":1394},[45,167159,2483],{"emptyLinePlaceholder":133},[45,167161,167162,167164,167167,167169,167171,167173],{"class":47,"line":1400},[45,167163,30496],{"class":257},[45,167165,167166],{"class":51},"(calculate(",[45,167168,654],{"class":257},[45,167170,12518],{"class":51},[45,167172,907],{"class":257},[45,167174,167175],{"class":51},", add))\n",[10,167177,167178],{},"这种思想在排序、回调、框架中经常出现。",[30,167180,167182],{"id":167181},"_710-mapfiltersorted","7.10 map、filter、sorted",[176,167184,167186],{"id":167185},"_7101-map","7.10.1 map",[10,167188,167189,167191],{},[42,167190,74125],{}," 对每个元素执行函数。",[35,167193,167195],{"className":37,"code":167194,"language":39,"meta":40,"style":40},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[42,167196,167197,167221,167244],{"__ignoreMap":40},[45,167198,167199,167201,167203,167205,167207,167209,167211,167213,167215,167217,167219],{"class":47,"line":48},[45,167200,164151],{"class":51},[45,167202,254],{"class":93},[45,167204,52307],{"class":51},[45,167206,426],{"class":257},[45,167208,12518],{"class":51},[45,167210,286],{"class":257},[45,167212,12518],{"class":51},[45,167214,280],{"class":257},[45,167216,12518],{"class":51},[45,167218,501],{"class":257},[45,167220,33327],{"class":51},[45,167222,167223,167225,167227,167230,167232,167234,167237,167239,167241],{"class":47,"line":125},[45,167224,161357],{"class":51},[45,167226,254],{"class":93},[45,167228,167229],{"class":257}," map",[45,167231,209],{"class":51},[45,167233,166937],{"class":93},[45,167235,167236],{"class":51}," x: x ",[45,167238,663],{"class":93},[45,167240,14838],{"class":257},[45,167242,167243],{"class":51},", nums)\n",[45,167245,167246,167248,167250,167252],{"class":47,"line":1262},[45,167247,30496],{"class":257},[45,167249,209],{"class":51},[45,167251,154121],{"class":257},[45,167253,166119],{"class":51},[176,167255,167257],{"id":167256},"_7102-filter","7.10.2 filter",[10,167259,167260,167262],{},[42,167261,80132],{}," 保留满足条件的元素。",[35,167264,167266],{"className":37,"code":167265,"language":39,"meta":40,"style":40},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[42,167267,167268,167296,167321],{"__ignoreMap":40},[45,167269,167270,167272,167274,167276,167278,167280,167282,167284,167286,167288,167290,167292,167294],{"class":47,"line":48},[45,167271,164151],{"class":51},[45,167273,254],{"class":93},[45,167275,52307],{"class":51},[45,167277,426],{"class":257},[45,167279,12518],{"class":51},[45,167281,286],{"class":257},[45,167283,12518],{"class":51},[45,167285,280],{"class":257},[45,167287,12518],{"class":51},[45,167289,501],{"class":257},[45,167291,12518],{"class":51},[45,167293,527],{"class":257},[45,167295,33327],{"class":51},[45,167297,167298,167300,167302,167305,167307,167309,167311,167313,167315,167317,167319],{"class":47,"line":125},[45,167299,161357],{"class":51},[45,167301,254],{"class":93},[45,167303,167304],{"class":257}," filter",[45,167306,209],{"class":51},[45,167308,166937],{"class":93},[45,167310,167236],{"class":51},[45,167312,536],{"class":93},[45,167314,14838],{"class":257},[45,167316,101610],{"class":93},[45,167318,4176],{"class":257},[45,167320,167243],{"class":51},[45,167322,167323,167325,167327,167329],{"class":47,"line":1262},[45,167324,30496],{"class":257},[45,167326,209],{"class":51},[45,167328,154121],{"class":257},[45,167330,166119],{"class":51},[176,167332,167334],{"id":167333},"_7103-sorted","7.10.3 sorted",[10,167336,167337,167339],{},[42,167338,165287],{}," 返回排序后的新列表。",[35,167341,167343],{"className":37,"code":167342,"language":39,"meta":40,"style":40},"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",[42,167344,167345,167353,167373,167393,167413,167417,167421,167450],{"__ignoreMap":40},[45,167346,167347,167349,167351],{"class":47,"line":48},[45,167348,159767],{"class":51},[45,167350,254],{"class":93},[45,167352,55528],{"class":51},[45,167354,167355,167357,167359,167361,167363,167365,167367,167369,167371],{"class":47,"line":125},[45,167356,148436],{"class":51},[45,167358,62760],{"class":313},[45,167360,51518],{"class":51},[45,167362,149939],{"class":313},[45,167364,12518],{"class":51},[45,167366,151523],{"class":313},[45,167368,51518],{"class":51},[45,167370,1196],{"class":257},[45,167372,5013],{"class":51},[45,167374,167375,167377,167379,167381,167383,167385,167387,167389,167391],{"class":47,"line":1262},[45,167376,148436],{"class":51},[45,167378,62760],{"class":313},[45,167380,51518],{"class":51},[45,167382,150987],{"class":313},[45,167384,12518],{"class":51},[45,167386,151523],{"class":313},[45,167388,51518],{"class":51},[45,167390,1018],{"class":257},[45,167392,5013],{"class":51},[45,167394,167395,167397,167399,167401,167403,167405,167407,167409,167411],{"class":47,"line":1277},[45,167396,148436],{"class":51},[45,167398,62760],{"class":313},[45,167400,51518],{"class":51},[45,167402,159782],{"class":313},[45,167404,12518],{"class":51},[45,167406,151523],{"class":313},[45,167408,51518],{"class":51},[45,167410,614],{"class":257},[45,167412,5013],{"class":51},[45,167414,167415],{"class":47,"line":1283},[45,167416,33327],{"class":51},[45,167418,167419],{"class":47,"line":1297},[45,167420,2483],{"emptyLinePlaceholder":133},[45,167422,167423,167425,167427,167429,167432,167434,167436,167438,167440,167442,167444,167446,167448],{"class":47,"line":1303},[45,167424,161357],{"class":51},[45,167426,254],{"class":93},[45,167428,163655],{"class":257},[45,167430,167431],{"class":51},"(students, ",[45,167433,153997],{"class":5299},[45,167435,154000],{"class":93},[45,167437,154003],{"class":51},[45,167439,151523],{"class":313},[45,167441,112253],{"class":51},[45,167443,163579],{"class":5299},[45,167445,254],{"class":93},[45,167447,31557],{"class":257},[45,167449,215],{"class":51},[45,167451,167452,167454],{"class":47,"line":1394},[45,167453,30496],{"class":257},[45,167455,76666],{"class":51},[30,167457,167459],{"id":167458},"_711-闭包入门","7.11 闭包入门",[10,167461,167462],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[35,167464,167466],{"className":37,"code":167465,"language":39,"meta":40,"style":40},"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",[42,167467,167468,167478,167488,167499,167503,167510,167514,167518,167532],{"__ignoreMap":40},[45,167469,167470,167472,167475],{"class":47,"line":48},[45,167471,32028],{"class":93},[45,167473,167474],{"class":2046}," outer",[45,167476,167477],{"class":51},"(base):\n",[45,167479,167480,167482,167485],{"class":47,"line":125},[45,167481,30882],{"class":93},[45,167483,167484],{"class":2046}," inner",[45,167486,167487],{"class":51},"(num):\n",[45,167489,167490,167492,167495,167497],{"class":47,"line":1262},[45,167491,14835],{"class":93},[45,167493,167494],{"class":51}," base ",[45,167496,689],{"class":93},[45,167498,166630],{"class":51},[45,167500,167501],{"class":47,"line":1277},[45,167502,2483],{"emptyLinePlaceholder":133},[45,167504,167505,167507],{"class":47,"line":1283},[45,167506,4173],{"class":93},[45,167508,167509],{"class":51}," inner\n",[45,167511,167512],{"class":47,"line":1297},[45,167513,2483],{"emptyLinePlaceholder":133},[45,167515,167516],{"class":47,"line":1303},[45,167517,2483],{"emptyLinePlaceholder":133},[45,167519,167520,167523,167525,167528,167530],{"class":47,"line":1394},[45,167521,167522],{"class":51},"add_10 ",[45,167524,254],{"class":93},[45,167526,167527],{"class":51}," outer(",[45,167529,654],{"class":257},[45,167531,215],{"class":51},[45,167533,167534,167536,167539,167541],{"class":47,"line":1400},[45,167535,30496],{"class":257},[45,167537,167538],{"class":51},"(add_10(",[45,167540,527],{"class":257},[45,167542,30578],{"class":51},[10,167544,167545],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[30,167547,167549],{"id":167548},"_712-装饰器入门","7.12 装饰器入门",[10,167551,167552],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[35,167554,167556],{"className":37,"code":167555,"language":39,"meta":40,"style":40},"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",[42,167557,167558,167567,167576,167587,167592,167603,167607,167614,167618,167622,167627,167635,167645,167649,167653],{"__ignoreMap":40},[45,167559,167560,167562,167564],{"class":47,"line":48},[45,167561,32028],{"class":93},[45,167563,87272],{"class":2046},[45,167565,167566],{"class":51},"(func):\n",[45,167568,167569,167571,167574],{"class":47,"line":125},[45,167570,30882],{"class":93},[45,167572,167573],{"class":2046}," wrapper",[45,167575,32034],{"class":51},[45,167577,167578,167580,167582,167585],{"class":47,"line":1262},[45,167579,32532],{"class":257},[45,167581,209],{"class":51},[45,167583,167584],{"class":313},"\"函数开始执行\"",[45,167586,215],{"class":51},[45,167588,167589],{"class":47,"line":1277},[45,167590,167591],{"class":51},"        func()\n",[45,167593,167594,167596,167598,167601],{"class":47,"line":1283},[45,167595,32532],{"class":257},[45,167597,209],{"class":51},[45,167599,167600],{"class":313},"\"函数执行结束\"",[45,167602,215],{"class":51},[45,167604,167605],{"class":47,"line":1297},[45,167606,2483],{"emptyLinePlaceholder":133},[45,167608,167609,167611],{"class":47,"line":1303},[45,167610,4173],{"class":93},[45,167612,167613],{"class":51}," wrapper\n",[45,167615,167616],{"class":47,"line":1394},[45,167617,2483],{"emptyLinePlaceholder":133},[45,167619,167620],{"class":47,"line":1400},[45,167621,2483],{"emptyLinePlaceholder":133},[45,167623,167624],{"class":47,"line":1412},[45,167625,167626],{"class":2046},"@log\n",[45,167628,167629,167631,167633],{"class":47,"line":1695},[45,167630,32028],{"class":93},[45,167632,161047],{"class":2046},[45,167634,32034],{"class":51},[45,167636,167637,167639,167641,167643],{"class":47,"line":1700},[45,167638,31380],{"class":257},[45,167640,209],{"class":51},[45,167642,5927],{"class":313},[45,167644,215],{"class":51},[45,167646,167647],{"class":47,"line":1706},[45,167648,2483],{"emptyLinePlaceholder":133},[45,167650,167651],{"class":47,"line":1711},[45,167652,2483],{"emptyLinePlaceholder":133},[45,167654,167655],{"class":47,"line":1725},[45,167656,161082],{"class":51},[10,167658,158325],{},[35,167660,167662],{"className":37,"code":167661,"language":39,"meta":40,"style":40},"say_hello = log(say_hello)\n",[42,167663,167664],{"__ignoreMap":40},[45,167665,167666,167669,167671],{"class":47,"line":48},[45,167667,167668],{"class":51},"say_hello ",[45,167670,254],{"class":93},[45,167672,167673],{"class":51}," log(say_hello)\n",[10,167675,167676],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[30,167678,167680],{"id":167679},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[35,167682,167684],{"className":37,"code":167683,"language":39,"meta":40,"style":40},"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",[42,167685,167686,167694,167711,167721,167740,167750,167757,167761,167767,167771,167775,167779,167787,167797,167801,167805],{"__ignoreMap":40},[45,167687,167688,167690,167692],{"class":47,"line":48},[45,167689,32028],{"class":93},[45,167691,87272],{"class":2046},[45,167693,167566],{"class":51},[45,167695,167696,167698,167700,167702,167704,167707,167709],{"class":47,"line":125},[45,167697,30882],{"class":93},[45,167699,167573],{"class":2046},[45,167701,209],{"class":51},[45,167703,663],{"class":93},[45,167705,167706],{"class":51},"args, ",[45,167708,10744],{"class":93},[45,167710,166717],{"class":51},[45,167712,167713,167715,167717,167719],{"class":47,"line":1262},[45,167714,32532],{"class":257},[45,167716,209],{"class":51},[45,167718,167584],{"class":313},[45,167720,215],{"class":51},[45,167722,167723,167726,167728,167731,167733,167735,167737],{"class":47,"line":1277},[45,167724,167725],{"class":51},"        result ",[45,167727,254],{"class":93},[45,167729,167730],{"class":51}," func(",[45,167732,663],{"class":93},[45,167734,167706],{"class":51},[45,167736,10744],{"class":93},[45,167738,167739],{"class":51},"kwargs)\n",[45,167741,167742,167744,167746,167748],{"class":47,"line":1283},[45,167743,32532],{"class":257},[45,167745,209],{"class":51},[45,167747,167600],{"class":313},[45,167749,215],{"class":51},[45,167751,167752,167754],{"class":47,"line":1297},[45,167753,14835],{"class":93},[45,167755,167756],{"class":51}," result\n",[45,167758,167759],{"class":47,"line":1303},[45,167760,2483],{"emptyLinePlaceholder":133},[45,167762,167763,167765],{"class":47,"line":1394},[45,167764,4173],{"class":93},[45,167766,167613],{"class":51},[45,167768,167769],{"class":47,"line":1400},[45,167770,2483],{"emptyLinePlaceholder":133},[45,167772,167773],{"class":47,"line":1412},[45,167774,2483],{"emptyLinePlaceholder":133},[45,167776,167777],{"class":47,"line":1695},[45,167778,167626],{"class":2046},[45,167780,167781,167783,167785],{"class":47,"line":1700},[45,167782,32028],{"class":93},[45,167784,5292],{"class":2046},[45,167786,151144],{"class":51},[45,167788,167789,167791,167793,167795],{"class":47,"line":1706},[45,167790,4173],{"class":93},[45,167792,10952],{"class":51},[45,167794,689],{"class":93},[45,167796,151155],{"class":51},[45,167798,167799],{"class":47,"line":1711},[45,167800,2483],{"emptyLinePlaceholder":133},[45,167802,167803],{"class":47,"line":1725},[45,167804,2483],{"emptyLinePlaceholder":133},[45,167806,167807,167809,167811,167813,167815,167817],{"class":47,"line":1730},[45,167808,30496],{"class":257},[45,167810,166651],{"class":51},[45,167812,654],{"class":257},[45,167814,12518],{"class":51},[45,167816,907],{"class":257},[45,167818,30578],{"class":51},[10,167820,167821,167822,101069,167824,167826],{},"这个写法使用 ",[42,167823,166583],{},[42,167825,166698],{}," 接收原函数的所有参数。",[30,167828,167830],{"id":167829},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[10,167832,123343],{},[159,167834,167835,167838,167841],{},[162,167836,167837],{},"给定一组学生数据。",[162,167839,167840],{},"封装函数，根据传入规则筛选学生。",[162,167842,167843],{},"筛选及格、优秀、未成年学生。",[10,167845,10118],{},[35,167847,167849],{"className":37,"code":167848,"language":39,"meta":40,"style":40},"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",[42,167850,167851,167859,167887,167915,167943,167947,167951,167955,167965,167973,167983,167990,167995,168001,168005,168009,168033,168056,168079,168083,168090,168097],{"__ignoreMap":40},[45,167852,167853,167855,167857],{"class":47,"line":48},[45,167854,159767],{"class":51},[45,167856,254],{"class":93},[45,167858,55528],{"class":51},[45,167860,167861,167863,167865,167867,167869,167871,167873,167875,167877,167879,167881,167883,167885],{"class":47,"line":125},[45,167862,148436],{"class":51},[45,167864,62760],{"class":313},[45,167866,51518],{"class":51},[45,167868,149939],{"class":313},[45,167870,12518],{"class":51},[45,167872,69205],{"class":313},[45,167874,51518],{"class":51},[45,167876,857],{"class":257},[45,167878,12518],{"class":51},[45,167880,151523],{"class":313},[45,167882,51518],{"class":51},[45,167884,1196],{"class":257},[45,167886,5013],{"class":51},[45,167888,167889,167891,167893,167895,167897,167899,167901,167903,167905,167907,167909,167911,167913],{"class":47,"line":1262},[45,167890,148436],{"class":51},[45,167892,62760],{"class":313},[45,167894,51518],{"class":51},[45,167896,150987],{"class":313},[45,167898,12518],{"class":51},[45,167900,69205],{"class":313},[45,167902,51518],{"class":51},[45,167904,832],{"class":257},[45,167906,12518],{"class":51},[45,167908,151523],{"class":313},[45,167910,51518],{"class":51},[45,167912,1018],{"class":257},[45,167914,5013],{"class":51},[45,167916,167917,167919,167921,167923,167925,167927,167929,167931,167933,167935,167937,167939,167941],{"class":47,"line":1277},[45,167918,148436],{"class":51},[45,167920,62760],{"class":313},[45,167922,51518],{"class":51},[45,167924,159782],{"class":313},[45,167926,12518],{"class":51},[45,167928,69205],{"class":313},[45,167930,51518],{"class":51},[45,167932,882],{"class":257},[45,167934,12518],{"class":51},[45,167936,151523],{"class":313},[45,167938,51518],{"class":51},[45,167940,1089],{"class":257},[45,167942,5013],{"class":51},[45,167944,167945],{"class":47,"line":1283},[45,167946,33327],{"class":51},[45,167948,167949],{"class":47,"line":1297},[45,167950,2483],{"emptyLinePlaceholder":133},[45,167952,167953],{"class":47,"line":1303},[45,167954,2483],{"emptyLinePlaceholder":133},[45,167956,167957,167959,167962],{"class":47,"line":1394},[45,167958,32028],{"class":93},[45,167960,167961],{"class":2046}," filter_students",[45,167963,167964],{"class":51},"(students, condition):\n",[45,167966,167967,167969,167971],{"class":47,"line":1400},[45,167968,161274],{"class":51},[45,167970,254],{"class":93},[45,167972,51919],{"class":51},[45,167974,167975,167977,167979,167981],{"class":47,"line":1412},[45,167976,3284],{"class":93},[45,167978,152188],{"class":51},[45,167980,26126],{"class":93},[45,167982,152193],{"class":51},[45,167984,167985,167987],{"class":47,"line":1695},[45,167986,2580],{"class":93},[45,167988,167989],{"class":51}," condition(student):\n",[45,167991,167992],{"class":47,"line":1700},[45,167993,167994],{"class":51},"            result.append(student)\n",[45,167996,167997,167999],{"class":47,"line":1706},[45,167998,4173],{"class":93},[45,168000,167756],{"class":51},[45,168002,168003],{"class":47,"line":1711},[45,168004,2483],{"emptyLinePlaceholder":133},[45,168006,168007],{"class":47,"line":1725},[45,168008,2483],{"emptyLinePlaceholder":133},[45,168010,168011,168013,168015,168018,168020,168023,168025,168027,168029,168031],{"class":47,"line":1730},[45,168012,165752],{"class":51},[45,168014,254],{"class":93},[45,168016,168017],{"class":51}," filter_students(students, ",[45,168019,166937],{"class":93},[45,168021,168022],{"class":51}," s: s[",[45,168024,151523],{"class":313},[45,168026,4526],{"class":51},[45,168028,1793],{"class":93},[45,168030,157888],{"class":257},[45,168032,215],{"class":51},[45,168034,168035,168038,168040,168042,168044,168046,168048,168050,168052,168054],{"class":47,"line":1736},[45,168036,168037],{"class":51},"excellent ",[45,168039,254],{"class":93},[45,168041,168017],{"class":51},[45,168043,166937],{"class":93},[45,168045,168022],{"class":51},[45,168047,151523],{"class":313},[45,168049,4526],{"class":51},[45,168051,1793],{"class":93},[45,168053,157839],{"class":257},[45,168055,215],{"class":51},[45,168057,168058,168061,168063,168065,168067,168069,168071,168073,168075,168077],{"class":47,"line":1757},[45,168059,168060],{"class":51},"under_age ",[45,168062,254],{"class":93},[45,168064,168017],{"class":51},[45,168066,166937],{"class":93},[45,168068,168022],{"class":51},[45,168070,69205],{"class":313},[45,168072,4526],{"class":51},[45,168074,1117],{"class":93},[45,168076,156336],{"class":257},[45,168078,215],{"class":51},[45,168080,168081],{"class":47,"line":1762},[45,168082,2483],{"emptyLinePlaceholder":133},[45,168084,168085,168087],{"class":47,"line":1776},[45,168086,30496],{"class":257},[45,168088,168089],{"class":51},"(passed)\n",[45,168091,168092,168094],{"class":47,"line":1781},[45,168093,30496],{"class":257},[45,168095,168096],{"class":51},"(excellent)\n",[45,168098,168099,168101],{"class":47,"line":1810},[45,168100,30496],{"class":257},[45,168102,168103],{"class":51},"(under_age)\n",[30,168105,168107],{"id":168106},"_715-易错点","7.15 易错点",[159,168109,168110,168113,168121,168126,168137],{},[162,168111,168112],{},"默认参数不要写可变对象。",[162,168114,168115,168117,168118,168120],{},[42,168116,166583],{}," 是元组，",[42,168119,166698],{}," 是字典。",[162,168122,168123,168125],{},[42,168124,166937],{}," 只适合简单表达式。",[162,168127,168128,101069,168130,168132,168133,168136],{},[42,168129,74125],{},[42,168131,80132],{}," 的结果是迭代器，常用 ",[42,168134,168135],{},"list()"," 转换查看。",[162,168138,168139],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[30,168141,168143],{"id":168142},"_716-本章练习","7.16 本章练习",[159,168145,168146,168153,168159,168164,168169],{},[162,168147,168148,168149,168152],{},"写函数 ",[42,168150,168151],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[162,168154,168148,168155,168158],{},[42,168156,168157],{},"print_user(**kwargs)","，输出用户所有字段。",[162,168160,104417,168161,168163],{},[42,168162,166937],{}," 对学生列表按年龄排序。",[162,168165,104417,168166,168168],{},[42,168167,80132],{}," 找出成绩不及格的学生。",[162,168170,168171],{},"写一个装饰器，统计函数执行前后的提示信息。",[121,168173,168174],{},"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":40,"searchDepth":125,"depth":125,"links":168176},[168177,168178,168179,168180,168181,168182,168186,168187,168188,168189,168194,168195,168196,168197,168198,168199],{"id":166035,"depth":125,"text":166036},{"id":166149,"depth":125,"text":166150},{"id":166238,"depth":125,"text":166239},{"id":166300,"depth":125,"text":166301},{"id":166446,"depth":125,"text":166447},{"id":166573,"depth":125,"text":166574,"children":168183},[168184,168185],{"id":166577,"depth":1262,"text":166578},{"id":166692,"depth":1262,"text":166693},{"id":166773,"depth":125,"text":166774},{"id":166931,"depth":125,"text":166932},{"id":167099,"depth":125,"text":167100},{"id":167181,"depth":125,"text":167182,"children":168190},[168191,168192,168193],{"id":167185,"depth":1262,"text":167186},{"id":167256,"depth":1262,"text":167257},{"id":167333,"depth":1262,"text":167334},{"id":167458,"depth":125,"text":167459},{"id":167548,"depth":125,"text":167549},{"id":167679,"depth":125,"text":167680},{"id":167829,"depth":125,"text":167830},{"id":168106,"depth":125,"text":168107},{"id":168142,"depth":125,"text":168143},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166027,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168206,"title":168207,"body":168208,"description":130,"extension":131,"meta":170727,"navigation":133,"path":170728,"seo":170729,"stem":170730,"__hash__":170731},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168209,"toc":170702},[168210,168213,168217,168220,168223,168254,168258,168262,168265,168292,168296,168299,168350,168353,168368,168371,168406,168410,168412,168436,168439,168499,168503,168507,168510,168567,168570,168590,168594,168597,168660,168664,168667,168723,168730,168754,168758,168761,168824,168828,168833,168884,168887,168891,168896,168963,168966,169048,169052,169057,169108,169111,169115,169118,169121,169129,169132,169178,169181,169227,169231,169237,169281,169284,169330,169333,169373,169376,169437,169441,169444,169534,169537,169679,169682,169749,169753,169756,169759,169900,169903,169981,169984,170160,170164,170166,170177,170179,170378,170382,170626,170630,170664,170668,170699],[20,168211,168207],{"id":168212},"_8-文件操作",[30,168214,168216],{"id":168215},"_81-文件操作的意义","8.1 文件操作的意义",[10,168218,168219],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[10,168221,168222],{},"常见文件类型：",[159,168224,168225,168231,168237,168243,168249],{},[162,168226,168227,168230],{},[42,168228,168229],{},".txt","：普通文本。",[162,168232,168233,168236],{},[42,168234,168235],{},".csv","：表格文本。",[162,168238,168239,168242],{},[42,168240,168241],{},".json","：结构化数据。",[162,168244,168245,168248],{},[42,168246,168247],{},".log","：日志文件。",[162,168250,168251,168253],{},[42,168252,146403],{},"：Python 源代码。",[30,168255,168257],{"id":168256},"_82-路径","8.2 路径",[176,168259,168261],{"id":168260},"_821-相对路径","8.2.1 相对路径",[10,168263,168264],{},"相对当前运行目录：",[35,168266,168268],{"className":37,"code":168267,"language":39,"meta":40,"style":40},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[42,168269,168270],{"__ignoreMap":40},[45,168271,168272,168274,168276,168278,168280,168282,168284,168286,168288,168290],{"class":47,"line":48},[45,168273,86996],{"class":257},[45,168275,209],{"class":51},[45,168277,146847],{"class":313},[45,168279,12518],{"class":51},[45,168281,146852],{"class":313},[45,168283,12518],{"class":51},[45,168285,146857],{"class":5299},[45,168287,254],{"class":93},[45,168289,146862],{"class":313},[45,168291,215],{"class":51},[176,168293,168295],{"id":168294},"_822-绝对路径","8.2.2 绝对路径",[10,168297,168298],{},"从根目录或盘符开始：",[35,168300,168302],{"className":37,"code":168301,"language":39,"meta":40,"style":40},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[42,168303,168304,168327],{"__ignoreMap":40},[45,168305,168306,168308,168310,168313,168315,168317,168319,168321,168323,168325],{"class":47,"line":48},[45,168307,86996],{"class":257},[45,168309,209],{"class":51},[45,168311,168312],{"class":313},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[45,168314,12518],{"class":51},[45,168316,146852],{"class":313},[45,168318,12518],{"class":51},[45,168320,146857],{"class":5299},[45,168322,254],{"class":93},[45,168324,146862],{"class":313},[45,168326,215],{"class":51},[45,168328,168329,168331,168333,168336,168338,168340,168342,168344,168346,168348],{"class":47,"line":125},[45,168330,86996],{"class":257},[45,168332,209],{"class":51},[45,168334,168335],{"class":313},"\"D:\u002Fdata\u002Fdata.txt\"",[45,168337,12518],{"class":51},[45,168339,146852],{"class":313},[45,168341,12518],{"class":51},[45,168343,146857],{"class":5299},[45,168345,254],{"class":93},[45,168347,146862],{"class":313},[45,168349,215],{"class":51},[10,168351,168352],{},"Windows 路径建议写成：",[35,168354,168356],{"className":37,"code":168355,"language":39,"meta":40,"style":40},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[42,168357,168358],{"__ignoreMap":40},[45,168359,168360,168363,168365],{"class":47,"line":48},[45,168361,168362],{"class":51},"path ",[45,168364,254],{"class":93},[45,168366,168367],{"class":313}," \"D:\u002Fdata\u002Fdata.txt\"\n",[10,168369,168370],{},"或原始字符串：",[35,168372,168374],{"className":37,"code":168373,"language":39,"meta":40,"style":40},"path = r\"D:\\data\\data.txt\"\n",[42,168375,168376],{"__ignoreMap":40},[45,168377,168378,168380,168382,168384,168386,168389,168392,168395,168397,168399,168401,168404],{"class":47,"line":48},[45,168379,168362],{"class":51},[45,168381,254],{"class":93},[45,168383,17204],{"class":93},[45,168385,459],{"class":313},[45,168387,168388],{"class":48058},"D:",[45,168390,168391],{"class":257},"\\d",[45,168393,168394],{"class":48058},"ata",[45,168396,168391],{"class":257},[45,168398,168394],{"class":48058},[45,168400,765],{"class":257},[45,168402,168403],{"class":48058},"txt",[45,168405,25216],{"class":313},[30,168407,168409],{"id":168408},"_83-open函数","8.3 open函数",[10,168411,5264],{},[35,168413,168415],{"className":37,"code":168414,"language":39,"meta":40,"style":40},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[42,168416,168417],{"__ignoreMap":40},[45,168418,168419,168421,168423,168425,168428,168430,168432,168434],{"class":47,"line":48},[45,168420,45435],{"class":5299},[45,168422,13647],{"class":93},[45,168424,146842],{"class":257},[45,168426,168427],{"class":51},"(文件路径, 打开模式, ",[45,168429,146857],{"class":5299},[45,168431,254],{"class":93},[45,168433,146862],{"class":313},[45,168435,215],{"class":51},[10,168437,168438],{},"常见模式：",[346,168440,168441,168450],{},[349,168442,168443],{},[352,168444,168445,168448],{},[355,168446,168447],{},"模式",[355,168449,25952],{},[393,168451,168452,168461,168470,168479,168489],{},[352,168453,168454,168458],{},[398,168455,168456],{},[42,168457,877],{},[398,168459,168460],{},"只读，文件不存在会报错",[352,168462,168463,168467],{},[398,168464,168465],{},[42,168466,1002],{},[398,168468,168469],{},"只写，文件不存在会创建，存在会清空",[352,168471,168472,168476],{},[398,168473,168474],{},[42,168475,13],{},[398,168477,168478],{},"追加，文件不存在会创建",[352,168480,168481,168486],{},[398,168482,168483],{},[42,168484,168485],{},"rb",[398,168487,168488],{},"二进制只读",[352,168490,168491,168496],{},[398,168492,168493],{},[42,168494,168495],{},"wb",[398,168497,168498],{},"二进制只写",[30,168500,168502],{"id":168501},"_84-读取文件","8.4 读取文件",[176,168504,168506],{"id":168505},"_841-read","8.4.1 read",[10,168508,168509],{},"一次读取全部内容：",[35,168511,168513],{"className":37,"code":168512,"language":39,"meta":40,"style":40},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[42,168514,168515,168541,168553,168560],{"__ignoreMap":40},[45,168516,168517,168519,168521,168523,168525,168527,168529,168531,168533,168535,168537,168539],{"class":47,"line":48},[45,168518,45435],{"class":5299},[45,168520,13647],{"class":93},[45,168522,146842],{"class":257},[45,168524,209],{"class":51},[45,168526,146847],{"class":313},[45,168528,12518],{"class":51},[45,168530,146852],{"class":313},[45,168532,12518],{"class":51},[45,168534,146857],{"class":5299},[45,168536,254],{"class":93},[45,168538,146862],{"class":313},[45,168540,215],{"class":51},[45,168542,168543,168546,168548,168550],{"class":47,"line":125},[45,168544,168545],{"class":51},"content ",[45,168547,254],{"class":93},[45,168549,148204],{"class":5299},[45,168551,168552],{"class":51},".read()\n",[45,168554,168555,168557],{"class":47,"line":1262},[45,168556,30496],{"class":257},[45,168558,168559],{"class":51},"(content)\n",[45,168561,168562,168564],{"class":47,"line":1277},[45,168563,45435],{"class":5299},[45,168565,168566],{"class":51},".close()\n",[10,168568,168569],{},"可以指定读取字符数：",[35,168571,168573],{"className":37,"code":168572,"language":39,"meta":40,"style":40},"content = file.read(10)\n",[42,168574,168575],{"__ignoreMap":40},[45,168576,168577,168579,168581,168583,168586,168588],{"class":47,"line":48},[45,168578,168545],{"class":51},[45,168580,254],{"class":93},[45,168582,148204],{"class":5299},[45,168584,168585],{"class":51},".read(",[45,168587,654],{"class":257},[45,168589,215],{"class":51},[176,168591,168593],{"id":168592},"_842-readline","8.4.2 readline",[10,168595,168596],{},"一次读取一行：",[35,168598,168600],{"className":37,"code":168599,"language":39,"meta":40,"style":40},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[42,168601,168602,168628,168632,168643,168650,168654],{"__ignoreMap":40},[45,168603,168604,168606,168608,168610,168612,168614,168616,168618,168620,168622,168624,168626],{"class":47,"line":48},[45,168605,45435],{"class":5299},[45,168607,13647],{"class":93},[45,168609,146842],{"class":257},[45,168611,209],{"class":51},[45,168613,146847],{"class":313},[45,168615,12518],{"class":51},[45,168617,146852],{"class":313},[45,168619,12518],{"class":51},[45,168621,146857],{"class":5299},[45,168623,254],{"class":93},[45,168625,146862],{"class":313},[45,168627,215],{"class":51},[45,168629,168630],{"class":47,"line":125},[45,168631,2483],{"emptyLinePlaceholder":133},[45,168633,168634,168636,168638,168640],{"class":47,"line":1262},[45,168635,147303],{"class":51},[45,168637,254],{"class":93},[45,168639,148204],{"class":5299},[45,168641,168642],{"class":51},".readline()\n",[45,168644,168645,168647],{"class":47,"line":1277},[45,168646,30496],{"class":257},[45,168648,168649],{"class":51},"(line)\n",[45,168651,168652],{"class":47,"line":1283},[45,168653,2483],{"emptyLinePlaceholder":133},[45,168655,168656,168658],{"class":47,"line":1297},[45,168657,45435],{"class":5299},[45,168659,168566],{"class":51},[176,168661,168663],{"id":168662},"_843-readlines","8.4.3 readlines",[10,168665,168666],{},"读取所有行，返回列表：",[35,168668,168670],{"className":37,"code":168669,"language":39,"meta":40,"style":40},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[42,168671,168672,168698,168710,168717],{"__ignoreMap":40},[45,168673,168674,168676,168678,168680,168682,168684,168686,168688,168690,168692,168694,168696],{"class":47,"line":48},[45,168675,45435],{"class":5299},[45,168677,13647],{"class":93},[45,168679,146842],{"class":257},[45,168681,209],{"class":51},[45,168683,146847],{"class":313},[45,168685,12518],{"class":51},[45,168687,146852],{"class":313},[45,168689,12518],{"class":51},[45,168691,146857],{"class":5299},[45,168693,254],{"class":93},[45,168695,146862],{"class":313},[45,168697,215],{"class":51},[45,168699,168700,168703,168705,168707],{"class":47,"line":125},[45,168701,168702],{"class":51},"lines ",[45,168704,254],{"class":93},[45,168706,148204],{"class":5299},[45,168708,168709],{"class":51},".readlines()\n",[45,168711,168712,168714],{"class":47,"line":1262},[45,168713,30496],{"class":257},[45,168715,168716],{"class":51},"(lines)\n",[45,168718,168719,168721],{"class":47,"line":1277},[45,168720,45435],{"class":5299},[45,168722,168566],{"class":51},[10,168724,168725,168726,168729],{},"每一行通常带有换行符，可以用 ",[42,168727,168728],{},"strip()"," 去掉：",[35,168731,168733],{"className":37,"code":168732,"language":39,"meta":40,"style":40},"for line in lines:\n    print(line.strip())\n",[42,168734,168735,168747],{"__ignoreMap":40},[45,168736,168737,168739,168742,168744],{"class":47,"line":48},[45,168738,3108],{"class":93},[45,168740,168741],{"class":51}," line ",[45,168743,26126],{"class":93},[45,168745,168746],{"class":51}," lines:\n",[45,168748,168749,168751],{"class":47,"line":125},[45,168750,31380],{"class":257},[45,168752,168753],{"class":51},"(line.strip())\n",[176,168755,168757],{"id":168756},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[10,168759,168760],{},"推荐读取大文件时使用：",[35,168762,168764],{"className":37,"code":168763,"language":39,"meta":40,"style":40},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[42,168765,168766,168792,168796,168808,168814,168818],{"__ignoreMap":40},[45,168767,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790],{"class":47,"line":48},[45,168769,45435],{"class":5299},[45,168771,13647],{"class":93},[45,168773,146842],{"class":257},[45,168775,209],{"class":51},[45,168777,146847],{"class":313},[45,168779,12518],{"class":51},[45,168781,146852],{"class":313},[45,168783,12518],{"class":51},[45,168785,146857],{"class":5299},[45,168787,254],{"class":93},[45,168789,146862],{"class":313},[45,168791,215],{"class":51},[45,168793,168794],{"class":47,"line":125},[45,168795,2483],{"emptyLinePlaceholder":133},[45,168797,168798,168800,168802,168804,168806],{"class":47,"line":1262},[45,168799,3108],{"class":93},[45,168801,168741],{"class":51},[45,168803,26126],{"class":93},[45,168805,148204],{"class":5299},[45,168807,3822],{"class":51},[45,168809,168810,168812],{"class":47,"line":1277},[45,168811,31380],{"class":257},[45,168813,168753],{"class":51},[45,168815,168816],{"class":47,"line":1283},[45,168817,2483],{"emptyLinePlaceholder":133},[45,168819,168820,168822],{"class":47,"line":1297},[45,168821,45435],{"class":5299},[45,168823,168566],{"class":51},[30,168825,168827],{"id":168826},"_85-with语句","8.5 with语句",[10,168829,168830,168832],{},[42,168831,107884],{}," 会自动关闭文件，推荐使用。",[35,168834,168836],{"className":37,"code":168835,"language":39,"meta":40,"style":40},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[42,168837,168838,168868,168878],{"__ignoreMap":40},[45,168839,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866],{"class":47,"line":48},[45,168841,107884],{"class":93},[45,168843,146842],{"class":257},[45,168845,209],{"class":51},[45,168847,146847],{"class":313},[45,168849,12518],{"class":51},[45,168851,146852],{"class":313},[45,168853,12518],{"class":51},[45,168855,146857],{"class":5299},[45,168857,254],{"class":93},[45,168859,146862],{"class":313},[45,168861,13797],{"class":51},[45,168863,31464],{"class":93},[45,168865,148204],{"class":5299},[45,168867,3822],{"class":51},[45,168869,168870,168872,168874,168876],{"class":47,"line":125},[45,168871,146874],{"class":51},[45,168873,254],{"class":93},[45,168875,148204],{"class":5299},[45,168877,168552],{"class":51},[45,168879,168880,168882],{"class":47,"line":1262},[45,168881,31380],{"class":257},[45,168883,168559],{"class":51},[10,168885,168886],{},"等价于打开文件、读取、最后关闭，但更安全。",[30,168888,168890],{"id":168889},"_86-写入文件","8.6 写入文件",[10,168892,168893,168895],{},[42,168894,1002],{}," 模式会清空原文件。",[35,168897,168899],{"className":37,"code":168898,"language":39,"meta":40,"style":40},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[42,168900,168901,168931,168948],{"__ignoreMap":40},[45,168902,168903,168905,168907,168909,168911,168913,168915,168917,168919,168921,168923,168925,168927,168929],{"class":47,"line":48},[45,168904,107884],{"class":93},[45,168906,146842],{"class":257},[45,168908,209],{"class":51},[45,168910,146847],{"class":313},[45,168912,12518],{"class":51},[45,168914,152027],{"class":313},[45,168916,12518],{"class":51},[45,168918,146857],{"class":5299},[45,168920,254],{"class":93},[45,168922,146862],{"class":313},[45,168924,13797],{"class":51},[45,168926,31464],{"class":93},[45,168928,148204],{"class":5299},[45,168930,3822],{"class":51},[45,168932,168933,168936,168939,168942,168944,168946],{"class":47,"line":125},[45,168934,168935],{"class":5299},"    file",[45,168937,168938],{"class":51},".write(",[45,168940,168941],{"class":313},"\"hello",[45,168943,156576],{"class":257},[45,168945,459],{"class":313},[45,168947,215],{"class":51},[45,168949,168950,168952,168954,168957,168959,168961],{"class":47,"line":1262},[45,168951,168935],{"class":5299},[45,168953,168938],{"class":51},[45,168955,168956],{"class":313},"\"python",[45,168958,156576],{"class":257},[45,168960,459],{"class":313},[45,168962,215],{"class":51},[10,168964,168965],{},"写入多行：",[35,168967,168969],{"className":37,"code":168968,"language":39,"meta":40,"style":40},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[42,168970,168971,169006,169010,169041],{"__ignoreMap":40},[45,168972,168973,168975,168977,168979,168982,168984,168986,168988,168991,168993,168995,168997,169000,169002,169004],{"class":47,"line":48},[45,168974,168702],{"class":51},[45,168976,254],{"class":93},[45,168978,52307],{"class":51},[45,168980,168981],{"class":313},"\"小明,18",[45,168983,156576],{"class":257},[45,168985,459],{"class":313},[45,168987,12518],{"class":51},[45,168989,168990],{"class":313},"\"小红,17",[45,168992,156576],{"class":257},[45,168994,459],{"class":313},[45,168996,12518],{"class":51},[45,168998,168999],{"class":313},"\"小刚,19",[45,169001,156576],{"class":257},[45,169003,459],{"class":313},[45,169005,33327],{"class":51},[45,169007,169008],{"class":47,"line":125},[45,169009,2483],{"emptyLinePlaceholder":133},[45,169011,169012,169014,169016,169018,169021,169023,169025,169027,169029,169031,169033,169035,169037,169039],{"class":47,"line":1262},[45,169013,107884],{"class":93},[45,169015,146842],{"class":257},[45,169017,209],{"class":51},[45,169019,169020],{"class":313},"\"students.txt\"",[45,169022,12518],{"class":51},[45,169024,152027],{"class":313},[45,169026,12518],{"class":51},[45,169028,146857],{"class":5299},[45,169030,254],{"class":93},[45,169032,146862],{"class":313},[45,169034,13797],{"class":51},[45,169036,31464],{"class":93},[45,169038,148204],{"class":5299},[45,169040,3822],{"class":51},[45,169042,169043,169045],{"class":47,"line":1277},[45,169044,168935],{"class":5299},[45,169046,169047],{"class":51},".writelines(lines)\n",[30,169049,169051],{"id":169050},"_87-追加文件","8.7 追加文件",[10,169053,169054,169056],{},[42,169055,13],{}," 模式不会清空原内容，而是在末尾追加。",[35,169058,169060],{"className":37,"code":169059,"language":39,"meta":40,"style":40},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[42,169061,169062,169093],{"__ignoreMap":40},[45,169063,169064,169066,169068,169070,169073,169075,169077,169079,169081,169083,169085,169087,169089,169091],{"class":47,"line":48},[45,169065,107884],{"class":93},[45,169067,146842],{"class":257},[45,169069,209],{"class":51},[45,169071,169072],{"class":313},"\"log.txt\"",[45,169074,12518],{"class":51},[45,169076,165376],{"class":313},[45,169078,12518],{"class":51},[45,169080,146857],{"class":5299},[45,169082,254],{"class":93},[45,169084,146862],{"class":313},[45,169086,13797],{"class":51},[45,169088,31464],{"class":93},[45,169090,148204],{"class":5299},[45,169092,3822],{"class":51},[45,169094,169095,169097,169099,169102,169104,169106],{"class":47,"line":125},[45,169096,168935],{"class":5299},[45,169098,168938],{"class":51},[45,169100,169101],{"class":313},"\"程序启动",[45,169103,156576],{"class":257},[45,169105,459],{"class":313},[45,169107,215],{"class":51},[10,169109,169110],{},"日志类文件常用追加模式。",[30,169112,169114],{"id":169113},"_88-文件编码","8.8 文件编码",[10,169116,169117],{},"编码决定文字如何保存为字节。",[10,169119,169120],{},"常见编码：",[159,169122,169123,169126],{},[162,169124,169125],{},"UTF-8：推荐。",[162,169127,169128],{},"GBK：部分 Windows 中文文件常见。",[10,169130,169131],{},"读取文件乱码时，可以尝试：",[35,169133,169135],{"className":37,"code":169134,"language":39,"meta":40,"style":40},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[42,169136,169137,169168],{"__ignoreMap":40},[45,169138,169139,169141,169143,169145,169147,169149,169151,169153,169155,169157,169160,169162,169164,169166],{"class":47,"line":48},[45,169140,107884],{"class":93},[45,169142,146842],{"class":257},[45,169144,209],{"class":51},[45,169146,146847],{"class":313},[45,169148,12518],{"class":51},[45,169150,146852],{"class":313},[45,169152,12518],{"class":51},[45,169154,146857],{"class":5299},[45,169156,254],{"class":93},[45,169158,169159],{"class":313},"\"gbk\"",[45,169161,13797],{"class":51},[45,169163,31464],{"class":93},[45,169165,148204],{"class":5299},[45,169167,3822],{"class":51},[45,169169,169170,169172,169174,169176],{"class":47,"line":125},[45,169171,146874],{"class":51},[45,169173,254],{"class":93},[45,169175,148204],{"class":5299},[45,169177,168552],{"class":51},[10,169179,169180],{},"写文件时建议统一 UTF-8：",[35,169182,169184],{"className":37,"code":169183,"language":39,"meta":40,"style":40},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[42,169185,169186,169216],{"__ignoreMap":40},[45,169187,169188,169190,169192,169194,169196,169198,169200,169202,169204,169206,169208,169210,169212,169214],{"class":47,"line":48},[45,169189,107884],{"class":93},[45,169191,146842],{"class":257},[45,169193,209],{"class":51},[45,169195,146847],{"class":313},[45,169197,12518],{"class":51},[45,169199,152027],{"class":313},[45,169201,12518],{"class":51},[45,169203,146857],{"class":5299},[45,169205,254],{"class":93},[45,169207,146862],{"class":313},[45,169209,13797],{"class":51},[45,169211,31464],{"class":93},[45,169213,148204],{"class":5299},[45,169215,3822],{"class":51},[45,169217,169218,169220,169222,169225],{"class":47,"line":125},[45,169219,168935],{"class":5299},[45,169221,168938],{"class":51},[45,169223,169224],{"class":313},"\"中文内容\"",[45,169226,215],{"class":51},[30,169228,169230],{"id":169229},"_89-pathlib","8.9 pathlib",[10,169232,169233,169236],{},[42,169234,169235],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[35,169238,169240],{"className":37,"code":169239,"language":39,"meta":40,"style":40},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[42,169241,169242,169252,169256,169274],{"__ignoreMap":40},[45,169243,169244,169246,169248,169250],{"class":47,"line":48},[45,169245,30818],{"class":93},[45,169247,108362],{"class":51},[45,169249,30473],{"class":93},[45,169251,108367],{"class":51},[45,169253,169254],{"class":47,"line":125},[45,169255,2483],{"emptyLinePlaceholder":133},[45,169257,169258,169260,169262,169264,169267,169269,169271],{"class":47,"line":1262},[45,169259,168362],{"class":51},[45,169261,254],{"class":93},[45,169263,108596],{"class":51},[45,169265,169266],{"class":313},"\"data\"",[45,169268,13797],{"class":51},[45,169270,791],{"class":93},[45,169272,169273],{"class":313}," \"students.txt\"\n",[45,169275,169276,169278],{"class":47,"line":1277},[45,169277,30496],{"class":257},[45,169279,169280],{"class":51},"(path)\n",[10,169282,169283],{},"创建目录：",[35,169285,169287],{"className":37,"code":169286,"language":39,"meta":40,"style":40},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[42,169288,169289,169299,169303,169316],{"__ignoreMap":40},[45,169290,169291,169293,169295,169297],{"class":47,"line":48},[45,169292,30818],{"class":93},[45,169294,108362],{"class":51},[45,169296,30473],{"class":93},[45,169298,108367],{"class":51},[45,169300,169301],{"class":47,"line":125},[45,169302,2483],{"emptyLinePlaceholder":133},[45,169304,169305,169308,169310,169312,169314],{"class":47,"line":1262},[45,169306,169307],{"class":51},"data_dir ",[45,169309,254],{"class":93},[45,169311,108596],{"class":51},[45,169313,169266],{"class":313},[45,169315,215],{"class":51},[45,169317,169318,169321,169324,169326,169328],{"class":47,"line":1277},[45,169319,169320],{"class":51},"data_dir.mkdir(",[45,169322,169323],{"class":5299},"exist_ok",[45,169325,254],{"class":93},[45,169327,31557],{"class":257},[45,169329,215],{"class":51},[10,169331,169332],{},"判断文件是否存在：",[35,169334,169336],{"className":37,"code":169335,"language":39,"meta":40,"style":40},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[42,169337,169338,169351,169355,169362],{"__ignoreMap":40},[45,169339,169340,169342,169344,169346,169349],{"class":47,"line":48},[45,169341,168362],{"class":51},[45,169343,254],{"class":93},[45,169345,108596],{"class":51},[45,169347,169348],{"class":313},"\"data\u002Fstudents.txt\"",[45,169350,215],{"class":51},[45,169352,169353],{"class":47,"line":125},[45,169354,2483],{"emptyLinePlaceholder":133},[45,169356,169357,169359],{"class":47,"line":1262},[45,169358,1614],{"class":93},[45,169360,169361],{"class":51}," path.exists():\n",[45,169363,169364,169366,169368,169371],{"class":47,"line":1277},[45,169365,31380],{"class":257},[45,169367,209],{"class":51},[45,169369,169370],{"class":313},"\"文件存在\"",[45,169372,215],{"class":51},[10,169374,169375],{},"读写文本：",[35,169377,169379],{"className":37,"code":169378,"language":39,"meta":40,"style":40},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[42,169380,169381,169393,169397,169414,169431],{"__ignoreMap":40},[45,169382,169383,169385,169387,169389,169391],{"class":47,"line":48},[45,169384,168362],{"class":51},[45,169386,254],{"class":93},[45,169388,108596],{"class":51},[45,169390,146847],{"class":313},[45,169392,215],{"class":51},[45,169394,169395],{"class":47,"line":125},[45,169396,2483],{"emptyLinePlaceholder":133},[45,169398,169399,169402,169404,169406,169408,169410,169412],{"class":47,"line":1262},[45,169400,169401],{"class":51},"path.write_text(",[45,169403,145927],{"class":313},[45,169405,12518],{"class":51},[45,169407,146857],{"class":5299},[45,169409,254],{"class":93},[45,169411,146862],{"class":313},[45,169413,215],{"class":51},[45,169415,169416,169418,169420,169423,169425,169427,169429],{"class":47,"line":1277},[45,169417,168545],{"class":51},[45,169419,254],{"class":93},[45,169421,169422],{"class":51}," path.read_text(",[45,169424,146857],{"class":5299},[45,169426,254],{"class":93},[45,169428,146862],{"class":313},[45,169430,215],{"class":51},[45,169432,169433,169435],{"class":47,"line":1283},[45,169434,30496],{"class":257},[45,169436,168559],{"class":51},[30,169438,169440],{"id":169439},"_810-json文件","8.10 JSON文件",[10,169442,169443],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[35,169445,169447],{"className":37,"code":169446,"language":39,"meta":40,"style":40},"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",[42,169448,169449,169455,169459,169467,169477,169487,169495,169499,169503,169528],{"__ignoreMap":40},[45,169450,169451,169453],{"class":47,"line":48},[45,169452,30473],{"class":93},[45,169454,147142],{"class":51},[45,169456,169457],{"class":47,"line":125},[45,169458,2483],{"emptyLinePlaceholder":133},[45,169460,169461,169463,169465],{"class":47,"line":1262},[45,169462,149532],{"class":51},[45,169464,254],{"class":93},[45,169466,15655],{"class":51},[45,169468,169469,169471,169473,169475],{"class":47,"line":1277},[45,169470,147071],{"class":313},[45,169472,51518],{"class":51},[45,169474,149939],{"class":313},[45,169476,31547],{"class":51},[45,169478,169479,169481,169483,169485],{"class":47,"line":1283},[45,169480,164588],{"class":313},[45,169482,51518],{"class":51},[45,169484,857],{"class":257},[45,169486,31547],{"class":51},[45,169488,169489,169491,169493],{"class":47,"line":1297},[45,169490,164599],{"class":313},[45,169492,51518],{"class":51},[45,169494,164604],{"class":257},[45,169496,169497],{"class":47,"line":1303},[45,169498,1648],{"class":51},[45,169500,169501],{"class":47,"line":1394},[45,169502,2483],{"emptyLinePlaceholder":133},[45,169504,169505,169507,169509,169512,169514,169516,169518,169520,169522,169524,169526],{"class":47,"line":1400},[45,169506,156495],{"class":51},[45,169508,254],{"class":93},[45,169510,169511],{"class":51}," json.dumps(student, ",[45,169513,147188],{"class":5299},[45,169515,254],{"class":93},[45,169517,34068],{"class":257},[45,169519,12518],{"class":51},[45,169521,152063],{"class":5299},[45,169523,254],{"class":93},[45,169525,286],{"class":257},[45,169527,215],{"class":51},[45,169529,169530,169532],{"class":47,"line":1412},[45,169531,30496],{"class":257},[45,169533,164122],{"class":51},[10,169535,169536],{},"写入 JSON 文件：",[35,169538,169540],{"className":37,"code":169539,"language":39,"meta":40,"style":40},"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",[42,169541,169542,169548,169552,169560,169588,169616,169620,169624,169654],{"__ignoreMap":40},[45,169543,169544,169546],{"class":47,"line":48},[45,169545,30473],{"class":93},[45,169547,147142],{"class":51},[45,169549,169550],{"class":47,"line":125},[45,169551,2483],{"emptyLinePlaceholder":133},[45,169553,169554,169556,169558],{"class":47,"line":1262},[45,169555,159767],{"class":51},[45,169557,254],{"class":93},[45,169559,55528],{"class":51},[45,169561,169562,169564,169566,169568,169570,169572,169574,169576,169578,169580,169582,169584,169586],{"class":47,"line":1277},[45,169563,148436],{"class":51},[45,169565,62760],{"class":313},[45,169567,51518],{"class":51},[45,169569,149939],{"class":313},[45,169571,12518],{"class":51},[45,169573,69205],{"class":313},[45,169575,51518],{"class":51},[45,169577,857],{"class":257},[45,169579,12518],{"class":51},[45,169581,151523],{"class":313},[45,169583,51518],{"class":51},[45,169585,1196],{"class":257},[45,169587,5013],{"class":51},[45,169589,169590,169592,169594,169596,169598,169600,169602,169604,169606,169608,169610,169612,169614],{"class":47,"line":1283},[45,169591,148436],{"class":51},[45,169593,62760],{"class":313},[45,169595,51518],{"class":51},[45,169597,150987],{"class":313},[45,169599,12518],{"class":51},[45,169601,69205],{"class":313},[45,169603,51518],{"class":51},[45,169605,832],{"class":257},[45,169607,12518],{"class":51},[45,169609,151523],{"class":313},[45,169611,51518],{"class":51},[45,169613,1018],{"class":257},[45,169615,5013],{"class":51},[45,169617,169618],{"class":47,"line":1297},[45,169619,33327],{"class":51},[45,169621,169622],{"class":47,"line":1303},[45,169623,2483],{"emptyLinePlaceholder":133},[45,169625,169626,169628,169630,169632,169634,169636,169638,169640,169642,169644,169646,169648,169650,169652],{"class":47,"line":1394},[45,169627,107884],{"class":93},[45,169629,146842],{"class":257},[45,169631,209],{"class":51},[45,169633,151882],{"class":313},[45,169635,12518],{"class":51},[45,169637,152027],{"class":313},[45,169639,12518],{"class":51},[45,169641,146857],{"class":5299},[45,169643,254],{"class":93},[45,169645,146862],{"class":313},[45,169647,13797],{"class":51},[45,169649,31464],{"class":93},[45,169651,148204],{"class":5299},[45,169653,3822],{"class":51},[45,169655,169656,169659,169661,169663,169665,169667,169669,169671,169673,169675,169677],{"class":47,"line":1400},[45,169657,169658],{"class":51},"    json.dump(students, ",[45,169660,45435],{"class":5299},[45,169662,12518],{"class":51},[45,169664,147188],{"class":5299},[45,169666,254],{"class":93},[45,169668,34068],{"class":257},[45,169670,12518],{"class":51},[45,169672,152063],{"class":5299},[45,169674,254],{"class":93},[45,169676,286],{"class":257},[45,169678,215],{"class":51},[10,169680,169681],{},"读取 JSON 文件：",[35,169683,169685],{"className":37,"code":169684,"language":39,"meta":40,"style":40},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[42,169686,169687,169693,169697,169727,169739,169743],{"__ignoreMap":40},[45,169688,169689,169691],{"class":47,"line":48},[45,169690,30473],{"class":93},[45,169692,147142],{"class":51},[45,169694,169695],{"class":47,"line":125},[45,169696,2483],{"emptyLinePlaceholder":133},[45,169698,169699,169701,169703,169705,169707,169709,169711,169713,169715,169717,169719,169721,169723,169725],{"class":47,"line":1262},[45,169700,107884],{"class":93},[45,169702,146842],{"class":257},[45,169704,209],{"class":51},[45,169706,151882],{"class":313},[45,169708,12518],{"class":51},[45,169710,146852],{"class":313},[45,169712,12518],{"class":51},[45,169714,146857],{"class":5299},[45,169716,254],{"class":93},[45,169718,146862],{"class":313},[45,169720,13797],{"class":51},[45,169722,31464],{"class":93},[45,169724,148204],{"class":5299},[45,169726,3822],{"class":51},[45,169728,169729,169731,169733,169735,169737],{"class":47,"line":1277},[45,169730,153088],{"class":51},[45,169732,254],{"class":93},[45,169734,148215],{"class":51},[45,169736,45435],{"class":5299},[45,169738,215],{"class":51},[45,169740,169741],{"class":47,"line":1283},[45,169742,2483],{"emptyLinePlaceholder":133},[45,169744,169745,169747],{"class":47,"line":1297},[45,169746,30496],{"class":257},[45,169748,165046],{"class":51},[30,169750,169752],{"id":169751},"_811-csv文件","8.11 CSV文件",[10,169754,169755],{},"CSV 是逗号分隔值，常用于表格数据。",[10,169757,169758],{},"写入 CSV：",[35,169760,169762],{"className":37,"code":169761,"language":39,"meta":40,"style":40},"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",[42,169763,169764,169771,169775,169783,169801,169817,169833,169837,169841,169881,169895],{"__ignoreMap":40},[45,169765,169766,169768],{"class":47,"line":48},[45,169767,30473],{"class":93},[45,169769,169770],{"class":51}," csv\n",[45,169772,169773],{"class":47,"line":125},[45,169774,2483],{"emptyLinePlaceholder":133},[45,169776,169777,169779,169781],{"class":47,"line":1262},[45,169778,159767],{"class":51},[45,169780,254],{"class":93},[45,169782,55528],{"class":51},[45,169784,169785,169788,169790,169792,169794,169796,169799],{"class":47,"line":1277},[45,169786,169787],{"class":51},"    [",[45,169789,73180],{"class":313},[45,169791,12518],{"class":51},[45,169793,73213],{"class":313},[45,169795,12518],{"class":51},[45,169797,169798],{"class":313},"\"成绩\"",[45,169800,87917],{"class":51},[45,169802,169803,169805,169807,169809,169811,169813,169815],{"class":47,"line":1283},[45,169804,169787],{"class":51},[45,169806,149939],{"class":313},[45,169808,12518],{"class":51},[45,169810,857],{"class":257},[45,169812,12518],{"class":51},[45,169814,1196],{"class":257},[45,169816,87917],{"class":51},[45,169818,169819,169821,169823,169825,169827,169829,169831],{"class":47,"line":1297},[45,169820,169787],{"class":51},[45,169822,150987],{"class":313},[45,169824,12518],{"class":51},[45,169826,832],{"class":257},[45,169828,12518],{"class":51},[45,169830,1018],{"class":257},[45,169832,87917],{"class":51},[45,169834,169835],{"class":47,"line":1303},[45,169836,33327],{"class":51},[45,169838,169839],{"class":47,"line":1394},[45,169840,2483],{"emptyLinePlaceholder":133},[45,169842,169843,169845,169847,169849,169852,169854,169856,169858,169860,169862,169864,169866,169869,169871,169873,169875,169877,169879],{"class":47,"line":1400},[45,169844,107884],{"class":93},[45,169846,146842],{"class":257},[45,169848,209],{"class":51},[45,169850,169851],{"class":313},"\"students.csv\"",[45,169853,12518],{"class":51},[45,169855,152027],{"class":313},[45,169857,12518],{"class":51},[45,169859,146857],{"class":5299},[45,169861,254],{"class":93},[45,169863,146862],{"class":313},[45,169865,12518],{"class":51},[45,169867,169868],{"class":5299},"newline",[45,169870,254],{"class":93},[45,169872,7735],{"class":313},[45,169874,13797],{"class":51},[45,169876,31464],{"class":93},[45,169878,148204],{"class":5299},[45,169880,3822],{"class":51},[45,169882,169883,169886,169888,169891,169893],{"class":47,"line":1412},[45,169884,169885],{"class":51},"    writer ",[45,169887,254],{"class":93},[45,169889,169890],{"class":51}," csv.writer(",[45,169892,45435],{"class":5299},[45,169894,215],{"class":51},[45,169896,169897],{"class":47,"line":1695},[45,169898,169899],{"class":51},"    writer.writerows(students)\n",[10,169901,169902],{},"读取 CSV：",[35,169904,169906],{"className":37,"code":169905,"language":39,"meta":40,"style":40},"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",[42,169907,169908,169914,169918,169948,169962,169974],{"__ignoreMap":40},[45,169909,169910,169912],{"class":47,"line":48},[45,169911,30473],{"class":93},[45,169913,169770],{"class":51},[45,169915,169916],{"class":47,"line":125},[45,169917,2483],{"emptyLinePlaceholder":133},[45,169919,169920,169922,169924,169926,169928,169930,169932,169934,169936,169938,169940,169942,169944,169946],{"class":47,"line":1262},[45,169921,107884],{"class":93},[45,169923,146842],{"class":257},[45,169925,209],{"class":51},[45,169927,169851],{"class":313},[45,169929,12518],{"class":51},[45,169931,146852],{"class":313},[45,169933,12518],{"class":51},[45,169935,146857],{"class":5299},[45,169937,254],{"class":93},[45,169939,146862],{"class":313},[45,169941,13797],{"class":51},[45,169943,31464],{"class":93},[45,169945,148204],{"class":5299},[45,169947,3822],{"class":51},[45,169949,169950,169953,169955,169958,169960],{"class":47,"line":1277},[45,169951,169952],{"class":51},"    reader ",[45,169954,254],{"class":93},[45,169956,169957],{"class":51}," csv.reader(",[45,169959,45435],{"class":5299},[45,169961,215],{"class":51},[45,169963,169964,169966,169969,169971],{"class":47,"line":1283},[45,169965,3284],{"class":93},[45,169967,169968],{"class":51}," row ",[45,169970,26126],{"class":93},[45,169972,169973],{"class":51}," reader:\n",[45,169975,169976,169978],{"class":47,"line":1297},[45,169977,32532],{"class":257},[45,169979,169980],{"class":51},"(row)\n",[10,169982,169983],{},"使用字典写入：",[35,169985,169987],{"className":37,"code":169986,"language":39,"meta":40,"style":40},"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",[42,169988,169989,169995,169999,170007,170035,170063,170067,170071,170109,170130,170151,170156],{"__ignoreMap":40},[45,169990,169991,169993],{"class":47,"line":48},[45,169992,30473],{"class":93},[45,169994,169770],{"class":51},[45,169996,169997],{"class":47,"line":125},[45,169998,2483],{"emptyLinePlaceholder":133},[45,170000,170001,170003,170005],{"class":47,"line":1262},[45,170002,159767],{"class":51},[45,170004,254],{"class":93},[45,170006,55528],{"class":51},[45,170008,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033],{"class":47,"line":1277},[45,170010,148436],{"class":51},[45,170012,62760],{"class":313},[45,170014,51518],{"class":51},[45,170016,149939],{"class":313},[45,170018,12518],{"class":51},[45,170020,69205],{"class":313},[45,170022,51518],{"class":51},[45,170024,857],{"class":257},[45,170026,12518],{"class":51},[45,170028,151523],{"class":313},[45,170030,51518],{"class":51},[45,170032,1196],{"class":257},[45,170034,5013],{"class":51},[45,170036,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057,170059,170061],{"class":47,"line":1283},[45,170038,148436],{"class":51},[45,170040,62760],{"class":313},[45,170042,51518],{"class":51},[45,170044,150987],{"class":313},[45,170046,12518],{"class":51},[45,170048,69205],{"class":313},[45,170050,51518],{"class":51},[45,170052,832],{"class":257},[45,170054,12518],{"class":51},[45,170056,151523],{"class":313},[45,170058,51518],{"class":51},[45,170060,1018],{"class":257},[45,170062,5013],{"class":51},[45,170064,170065],{"class":47,"line":1297},[45,170066,33327],{"class":51},[45,170068,170069],{"class":47,"line":1303},[45,170070,2483],{"emptyLinePlaceholder":133},[45,170072,170073,170075,170077,170079,170081,170083,170085,170087,170089,170091,170093,170095,170097,170099,170101,170103,170105,170107],{"class":47,"line":1394},[45,170074,107884],{"class":93},[45,170076,146842],{"class":257},[45,170078,209],{"class":51},[45,170080,169851],{"class":313},[45,170082,12518],{"class":51},[45,170084,152027],{"class":313},[45,170086,12518],{"class":51},[45,170088,146857],{"class":5299},[45,170090,254],{"class":93},[45,170092,146862],{"class":313},[45,170094,12518],{"class":51},[45,170096,169868],{"class":5299},[45,170098,254],{"class":93},[45,170100,7735],{"class":313},[45,170102,13797],{"class":51},[45,170104,31464],{"class":93},[45,170106,148204],{"class":5299},[45,170108,3822],{"class":51},[45,170110,170111,170114,170116,170118,170120,170122,170124,170126,170128],{"class":47,"line":1400},[45,170112,170113],{"class":51},"    fieldnames ",[45,170115,254],{"class":93},[45,170117,52307],{"class":51},[45,170119,62760],{"class":313},[45,170121,12518],{"class":51},[45,170123,69205],{"class":313},[45,170125,12518],{"class":51},[45,170127,151523],{"class":313},[45,170129,33327],{"class":51},[45,170131,170132,170134,170136,170139,170141,170143,170146,170148],{"class":47,"line":1412},[45,170133,169885],{"class":51},[45,170135,254],{"class":93},[45,170137,170138],{"class":51}," csv.DictWriter(",[45,170140,45435],{"class":5299},[45,170142,12518],{"class":51},[45,170144,170145],{"class":5299},"fieldnames",[45,170147,254],{"class":93},[45,170149,170150],{"class":51},"fieldnames)\n",[45,170152,170153],{"class":47,"line":1695},[45,170154,170155],{"class":51},"    writer.writeheader()\n",[45,170157,170158],{"class":47,"line":1700},[45,170159,169899],{"class":51},[30,170161,170163],{"id":170162},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[10,170165,123343],{},[159,170167,170168,170171,170174],{},[162,170169,170170],{},"读取文本文件。",[162,170172,170173],{},"统计每个单词出现次数。",[162,170175,170176],{},"输出出现次数最多的前 10 个单词。",[10,170178,10118],{},[35,170180,170182],{"className":37,"code":170181,"language":39,"meta":40,"style":40},"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",[42,170183,170184,170194,170198,170211,170227,170231,170241,170250,170254,170266,170286,170295,170299,170317,170321,170351,170355,170371],{"__ignoreMap":40},[45,170185,170186,170188,170190,170192],{"class":47,"line":48},[45,170187,30818],{"class":93},[45,170189,108362],{"class":51},[45,170191,30473],{"class":93},[45,170193,108367],{"class":51},[45,170195,170196],{"class":47,"line":125},[45,170197,2483],{"emptyLinePlaceholder":133},[45,170199,170200,170202,170204,170206,170209],{"class":47,"line":1262},[45,170201,168362],{"class":51},[45,170203,254],{"class":93},[45,170205,108596],{"class":51},[45,170207,170208],{"class":313},"\"article.txt\"",[45,170210,215],{"class":51},[45,170212,170213,170215,170217,170219,170221,170223,170225],{"class":47,"line":1277},[45,170214,168545],{"class":51},[45,170216,254],{"class":93},[45,170218,169422],{"class":51},[45,170220,146857],{"class":5299},[45,170222,254],{"class":93},[45,170224,146862],{"class":313},[45,170226,215],{"class":51},[45,170228,170229],{"class":47,"line":1283},[45,170230,2483],{"emptyLinePlaceholder":133},[45,170232,170233,170236,170238],{"class":47,"line":1297},[45,170234,170235],{"class":51},"words ",[45,170237,254],{"class":93},[45,170239,170240],{"class":51}," content.lower().split()\n",[45,170242,170243,170246,170248],{"class":47,"line":1303},[45,170244,170245],{"class":51},"counter ",[45,170247,254],{"class":93},[45,170249,87949],{"class":51},[45,170251,170252],{"class":47,"line":1394},[45,170253,2483],{"emptyLinePlaceholder":133},[45,170255,170256,170258,170261,170263],{"class":47,"line":1400},[45,170257,3108],{"class":93},[45,170259,170260],{"class":51}," word ",[45,170262,26126],{"class":93},[45,170264,170265],{"class":51}," words:\n",[45,170267,170268,170271,170273,170276,170279,170281,170284],{"class":47,"line":1412},[45,170269,170270],{"class":51},"    word ",[45,170272,254],{"class":93},[45,170274,170275],{"class":51}," word.strip(",[45,170277,170278],{"class":313},"\".,!?;:",[45,170280,156546],{"class":257},[45,170282,170283],{"class":313},"'()[]\"",[45,170285,215],{"class":51},[45,170287,170288,170290,170292],{"class":47,"line":1695},[45,170289,3184],{"class":93},[45,170291,39011],{"class":93},[45,170293,170294],{"class":51}," word:\n",[45,170296,170297],{"class":47,"line":1700},[45,170298,148563],{"class":93},[45,170300,170301,170304,170306,170309,170311,170313,170315],{"class":47,"line":1706},[45,170302,170303],{"class":51},"    counter[word] ",[45,170305,254],{"class":93},[45,170307,170308],{"class":51}," counter.get(word, ",[45,170310,400],{"class":257},[45,170312,13797],{"class":51},[45,170314,689],{"class":93},[45,170316,55780],{"class":257},[45,170318,170319],{"class":47,"line":1711},[45,170320,2483],{"emptyLinePlaceholder":133},[45,170322,170323,170326,170328,170330,170333,170335,170337,170339,170341,170343,170345,170347,170349],{"class":47,"line":1725},[45,170324,170325],{"class":51},"items ",[45,170327,254],{"class":93},[45,170329,163655],{"class":257},[45,170331,170332],{"class":51},"(counter.items(), ",[45,170334,153997],{"class":5299},[45,170336,154000],{"class":93},[45,170338,154003],{"class":51},[45,170340,426],{"class":257},[45,170342,112253],{"class":51},[45,170344,163579],{"class":5299},[45,170346,254],{"class":93},[45,170348,31557],{"class":257},[45,170350,215],{"class":51},[45,170352,170353],{"class":47,"line":1730},[45,170354,2483],{"emptyLinePlaceholder":133},[45,170356,170357,170359,170362,170364,170367,170369],{"class":47,"line":1736},[45,170358,3108],{"class":93},[45,170360,170361],{"class":51}," word, count ",[45,170363,26126],{"class":93},[45,170365,170366],{"class":51}," items[:",[45,170368,654],{"class":257},[45,170370,165806],{"class":51},[45,170372,170373,170375],{"class":47,"line":1757},[45,170374,31380],{"class":257},[45,170376,170377],{"class":51},"(word, count)\n",[30,170379,170381],{"id":170380},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[35,170383,170385],{"className":37,"code":170384,"language":39,"meta":40,"style":40},"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",[42,170386,170387,170393,170403,170407,170419,170423,170427,170435,170445,170451,170455,170485,170495,170499,170503,170511,170541,170565,170569,170573,170581,170610,170615],{"__ignoreMap":40},[45,170388,170389,170391],{"class":47,"line":48},[45,170390,30473],{"class":93},[45,170392,147142],{"class":51},[45,170394,170395,170397,170399,170401],{"class":47,"line":125},[45,170396,30818],{"class":93},[45,170398,108362],{"class":51},[45,170400,30473],{"class":93},[45,170402,108367],{"class":51},[45,170404,170405],{"class":47,"line":1262},[45,170406,2483],{"emptyLinePlaceholder":133},[45,170408,170409,170411,170413,170415,170417],{"class":47,"line":1277},[45,170410,151875],{"class":257},[45,170412,13647],{"class":93},[45,170414,108596],{"class":51},[45,170416,151882],{"class":313},[45,170418,215],{"class":51},[45,170420,170421],{"class":47,"line":1283},[45,170422,2483],{"emptyLinePlaceholder":133},[45,170424,170425],{"class":47,"line":1297},[45,170426,2483],{"emptyLinePlaceholder":133},[45,170428,170429,170431,170433],{"class":47,"line":1303},[45,170430,32028],{"class":93},[45,170432,151899],{"class":2046},[45,170434,32034],{"class":51},[45,170436,170437,170439,170441,170443],{"class":47,"line":1394},[45,170438,3184],{"class":93},[45,170440,39011],{"class":93},[45,170442,151910],{"class":257},[45,170444,151913],{"class":51},[45,170446,170447,170449],{"class":47,"line":1400},[45,170448,14835],{"class":93},[45,170450,51919],{"class":51},[45,170452,170453],{"class":47,"line":1412},[45,170454,2483],{"emptyLinePlaceholder":133},[45,170456,170457,170459,170461,170463,170465,170467,170469,170471,170473,170475,170477,170479,170481,170483],{"class":47,"line":1695},[45,170458,34259],{"class":93},[45,170460,146842],{"class":257},[45,170462,209],{"class":51},[45,170464,151875],{"class":257},[45,170466,12518],{"class":51},[45,170468,146852],{"class":313},[45,170470,12518],{"class":51},[45,170472,146857],{"class":5299},[45,170474,254],{"class":93},[45,170476,146862],{"class":313},[45,170478,13797],{"class":51},[45,170480,31464],{"class":93},[45,170482,148204],{"class":5299},[45,170484,3822],{"class":51},[45,170486,170487,170489,170491,170493],{"class":47,"line":1700},[45,170488,14835],{"class":93},[45,170490,148215],{"class":51},[45,170492,45435],{"class":5299},[45,170494,215],{"class":51},[45,170496,170497],{"class":47,"line":1706},[45,170498,2483],{"emptyLinePlaceholder":133},[45,170500,170501],{"class":47,"line":1711},[45,170502,2483],{"emptyLinePlaceholder":133},[45,170504,170505,170507,170509],{"class":47,"line":1725},[45,170506,32028],{"class":93},[45,170508,152009],{"class":2046},[45,170510,152012],{"class":51},[45,170512,170513,170515,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535,170537,170539],{"class":47,"line":1730},[45,170514,34259],{"class":93},[45,170516,146842],{"class":257},[45,170518,209],{"class":51},[45,170520,151875],{"class":257},[45,170522,12518],{"class":51},[45,170524,152027],{"class":313},[45,170526,12518],{"class":51},[45,170528,146857],{"class":5299},[45,170530,254],{"class":93},[45,170532,146862],{"class":313},[45,170534,13797],{"class":51},[45,170536,31464],{"class":93},[45,170538,148204],{"class":5299},[45,170540,3822],{"class":51},[45,170542,170543,170545,170547,170549,170551,170553,170555,170557,170559,170561,170563],{"class":47,"line":1736},[45,170544,152048],{"class":51},[45,170546,45435],{"class":5299},[45,170548,12518],{"class":51},[45,170550,147188],{"class":5299},[45,170552,254],{"class":93},[45,170554,34068],{"class":257},[45,170556,12518],{"class":51},[45,170558,152063],{"class":5299},[45,170560,254],{"class":93},[45,170562,286],{"class":257},[45,170564,215],{"class":51},[45,170566,170567],{"class":47,"line":1757},[45,170568,2483],{"emptyLinePlaceholder":133},[45,170570,170571],{"class":47,"line":1762},[45,170572,2483],{"emptyLinePlaceholder":133},[45,170574,170575,170577,170579],{"class":47,"line":1776},[45,170576,159767],{"class":51},[45,170578,254],{"class":93},[45,170580,153093],{"class":51},[45,170582,170583,170586,170588,170590,170592,170594,170596,170598,170600,170602,170604,170606,170608],{"class":47,"line":1781},[45,170584,170585],{"class":51},"students.append({",[45,170587,62760],{"class":313},[45,170589,51518],{"class":51},[45,170591,149939],{"class":313},[45,170593,12518],{"class":51},[45,170595,69205],{"class":313},[45,170597,51518],{"class":51},[45,170599,857],{"class":257},[45,170601,12518],{"class":51},[45,170603,151523],{"class":313},[45,170605,51518],{"class":51},[45,170607,1196],{"class":257},[45,170609,165203],{"class":51},[45,170611,170612],{"class":47,"line":1810},[45,170613,170614],{"class":51},"save_students(students)\n",[45,170616,170617,170619,170621,170624],{"class":47,"line":1815},[45,170618,30496],{"class":257},[45,170620,209],{"class":51},[45,170622,170623],{"class":313},"\"保存成功\"",[45,170625,215],{"class":51},[30,170627,170629],{"id":170628},"_814-易错点","8.14 易错点",[159,170631,170632,170636,170642,170647,170654,170661],{},[162,170633,170634,168895],{},[42,170635,1002],{},[162,170637,170638,170639,28468],{},"读写中文要指定 ",[42,170640,170641],{},"encoding=\"utf-8\"",[162,170643,170644,170645,28468],{},"打开文件后要关闭，推荐使用 ",[42,170646,107884],{},[162,170648,170649,170650,170653],{},"读取大文件不要直接 ",[42,170651,170652],{},"read()"," 全部内容。",[162,170655,170656,170657,170660],{},"Windows 写 CSV 时建议加 ",[42,170658,170659],{},"newline=\"\"","，避免空行。",[162,170662,170663],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[30,170665,170667],{"id":170666},"_815-本章练习","8.15 本章练习",[159,170669,170670,170677,170682,170685,170688],{},[162,170671,170672,170673,170676],{},"写入一个 ",[42,170674,170675],{},"students.txt","，每行保存一个学生姓名。",[162,170678,104406,170679,170681],{},[42,170680,170675],{}," 并输出所有学生。",[162,170683,170684],{},"把学生列表保存为 JSON 文件。",[162,170686,170687],{},"从 JSON 文件读取学生数据，计算平均分。",[162,170689,170690,170691,170694,170695,170698],{},"写一个日志函数 ",[42,170692,170693],{},"write_log(message)","，每次调用向 ",[42,170696,170697],{},"app.log"," 追加一行。",[121,170700,170701],{},"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":40,"searchDepth":125,"depth":125,"links":170703},[170704,170705,170709,170710,170716,170717,170718,170719,170720,170721,170722,170723,170724,170725,170726],{"id":168215,"depth":125,"text":168216},{"id":168256,"depth":125,"text":168257,"children":170706},[170707,170708],{"id":168260,"depth":1262,"text":168261},{"id":168294,"depth":1262,"text":168295},{"id":168408,"depth":125,"text":168409},{"id":168501,"depth":125,"text":168502,"children":170711},[170712,170713,170714,170715],{"id":168505,"depth":1262,"text":168506},{"id":168592,"depth":1262,"text":168593},{"id":168662,"depth":1262,"text":168663},{"id":168756,"depth":1262,"text":168757},{"id":168826,"depth":125,"text":168827},{"id":168889,"depth":125,"text":168890},{"id":169050,"depth":125,"text":169051},{"id":169113,"depth":125,"text":169114},{"id":169229,"depth":125,"text":169230},{"id":169439,"depth":125,"text":169440},{"id":169751,"depth":125,"text":169752},{"id":170162,"depth":125,"text":170163},{"id":170380,"depth":125,"text":170381},{"id":170628,"depth":125,"text":170629},{"id":170666,"depth":125,"text":170667},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168207,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170733,"title":170734,"body":170735,"description":130,"extension":131,"meta":172921,"navigation":133,"path":172922,"seo":172923,"stem":172924,"__hash__":172925},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170736,"toc":172888},[170737,170740,170744,170747,170750,170842,170844,170863,170868,170872,170875,170878,170907,170914,170917,170921,170924,170953,170955,171007,171013,171066,171070,171168,171171,171238,171242,171299,171301,171307,171311,171316,171322,171413,171418,171422,171425,171503,171506,171544,171548,171666,171669,171673,171676,171721,171724,171728,171733,171739,171789,171792,171823,171827,171831,171861,171865,171900,171904,171939,171979,171983,171999,172002,172006,172010,172089,172093,172134,172138,172193,172197,172231,172235,172265,172274,172281,172287,172344,172347,172355,172358,172362,172369,172372,172378,172381,172398,172403,172407,172413,172426,172429,172466,172469,172480,172483,172497,172500,172514,172518,172525,172558,172561,172563,172569,172572,172576,172578,172584,172589,172762,172766,172829,172833,172857,172861,172885],[20,170738,170734],{"id":170739},"_9-异常模块与包",[30,170741,170743],{"id":170742},"_91-什么是异常","9.1 什么是异常",[10,170745,170746],{},"异常是程序运行过程中出现的错误。",[10,170748,170749],{},"常见异常：",[346,170751,170752,170761],{},[349,170753,170754],{},[352,170755,170756,170759],{},[355,170757,170758],{},"异常",[355,170760,25952],{},[393,170762,170763,170773,170783,170792,170802,170812,170822,170832],{},[352,170764,170765,170770],{},[398,170766,170767],{},[42,170768,170769],{},"NameError",[398,170771,170772],{},"使用了未定义变量",[352,170774,170775,170780],{},[398,170776,170777],{},[42,170778,170779],{},"TypeError",[398,170781,170782],{},"类型不匹配",[352,170784,170785,170789],{},[398,170786,170787],{},[42,170788,154885],{},[398,170790,170791],{},"值不合法",[352,170793,170794,170799],{},[398,170795,170796],{},[42,170797,170798],{},"IndexError",[398,170800,170801],{},"列表索引越界",[352,170803,170804,170809],{},[398,170805,170806],{},[42,170807,170808],{},"KeyError",[398,170810,170811],{},"字典 key 不存在",[352,170813,170814,170819],{},[398,170815,170816],{},[42,170817,170818],{},"FileNotFoundError",[398,170820,170821],{},"文件不存在",[352,170823,170824,170829],{},[398,170825,170826],{},[42,170827,170828],{},"ZeroDivisionError",[398,170830,170831],{},"除数为 0",[352,170833,170834,170839],{},[398,170835,170836],{},[42,170837,170838],{},"ImportError",[398,170840,170841],{},"导入失败",[10,170843,15218],{},[35,170845,170847],{"className":37,"code":170846,"language":39,"meta":40,"style":40},"num = int(\"abc\")\n",[42,170848,170849],{"__ignoreMap":40},[45,170850,170851,170853,170855,170857,170859,170861],{"class":47,"line":48},[45,170852,155838],{"class":51},[45,170854,254],{"class":93},[45,170856,2465],{"class":257},[45,170858,209],{"class":51},[45,170860,155931],{"class":313},[45,170862,215],{"class":51},[10,170864,170865,170866,28468],{},"会触发 ",[42,170867,154885],{},[30,170869,170871],{"id":170870},"_92-为什么要处理异常","9.2 为什么要处理异常",[10,170873,170874],{},"如果不处理异常，程序会直接终止。",[10,170876,170877],{},"例如用户输入年龄：",[35,170879,170881],{"className":37,"code":170880,"language":39,"meta":40,"style":40},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[42,170882,170883,170901],{"__ignoreMap":40},[45,170884,170885,170887,170889,170891,170893,170895,170897,170899],{"class":47,"line":48},[45,170886,146597],{"class":51},[45,170888,254],{"class":93},[45,170890,2465],{"class":257},[45,170892,209],{"class":51},[45,170894,53902],{"class":257},[45,170896,209],{"class":51},[45,170898,152445],{"class":313},[45,170900,30578],{"class":51},[45,170902,170903,170905],{"class":47,"line":125},[45,170904,30496],{"class":257},[45,170906,155812],{"class":51},[10,170908,170909,170910,170913],{},"用户输入 ",[42,170911,170912],{},"abc","，程序就会报错退出。",[10,170915,170916],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[30,170918,170920],{"id":170919},"_93-try-except","9.3 try except",[10,170922,170923],{},"基础语法：",[35,170925,170927],{"className":37,"code":170926,"language":39,"meta":40,"style":40},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[42,170928,170929,170936,170941,170948],{"__ignoreMap":40},[45,170930,170931,170934],{"class":47,"line":48},[45,170932,170933],{"class":93},"try",[45,170935,3822],{"class":51},[45,170937,170938],{"class":47,"line":125},[45,170939,170940],{"class":51},"    可能出错的代码\n",[45,170942,170943,170946],{"class":47,"line":1262},[45,170944,170945],{"class":93},"except",[45,170947,3822],{"class":51},[45,170949,170950],{"class":47,"line":1277},[45,170951,170952],{"class":51},"    出错后的处理代码\n",[10,170954,15218],{},[35,170956,170958],{"className":37,"code":170957,"language":39,"meta":40,"style":40},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[42,170959,170960,170966,170984,170990,170996],{"__ignoreMap":40},[45,170961,170962,170964],{"class":47,"line":48},[45,170963,170933],{"class":93},[45,170965,3822],{"class":51},[45,170967,170968,170970,170972,170974,170976,170978,170980,170982],{"class":47,"line":125},[45,170969,152437],{"class":51},[45,170971,254],{"class":93},[45,170973,2465],{"class":257},[45,170975,209],{"class":51},[45,170977,53902],{"class":257},[45,170979,209],{"class":51},[45,170981,152445],{"class":313},[45,170983,30578],{"class":51},[45,170985,170986,170988],{"class":47,"line":1262},[45,170987,31380],{"class":257},[45,170989,155812],{"class":51},[45,170991,170992,170994],{"class":47,"line":1277},[45,170993,170945],{"class":93},[45,170995,3822],{"class":51},[45,170997,170998,171000,171002,171005],{"class":47,"line":1283},[45,170999,31380],{"class":257},[45,171001,209],{"class":51},[45,171003,171004],{"class":313},"\"年龄必须是数字\"",[45,171006,215],{"class":51},[10,171008,171009,171010,171012],{},"不建议裸写 ",[42,171011,170945],{},"，最好指定异常类型。",[35,171014,171016],{"className":37,"code":171015,"language":39,"meta":40,"style":40},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[42,171017,171018,171024,171042,171048,171056],{"__ignoreMap":40},[45,171019,171020,171022],{"class":47,"line":48},[45,171021,170933],{"class":93},[45,171023,3822],{"class":51},[45,171025,171026,171028,171030,171032,171034,171036,171038,171040],{"class":47,"line":125},[45,171027,152437],{"class":51},[45,171029,254],{"class":93},[45,171031,2465],{"class":257},[45,171033,209],{"class":51},[45,171035,53902],{"class":257},[45,171037,209],{"class":51},[45,171039,152445],{"class":313},[45,171041,30578],{"class":51},[45,171043,171044,171046],{"class":47,"line":1262},[45,171045,31380],{"class":257},[45,171047,155812],{"class":51},[45,171049,171050,171052,171054],{"class":47,"line":1277},[45,171051,170945],{"class":93},[45,171053,152277],{"class":257},[45,171055,3822],{"class":51},[45,171057,171058,171060,171062,171064],{"class":47,"line":1283},[45,171059,31380],{"class":257},[45,171061,209],{"class":51},[45,171063,171004],{"class":313},[45,171065,215],{"class":51},[30,171067,171069],{"id":171068},"_94-捕获多个异常","9.4 捕获多个异常",[35,171071,171073],{"className":37,"code":171072,"language":39,"meta":40,"style":40},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[42,171074,171075,171081,171102,171122,171129,171137,171148,171157],{"__ignoreMap":40},[45,171076,171077,171079],{"class":47,"line":48},[45,171078,170933],{"class":93},[45,171080,3822],{"class":51},[45,171082,171083,171086,171088,171090,171092,171094,171096,171098,171100],{"class":47,"line":125},[45,171084,171085],{"class":51},"    nums ",[45,171087,254],{"class":93},[45,171089,52307],{"class":51},[45,171091,426],{"class":257},[45,171093,12518],{"class":51},[45,171095,286],{"class":257},[45,171097,12518],{"class":51},[45,171099,280],{"class":257},[45,171101,33327],{"class":51},[45,171103,171104,171107,171109,171111,171113,171115,171117,171120],{"class":47,"line":1262},[45,171105,171106],{"class":51},"    index ",[45,171108,254],{"class":93},[45,171110,2465],{"class":257},[45,171112,209],{"class":51},[45,171114,53902],{"class":257},[45,171116,209],{"class":51},[45,171118,171119],{"class":313},"\"请输入索引:\"",[45,171121,30578],{"class":51},[45,171123,171124,171126],{"class":47,"line":1277},[45,171125,31380],{"class":257},[45,171127,171128],{"class":51},"(nums[index])\n",[45,171130,171131,171133,171135],{"class":47,"line":1283},[45,171132,170945],{"class":93},[45,171134,152277],{"class":257},[45,171136,3822],{"class":51},[45,171138,171139,171141,171143,171146],{"class":47,"line":1297},[45,171140,31380],{"class":257},[45,171142,209],{"class":51},[45,171144,171145],{"class":313},"\"索引必须是整数\"",[45,171147,215],{"class":51},[45,171149,171150,171152,171155],{"class":47,"line":1303},[45,171151,170945],{"class":93},[45,171153,171154],{"class":257}," IndexError",[45,171156,3822],{"class":51},[45,171158,171159,171161,171163,171166],{"class":47,"line":1394},[45,171160,31380],{"class":257},[45,171162,209],{"class":51},[45,171164,171165],{"class":313},"\"索引越界\"",[45,171167,215],{"class":51},[10,171169,171170],{},"多个异常使用相同处理逻辑：",[35,171172,171174],{"className":37,"code":171173,"language":39,"meta":40,"style":40},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[42,171175,171176,171182,171200,171213,171227],{"__ignoreMap":40},[45,171177,171178,171180],{"class":47,"line":48},[45,171179,170933],{"class":93},[45,171181,3822],{"class":51},[45,171183,171184,171186,171188,171190,171192,171194,171196,171198],{"class":47,"line":125},[45,171185,45674],{"class":51},[45,171187,254],{"class":93},[45,171189,2465],{"class":257},[45,171191,209],{"class":51},[45,171193,53902],{"class":257},[45,171195,209],{"class":51},[45,171197,155847],{"class":313},[45,171199,30578],{"class":51},[45,171201,171202,171204,171206,171208,171210],{"class":47,"line":1262},[45,171203,31380],{"class":257},[45,171205,209],{"class":51},[45,171207,654],{"class":257},[45,171209,156097],{"class":93},[45,171211,171212],{"class":51}," num)\n",[45,171214,171215,171217,171219,171221,171223,171225],{"class":47,"line":1277},[45,171216,170945],{"class":93},[45,171218,1741],{"class":51},[45,171220,154885],{"class":257},[45,171222,12518],{"class":51},[45,171224,170828],{"class":257},[45,171226,30867],{"class":51},[45,171228,171229,171231,171233,171236],{"class":47,"line":1283},[45,171230,31380],{"class":257},[45,171232,209],{"class":51},[45,171234,171235],{"class":313},"\"输入不合法\"",[45,171237,215],{"class":51},[30,171239,171241],{"id":171240},"_95-获取异常信息","9.5 获取异常信息",[35,171243,171245],{"className":37,"code":171244,"language":39,"meta":40,"style":40},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[42,171246,171247,171253,171267,171278],{"__ignoreMap":40},[45,171248,171249,171251],{"class":47,"line":48},[45,171250,170933],{"class":93},[45,171252,3822],{"class":51},[45,171254,171255,171257,171259,171261,171263,171265],{"class":47,"line":125},[45,171256,45674],{"class":51},[45,171258,254],{"class":93},[45,171260,2465],{"class":257},[45,171262,209],{"class":51},[45,171264,155931],{"class":313},[45,171266,215],{"class":51},[45,171268,171269,171271,171273,171275],{"class":47,"line":1262},[45,171270,170945],{"class":93},[45,171272,152277],{"class":257},[45,171274,64685],{"class":93},[45,171276,171277],{"class":51}," e:\n",[45,171279,171280,171282,171284,171286,171289,171291,171293,171295,171297],{"class":47,"line":1277},[45,171281,31380],{"class":257},[45,171283,209],{"class":51},[45,171285,261],{"class":93},[45,171287,171288],{"class":313},"\"出错了:",[45,171290,1103],{"class":257},[45,171292,283],{"class":51},[45,171294,1153],{"class":257},[45,171296,459],{"class":313},[45,171298,215],{"class":51},[10,171300,146508],{},[35,171302,171305],{"className":171303,"code":171304,"language":5270,"meta":40},[5268],"出错了:invalid literal for int() with base 10: 'abc'\n",[42,171306,171304],{"__ignoreMap":40},[30,171308,171310],{"id":171309},"_96-else和finally","9.6 else和finally",[10,171312,171313,171315],{},[42,171314,1784],{},"：没有异常时执行。",[10,171317,171318,171321],{},[42,171319,171320],{},"finally","：无论是否异常都会执行。",[35,171323,171325],{"className":37,"code":171324,"language":39,"meta":40,"style":40},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[42,171326,171327,171333,171351,171359,171369,171375,171396,171402],{"__ignoreMap":40},[45,171328,171329,171331],{"class":47,"line":48},[45,171330,170933],{"class":93},[45,171332,3822],{"class":51},[45,171334,171335,171337,171339,171341,171343,171345,171347,171349],{"class":47,"line":125},[45,171336,45674],{"class":51},[45,171338,254],{"class":93},[45,171340,2465],{"class":257},[45,171342,209],{"class":51},[45,171344,53902],{"class":257},[45,171346,209],{"class":51},[45,171348,155847],{"class":313},[45,171350,30578],{"class":51},[45,171352,171353,171355,171357],{"class":47,"line":1262},[45,171354,170945],{"class":93},[45,171356,152277],{"class":257},[45,171358,3822],{"class":51},[45,171360,171361,171363,171365,171367],{"class":47,"line":1277},[45,171362,31380],{"class":257},[45,171364,209],{"class":51},[45,171366,153265],{"class":313},[45,171368,215],{"class":51},[45,171370,171371,171373],{"class":47,"line":1283},[45,171372,1784],{"class":93},[45,171374,3822],{"class":51},[45,171376,171377,171379,171381,171383,171386,171388,171390,171392,171394],{"class":47,"line":1297},[45,171378,31380],{"class":257},[45,171380,209],{"class":51},[45,171382,261],{"class":93},[45,171384,171385],{"class":313},"\"输入正确:",[45,171387,1103],{"class":257},[45,171389,1748],{"class":51},[45,171391,1153],{"class":257},[45,171393,459],{"class":313},[45,171395,215],{"class":51},[45,171397,171398,171400],{"class":47,"line":1303},[45,171399,171320],{"class":93},[45,171401,3822],{"class":51},[45,171403,171404,171406,171408,171411],{"class":47,"line":1394},[45,171405,31380],{"class":257},[45,171407,209],{"class":51},[45,171409,171410],{"class":313},"\"程序结束\"",[45,171412,215],{"class":51},[10,171414,171415,171417],{},[42,171416,171320],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[30,171419,171421],{"id":171420},"_97-抛出异常","9.7 抛出异常",[10,171423,171424],{},"程序可以主动抛出异常。",[35,171426,171428],{"className":37,"code":171427,"language":39,"meta":40,"style":40},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[42,171429,171430,171439,171451,171464,171484,171488,171492],{"__ignoreMap":40},[45,171431,171432,171434,171437],{"class":47,"line":48},[45,171433,32028],{"class":93},[45,171435,171436],{"class":2046}," set_age",[45,171438,161466],{"class":51},[45,171440,171441,171443,171445,171447,171449],{"class":47,"line":125},[45,171442,3184],{"class":93},[45,171444,15790],{"class":51},[45,171446,1117],{"class":93},[45,171448,4176],{"class":257},[45,171450,3822],{"class":51},[45,171452,171453,171455,171457,171459,171462],{"class":47,"line":1262},[45,171454,103483],{"class":93},[45,171456,152277],{"class":257},[45,171458,209],{"class":51},[45,171460,171461],{"class":313},"\"年龄不能为负数\"",[45,171463,215],{"class":51},[45,171465,171466,171468,171470,171472,171474,171476,171478,171480,171482],{"class":47,"line":1277},[45,171467,31380],{"class":257},[45,171469,209],{"class":51},[45,171471,261],{"class":93},[45,171473,162034],{"class":313},[45,171475,1103],{"class":257},[45,171477,70302],{"class":51},[45,171479,1153],{"class":257},[45,171481,459],{"class":313},[45,171483,215],{"class":51},[45,171485,171486],{"class":47,"line":1283},[45,171487,2483],{"emptyLinePlaceholder":133},[45,171489,171490],{"class":47,"line":1297},[45,171491,2483],{"emptyLinePlaceholder":133},[45,171493,171494,171497,171499,171501],{"class":47,"line":1303},[45,171495,171496],{"class":51},"set_age(",[45,171498,94],{"class":93},[45,171500,426],{"class":257},[45,171502,215],{"class":51},[10,171504,171505],{},"调用者可以捕获：",[35,171507,171509],{"className":37,"code":171508,"language":39,"meta":40,"style":40},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[42,171510,171511,171517,171528,171538],{"__ignoreMap":40},[45,171512,171513,171515],{"class":47,"line":48},[45,171514,170933],{"class":93},[45,171516,3822],{"class":51},[45,171518,171519,171522,171524,171526],{"class":47,"line":125},[45,171520,171521],{"class":51},"    set_age(",[45,171523,94],{"class":93},[45,171525,426],{"class":257},[45,171527,215],{"class":51},[45,171529,171530,171532,171534,171536],{"class":47,"line":1262},[45,171531,170945],{"class":93},[45,171533,152277],{"class":257},[45,171535,64685],{"class":93},[45,171537,171277],{"class":51},[45,171539,171540,171542],{"class":47,"line":1277},[45,171541,31380],{"class":257},[45,171543,67080],{"class":51},[30,171545,171547],{"id":171546},"_98-自定义异常","9.8 自定义异常",[35,171549,171551],{"className":37,"code":171550,"language":39,"meta":40,"style":40},"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",[42,171552,171553,171567,171571,171575,171579,171587,171597,171608,171618,171622,171626,171632,171649,171660],{"__ignoreMap":40},[45,171554,171555,171557,171560,171562,171565],{"class":47,"line":48},[45,171556,14777],{"class":93},[45,171558,171559],{"class":2046}," BalanceNotEnoughError",[45,171561,209],{"class":51},[45,171563,171564],{"class":257},"Exception",[45,171566,30867],{"class":51},[45,171568,171569],{"class":47,"line":125},[45,171570,149588],{"class":93},[45,171572,171573],{"class":47,"line":1262},[45,171574,2483],{"emptyLinePlaceholder":133},[45,171576,171577],{"class":47,"line":1277},[45,171578,2483],{"emptyLinePlaceholder":133},[45,171580,171581,171583,171585],{"class":47,"line":1283},[45,171582,32028],{"class":93},[45,171584,150237],{"class":2046},[45,171586,162863],{"class":51},[45,171588,171589,171591,171593,171595],{"class":47,"line":1297},[45,171590,3184],{"class":93},[45,171592,150193],{"class":51},[45,171594,1167],{"class":93},[45,171596,162640],{"class":51},[45,171598,171599,171601,171604,171606],{"class":47,"line":1303},[45,171600,103483],{"class":93},[45,171602,171603],{"class":51}," BalanceNotEnoughError(",[45,171605,150288],{"class":313},[45,171607,215],{"class":51},[45,171609,171610,171612,171614,171616],{"class":47,"line":1394},[45,171611,4173],{"class":93},[45,171613,162870],{"class":51},[45,171615,94],{"class":93},[45,171617,150226],{"class":51},[45,171619,171620],{"class":47,"line":1400},[45,171621,2483],{"emptyLinePlaceholder":133},[45,171623,171624],{"class":47,"line":1412},[45,171625,2483],{"emptyLinePlaceholder":133},[45,171627,171628,171630],{"class":47,"line":1695},[45,171629,170933],{"class":93},[45,171631,3822],{"class":51},[45,171633,171634,171636,171638,171641,171643,171645,171647],{"class":47,"line":1700},[45,171635,162541],{"class":51},[45,171637,254],{"class":93},[45,171639,171640],{"class":51}," withdraw(",[45,171642,519],{"class":257},[45,171644,12518],{"class":51},[45,171646,1805],{"class":257},[45,171648,215],{"class":51},[45,171650,171651,171653,171656,171658],{"class":47,"line":1706},[45,171652,170945],{"class":93},[45,171654,171655],{"class":51}," BalanceNotEnoughError ",[45,171657,31464],{"class":93},[45,171659,171277],{"class":51},[45,171661,171662,171664],{"class":47,"line":1711},[45,171663,31380],{"class":257},[45,171665,67080],{"class":51},[10,171667,171668],{},"入门阶段大多数情况使用内置异常即可。",[30,171670,171672],{"id":171671},"_99-traceback","9.9 traceback",[10,171674,171675],{},"调试时可以输出完整异常堆栈。",[35,171677,171679],{"className":37,"code":171678,"language":39,"meta":40,"style":40},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[42,171680,171681,171688,171692,171698,171708,171716],{"__ignoreMap":40},[45,171682,171683,171685],{"class":47,"line":48},[45,171684,30473],{"class":93},[45,171686,171687],{"class":51}," traceback\n",[45,171689,171690],{"class":47,"line":125},[45,171691,2483],{"emptyLinePlaceholder":133},[45,171693,171694,171696],{"class":47,"line":1262},[45,171695,170933],{"class":93},[45,171697,3822],{"class":51},[45,171699,171700,171702,171704,171706],{"class":47,"line":1277},[45,171701,2068],{"class":257},[45,171703,209],{"class":51},[45,171705,155931],{"class":313},[45,171707,215],{"class":51},[45,171709,171710,171712,171714],{"class":47,"line":1283},[45,171711,170945],{"class":93},[45,171713,152277],{"class":257},[45,171715,3822],{"class":51},[45,171717,171718],{"class":47,"line":1297},[45,171719,171720],{"class":51},"    traceback.print_exc()\n",[10,171722,171723],{},"日志系统中常把异常堆栈记录到文件。",[30,171725,171727],{"id":171726},"_910-什么是模块","9.10 什么是模块",[10,171729,171730,171731,126034],{},"模块就是一个 ",[42,171732,146403],{},[10,171734,171735,171736,24701],{},"例如创建 ",[42,171737,171738],{},"my_math.py",[35,171740,171742],{"className":37,"code":171741,"language":39,"meta":40,"style":40},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[42,171743,171744,171752,171762,171766,171770,171779],{"__ignoreMap":40},[45,171745,171746,171748,171750],{"class":47,"line":48},[45,171747,32028],{"class":93},[45,171749,5292],{"class":2046},[45,171751,151144],{"class":51},[45,171753,171754,171756,171758,171760],{"class":47,"line":125},[45,171755,4173],{"class":93},[45,171757,10952],{"class":51},[45,171759,689],{"class":93},[45,171761,151155],{"class":51},[45,171763,171764],{"class":47,"line":1262},[45,171765,2483],{"emptyLinePlaceholder":133},[45,171767,171768],{"class":47,"line":1277},[45,171769,2483],{"emptyLinePlaceholder":133},[45,171771,171772,171774,171777],{"class":47,"line":1283},[45,171773,32028],{"class":93},[45,171775,171776],{"class":2046}," sub",[45,171778,151144],{"class":51},[45,171780,171781,171783,171785,171787],{"class":47,"line":1297},[45,171782,4173],{"class":93},[45,171784,10952],{"class":51},[45,171786,94],{"class":93},[45,171788,151155],{"class":51},[10,171790,171791],{},"在另一个文件中导入：",[35,171793,171795],{"className":37,"code":171794,"language":39,"meta":40,"style":40},"import my_math\n\nprint(my_math.add(1, 2))\n",[42,171796,171797,171804,171808],{"__ignoreMap":40},[45,171798,171799,171801],{"class":47,"line":48},[45,171800,30473],{"class":93},[45,171802,171803],{"class":51}," my_math\n",[45,171805,171806],{"class":47,"line":125},[45,171807,2483],{"emptyLinePlaceholder":133},[45,171809,171810,171812,171815,171817,171819,171821],{"class":47,"line":1262},[45,171811,30496],{"class":257},[45,171813,171814],{"class":51},"(my_math.add(",[45,171816,426],{"class":257},[45,171818,12518],{"class":51},[45,171820,286],{"class":257},[45,171822,30578],{"class":51},[30,171824,171826],{"id":171825},"_911-import导入","9.11 import导入",[176,171828,171830],{"id":171829},"_9111-导入模块","9.11.1 导入模块",[35,171832,171834],{"className":37,"code":171833,"language":39,"meta":40,"style":40},"import random\n\nprint(random.randint(1, 10))\n",[42,171835,171836,171842,171846],{"__ignoreMap":40},[45,171837,171838,171840],{"class":47,"line":48},[45,171839,30473],{"class":93},[45,171841,45409],{"class":51},[45,171843,171844],{"class":47,"line":125},[45,171845,2483],{"emptyLinePlaceholder":133},[45,171847,171848,171850,171853,171855,171857,171859],{"class":47,"line":1262},[45,171849,30496],{"class":257},[45,171851,171852],{"class":51},"(random.randint(",[45,171854,426],{"class":257},[45,171856,12518],{"class":51},[45,171858,654],{"class":257},[45,171860,30578],{"class":51},[176,171862,171864],{"id":171863},"_9112-导入指定内容","9.11.2 导入指定内容",[35,171866,171868],{"className":37,"code":171867,"language":39,"meta":40,"style":40},"from random import randint\n\nprint(randint(1, 10))\n",[42,171869,171870,171881,171885],{"__ignoreMap":40},[45,171871,171872,171874,171876,171878],{"class":47,"line":48},[45,171873,30818],{"class":93},[45,171875,57877],{"class":51},[45,171877,30473],{"class":93},[45,171879,171880],{"class":51}," randint\n",[45,171882,171883],{"class":47,"line":125},[45,171884,2483],{"emptyLinePlaceholder":133},[45,171886,171887,171889,171892,171894,171896,171898],{"class":47,"line":1262},[45,171888,30496],{"class":257},[45,171890,171891],{"class":51},"(randint(",[45,171893,426],{"class":257},[45,171895,12518],{"class":51},[45,171897,654],{"class":257},[45,171899,30578],{"class":51},[176,171901,171903],{"id":171902},"_9113-起别名","9.11.3 起别名",[35,171905,171907],{"className":37,"code":171906,"language":39,"meta":40,"style":40},"import random as rd\n\nprint(rd.randint(1, 10))\n",[42,171908,171909,171920,171924],{"__ignoreMap":40},[45,171910,171911,171913,171915,171917],{"class":47,"line":48},[45,171912,30473],{"class":93},[45,171914,57877],{"class":51},[45,171916,31464],{"class":93},[45,171918,171919],{"class":51}," rd\n",[45,171921,171922],{"class":47,"line":125},[45,171923,2483],{"emptyLinePlaceholder":133},[45,171925,171926,171928,171931,171933,171935,171937],{"class":47,"line":1262},[45,171927,30496],{"class":257},[45,171929,171930],{"class":51},"(rd.randint(",[45,171932,426],{"class":257},[45,171934,12518],{"class":51},[45,171936,654],{"class":257},[45,171938,30578],{"class":51},[35,171940,171942],{"className":37,"code":171941,"language":39,"meta":40,"style":40},"from random import randint as rint\n\nprint(rint(1, 10))\n",[42,171943,171944,171960,171964],{"__ignoreMap":40},[45,171945,171946,171948,171950,171952,171955,171957],{"class":47,"line":48},[45,171947,30818],{"class":93},[45,171949,57877],{"class":51},[45,171951,30473],{"class":93},[45,171953,171954],{"class":51}," randint ",[45,171956,31464],{"class":93},[45,171958,171959],{"class":51}," rint\n",[45,171961,171962],{"class":47,"line":125},[45,171963,2483],{"emptyLinePlaceholder":133},[45,171965,171966,171968,171971,171973,171975,171977],{"class":47,"line":1262},[45,171967,30496],{"class":257},[45,171969,171970],{"class":51},"(rint(",[45,171972,426],{"class":257},[45,171974,12518],{"class":51},[45,171976,654],{"class":257},[45,171978,30578],{"class":51},[176,171980,171982],{"id":171981},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[35,171984,171986],{"className":37,"code":171985,"language":39,"meta":40,"style":40},"from random import *\n",[42,171987,171988],{"__ignoreMap":40},[45,171989,171990,171992,171994,171996],{"class":47,"line":48},[45,171991,30818],{"class":93},[45,171993,57877],{"class":51},[45,171995,30473],{"class":93},[45,171997,171998],{"class":93}," *\n",[10,172000,172001],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[30,172003,172005],{"id":172004},"_912-常用内置模块","9.12 常用内置模块",[176,172007,172009],{"id":172008},"_9121-random","9.12.1 random",[35,172011,172013],{"className":37,"code":172012,"language":39,"meta":40,"style":40},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[42,172014,172015,172021,172025,172039,172058],{"__ignoreMap":40},[45,172016,172017,172019],{"class":47,"line":48},[45,172018,30473],{"class":93},[45,172020,45409],{"class":51},[45,172022,172023],{"class":47,"line":125},[45,172024,2483],{"emptyLinePlaceholder":133},[45,172026,172027,172029,172031,172033,172035,172037],{"class":47,"line":1262},[45,172028,30496],{"class":257},[45,172030,171852],{"class":51},[45,172032,426],{"class":257},[45,172034,12518],{"class":51},[45,172036,654],{"class":257},[45,172038,30578],{"class":51},[45,172040,172041,172043,172046,172048,172050,172052,172054,172056],{"class":47,"line":1277},[45,172042,30496],{"class":257},[45,172044,172045],{"class":51},"(random.choice([",[45,172047,149939],{"class":313},[45,172049,12518],{"class":51},[45,172051,150987],{"class":313},[45,172053,12518],{"class":51},[45,172055,159782],{"class":313},[45,172057,33224],{"class":51},[45,172059,172060,172062,172065,172067,172069,172071,172073,172075,172077,172079,172081,172083,172085,172087],{"class":47,"line":1283},[45,172061,30496],{"class":257},[45,172063,172064],{"class":51},"(random.sample([",[45,172066,426],{"class":257},[45,172068,12518],{"class":51},[45,172070,286],{"class":257},[45,172072,12518],{"class":51},[45,172074,280],{"class":257},[45,172076,12518],{"class":51},[45,172078,501],{"class":257},[45,172080,12518],{"class":51},[45,172082,527],{"class":257},[45,172084,112253],{"class":51},[45,172086,286],{"class":257},[45,172088,30578],{"class":51},[176,172090,172092],{"id":172091},"_9122-time","9.12.2 time",[35,172094,172096],{"className":37,"code":172095,"language":39,"meta":40,"style":40},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[42,172097,172098,172104,172108,172115,172123],{"__ignoreMap":40},[45,172099,172100,172102],{"class":47,"line":48},[45,172101,30473],{"class":93},[45,172103,31910],{"class":51},[45,172105,172106],{"class":47,"line":125},[45,172107,2483],{"emptyLinePlaceholder":133},[45,172109,172110,172112],{"class":47,"line":1262},[45,172111,30496],{"class":257},[45,172113,172114],{"class":51},"(time.time())\n",[45,172116,172117,172119,172121],{"class":47,"line":1277},[45,172118,95122],{"class":51},[45,172120,426],{"class":257},[45,172122,215],{"class":51},[45,172124,172125,172127,172129,172132],{"class":47,"line":1283},[45,172126,30496],{"class":257},[45,172128,209],{"class":51},[45,172130,172131],{"class":313},"\"1秒后执行\"",[45,172133,215],{"class":51},[176,172135,172137],{"id":172136},"_9123-datetime","9.12.3 datetime",[35,172139,172141],{"className":37,"code":172140,"language":39,"meta":40,"style":40},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[42,172142,172143,172155,172159,172169,172176],{"__ignoreMap":40},[45,172144,172145,172147,172150,172152],{"class":47,"line":48},[45,172146,30818],{"class":93},[45,172148,172149],{"class":51}," datetime ",[45,172151,30473],{"class":93},[45,172153,172154],{"class":51}," datetime\n",[45,172156,172157],{"class":47,"line":125},[45,172158,2483],{"emptyLinePlaceholder":133},[45,172160,172161,172164,172166],{"class":47,"line":1262},[45,172162,172163],{"class":51},"now ",[45,172165,254],{"class":93},[45,172167,172168],{"class":51}," datetime.now()\n",[45,172170,172171,172173],{"class":47,"line":1277},[45,172172,30496],{"class":257},[45,172174,172175],{"class":51},"(now)\n",[45,172177,172178,172180,172183,172186,172188,172191],{"class":47,"line":1283},[45,172179,30496],{"class":257},[45,172181,172182],{"class":51},"(now.strftime(",[45,172184,172185],{"class":313},"\"%Y-%m-",[45,172187,156742],{"class":257},[45,172189,172190],{"class":313}," %H:%M:%S\"",[45,172192,30578],{"class":51},[176,172194,172196],{"id":172195},"_9124-os","9.12.4 os",[35,172198,172200],{"className":37,"code":172199,"language":39,"meta":40,"style":40},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[42,172201,172202,172208,172212,172219],{"__ignoreMap":40},[45,172203,172204,172206],{"class":47,"line":48},[45,172205,30473],{"class":93},[45,172207,45386],{"class":51},[45,172209,172210],{"class":47,"line":125},[45,172211,2483],{"emptyLinePlaceholder":133},[45,172213,172214,172216],{"class":47,"line":1262},[45,172215,30496],{"class":257},[45,172217,172218],{"class":51},"(os.getcwd())\n",[45,172220,172221,172223,172226,172229],{"class":47,"line":1277},[45,172222,30496],{"class":257},[45,172224,172225],{"class":51},"(os.listdir(",[45,172227,172228],{"class":313},"\".\"",[45,172230,30578],{"class":51},[176,172232,172234],{"id":172233},"_9125-sys","9.12.5 sys",[35,172236,172238],{"className":37,"code":172237,"language":39,"meta":40,"style":40},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[42,172239,172240,172247,172251,172258],{"__ignoreMap":40},[45,172241,172242,172244],{"class":47,"line":48},[45,172243,30473],{"class":93},[45,172245,172246],{"class":51}," sys\n",[45,172248,172249],{"class":47,"line":125},[45,172250,2483],{"emptyLinePlaceholder":133},[45,172252,172253,172255],{"class":47,"line":1262},[45,172254,30496],{"class":257},[45,172256,172257],{"class":51},"(sys.version)\n",[45,172259,172260,172262],{"class":47,"line":1277},[45,172261,30496],{"class":257},[45,172263,172264],{"class":51},"(sys.path)\n",[30,172266,172268,172269,172271,172272,459],{"id":172267},"_913-if-name-main","9.13 if ",[358,172270,79891],{}," == \"",[358,172273,102109],{},[10,172275,172276,172277,172280],{},"模块被直接运行和被导入时，",[42,172278,172279],{},"__name__"," 的值不同。",[10,172282,172283,172284,24701],{},"创建 ",[42,172285,172286],{},"my_module.py",[35,172288,172290],{"className":37,"code":172289,"language":39,"meta":40,"style":40},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[42,172291,172292,172300,172310,172314,172318,172330],{"__ignoreMap":40},[45,172293,172294,172296,172298],{"class":47,"line":48},[45,172295,32028],{"class":93},[45,172297,5292],{"class":2046},[45,172299,151144],{"class":51},[45,172301,172302,172304,172306,172308],{"class":47,"line":125},[45,172303,4173],{"class":93},[45,172305,10952],{"class":51},[45,172307,689],{"class":93},[45,172309,151155],{"class":51},[45,172311,172312],{"class":47,"line":1262},[45,172313,2483],{"emptyLinePlaceholder":133},[45,172315,172316],{"class":47,"line":1277},[45,172317,2483],{"emptyLinePlaceholder":133},[45,172319,172320,172322,172324,172326,172328],{"class":47,"line":1283},[45,172321,1614],{"class":93},[45,172323,31301],{"class":257},[45,172325,101610],{"class":93},[45,172327,101613],{"class":313},[45,172329,3822],{"class":51},[45,172331,172332,172334,172336,172338,172340,172342],{"class":47,"line":1297},[45,172333,31380],{"class":257},[45,172335,166651],{"class":51},[45,172337,426],{"class":257},[45,172339,12518],{"class":51},[45,172341,286],{"class":257},[45,172343,30578],{"class":51},[10,172345,172346],{},"作用：",[159,172348,172349,172352],{},[162,172350,172351],{},"直接运行该文件时，执行测试代码。",[162,172353,172354],{},"被其他文件导入时，不执行测试代码。",[10,172356,172357],{},"这是写模块时很常用的习惯。",[30,172359,172361],{"id":172360},"_914-包","9.14 包",[10,172363,172364,172365,172368],{},"包是包含 ",[42,172366,172367],{},"__init__.py"," 的目录，用于组织多个模块。",[10,172370,172371],{},"目录结构：",[35,172373,172376],{"className":172374,"code":172375,"language":5270,"meta":40},[5268],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[42,172377,172375],{"__ignoreMap":40},[10,172379,172380],{},"导入：",[35,172382,172384],{"className":37,"code":172383,"language":39,"meta":40,"style":40},"from utils.file_utils import read_file\n",[42,172385,172386],{"__ignoreMap":40},[45,172387,172388,172390,172393,172395],{"class":47,"line":48},[45,172389,30818],{"class":93},[45,172391,172392],{"class":51}," utils.file_utils ",[45,172394,30473],{"class":93},[45,172396,172397],{"class":51}," read_file\n",[10,172399,172400,172402],{},[42,172401,172367],{}," 可以为空，也可以写包初始化逻辑。",[30,172404,172406],{"id":172405},"_915-第三方包","9.15 第三方包",[10,172408,172409,172410,172412],{},"第三方包通过 ",[42,172411,23914],{}," 安装。",[35,172414,172416],{"className":23905,"code":172415,"language":23907,"meta":40,"style":40},"pip install requests\n",[42,172417,172418],{"__ignoreMap":40},[45,172419,172420,172422,172424],{"class":47,"line":48},[45,172421,23914],{"class":2046},[45,172423,23917],{"class":313},[45,172425,146149],{"class":313},[10,172427,172428],{},"使用：",[35,172430,172432],{"className":37,"code":172431,"language":39,"meta":40,"style":40},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[42,172433,172434,172440,172444,172459],{"__ignoreMap":40},[45,172435,172436,172438],{"class":47,"line":48},[45,172437,30473],{"class":93},[45,172439,146149],{"class":51},[45,172441,172442],{"class":47,"line":125},[45,172443,2483],{"emptyLinePlaceholder":133},[45,172445,172446,172449,172451,172454,172457],{"class":47,"line":1262},[45,172447,172448],{"class":51},"response ",[45,172450,254],{"class":93},[45,172452,172453],{"class":51}," requests.get(",[45,172455,172456],{"class":313},"\"https:\u002F\u002Fwww.example.com\"",[45,172458,215],{"class":51},[45,172460,172461,172463],{"class":47,"line":1277},[45,172462,30496],{"class":257},[45,172464,172465],{"class":51},"(response.status_code)\n",[10,172467,172468],{},"查看已安装包：",[35,172470,172472],{"className":23905,"code":172471,"language":23907,"meta":40,"style":40},"pip list\n",[42,172473,172474],{"__ignoreMap":40},[45,172475,172476,172478],{"class":47,"line":48},[45,172477,23914],{"class":2046},[45,172479,119006],{"class":313},[10,172481,172482],{},"导出项目依赖：",[35,172484,172485],{"className":23905,"code":146344,"language":23907,"meta":40,"style":40},[42,172486,172487],{"__ignoreMap":40},[45,172488,172489,172491,172493,172495],{"class":47,"line":48},[45,172490,23914],{"class":2046},[45,172492,146353],{"class":313},[45,172494,26305],{"class":93},[45,172496,146358],{"class":313},[10,172498,172499],{},"安装项目依赖：",[35,172501,172502],{"className":23905,"code":146364,"language":23907,"meta":40,"style":40},[42,172503,172504],{"__ignoreMap":40},[45,172505,172506,172508,172510,172512],{"class":47,"line":48},[45,172507,23914],{"class":2046},[45,172509,23917],{"class":313},[45,172511,119690],{"class":257},[45,172513,146358],{"class":313},[30,172515,172517],{"id":172516},"_916-模块搜索路径","9.16 模块搜索路径",[10,172519,172520,172521,172524],{},"Python 导入模块时会在 ",[42,172522,172523],{},"sys.path"," 中查找。",[35,172526,172528],{"className":37,"code":172527,"language":39,"meta":40,"style":40},"import sys\n\nfor path in sys.path:\n    print(path)\n",[42,172529,172530,172536,172540,172552],{"__ignoreMap":40},[45,172531,172532,172534],{"class":47,"line":48},[45,172533,30473],{"class":93},[45,172535,172246],{"class":51},[45,172537,172538],{"class":47,"line":125},[45,172539,2483],{"emptyLinePlaceholder":133},[45,172541,172542,172544,172547,172549],{"class":47,"line":1262},[45,172543,3108],{"class":93},[45,172545,172546],{"class":51}," path ",[45,172548,26126],{"class":93},[45,172550,172551],{"class":51}," sys.path:\n",[45,172553,172554,172556],{"class":47,"line":1277},[45,172555,31380],{"class":257},[45,172557,169280],{"class":51},[10,172559,172560],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[10,172562,157674],{},[35,172564,172567],{"className":172565,"code":172566,"language":5270,"meta":40},[5268],"random.py\njson.py\ntime.py\n",[42,172568,172566],{"__ignoreMap":40},[10,172570,172571],{},"这些文件名可能导致导入异常。",[30,172573,172575],{"id":172574},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[10,172577,172371],{},[35,172579,172582],{"className":172580,"code":172581,"language":5270,"meta":40},[5268],"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",[42,172583,172581],{"__ignoreMap":40},[10,172585,172586,24701],{},[42,172587,172588],{},"utils\u002Ffile_utils.py",[35,172590,172592],{"className":37,"code":172591,"language":39,"meta":40,"style":40},"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",[42,172593,172594,172600,172610,172614,172618,172628,172638,172646,172652,172656,172683,172693,172697,172701,172711,172737],{"__ignoreMap":40},[45,172595,172596,172598],{"class":47,"line":48},[45,172597,30473],{"class":93},[45,172599,147142],{"class":51},[45,172601,172602,172604,172606,172608],{"class":47,"line":125},[45,172603,30818],{"class":93},[45,172605,108362],{"class":51},[45,172607,30473],{"class":93},[45,172609,108367],{"class":51},[45,172611,172612],{"class":47,"line":1262},[45,172613,2483],{"emptyLinePlaceholder":133},[45,172615,172616],{"class":47,"line":1277},[45,172617,2483],{"emptyLinePlaceholder":133},[45,172619,172620,172622,172625],{"class":47,"line":1283},[45,172621,32028],{"class":93},[45,172623,172624],{"class":2046}," read_json",[45,172626,172627],{"class":51},"(path):\n",[45,172629,172630,172633,172635],{"class":47,"line":1297},[45,172631,172632],{"class":51},"    path ",[45,172634,254],{"class":93},[45,172636,172637],{"class":51}," Path(path)\n",[45,172639,172640,172642,172644],{"class":47,"line":1303},[45,172641,3184],{"class":93},[45,172643,39011],{"class":93},[45,172645,169361],{"class":51},[45,172647,172648,172650],{"class":47,"line":1394},[45,172649,14835],{"class":93},[45,172651,51919],{"class":51},[45,172653,172654],{"class":47,"line":1400},[45,172655,2483],{"emptyLinePlaceholder":133},[45,172657,172658,172660,172662,172665,172667,172669,172671,172673,172675,172677,172679,172681],{"class":47,"line":1412},[45,172659,34259],{"class":93},[45,172661,146842],{"class":257},[45,172663,172664],{"class":51},"(path, ",[45,172666,146852],{"class":313},[45,172668,12518],{"class":51},[45,172670,146857],{"class":5299},[45,172672,254],{"class":93},[45,172674,146862],{"class":313},[45,172676,13797],{"class":51},[45,172678,31464],{"class":93},[45,172680,148204],{"class":5299},[45,172682,3822],{"class":51},[45,172684,172685,172687,172689,172691],{"class":47,"line":1695},[45,172686,14835],{"class":93},[45,172688,148215],{"class":51},[45,172690,45435],{"class":5299},[45,172692,215],{"class":51},[45,172694,172695],{"class":47,"line":1700},[45,172696,2483],{"emptyLinePlaceholder":133},[45,172698,172699],{"class":47,"line":1706},[45,172700,2483],{"emptyLinePlaceholder":133},[45,172702,172703,172705,172708],{"class":47,"line":1711},[45,172704,32028],{"class":93},[45,172706,172707],{"class":2046}," write_json",[45,172709,172710],{"class":51},"(path, data):\n",[45,172712,172713,172715,172717,172719,172721,172723,172725,172727,172729,172731,172733,172735],{"class":47,"line":1725},[45,172714,34259],{"class":93},[45,172716,146842],{"class":257},[45,172718,172664],{"class":51},[45,172720,152027],{"class":313},[45,172722,12518],{"class":51},[45,172724,146857],{"class":5299},[45,172726,254],{"class":93},[45,172728,146862],{"class":313},[45,172730,13797],{"class":51},[45,172732,31464],{"class":93},[45,172734,148204],{"class":5299},[45,172736,3822],{"class":51},[45,172738,172739,172742,172744,172746,172748,172750,172752,172754,172756,172758,172760],{"class":47,"line":1730},[45,172740,172741],{"class":51},"        json.dump(data, ",[45,172743,45435],{"class":5299},[45,172745,12518],{"class":51},[45,172747,147188],{"class":5299},[45,172749,254],{"class":93},[45,172751,34068],{"class":257},[45,172753,12518],{"class":51},[45,172755,152063],{"class":5299},[45,172757,254],{"class":93},[45,172759,286],{"class":257},[45,172761,215],{"class":51},[10,172763,172764,24701],{},[42,172765,154658],{},[35,172767,172769],{"className":37,"code":172768,"language":39,"meta":40,"style":40},"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",[42,172770,172771,172782,172786,172799,172819],{"__ignoreMap":40},[45,172772,172773,172775,172777,172779],{"class":47,"line":48},[45,172774,30818],{"class":93},[45,172776,172392],{"class":51},[45,172778,30473],{"class":93},[45,172780,172781],{"class":51}," read_json, write_json\n",[45,172783,172784],{"class":47,"line":125},[45,172785,2483],{"emptyLinePlaceholder":133},[45,172787,172788,172790,172792,172795,172797],{"class":47,"line":1262},[45,172789,159767],{"class":51},[45,172791,254],{"class":93},[45,172793,172794],{"class":51}," read_json(",[45,172796,151882],{"class":313},[45,172798,215],{"class":51},[45,172800,172801,172803,172805,172807,172809,172811,172813,172815,172817],{"class":47,"line":1277},[45,172802,170585],{"class":51},[45,172804,62760],{"class":313},[45,172806,51518],{"class":51},[45,172808,149939],{"class":313},[45,172810,12518],{"class":51},[45,172812,151523],{"class":313},[45,172814,51518],{"class":51},[45,172816,1196],{"class":257},[45,172818,165203],{"class":51},[45,172820,172821,172824,172826],{"class":47,"line":1283},[45,172822,172823],{"class":51},"write_json(",[45,172825,151882],{"class":313},[45,172827,172828],{"class":51},", students)\n",[30,172830,172832],{"id":172831},"_918-易错点","9.18 易错点",[159,172834,172835,172838,172843,172848,172851,172854],{},[162,172836,172837],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[162,172839,172840,172841,28468],{},"能指定异常类型就不要裸写 ",[42,172842,170945],{},[162,172844,172845,172847],{},[42,172846,171320],{}," 无论是否出错都会执行。",[162,172849,172850],{},"模块文件名不要和标准库重名。",[162,172852,172853],{},"导入自己写的模块时，要注意运行目录。",[162,172855,172856],{},"第三方包要安装到当前解释器或虚拟环境中。",[30,172858,172860],{"id":172859},"_919-本章练习","9.19 本章练习",[159,172862,172863,172866,172869,172875,172882],{},[162,172864,172865],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[162,172867,172868],{},"写函数读取文件，如果文件不存在则返回空字符串。",[162,172870,172283,172871,172874],{},[42,172872,172873],{},"math_utils.py","，实现加减乘除函数并导入使用。",[162,172876,172877,172878,172881],{},"创建一个 ",[42,172879,172880],{},"utils"," 包，把 JSON 读写函数放进去。",[162,172883,172884],{},"写一个程序，捕获除零异常和输入格式异常。",[121,172886,172887],{},"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":40,"searchDepth":125,"depth":125,"links":172889},[172890,172891,172892,172893,172894,172895,172896,172897,172898,172899,172900,172906,172913,172915,172916,172917,172918,172919,172920],{"id":170742,"depth":125,"text":170743},{"id":170870,"depth":125,"text":170871},{"id":170919,"depth":125,"text":170920},{"id":171068,"depth":125,"text":171069},{"id":171240,"depth":125,"text":171241},{"id":171309,"depth":125,"text":171310},{"id":171420,"depth":125,"text":171421},{"id":171546,"depth":125,"text":171547},{"id":171671,"depth":125,"text":171672},{"id":171726,"depth":125,"text":171727},{"id":171825,"depth":125,"text":171826,"children":172901},[172902,172903,172904,172905],{"id":171829,"depth":1262,"text":171830},{"id":171863,"depth":1262,"text":171864},{"id":171902,"depth":1262,"text":171903},{"id":171981,"depth":1262,"text":171982},{"id":172004,"depth":125,"text":172005,"children":172907},[172908,172909,172910,172911,172912],{"id":172008,"depth":1262,"text":172009},{"id":172091,"depth":1262,"text":172092},{"id":172136,"depth":1262,"text":172137},{"id":172195,"depth":1262,"text":172196},{"id":172233,"depth":1262,"text":172234},{"id":172267,"depth":125,"text":172914},"9.13 if name == \"main\"",{"id":172360,"depth":125,"text":172361},{"id":172405,"depth":125,"text":172406},{"id":172516,"depth":125,"text":172517},{"id":172574,"depth":125,"text":172575},{"id":172831,"depth":125,"text":172832},{"id":172859,"depth":125,"text":172860},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170734,"description":130},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172927,"title":172928,"body":172929,"description":173092,"extension":131,"meta":173093,"navigation":133,"path":173094,"seo":173095,"stem":173096,"__hash__":173097},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172930,"toc":173087},[172931,172934,172937,172940,172951,172953,173027,173030,173033,173036,173039,173042,173045,173048,173051,173054,173057],[20,172932,172928],{"id":172933},"python教程",[10,172935,172936],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[10,172938,172939],{},"建议学习环境：",[159,172941,172942,172945,172948],{},[162,172943,172944],{},"Python 版本：Python 3.10 及以上。",[162,172946,172947],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[162,172949,172950],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[30,172952,117129],{"id":117129},[159,172954,172955,172961,172967,172973,172979,172985,172991,172997,173003,173009,173015,173021],{},[162,172956,172957],{},[13,172958,172960],{"href":172959},".\u002Fch1-Python","Python环境与第一个程序",[162,172962,172963],{},[13,172964,172966],{"href":172965},".\u002Fch2","基础语法、变量与字符串",[162,172968,172969],{},[13,172970,172972],{"href":172971},".\u002Fch3","判断语句",[162,172974,172975],{},[13,172976,172978],{"href":172977},".\u002Fch4","循环语句",[162,172980,172981],{},[13,172982,172984],{"href":172983},".\u002Fch5","函数基础",[162,172986,172987],{},[13,172988,172990],{"href":172989},".\u002Fch6","数据容器",[162,172992,172993],{},[13,172994,172996],{"href":172995},".\u002Fch7","函数进阶",[162,172998,172999],{},[13,173000,173002],{"href":173001},".\u002Fch8","文件操作",[162,173004,173005],{},[13,173006,173008],{"href":173007},".\u002Fch9","异常、模块与包",[162,173010,173011],{},[13,173012,173014],{"href":173013},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[162,173016,173017],{},[13,173018,173020],{"href":173019},".\u002Fch11","面向对象基础",[162,173022,173023],{},[13,173024,173026],{"href":173025},".\u002Fch12","综合案例与复习路线",[30,173028,173029],{"id":173029},"学习路线",[10,173031,173032],{},"第一阶段：能运行程序。",[10,173034,173035],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[10,173037,173038],{},"第二阶段：能组织数据。",[10,173040,173041],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[10,173043,173044],{},"第三阶段：能封装逻辑。",[10,173046,173047],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[10,173049,173050],{},"第四阶段：能做小项目。",[10,173052,173053],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[30,173055,173056],{"id":173056},"参考资料",[159,173058,173059,173066,173073,173080],{},[162,173060,173061,173062],{},"黑马程序员 Python 入门教程推荐：",[13,173063,173064],{"href":173064,"rel":173065},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[17],[162,173067,173068,173069],{},"Python 官方中文教程：",[13,173070,173071],{"href":173071,"rel":173072},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[17],[162,173074,173075,173076],{},"Python 标准库文档：",[13,173077,173078],{"href":173078,"rel":173079},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[17],[162,173081,173082,173083],{},"pyecharts 文档：",[13,173084,173085],{"href":173085,"rel":173086},"https:\u002F\u002Fpyecharts.org\u002F",[17],{"title":40,"searchDepth":125,"depth":125,"links":173088},[173089,173090,173091],{"id":117129,"depth":125,"text":117129},{"id":173029,"depth":125,"text":173029},{"id":173056,"depth":125,"text":173056},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23461},"\u002Fwiki\u002F2024-10-10-python",{"title":172928,"description":173092},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331444752]